From fb3f932549f052a854ff24231601e77cb27abf4c Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 17:54:20 +0000 Subject: [PATCH 01/14] chore: refresh content and add lint + link-check workflows Refresh README and CONTRIBUTING to match current Coder positioning (self-hosted CDEs and AI coding agents) and remove dead anchors, stale URLs, and commented-out placeholders that have sat unused since the original fork from awesome-pulumi. README: - Update Awesome badge to the canonical https://awesome.re source. - Restructure the header so the right-aligned logo no longer breaks the blockquote, and add alt text to the image. - Refresh the tagline to describe Coder as it positions itself today. - Drop the 2022 HashiCorp pull-quote. - Update Documentation, Blog, Discord, X (formerly Twitter), and other Official Resources links. Strip stale utm_* parameters from internal links. - Remove empty / commented-out sections: Books, Beginner Guides, What is Coder?, per-cloud headings, Comparison, Miscellaneous, Companies using Coder, and the standalone License heading. - Templates section now points at registry.coder.com as the canonical source instead of the in-tree examples directory and the duplicate community-templates.md. - Normalize bullet style and add one-line descriptions where needed so the file conforms to awesome-lint. - Fix minor copy: NodeJS -> Node.js, Kubevirt -> KubeVirt, vscode -> VS Code, Setup -> Set up, missing trailing periods. CONTRIBUTING: - Rewrite for Coder. Removes the leftover "Pulumi community" line inherited from awesome-pulumi. Automation: - Add markdownlint, awesome-lint, and lychee link-check workflows so the README stays current. - Add .markdownlint.jsonc mirroring coder/coder defaults. - Add issue templates for broken links and resource suggestions. This change was prepared by Coder Agents. --- .github/ISSUE_TEMPLATE/broken-link.yml | 27 ++++++ .github/ISSUE_TEMPLATE/suggest-resource.yml | 48 ++++++++++ .github/workflows/awesome-lint.yml | 25 ++++++ .github/workflows/link-check.yml | 46 ++++++++++ .github/workflows/markdownlint.yml | 23 +++++ .lycheeignore | 7 ++ .markdownlint-cli2.jsonc | 3 + .markdownlint.jsonc | 14 +++ CONTRIBUTING.md | 12 +-- README.md | 99 +++++++-------------- 10 files changed, 231 insertions(+), 73 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/broken-link.yml create mode 100644 .github/ISSUE_TEMPLATE/suggest-resource.yml create mode 100644 .github/workflows/awesome-lint.yml create mode 100644 .github/workflows/link-check.yml create mode 100644 .github/workflows/markdownlint.yml create mode 100644 .lycheeignore create mode 100644 .markdownlint-cli2.jsonc create mode 100644 .markdownlint.jsonc diff --git a/.github/ISSUE_TEMPLATE/broken-link.yml b/.github/ISSUE_TEMPLATE/broken-link.yml new file mode 100644 index 0000000..930ca6d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/broken-link.yml @@ -0,0 +1,27 @@ +name: Broken link +description: Report a broken or out-of-date link in the README. +title: "[broken link]: " +labels: ["broken-links"] +body: + - type: input + id: section + attributes: + label: Section + description: Which section of `README.md` contains the broken link? + placeholder: Templates + validations: + required: true + - type: input + id: url + attributes: + label: URL + description: The exact URL that no longer works. + validations: + required: true + - type: textarea + id: details + attributes: + label: Details + description: Any extra context (404, redirects to an unrelated page, archived repo, etc.). + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/suggest-resource.yml b/.github/ISSUE_TEMPLATE/suggest-resource.yml new file mode 100644 index 0000000..daf5876 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/suggest-resource.yml @@ -0,0 +1,48 @@ +name: Suggest a resource +description: Suggest a resource to add to the list. +title: "[suggestion]: " +labels: ["suggestion"] +body: + - type: input + id: name + attributes: + label: Name + description: Name of the resource. + validations: + required: true + - type: input + id: url + attributes: + label: URL + validations: + required: true + - type: dropdown + id: section + attributes: + label: Suggested section + options: + - Official Resources + - Tutorials and Blog Posts + - IDEs + - Automation + - Templates + - Talks and Videos + - Other (explain below) + validations: + required: true + - type: textarea + id: description + attributes: + label: One-line description + description: Format as it would appear in the README, e.g. "[Name](url) - One-line description." + validations: + required: true + - type: checkboxes + id: checks + attributes: + label: Checks + options: + - label: I have read the [contribution guidelines](https://github.com/coder/awesome-coder/blob/main/CONTRIBUTING.md). + required: true + - label: The resource is actively maintained. + required: false diff --git a/.github/workflows/awesome-lint.yml b/.github/workflows/awesome-lint.yml new file mode 100644 index 0000000..a94969c --- /dev/null +++ b/.github/workflows/awesome-lint.yml @@ -0,0 +1,25 @@ +name: awesome-lint + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + awesome-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Run awesome-lint + run: npx -y awesome-lint diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml new file mode 100644 index 0000000..06bd622 --- /dev/null +++ b/.github/workflows/link-check.yml @@ -0,0 +1,46 @@ +name: Link check + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + # Mondays at 14:00 UTC. + - cron: "0 14 * * 1" + workflow_dispatch: + +permissions: + contents: read + issues: write + +jobs: + lychee: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Run lychee + id: lychee + uses: lycheeverse/lychee-action@v2 + with: + args: >- + --verbose + --no-progress + --max-concurrency 4 + --retry-wait-time 5 + --accept 200,206,403,429 + --exclude-mail + './**/*.md' + fail: ${{ github.event_name == 'pull_request' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Open or update an issue on scheduled failure + if: failure() && github.event_name == 'schedule' + uses: peter-evans/create-issue-from-file@v5 + with: + title: Broken links detected by scheduled link check + content-filepath: ./lychee/out.md + labels: broken-links, automated diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml new file mode 100644 index 0000000..bc92883 --- /dev/null +++ b/.github/workflows/markdownlint.yml @@ -0,0 +1,23 @@ +name: markdownlint + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + markdownlint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Run markdownlint-cli2 + uses: DavidAnson/markdownlint-cli2-action@v17 + with: + globs: | + **/*.md diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..dc56982 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,7 @@ +# Hosts that block bots even though the content is public. +# Verified manually before being added here. +medium.com +blog.palantir.com +forrester.com +coder.com/forrester +linkedin.com diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc new file mode 100644 index 0000000..62fe8b5 --- /dev/null +++ b/.markdownlint-cli2.jsonc @@ -0,0 +1,3 @@ +{ + "ignores": ["PLAN.md", "node_modules"] +} diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc new file mode 100644 index 0000000..9f0a36e --- /dev/null +++ b/.markdownlint.jsonc @@ -0,0 +1,14 @@ +// Markdown lint config for awesome-coder. Mirrors coder/coder defaults. +{ + "MD010": { "spaces_per_tab": 4 }, // No hard tabs: we use 4 spaces per tab. + + "MD013": false, // Line length: we are not following a strict line length in markdown files. + + "MD024": { "siblings_only": true }, // Multiple headings with the same content allowed across sections. + + "MD033": false, // Inline HTML: used for the right-aligned logo and the License badge. + + "MD034": false, // Bare URL: tolerated for readability in places. + + "MD041": false // First line in file should be a top level heading: the README opens with a badge link before the H1. +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 730b16a..87392eb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ # Contribution guidelines -* Practice common sense and observe applicable [Awesome List Guidelines](https://github.com/sindresorhus/awesome/blob/main/contributing.md). -* Proof-read yourself. -* Please be nice. -* Be brave with contributing and commenting. -* Consider if the item you're adding to the list is actually pretty useful and/or exciting for the Pulumi community or newcomers. -* In case we gather a lot of links that are kinda-useful, but not exactly awesome, we could create another list within the repo. \ No newline at end of file +- Practice common sense and follow the [Awesome List Guidelines](https://github.com/sindresorhus/awesome/blob/main/contributing.md). +- Proof-read your entry before opening a PR. +- Be kind in comments and reviews. +- Each entry should be genuinely useful to Coder users, operators, or contributors. We prefer one well-maintained resource per niche over a long tail of stale links. +- Format entries as: `[Name](url) - One-line description.` New sections should match the existing structure in `README.md`. +- If something is no longer maintained, opening a PR to remove it is also a contribution. diff --git a/README.md b/README.md index 98c1f57..0be31e6 100644 --- a/README.md +++ b/README.md @@ -1,105 +1,70 @@ -# Awesome Coder [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) +# Awesome Coder [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) -> A curated list of resources on [Coder](https://www.coder.com/). -[](https://coder.com) -Your [contributions](https://github.com/coder/awesome-coder/blob/main/CONTRIBUTING.md) are welcome! +Coder logo -**Software development on _your infrastructure_**. Offload your team's development from local workstations to cloud servers. Onboard developers in minutes. Build, test and compile at the speed of the cloud. Keep your source code and data behind your firewall. +> A curated list of resources for [Coder](https://coder.com), the self-hosted platform for cloud development environments and AI coding agents. -> "By leveraging Terraform, Coder lets developers run an IDE on any compute platform including on-prem, AWS, Azure, GCP, DigitalOcean, Kubernetes, Docker, and more, with workspaces running on Linux, Windows, or Mac." - **[Kevin Fishner](https://www.linkedin.com/in/kevinfishner) Chief of Staff at [HashiCorp](https://hashicorp.com/)** +Define workspaces in Terraform, run them on your own infrastructure, and let developers and AI agents work in identical, ephemeral environments. +Your [contributions](CONTRIBUTING.md) are welcome! ## Contents -* [Official Resources](#official-resources) -* [Books](#books) -* [Tutorials and Blog Posts](#tutorials-and-blog-posts) -* [IDEs](#ides) -* [Templates](#templates) -* [Talks and Videos](#talks-and-videos) -* [Companies using Coder](#companies-using-coder) +- [Official Resources](#official-resources) +- [Tutorials and Blog Posts](#tutorials-and-blog-posts) +- [IDEs](#ides) +- [Automation](#automation) +- [Templates](#templates) +- [Talks and Videos](#talks-and-videos) ## Official Resources -- Case Studies ([Palantir](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53), [Forrester](https://coder.com/forrester?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md)) -- [Documentation](https://coder.com/docs/coder-oss/latest?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md) -- [Blog](https://coder.com/blog?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md) +- [Documentation](https://coder.com/docs) +- [Blog](https://coder.com/blog) - [Press kit & Brand styleguide](https://github.com/coder/presskit) - [Presentations](https://github.com/coder/presentations) -- [Discord](https://coder.com/chat?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md) -- [Twitter](https://twitter.com/CoderHQ) +- [Discord](https://cdr.co/discord-Y6fMxGdNRg) +- [X](https://x.com/CoderHQ) - [Mastodon](https://fosstodon.org/web/@coderhq) - - ## Tutorials and Blog Posts -- [The Benefits of Remote Ephemeral Workspaces](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53) -- [Laptop development is dead: why remote development is the future](https://medium.com/@elliotgraebert/laptop-development-is-dead-why-remote-development-is-the-future-f92ce103fd13) -- [Coder OSS on GKE with Terraform in <20 minutes](https://github.com/ElliotG/coder-oss-gke-tf) - -### Beginner Guides - -- [Coder 101: How Coder Works At A Higher Level](https://coder.com/blog/coder-101-how-coder-works-at-a-higher-level?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md) - -### What is Coder? - -- [What Coder is not](https://coder.com/docs/v2/latest#what-coder-is-not) - - - - - - - - - - - - - -### Comparison - -Coder maintains an official list of comparisons in the [coder/coder README.md](https://github.com/coder/coder#comparison). Please [file an issue](https://github.com/coder/coder/issues/new) if any of the information in that section is out of date. See also: [what Coder is not](https://coder.com/docs/coder-oss/latest/index#what-coder-is-not?utm_source=github.com/coder/awesome-coder&utm_medium=github&utm_campaign=readme.md) - -### Miscellaneous +- [Coder 101: How Coder Works At A Higher Level](https://coder.com/blog/coder-101-how-coder-works-at-a-higher-level) - High-level overview of how Coder works. +- [The Benefits of Remote Ephemeral Workspaces](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53) - Palantir on running ephemeral, remote development environments at scale. +- [Laptop development is dead: why remote development is the future](https://medium.com/@elliotgraebert/laptop-development-is-dead-why-remote-development-is-the-future-f92ce103fd13) - Argument for moving developer environments off laptops. +- [Coder OSS on GKE with Terraform in <20 minutes](https://github.com/ElliotG/coder-oss-gke-tf) - Terraform-driven Coder install on Google Kubernetes Engine. ## IDEs -- [Running a private VS Code Extension Marketplace](https://coder.com/blog/running-a-private-vs-code-extension-marketplace) +- [Running a private VS Code Extension Marketplace](https://coder.com/blog/running-a-private-vs-code-extension-marketplace) - Host an internal extension marketplace for code-server and VS Code workspaces. ## Automation -- [Provision Coder with Terraform](https://github.com/ElliotG/coder-oss-tf) - Coder OSS on GKE with Terraform in <20 minutes. -- [Update Coder Template](https://github.com/marketplace/actions/update-coder-template) - A GitHub action to automate coder template changes. +- [Provision Coder with Terraform](https://github.com/ElliotG/coder-oss-tf) - Coder OSS on GKE with Terraform in under 20 minutes. +- [Update Coder Template](https://github.com/marketplace/actions/update-coder-template) - A GitHub Action to automate Coder template changes. - [Provision Coder with Lima](https://github.com/coder/coder/tree/main/examples/lima) - Linux virtual machines, typically on macOS, for running containerd. -- [Coder on Hetzner Cloud](https://github.com/tmsmr/coder-hcloud) - One-shot deployment for Coder on Hetzner Cloud +- [Coder on Hetzner Cloud](https://github.com/tmsmr/coder-hcloud) - One-shot deployment for Coder on Hetzner Cloud. ## Templates -- [Official templates](https://github.com/coder/coder/tree/main/examples/templates) -- [Community templates](https://github.com/coder/coder/blob/main/examples/templates/community-templates.md) - +- [Coder Registry](https://registry.coder.com/templates) - Official and community templates published to the Coder Registry. - [sharkymark/v2-templates](https://github.com/sharkymark/v2-templates) - A large collection of templates. -- [ntimo/coder-hetzner-cloud-template](https://github.com/ntimo/coder-hetzner-cloud-template) - Setup a Hetzner Cloud instance as dev environment with or without vscode. -- [matifali/coder-templates](https://github.com/matifali/coder-templates) - Deeplearning with Jupyter Notebook/Lab and Matlab in browser. -- [m.lan/coder-templates](https://gitlab.com/m.lan/coder-templates) - Kubernetes template with Docker in Docker (DinD) +- [ntimo/coder-hetzner-cloud-template](https://github.com/ntimo/coder-hetzner-cloud-template) - Set up a Hetzner Cloud instance as a dev environment, with or without VS Code. +- [matifali/coder-templates](https://github.com/matifali/coder-templates) - Deep learning with Jupyter Notebook/Lab and MATLAB in the browser. +- [m.lan/coder-templates](https://gitlab.com/m.lan/coder-templates) - Kubernetes template with Docker in Docker (DinD). - [bpmct/coder-templates/proxmox-vm](https://github.com/bpmct/coder-templates/tree/main/proxmox-vm) - Develop in a Proxmox VM. -- [bpmct/coder-templates/shared-mac](https://github.com/bpmct/coder-templates/tree/main/shared-mac) - Connect a pre-provisioned Mac device and provision system users as workspaces +- [bpmct/coder-templates/shared-mac](https://github.com/bpmct/coder-templates/tree/main/shared-mac) - Connect a pre-provisioned Mac device and provision system users as workspaces. - [denbeigh2000/coder-templates/aws-nixos](https://github.com/denbeigh2000/coder-templates/tree/master/aws-nixos) - Manage a NixOS development workspace on EC2. - [denbeigh2000/coder-templates/aws-spot-nixos-graviton](https://github.com/denbeigh2000/coder-templates/tree/master/aws-spot-nixos-graviton) - Manage a NixOS development workspace on EC2 with Graviton Spot Instances. - [denbeigh2000/coder-templates/aws-spot-nixos](https://github.com/denbeigh2000/coder-templates/tree/master/aws-spot-nixos) - Manage a NixOS development workspace on EC2 with Spot Instances. - [8Bitz0/coder-rust-template](https://gitlab.com/8Bitz0/coder-rust-template) - Coder templates with various Linux distros for out-of-the-box Rust development. -- [uwu/basic-env](https://github.com/uwu/basic-env) - Docker-based NodeJS development environment with code-server, NoVNC and dotfiles support out of the box -- [sulo1337/coder-kubevirt-template](https://github.com/sulo1337/coder-kubevirt-template) - Kubevirt-based development environment which provisions KVM virtual machines as coder workspaces on top of a Kubernetes cluster. +- [uwu/basic-env](https://github.com/uwu/basic-env) - Docker-based Node.js development environment with code-server, NoVNC, and dotfiles support out of the box. +- [sulo1337/coder-kubevirt-template](https://github.com/sulo1337/coder-kubevirt-template) - KubeVirt-based development environment that provisions KVM virtual machines as Coder workspaces on top of a Kubernetes cluster. ## Talks and Videos -- [Your Next Workstation Is In The Cloud](https://www.youtube.com/watch?v=C4fQvIHCVzw&t=748s) +- [Your Next Workstation Is In The Cloud](https://www.youtube.com/watch?v=C4fQvIHCVzw&t=748s) - Talk on moving developer workstations to the cloud with Coder. -## License - -[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/) +[![CC0](https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/) To the extent possible under law, Coder has waived all copyright and related or neighboring rights to this work. - From 08dd77a4367310093d2d1e6b5078e489c00403de Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:06:54 +0000 Subject: [PATCH 02/14] ci: consolidate workflows to match coder/registry conventions Restructure CI to align with coder/coder and coder/registry patterns: - Single ci.yaml workflow with format, lint-awesome, lint-typos, and link-check jobs, replacing three separate workflow files. - Add concurrency group so PR pushes cancel in-flight runs. - Drop markdownlint in favor of Prettier (via Bun) for formatting, the way coder/registry handles it. awesome-lint already covers the markdown rules that mattered for an awesome list. - Add crate-ci/typos for spell-checking, with .github/typos.toml declaring Coder community usernames and domain terms. - Add a separate zizmor workflow to lint GitHub Actions for security issues, matching coder/registry. - Pin all GitHub Actions to commit SHAs. Repository hygiene: - Add .github/PULL_REQUEST_TEMPLATE.md for contribution structure. - Rewrite issue templates as 1-broken-link.yaml and 2-suggest-resource.yaml to match coder/coder naming, with an ISSUE_TEMPLATE/config.yml directing general questions to docs, registry, Discord, and discussions. - Add .github/dependabot.yaml for weekly Actions and npm updates. - Add package.json, bun.lock, and .prettierignore so contributors and CI use the same Bun + Prettier toolchain as coder/registry. - Add .gitignore for node_modules. This change was prepared by Coder Agents. --- .github/ISSUE_TEMPLATE/1-broken-link.yaml | 38 + .../ISSUE_TEMPLATE/2-suggest-resource.yaml | 61 ++ .github/ISSUE_TEMPLATE/broken-link.yml | 27 - .github/ISSUE_TEMPLATE/config.yml | 13 + .github/ISSUE_TEMPLATE/suggest-resource.yml | 48 -- .github/PULL_REQUEST_TEMPLATE.md | 30 + .github/dependabot.yaml | 19 + .github/typos.toml | 22 + .github/workflows/awesome-lint.yml | 25 - .github/workflows/ci.yaml | 106 +++ .github/workflows/link-check.yml | 46 -- .github/workflows/markdownlint.yml | 23 - .github/workflows/zizmor.yaml | 35 + .gitignore | 1 + .markdownlint-cli2.jsonc | 3 - .markdownlint.jsonc | 14 - .prettierignore | 9 + bun.lock | 671 ++++++++++++++++++ package.json | 13 + 19 files changed, 1018 insertions(+), 186 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/1-broken-link.yaml create mode 100644 .github/ISSUE_TEMPLATE/2-suggest-resource.yaml delete mode 100644 .github/ISSUE_TEMPLATE/broken-link.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/suggest-resource.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yaml create mode 100644 .github/typos.toml delete mode 100644 .github/workflows/awesome-lint.yml create mode 100644 .github/workflows/ci.yaml delete mode 100644 .github/workflows/link-check.yml delete mode 100644 .github/workflows/markdownlint.yml create mode 100644 .github/workflows/zizmor.yaml create mode 100644 .gitignore delete mode 100644 .markdownlint-cli2.jsonc delete mode 100644 .markdownlint.jsonc create mode 100644 .prettierignore create mode 100644 bun.lock create mode 100644 package.json diff --git a/.github/ISSUE_TEMPLATE/1-broken-link.yaml b/.github/ISSUE_TEMPLATE/1-broken-link.yaml new file mode 100644 index 0000000..982af8a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-broken-link.yaml @@ -0,0 +1,38 @@ +name: "🔗 Broken link" +description: "Report a broken or out-of-date link in the README." +title: "broken link: " +labels: ["broken-links"] +body: + - type: checkboxes + id: existing_issues + attributes: + label: "Is there an existing issue for this?" + description: "Please search to see if an issue already exists for this broken link." + options: + - label: "I have searched the existing issues" + required: true + + - type: input + id: section + attributes: + label: "Section" + description: "Which section of `README.md` contains the broken link?" + placeholder: "Templates" + validations: + required: true + + - type: input + id: url + attributes: + label: "URL" + description: "The exact URL that no longer works." + validations: + required: true + + - type: textarea + id: details + attributes: + label: "Details" + description: "Any extra context: 404, redirect to an unrelated page, archived repo, etc." + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml new file mode 100644 index 0000000..d35656a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml @@ -0,0 +1,61 @@ +name: "✨ Suggest a resource" +description: "Suggest a resource to add to the list." +title: "suggestion: " +labels: ["suggestion"] +body: + - type: checkboxes + id: existing_issues + attributes: + label: "Is there an existing issue for this?" + description: "Please search to see if the resource has already been suggested or listed." + options: + - label: "I have searched the existing issues and the README" + required: true + + - type: input + id: name + attributes: + label: "Name" + description: "Name of the resource." + validations: + required: true + + - type: input + id: url + attributes: + label: "URL" + validations: + required: true + + - type: dropdown + id: section + attributes: + label: "Suggested section" + options: + - Official Resources + - Tutorials and Blog Posts + - IDEs + - Automation + - Templates + - Talks and Videos + - Other (explain below) + validations: + required: true + + - type: textarea + id: description + attributes: + label: "One-line description" + description: "Format as it would appear in the README, e.g. `[Name](url) - One-line description.`" + validations: + required: true + + - type: checkboxes + id: checks + attributes: + label: "Checks" + options: + - label: "I have read the [contribution guidelines](../blob/main/CONTRIBUTING.md)." + required: true + - label: "The resource is actively maintained." + required: false diff --git a/.github/ISSUE_TEMPLATE/broken-link.yml b/.github/ISSUE_TEMPLATE/broken-link.yml deleted file mode 100644 index 930ca6d..0000000 --- a/.github/ISSUE_TEMPLATE/broken-link.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Broken link -description: Report a broken or out-of-date link in the README. -title: "[broken link]: " -labels: ["broken-links"] -body: - - type: input - id: section - attributes: - label: Section - description: Which section of `README.md` contains the broken link? - placeholder: Templates - validations: - required: true - - type: input - id: url - attributes: - label: URL - description: The exact URL that no longer works. - validations: - required: true - - type: textarea - id: details - attributes: - label: Details - description: Any extra context (404, redirects to an unrelated page, archived repo, etc.). - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9dc0df3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,13 @@ +contact_links: + - name: Coder Documentation + url: https://coder.com/docs + about: Official Coder documentation. + - name: Coder Registry + url: https://registry.coder.com + about: Official and community templates and modules. + - name: Coder Discord + url: https://cdr.co/discord-Y6fMxGdNRg + about: Get in touch with the Coder developers and community for support. + - name: Questions or discussion + url: https://github.com/coder/coder/discussions/new/choose + about: For general questions or discussion, use the coder/coder discussions board. diff --git a/.github/ISSUE_TEMPLATE/suggest-resource.yml b/.github/ISSUE_TEMPLATE/suggest-resource.yml deleted file mode 100644 index daf5876..0000000 --- a/.github/ISSUE_TEMPLATE/suggest-resource.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Suggest a resource -description: Suggest a resource to add to the list. -title: "[suggestion]: " -labels: ["suggestion"] -body: - - type: input - id: name - attributes: - label: Name - description: Name of the resource. - validations: - required: true - - type: input - id: url - attributes: - label: URL - validations: - required: true - - type: dropdown - id: section - attributes: - label: Suggested section - options: - - Official Resources - - Tutorials and Blog Posts - - IDEs - - Automation - - Templates - - Talks and Videos - - Other (explain below) - validations: - required: true - - type: textarea - id: description - attributes: - label: One-line description - description: Format as it would appear in the README, e.g. "[Name](url) - One-line description." - validations: - required: true - - type: checkboxes - id: checks - attributes: - label: Checks - options: - - label: I have read the [contribution guidelines](https://github.com/coder/awesome-coder/blob/main/CONTRIBUTING.md). - required: true - - label: The resource is actively maintained. - required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..8c6c55d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,30 @@ +## Description + + + +## Type of change + +- [ ] New resource added to the list +- [ ] Resource removed (no longer maintained, broken, etc.) +- [ ] Resource updated (URL change, description change, etc.) +- [ ] Documentation or content refresh +- [ ] CI, tooling, or repository maintenance +- [ ] Other + +## Resource information + + + +**Section:** +**Entry:** `[Name](url) - One-line description.` + +## Checklist + +- [ ] I have read the [contribution guidelines](../blob/main/CONTRIBUTING.md). +- [ ] My entry follows the `[Name](url) - One-line description.` format. +- [ ] The resource is actively maintained or otherwise worth listing. +- [ ] `bun fmt:ci` passes locally (or I'm relying on CI to confirm). + +## Related issues + + diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..e557ad2 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,19 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + groups: + github-actions: + patterns: + - "*" + + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + groups: + npm: + patterns: + - "*" diff --git a/.github/typos.toml b/.github/typos.toml new file mode 100644 index 0000000..ab54796 --- /dev/null +++ b/.github/typos.toml @@ -0,0 +1,22 @@ +[default.extend-words] +# Coder community handles / usernames that look like typos. +denbeigh = "denbeigh" +matifali = "matifali" +sharkymark = "sharkymark" +ntimo = "ntimo" +bpmct = "bpmct" +tmsmr = "tmsmr" +sulo = "sulo" +elliotgraebert = "elliotgraebert" + +# Domain-specific terms. +Kubevirt = "KubeVirt" +NixOS = "NixOS" +HashiCorp = "HashiCorp" + +[files] +extend-exclude = [ + "LICENSE", + "bun.lock", + "node_modules", +] diff --git a/.github/workflows/awesome-lint.yml b/.github/workflows/awesome-lint.yml deleted file mode 100644 index a94969c..0000000 --- a/.github/workflows/awesome-lint.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: awesome-lint - -on: - push: - branches: [main] - pull_request: - branches: [main] - -permissions: - contents: read - -jobs: - awesome-lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Run awesome-lint - run: npx -y awesome-lint diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..0d7b6ef --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,106 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + schedule: + # Mondays at 14:00 UTC, so broken links surface even between contributions. + - cron: "0 14 * * 1" + workflow_dispatch: + +# Cancel in-progress runs for pull requests when developers push new changes. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +jobs: + format: + name: Check formatting + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Install Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Validate formatting + run: bun fmt:ci + + lint-awesome: + name: Lint awesome list + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Install Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 + with: + bun-version: latest + + - name: Run awesome-lint + run: bun x awesome-lint + + lint-typos: + name: Check for typos + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Run typos + uses: crate-ci/typos@37bb98842b0d8c4ffebdb75301a13db0267cef89 # v1.47.2 + with: + config: .github/typos.toml + + link-check: + name: Check links + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Run lychee + id: lychee + uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 + with: + args: >- + --verbose + --no-progress + --max-concurrency 4 + --retry-wait-time 5 + --accept 200,206,403,429 + --exclude-mail + './**/*.md' + fail: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Open or update an issue when the scheduled run fails + if: failure() && github.event_name == 'schedule' + uses: peter-evans/create-issue-from-file@e8ef132d6df98ed982188e460ebb3b5d4ef3a9cd # v5.0.1 + with: + title: Broken links detected by scheduled link check + content-filepath: ./lychee/out.md + labels: broken-links, automated diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml deleted file mode 100644 index 06bd622..0000000 --- a/.github/workflows/link-check.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Link check - -on: - push: - branches: [main] - pull_request: - branches: [main] - schedule: - # Mondays at 14:00 UTC. - - cron: "0 14 * * 1" - workflow_dispatch: - -permissions: - contents: read - issues: write - -jobs: - lychee: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Run lychee - id: lychee - uses: lycheeverse/lychee-action@v2 - with: - args: >- - --verbose - --no-progress - --max-concurrency 4 - --retry-wait-time 5 - --accept 200,206,403,429 - --exclude-mail - './**/*.md' - fail: ${{ github.event_name == 'pull_request' }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Open or update an issue on scheduled failure - if: failure() && github.event_name == 'schedule' - uses: peter-evans/create-issue-from-file@v5 - with: - title: Broken links detected by scheduled link check - content-filepath: ./lychee/out.md - labels: broken-links, automated diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml deleted file mode 100644 index bc92883..0000000 --- a/.github/workflows/markdownlint.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: markdownlint - -on: - push: - branches: [main] - pull_request: - branches: [main] - -permissions: - contents: read - -jobs: - markdownlint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Run markdownlint-cli2 - uses: DavidAnson/markdownlint-cli2-action@v17 - with: - globs: | - **/*.md diff --git a/.github/workflows/zizmor.yaml b/.github/workflows/zizmor.yaml new file mode 100644 index 0000000..9f187fa --- /dev/null +++ b/.github/workflows/zizmor.yaml @@ -0,0 +1,35 @@ +name: GitHub Actions Security Analysis (zizmor) + +on: + pull_request: + branches: ["**"] + paths: + - ".github/workflows/**" + push: + branches: ["main"] + paths: + - ".github/workflows/**" + workflow_dispatch: + +permissions: {} + +jobs: + zizmor: + runs-on: ubuntu-latest + permissions: + contents: read + actions: read + steps: + - name: Checkout repository + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Run zizmor (blocking, HIGH only) + uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6 + with: + advanced-security: false + annotations: true + min-severity: high + inputs: | + .github/workflows diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc deleted file mode 100644 index 62fe8b5..0000000 --- a/.markdownlint-cli2.jsonc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignores": ["PLAN.md", "node_modules"] -} diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc deleted file mode 100644 index 9f0a36e..0000000 --- a/.markdownlint.jsonc +++ /dev/null @@ -1,14 +0,0 @@ -// Markdown lint config for awesome-coder. Mirrors coder/coder defaults. -{ - "MD010": { "spaces_per_tab": 4 }, // No hard tabs: we use 4 spaces per tab. - - "MD013": false, // Line length: we are not following a strict line length in markdown files. - - "MD024": { "siblings_only": true }, // Multiple headings with the same content allowed across sections. - - "MD033": false, // Inline HTML: used for the right-aligned logo and the License badge. - - "MD034": false, // Bare URL: tolerated for readability in places. - - "MD041": false // First line in file should be a top level heading: the README opens with a badge link before the H1. -} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..aaa4863 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Node and Bun dependencies +node_modules/ +bun.lock + +# Git and CI metadata +LICENSE + +# Lockfiles and generated content +*.lock diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..feef66c --- /dev/null +++ b/bun.lock @@ -0,0 +1,671 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "awesome-coder", + "devDependencies": { + "awesome-lint": "^0.18.1", + "prettier": "^3.7.4", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@sindresorhus/is": ["@sindresorhus/is@0.14.0", "", {}, "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@1.1.2", "", { "dependencies": { "defer-to-connect": "^1.0.1" } }, "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA=="], + + "@types/eslint": ["@types/eslint@7.29.0", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/mdast": ["@types/mdast@3.0.15", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ=="], + + "@types/minimist": ["@types/minimist@1.2.5", "", {}, "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag=="], + + "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], + + "@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + + "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], + + "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "append-type": ["append-type@1.0.2", "", {}, "sha512-hac740vT/SAbrFBLgLIWZqVT5PUAcGTWS5UkDDhr+OCizZSw90WKw6sWAEgGaYd2viIblggypMXwpjzHXOvAQg=="], + + "array-to-sentence": ["array-to-sentence@1.1.0", "", {}, "sha512-YkwkMmPA2+GSGvXj1s9NZ6cc2LBtR+uSeWTy2IGi5MR1Wag4DdrcjTxA/YV/Fw+qKlBeXomneZgThEbm/wvZbw=="], + + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "arrify": ["arrify@2.0.1", "", {}, "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="], + + "assert-valid-glob-opts": ["assert-valid-glob-opts@1.0.0", "", { "dependencies": { "glob-option-error": "^1.0.0", "validate-glob-opts": "^1.0.0" } }, "sha512-/mttty5Xh7wE4o7ttKaUpBJl0l04xWe3y6muy1j27gyzSsnceK0AYU9owPtUoL9z8+9hnPxztmuhdFZ7jRoyWw=="], + + "awesome-lint": ["awesome-lint@0.18.6", "", { "dependencies": { "arrify": "^2.0.1", "case": "^1.6.3", "emoji-regex": "^9.2.0", "execa": "^1.0.0", "git-clone": "^0.1.0", "github-slugger": "^1.3.0", "github-url-to-object": "^4.0.4", "globby": "^11.0.3", "got": "^9.6.0", "is-github-url": "^1.2.2", "is-url-superb": "^4.0.0", "mdast-util-to-string": "^1.1.0", "meow": "^9.0.0", "ora": "^5.1.0", "parse-github-url": "^1.0.2", "pify": "^5.0.0", "read-pkg": "^5.2.0", "remark": "^13.0.0", "remark-lint": "^8.0.0", "remark-lint-blockquote-indentation": "^2.0.1", "remark-lint-checkbox-character-style": "^3.0.0", "remark-lint-checkbox-content-indent": "^3.0.0", "remark-lint-code-block-style": "^2.0.1", "remark-lint-definition-case": "^2.0.1", "remark-lint-definition-spacing": "^2.0.1", "remark-lint-double-link": "^0.1.3", "remark-lint-emphasis-marker": "^2.0.1", "remark-lint-fenced-code-marker": "^2.0.1", "remark-lint-file-extension": "^1.0.5", "remark-lint-final-newline": "^1.0.5", "remark-lint-hard-break-spaces": "^2.0.1", "remark-lint-heading-style": "^2.0.1", "remark-lint-link-title-style": "^2.0.1", "remark-lint-list-item-bullet-indent": "^3.0.0", "remark-lint-list-item-content-indent": "^2.0.1", "remark-lint-list-item-indent": "^2.0.1", "remark-lint-match-punctuation": "^0.2.0", "remark-lint-no-auto-link-without-protocol": "^2.0.1", "remark-lint-no-blockquote-without-marker": "^4.0.0", "remark-lint-no-emphasis-as-heading": "^2.0.1", "remark-lint-no-empty-sections": "^4.0.0", "remark-lint-no-file-name-articles": "^1.0.5", "remark-lint-no-file-name-consecutive-dashes": "^1.0.5", "remark-lint-no-file-name-irregular-characters": "^1.0.5", "remark-lint-no-file-name-mixed-case": "^1.0.5", "remark-lint-no-file-name-outer-dashes": "^1.0.6", "remark-lint-no-heading-content-indent": "^3.0.0", "remark-lint-no-heading-indent": "^3.0.0", "remark-lint-no-heading-punctuation": "^2.0.1", "remark-lint-no-inline-padding": "^3.0.0", "remark-lint-no-multiple-toplevel-headings": "^2.0.1", "remark-lint-no-repeat-punctuation": "^0.1.3", "remark-lint-no-shell-dollars": "^2.0.2", "remark-lint-no-table-indentation": "^3.0.0", "remark-lint-no-undefined-references": "^3.0.0", "remark-lint-no-unneeded-full-reference-image": "^2.0.1", "remark-lint-no-unneeded-full-reference-link": "^2.0.1", "remark-lint-no-unused-definitions": "^2.0.1", "remark-lint-ordered-list-marker-style": "^2.0.1", "remark-lint-ordered-list-marker-value": "^2.0.1", "remark-lint-rule-style": "^2.0.1", "remark-lint-strong-marker": "^2.0.1", "remark-lint-table-cell-padding": "^3.0.0", "remark-lint-table-pipe-alignment": "^2.0.1", "remark-lint-table-pipes": "^3.0.0", "remark-lint-unordered-list-marker-style": "^2.0.1", "rmfr": "^2.0.0", "tempy": "^1.0.0", "to-vfile": "^6.1.0", "unified-lint-rule": "^1.0.6", "unist-util-find": "1.0.2", "unist-util-find-all-after": "^3.0.1", "unist-util-find-all-before": "^3.0.0", "unist-util-find-all-between": "^2.1.0", "unist-util-visit": "^2.0.3", "vfile-reporter-pretty": "^5.0.0" }, "bin": { "awesome-lint": "cli.js" } }, "sha512-QGFEPM6m3ejd62pMuxvvqoHxx7AXHmn2Q2ed8lwZe6J01emKXVbW6MkIWjlD4ZFS1WnDqE4V220emoXJemUnkw=="], + + "bail": ["bail@1.0.5", "", {}, "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "cacheable-request": ["cacheable-request@6.1.0", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", "responselike": "^1.0.2" } }, "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg=="], + + "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], + + "case": ["case@1.6.3", "", {}, "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities": ["character-entities@1.2.4", "", {}, "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="], + + "character-entities-legacy": ["character-entities-legacy@1.1.4", "", {}, "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="], + + "character-reference-invalid": ["character-reference-invalid@1.1.4", "", {}, "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="], + + "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], + + "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + + "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], + + "co": ["co@3.1.0", "", {}, "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA=="], + + "collapse-white-space": ["collapse-white-space@1.0.6", "", {}, "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], + + "crypto-random-string": ["crypto-random-string@2.0.0", "", {}, "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], + + "decamelize-keys": ["decamelize-keys@1.1.1", "", { "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" } }, "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg=="], + + "decompress-response": ["decompress-response@3.3.0", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA=="], + + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + + "defer-to-connect": ["defer-to-connect@1.1.3", "", {}, "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="], + + "del": ["del@6.1.1", "", { "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", "is-glob": "^4.0.1", "is-path-cwd": "^2.2.0", "is-path-inside": "^3.0.2", "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" } }, "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg=="], + + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "duplexer3": ["duplexer3@0.1.5", "", {}, "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="], + + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "eslint-formatter-pretty": ["eslint-formatter-pretty@4.1.0", "", { "dependencies": { "@types/eslint": "^7.2.13", "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", "eslint-rule-docs": "^1.1.5", "log-symbols": "^4.0.0", "plur": "^4.0.0", "string-width": "^4.2.0", "supports-hyperlinks": "^2.0.0" } }, "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ=="], + + "eslint-rule-docs": ["eslint-rule-docs@1.1.235", "", {}, "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A=="], + + "execa": ["execa@1.0.0", "", { "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" } }, "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-stream": ["get-stream@4.1.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w=="], + + "git-clone": ["git-clone@0.1.0", "", {}, "sha512-zs9rlfa7HyaJAKG9o+V7C6qfMzyc+tb1IIXdUFcOBcR1U7siKy/uPdauLlrH1mc0vOgUwIv4BF+QxPiiTYz3Rw=="], + + "github-slugger": ["github-slugger@1.5.0", "", {}, "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw=="], + + "github-url-to-object": ["github-url-to-object@4.0.6", "", { "dependencies": { "is-url": "^1.1.0" } }, "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "glob-option-error": ["glob-option-error@1.0.0", "", {}, "sha512-AD7lbWbwF2Ii9gBQsQIOEzwuqP/jsnyvK27/3JDq1kn/JyfDtYI6AWz3ZQwcPuQdHSBcFh+A2yT/SEep27LOGg=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + + "got": ["got@9.6.0", "", { "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", "get-stream": "^4.1.0", "lowercase-keys": "^1.0.1", "mimic-response": "^1.0.1", "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" } }, "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "hard-rejection": ["hard-rejection@2.1.0", "", {}, "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + + "indexed-filter": ["indexed-filter@1.0.3", "", { "dependencies": { "append-type": "^1.0.1" } }, "sha512-oBIzs6EARNMzrLgVg20fK52H19WcRHBiukiiEkw9rnnI//8rinEBMLrYdwEfJ9d4K7bjV1L6nSGft6H/qzHNgQ=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "inspect-with-kind": ["inspect-with-kind@1.0.5", "", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g=="], + + "irregular-plurals": ["irregular-plurals@3.5.0", "", {}, "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ=="], + + "is-alphabetical": ["is-alphabetical@1.0.4", "", {}, "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="], + + "is-alphanumerical": ["is-alphanumerical@1.0.4", "", { "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A=="], + + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-buffer": ["is-buffer@2.0.5", "", {}, "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="], + + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], + + "is-decimal": ["is-decimal@1.0.4", "", {}, "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-github-url": ["is-github-url@1.2.2", "", {}, "sha512-TuiCHA5zadRVryd5gDJzPZj7yJbyMeR2r7IK/gF9z2MZwPF+A7ML9YYO8CwzdLsmxeTmxlmC6GKIeQBWJFFMQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hexadecimal": ["is-hexadecimal@1.0.4", "", {}, "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="], + + "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-path-cwd": ["is-path-cwd@2.2.0", "", {}, "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="], + + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + + "is-plain-obj": ["is-plain-obj@1.1.0", "", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], + + "is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="], + + "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + + "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], + + "is-url-superb": ["is-url-superb@4.0.0", "", {}, "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "json-buffer": ["json-buffer@3.0.0", "", {}, "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "keyv": ["keyv@3.1.0", "", { "dependencies": { "json-buffer": "3.0.0" } }, "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA=="], + + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "lodash.iteratee": ["lodash.iteratee@4.7.0", "", {}, "sha512-yv3cSQZmfpbIKo4Yo45B1taEvxjNvcpF1CEOc0Y6dEyvhPIfEJE3twDwPgWTPQubcSgXyBwBKG6wpQvWMDOf6Q=="], + + "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + + "longest-streak": ["longest-streak@2.0.4", "", {}, "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg=="], + + "lowercase-keys": ["lowercase-keys@1.0.1", "", {}, "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="], + + "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "map-obj": ["map-obj@4.3.0", "", {}, "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="], + + "mdast-comment-marker": ["mdast-comment-marker@1.1.2", "", {}, "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ=="], + + "mdast-util-from-markdown": ["mdast-util-from-markdown@0.8.5", "", { "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", "micromark": "~2.11.0", "parse-entities": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ=="], + + "mdast-util-heading-style": ["mdast-util-heading-style@1.0.6", "", {}, "sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@0.6.5", "", { "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", "mdast-util-to-string": "^2.0.0", "parse-entities": "^2.0.0", "repeat-string": "^1.0.0", "zwitch": "^1.0.0" } }, "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ=="], + + "mdast-util-to-string": ["mdast-util-to-string@1.1.0", "", {}, "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A=="], + + "meow": ["meow@9.0.0", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromark": ["micromark@2.11.4", "", { "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" } }, "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], + + "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], + + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "minimist-options": ["minimist-options@4.1.0", "", { "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" } }, "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], + + "normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], + + "normalize-url": ["normalize-url@5.3.1", "", {}, "sha512-K1c7+vaAP+Yh5bOGmA10PGPpp+6h7WZrl7GwqKhUflBc9flU9pzG27DDeB9+iuhZkE3BJZOcgN1P/2sS5pqrWw=="], + + "npm-run-path": ["npm-run-path@2.0.2", "", { "dependencies": { "path-key": "^2.0.0" } }, "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + + "p-cancelable": ["p-cancelable@1.1.0", "", {}, "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="], + + "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], + + "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], + + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + + "parse-entities": ["parse-entities@2.0.0", "", { "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } }, "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ=="], + + "parse-github-url": ["parse-github-url@1.0.4", "", { "bin": { "parse-github-url": "cli.js" } }, "sha512-CEtCOt55fHmd6DpBc/N7H5NC4vJpcquhzzs9Iw2mRj8bVxo1O5TQI5MXKOMO7+yBOqD+5dKCCRK4Kj1KskZc6Q=="], + + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "pify": ["pify@5.0.0", "", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], + + "plur": ["plur@4.0.0", "", { "dependencies": { "irregular-plurals": "^3.2.0" } }, "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg=="], + + "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], + + "prepend-http": ["prepend-http@2.0.0", "", {}, "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA=="], + + "prettier": ["prettier@3.8.4", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q=="], + + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], + + "read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], + + "read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], + + "remark": ["remark@13.0.0", "", { "dependencies": { "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", "unified": "^9.1.0" } }, "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA=="], + + "remark-lint": ["remark-lint@8.0.0", "", { "dependencies": { "remark-message-control": "^6.0.0" } }, "sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg=="], + + "remark-lint-blockquote-indentation": ["remark-lint-blockquote-indentation@2.0.1", "", { "dependencies": { "mdast-util-to-string": "^1.0.2", "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-uJ9az/Ms9AapnkWpLSCJfawBfnBI2Tn1yUsPNqIFv6YM98ymetItUMyP6ng9NFPqDvTQBbiarulkgoEo0wcafQ=="], + + "remark-lint-checkbox-character-style": ["remark-lint-checkbox-character-style@3.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-691OJ5RdBRXVpvnOEiBhMB4uhHJSHVttw83O4qyAkNBiqxa1Axqhsz8FgmzYgRLQbOGd2ncVUcXG1LOJt6C0DQ=="], + + "remark-lint-checkbox-content-indent": ["remark-lint-checkbox-content-indent@3.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" } }, "sha512-+T4+hoY85qZE2drD2rCe14vF7fAgD3Kv2fkFd1HRvv3M5Riy148w/4YeoBI5U5BpybGTVUeEUYLCeJ8zbJLjkw=="], + + "remark-lint-code-block-style": ["remark-lint-code-block-style@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-eRhmnColmSxJhO61GHZkvO67SpHDshVxs2j3+Zoc5Y1a4zQT2133ZAij04XKaBFfsVLjhbY/+YOWxgvtjx2nmA=="], + + "remark-lint-definition-case": ["remark-lint-definition-case@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-M+XlThtQwEJLQnQb5Gi6xZdkw92rGp7m2ux58WMw/Qlcg02WgHR/O0OcHPe5VO5hMJrtI+cGG5T0svsCgRZd3w=="], + + "remark-lint-definition-spacing": ["remark-lint-definition-spacing@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-xK9DOQO5MudITD189VyUiMHBIKltW1oc55L7Fti3i9DedXoBG7Phm+V9Mm7IdWzCVkquZVgVk63xQdqzSQRrSQ=="], + + "remark-lint-double-link": ["remark-lint-double-link@0.1.3", "", { "dependencies": { "normalize-url": "^5.1.0" } }, "sha512-0zHUJimo0fNAqQPzwt6ii9pRYCxBU0wqilVlily1RxRyTqhy0ANgTQOERMaf+lkTEN1ADEeoyh9gE7VWzqI+WA=="], + + "remark-lint-emphasis-marker": ["remark-lint-emphasis-marker@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-7mpbAUrSnHiWRyGkbXRL5kfSKY9Cs8cdob7Fw+Z02/pufXMF4yRWaegJ5NTUu1RE+SKlF44wtWWjvcIoyY6/aw=="], + + "remark-lint-fenced-code-marker": ["remark-lint-fenced-code-marker@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-lujpjm04enn3ma6lITlttadld6eQ1OWAEcT3qZzvFHp+zPraC0yr0eXlvtDN/0UH8mrln/QmGiZp3i8IdbucZg=="], + + "remark-lint-file-extension": ["remark-lint-file-extension@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw=="], + + "remark-lint-final-newline": ["remark-lint-final-newline@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-rfLlW8+Fz2dqnaEgU4JwLA55CQF1T4mfSs/GwkkeUCGPenvEYwSkCN2KO2Gr1dy8qPoOdTFE1rSufLjmeTW5HA=="], + + "remark-lint-hard-break-spaces": ["remark-lint-hard-break-spaces@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-Qfn/BMQFamHhtbfLrL8Co/dbYJFLRL4PGVXZ5wumkUO5f9FkZC2RsV+MD9lisvGTkJK0ZEJrVVeaPbUIFM0OAw=="], + + "remark-lint-heading-style": ["remark-lint-heading-style@2.0.1", "", { "dependencies": { "mdast-util-heading-style": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-IrFLNs0M5Vbn9qg51AYhGUfzgLAcDOjh2hFGMz3mx664dV6zLcNZOPSdJBBJq3JQR4gKpoXcNwN1+FFaIATj+A=="], + + "remark-lint-link-title-style": ["remark-lint-link-title-style@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" } }, "sha512-+Q7Ew8qpOQzjqbDF6sUHmn9mKgje+m2Ho8Xz7cEnGIRaKJgtJzkn/dZqQM/az0gn3zaN6rOuwTwqw4EsT5EsIg=="], + + "remark-lint-list-item-bullet-indent": ["remark-lint-list-item-bullet-indent@3.0.0", "", { "dependencies": { "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-X2rleWP8XReC4LXKF7Qi5vYiPJkA4Grx5zxsjHofFrVRz6j0PYOCuz7vsO+ZzMunFMfom6FODnscSWz4zouDVw=="], + + "remark-lint-list-item-content-indent": ["remark-lint-list-item-content-indent@2.0.1", "", { "dependencies": { "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-OzUMqavxyptAdG7vWvBSMc9mLW9ZlTjbW4XGayzczd3KIr6Uwp3NEFXKx6MLtYIM/vwBqMrPQUrObOC7A2uBpQ=="], + + "remark-lint-list-item-indent": ["remark-lint-list-item-indent@2.0.1", "", { "dependencies": { "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-4IKbA9GA14Q9PzKSQI6KEHU/UGO36CSQEjaDIhmb9UOhyhuzz4vWhnSIsxyI73n9nl9GGRAMNUSGzr4pQUFwTA=="], + + "remark-lint-match-punctuation": ["remark-lint-match-punctuation@0.2.1", "", { "dependencies": { "unified-lint-rule": "^1.0.3", "unist-util-to-list-of-char": "^0.1.3" } }, "sha512-XgarnmpBHMsCNRnhTNLf/8dDe5/gXdA/mQnBDPG/XZFNMebS6GFnWQpuL3cyzLmuWD62I1A5ouZczRZcrWYrTQ=="], + + "remark-lint-no-auto-link-without-protocol": ["remark-lint-no-auto-link-without-protocol@2.0.1", "", { "dependencies": { "mdast-util-to-string": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-TFcXxzucsfBb/5uMqGF1rQA+WJJqm1ZlYQXyvJEXigEZ8EAxsxZGPb/gOQARHl/y0vymAuYxMTaChavPKaBqpQ=="], + + "remark-lint-no-blockquote-without-marker": ["remark-lint-no-blockquote-without-marker@4.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" } }, "sha512-Y59fMqdygRVFLk1gpx2Qhhaw5IKOR9T38Wf7pjR07bEFBGUNfcoNVIFMd1TCJfCPQxUyJzzSqfZz/KT7KdUuiQ=="], + + "remark-lint-no-emphasis-as-heading": ["remark-lint-no-emphasis-as-heading@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-z86+yWtVivtuGIxIC4g9RuATbgZgOgyLcnaleonJ7/HdGTYssjJNyqCJweaWSLoaI0akBQdDwmtJahW5iuX3/g=="], + + "remark-lint-no-empty-sections": ["remark-lint-no-empty-sections@4.0.0", "", { "dependencies": { "mdast-util-to-string": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-visit": "^1.0.0" } }, "sha512-Tx1nCu7Dq3dsJ500402sSvM0uVK/6khSuEjx8K8u9aHN+Y4vjL6h88xVzdzCmZq2J2yqyFnvMjG1y7lQv+DRvg=="], + + "remark-lint-no-file-name-articles": ["remark-lint-no-file-name-articles@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA=="], + + "remark-lint-no-file-name-consecutive-dashes": ["remark-lint-no-file-name-consecutive-dashes@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg=="], + + "remark-lint-no-file-name-irregular-characters": ["remark-lint-no-file-name-irregular-characters@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA=="], + + "remark-lint-no-file-name-mixed-case": ["remark-lint-no-file-name-mixed-case@1.0.5", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A=="], + + "remark-lint-no-file-name-outer-dashes": ["remark-lint-no-file-name-outer-dashes@1.0.6", "", { "dependencies": { "unified-lint-rule": "^1.0.0" } }, "sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w=="], + + "remark-lint-no-heading-content-indent": ["remark-lint-no-heading-content-indent@3.0.0", "", { "dependencies": { "mdast-util-heading-style": "^1.0.2", "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-yULDoVSIqKylLDfW6mVUbrHlyEWUSFtVFiKc+/BA412xDIhm8HZLUnP+FsuBC0OzbIZ+bO9Txy52WtO3LGnK1A=="], + + "remark-lint-no-heading-indent": ["remark-lint-no-heading-indent@3.0.0", "", { "dependencies": { "pluralize": "^8.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-b8ImhLv2AnRDxtYUODplzsl/7IwQ+lqRmD1bwbZgSerEP9MLaULW3SjH37EyA6z+8rCDjvEyppKKU6zec0TCjg=="], + + "remark-lint-no-heading-punctuation": ["remark-lint-no-heading-punctuation@2.0.1", "", { "dependencies": { "mdast-util-to-string": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-lY/eF6GbMeGu4cSuxfGHyvaQQBIq/6T/o+HvAR5UfxSTxmxZFwbZneAI2lbeR1zPcqOU87NsZ5ZZzWVwdLpPBw=="], + + "remark-lint-no-inline-padding": ["remark-lint-no-inline-padding@3.0.0", "", { "dependencies": { "mdast-util-to-string": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-3s9uW3Yux9RFC0xV81MQX3bsYs+UY7nPnRuMxeIxgcVwxQ4E/mTJd9QjXUwBhU9kdPtJ5AalngdmOW2Tgar8Cg=="], + + "remark-lint-no-multiple-toplevel-headings": ["remark-lint-no-multiple-toplevel-headings@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-VKSItR6c+u3OsE5pUiSmNusERNyQS9Nnji26ezoQ1uvy06k3RypIjmzQqJ/hCkSiF+hoyC3ibtrrGT8gorzCmQ=="], + + "remark-lint-no-repeat-punctuation": ["remark-lint-no-repeat-punctuation@0.1.4", "", { "dependencies": { "unified-lint-rule": "^1.0.3", "unist-util-map": "^1.0.4", "unist-util-to-list-of-char": "^0.1.3" } }, "sha512-JJduCs4FimdBcR1AB576SqIYOjt+7t8OjTnnlZMvjnw7lzkuL0+nNNHyNXVPaK6jxaLjEUhrH2/smU6vZFUT7g=="], + + "remark-lint-no-shell-dollars": ["remark-lint-no-shell-dollars@2.0.2", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-zhkHZOuyaD3r/TUUkkVqW0OxsR9fnSrAnHIF63nfJoAAUezPOu8D1NBsni6rX8H2DqGbPYkoeWrNsTwiKP0yow=="], + + "remark-lint-no-table-indentation": ["remark-lint-no-table-indentation@3.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" } }, "sha512-+l7GovI6T+3LhnTtz/SmSRyOb6Fxy6tmaObKHrwb/GAebI/4MhFS1LVo3vbiP/RpPYtyQoFbbuXI55hqBG4ibQ=="], + + "remark-lint-no-undefined-references": ["remark-lint-no-undefined-references@3.0.0", "", { "dependencies": { "collapse-white-space": "^1.0.4", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.1.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.1.0" } }, "sha512-0hzaJS9GuzSQVOeeNdJr/s66LRQOzp618xuOQPYWHcJdd+SCaRTyWbjMrTM/cCI5L1sYjgurp410NkIBQ32Vqg=="], + + "remark-lint-no-unneeded-full-reference-image": ["remark-lint-no-unneeded-full-reference-image@2.0.1", "", { "dependencies": { "collapse-white-space": "^1.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-ZqkrW6l/n1EmcGdtzBFoDygG2ehd/Wx46Id9Dagg15oLzwvbhp5mJIXArXU2qGrF82w1hfainCaZzyH/OBJtEg=="], + + "remark-lint-no-unneeded-full-reference-link": ["remark-lint-no-unneeded-full-reference-link@2.0.1", "", { "dependencies": { "collapse-white-space": "^1.0.0", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-OcPQiG6meVpvfydzxkxPdVc8jcXdklQW4gMjY2BevLtVoaIJ+dgNBPazyYHP/0EzpVY2RftD3CZ+5hiLW2rgpA=="], + + "remark-lint-no-unused-definitions": ["remark-lint-no-unused-definitions@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" } }, "sha512-+BMc0BOjc364SvKYLkspmxDch8OaKPbnUGgQBvK0Bmlwy42baR4C9zhwAWBxm0SBy5Z4AyM4G4jKpLXPH40Oxg=="], + + "remark-lint-ordered-list-marker-style": ["remark-lint-ordered-list-marker-style@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-Cnpw1Dn9CHn+wBjlyf4qhPciiJroFOEGmyfX008sQ8uGoPZsoBVIJx76usnHklojSONbpjEDcJCjnOvfAcWW1A=="], + + "remark-lint-ordered-list-marker-value": ["remark-lint-ordered-list-marker-value@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-blt9rS7OKxZ2NW8tqojELeyNEwPhhTJGVa+YpUkdEH+KnrdcD7Nzhnj6zfLWOx6jFNZk3jpq5nvLFAPteHaNKg=="], + + "remark-lint-rule-style": ["remark-lint-rule-style@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-hz4Ff9UdlYmtO6Czz99WJavCjqCer7Cav4VopXt+yVIikObw96G5bAuLYcVS7hvMUGqC9ZuM02/Y/iq9n8pkAg=="], + + "remark-lint-strong-marker": ["remark-lint-strong-marker@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-8X2IsW1jZ5FmW9PLfQjkL0OVy/J3xdXLcZrG1GTeQKQ91BrPFyEZqUM2oM6Y4S6LGtxWer+neZkPZNroZoRPBQ=="], + + "remark-lint-table-cell-padding": ["remark-lint-table-cell-padding@3.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-sEKrbyFZPZpxI39R8/r+CwUrin9YtyRwVn0SQkNQEZWZcIpylK+bvoKIldvLIXQPob+ZxklL0GPVRzotQMwuWQ=="], + + "remark-lint-table-pipe-alignment": ["remark-lint-table-pipe-alignment@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-O89U7bp0ja6uQkT2uQrNB76GaPvFabrHiUGhqEUnld21yEdyj7rgS57kn84lZNSuuvN1Oor6bDyCwWQGzzpoOQ=="], + + "remark-lint-table-pipes": ["remark-lint-table-pipes@3.0.0", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-QPokSazEdl0Y8ayUV9UB0Ggn3Jos/RAQwIo0z1KDGnJlGDiF80Jc6iU9RgDNUOjlpQffSLIfSVxH5VVYF/K3uQ=="], + + "remark-lint-unordered-list-marker-style": ["remark-lint-unordered-list-marker-style@2.0.1", "", { "dependencies": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" } }, "sha512-8KIDJNDtgbymEvl3LkrXgdxPMTOndcux3BHhNGB2lU4UnxSpYeHsxcDgirbgU6dqCAfQfvMjPvfYk19QTF9WZA=="], + + "remark-message-control": ["remark-message-control@6.0.0", "", { "dependencies": { "mdast-comment-marker": "^1.0.0", "unified-message-control": "^3.0.0" } }, "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA=="], + + "remark-parse": ["remark-parse@9.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^0.8.0" } }, "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw=="], + + "remark-stringify": ["remark-stringify@9.0.1", "", { "dependencies": { "mdast-util-to-markdown": "^0.6.0" } }, "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg=="], + + "repeat-string": ["repeat-string@1.6.1", "", {}, "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="], + + "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], + + "responselike": ["responselike@1.0.2", "", { "dependencies": { "lowercase-keys": "^1.0.0" } }, "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ=="], + + "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], + + "rmfr": ["rmfr@2.0.0", "", { "dependencies": { "assert-valid-glob-opts": "^1.0.0", "glob": "^7.1.2", "graceful-fs": "^4.1.11", "inspect-with-kind": "^1.0.4", "rimraf": "^2.6.2" } }, "sha512-nQptLCZeyyJfgbpf2x97k5YE8vzDn7bhwx9NlvODdhgbU0mL1ruh71X0HYdRaOEvWC7Cr+SfV0p5p+Ib5yOl7A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "shebang-command": ["shebang-command@1.2.0", "", { "dependencies": { "shebang-regex": "^1.0.0" } }, "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg=="], + + "shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], + + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "sliced": ["sliced@1.0.1", "", {}, "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA=="], + + "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], + + "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], + + "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + + "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-eof": ["strip-eof@1.0.0", "", {}, "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q=="], + + "strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-hyperlinks": ["supports-hyperlinks@2.3.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "temp-dir": ["temp-dir@2.0.0", "", {}, "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg=="], + + "tempy": ["tempy@1.0.1", "", { "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" } }, "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w=="], + + "to-readable-stream": ["to-readable-stream@1.0.0", "", {}, "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "to-vfile": ["to-vfile@6.1.0", "", { "dependencies": { "is-buffer": "^2.0.0", "vfile": "^4.0.0" } }, "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw=="], + + "trim-newlines": ["trim-newlines@3.0.1", "", {}, "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="], + + "trough": ["trough@1.0.5", "", {}, "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="], + + "type-fest": ["type-fest@0.18.1", "", {}, "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw=="], + + "unified": ["unified@9.2.2", "", { "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" } }, "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ=="], + + "unified-lint-rule": ["unified-lint-rule@1.0.6", "", { "dependencies": { "wrapped": "^1.0.1" } }, "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg=="], + + "unified-message-control": ["unified-message-control@3.0.3", "", { "dependencies": { "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" } }, "sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA=="], + + "unique-string": ["unique-string@2.0.0", "", { "dependencies": { "crypto-random-string": "^2.0.0" } }, "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg=="], + + "unist-util-find": ["unist-util-find@1.0.2", "", { "dependencies": { "lodash.iteratee": "^4.5.0", "unist-util-visit": "^1.1.0" } }, "sha512-ft06UDYzqi9o9RmGP0sZWI/zvLLQiBW2/MD+rW6mDqbOWDcmknGX9orQPspfuGRYWr8eSJAmfsBcvOpfGRJseA=="], + + "unist-util-find-all-after": ["unist-util-find-all-after@3.0.2", "", { "dependencies": { "unist-util-is": "^4.0.0" } }, "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ=="], + + "unist-util-find-all-before": ["unist-util-find-all-before@3.0.1", "", { "dependencies": { "unist-util-is": "^4.0.0" } }, "sha512-00YMzXOOu4z/qCHKQI6z7TeERAbIBda0E/1sZqP0cJdGd3d1OtUPvQlMhNCwz4QBFo//GcW2dHOYXPdu3jINdA=="], + + "unist-util-find-all-between": ["unist-util-find-all-between@2.1.0", "", { "dependencies": { "unist-util-find": "^1.0.1", "unist-util-is": "^4.0.2" } }, "sha512-OCCUtDD8UHKeODw3TPXyFDxPCbpgBzbGTTaDpR68nvxkwiVcawBqMVrokfBMvUi7ij2F5q7S4s4Jq5dvkcBt+w=="], + + "unist-util-generated": ["unist-util-generated@1.1.6", "", {}, "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg=="], + + "unist-util-is": ["unist-util-is@4.1.0", "", {}, "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="], + + "unist-util-map": ["unist-util-map@1.0.5", "", { "dependencies": { "object-assign": "^4.0.1" } }, "sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag=="], + + "unist-util-position": ["unist-util-position@3.1.0", "", {}, "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], + + "unist-util-to-list-of-char": ["unist-util-to-list-of-char@0.1.3", "", { "dependencies": { "unist-util-generated": "^1.1.6", "unist-util-visit": "^1.4.0" } }, "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA=="], + + "unist-util-visit": ["unist-util-visit@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" } }, "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@3.1.1", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" } }, "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg=="], + + "url-parse-lax": ["url-parse-lax@3.0.0", "", { "dependencies": { "prepend-http": "^2.0.0" } }, "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "validate-glob-opts": ["validate-glob-opts@1.0.2", "", { "dependencies": { "array-to-sentence": "^1.1.0", "indexed-filter": "^1.0.0", "inspect-with-kind": "^1.0.4", "is-plain-obj": "^1.1.0" } }, "sha512-3PKjRQq/R514lUcG9OEiW0u9f7D4fP09A07kmk1JbNn2tfeQdAHhlT+A4dqERXKu2br2rrxSM3FzagaEeq9w+A=="], + + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], + + "vfile": ["vfile@4.2.1", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" } }, "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA=="], + + "vfile-location": ["vfile-location@3.2.0", "", {}, "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA=="], + + "vfile-message": ["vfile-message@2.0.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="], + + "vfile-reporter-pretty": ["vfile-reporter-pretty@5.0.0", "", { "dependencies": { "eslint-formatter-pretty": "^4.0.0", "vfile-to-eslint": "^2.0.0" } }, "sha512-pynx5Xvqp6TArfaP6T1JcyZK45Z7iQH6mv4XV7ce0Kry9t15zWaoZqFQvs9PNvivgxm7PFKzZV/l88VswW8Upw=="], + + "vfile-statistics": ["vfile-statistics@1.1.4", "", {}, "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA=="], + + "vfile-to-eslint": ["vfile-to-eslint@2.0.2", "", { "dependencies": { "vfile-statistics": "^1.1.1" } }, "sha512-QvKxY1zCwLiDoM+Y4J46AHTRrY6WgVg9u8Ae/KbLRUmphcscmtIgSnttKefWH0X93JkONO+UD1DrltCpYYmDAQ=="], + + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + + "which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + + "wrapped": ["wrapped@1.0.1", "", { "dependencies": { "co": "3.1.0", "sliced": "^1.0.1" } }, "sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + + "zwitch": ["zwitch@1.0.5", "", {}, "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw=="], + + "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + + "cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "cacheable-request/lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], + + "cacheable-request/normalize-url": ["normalize-url@4.5.1", "", {}, "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="], + + "decamelize-keys/map-obj": ["map-obj@1.0.1", "", {}, "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="], + + "del/rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + + "mdast-util-from-markdown/mdast-util-to-string": ["mdast-util-to-string@2.0.0", "", {}, "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="], + + "mdast-util-to-markdown/mdast-util-to-string": ["mdast-util-to-string@2.0.0", "", {}, "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="], + + "minimist-options/arrify": ["arrify@1.0.1", "", {}, "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA=="], + + "normalize-package-data/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], + + "read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], + + "read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], + + "read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], + + "remark-lint-no-empty-sections/unist-util-visit": ["unist-util-visit@1.4.1", "", { "dependencies": { "unist-util-visit-parents": "^2.0.0" } }, "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw=="], + + "string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "tempy/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "tempy/type-fest": ["type-fest@0.16.0", "", {}, "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg=="], + + "unified/is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + + "unist-util-find/unist-util-visit": ["unist-util-visit@1.4.1", "", { "dependencies": { "unist-util-visit-parents": "^2.0.0" } }, "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw=="], + + "unist-util-to-list-of-char/unist-util-visit": ["unist-util-visit@1.4.1", "", { "dependencies": { "unist-util-visit-parents": "^2.0.0" } }, "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw=="], + + "read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], + + "remark-lint-no-empty-sections/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@2.1.2", "", { "dependencies": { "unist-util-is": "^3.0.0" } }, "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g=="], + + "unist-util-find/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@2.1.2", "", { "dependencies": { "unist-util-is": "^3.0.0" } }, "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g=="], + + "unist-util-to-list-of-char/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@2.1.2", "", { "dependencies": { "unist-util-is": "^3.0.0" } }, "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g=="], + + "remark-lint-no-empty-sections/unist-util-visit/unist-util-visit-parents/unist-util-is": ["unist-util-is@3.0.0", "", {}, "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="], + + "unist-util-find/unist-util-visit/unist-util-visit-parents/unist-util-is": ["unist-util-is@3.0.0", "", {}, "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="], + + "unist-util-to-list-of-char/unist-util-visit/unist-util-visit-parents/unist-util-is": ["unist-util-is@3.0.0", "", {}, "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="], + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bfad2fc --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "awesome-coder", + "private": true, + "scripts": { + "fmt": "bun x prettier --write .", + "fmt:ci": "bun x prettier --check .", + "lint": "bun x awesome-lint" + }, + "devDependencies": { + "awesome-lint": "^0.18.1", + "prettier": "^3.7.4" + } +} From ebac8f8e0ad15a45122a754f7ae9014e03c65ac8 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:08:22 +0000 Subject: [PATCH 03/14] ci: drop --exclude-mail flag, removed in lychee v0.23 Mail links are excluded by default now; passing the flag fails the action with 'unexpected argument'. This change was prepared by Coder Agents. --- .github/workflows/ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0d7b6ef..1e8a06c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -91,7 +91,6 @@ jobs: --max-concurrency 4 --retry-wait-time 5 --accept 200,206,403,429 - --exclude-mail './**/*.md' fail: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} env: From 63149156e650cea5285628b4dab600a7c8ef00fe Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:25:47 +0000 Subject: [PATCH 04/14] fix: repair broken template URLs and template file references denbeigh2000/coder-templates was restructured into a single module; the aws-nixos, aws-spot-nixos, and aws-spot-nixos-graviton sub-paths are 404. Consolidate to a single entry pointing at the repo root. ElliotG/coder-oss-gke-tf was renamed to ElliotG/coder-oss-tf and redirects. The Tutorials bullet and the Automation bullet pointed at the same repo through the redirect, which awesome-lint flagged as a duplicate link once both URLs were canonicalized. Drop the Tutorials copy and keep the Automation entry, which is the natural home for 'provision Coder with Terraform'. PR and issue templates referenced ../blob/main/CONTRIBUTING.md, which is not a valid filesystem path and broke local file resolution in lychee. Switch to the absolute GitHub URL so the link works both as a clickable link and as a target lychee can verify. Verified locally with curl against every URL in the repo plus prettier, awesome-lint, and typos. This change was prepared by Coder Agents. --- .github/ISSUE_TEMPLATE/2-suggest-resource.yaml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml index d35656a..7b6821e 100644 --- a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml +++ b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml @@ -55,7 +55,7 @@ body: attributes: label: "Checks" options: - - label: "I have read the [contribution guidelines](../blob/main/CONTRIBUTING.md)." + - label: "I have read the [contribution guidelines](https://github.com/coder/awesome-coder/blob/main/CONTRIBUTING.md)." required: true - label: "The resource is actively maintained." required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8c6c55d..fa14389 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -20,7 +20,7 @@ ## Checklist -- [ ] I have read the [contribution guidelines](../blob/main/CONTRIBUTING.md). +- [ ] I have read the [contribution guidelines](https://github.com/coder/awesome-coder/blob/main/CONTRIBUTING.md). - [ ] My entry follows the `[Name](url) - One-line description.` format. - [ ] The resource is actively maintained or otherwise worth listing. - [ ] `bun fmt:ci` passes locally (or I'm relying on CI to confirm). diff --git a/README.md b/README.md index 0be31e6..020b7f4 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,6 @@ Your [contributions](CONTRIBUTING.md) are welcome! - [Coder 101: How Coder Works At A Higher Level](https://coder.com/blog/coder-101-how-coder-works-at-a-higher-level) - High-level overview of how Coder works. - [The Benefits of Remote Ephemeral Workspaces](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53) - Palantir on running ephemeral, remote development environments at scale. - [Laptop development is dead: why remote development is the future](https://medium.com/@elliotgraebert/laptop-development-is-dead-why-remote-development-is-the-future-f92ce103fd13) - Argument for moving developer environments off laptops. -- [Coder OSS on GKE with Terraform in <20 minutes](https://github.com/ElliotG/coder-oss-gke-tf) - Terraform-driven Coder install on Google Kubernetes Engine. ## IDEs @@ -54,9 +53,7 @@ Your [contributions](CONTRIBUTING.md) are welcome! - [m.lan/coder-templates](https://gitlab.com/m.lan/coder-templates) - Kubernetes template with Docker in Docker (DinD). - [bpmct/coder-templates/proxmox-vm](https://github.com/bpmct/coder-templates/tree/main/proxmox-vm) - Develop in a Proxmox VM. - [bpmct/coder-templates/shared-mac](https://github.com/bpmct/coder-templates/tree/main/shared-mac) - Connect a pre-provisioned Mac device and provision system users as workspaces. -- [denbeigh2000/coder-templates/aws-nixos](https://github.com/denbeigh2000/coder-templates/tree/master/aws-nixos) - Manage a NixOS development workspace on EC2. -- [denbeigh2000/coder-templates/aws-spot-nixos-graviton](https://github.com/denbeigh2000/coder-templates/tree/master/aws-spot-nixos-graviton) - Manage a NixOS development workspace on EC2 with Graviton Spot Instances. -- [denbeigh2000/coder-templates/aws-spot-nixos](https://github.com/denbeigh2000/coder-templates/tree/master/aws-spot-nixos) - Manage a NixOS development workspace on EC2 with Spot Instances. +- [denbeigh2000/coder-templates](https://github.com/denbeigh2000/coder-templates) - Manage NixOS development workspaces on EC2, including spot and Graviton variants. - [8Bitz0/coder-rust-template](https://gitlab.com/8Bitz0/coder-rust-template) - Coder templates with various Linux distros for out-of-the-box Rust development. - [uwu/basic-env](https://github.com/uwu/basic-env) - Docker-based Node.js development environment with code-server, NoVNC, and dotfiles support out of the box. - [sulo1337/coder-kubevirt-template](https://github.com/sulo1337/coder-kubevirt-template) - KubeVirt-based development environment that provisions KVM virtual machines as Coder workspaces on top of a Kubernetes cluster. From 7a35f068e8ad0aa33d044e34d8a8c8a21ed203ba Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:27:28 +0000 Subject: [PATCH 05/14] chore: remove emoji from issue template names This change was prepared by Coder Agents. --- .github/ISSUE_TEMPLATE/1-broken-link.yaml | 2 +- .github/ISSUE_TEMPLATE/2-suggest-resource.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/1-broken-link.yaml b/.github/ISSUE_TEMPLATE/1-broken-link.yaml index 982af8a..64d07fe 100644 --- a/.github/ISSUE_TEMPLATE/1-broken-link.yaml +++ b/.github/ISSUE_TEMPLATE/1-broken-link.yaml @@ -1,4 +1,4 @@ -name: "🔗 Broken link" +name: "Broken link" description: "Report a broken or out-of-date link in the README." title: "broken link: " labels: ["broken-links"] diff --git a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml index 7b6821e..9c96a71 100644 --- a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml +++ b/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml @@ -1,4 +1,4 @@ -name: "✨ Suggest a resource" +name: "Suggest a resource" description: "Suggest a resource to add to the list." title: "suggestion: " labels: ["suggestion"] From 18ed684b2de1a92da683b376bbd60438a7b541e8 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:50:25 +0000 Subject: [PATCH 06/14] ci: drop redundant .lycheeignore lychee in ci.yaml already runs with --accept 200,206,403,429, which treats the bot-blocked responses from Medium, the Palantir blog, and Forrester as a valid status. The ignore file was belt-and-suspenders config that gave the false impression those URLs weren't being checked. The URLs are still structurally verified, we just accept their 403 response. This change was prepared by Coder Agents. --- .lycheeignore | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .lycheeignore diff --git a/.lycheeignore b/.lycheeignore deleted file mode 100644 index dc56982..0000000 --- a/.lycheeignore +++ /dev/null @@ -1,7 +0,0 @@ -# Hosts that block bots even though the content is public. -# Verified manually before being added here. -medium.com -blog.palantir.com -forrester.com -coder.com/forrester -linkedin.com From 546ffb76047913bee04b3ddf7328ba8f989484e0 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 18:58:40 +0000 Subject: [PATCH 07/14] ci: switch link checking to linkspector to match coder/coder The coder/coder repository uses umbrelladocs/action-linkspector for docs link checking because it drives a real Chromium via Puppeteer and can resolve URLs that bot-blocking sites return non-200 statuses for. Mirror that approach here so the link-check behavior is consistent across coder/coder docs and coder/awesome-coder. Changes: - .github/.linkspector.yml mirrors coder/coder's config: dirs, an ignorePatterns list seeded with localhost / example.com / mailto and any host that blocks GitHub runner IPs, and aliveStatusCodes: [200]. - .github/workflows/link-check.yaml mirrors the two-job structure of coder/coder weekly-docs.yaml: a prepare job pins and caches Chrome via @puppeteer/browsers, then a check job runs action-linkspector with PUPPETEER_EXECUTABLE_PATH pointing at the cached binary. - step-security/harden-runner guards both jobs. - pnpm corepack workaround copied from coder/coder for the action-linkspector pnpm install bug (UmbrellaDocs/action-linkspector issue 54). - Reporter switches to github-pr-review on PR so failures show up as inline review comments, github-check otherwise. Drop the lychee check-links job from ci.yaml. The CI workflow keeps the lightweight, fast jobs (format, lint-awesome, lint-typos) and link checking moves to its own workflow file, matching how coder/coder separates docs link checking from its main CI. Validated locally by running linkspector with PUPPETEER_EXECUTABLE_PATH pointed at the installed Chrome: 'All hyperlinks in the specified files are valid.' This change was prepared by Coder Agents. --- .github/.linkspector.yml | 21 ++++++ .github/workflows/ci.yaml | 35 --------- .github/workflows/link-check.yaml | 116 ++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 35 deletions(-) create mode 100644 .github/.linkspector.yml create mode 100644 .github/workflows/link-check.yaml diff --git a/.github/.linkspector.yml b/.github/.linkspector.yml new file mode 100644 index 0000000..7a70e50 --- /dev/null +++ b/.github/.linkspector.yml @@ -0,0 +1,21 @@ +# Linkspector config for awesome-coder. +# Mirrors the structure of coder/coder/.github/.linkspector.yml so the +# behavior stays consistent across the two repositories. +dirs: + - . +excludedDirs: + # Build output and dependencies have no value to lint. + - node_modules + - .git +ignorePatterns: + - pattern: "localhost" + - pattern: "127.0.0.1" + - pattern: "0.0.0.0" + - pattern: "example.com" + - pattern: "mailto:" + # Hosts known to block GitHub runner IPs even from a headless browser. + # Add new patterns here when a real URL is verified working in a normal + # browser but the runner consistently fails to reach it. + - pattern: "linkedin.com" +aliveStatusCodes: + - 200 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1e8a06c..666744c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -68,38 +68,3 @@ jobs: uses: crate-ci/typos@37bb98842b0d8c4ffebdb75301a13db0267cef89 # v1.47.2 with: config: .github/typos.toml - - link-check: - name: Check links - runs-on: ubuntu-latest - permissions: - contents: read - issues: write - steps: - - name: Check out code - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - with: - persist-credentials: false - - - name: Run lychee - id: lychee - uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 - with: - args: >- - --verbose - --no-progress - --max-concurrency 4 - --retry-wait-time 5 - --accept 200,206,403,429 - './**/*.md' - fail: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Open or update an issue when the scheduled run fails - if: failure() && github.event_name == 'schedule' - uses: peter-evans/create-issue-from-file@e8ef132d6df98ed982188e460ebb3b5d4ef3a9cd # v5.0.1 - with: - title: Broken links detected by scheduled link check - content-filepath: ./lychee/out.md - labels: broken-links, automated diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml new file mode 100644 index 0000000..fa9ed19 --- /dev/null +++ b/.github/workflows/link-check.yaml @@ -0,0 +1,116 @@ +name: Link check + +on: + push: + branches: [main] + pull_request: + paths: + - "**/*.md" + - ".github/.linkspector.yml" + - ".github/workflows/link-check.yaml" + schedule: + # Mondays at 14:00 UTC. + - cron: "0 14 * * 1" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + prepare-linkspector-browser: + # Mirrors coder/coder weekly-docs.yaml: pin Chrome and cache it so + # linkspector does not download a mutable browser at runtime. + # Later versions of Ubuntu have disabled unprivileged user namespaces, + # which the linkspector action requires. + runs-on: ubuntu-22.04 + permissions: + contents: read + env: + CHROME_BUILD_ID: "145.0.7632.77" + outputs: + browser-cache-key: ${{ steps.browser-versions.outputs.cache-key }} + chrome-path: ${{ steps.install-chrome.outputs.path }} + steps: + - name: Harden Runner + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 + with: + egress-policy: audit + + - name: Checkout + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Set up Node.js + uses: actions/setup-node@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6 + with: + node-version: "20" + + - name: Compute browser cache key + id: browser-versions + env: + RUNNER_OS: ${{ runner.os }} + RUNNER_ARCH: ${{ runner.arch }} + run: | + set -euo pipefail + echo "cache-key=puppeteer-${RUNNER_OS}-${RUNNER_ARCH}-chrome-${CHROME_BUILD_ID}" >> "$GITHUB_OUTPUT" + + - name: Restore Puppeteer browser cache + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: ~/.cache/puppeteer + key: ${{ steps.browser-versions.outputs.cache-key }} + + - name: Install Linkspector Chrome + id: install-chrome + run: | + set -euo pipefail + chrome_path="$(npx -y @puppeteer/browsers install "chrome@${CHROME_BUILD_ID}" --path "${HOME}/.cache/puppeteer" --format '{{path}}')" + echo "path=${chrome_path}" >> "$GITHUB_OUTPUT" + + check-links: + needs: prepare-linkspector-browser + runs-on: ubuntu-22.04 + permissions: + pull-requests: write + steps: + - name: Harden Runner + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 + with: + egress-policy: audit + + - name: Checkout + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + # action-linkspector has a pnpm install step that fails without an + # existing pnpm store. See: + # https://github.com/UmbrellaDocs/action-linkspector/issues/54 + - name: Enable corepack and create pnpm store + run: | + corepack enable pnpm + mkdir -p "$(pnpm store path --silent)" + + - name: Restore Puppeteer browser cache + uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: ~/.cache/puppeteer + key: ${{ needs.prepare-linkspector-browser.outputs.browser-cache-key }} + + - name: Check Markdown links + uses: umbrelladocs/action-linkspector@036f295d12b67b0c4b445bc83db0538afb78db69 # v1.5.2 + env: + # Use the Chrome build prepared from the pinned Puppeteer instead + # of letting linkspector download a mutable browser at runtime. + # See: https://github.com/UmbrellaDocs/action-linkspector/issues/62 + PUPPETEER_EXECUTABLE_PATH: ${{ needs.prepare-linkspector-browser.outputs.chrome-path }} + with: + reporter: ${{ github.event_name == 'pull_request' && 'github-pr-review' || 'github-check' }} + config_file: .github/.linkspector.yml + fail_on_error: "true" + filter_mode: "file" From 0547a3a24afd5548446466a6d206c8026cd56e70 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:01:03 +0000 Subject: [PATCH 08/14] ci: correct actions/setup-node SHA in link-check workflow The previous SHA was actually actions/setup-go@v6, mis-pasted from coder/coder. setup-node@v6 resolves to 48b55a01. Caught by both the workflow itself failing to resolve the action and by zizmor's impostor_commit audit. This change was prepared by Coder Agents. --- .github/workflows/link-check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml index fa9ed19..cd30de1 100644 --- a/.github/workflows/link-check.yaml +++ b/.github/workflows/link-check.yaml @@ -46,7 +46,7 @@ jobs: persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: "20" From 1739cb0adf0f9e9c1c6404b08396bc9e156c2b7f Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:12:22 +0000 Subject: [PATCH 09/14] ci: make link-check log readable and warn on archived repos action-linkspector pipes linkspector through reviewdog and stays silent on success, so the log jumped from 'Running linkspector with reviewdog' straight to step exit with no visibility into what was checked. Add two steps before action-linkspector: - 'List URLs found in Markdown files' greps and sorts every URL the workflow is about to verify, so the log explicitly shows what is in scope. - 'Run linkspector (verbose log)' runs the linkspector CLI standalone with --showstat and --check-archived. --showstat prints the count summary (total links checked, working, failed, archived). --check- archived warns when a listed GitHub repository is archived, which is useful signal for a curated list. action-linkspector still runs (with if: always()) so the PR review comment integration that mirrors coder/coder/.github/workflows/ weekly-docs.yaml is preserved. This change was prepared by Coder Agents. --- .github/workflows/link-check.yaml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml index cd30de1..c62078c 100644 --- a/.github/workflows/link-check.yaml +++ b/.github/workflows/link-check.yaml @@ -102,7 +102,34 @@ jobs: path: ~/.cache/puppeteer key: ${{ needs.prepare-linkspector-browser.outputs.browser-cache-key }} + - name: Set up Node.js + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: "20" + + # action-linkspector pipes linkspector through reviewdog, which only + # surfaces failures and stays silent on success. Run linkspector + # standalone first so the workflow log shows every URL that was + # checked, then let action-linkspector run for the PR review comment + # integration. + - name: List URLs found in Markdown files + run: | + set -euo pipefail + echo "URLs discovered in Markdown files (subject to linkspector ignorePatterns):" + echo + grep -hoE '(https?|ftp)://[^)\" >\`'\'''<]+' \ + --include='*.md' -r . \ + --exclude-dir=node_modules \ + --exclude-dir=.git \ + | sort -u + + - name: Run linkspector (verbose log) + env: + PUPPETEER_EXECUTABLE_PATH: ${{ needs.prepare-linkspector-browser.outputs.chrome-path }} + run: npx -y @umbrelladocs/linkspector check --showstat --check-archived -c .github/.linkspector.yml + - name: Check Markdown links + if: always() uses: umbrelladocs/action-linkspector@036f295d12b67b0c4b445bc83db0538afb78db69 # v1.5.2 env: # Use the Chrome build prepared from the pinned Puppeteer instead @@ -114,3 +141,4 @@ jobs: config_file: .github/.linkspector.yml fail_on_error: "true" filter_mode: "file" + show_stats: "true" From 48416da270e25301c82048ea08999b46a1445151 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:16:03 +0000 Subject: [PATCH 10/14] ci: fix grep quoting in link-check verbose step The previous regex tried to exclude apostrophes from the character class, which forced single-quote-inside-single-quote bash escaping that ended up mangled inside the YAML literal block. Bash failed with 'unexpected EOF while looking for matching ' on the runner. Use a simpler regex that does not include apostrophes (URLs in markdown almost never contain them, and our 35 URLs definitely don't), which lets the whole pattern stay inside one set of single quotes. Validated by extracting the run script from the YAML and running bash -n plus bash on it locally. This change was prepared by Coder Agents. --- .github/workflows/link-check.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml index c62078c..85cd8f1 100644 --- a/.github/workflows/link-check.yaml +++ b/.github/workflows/link-check.yaml @@ -117,11 +117,11 @@ jobs: set -euo pipefail echo "URLs discovered in Markdown files (subject to linkspector ignorePatterns):" echo - grep -hoE '(https?|ftp)://[^)\" >\`'\'''<]+' \ - --include='*.md' -r . \ + grep -rhoE 'https?://[^[:space:])"`<>]+' \ + --include='*.md' \ --exclude-dir=node_modules \ --exclude-dir=.git \ - | sort -u + . | sort -u - name: Run linkspector (verbose log) env: From 43a86b5839b19f5b79e0bc047dc32e2b014c0b51 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:24:46 +0000 Subject: [PATCH 11/14] ci: bump Node to 22, clean up link-check step name, drop archived Hetzner entry setup-node was pinned to 20 while @puppeteer/browsers, puppeteer-core, ink, slice-ansi, and cli-truncate all require node >= 22. The job worked but emitted six 'npm warn EBADENGINE' lines on every run. Bump both jobs to node 22. Rename 'Run linkspector (verbose log)' to 'Run linkspector'. The parenthetical was a hint about why this step exists alongside the action-linkspector one; the surrounding comment block already explains it more clearly. Drop tmsmr/coder-hcloud from the Automation section. Linkspector's --check-archived flagged it; the repo has been formally archived since 2022, its last commit was 2022-12-11, and it depends on Coder OSS internals (docker-compose.yaml path, install flow, Hetzner cx11 SKU retired in 2024) that have moved. There is no active fork. This change was prepared by Coder Agents. --- .github/workflows/link-check.yaml | 6 +++--- README.md | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml index 85cd8f1..c2cb4b9 100644 --- a/.github/workflows/link-check.yaml +++ b/.github/workflows/link-check.yaml @@ -48,7 +48,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: "20" + node-version: "22" - name: Compute browser cache key id: browser-versions @@ -105,7 +105,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: "20" + node-version: "22" # action-linkspector pipes linkspector through reviewdog, which only # surfaces failures and stays silent on success. Run linkspector @@ -123,7 +123,7 @@ jobs: --exclude-dir=.git \ . | sort -u - - name: Run linkspector (verbose log) + - name: Run linkspector env: PUPPETEER_EXECUTABLE_PATH: ${{ needs.prepare-linkspector-browser.outputs.chrome-path }} run: npx -y @umbrelladocs/linkspector check --showstat --check-archived -c .github/.linkspector.yml diff --git a/README.md b/README.md index 020b7f4..c67ac5b 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ Your [contributions](CONTRIBUTING.md) are welcome! - [Provision Coder with Terraform](https://github.com/ElliotG/coder-oss-tf) - Coder OSS on GKE with Terraform in under 20 minutes. - [Update Coder Template](https://github.com/marketplace/actions/update-coder-template) - A GitHub Action to automate Coder template changes. - [Provision Coder with Lima](https://github.com/coder/coder/tree/main/examples/lima) - Linux virtual machines, typically on macOS, for running containerd. -- [Coder on Hetzner Cloud](https://github.com/tmsmr/coder-hcloud) - One-shot deployment for Coder on Hetzner Cloud. ## Templates From 0e20a8112b19eb339cbd29f65d1d9bad2db998fd Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:30:27 +0000 Subject: [PATCH 12/14] ci: collapse link-check prepare and check jobs into one The original two-job structure mirrored coder/coder weekly-docs.yaml, which makes sense at the coder/coder docs scale (thousands of files, heavy Chrome cache reuse). For awesome-coder it is overkill: there are 2 markdown files, 39 URLs, and exactly one downstream consumer. The prepare job paid full runner spin-up overhead with no reuse to amortize it. Collapse into a single check-links job. Behavior is identical: same SHA-pinned actions, same Chrome build pin, same browser cache via actions/cache (which handles both restore and save in one step, so the cache/restore split that the two-job structure required goes away too). Chrome path now flows through a step output instead of a job output. Link-check stays in its own workflow file. The Chrome download and browser-based crawl are heavy compared to the format/lint/typos jobs in ci.yaml, and the schedule trigger plus paths filter belong with this workflow rather than complicating ci.yaml triggers. This change was prepared by Coder Agents. --- .github/workflows/link-check.yaml | 65 +++++++------------------------ 1 file changed, 15 insertions(+), 50 deletions(-) diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml index c2cb4b9..fdef153 100644 --- a/.github/workflows/link-check.yaml +++ b/.github/workflows/link-check.yaml @@ -21,19 +21,15 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: - prepare-linkspector-browser: - # Mirrors coder/coder weekly-docs.yaml: pin Chrome and cache it so - # linkspector does not download a mutable browser at runtime. + check-links: # Later versions of Ubuntu have disabled unprivileged user namespaces, # which the linkspector action requires. runs-on: ubuntu-22.04 permissions: contents: read + pull-requests: write env: CHROME_BUILD_ID: "145.0.7632.77" - outputs: - browser-cache-key: ${{ steps.browser-versions.outputs.cache-key }} - chrome-path: ${{ steps.install-chrome.outputs.path }} steps: - name: Harden Runner uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 @@ -50,44 +46,24 @@ jobs: with: node-version: "22" - - name: Compute browser cache key - id: browser-versions - env: - RUNNER_OS: ${{ runner.os }} - RUNNER_ARCH: ${{ runner.arch }} - run: | - set -euo pipefail - echo "cache-key=puppeteer-${RUNNER_OS}-${RUNNER_ARCH}-chrome-${CHROME_BUILD_ID}" >> "$GITHUB_OUTPUT" - - - name: Restore Puppeteer browser cache + - name: Cache Puppeteer Chrome + id: chrome-cache uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ~/.cache/puppeteer - key: ${{ steps.browser-versions.outputs.cache-key }} + key: puppeteer-${{ runner.os }}-${{ runner.arch }}-chrome-${{ env.CHROME_BUILD_ID }} - name: Install Linkspector Chrome id: install-chrome run: | set -euo pipefail + # @puppeteer/browsers is idempotent: when the cache hit restored the + # binary it just prints the existing path; on a cache miss it + # downloads Chrome into ~/.cache/puppeteer for actions/cache to save + # at the end of the job. chrome_path="$(npx -y @puppeteer/browsers install "chrome@${CHROME_BUILD_ID}" --path "${HOME}/.cache/puppeteer" --format '{{path}}')" echo "path=${chrome_path}" >> "$GITHUB_OUTPUT" - check-links: - needs: prepare-linkspector-browser - runs-on: ubuntu-22.04 - permissions: - pull-requests: write - steps: - - name: Harden Runner - uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 - with: - egress-policy: audit - - - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - with: - persist-credentials: false - # action-linkspector has a pnpm install step that fails without an # existing pnpm store. See: # https://github.com/UmbrellaDocs/action-linkspector/issues/54 @@ -96,22 +72,11 @@ jobs: corepack enable pnpm mkdir -p "$(pnpm store path --silent)" - - name: Restore Puppeteer browser cache - uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 - with: - path: ~/.cache/puppeteer - key: ${{ needs.prepare-linkspector-browser.outputs.browser-cache-key }} - - - name: Set up Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: "22" - # action-linkspector pipes linkspector through reviewdog, which only - # surfaces failures and stays silent on success. Run linkspector - # standalone first so the workflow log shows every URL that was - # checked, then let action-linkspector run for the PR review comment - # integration. + # surfaces failures and stays silent on success. List discovered URLs + # and run linkspector standalone first so the workflow log shows every + # URL that was checked, then let action-linkspector run for the PR + # review comment integration. - name: List URLs found in Markdown files run: | set -euo pipefail @@ -125,7 +90,7 @@ jobs: - name: Run linkspector env: - PUPPETEER_EXECUTABLE_PATH: ${{ needs.prepare-linkspector-browser.outputs.chrome-path }} + PUPPETEER_EXECUTABLE_PATH: ${{ steps.install-chrome.outputs.path }} run: npx -y @umbrelladocs/linkspector check --showstat --check-archived -c .github/.linkspector.yml - name: Check Markdown links @@ -135,7 +100,7 @@ jobs: # Use the Chrome build prepared from the pinned Puppeteer instead # of letting linkspector download a mutable browser at runtime. # See: https://github.com/UmbrellaDocs/action-linkspector/issues/62 - PUPPETEER_EXECUTABLE_PATH: ${{ needs.prepare-linkspector-browser.outputs.chrome-path }} + PUPPETEER_EXECUTABLE_PATH: ${{ steps.install-chrome.outputs.path }} with: reporter: ${{ github.event_name == 'pull_request' && 'github-pr-review' || 'github-check' }} config_file: .github/.linkspector.yml From 05168c1909b7353287c3f42bfe506ba7adaeaad6 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 19:33:38 +0000 Subject: [PATCH 13/14] docs(README.md): add descriptions to Official Resources bullets The bullets in Official Resources were the only ones in the README not following the '[Name](url) - Description.' format that CONTRIBUTING.md asks contributors to use. Add one-line descriptions so the section matches the convention used in Tutorials, IDEs, Automation, Templates, and Talks. Addresses the Copilot review comment on PR #9. This change was prepared by Coder Agents. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c67ac5b..6b72c3a 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ Your [contributions](CONTRIBUTING.md) are welcome! ## Official Resources -- [Documentation](https://coder.com/docs) -- [Blog](https://coder.com/blog) -- [Press kit & Brand styleguide](https://github.com/coder/presskit) -- [Presentations](https://github.com/coder/presentations) -- [Discord](https://cdr.co/discord-Y6fMxGdNRg) -- [X](https://x.com/CoderHQ) -- [Mastodon](https://fosstodon.org/web/@coderhq) +- [Documentation](https://coder.com/docs) - Official Coder documentation, including install, admin, and contributor guides. +- [Blog](https://coder.com/blog) - Posts from the Coder team covering product updates, deployments, and technical deep dives. +- [Press kit & Brand styleguide](https://github.com/coder/presskit) - Logos, brand assets, and brand guidelines. +- [Presentations](https://github.com/coder/presentations) - Talks and presentations released under CC0 for remix and reuse. +- [Discord](https://cdr.co/discord-Y6fMxGdNRg) - Community chat for developers and operators using Coder. +- [X](https://x.com/CoderHQ) - Official Coder account on X. +- [Mastodon](https://fosstodon.org/web/@coderhq) - Official Coder account on Mastodon. ## Tutorials and Blog Posts From ec033949a5b73c3e43e43af3ff711fed7e360574 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 12 Jun 2026 20:54:02 +0000 Subject: [PATCH 14/14] docs(README.md): apply Ben Potter's review feedback Official Resources: - Press kit link points at coder.com/brand instead of the dormant coder/presskit GitHub repo. Rename to 'Press kit & brand style guide' (sentence case). - Drop coder/presentations: that repo is dormant. - Drop fosstodon.org/web/@coderhq: the Mastodon account is no longer actively posted to. Tutorials and Blog Posts: - Drop the 'Coder 101' blog post. It pre-dates the v2 reorg. IDEs: - Add coder.com/docs/user-guides/workspace-access as the canonical entry point for connecting from VS Code, JetBrains, Cursor, code-server, or the CLI. Automation: - Replace ElliotG/coder-oss-tf with the official Validated Architectures docs. The former is from the Coder OSS era and no longer reflects how we recommend deploying. Talks and Videos: - Add 'Introduction to Coder Workspaces' as a current-product intro video. - Add Ben Potter's 'Building the IDE Golden Path' talk. - Attribute the existing 'Your Next Workstation Is In The Cloud' talk to its speaker, Ketan Gangatirkar. Issue templates: - Drop 1-broken-link.yaml. Linkspector already runs on every PR and on a weekly schedule, so reporters do not need a separate broken- link issue template. - Rename 2-suggest-resource.yaml to 1-suggest-resource.yaml so the numeric prefix stays sequential after the removal. This change was prepared by Coder Agents. --- .github/ISSUE_TEMPLATE/1-broken-link.yaml | 38 ------------------- ...-resource.yaml => 1-suggest-resource.yaml} | 0 README.md | 12 +++--- 3 files changed, 6 insertions(+), 44 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/1-broken-link.yaml rename .github/ISSUE_TEMPLATE/{2-suggest-resource.yaml => 1-suggest-resource.yaml} (100%) diff --git a/.github/ISSUE_TEMPLATE/1-broken-link.yaml b/.github/ISSUE_TEMPLATE/1-broken-link.yaml deleted file mode 100644 index 64d07fe..0000000 --- a/.github/ISSUE_TEMPLATE/1-broken-link.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: "Broken link" -description: "Report a broken or out-of-date link in the README." -title: "broken link: " -labels: ["broken-links"] -body: - - type: checkboxes - id: existing_issues - attributes: - label: "Is there an existing issue for this?" - description: "Please search to see if an issue already exists for this broken link." - options: - - label: "I have searched the existing issues" - required: true - - - type: input - id: section - attributes: - label: "Section" - description: "Which section of `README.md` contains the broken link?" - placeholder: "Templates" - validations: - required: true - - - type: input - id: url - attributes: - label: "URL" - description: "The exact URL that no longer works." - validations: - required: true - - - type: textarea - id: details - attributes: - label: "Details" - description: "Any extra context: 404, redirect to an unrelated page, archived repo, etc." - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/2-suggest-resource.yaml b/.github/ISSUE_TEMPLATE/1-suggest-resource.yaml similarity index 100% rename from .github/ISSUE_TEMPLATE/2-suggest-resource.yaml rename to .github/ISSUE_TEMPLATE/1-suggest-resource.yaml diff --git a/README.md b/README.md index 6b72c3a..77fce49 100644 --- a/README.md +++ b/README.md @@ -21,25 +21,23 @@ Your [contributions](CONTRIBUTING.md) are welcome! - [Documentation](https://coder.com/docs) - Official Coder documentation, including install, admin, and contributor guides. - [Blog](https://coder.com/blog) - Posts from the Coder team covering product updates, deployments, and technical deep dives. -- [Press kit & Brand styleguide](https://github.com/coder/presskit) - Logos, brand assets, and brand guidelines. -- [Presentations](https://github.com/coder/presentations) - Talks and presentations released under CC0 for remix and reuse. +- [Press kit & brand style guide](https://coder.com/brand) - Logos, brand assets, and brand guidelines. - [Discord](https://cdr.co/discord-Y6fMxGdNRg) - Community chat for developers and operators using Coder. - [X](https://x.com/CoderHQ) - Official Coder account on X. -- [Mastodon](https://fosstodon.org/web/@coderhq) - Official Coder account on Mastodon. ## Tutorials and Blog Posts -- [Coder 101: How Coder Works At A Higher Level](https://coder.com/blog/coder-101-how-coder-works-at-a-higher-level) - High-level overview of how Coder works. - [The Benefits of Remote Ephemeral Workspaces](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53) - Palantir on running ephemeral, remote development environments at scale. - [Laptop development is dead: why remote development is the future](https://medium.com/@elliotgraebert/laptop-development-is-dead-why-remote-development-is-the-future-f92ce103fd13) - Argument for moving developer environments off laptops. ## IDEs +- [Workspace access](https://coder.com/docs/user-guides/workspace-access) - Connect to Coder workspaces from VS Code, JetBrains, Cursor, code-server, and the CLI. - [Running a private VS Code Extension Marketplace](https://coder.com/blog/running-a-private-vs-code-extension-marketplace) - Host an internal extension marketplace for code-server and VS Code workspaces. ## Automation -- [Provision Coder with Terraform](https://github.com/ElliotG/coder-oss-tf) - Coder OSS on GKE with Terraform in under 20 minutes. +- [Validated architectures](https://coder.com/docs/admin/infrastructure/validated-architectures) - Reference architectures for deploying Coder in production on Kubernetes and other platforms. - [Update Coder Template](https://github.com/marketplace/actions/update-coder-template) - A GitHub Action to automate Coder template changes. - [Provision Coder with Lima](https://github.com/coder/coder/tree/main/examples/lima) - Linux virtual machines, typically on macOS, for running containerd. @@ -59,7 +57,9 @@ Your [contributions](CONTRIBUTING.md) are welcome! ## Talks and Videos -- [Your Next Workstation Is In The Cloud](https://www.youtube.com/watch?v=C4fQvIHCVzw&t=748s) - Talk on moving developer workstations to the cloud with Coder. +- [Introduction to Coder Workspaces](https://www.youtube.com/watch?v=KNnNREoizOM) - Overview of Coder workspaces and how they fit into a developer workflow. +- [Building the IDE Golden Path](https://www.youtube.com/watch?v=F6D-cXl_xUA) - Ben Potter on building a consistent IDE experience across teams with Coder. +- [Your Next Workstation Is In The Cloud](https://www.youtube.com/watch?v=C4fQvIHCVzw&t=748s) - Ketan Gangatirkar on moving developer workstations to the cloud with Coder. [![CC0](https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/)