diff --git a/.gitignore b/.gitignore index 2f9132364..04dfbaa44 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ dist/ node_modules/ .env *error.log +/site/.vitepress/cache/ diff --git a/.node-version b/.node-version index 620c5e1e9..54c65116f 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v22.9.0 +v24 diff --git a/README.md b/README.md index 45460d0c5..3340687d1 100644 --- a/README.md +++ b/README.md @@ -21,102 +21,11 @@
[![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/cli?name=true)](https://npmx.dev/package/@changesets/cli) -[![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./packages/cli/CHANGELOG.md) +[![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./packages/cli/CHANGELOG.md) [![pkg.pr.new](https://pkg.pr.new/badge/changesets/changesets)](https://pkg.pr.new/~/changesets/changesets) -The `changesets` workflow is designed to help when people are making changes, all the way through to publishing. It lets contributors declare how their changes should be released, then we automate updating package versions, and changelogs, and publishing new versions of packages based on the provided information. +Changesets is designed to help manage and describe changes, all the way through to publishing. It lets contributors declare how their changes should be released, and it'll handle updating package versions, changelogs, and publishing based on the provided changesets. -Changesets has a focus on solving these problems for multi-package repositories, and keeps packages that rely on each other within the multi-package repository up-to-date, as well as making it easy to make changes to groups of packages. +Changesets has a focus on solving these problems for monorepos, keeping packages that rely on each other up to date, as well as making it easy to make changes to groups of packages. Conceptually, the workflow is also beneficial for single package repos. -## How do we do that? - -A `changeset` is an intent to release a set of packages at particular [semver bump types](https://semver.org/) with a summary of the changes made. - -The **@changesets/cli** package allows you to write `changeset` files as you make changes, then combine any number of changesets into a release, that flattens the bump-types into a single release per package, handles internal dependencies in a multi-package-repository, and updates changelogs, as well as release all updated packages from a mono-repository with one command. - -## How do I get started? - -If you just want to jump in to using changesets, the [Intro to using changesets](./docs/intro-to-using-changesets.md) and [@changesets/cli](./packages/cli/README.md) docs are where you should head. - -If you want a detailed explanation of the concepts behind changesets, or to understand how you would build on top -of changesets, check out our [detailed-explanation](./docs/detailed-explanation.md). - -We also have a [dictionary](./docs/dictionary.md). - -## Integrating with CI - -While changesets can be an entirely manual process, we recommend integrating it with how your CI works. - -To check that PRs contain a changeset, we recommend using [the changeset bot](https://github.com/apps/changeset-bot), or if you want to fail builds on a changesets failure, run `yarn changeset status` in CI. - -To make releasing easier, you can use [this changesets github action](https://github.com/changesets/action) to automate creating versioning pull requests, and optionally publishing packages. - -## Documentation - -- [Intro to using changesets](./docs/intro-to-using-changesets.md) -- [Detailed explanation](./docs/detailed-explanation.md) -- [Common questions](./docs/common-questions.md) -- [Adding a changeset](./docs/adding-a-changeset.md) -- [Automating changesets](./docs/automating-changesets.md) -- [Checking for changesets](./docs/checking-for-changesets.md) -- [Command line options](./docs/command-line-options.md) -- [Config file options](./docs/config-file-options.md) -- [Decisions](./docs/decisions.md) -- [Dictionary](./docs/dictionary.md) -- [Fixed packages](./docs/fixed-packages.md) -- [Linked packages](./docs/linked-packages.md) -- [Modifying changelog format](./docs/modifying-changelog-format.md) -- [Prereleases](./docs/prereleases.md) -- [Problems publishing in monorepos](./docs/problems-publishing-in-monorepos.md) -- [Snapshot releases](./docs/snapshot-releases.md) -- [Versioning applications and other non-npm packages](./docs/versioning-apps.md) -- [Experimental Options](./docs/experimental-options.md) - -## Cool Projects already using Changesets for versioning and changelogs - -- [atlaskit](https://atlaskit.atlassian.com) -- [emotion](https://emotion.sh/docs/introduction) -- [keystone](https://keystonejs.com) -- [react-select](https://react-select.com/home) -- [XState](https://xstate.js.org) -- [pnpm](https://pnpm.io) -- [tinyhttp](https://github.com/talentlessguy/tinyhttp) -- [Firebase Javascript SDK](https://github.com/firebase/firebase-js-sdk) -- [Formik](https://github.com/jaredpalmer/formik) -- [MobX](https://github.com/mobxjs/mobx) -- [Nhost](https://github.com/nhost/nhost) -- [verdaccio](https://verdaccio.org) -- [Chakra UI](https://chakra-ui.com) -- [Astro](https://astro.build) -- [Biome](https://biomejs.dev) -- [SvelteKit](https://kit.svelte.dev) -- [Hydrogen](https://hydrogen.shopify.dev) -- [react-pdf](https://github.com/diegomura/react-pdf) -- [GraphQL Code Generator](https://github.com/dotansimha/graphql-code-generator) -- [GraphQL Yoga](https://github.com/dotansimha/graphql-yoga) -- [GraphQL-Mesh](https://github.com/Urigo/graphql-mesh) -- [GraphiQL](https://github.com/graphql/graphiql) -- [wagmi](https://github.com/wagmi-dev/wagmi) -- [refine](https://github.com/pankod/refine) -- [Modern Web](https://modern-web.dev) -- [Atomizer](https://github.com/acss-io/atomizer) -- [Medusa](https://github.com/medusajs/medusa) -- [OpenZeppelin Contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) -- [Block Protocol](https://github.com/blockprotocol/blockprotocol) -- [Remix](https://remix.run/) -- [Clerk](https://github.com/clerk/javascript) -- [Hey API](https://github.com/hey-api/openapi-ts) -- [neverthrow](https://github.com/supermacro/neverthrow) -- [Apollo Client](https://github.com/apollographql/apollo-client) -- [Adobe Spectrum CSS](https://github.com/adobe/spectrum-css) -- [Adobe Spectrum Web Components](https://github.com/adobe/spectrum-web-components) -- [React Email](https://react.email) - - - -# Thanks/Inspiration - -- [bolt](https://github.com/boltpkg/bolt) - Brought us a strong concept of how packages in a mono-repo should be able to interconnect, and provided the initial infrastructure to get inter-package information. -- [Atlassian](https://www.atlassian.com/) - The original idea/sponsor of the changesets code, and where many of the ideas and processes were fermented. It was originally implemented by the team behind [atlaskit](https://atlaskit.atlassian.com). -- [lerna-semantic-release](https://github.com/atlassian/lerna-semantic-release) - put down many of the initial patterns around updating packages within a multi-package-repository, and started us thinking about how to manage dependent packages. -- [Thinkmill](https://www.thinkmill.com.au) - For sponsoring the focused open sourcing of this project, and the version two rearchitecture. +Visit https://changesets.dev to learn more. diff --git a/docs/adding-a-changeset.md b/docs/adding-a-changeset.md index fed4c0a5a..84ce9330e 100644 --- a/docs/adding-a-changeset.md +++ b/docs/adding-a-changeset.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/faq#how-do-i-add-a-changeset + # Adding a changeset Hi! You might be here because a person or a bot has asked you to 'add a changeset' to a project. Let's walk through adding a changeset. But first, what is a changeset? diff --git a/docs/automating-changesets.md b/docs/automating-changesets.md index 7f00b334a..8d4e2e832 100644 --- a/docs/automating-changesets.md +++ b/docs/automating-changesets.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/automating + # Automating Changesets While changesets are designed to work with a fully manual process, it also provides tools to help automate these releases. These can be broken into two major decisions: diff --git a/docs/checking-for-changesets.md b/docs/checking-for-changesets.md index 8e4be6bb0..691366373 100644 --- a/docs/checking-for-changesets.md +++ b/docs/checking-for-changesets.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/automating#how-do-i-ensure-pull-requests-have-changesets + # Checking for changesets Using `@changesets/cli`, there is a `status` command. See the docs for it in the diff --git a/docs/command-line-options.md b/docs/command-line-options.md index ebdddda34..d2b4e6a44 100644 --- a/docs/command-line-options.md +++ b/docs/command-line-options.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/cli + # Command line options The command line for changesets is the main way of interacting with it. There are 4 main commands. If you are looking for how we recommend you setup and manage changesets with the commands, check out our [intro to using changesets](./intro-to-using-changesets.md) diff --git a/docs/common-questions.md b/docs/common-questions.md index d2e719a15..8fc70c06b 100644 --- a/docs/common-questions.md +++ b/docs/common-questions.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/faq + # Common Questions A quick list of common questions you might want answered to understand what changesets is doing, without going into minutiae or workflow. diff --git a/docs/config-file-options.md b/docs/config-file-options.md index 036bc6a0d..3275a6747 100644 --- a/docs/config-file-options.md +++ b/docs/config-file-options.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/config + # Configuring Changesets Changesets has a minimal amount of configuration options. Mostly these are for when you need to change the default workflows. These are stored in `.changeset/config.json`. Our default config is: diff --git a/docs/decisions.md b/docs/decisions.md index bddc29e24..97bce85b8 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/technical-decisions + # Decisions This file is a discussion of some of the rules and design decisions that have gone into making changesets. The goal of all of these has been to make the experience of using changesets easy, while still providing the maximum value possible. diff --git a/docs/detailed-explanation.md b/docs/detailed-explanation.md index de4ac8b5e..e86116d9d 100644 --- a/docs/detailed-explanation.md +++ b/docs/detailed-explanation.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/why + # A Detailed Explanation of Changesets Below, you will find a detailed explanation of what changesets are, and how they are being thought about. diff --git a/docs/dictionary.md b/docs/dictionary.md index 6eb4f2342..39a0a8db7 100644 --- a/docs/dictionary.md +++ b/docs/dictionary.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. There is no up-to-date version of this documentation as the relevant concepts are explained inlined where needed. + # Changesets Dictionary This is a list of some words and phrases that are used in changesets which are helpful to know so that contributors to changesets have a shared understanding of various concepts in the project. diff --git a/docs/experimental-options.md b/docs/experimental-options.md index 9eb163949..c5a8f3ade 100644 --- a/docs/experimental-options.md +++ b/docs/experimental-options.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/config#experimentalunsafeoptions-will-change-in-patch + # Experimental Options All experimental options are configured in `config.json` under `___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH` flag. diff --git a/docs/fixed-packages.md b/docs/fixed-packages.md index 0afdcecfb..98b2a928b 100644 --- a/docs/fixed-packages.md +++ b/docs/fixed-packages.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/fixed-packages + # Fixed Packages Fixed packages allow you to specify a group or groups of packages that should be versioned and published together. diff --git a/docs/intro-to-using-changesets.md b/docs/intro-to-using-changesets.md index 61e71faf3..bb9dac225 100644 --- a/docs/intro-to-using-changesets.md +++ b/docs/intro-to-using-changesets.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/getting-started + # Using Changesets Changesets are designed to make your workflows easier, by allowing the person making contributions to make key decisions when they are making their contribution. Changesets hold two key bits of information: a version type (following [semver](https://semver.org/)), and change information to be added to a changelog. diff --git a/docs/linked-packages.md b/docs/linked-packages.md index 6e826af57..905d3c18b 100644 --- a/docs/linked-packages.md +++ b/docs/linked-packages.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/linked-packages + # Linked Packages Linked packages allow you to specify a group or groups of packages that should be versioned together. There are some complex cases, so some examples are shown below to demonstrate various cases. diff --git a/docs/modifying-changelog-format.md b/docs/modifying-changelog-format.md index 19b576ea4..0ccecf7e9 100644 --- a/docs/modifying-changelog-format.md +++ b/docs/modifying-changelog-format.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/customize-changelog-format + # Modifying The Changelog Formats Changesets comes with a default format for the changelogs for packages which is relatively basic in what information it displays, however this is customisable. Here we will talk about how to modify the changelog, so that it contains extra meta-information. diff --git a/docs/prereleases.md b/docs/prereleases.md index 6c71fdcb3..70ec87a1f 100644 --- a/docs/prereleases.md +++ b/docs/prereleases.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/prereleases + # Prereleases > Warning! Prereleases are very complicated! Using them requires a thorough understanding of all parts of npm publishes. Mistakes can lead to repository and publish states that are very hard to fix. diff --git a/docs/problems-publishing-in-monorepos.md b/docs/problems-publishing-in-monorepos.md index c99bf7af6..5c7738cd5 100644 --- a/docs/problems-publishing-in-monorepos.md +++ b/docs/problems-publishing-in-monorepos.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. There is no up-to-date version of this documentation as problems are explained inlined where needed. + # Problems Publishing in Monorepos Monorepos have a heap of complexity around how publishing to npm works. Changesets helps most repository users avoid ever having to think about these problems, however repository maintainers, especially those who want to customise how their releases work (for example those not using our [github action](https://github.com/changesets/action/)), may want to understand what it is solving for you. diff --git a/docs/snapshot-releases.md b/docs/snapshot-releases.md index af3d4a889..76bd236f4 100644 --- a/docs/snapshot-releases.md +++ b/docs/snapshot-releases.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/snapshot-releases + # Snapshot Releases Snapshot releases are a way to release your changes for testing without updating the versions. Both a modified `version` and a modified `publish` command are used to do accomplish a snapshot release. After both processes run, you will have a published version of packages in changesets with a version of `0.0.0-{tag}-DATETIMESTAMP`. diff --git a/docs/versioning-apps.md b/docs/versioning-apps.md index b0c88c9c5..6afe4580d 100644 --- a/docs/versioning-apps.md +++ b/docs/versioning-apps.md @@ -1,3 +1,6 @@ +> [!WARNING] +> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/beyond-npm + # Managing applications or non-npm packages Changesets can also be used to manage application versions or non-npm packages (ie dotnet NuGet packages, ruby gems, docker images etc). diff --git a/eslint.config.js b/eslint.config.js index c94a0d1ee..e0804ba2d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,10 +10,13 @@ import tseslint from "typescript-eslint"; export default defineConfig( { ignores: [ - "**/node_modules/**", + "**/*.{json,md}", "**/dist/**", + "**/coverage/**", + "**/node_modules/**", "site/.vitepress", "packages/cli/bin.js", + "site/.vitepress/cache/**", "**/*.snap", ], }, @@ -97,10 +100,18 @@ export default defineConfig( "import-lite/no-mutable-exports": "error", }, }, + { + files: ["site/.vitepress/theme/**"], + rules: { + "n/no-unsupported-features/node-builtins": "off", + }, + }, { files: [ "**/index.ts", // to be removed in next release (v4) when we are dropping default export - "**/*.config.*", // config files often return default exports + "**/*config.*", // config files often return default exports + "site/**/*.data.ts", + "site/**/*.paths.ts", ], rules: { "import-lite/no-default-export": "off", diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 000000000..0c7eda57b --- /dev/null +++ b/netlify.toml @@ -0,0 +1,6 @@ +[build] +publish = "site/.vitepress/dist" +command = "pnpm build && pnpm site:build" + +[build.environment] +NODE_VERSION = "24" diff --git a/package.json b/package.json index 7aec00038..aa70fe517 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,6 @@ "type": "git", "url": "git+https://github.com/changesets/changesets.git" }, - "workspaces": [ - "packages/*", - "scripts/*" - ], "type": "module", "scripts": { "postinstall": "manypkg check", @@ -32,6 +28,9 @@ "test:fast": "vitest --tags-filter=!slow", "types:check": "tsc", "check-all": "pnpm build && pnpm test run && pnpm types:check && pnpm lint && pnpm format", + "site:dev": "pnpm --filter=./site dev", + "site:build": "pnpm --filter=./site build", + "site:preview": "pnpm --filter=./site preview", "version-packages": "changeset version && pnpm format:fix", "lint-staged:setup": "pnpm run --sequential \"/lint-staged:setup:\\d/\"", "lint-staged:setup:1": "git config set hook.\"lint-staged\".event pre-commit", diff --git a/packages/changelog-github/README.md b/packages/changelog-github/README.md index 899853a3e..0e6f4fb6b 100644 --- a/packages/changelog-github/README.md +++ b/packages/changelog-github/README.md @@ -3,45 +3,85 @@ [![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/changelog-github?name=true)](https://npmx.dev/package/@changesets/changelog-github) [![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./CHANGELOG.md) -A changelog entry generator for GitHub that links to commits, PRs and authors. +A [changelog generator](https://changesets.dev/guide/customize-changelog-format) for Changesets that links to GitHub commits, PRs, and authors. -Enable it in `.changeset/config.json`: +## Usage -```json +The `@changesets/changelog-github` package requires a [`GITHUB_TOKEN`](https://github.com/settings/tokens/new?scopes=read:user,repo:status&description=changesets) with `read:user` and `repo:status` permissions. Add it to your repository's [GitHub Action secrets](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) and your `.env` file: + +```bash +GITHUB_TOKEN=token_here +``` + +Then you can use it in the [`changelog`](https://changesets.dev/guide/config#changelog) option: + +```json [.changeset/config.json] { - "changelog": ["@changesets/changelog-github", { "repo": "/" }] + "changelog": ["@changesets/changelog-github", { "repo": "owner/repo" }] } ``` -It requires GitHub authentication: set a `GITHUB_TOKEN` environment variable. - ## Options -### `disableThanks` (optional boolean) +### `repo` + +- **Type:** `string` +- **Default:** `process.env.GITHUB_REPOSITORY` + +Specify the `/` slug of your GitHub repository. If you intend to run this locally, specify the option explicitly or set the `GITHUB_REPOSITORY` environment variable. + +When running in GitHub Actions, `GITHUB_REPOSITORY` is automatically set, so you can omit this option if you are only running in GitHub Actions. + +### `disableThanks` + +- **Type:** `boolean` +- **Default:** `false` -Set `"disableThanks": true` to drop the "Thanks [@user]!" attribution from each line. +Set `true` to drop the `"Thanks [@user]!"` attribution from each line. -### `template` (optional string, experimental) +> [!NOTE] +> It is recommended to not set `"disableThanks": true` when using the `template` option as the `{authors}` token would return an empty string, which could lead to unexpected results. + +### `template` + +- **Type:** `string` +- **Experimental** + +> [!WARNING] +> **Experimental.** The `template` option and its token syntax may change in any release, including a patch. If you rely on it, pin the exact `@changesets/changelog-github` version. + +This option allows you to customize the format that should be used for the generation of a single changelog line. For example, the default template generates this Markdown: + +```md +- [#123](https://github.com///pull/123) [`a1b2c3d`](https://github.com///commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0) Thanks [@ghost](https://github.com/ghost)! - fix the thing +``` + +Each piece of information can be dynamically represented with [tokens](#tokens). The above example can be represented as: + +``` +\n\n- {pull} {commit} Thanks {authors}! - {summary} +``` -> ⚠ **Experimental.** The `template` option and its token syntax may change in any release, including a patch. If you rely on it, pin the exact `@changesets/changelog-github` version. +#### Tokens -By default each changelog line looks like `- [#123](url) [abc1234](url) Thanks [@user](url)! - summary`. Set `template` to render the line yourself from these tokens. Each token renders bare (you write the surrounding spaces) and renders to nothing when its data is absent: +The `template` option supports these tokens. -| Token | Renders | -| ----------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `{summary}` | the changeset summary's first line, linking every issue reference (`#123`) | -| `{ref}` | a single parenthesized reference: `([#123](url))` if there is a PR, else ``([`abc1234`](url))`` for a commit, else nothing | -| `{pull}` | `[#123](url)` | -| `{commit}` | ``[`abc1234`](url)`` | -| `{authors}` | `[@user](url)` (the contributors, respects `disableThanks`). For the "Thanks" prefix, write it in the template: `Thanks {authors}!` | +| Token | Description | Example | +| ----------- | ---------------------------------------------------------------------------------------------- | -------------------- | +| `{summary}` | The first line of the changeset Markdown content. | `fix the thing` | +| `{ref}` | Link to either the PR or commit (if the changes were pushed directly). Wrapped in parenthesis. | `([#123](url))` | +| `{pull}` | Link to the PR if available. | `[#123](url)` | +| `{commit}` | Link to the commit. | ``[`abc1234`](url)`` | +| `{authors}` | Link to the GitHub user profile of the main author of the commit (and PR). | `[@ghost](url)` | -Trailing whitespace on the rendered line is trimmed, so a trailing token that renders empty (e.g. `{ref}` with no PR or commit) leaves no dangling space. When `template` is unset the default output is unchanged. Continuation lines of a multi-line summary are always appended below, indented by two spaces. An unknown token (for example a typo, or the removed `{thanks}`) throws an error during `changeset version`. A token with no value renders as empty text, so a fixed prefix like `Thanks {authors}!` can leave an awkward `Thanks !` when there is no author - write the surrounding text with that in mind. +> [!NOTE] +> If a token is used and its data is absent, the token will generate an empty string. The continuation lines of a multi-line summary are also always appended below the template, indented by two spaces. -Examples (for a change with PR `#123`, commit `abc1234`, author `@alice`, summary `fix the thing`): +Examples: -| `template` | rendered line | -| ----------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `"\n- {pull} {commit} Thanks {authors}! - {summary}"` | `- [#123](url) [abc1234](url) Thanks [@alice](url)! - fix the thing` (the default) | -| `"\n- {summary} {ref}"` | `- fix the thing ([#123](url))` (the compact form) | -| `"\n- {summary} (thanks {authors}!)"` | `- fix the thing (thanks [@alice](url)!)` | -| `"\n- {summary} {pull}"` | `- fix the thing [#123](url)` | +| `template` | Generated Markdown | +| ------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `"\n\n- {pull} {commit} Thanks {authors}! - {summary}"` | ``\n\n- [#123](url) [`abc1234`](url) Thanks [@ghost](url)! - fix the thing`` | +| `"\n\n- {summary} {ref}"` | `\n\n- fix the thing ([#123](url))` or ``- fix the thing ([`abc1234`](url))`` | +| `"\n\n- {summary} (thanks {authors}!)"` | `\n\n- fix the thing (thanks [@ghost](url)!)` | +| `"\n\n- {summary} {pull}"` | `\n\n- fix the thing [#123](url)` | diff --git a/packages/cli/README.md b/packages/cli/README.md index 7000dd54b..32bf7374d 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,218 +1,8 @@ -## @changesets/cli 🦋 +## @changesets/cli [![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/cli?name=true)](https://npmx.dev/package/@changesets/cli) [![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./CHANGELOG.md) A tool to manage versioning and changelogs with a focus on monorepos. -[Read the docs to learn more](https://changesets.dev). - -## Getting Started - -If you are installing this in a monorepo run - -```shell -yarn add @changesets/cli -yarn changeset init -``` - -otherwise run - -```shell -yarn add --dev @changesets/cli -yarn changeset init -``` - -From here you are set up to use changesets. Add your first changeset by running - -```shell -yarn changeset -``` - -and following the prompts that you are presented with. - -Below you can find a basic workflow for maintainers to help them use changesets, which you can vary to meet your own needs. - -## Core Concepts - -The core concept that `changesets` follows is that contributors to a repository should be able to declare an intent to release, and that multiple intents should be able to be combined sensibly. Sensibly here refers to if there is one intent to release button as a 'minor' and another to release button as a 'patch', only one release will be made, at the higher of the two versions. - -A single `changeset` is an intent to release stored as data, with the information we need to combine multiple changesets and coordinate releases. It will also update internal dependencies within a multi-package repository. - -## Base workflow - -Contributor runs: - -```shell -yarn changeset -``` - -or - -```shell -npx @changesets/cli -``` - -and answers the provided questions. - -When the maintainer wants to release packages, they should run - -```shell -yarn changeset version -``` - -or - -```shell -npx @changesets/cli version -``` - -and then - -```shell -yarn changeset publish -``` - -or - -```shell -npx @changesets/cli publish -``` - -The commands are explained further below. - -## Commands - -### init - -```shell -changeset init -``` - -This command sets up the `.changeset` folder. It generates a readme and a config file. The config file includes the default options, as well as comments on what these options represent. You should run this command once, when you are setting up `changesets`. - -To publish public packages to NPM, you'll need to edit `.changeset/config.json` and change `"access": "restricted",` to `"access": "public",`. Read more about [access in config file options](https://github.com/changesets/changesets/blob/main/docs/config-file-options.md#access-restricted--public). The `publishConfig` of each `package.json` is also respected and takes a priority over monorepo-wide setting in `.changeset/config.json`. - -### add - -```shell -changeset [--empty] [--open] [--message ] [--major ] [--minor ] [--patch ] -``` - -or - -```shell -changeset add [--empty] [--open] [--message ] [--major ] [--minor ] [--patch ] -``` - -This command will ask you a series of questions, first about what packages you want to release, then what semver bump type for each package, then it will ask for a summary of the entire changeset. At the final step it will show the changeset it will generate, and confirm that you want to add it. - -Once confirmed, the changeset will write a Markdown file that contains the summary and YAML front matter which stores the packages that will be released and the semver bump types for them. - -A changeset that major bumps `@changesets/cli` would look like this: - -```md ---- -"@changesets/cli": major ---- - -A description of the major changes. -``` - -If you want to modify this file after it's generated, that's completely fine or if you want to write changeset files yourself, that's also fine. - -- `--empty` - allows you to create an empty changeset if no packages are being bumped, usually only required if you have CI that blocks merges without a changeset. - -A changeset created with the `empty` flag would look like this: - -```md ---- ---- -``` - -If you set the `commit` option in the config, the command will add the updated changeset files and then commit them. - -- `--open` - opens the created changeset in an external editor -- `--message` (or `-m`) - provides the changeset summary from the command line instead of prompting for it. - -To select packages without prompting for release types, use one or more release type flags: - -- `--major` -- `--minor` -- `--patch` - -Pass `--message` as well to create a changeset without any prompts. - -For example: - -```bash -changeset --message 'This is a message' --patch @changesets/cli -``` - -A changeset created with the above example would look like this: - -```md ---- -"@changesets/cli": patch ---- - -This is a message -``` - -### version - -```shell -changeset version -``` - -Updates the versions for all packages described in changesets since last release along with any dependents inside the repo that are out of range. - -Will also create/append to a CHANGELOG file for each package using the summaries from the changesets. - -We recommend making sure changes made from this command are merged back into the base branch before you run `publish`. - -This command will read then delete changesets on disk, ensuring that they are only used once. - -### publish - -```shell -changeset publish [--otp={token}] -``` - -Publishes to NPM repo, and creates git tags. Because this command assumes that last commit is the release commit you should not commit any changes between calling `version` and `publish`. These commands are separate to enable you to check if release commit is accurate. - -- `--otp={token}` - allows you to provide an npm one-time password if you have auth and writes enabled on npm. The CLI also prompts for the OTP if it's not provided with the `--otp` option. - -**NOTE:** You will still need to push your changes back to the base branch after this - -```shell -git push --follow-tags -``` - -### status - -```shell -changeset status [--verbose] [--output={filePath}] [--since={gitTag}] -``` - -The status command provides information about the changesets that currently exist. If there are changes to packages but no changesets are present, it exits with error status code `1`. - -- `--verbose` - use if you want to know the new versions, and get a link to the relevant changeset summary. - -- `--output` - allows you to write the json object of the status out, for consumption by other tools, such as CI. - -- `--since` - to only display information about changesets since a specific branch or git tag. While this can be - used to add a CI check for changesets, we recommend not doing this. We instead recommend using the [changeset bot](https://github.com/apps/changeset-bot) - to detect pull requests missing changesets, as not all pull requests need one. - -### pre - -```shell -changeset pre [exit|enter {tag}] -``` - -The pre command enters and exits pre mode. The command does not do any actual versioning, when doing a prerelease, you should run `changeset pre enter next`(or a different tag, the tag is what is in versions and is the npm dist tag) and then do the normal release process with `changeset version` and `changeset publish`. For more information about the pre command, see [the prereleases documentation](https://github.com/changesets/changesets/blob/main/docs/prereleases.md). - -### Bumping peerDependencies - -In almost all circumstances, internal packages will be bumped as a patch. The one exception is when the dependency is a `peerDependency`, in which case the change will become a major. +Visit https://changesets.dev to learn more. diff --git a/packages/config/README.md b/packages/config/README.md index 725f35e03..29706aa6e 100644 --- a/packages/config/README.md +++ b/packages/config/README.md @@ -1,11 +1,13 @@ # @changesets/config -> Utilities for reading and parsing Changeset's config - [![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/config?name=true)](https://npmx.dev/package/@changesets/config) [![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./CHANGELOG.md) -```tsx +Utilities for reading and parsing the Changesets config (i.e. `.changeset/config.json`). + +## Usage + +```ts import { readConfig } from "@changesets/config"; const { config, warnings, errors } = await readConfig(process.cwd()); diff --git a/packages/parse/README.md b/packages/parse/README.md index c9f19d7b4..29b77ab49 100644 --- a/packages/parse/README.md +++ b/packages/parse/README.md @@ -3,44 +3,28 @@ [![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/parse?name=true)](https://npmx.dev/package/@changesets/parse) [![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./CHANGELOG.md) -Parses a changeset from its written format to a data object. +Parse a changeset from its written format to a data object. -```js +## Usage + +```ts import { parseChangesetFile } from "@changesets/parse"; const changeset = `--- -"@changesets/something": minor -"@changesets/something-else": patch +"pkg-a": minor +"pkg-b": patch --- -A description of a minor change`; +A summary of the change`; const parsedChangeset = parseChangesetFile(changeset); +// { +// "summary": "A summary of the change", +// "releases": [ +// { "name": "pkg-a", "type": "minor" }, +// { "name": "pkg-b", "type": "patch" } +// ] +// } ``` -For example, it can convert: - -```md ---- -"@changesets/something": minor -"@changesets/something-else": patch ---- - -A description of a minor change -``` - -to - -```json -{ - "summary": "A description of a minor change", - "releases": [ - { "name": "@changesets/something", "type": "minor" }, - { "name": "@changesets/something-else", "type": "patch" } - ] -} -``` - -Note that this is not quite a complete Changeset for most tools as it lacks an `id`. - -For written changesets, the id is normally given as the file name, which parse is not aware of. +Note that this does not include the changeset id, but it is normally given as the file name, which parse is not aware of. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ffb6ba87..f2d521204 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,8 @@ settings: excludeLinksFromLockfile: false overrides: - rolldown: 1.0.3 + vitepress>@docsearch/js: '-' + vitepress>@docsearch/sidepanel-js: '-' importers: @@ -80,7 +81,7 @@ importers: version: 8.63.0(eslint@10.6.0)(typescript@6.0.3) vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.0.13) + version: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.1.4) packages/apply-release-plan: dependencies: @@ -499,8 +500,23 @@ importers: specifier: ^1.2.4 version: 1.2.4 + site: + devDependencies: + takumi-js: + specifier: ^2.0.2 + version: 2.1.1(csstype@3.2.3) + vitepress: + specifier: ^2.0.0-alpha.18 + version: 2.0.0-alpha.18(@types/node@26.1.1)(postcss@8.5.17)(typescript@6.0.3)(yaml@2.9.0) + vitepress-plugin-group-icons: + specifier: ^1.7.5 + version: 1.7.5(vite@8.1.4) + packages: + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} @@ -534,6 +550,9 @@ packages: resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} engines: {node: '>= 20.12.0'} + '@docsearch/css@4.6.3': + resolution: {integrity: sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==} + '@e18e/eslint-plugin@0.5.1': resolution: {integrity: sha512-mqUozeyNI9xvJbjrOO7y765dT7Kud3bwCm/DHwctxdEngPdJWQaS9BNGgpM1wCCzZfOtlKQh4ZRhm3VRomT9KA==} peerDependencies: @@ -545,14 +564,14 @@ packages: oxlint: optional: true - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} '@emnapi/core@1.9.1': resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/runtime@1.9.1': resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} @@ -560,8 +579,8 @@ packages: '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} @@ -622,6 +641,21 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iconify-json/logos@1.2.11': + resolution: {integrity: sha512-fOo4pGEatuyuCFNL+cwquYMa2Im0oJHRHV7lt/Qqs5Ode/lPImHCQcfTtPzZj7qYMPb/h8YHN3TG54uEowrjNQ==} + + '@iconify-json/simple-icons@1.2.89': + resolution: {integrity: sha512-hRaCY5s2G5oWAIhc4LCGYn6g6RrwLL4zhoLOT+KUO3joVCxVlZKA+839bv/47Nbe9/ZD4UA6dznZ4XPYcI53wA==} + + '@iconify-json/vscode-icons@1.2.66': + resolution: {integrity: sha512-gjqA31r7n3MzGmrc62ldhzpMi90wUKXQoWkOoiJ+9yUTHHmt3lGP4GhDR7LXc6ARFsUcEHsRfXrmpY0TiZ5RFQ==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -692,6 +726,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -795,8 +835,8 @@ packages: '@oxc-node/core@0.1.0': resolution: {integrity: sha512-Spk/ey3zg1CpBU1eUHBPbAbfFddntutZPPsweh+kNh9M9Ksc8j9OCujralW9HrVyi6nNWek1PnMfSZ7NPLLCKA==} - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@oxfmt/binding-android-arm-eabi@0.58.0': resolution: {integrity: sha512-Uz62sHduGGPftXtILGyxdSW4PX82rUg+rfdNqhsgxe881g4rIoXlIqmZQ6HVKcF4f+F8qMhdD03Bx5u7gmeTdg==} @@ -992,97 +1032,97 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.0.3': - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.3': - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.3': - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.3': - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.3': - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.3': - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.3': - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.3': - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.3': - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.3': - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.3': - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.3': - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.3': - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.3': - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1090,15 +1130,135 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@shikijs/core@4.3.1': + resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.3.1': + resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.3.1': + resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==} + engines: {node: '>=20'} + + '@shikijs/langs@4.3.1': + resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.3.1': + resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==} + engines: {node: '>=20'} + + '@shikijs/themes@4.3.1': + resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==} + engines: {node: '>=20'} + + '@shikijs/transformers@4.3.1': + resolution: {integrity: sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A==} + engines: {node: '>=20'} + + '@shikijs/types@4.3.1': + resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@takumi-rs/core-darwin-arm64@2.1.1': + resolution: {integrity: sha512-9BgMMXlkiUJaRapwaDw5qCvmfOhis+D3QnDsR6rM/sneVNZ7lvbNXmS8dhTl2gBohS2BZkz2OaKRAvhr4KLjMQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@takumi-rs/core-darwin-x64@2.1.1': + resolution: {integrity: sha512-92bOXdHFnjD/Xc8BWpmXyx/OvLyL6MYZqCzcvTTyTF1VrJmbDkBrOdwZXAQzdJlSjxfqHsLsgbGhndY3jK2kEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@takumi-rs/core-linux-arm64-gnu@2.1.1': + resolution: {integrity: sha512-8gLAWiGpsvMTKPMzxs6eEM94ExeO7FCG8+MhbfuEvaXtLFJoT664EbjHowEqzOE9Gjoie/ArblPWw2zr9fnkdg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@takumi-rs/core-linux-arm64-musl@2.1.1': + resolution: {integrity: sha512-aiYuLQ/aKUgXRzftaWltaqPY3S/p1HIuoLfq54WAMYGOF9ZqwZV/uTi0r/HVFWtobEZW+tACtH6JV51rb1O2MQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@takumi-rs/core-linux-x64-gnu@2.1.1': + resolution: {integrity: sha512-S7GtHfkkgtX+NNV4fvWYR3oX9cLhtWlwFZGdGjByEHt7JgEZA+n7Rv+CieGEHZBSpHwcPUoeXMl8wmvFivDqww==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@takumi-rs/core-linux-x64-musl@2.1.1': + resolution: {integrity: sha512-pLO6WpaVj3eyb5nmU3sMeFapvyC9lm6b0jpGKNNw5ZrrqTKT80b0piT4bCUPNyxOC/I1a6qb9p21Wo0Brqs35A==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@takumi-rs/core-win32-arm64-msvc@2.1.1': + resolution: {integrity: sha512-uWonlXmS43OgWipUl8axGzQGibQssHSiQNKv5MzNB923g5/72P2GK3aRXxeiuKPh5dF9S26leKxTGETEq8ZMpg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@takumi-rs/core-win32-x64-msvc@2.1.1': + resolution: {integrity: sha512-bd+pfs2hoNFlfWnrMMNeD1vnRct2LUgDF86ntw5f0wTQMMVUzJhLvB9mT/gfqRDxHFCoZtV1umDCKrrVE4W6Ww==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@takumi-rs/core@2.1.1': + resolution: {integrity: sha512-qfY8iRykgWYBZdfi9D3nr8TdUK6j2Ylg91Rq4R89Tft2iqxZwTHZC2Hqh530Ud2wszqjrXyeDBcEFIBOMuTkTw==} + engines: {node: '>=18'} + peerDependencies: + csstype: '*' + peerDependenciesMeta: + csstype: + optional: true + + '@takumi-rs/helpers@2.1.1': + resolution: {integrity: sha512-0LBT2IuiwSTUodd3qhSssWxMw+auQPBDN3SDdpwJnnjYq6dNzSvYQTun85Wcj4CJ/Ka6h8A+V1l0VAytT/vljA==} + engines: {node: '>=18'} + peerDependencies: + preact: ^10.0.0 + react: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + preact: + optional: true + react: + optional: true + + '@takumi-rs/wasm@2.1.1': + resolution: {integrity: sha512-pzxozHb1xQyy8vioB/4ok9c6n5bjgjsyYGcclz0VCsnsQlMD2yJ29bgOKmM8jXXReSv8XR8XerFWmHUgL5B57g==} + engines: {node: '>=18'} + peerDependencies: + csstype: '*' + peerDependenciesMeta: + csstype: + optional: true + '@tsconfig/node22@22.0.5': resolution: {integrity: sha512-hLf2ld+sYN/BtOJjHUWOk568dvjFQkHnLNa6zce25GIH+vxKfvTgm3qpaH6ToF5tu/NN0IH66s+Bb5wElHrLcw==} '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1111,9 +1271,24 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/node@26.1.1': resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} @@ -1123,6 +1298,12 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@typescript-eslint/eslint-plugin@8.63.0': resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1182,11 +1363,21 @@ packages: resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + '@valibot/to-json-schema@1.7.1': resolution: {integrity: sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==} peerDependencies: valibot: ^1.4.0 + '@vitejs/plugin-vue@6.0.7': + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + '@vitest/coverage-v8@4.1.10': resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: @@ -1241,6 +1432,99 @@ packages: '@vitest/utils@4.1.10': resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@vue/compiler-core@3.5.39': + resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==} + + '@vue/compiler-dom@3.5.39': + resolution: {integrity: sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==} + + '@vue/compiler-sfc@3.5.39': + resolution: {integrity: sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==} + + '@vue/compiler-ssr@3.5.39': + resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==} + + '@vue/devtools-api@8.1.5': + resolution: {integrity: sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==} + + '@vue/devtools-kit@8.1.5': + resolution: {integrity: sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==} + + '@vue/devtools-shared@8.1.5': + resolution: {integrity: sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==} + + '@vue/reactivity@3.5.39': + resolution: {integrity: sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==} + + '@vue/runtime-core@3.5.39': + resolution: {integrity: sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==} + + '@vue/runtime-dom@3.5.39': + resolution: {integrity: sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==} + + '@vue/server-renderer@3.5.39': + resolution: {integrity: sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==} + peerDependencies: + vue: 3.5.39 + + '@vue/shared@3.5.39': + resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==} + + '@vueuse/core@14.3.0': + resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/integrations@14.3.0': + resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 || ^8 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@14.3.0': + resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==} + + '@vueuse/shared@14.3.0': + resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==} + peerDependencies: + vue: ^3.5.0 + '@yarnpkg/cli-dist@4.17.0': resolution: {integrity: sha512-quDpJzauzaCeutv4S7MObzjKcExJU0iKPzwl2LN66AP2MSVC/yTDuwnTyR3NwaA6euvSMBhk8MzX2GBDvVXxsA==} engines: {node: '>=18.12.0'} @@ -1411,6 +1695,9 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -1419,10 +1706,19 @@ packages: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1431,6 +1727,9 @@ packages: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -1441,6 +1740,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} @@ -1463,6 +1765,10 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-indent@7.0.2: resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} engines: {node: '>=12.20'} @@ -1471,6 +1777,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -1491,6 +1800,10 @@ packages: resolution: {integrity: sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==} engines: {node: '>=10.13.0'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -1577,6 +1890,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1633,6 +1949,9 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + focus-trap@8.2.2: + resolution: {integrity: sha512-qV0g8hRYBqgACcFOH3f9wXc4zPKhr/0z9RI2a6ZijZ72EeBi4g8oBy8zAWuUR1TsMpOzwpUMFvjdasrC41Joug==} + fs-fixture@2.14.0: resolution: {integrity: sha512-lZBaSOewY5snBSyOjn3fmo2ES5gOR7Q1Y6dILH0/xR0xejjUhux65OGaFWhQ+jiyvTi5HOHqXQrQ9v48Lsmqbw==} engines: {node: '>=18.0.0'} @@ -1674,12 +1993,24 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookable@6.1.1: resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + human-id@4.2.0: resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} hasBin: true @@ -1872,6 +2203,27 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -1883,6 +2235,9 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + modern-tar@0.7.6: resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} engines: {node: '>=18.0.0'} @@ -2140,6 +2495,12 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2198,6 +2559,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2227,6 +2591,10 @@ packages: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.17: + resolution: {integrity: sha512-J7EF+8X+CzRPaJPOv9Ck2wNWJvGnnl3PcNPAdGg6GTLjyVpyQ0yATMSXRFRV01BviT/9Gwuc3rjEyJbDJG9a4w==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2235,6 +2603,9 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -2254,6 +2625,15 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + registry-auth-token@5.1.1: resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} engines: {node: '>=14'} @@ -2278,7 +2658,7 @@ packages: peerDependencies: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20260325.1' - rolldown: 1.0.3 + rolldown: ^1.0.0 typescript: ^5.0.0 || ^6.0.0 || ^7.0.0 vue-tsc: ~3.2.0 || ~3.3.0 peerDependenciesMeta: @@ -2291,8 +2671,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.3: - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2320,6 +2700,10 @@ packages: resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} + shiki@4.3.1: + resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==} + engines: {node: '>=20'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2342,6 +2726,9 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2363,6 +2750,9 @@ packages: resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -2375,6 +2765,13 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} + + takumi-js@2.1.1: + resolution: {integrity: sha512-Ly78KiE4USzjXnHLdom0uNh1OVsxhWQKL9axqWfORWPxdXab/T4/hKZTg/0ncVUpAbpqlpFA5/N/bGdS+BmqfQ==} + engines: {node: '>=18'} + tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -2402,6 +2799,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -2467,6 +2867,21 @@ packages: undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2482,13 +2897,19 @@ packages: resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==} engines: {node: ^18.17.0 || >=20.5.0} - vite@8.0.13: - resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@vitejs/devtools': ^0.3.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -2525,6 +2946,26 @@ packages: yaml: optional: true + vitepress-plugin-group-icons@1.7.5: + resolution: {integrity: sha512-QzcroUuIiVKyXpmEiiHVbfRTQIy9Zbwxpk5JC/zavO8mavitwumz2RZWlwTchMCCHducYyPptkYvXvdnNUWkog==} + peerDependencies: + vite: '>=3' + peerDependenciesMeta: + vite: + optional: true + + vitepress@2.0.0-alpha.18: + resolution: {integrity: sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@4.1.10: resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2566,6 +3007,14 @@ packages: jsdom: optional: true + vue@3.5.39: + resolution: {integrity: sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2610,8 +3059,16 @@ packages: yuku-parser@0.5.46: resolution: {integrity: sha512-eMNzX5eYnkqo6zNYf2H8WHcMPHfIf7ijmw0X8NYZ1ANXAU5Y9rwTB9MgfCuvLxlR7fV/96v3gWa8y/YUGFLxjw==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.2.4 + '@babel/helper-string-parser@7.29.7': {} '@babel/helper-validator-identifier@7.29.7': {} @@ -2644,6 +3101,8 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 + '@docsearch/css@4.6.3': {} + '@e18e/eslint-plugin@0.5.1(eslint@10.6.0)': dependencies: empathic: 2.0.1 @@ -2652,9 +3111,9 @@ snapshots: optionalDependencies: eslint: 10.6.0 - '@emnapi/core@1.10.0': + '@emnapi/core@1.11.1': dependencies: - '@emnapi/wasi-threads': 1.2.1 + '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true @@ -2664,7 +3123,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.10.0': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true @@ -2679,7 +3138,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.1': + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true @@ -2734,6 +3193,26 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iconify-json/logos@1.2.11': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/simple-icons@1.2.89': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/vscode-icons@1.2.66': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.4': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} @@ -2808,13 +3287,6 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 - optional: true - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: '@emnapi/core': 1.9.1 @@ -2822,6 +3294,13 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + '@open-draft/deferred-promise@2.2.0': {} '@open-draft/logger@0.3.0': @@ -2908,7 +3387,7 @@ snapshots: '@oxc-node/core-win32-ia32-msvc': 0.1.0 '@oxc-node/core-win32-x64-msvc': 0.1.0 - '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.139.0': {} '@oxfmt/binding-android-arm-eabi@0.58.0': optional: true @@ -3022,59 +3501,156 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.0.3': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.0.3': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.0.3': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.0.3': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.3': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.3': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.3': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.3': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.3': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.0.3': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.0.3': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.0.3': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.3': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.3': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} + '@shikijs/core@4.3.1': + dependencies: + '@shikijs/primitive': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + + '@shikijs/primitive@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + + '@shikijs/transformers@4.3.1': + dependencies: + '@shikijs/core': 4.3.1 + '@shikijs/types': 4.3.1 + + '@shikijs/types@4.3.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + '@standard-schema/spec@1.1.0': {} + '@takumi-rs/core-darwin-arm64@2.1.1': + optional: true + + '@takumi-rs/core-darwin-x64@2.1.1': + optional: true + + '@takumi-rs/core-linux-arm64-gnu@2.1.1': + optional: true + + '@takumi-rs/core-linux-arm64-musl@2.1.1': + optional: true + + '@takumi-rs/core-linux-x64-gnu@2.1.1': + optional: true + + '@takumi-rs/core-linux-x64-musl@2.1.1': + optional: true + + '@takumi-rs/core-win32-arm64-msvc@2.1.1': + optional: true + + '@takumi-rs/core-win32-x64-msvc@2.1.1': + optional: true + + '@takumi-rs/core@2.1.1(csstype@3.2.3)': + dependencies: + '@takumi-rs/helpers': 2.1.1 + optionalDependencies: + '@takumi-rs/core-darwin-arm64': 2.1.1 + '@takumi-rs/core-darwin-x64': 2.1.1 + '@takumi-rs/core-linux-arm64-gnu': 2.1.1 + '@takumi-rs/core-linux-arm64-musl': 2.1.1 + '@takumi-rs/core-linux-x64-gnu': 2.1.1 + '@takumi-rs/core-linux-x64-musl': 2.1.1 + '@takumi-rs/core-win32-arm64-msvc': 2.1.1 + '@takumi-rs/core-win32-x64-msvc': 2.1.1 + csstype: 3.2.3 + transitivePeerDependencies: + - preact + - react + + '@takumi-rs/helpers@2.1.1': {} + + '@takumi-rs/wasm@2.1.1(csstype@3.2.3)': + dependencies: + '@takumi-rs/helpers': 2.1.1 + optionalDependencies: + csstype: 3.2.3 + transitivePeerDependencies: + - preact + - react + '@tsconfig/node22@22.0.5': {} '@tybys/wasm-util@0.10.2': @@ -3082,6 +3658,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -3093,8 +3674,25 @@ snapshots: '@types/estree@1.0.9': {} + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + '@types/node@26.1.1': dependencies: undici-types: 8.3.0 @@ -3103,6 +3701,10 @@ snapshots: '@types/semver@7.7.1': {} + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0)(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -3194,10 +3796,18 @@ snapshots: '@typescript-eslint/types': 8.63.0 eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.3': {} + '@valibot/to-json-schema@1.7.1(valibot@1.4.2)': dependencies: valibot: 1.4.2(typescript@6.0.3) + '@vitejs/plugin-vue@6.0.7(vite@8.1.4)(vue@3.5.39)': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.1.4(@types/node@26.1.1)(yaml@2.9.0) + vue: 3.5.39(typescript@6.0.3) + '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -3210,7 +3820,7 @@ snapshots: obug: 2.1.3 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.0.13) + vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.1.4) '@vitest/eslint-plugin@1.6.22(@typescript-eslint/eslint-plugin@8.63.0)(eslint@10.6.0)(typescript@6.0.3)(vitest@4.1.10)': dependencies: @@ -3220,7 +3830,7 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0)(eslint@10.6.0)(typescript@6.0.3) typescript: 6.0.3 - vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.0.13) + vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.1.4) transitivePeerDependencies: - supports-color @@ -3233,13 +3843,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.0.13)': + '@vitest/mocker@4.1.10(vite@8.1.4)': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.13(@types/node@26.1.1)(yaml@2.9.0) + vite: 8.1.4(@types/node@26.1.1)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -3265,6 +3875,94 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@vue/compiler-core@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.39 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.39': + dependencies: + '@vue/compiler-core': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/compiler-sfc@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.39 + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.39': + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/devtools-api@8.1.5': + dependencies: + '@vue/devtools-kit': 8.1.5 + + '@vue/devtools-kit@8.1.5': + dependencies: + '@vue/devtools-shared': 8.1.5 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@8.1.5': {} + + '@vue/reactivity@3.5.39': + dependencies: + '@vue/shared': 3.5.39 + + '@vue/runtime-core@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/runtime-dom@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/runtime-core': 3.5.39 + '@vue/shared': 3.5.39 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.39(vue@3.5.39)': + dependencies: + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + vue: 3.5.39(typescript@6.0.3) + + '@vue/shared@3.5.39': {} + + '@vueuse/core@14.3.0(vue@3.5.39)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.3.0 + '@vueuse/shared': 14.3.0(vue@3.5.39) + vue: 3.5.39(typescript@6.0.3) + + '@vueuse/integrations@14.3.0(focus-trap@8.2.2)(vue@3.5.39)': + dependencies: + '@vueuse/core': 14.3.0(vue@3.5.39) + '@vueuse/shared': 14.3.0(vue@3.5.39) + vue: 3.5.39(typescript@6.0.3) + optionalDependencies: + focus-trap: 8.2.2 + + '@vueuse/metadata@14.3.0': {} + + '@vueuse/shared@14.3.0(vue@3.5.39)': + dependencies: + vue: 3.5.39(typescript@6.0.3) + '@yarnpkg/cli-dist@4.17.0': {} '@yuku-codegen/binding-darwin-arm64@0.5.46': @@ -3368,14 +4066,22 @@ snapshots: balanced-match@4.0.4: {} + birpc@2.9.0: {} + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 cac@7.0.0: {} + ccount@2.0.1: {} + chai@6.2.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -3385,6 +4091,8 @@ snapshots: slice-ansi: 8.0.0 string-width: 8.2.1 + comma-separated-tokens@2.0.3: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -3398,6 +4106,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + csstype@3.2.3: {} + dataloader@2.2.3: {} debug@4.4.3: @@ -3410,10 +4120,16 @@ snapshots: defu@6.1.7: {} + dequal@2.0.3: {} + detect-indent@7.0.2: {} detect-libc@2.1.2: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dts-resolver@3.0.0: {} emoji-regex@10.6.0: {} @@ -3425,6 +4141,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.3 + entities@7.0.1: {} + environment@1.1.0: {} es-module-lexer@2.1.0: {} @@ -3527,6 +4245,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -3573,6 +4293,10 @@ snapshots: flatted@3.4.2: {} + focus-trap@8.2.2: + dependencies: + tabbable: 6.5.0 + fs-fixture@2.14.0: {} fsevents@2.3.3: @@ -3602,10 +4326,32 @@ snapshots: has-flag@4.0.0: {} + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hookable@5.5.3: {} + hookable@6.1.1: {} html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + human-id@4.2.0: {} ignore@5.3.2: {} @@ -3769,6 +4515,37 @@ snapshots: dependencies: semver: 7.8.5 + mark.js@8.11.1: {} + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + mimic-function@5.0.1: {} minimatch@10.2.5: @@ -3777,6 +4554,8 @@ snapshots: minimist@1.2.8: {} + minisearch@7.2.0: {} + modern-tar@0.7.6: {} module-replacements@3.0.0-beta.8: {} @@ -3809,6 +4588,14 @@ snapshots: dependencies: mimic-function: 5.0.1 + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -3875,6 +4662,8 @@ snapshots: pathe@2.0.3: {} + perfect-debounce@2.1.0: {} + picocolors@1.1.1: {} picomatch@4.0.5: {} @@ -3893,10 +4682,18 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.17: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} propagate@2.0.1: {} + property-information@7.2.0: {} + proto-list@1.2.4: {} publint@0.3.21: @@ -3917,6 +4714,16 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + registry-auth-token@5.1.1: dependencies: '@pnpm/npm-conf': 3.0.2 @@ -3934,12 +4741,12 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.27.4(rolldown@1.0.3)(typescript@6.0.3): + rolldown-plugin-dts@0.27.4(rolldown@1.1.5)(typescript@6.0.3): dependencies: dts-resolver: 3.0.0 get-tsconfig: 5.0.0-beta.5 obug: 2.1.3 - rolldown: 1.0.3 + rolldown: 1.1.5 yuku-ast: 0.1.7 yuku-codegen: 0.5.46 yuku-parser: 0.5.46 @@ -3948,26 +4755,26 @@ snapshots: transitivePeerDependencies: - oxc-resolver - rolldown@1.0.3: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.133.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.3 - '@rolldown/binding-darwin-arm64': 1.0.3 - '@rolldown/binding-darwin-x64': 1.0.3 - '@rolldown/binding-freebsd-x64': 1.0.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.3 - '@rolldown/binding-linux-arm64-musl': 1.0.3 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3 - '@rolldown/binding-linux-s390x-gnu': 1.0.3 - '@rolldown/binding-linux-x64-gnu': 1.0.3 - '@rolldown/binding-linux-x64-musl': 1.0.3 - '@rolldown/binding-openharmony-arm64': 1.0.3 - '@rolldown/binding-wasm32-wasi': 1.0.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.3 - '@rolldown/binding-win32-x64-msvc': 1.0.3 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 sade@1.8.1: dependencies: @@ -3987,6 +4794,17 @@ snapshots: shell-quote@1.8.4: {} + shiki@4.3.1: + dependencies: + '@shikijs/core': 4.3.1 + '@shikijs/engine-javascript': 4.3.1 + '@shikijs/engine-oniguruma': 4.3.1 + '@shikijs/langs': 4.3.1 + '@shikijs/themes': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -4005,6 +4823,8 @@ snapshots: source-map-js@1.2.1: {} + space-separated-tokens@2.0.2: {} + stackback@0.0.2: {} std-env@4.1.0: {} @@ -4024,6 +4844,11 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -4034,6 +4859,18 @@ snapshots: dependencies: has-flag: 4.0.0 + tabbable@6.5.0: {} + + takumi-js@2.1.1(csstype@3.2.3): + dependencies: + '@takumi-rs/core': 2.1.1(csstype@3.2.3) + '@takumi-rs/helpers': 2.1.1 + '@takumi-rs/wasm': 2.1.1(csstype@3.2.3) + transitivePeerDependencies: + - csstype + - preact + - react + tapable@2.3.3: {} tinybench@2.9.0: {} @@ -4051,6 +4888,8 @@ snapshots: tree-kill@1.2.2: {} + trim-lines@3.0.1: {} + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: typescript: 6.0.3 @@ -4065,8 +4904,8 @@ snapshots: import-without-cache: 0.4.0 obug: 2.1.3 picomatch: 4.0.5 - rolldown: 1.0.3 - rolldown-plugin-dts: 0.27.4(rolldown@1.0.3)(typescript@6.0.3) + rolldown: 1.1.5 + rolldown-plugin-dts: 0.27.4(rolldown@1.1.5)(typescript@6.0.3) semver: 7.8.5 tinyexec: 1.2.4 tinyglobby: 0.2.17 @@ -4108,6 +4947,29 @@ snapshots: undici-types@8.3.0: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4118,22 +4980,87 @@ snapshots: validate-npm-package-name@6.0.2: {} - vite@8.0.13(@types/node@26.1.1)(yaml@2.9.0): + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@8.1.4(@types/node@26.1.1)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 - postcss: 8.5.15 - rolldown: 1.0.3 + postcss: 8.5.17 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.1.1 fsevents: 2.3.3 yaml: 2.9.0 - vitest@4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.0.13): + vitepress-plugin-group-icons@1.7.5(vite@8.1.4): + dependencies: + '@iconify-json/logos': 1.2.11 + '@iconify-json/vscode-icons': 1.2.66 + '@iconify/utils': 3.1.4 + optionalDependencies: + vite: 8.1.4(@types/node@26.1.1)(yaml@2.9.0) + + vitepress@2.0.0-alpha.18(@types/node@26.1.1)(postcss@8.5.17)(typescript@6.0.3)(yaml@2.9.0): + dependencies: + '@docsearch/css': 4.6.3 + '@iconify-json/simple-icons': 1.2.89 + '@shikijs/core': 4.3.1 + '@shikijs/transformers': 4.3.1 + '@shikijs/types': 4.3.1 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 6.0.7(vite@8.1.4)(vue@3.5.39) + '@vue/devtools-api': 8.1.5 + '@vue/shared': 3.5.39 + '@vueuse/core': 14.3.0(vue@3.5.39) + '@vueuse/integrations': 14.3.0(focus-trap@8.2.2)(vue@3.5.39) + focus-trap: 8.2.2 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 4.3.1 + vite: 8.1.4(@types/node@26.1.1)(yaml@2.9.0) + vue: 3.5.39(typescript@6.0.3) + optionalDependencies: + postcss: 8.5.17 + transitivePeerDependencies: + - '@types/node' + - '@vitejs/devtools' + - async-validator + - axios + - change-case + - drauu + - esbuild + - fuse.js + - idb-keyval + - jiti + - jwt-decode + - less + - nprogress + - qrcode + - sass + - sass-embedded + - sortablejs + - stylus + - sugarss + - terser + - tsx + - typescript + - universal-cookie + - yaml + + vitest@4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(vite@8.1.4): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.0.13) + '@vitest/mocker': 4.1.10(vite@8.1.4) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -4150,7 +5077,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.13(@types/node@26.1.1)(yaml@2.9.0) + vite: 8.1.4(@types/node@26.1.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.1 @@ -4158,6 +5085,16 @@ snapshots: transitivePeerDependencies: - msw + vue@3.5.39(typescript@6.0.3): + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-sfc': 3.5.39 + '@vue/runtime-dom': 3.5.39 + '@vue/server-renderer': 3.5.39(vue@3.5.39) + '@vue/shared': 3.5.39 + optionalDependencies: + typescript: 6.0.3 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -4222,3 +5159,5 @@ snapshots: '@yuku-parser/binding-linux-x64-musl': 0.5.46 '@yuku-parser/binding-win32-arm64': 0.5.46 '@yuku-parser/binding-win32-x64': 0.5.46 + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f85bc7b33..d45907d34 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,21 +1,29 @@ packages: - packages/* - scripts/* + - site allowBuilds: "@pnpm/pnpr": true + blockExoticSubdeps: true dedupePeers: true dedupePeerDependents: true + minimumReleaseAge: 10080 minimumReleaseAgeExclude: - "@changesets/format@0.1.1" - pnpm@11.13.1 - npm@12.0.1 - pnpm@10.34.5 + - vitepress@2.0.0-alpha.19 + overrides: - rolldown: 1.0.3 + "vitepress>@docsearch/js": "-" + "vitepress>@docsearch/sidepanel-js": "-" + shellEmulator: true + trustPolicy: no-downgrade trustPolicyExclude: - pnpm@10.34.5 diff --git a/site/.vitepress/config.ts b/site/.vitepress/config.ts new file mode 100644 index 000000000..efe3e9b72 --- /dev/null +++ b/site/.vitepress/config.ts @@ -0,0 +1,205 @@ +import { type DefaultTheme, defineConfig } from "vitepress"; +import { + groupIconMdPlugin, + groupIconVitePlugin, + localIconLoader, +} from "vitepress-plugin-group-icons"; +import packageJson from "../../packages/cli/package.json" with { type: "json" }; + +// Netlify envs +const commitRef = process.env.COMMIT_REF; + +const changesetsVersion = packageJson.version; +const currentYear = new Date().getFullYear(); +const netlifyLink = `Netlify`; +const commitLink = commitRef + ? `${commitRef.slice(0, 7)}` + : "dev"; + +const siteUrl = "https://changesets.dev"; +const siteTitle = "Changesets"; +const siteDescription = + "A tool to manage versioning and changelogs with a focus on monorepos"; +const defaultOgImage = "https://changesets.dev/og-image.png"; + +export default defineConfig({ + title: siteTitle, + description: siteDescription, + head: [ + ["link", { rel: "icon", href: "logo-light.svg" }], + ["meta", { property: "og:type", content: "website" }], + ["meta", { property: "og:site_name", content: siteTitle }], + ["meta", { name: "twitter:card", content: "summary_large_image" }], + ["meta", { name: "theme-color", content: "#006dcc" }], + ], + lastUpdated: true, + cleanUrls: true, + markdown: { + config(md) { + md.use(groupIconMdPlugin); + }, + }, + vite: { + plugins: [ + groupIconVitePlugin({ + customIcon: { + typescript: "vscode-icons:file-type-typescript-official", + javascript: "vscode-icons:file-type-js-official", + ".changeset/config.json": { + light: localIconLoader(import.meta.url, "../public/logo-light.svg"), + dark: localIconLoader(import.meta.url, "../public/logo-dark.svg"), + }, + }, + }), + ], + }, + themeConfig: { + logo: { + light: "/logo-light.svg", + dark: "/logo-dark.svg", + alt: "Changesets logo", + }, + editLink: { + pattern: "https://github.com/changesets/changesets/edit/main/site/:path", + }, + socialLinks: [ + { icon: "discord", link: "https://chat.changesets.dev" }, + { icon: "github", link: "https://github.com/changesets/changesets" }, + { icon: "npm", link: "https://npmx.dev/package/@changesets/cli" }, + ], + search: { + provider: "local", + }, + outline: { + level: [2, 3], + }, + + footer: { + message: `This site is powered by ${netlifyLink}`, + copyright: `© ${currentYear} Changesets (${commitLink})`, + }, + + nav: [ + { + text: "Guide", + link: "/guide/getting-started", + activeMatch: "^/guide/", + }, + { + text: "FAQ", + link: "/faq", + }, + { + text: "Resources", + items: [ + { + text: "Blog", + link: "/blog/", + }, + { + text: "Acknowledgements", + link: "/acknowledgements", + }, + { + text: "Code of Conduct", + link: "https://github.com/changesets/.github/blob/main/CODE_OF_CONDUCT.md", + }, + ], + }, + { + text: `v${changesetsVersion}`, + items: [ + { + text: `v${changesetsVersion}`, + link: `https://github.com/changesets/changesets/releases/tag/%40changesets%2Fcli%40${changesetsVersion}`, + }, + { + text: "Changelog", + link: "https://github.com/changesets/changesets/blob/main/packages/cli/CHANGELOG.md", + }, + ], + }, + ], + + sidebar: { + "/guide/": { items: getMainSidebar() }, + "/packages/": { items: getMainSidebar() }, + }, + }, + transformHead(ctx) { + const pathname = + "/" + ctx.page.replace(/(^|\/)index\.md$/, "$1").replace(/\.md$/, ""); + const ogUrl = `${siteUrl}${pathname}`; + const isBlogPost = pathname.startsWith("/blog/") && pathname !== "/blog/"; + + return [ + ["meta", { property: "og:title", content: ctx.title }], + ["meta", { property: "og:description", content: ctx.description }], + ["meta", { property: "og:url", content: ogUrl }], + [ + "meta", + { + property: "og:image", + content: isBlogPost ? `${ogUrl}.png` : defaultOgImage, + }, + ], + ]; + }, +}); + +function getMainSidebar(): DefaultTheme.SidebarItem[] { + return [ + { + text: "Introduction", + base: "/guide/", + items: [ + { text: "Getting Started", link: "getting-started" }, + { text: "Why Changesets", link: "why" }, + { text: "Technical Decisions", link: "technical-decisions" }, + { text: "Migration from v2", link: "migration" }, + ], + }, + { + text: "API Reference", + base: "/guide/", + items: [ + { text: "Configuration File", link: "config" }, + { text: "Command Line Interface", link: "cli" }, + ], + }, + { + text: "Guides", + base: "/guide/", + items: [ + { + text: "Versioning and Publishing", + link: "versioning-and-publishing", + }, + { text: "Automating Changesets", link: "automating" }, + { text: "Backporting Changes", link: "backporting-changes" }, + { text: "Fixed Packages", link: "fixed-packages" }, + { text: "Linked Packages", link: "linked-packages" }, + { + text: "Customize Changelog Format", + link: "customize-changelog-format", + }, + { + text: "Customize Commit Format", + link: "customize-commit-format", + }, + { text: "Snapshot Releases", link: "snapshot-releases" }, + { text: "Prereleases", link: "prereleases" }, + { text: "Beyond npm", link: "beyond-npm" }, + ], + }, + { + text: "Packages", + base: "/packages/", + items: [ + { text: "@changesets/changelog-github", link: "changelog-github" }, + { text: "@changesets/config", link: "config" }, + { text: "@changesets/parse", link: "parse" }, + ], + }, + ]; +} diff --git a/site/.vitepress/theme/custom.css b/site/.vitepress/theme/custom.css new file mode 100644 index 000000000..b770455e2 --- /dev/null +++ b/site/.vitepress/theme/custom.css @@ -0,0 +1,66 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +:root { + --vp-c-brand-1: #006dcc; + --vp-c-brand-2: #006cc8; + --vp-c-brand-3: #1f9ce2; + --vp-c-brand-soft: rgba(102, 204, 255, 0.14); + + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: linear-gradient( + 135deg, + var(--vp-c-brand-1) 10%, + var(--vp-c-brand-3) 90% + ); + --vp-home-hero-image-background-image: linear-gradient( + 135deg, + var(--vp-c-brand-1) 50%, + var(--vp-c-brand-3) 50% + ); + --vp-home-hero-image-filter: blur(80px) opacity(0.7); + + /* Add transparency for navigation bars */ + --vp-nav-bg-color: color-mix(in srgb, var(--vp-c-bg) 70%, transparent); + --vp-local-nav-bg-color: color-mix(in srgb, var(--vp-c-bg) 70%, transparent); +} + +.dark { + --vp-c-brand-1: #9ccfff; + --vp-c-brand-2: #4d9ee4; + --vp-c-brand-3: #2a7fc4; + --vp-c-brand-soft: rgba(77, 158, 228, 0.16); + + --vp-home-hero-image-filter: blur(80px) opacity(0.5); +} + +/* Ensure tagline stays single line */ +.VPHero .heading > .text { + font-size: 48px; +} + +/* Loosen heading in mobile view */ +@media (max-width: 768px) { + .VPHero .heading > .name, + .VPHero .heading > .text { + letter-spacing: 0px; + } +} + +/* Blur effect for navigation bars */ +.VPNavBar:not(.home.top), +.VPLocalNav { + backdrop-filter: saturate(180%) blur(20px); +} + +/* We do not need sponsor images for now */ +.VPHomeSponsors .sponsors { + display: none; +} + +.VPFeature .details > a { + color: var(--vp-c-text-1); + text-decoration: underline; +} diff --git a/site/.vitepress/theme/index.ts b/site/.vitepress/theme/index.ts new file mode 100644 index 000000000..6d0b8638f --- /dev/null +++ b/site/.vitepress/theme/index.ts @@ -0,0 +1,12 @@ +import type { Theme } from "vitepress"; +import DefaultTheme from "vitepress/theme"; +import "./custom.css"; +import "virtual:group-icons.css"; +import { syncCodeGroups } from "./sync-code-groups.ts"; + +export default { + extends: DefaultTheme, + enhanceApp() { + syncCodeGroups(); + }, +} satisfies Theme; diff --git a/site/.vitepress/theme/sync-code-groups.ts b/site/.vitepress/theme/sync-code-groups.ts new file mode 100644 index 000000000..f15e0ac5b --- /dev/null +++ b/site/.vitepress/theme/sync-code-groups.ts @@ -0,0 +1,68 @@ +const seenCodeGroups = new WeakSet(); +const syncEventName = "vitepress-sync-code-groups:tab-change"; + +export function syncCodeGroups() { + if (typeof document === "undefined") return; + + const observer = new MutationObserver(() => { + for (const group of document.querySelectorAll(".vp-code-group")) { + if (seenCodeGroups.has(group)) continue; + seenCodeGroups.add(group); + + const labels = group.querySelectorAll(".tabs > label"); + const key = getKeyFromLabels(labels); + + const update = () => { + const selected = localStorage.getItem(key); + if (!selected) return; + + // NOTE: Do not click the label as otherwise VitePress will scroll to it. + // We manually implement the active state here. + const i = [...labels].findIndex((l) => l.dataset.title === selected); + if (i < 0) return localStorage.removeItem(key); + + const blocks = group.querySelector(".blocks"); + if (!blocks) return; + + const current = [...blocks.children].find((c) => + c.classList.contains("active"), + ); + if (!current) return; + + const next = blocks.children[i]; + if (!next || current === next) return; + + current.classList.remove("active"); + next.classList.add("active"); + (labels[i].control as HTMLInputElement).checked = true; + }; + + // Update on page load + update(); + + // Update on tab change in other tabs + document.addEventListener(syncEventName, (event: any) => { + if (event.detail.key === key) update(); + }); + + // When a tab is clicked, update localStorage and notify other tabs + for (const label of labels) { + label.addEventListener("click", () => { + localStorage.setItem(key, label.dataset.title!); + document.dispatchEvent( + new CustomEvent(syncEventName, { detail: { key } }), + ); + }); + } + } + }); + observer.observe(document, { childList: true, subtree: true }); +} + +function getKeyFromLabels(labels: NodeListOf) { + const id = [...labels] + .map((l) => l.dataset.title) + .sort() + .join("-"); + return `vitepress-sync-code-groups:${id}`; +} diff --git a/site/.vitepress/theme/utils.ts b/site/.vitepress/theme/utils.ts new file mode 100644 index 000000000..238cd8696 --- /dev/null +++ b/site/.vitepress/theme/utils.ts @@ -0,0 +1,17 @@ +export function extractBlogData(src: string, url: string) { + const title = /^#\s+(.+)$/m.exec(src)?.[1]; + if (!title) throw new Error(`Missing title in blog post at ${url}`); + + const date = /^_(.+)_$/m.exec(src)?.[1]; + if (!date) throw new Error(`Missing date in blog post at ${url}`); + + return { title, date }; +} + +export function formatDate(date: Date) { + return date.toLocaleDateString("en-UK", { + year: "numeric", + month: "long", + day: "numeric", + }); +} diff --git a/site/acknowledgements.md b/site/acknowledgements.md new file mode 100644 index 000000000..f1b53d5d0 --- /dev/null +++ b/site/acknowledgements.md @@ -0,0 +1,57 @@ +# Acknowledgements + +## Thanks and Inspirations + +- [Bolt](https://github.com/boltpkg/bolt)\ + Brought us a strong concept of how packages in a monorepo should be able to interconnect, and provided the initial infrastructure to get inter-package information. + +- [Atlassian](https://www.atlassian.com/)\ + The original idea/sponsor of the changesets code, and where many of the ideas and processes were fermented. It was originally implemented by the team behind [Atlaskit](https://atlaskit.atlassian.com). + +- [lerna-semantic-release](https://github.com/atlassian/lerna-semantic-release)\ + Put down many of the initial patterns around updating packages within a monorepo, and started us thinking about how to manage dependent packages. + +- [Thinkmill](https://www.thinkmill.com.au)\ + For sponsoring the focused open sourcing of this project, and the version two rearchitecture. + +## Cool Projects using Changesets + +- [atlaskit](https://atlaskit.atlassian.com) +- [emotion](https://emotion.sh/docs/introduction) +- [keystone](https://keystonejs.com) +- [react-select](https://react-select.com/home) +- [XState](https://xstate.js.org) +- [pnpm](https://pnpm.io) +- [tinyhttp](https://github.com/talentlessguy/tinyhttp) +- [Firebase Javascript SDK](https://github.com/firebase/firebase-js-sdk) +- [Formik](https://github.com/jaredpalmer/formik) +- [MobX](https://github.com/mobxjs/mobx) +- [Nhost](https://github.com/nhost/nhost) +- [verdaccio](https://verdaccio.org) +- [Chakra UI](https://chakra-ui.com) +- [Astro](https://astro.build) +- [Biome](https://biomejs.dev) +- [SvelteKit](https://kit.svelte.dev) +- [Hydrogen](https://hydrogen.shopify.dev) +- [react-pdf](https://github.com/diegomura/react-pdf) +- [GraphQL Code Generator](https://github.com/dotansimha/graphql-code-generator) +- [GraphQL Yoga](https://github.com/dotansimha/graphql-yoga) +- [GraphQL-Mesh](https://github.com/Urigo/graphql-mesh) +- [GraphiQL](https://github.com/graphql/graphiql) +- [wagmi](https://github.com/wagmi-dev/wagmi) +- [refine](https://github.com/pankod/refine) +- [Modern Web](https://modern-web.dev) +- [Atomizer](https://github.com/acss-io/atomizer) +- [Medusa](https://github.com/medusajs/medusa) +- [OpenZeppelin Contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [Block Protocol](https://github.com/blockprotocol/blockprotocol) +- [Remix](https://remix.run/) +- [Clerk](https://github.com/clerk/javascript) +- [Hey API](https://github.com/hey-api/openapi-ts) +- [neverthrow](https://github.com/supermacro/neverthrow) +- [Apollo Client](https://github.com/apollographql/apollo-client) +- [Adobe Spectrum CSS](https://github.com/adobe/spectrum-css) +- [Adobe Spectrum Web Components](https://github.com/adobe/spectrum-web-components) +- [React Email](https://react.email) + + diff --git a/site/blog/announcing-changesets-v3.md b/site/blog/announcing-changesets-v3.md new file mode 100644 index 000000000..6bcd69a97 --- /dev/null +++ b/site/blog/announcing-changesets-v3.md @@ -0,0 +1,13 @@ +# Announcing Changesets v3 + +_20 July 2026_ + +TODO + +## Breaking Changes + +TODO + +## Thanks + +TODO diff --git a/site/blog/index.data.ts b/site/blog/index.data.ts new file mode 100644 index 000000000..d2970390b --- /dev/null +++ b/site/blog/index.data.ts @@ -0,0 +1,37 @@ +import { createContentLoader } from "vitepress"; +import { extractBlogData } from "../.vitepress/theme/utils.ts"; + +interface Post { + title: string; + url: string; + date: { + time: number; + iso: string; + string: string; + }; +} + +declare const data: Post[]; +export { data }; + +export default createContentLoader("blog/*.md", { + includeSrc: true, + transform(contents): Post[] { + return contents + .filter(({ url }) => url !== "/blog/") + .map(({ url, src }) => { + const { title, date } = extractBlogData(src!, url); + const dateObj = new Date(date); + return { + title, + url, + date: { + time: +dateObj, + iso: dateObj.toISOString(), + string: date, + }, + }; + }) + .sort((a, b) => b.date.time - a.date.time); + }, +}); diff --git a/site/blog/index.md b/site/blog/index.md new file mode 100644 index 000000000..155029b28 --- /dev/null +++ b/site/blog/index.md @@ -0,0 +1,44 @@ + + +# The Changesets Blog + + + + diff --git a/site/faq.md b/site/faq.md new file mode 100644 index 000000000..9aa009160 --- /dev/null +++ b/site/faq.md @@ -0,0 +1,75 @@ +# Frequently Asked Questions + +Check the [guide](./guide/getting-started.md) to learn more about Changesets. + +## What is a changeset? + +A changeset is a Markdown file with YAML frontmatter. The contents of the Markdown is the change summary which will be written to the changelog and the YAML frontmatter describes the packages that have changed and their respective [semver](https://semver.org) bump types. + +They typically look like this: + +```md +--- +"pkg-a": minor +"pkg-b": patch +--- + +Summary of the change +``` + +## Do I need a changeset for every change? + +No! Since a changeset describes how a change should be released, changes that don't require a release do not need a changeset. + +## How do I add a changeset? + +Run the CLI to generate a changeset: + +::: code-group + +```bash [pnpm] +$ pnpm changeset +``` + +```bash [npm] +$ npx @changesets/cli +``` + +```bash [yarn] +$ yarn changeset +``` + +::: + +And follow the prompts: + +1. If the project has multiple packages, select the packages you want to include. + - Use and to navigate to packages + - Press space to select a package. + - Press enter when all desired packages are selected. +2. Select the appropriate [semver](https://semver.org) bump type for each selected package. +3. Provide a message to go alongside the changeset. This will be written into the changelog when the next release occurs. + + While not every changeset is going to need a huge amount of detail, a good idea of what should be in a changeset is: + - WHAT the change is + - WHY the change was made + - HOW a consumer should update their code + +A new changeset file will be created in the `.changeset` folder. Once you are happy with the changeset, commit the file to your branch. + +## Can I add more than one changeset in a PR? + +Yes! Changesets are designed to stack, so there's no problem with adding multiple. You might want to add more than one changeset when: + +- You want to release multiple packages with different changelog entries +- You have made multiple changes to a package that should each be called out separately + +## Can I manually edit a changeset? + +Yes! You can edit the file name, Markdown summary, and YAML frontmatter package names and bump types after they're created or committed. The file name uses random human readable names by default to avoid collisions, but there's no harm in renaming them. + +You can also delete them if you feel the changeset is not needed for a previous change as long as it has not been released yet. + +## Are changesets removed? + +When `changeset version` is run, all changeset files are removed. This is so we only ever use a changeset once. This makes the `.changeset` folder a very bad place to store any other information. diff --git a/site/guide/automating.md b/site/guide/automating.md new file mode 100644 index 000000000..12d07eef3 --- /dev/null +++ b/site/guide/automating.md @@ -0,0 +1,69 @@ +# Automating Changesets + +While Changesets is designed to work with a fully manual process, it also provides tools to help automate these releases. These can be broken into two major decisions: + +1. How do I ensure pull requests have changesets? +2. How do I run the version and publish commands? + +Here is a quick-start recommended workflow and more customization details. + +## Recommended Automation Flow + +1. Install the [Changesets GitHub Bot](https://github.com/apps/changeset-bot) into your repository. +2. Add the [Changesets GitHub Action](https://github.com/changesets/action) to your repository. + +## How do I ensure pull requests have changesets? + +Changesets are committed to files, so a diligent reviewer can always technically tell if a changeset is absent and request one to be added. As humans though, a file not being there is easy to miss. + +We recommend adding some way to detect the presence or absence of changesets on a pull request so you don't have to, as well as highlight it directly to the pull request author. + +This has two main approaches. + +### Non-blocking + +In this approach, a pull request may be merged if no changeset is present, and a missing changeset does not cause a failure in CI. Our [Changesets GitHub Bot](https://github.com/apps/changeset-bot) is the best way to prompt for changesets without making them blocking. + +It comments on PRs of whether changesets are present and gives you link to add your own changeset as a maintainer to smooth over merging pull requests without waiting for the contributor to add a changeset. + +### Blocking + +As not every change requires a release, we **do not recommend** blocking contributions in the absence of a changeset. However, if you prefer a consistent process that always requires a changeset, you can add a step in your CI setup that runs: + +::: code-group + +```bash [pnpm] +$ pnpm changeset status --since main +``` + +```bash [npm] +$ npx @changesets/cli status --since main +``` + +```bash [yarn] +$ yarn changeset status --since main +``` + +::: + +This will exit with code `1` if there are changed packages but no new changesets since main. It will not fail if there are no changed packages. + +If you want to merge a change without doing any releases (such as when you only change tests or build tools), you can run `changeset --empty` to add a special changeset that does not release anything. + +## How do I run the version and publish commands? + +You can set up the [Changesets GitHub Action](https://github.com/changesets/action) to automate this process: + +- It creates a `version` PR, then keeps it up to date, recreating it when merged. +- Optionally, if publishing is set up, it automatically publishes the release whenever the PR is merged. + +If you do not want to use this action, the manual workflow we recommend is: + +1. A release coordinator (RC) calls to stop any merging to the base branch +2. The RC pulls down the base branch, runs `changeset version`, then makes a new PR with the versioning changes +3. The versioning changes are merged back into the base branch +4. The RC pulls the base branch again and runs `changeset publish` +5. The RC runs `git push --follow-tags` to push the release tags back +6. The RC unblocks merging to the base branch + +This is a lot of steps and is quite finicky (we have to pull from the base branch twice). Feel free to finesse it to your own circumstances. diff --git a/site/guide/backporting-changes.md b/site/guide/backporting-changes.md new file mode 100644 index 000000000..c4d8e5ddd --- /dev/null +++ b/site/guide/backporting-changes.md @@ -0,0 +1,45 @@ +# Backporting Changes + +Sometimes, you may need to backport changes to a previous versions for important bug fixes or security patches. Changesets can also be configured to make this process easier. + +## Setting Up + +Releases for previous versions require a separate branch for the version. For example, to backport to `1.x` versions, you can create a `v1` branch based on the git tag of the last `1.x` release. + +```bash +$ git checkout -b v1 v1.2.3 +``` + +Then, update the [`baseBranch`](./config.md#baseBranch) option with the branch name. This allows the [`add`](./cli.md#add) command to properly detect the changed packages. + +```json [.changeset/config.json] +{ + "baseBranch": "v1" +} +``` + +If you have set up CI to [automatically run version and publish](./automating.md#how-do-i-run-the-version-and-publish-commands), make sure to allow running the workflow for this branch too. + +Also ensure the `publish` command is passed a custom `--tag` as we do not want backport releases to be tagged as `latest` on npm. + +```bash +$ changeset publish --tag previous +``` + +::: danger Remember to set a tag +This is **REALLY IMPORTANT** because if you do not include a tag, installing your package will default to the backport version, which is not what you want. +::: + +Commit the changes and push the branch to your remote. + +```bash +$ git add . +$ git commit -m "Set up backport branch" +$ git push -u origin v1 +``` + +## Releasing Backport Versions + +When you want to release a backport version, you can run the [`version`](./cli.md#version) and [`publish`](./cli.md#publish) commands as usual. See the [Versioning and Publishing](./versioning-and-publishing.md) guide for the usual flow. + +As mentioned above, remember to pass a custom `--tag` if you're running the `publish` command manually. diff --git a/site/guide/beyond-npm.md b/site/guide/beyond-npm.md new file mode 100644 index 000000000..402bf89f2 --- /dev/null +++ b/site/guide/beyond-npm.md @@ -0,0 +1,37 @@ +# Beyond npm + +When using Changesets, you are not limited to only publishing to npm. Changesets can also be used to manage private packages such as applications or non-npm packages (i.e. dotnet NuGet packages, ruby gems, docker images, etc). + +The only requirement is that the project has a `package.json` file to manage the versions and dependencies within the repo. It should have at least `name`, `private` and `version` set: + +```json [packages/my-project/package.json] +{ + "name": "my-project", + "private": true, + "version": "0.0.1" +} +``` + +And set [`privatePackages.version`](./config.md#privatepackages-version) to `true` in your `.changesets/config.json` file to enable versioning for these private packages. The packages can also be tagged during `changeset publish` by setting [`privatePackages.tag`](./config.md#privatepackages-tag) to `true`. + +## Private Dependencies + +Private packages can depend on other private packages that are ignored by the [`ignore`](./config.md#ignore) option. Since they aren't published to npm, it is safe for them to depend on ignored packages. + +For example, if you have an app `A` that depends on a private library `B`, you can ignore `B` while still versioning `A`: + +```json +{ + "ignore": ["B"] +} +``` + +This works because `A` is private and will never be published to npm with a stale reference to `B`. + +## Automated Releases + +If [`privatePackages.tag`](./config.md#privatepackagestag) is enabled, you can also automate releases for private packages by following the [Automating Changesets](./automating.md) guide. + +When calling `changeset publish` from the GitHub Action, it will create the git tags and GitHub releases for the private packages. They will not be published to npm. + +You can also create custom workflows that trigger on tags/releases being created to publish the private packages to other environments. diff --git a/site/guide/cli.data.ts b/site/guide/cli.data.ts new file mode 100644 index 000000000..baf982e77 --- /dev/null +++ b/site/guide/cli.data.ts @@ -0,0 +1,170 @@ +import { + createMarkdownRenderer, + defineLoader, + type MarkdownRenderer, + type SiteConfig, +} from "vitepress"; +import { cli } from "../../packages/cli/src/cli.ts"; + +export interface Data { + mainHelpMessage: string; + initHelpMessage: string; + addHelpMessage: string; + versionHelpMessage: string; + publishHelpMessage: string; + publishPlanHelpMessage: string; + packHelpMessage: string; + gitTagHelpMessage: string; + preHelpMessage: string; +} + +declare const data: Data; +export { data }; + +const helpMessageTasks: Record< + keyof Data, + { + flags: string[]; + sections: string[]; + processMessage?: (message: string) => string; + } +> = { + mainHelpMessage: { + flags: ["--help"], + sections: ["Usage", "Commands"], + }, + initHelpMessage: { + flags: ["init", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + addHelpMessage: { + flags: ["add", "--help"], + sections: ["Options", "Examples"], + processMessage: (log) => + `\ +Usage: + $ changeset [options] + $ changeset add [options] + +${log}`, + }, + versionHelpMessage: { + flags: ["version", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + publishHelpMessage: { + flags: ["publish", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + publishPlanHelpMessage: { + flags: ["publish-plan", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + packHelpMessage: { + flags: ["pack", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + gitTagHelpMessage: { + flags: ["tag", "--help"], + sections: ["Usage", "Options", "Examples"], + }, + preHelpMessage: { + flags: ["pre", "--help"], + sections: ["Usage", "Options", "Examples"], + }, +}; + +export default defineLoader({ + async load(): Promise { + const data: Data = { + mainHelpMessage: "", + initHelpMessage: "", + addHelpMessage: "", + versionHelpMessage: "", + publishHelpMessage: "", + publishPlanHelpMessage: "", + packHelpMessage: "", + gitTagHelpMessage: "", + preHelpMessage: "", + }; + + const config: SiteConfig = (globalThis as any).VITEPRESS_CONFIG; + const renderer = await createMarkdownRenderer( + config.srcDir, + config.markdown, + config.site.base, + config.logger, + ); + + let logs: string[] = []; + const _info = console.info; + console.info = (...args) => { + logs.push(args.join(" ")); + }; + + for (const [key, task] of Object.entries(helpMessageTasks)) { + logs = []; + cli.parse(["node", "changeset", ...task.flags], { run: false }); + cli.runMatchedCommand(); + data[key as keyof Data] = logs.join("\n"); + } + + console.info = _info; + + await Promise.all( + Object.keys(data).map(async (key) => { + const message = data[key as keyof Data]; + const task = helpMessageTasks[key as keyof Data]; + + let newMessage = getMessageSections(message, task.sections); + newMessage = task.processMessage?.(newMessage) ?? newMessage; + + data[key as keyof Data] = await renderHelpMessage(renderer, newMessage); + }), + ); + + return data; + }, +}); + +function getMessageSections(message: string, sections: string[]) { + const newLines: string[] = []; + let inSection: string | false = false; + for (const line of [...message.split("\n"), ""]) { + if (!inSection) { + // Start section when a line matches one of the section headers + if (sections.some((section) => line.startsWith(section + ":"))) { + inSection = line; + newLines.push(line); + } + } else { + // If empty line, we reach the end of the section + if (line.trim() === "") { + // If the last line is the same as the section header, it means the section has no content, + // so remove it + if (newLines.at(-1) === inSection) { + newLines.pop(); + } else { + newLines.push(line); + } + inSection = false; + } else if ( + // Skip known irrelevant lines + !line.includes("-v, --version") && + !line.includes("-h, --help") + ) { + newLines.push(line); + } + } + } + return newLines.join("\n"); +} + +async function renderHelpMessage(renderer: MarkdownRenderer, message: string) { + const md = "```bash\n" + message + "\n```"; + const html = (await renderer.renderAsync(md)) + // VitePress auto-dedents lines that starts with `$`. We want to keep it indented and selectable. + .replace(/user-select:none;-webkit-user-select:none">\$/g, '"> $'); + + return html; +} diff --git a/site/guide/cli.md b/site/guide/cli.md new file mode 100644 index 000000000..b48741656 --- /dev/null +++ b/site/guide/cli.md @@ -0,0 +1,179 @@ + + +# Command Line Interface + +The Changesets CLI is the main way of interacting with changesets. It provides a set of commands that allow you to manage your changesets, version your packages, and publish them. + +
+ +## init + +
+ +This command sets up the `.changeset` folder. It generates a readme and creates a config file through an interactive prompt. You should run this command once when you are setting up Changesets. + +## add + +
+ +This is the main command to interact with the changesets. + +It will ask you a series of questions, first about what packages you want to release, then what semver bump type for each package, then it will ask for a summary of the changes. The final step will show the changeset it will generate and confirm that you want to add it. + +Once confirmed, the changeset will be written in the `.changeset` folder. If the [`commit`](./config.md#commit) option is enabled, the changeset will be automatically committed to git. + +### Empty changesets + +If you have [CI that blocks merges](./automating.md#blocking) without a changeset, pass `--empty` to create an empty changeset. + +### Changing the base branch + +When prompting for packages to release, Changesets will detect and suggest the changed packages since the last commit on [`baseBranch`](./config.md#basebranch). If you want to use a different base branch, tag, or git ref, you can change it with the `--since [branch]` option. + +```bash +$ changeset --since next +``` + +## version + +
+ +- **Related:** [Versioning and Publishing](./versioning-and-publishing.md#versioning) + +This is one of two commands responsible for releasing packages. The `version` command takes changesets that have been made and updates versions and dependencies of packages, as well as writing changelogs. It is responsible for all file changes before publishing to npm. + +::: tip Commit the version changes +We recommend making sure changes made from this command are committed before you run publish: + +```bash +$ git add . +$ git commit -m "Version packages" +``` + +::: + +### Ignoring packages + +The `--ignore` flag allows you to skip packages from being published. This allows you to run partial publishes of the repository. This extends the [`ignore`](./config.md#ignore) option with the same documented caveats. + +```bash +$ changeset version --ignore pkg-a --ignore pkg-b +``` + +### Snapshot releases + +You can use the `--snapshot` flag to create a [snapshot release](./snapshot-releases.md), meant for testing purposes only. The suffix for snapshot releases can be customized with `--snapshot-prerelease-template