From 0595e1b417c16ac81972c064c8ab4f04a7f80c22 Mon Sep 17 00:00:00 2001 From: bluwy Date: Mon, 15 Jun 2026 10:32:12 +0800 Subject: [PATCH 1/8] Add select-mode, version, and publish sub-actions --- .changeset/eight-clocks-pull.md | 5 +++ publish/README.md | 3 ++ publish/action.yml | 26 +++++++++++++++ rolldown.config.js | 3 ++ select-mode/README.md | 3 ++ select-mode/action.yml | 16 ++++++++++ src/publish/index.ts | 55 ++++++++++++++++++++++++++++++++ src/run.ts | 48 ++++++++++++++++++---------- src/select-mode/index.ts | 30 ++++++++++++++++++ src/version/index.ts | 56 +++++++++++++++++++++++++++++++++ version/README.md | 3 ++ version/action.yml | 43 +++++++++++++++++++++++++ 12 files changed, 274 insertions(+), 17 deletions(-) create mode 100644 .changeset/eight-clocks-pull.md create mode 100644 publish/README.md create mode 100644 publish/action.yml create mode 100644 select-mode/README.md create mode 100644 select-mode/action.yml create mode 100644 src/publish/index.ts create mode 100644 src/select-mode/index.ts create mode 100644 src/version/index.ts create mode 100644 version/README.md create mode 100644 version/action.yml diff --git a/.changeset/eight-clocks-pull.md b/.changeset/eight-clocks-pull.md new file mode 100644 index 00000000..76a279e5 --- /dev/null +++ b/.changeset/eight-clocks-pull.md @@ -0,0 +1,5 @@ +--- +"@changesets/action": minor +--- + +Add new `/select-mode`, `/version`, and `/publish` sub-actions to better control version and publish steps diff --git a/publish/README.md b/publish/README.md new file mode 100644 index 00000000..2850488a --- /dev/null +++ b/publish/README.md @@ -0,0 +1,3 @@ +# changesets/action/publish + +TODO diff --git a/publish/action.yml b/publish/action.yml new file mode 100644 index 00000000..33e168c0 --- /dev/null +++ b/publish/action.yml @@ -0,0 +1,26 @@ +name: Changesets - Publish +description: Publish packages to npm +runs: + using: node24 + main: ../dist/publish.js +inputs: + github-token: + description: "The GitHub token to use for authentication. Defaults to the GitHub-provided token." + required: false + default: ${{ github.token }} + script: + description: "The command to use to publish packages" + required: false + create-github-releases: + description: "Whether to create Github releases after publish" + required: false + default: true +outputs: + published: + description: "A boolean value to indicate whether a publishing has happened or not" + publishedPackages: + description: > + A JSON array to present the published packages. The format is `[{"name": "@xx/xx", "version": "1.2.0"}, {"name": "@xx/xy", "version": "0.8.9"}]` +branding: + icon: package + color: blue diff --git a/rolldown.config.js b/rolldown.config.js index 814f4f4b..c2b2941a 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -5,6 +5,9 @@ export default defineConfig({ index: "src/index.ts", ["pr-status"]: "src/pr-status/index.ts", ["pr-comment"]: "src/pr-comment/index.ts", + ["select-mode"]: "src/select-mode/index.ts", + version: "src/version/index.ts", + publish: "src/publish/index.ts", }, output: { dir: "dist", diff --git a/select-mode/README.md b/select-mode/README.md new file mode 100644 index 00000000..f741cc8c --- /dev/null +++ b/select-mode/README.md @@ -0,0 +1,3 @@ +# changesets/action/select-mode + +TODO diff --git a/select-mode/action.yml b/select-mode/action.yml new file mode 100644 index 00000000..676b1b5b --- /dev/null +++ b/select-mode/action.yml @@ -0,0 +1,16 @@ +name: Changesets - Select Mode +description: Whether to version or publish in the current repo state +runs: + using: node24 + main: ../dist/select-mode.js +inputs: + github-token: + description: "The GitHub token to use for authentication. Defaults to the GitHub-provided token." + required: false + default: ${{ github.token }} +outputs: + mode: + description: "The mode to use for the current repo state: 'version', 'publish', or 'none'." +branding: + icon: package + color: blue diff --git a/src/publish/index.ts b/src/publish/index.ts new file mode 100644 index 00000000..a3c3c510 --- /dev/null +++ b/src/publish/index.ts @@ -0,0 +1,55 @@ +import * as core from "@actions/core"; +import { Git } from "../git.ts"; +import { setupOctokit } from "../octokit.ts"; +import { runPublish } from "../run.ts"; + +try { + await main(); +} catch (err) { + core.setFailed((err as Error).message); +} + +async function main() { + const githubToken = core.getInput("github-token", { required: true }); + const script = core.getInput("script"); + const createGithubReleases = core.getBooleanInput("create-github-releases"); + + // If the user needs to change the cwd, set `working-directory` in the step instead + const cwd = process.cwd(); + + const octokit = setupOctokit(githubToken); + // NOTE: Always pass octokit here as publish does not need a commit-mode + const git = new Git({ octokit, cwd }); + + const result = await runPublish({ + script, + githubToken, + git, + octokit, + createGithubReleases, + cwd, + }); + + if (result.published) { + core.setOutput("published", "true"); + core.setOutput( + "publishedPackages", + JSON.stringify(result.publishedPackages), + ); + } else { + core.setOutput("published", "false"); + } + + if (result.exitCode !== 0) { + throw new Error( + `Publish command exited with code ${result.exitCode}${ + result.published + ? `, but some packages were published: ${result.publishedPackages + .map((p) => `${p.name}@${p.version}`) + .join(", ")}` + : "" + }`, + ); + process.exit(result.exitCode); + } +} diff --git a/src/run.ts b/src/run.ts index 64d391d7..17f6304e 100644 --- a/src/run.ts +++ b/src/run.ts @@ -2,7 +2,12 @@ import fs from "node:fs/promises"; import { createRequire } from "node:module"; import path from "node:path"; import * as core from "@actions/core"; -import { exec, getExecOutput } from "@actions/exec"; +import { + exec, + getExecOutput, + type ExecOptions, + type ExecOutput, +} from "@actions/exec"; import * as github from "@actions/github"; import type { PreState } from "@changesets/types"; import { type Package, getPackages } from "@manypkg/get-packages"; @@ -59,7 +64,7 @@ const createRelease = async ( }; type PublishOptions = { - script: string; + script?: string; githubToken: string; octokit: Octokit; createGithubReleases: boolean; @@ -88,11 +93,29 @@ export async function runPublish({ createGithubReleases, cwd, }: PublishOptions): Promise { - let changesetPublishOutput = await getExecOutput(script, undefined, { + let changesetPublishOutput: ExecOutput; + const execOptions: ExecOptions = { cwd, ignoreReturnCode: true, env: { ...process.env, GITHUB_TOKEN: githubToken }, - }); + }; + + if (script) { + changesetPublishOutput = await getExecOutput( + script, + undefined, + execOptions, + ); + } else { + const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { + paths: [cwd], + }); + changesetPublishOutput = await getExecOutput( + "node", + [changesetsCliBin, "publish"], + execOptions, + ); + } let { packages, tool } = await getPackages(cwd); let releasedPackages: Package[] = []; @@ -300,19 +323,10 @@ export async function runVersion({ let cmd = semverLt(changesetsCliPkgJson.version, "2.0.0") ? "bump" : "version"; - await exec( - "node", - [ - require.resolve("@changesets/cli/bin.js", { - paths: [cwd], - }), - cmd, - ], - { - cwd, - env, - }, - ); + const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { + paths: [cwd], + }); + await exec("node", [changesetsCliBin, cmd], { cwd, env }); } let changedPackages = await getChangedPackages(cwd, versionsByDirectory); diff --git a/src/select-mode/index.ts b/src/select-mode/index.ts new file mode 100644 index 00000000..651925b1 --- /dev/null +++ b/src/select-mode/index.ts @@ -0,0 +1,30 @@ +import * as core from "@actions/core"; +import readChangesetState from "../readChangesetState.ts"; + +try { + await main(); +} catch (err) { + core.setFailed((err as Error).message); +} + +async function main() { + const mode = await getMode(); + core.setOutput("mode", mode); +} + +async function getMode(): Promise<"version" | "publish" | "none"> { + const { changesets } = await readChangesetState(); + + if (changesets.length > 0) { + const hasNonEmptyChangesets = changesets.some( + (changeset) => changeset.releases.length > 0, + ); + if (hasNonEmptyChangesets) { + return "version"; + } else { + return "none"; + } + } else { + return "publish"; + } +} diff --git a/src/version/index.ts b/src/version/index.ts new file mode 100644 index 00000000..0d149d59 --- /dev/null +++ b/src/version/index.ts @@ -0,0 +1,56 @@ +import * as core from "@actions/core"; +import { Git } from "../git.ts"; +import { setupOctokit } from "../octokit.ts"; +import { runVersion } from "../run.ts"; + +try { + await main(); +} catch (err) { + core.setFailed((err as Error).message); +} + +async function main() { + const githubToken = core.getInput("github-token", { required: true }); + const script = core.getInput("script"); + const prTitle = core.getInput("pr-title", { required: true }); + const prCommit = core.getInput("pr-commit", { required: true }); + const prBranch = core.getInput("pr-branch"); + const prDraft = core.getInput("pr-draft") ?? undefined; + const commitMode = core.getInput("commit-mode") || "git-cli"; + const setupGitUser = core.getBooleanInput("setup-git-user"); + + // Validations + if (prDraft !== undefined && prDraft !== "always" && prDraft !== "create") { + throw new Error(`Invalid pr-draft input: ${prDraft}`); + } + + // If the user needs to change the cwd, set `working-directory` in the step instead + const cwd = process.cwd(); + + const octokit = setupOctokit(githubToken); + const git = new Git({ + octokit: commitMode === "github-api" ? octokit : undefined, + cwd, + }); + + if (setupGitUser) { + core.info("setting git user"); + await git.setupUser(); + } + + const { pullRequestNumber } = await runVersion({ + script, + githubToken, + git, + octokit, + cwd, + prTitle, + commitMessage: prCommit, + // TODO: Use neutral message for PR description + hasPublishScript: true, + prDraft, + branch: prBranch, + }); + + core.setOutput("pr-number", String(pullRequestNumber)); +} diff --git a/version/README.md b/version/README.md new file mode 100644 index 00000000..f0efb2bb --- /dev/null +++ b/version/README.md @@ -0,0 +1,3 @@ +# changesets/action/version + +TODO diff --git a/version/action.yml b/version/action.yml new file mode 100644 index 00000000..dc949070 --- /dev/null +++ b/version/action.yml @@ -0,0 +1,43 @@ +name: Changesets - Version +description: Version packages +runs: + using: node24 + main: ../dist/version.js +inputs: + github-token: + description: "The GitHub token to use for authentication. Defaults to the GitHub-provided token." + required: false + default: ${{ github.token }} + script: + description: "The command to use to publish packages" + required: false + pr-title: + description: "The pull request title. Default to `Version Packages`" + required: false + default: "Version Packages" + pr-commit: + description: "The commit message. Default to `Version Packages`" + required: false + default: "Version Packages" + pr-branch: + description: "Sets the branch in which the action will run. Defaults to `github.ref_name`." + required: false + pr-draft: + description: "Controls draft PR behavior. Use 'create' to create new version PRs as draft, or 'always' to also convert existing version PRs back to draft when updating them." + required: false + commit-mode: + description: > + An enum to specify the commit mode. Use "git-cli" to push changes using the Git CLI, + or "github-api" to push changes via the GitHub API. When using "github-api", + all commits and tags are signed using GitHub's GPG key and attributed to the user + or app who owns the GITHUB_TOKEN. + required: false + default: "git-cli" + setup-git-user: + description: Sets up the git user for commits as `"github-actions[bot]"`. Default to `true` + required: false + default: true +outputs: {} +branding: + icon: package + color: blue From 26f6f8c137100fb082714aeeea40676d868813e3 Mon Sep 17 00:00:00 2001 From: bluwy Date: Mon, 15 Jun 2026 16:22:53 +0800 Subject: [PATCH 2/8] Rename --- src/version/index.ts | 10 +++++----- version/action.yml | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/version/index.ts b/src/version/index.ts index 0d149d59..985fd048 100644 --- a/src/version/index.ts +++ b/src/version/index.ts @@ -12,10 +12,10 @@ try { async function main() { const githubToken = core.getInput("github-token", { required: true }); const script = core.getInput("script"); + const commitMessage = core.getInput("commit-message", { required: true }); const prTitle = core.getInput("pr-title", { required: true }); - const prCommit = core.getInput("pr-commit", { required: true }); - const prBranch = core.getInput("pr-branch"); - const prDraft = core.getInput("pr-draft") ?? undefined; + const prDraft = core.getInput("pr-draft") || undefined; + const baseBranch = core.getInput("base-branch"); const commitMode = core.getInput("commit-mode") || "git-cli"; const setupGitUser = core.getBooleanInput("setup-git-user"); @@ -45,11 +45,11 @@ async function main() { octokit, cwd, prTitle, - commitMessage: prCommit, + commitMessage, // TODO: Use neutral message for PR description hasPublishScript: true, prDraft, - branch: prBranch, + branch: baseBranch, }); core.setOutput("pr-number", String(pullRequestNumber)); diff --git a/version/action.yml b/version/action.yml index dc949070..40732abe 100644 --- a/version/action.yml +++ b/version/action.yml @@ -11,20 +11,20 @@ inputs: script: description: "The command to use to publish packages" required: false - pr-title: - description: "The pull request title. Default to `Version Packages`" - required: false - default: "Version Packages" - pr-commit: + commit-message: description: "The commit message. Default to `Version Packages`" required: false default: "Version Packages" - pr-branch: - description: "Sets the branch in which the action will run. Defaults to `github.ref_name`." + pr-title: + description: "The pull request title. Default to `Version Packages`" required: false + default: "Version Packages" pr-draft: description: "Controls draft PR behavior. Use 'create' to create new version PRs as draft, or 'always' to also convert existing version PRs back to draft when updating them." required: false + base-branch: + description: "Sets the base branch of the PR. Defaults to `github.ref_name`." + required: false commit-mode: description: > An enum to specify the commit mode. Use "git-cli" to push changes using the Git CLI, From 9fc1981cc7d331a4b73b867d122f0248a5dd409e Mon Sep 17 00:00:00 2001 From: bluwy Date: Mon, 15 Jun 2026 16:35:50 +0800 Subject: [PATCH 3/8] No github-token needed for select-mode for now --- select-mode/action.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/select-mode/action.yml b/select-mode/action.yml index 676b1b5b..cbeeeba9 100644 --- a/select-mode/action.yml +++ b/select-mode/action.yml @@ -3,11 +3,7 @@ description: Whether to version or publish in the current repo state runs: using: node24 main: ../dist/select-mode.js -inputs: - github-token: - description: "The GitHub token to use for authentication. Defaults to the GitHub-provided token." - required: false - default: ${{ github.token }} +inputs: {} outputs: mode: description: "The mode to use for the current repo state: 'version', 'publish', or 'none'." From 10ef577b9b7f446037256bec55b5816621ebf7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Wed, 17 Jun 2026 08:41:59 +0200 Subject: [PATCH 4/8] extend select-mode with publish-plan check and upload --- package.json | 1 + pnpm-lock.yaml | 945 ++++++++++++++++++++++++++++++++++++++- select-mode/action.yml | 2 + src/select-mode/index.ts | 119 ++++- 4 files changed, 1057 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 471fccef..df2e40a0 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "release:pr": "node --experimental-strip-types ./scripts/release-pr.ts" }, "dependencies": { + "@actions/artifact": "^6.2.1", "@actions/core": "^3.0.1", "@actions/exec": "^3.0.0", "@actions/github": "^9.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34eea626..cc12b6c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,9 @@ importers: .: dependencies: + '@actions/artifact': + specifier: ^6.2.1 + version: 6.2.1 '@actions/core': specifier: ^3.0.1 version: 3.0.1 @@ -98,6 +101,9 @@ importers: packages: + '@actions/artifact@6.2.1': + resolution: {integrity: sha512-sJGH0mhEbEjBCw7o6SaLhUU66u27aFW8HTfkIb5Tk2/Wy0caUDc+oYQEgnuFN7a0HCpAbQyK0U6U7XUJDgDWrw==} + '@actions/core@3.0.1': resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} @@ -116,10 +122,71 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} + engines: {node: '>=20.0.0'} + + '@azure/core-client@1.10.2': + resolution: {integrity: sha512-1D2LpsU7y9xrqKjdIbsB7PlrRePw0xsVV8p+AKTlzITrWmscajryfJCdDJB/oGwvDI5HmRo04eMMADB67uwAwQ==} + engines: {node: '>=20.0.0'} + + '@azure/core-http-compat@2.4.0': + resolution: {integrity: sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 + + '@azure/core-lro@2.7.2': + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} + + '@azure/core-paging@1.6.2': + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} + engines: {node: '>=18.0.0'} + + '@azure/core-rest-pipeline@1.24.0': + resolution: {integrity: sha512-PpLsoDQ3AMmKZ0VU+0GrmqMxgp/sExjlVm4R+nLWngeoEGAzOIPVifaxKGU5gMv+nWELUoHfvrolWD+ZS/nFJg==} + engines: {node: '>=20.0.0'} + + '@azure/core-tracing@1.3.1': + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} + engines: {node: '>=20.0.0'} + + '@azure/core-util@1.13.1': + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} + engines: {node: '>=20.0.0'} + + '@azure/core-xml@1.5.1': + resolution: {integrity: sha512-xcNRHqCoSp4AunOALEae6A8f3qATb83gSrm31Iqb01OzblvC3/W/bfXozcq78EzIdzZzuH1bZ2NvRR0TdX709w==} + engines: {node: '>=20.0.0'} + + '@azure/logger@1.3.0': + resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} + engines: {node: '>=20.0.0'} + + '@azure/storage-blob@12.32.0': + resolution: {integrity: sha512-80LzSNnFQye2LCCBFghAJS6jJQJ7N4bfgZ6qDMgVGRtugZ7TLDKQZ2hczMigmZH3jAcMRdma/IygsC5+0gT7Tw==} + engines: {node: '>=20.0.0'} + + '@azure/storage-common@12.4.0': + resolution: {integrity: sha512-kNhJKMxQb374KOVt63CZnGIpDcrKNzJeyANLJymxE9mCJSdRGzb+Iv9oSIiCj6tNMLypr530b9ObOiA/5OvwOg==} + engines: {node: '>=20.0.0'} + '@babel/runtime@7.29.2': resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.12.0': + resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==} + + '@bufbuild/protoplugin@2.12.0': + resolution: {integrity: sha512-ORlDITp8AFUXzIhLRoMCG+ud+D3MPKWb5HQXBoskMMnjeyEjE1H1qLonVNPyOr8lkx3xSfYUo8a0dvOZJVAzow==} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -202,6 +269,10 @@ packages: '@types/node': optional: true + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -217,6 +288,9 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@nodable/entities@2.1.1': + resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -254,12 +328,24 @@ packages: peerDependencies: '@octokit/core': '>=6' + '@octokit/plugin-request-log@6.0.0': + resolution: {integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=6' + '@octokit/plugin-rest-endpoint-methods@17.0.0': resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' + '@octokit/plugin-retry@8.1.0': + resolution: {integrity: sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=7' + '@octokit/plugin-throttling@11.0.3': resolution: {integrity: sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==} engines: {node: '>= 20'} @@ -402,6 +488,24 @@ packages: cpu: [x64] os: [win32] + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@protobuf-ts/plugin@2.11.1': + resolution: {integrity: sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A==} + hasBin: true + + '@protobuf-ts/protoc@2.11.1': + resolution: {integrity: sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==} + hasBin: true + + '@protobuf-ts/runtime-rpc@2.11.1': + resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} + + '@protobuf-ts/runtime@2.11.1': + resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} + '@rolldown/binding-android-arm64@1.0.1': resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -527,6 +631,15 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@typescript/vfs@1.6.4': + resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} + peerDependencies: + typescript: '*' + + '@typespec/ts-http-runtime@0.3.6': + resolution: {integrity: sha512-jIXhD0eWQ1JA6ln/5Dltyx22UxWNrw0hZmhy2rlv6m6KgF7kplHx3g0fzi09lNmTJQRR91OlemYp3xFnvDK9og==} + engines: {node: '>=20.0.0'} + '@vitest/expect@4.1.6': resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==} @@ -560,6 +673,10 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -568,6 +685,26 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -585,10 +722,65 @@ packages: async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.7.2: + resolution: {integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.9.1: + resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.1: + resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} + + bare-stream@2.13.1: + resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.5: + resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -599,16 +791,30 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} + binary@0.3.0: + resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} + bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffers@0.1.1: + resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} + engines: {node: '>=0.2.0'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -625,12 +831,26 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chainsaw@0.1.0: + resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} clean-git-ref@2.0.1: resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + content-type@2.0.0: resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} engines: {node: '>=18'} @@ -638,11 +858,18 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} hasBin: true + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -650,6 +877,15 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -677,6 +913,15 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -708,6 +953,9 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -722,10 +970,20 @@ packages: fast-content-type-parse@3.0.0: resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + + fast-xml-parser@5.8.0: + resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -750,6 +1008,10 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -782,6 +1044,11 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -808,6 +1075,14 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-id@4.1.3: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true @@ -834,6 +1109,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -842,6 +1121,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -854,6 +1137,9 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -865,6 +1151,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + js-yaml@3.14.2: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true @@ -879,6 +1168,14 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -886,6 +1183,12 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -908,16 +1211,35 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minimisted@2.0.1: resolution: {integrity: sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -927,6 +1249,10 @@ packages: encoding: optional: true + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -961,6 +1287,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} @@ -971,10 +1300,18 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -1006,6 +1343,9 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -1020,10 +1360,16 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@4.7.0: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1040,6 +1386,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -1097,6 +1446,20 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + streamx@2.27.0: + resolution: {integrity: sha512-WZ189TKnHoAokYHvwzaAQMpd55cgUmFIcJFzBSgGcb886jau5DL+XdDhTWV4ps3FLvk+OORp0dLRTPsLZ21CSA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -1104,14 +1467,30 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} + + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1146,6 +1525,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + traverse@0.3.9: + resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1157,6 +1539,16 @@ packages: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} + typescript@3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -1176,6 +1568,12 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + unzip-stream@0.3.4: + resolution: {integrity: sha512-PyofABPVv+d7fL7GOpusx7eRT9YETY2X04PhwbSipdj6bMxVCFJrr+nm0Mxqbf9hUiTin/UsnuFWBXlDZFy0Cw==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vite@8.0.13: resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1280,11 +1678,49 @@ packages: engines: {node: '>=8'} hasBin: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + snapshots: + '@actions/artifact@6.2.1': + dependencies: + '@actions/core': 3.0.1 + '@actions/github': 9.1.1 + '@actions/http-client': 4.0.1 + '@azure/storage-blob': 12.32.0 + '@octokit/core': 7.0.6 + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.1.0(@octokit/core@7.0.6) + '@octokit/request': 10.0.9 + '@octokit/request-error': 7.1.0 + '@protobuf-ts/plugin': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + archiver: 7.0.1 + jwt-decode: 4.0.0 + unzip-stream: 0.3.4 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + '@actions/core@3.0.1': dependencies: '@actions/exec': 3.0.0 @@ -1316,8 +1752,131 @@ snapshots: '@actions/io@3.0.2': {} + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.10.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.24.0 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.10.2 + '@azure/core-rest-pipeline': 1.24.0 + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-paging@1.6.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.24.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@typespec/ts-http-runtime': 0.3.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.3.1': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.13.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.3.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-xml@1.5.1': + dependencies: + fast-xml-parser: 5.8.0 + tslib: 2.8.1 + + '@azure/logger@1.3.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/storage-blob@12.32.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.2 + '@azure/core-http-compat': 2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0) + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.24.0 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/core-xml': 1.5.1 + '@azure/logger': 1.3.0 + '@azure/storage-common': 12.4.0(@azure/core-client@1.10.2) + events: 3.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/storage-common@12.4.0(@azure/core-client@1.10.2)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-http-compat': 2.4.0(@azure/core-client@1.10.2)(@azure/core-rest-pipeline@1.24.0) + '@azure/core-rest-pipeline': 1.24.0 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + events: 3.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@babel/runtime@7.29.2': {} + '@bufbuild/protobuf@2.12.0': {} + + '@bufbuild/protoplugin@2.12.0': + dependencies: + '@bufbuild/protobuf': 2.12.0 + '@typescript/vfs': 1.6.4(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -1503,6 +2062,15 @@ snapshots: optionalDependencies: '@types/node': 24.12.4 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/sourcemap-codec@1.5.5': {} '@manypkg/find-root@1.1.0': @@ -1528,6 +2096,8 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@nodable/entities@2.1.1': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1570,11 +2140,22 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/types': 16.0.0 + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': dependencies: '@octokit/core': 7.0.6 '@octokit/types': 16.0.0 + '@octokit/plugin-retry@8.1.0(@octokit/core@7.0.6)': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 + bottleneck: 2.19.5 + '@octokit/plugin-throttling@11.0.3(@octokit/core@7.0.6)': dependencies: '@octokit/core': 7.0.6 @@ -1658,6 +2239,28 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.48.0': optional: true + '@pkgjs/parseargs@0.11.0': + optional: true + + '@protobuf-ts/plugin@2.11.1': + dependencies: + '@bufbuild/protobuf': 2.12.0 + '@bufbuild/protoplugin': 2.12.0 + '@protobuf-ts/protoc': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + typescript: 3.9.10 + transitivePeerDependencies: + - supports-color + + '@protobuf-ts/protoc@2.11.1': {} + + '@protobuf-ts/runtime-rpc@2.11.1': + dependencies: + '@protobuf-ts/runtime': 2.11.1 + + '@protobuf-ts/runtime@2.11.1': {} + '@rolldown/binding-android-arm64@1.0.1': optional: true @@ -1735,6 +2338,21 @@ snapshots: '@types/semver@7.7.1': {} + '@typescript/vfs@1.6.4(typescript@5.4.5)': + dependencies: + debug: 4.4.3 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typespec/ts-http-runtime@0.3.6': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@vitest/expect@4.1.6': dependencies: '@standard-schema/spec': 1.1.0 @@ -1780,10 +2398,44 @@ snapshots: dependencies: event-target-shim: 5.0.1 + agent-base@7.1.4: {} + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.5.0 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.18.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.2.0 + zip-stream: 6.0.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -1796,10 +2448,48 @@ snapshots: async-lock@1.4.1: {} + async@3.2.6: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 + b4a@1.8.1: {} + + balanced-match@1.0.2: {} + + bare-events@2.9.1: {} + + bare-fs@4.7.2: + dependencies: + bare-events: 2.9.1 + bare-path: 3.0.1 + bare-stream: 2.13.1(bare-events@2.9.1) + bare-url: 2.4.5 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-os@3.9.1: {} + + bare-path@3.0.1: + dependencies: + bare-os: 3.9.1 + + bare-stream@2.13.1(bare-events@2.9.1): + dependencies: + streamx: 2.27.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.4.5: + dependencies: + bare-path: 3.0.1 + base64-js@1.5.1: {} before-after-hook@4.0.0: {} @@ -1808,17 +2498,30 @@ snapshots: dependencies: is-windows: 1.0.2 + binary@0.3.0: + dependencies: + buffers: 0.1.1 + chainsaw: 0.1.0 + bottleneck@2.19.5: {} + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 + buffer-crc32@1.0.0: {} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + buffers@0.1.1: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -1838,16 +2541,41 @@ snapshots: chai@6.2.2: {} + chainsaw@0.1.0: + dependencies: + traverse: 0.3.9 + chardet@2.1.1: {} clean-git-ref@2.0.1: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + content-type@2.0.0: {} convert-source-map@2.0.0: {} + core-util-is@1.0.3: {} + crc-32@1.2.2: {} + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -1856,6 +2584,10 @@ snapshots: dataloader@1.4.0: {} + debug@4.4.3: + dependencies: + ms: 2.1.3 + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -1882,6 +2614,12 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -1905,6 +2643,12 @@ snapshots: event-target-shim@5.0.1: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - bare-abort-controller + events@3.3.0: {} expect-type@1.3.0: {} @@ -1913,6 +2657,8 @@ snapshots: fast-content-type-parse@3.0.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1921,6 +2667,19 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + + fast-xml-parser@5.8.0: + dependencies: + '@nodable/entities': 2.1.1 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + xml-naming: 0.1.0 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -1942,6 +2701,11 @@ snapshots: dependencies: is-callable: 1.2.7 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -1983,6 +2747,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -2010,6 +2783,20 @@ snapshots: dependencies: function-bind: 1.1.2 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + human-id@4.1.3: {} iconv-lite@0.7.2: @@ -2026,12 +2813,16 @@ snapshots: is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-number@7.0.0: {} + is-stream@2.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -2042,6 +2833,8 @@ snapshots: is-windows@1.0.2: {} + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -2060,6 +2853,12 @@ snapshots: sha.js: 2.4.12 simple-get: 4.0.1 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + js-yaml@3.14.2: dependencies: argparse: 1.0.10 @@ -2075,12 +2874,22 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jwt-decode@4.0.0: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 lodash.startcase@4.4.0: {} + lodash@4.18.1: {} + + lru-cache@10.4.3: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2098,18 +2907,36 @@ snapshots: mimic-response@3.1.0: {} + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.1 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + minimist@1.2.8: {} minimisted@2.0.1: dependencies: minimist: 1.2.8 + minipass@7.1.3: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + mri@1.2.0: {} + ms@2.1.3: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + normalize-path@3.0.0: {} + obug@2.1.1: {} once@1.4.0: @@ -2158,6 +2985,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 @@ -2166,8 +2995,15 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.5.0: {} + path-key@3.1.1: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + path-type@4.0.0: {} pathe@2.0.3: {} @@ -2184,6 +3020,8 @@ snapshots: prettier@2.8.8: {} + process-nextick-args@2.0.1: {} + process@0.11.10: {} quansync@0.2.11: {} @@ -2197,6 +3035,16 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 @@ -2205,6 +3053,10 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.9 + resolve-from@5.0.0: {} reusify@1.1.0: {} @@ -2234,6 +3086,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} @@ -2286,6 +3140,31 @@ snapshots: std-env@4.1.0: {} + streamx@2.27.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -2294,10 +3173,40 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strnum@2.3.0: {} + + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.2 + fast-fifo: 1.3.2 + streamx: 2.27.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + teex@1.0.1: + dependencies: + streamx: 2.27.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + term-size@2.2.1: {} + text-decoder@1.2.7: + dependencies: + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a + tinybench@2.9.0: {} tinyexec@1.2.4: {} @@ -2328,8 +3237,9 @@ snapshots: tr46@0.0.3: {} - tslib@2.8.1: - optional: true + traverse@0.3.9: {} + + tslib@2.8.1: {} tunnel@0.0.6: {} @@ -2339,6 +3249,10 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 + typescript@3.9.10: {} + + typescript@5.4.5: {} + typescript@6.0.3: {} undici-types@7.16.0: {} @@ -2349,6 +3263,13 @@ snapshots: universalify@0.1.2: {} + unzip-stream@0.3.4: + dependencies: + binary: 0.3.0 + mkdirp: 0.5.6 + + util-deprecate@1.0.2: {} + vite@8.0.13(@types/node@24.12.4): dependencies: picomatch: 4.0.4 @@ -2411,4 +3332,24 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} + + xml-naming@0.1.0: {} + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 diff --git a/select-mode/action.yml b/select-mode/action.yml index cbeeeba9..c03d8a2c 100644 --- a/select-mode/action.yml +++ b/select-mode/action.yml @@ -7,6 +7,8 @@ inputs: {} outputs: mode: description: "The mode to use for the current repo state: 'version', 'publish', or 'none'." + publish-plan-artifact-id: + description: "Artifact id for the generated publish plan when mode is `publish`" branding: icon: package color: blue diff --git a/src/select-mode/index.ts b/src/select-mode/index.ts index 651925b1..bcc61da0 100644 --- a/src/select-mode/index.ts +++ b/src/select-mode/index.ts @@ -1,6 +1,31 @@ +import fs from "node:fs/promises"; +import { createRequire } from "node:module"; +import os from "node:os"; +import path from "node:path"; +import artifact from "@actions/artifact"; import * as core from "@actions/core"; +import { exec } from "tinyexec"; import readChangesetState from "../readChangesetState.ts"; +const require = createRequire(import.meta.url); + +type ModeResult = + | { + mode: "none"; + } + | { + mode: "version"; + } + | { + mode: "publish"; + publishPlanPath: string; + }; + +type PublishPlan = { + version: number; + plan: unknown[]; +}; + try { await main(); } catch (err) { @@ -8,11 +33,27 @@ try { } async function main() { - const mode = await getMode(); - core.setOutput("mode", mode); + const result = await getMode(); + core.setOutput("mode", result.mode); + if (result.mode === "publish") { + const publishPlanArtifact = await artifact.uploadArtifact( + path.basename(result.publishPlanPath, ".json"), + [result.publishPlanPath], + path.dirname(result.publishPlanPath), + { + skipArchive: true, + }, + ); + if (publishPlanArtifact.id === undefined) { + throw new Error( + "Publish plan artifact upload did not return an artifact id", + ); + } + core.setOutput("publish-plan-artifact-id", String(publishPlanArtifact.id)); + } } -async function getMode(): Promise<"version" | "publish" | "none"> { +async function getMode(): Promise { const { changesets } = await readChangesetState(); if (changesets.length > 0) { @@ -20,11 +61,73 @@ async function getMode(): Promise<"version" | "publish" | "none"> { (changeset) => changeset.releases.length > 0, ); if (hasNonEmptyChangesets) { - return "version"; - } else { - return "none"; + return { mode: "version" }; } - } else { - return "publish"; + return { mode: "none" }; + } + + const cwd = process.cwd(); + const publishPlanPath = path.join( + process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir())), + `changeset-publish-plan-${Date.now()}.json`, + ); + const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { + paths: [cwd], + }); + + await exec( + "node", + [changesetsCliBin, "publish-plan", "--output", publishPlanPath], + { + throwOnError: true, + nodeOptions: { cwd, env: process.env }, + }, + ); + + const publishPlan = await readPublishPlan(publishPlanPath); + if (publishPlan.plan.length === 0) { + return { mode: "none" }; + } + + return { + mode: "publish", + publishPlanPath, + }; +} + +async function readPublishPlan(publishPlanPath: string): Promise { + let rawPlan: string; + try { + rawPlan = await fs.readFile(publishPlanPath, "utf8"); + } catch (err) { + throw new Error(`Failed to read publish plan at ${publishPlanPath}`, { + cause: err, + }); + } + + let plan: unknown; + try { + plan = JSON.parse(rawPlan); + } catch (err) { + throw new Error(`Failed to parse publish plan at ${publishPlanPath}`, { + cause: err, + }); + } + + if ( + typeof plan !== "object" || + plan === null || + !("version" in plan) || + typeof plan.version !== "number" || + !("plan" in plan) || + !Array.isArray(plan.plan) + ) { + throw new Error( + `Invalid publish plan at ${publishPlanPath}: expected { version: number; plan: unknown[] }`, + ); } + return { + version: plan.version, + plan: plan.plan, + }; } From d5aac8fe88e1689f05ddfd1ef0276170ddd2f9ee Mon Sep 17 00:00:00 2001 From: bluwy Date: Thu, 18 Jun 2026 11:00:26 +0800 Subject: [PATCH 5/8] Rename base-branch to pr-base-branch --- src/version/index.ts | 4 ++-- version/action.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/version/index.ts b/src/version/index.ts index 985fd048..1cf8f552 100644 --- a/src/version/index.ts +++ b/src/version/index.ts @@ -15,7 +15,7 @@ async function main() { const commitMessage = core.getInput("commit-message", { required: true }); const prTitle = core.getInput("pr-title", { required: true }); const prDraft = core.getInput("pr-draft") || undefined; - const baseBranch = core.getInput("base-branch"); + const prBaseBranch = core.getInput("pr-base-branch"); const commitMode = core.getInput("commit-mode") || "git-cli"; const setupGitUser = core.getBooleanInput("setup-git-user"); @@ -49,7 +49,7 @@ async function main() { // TODO: Use neutral message for PR description hasPublishScript: true, prDraft, - branch: baseBranch, + branch: prBaseBranch, }); core.setOutput("pr-number", String(pullRequestNumber)); diff --git a/version/action.yml b/version/action.yml index 40732abe..d800c71a 100644 --- a/version/action.yml +++ b/version/action.yml @@ -22,7 +22,7 @@ inputs: pr-draft: description: "Controls draft PR behavior. Use 'create' to create new version PRs as draft, or 'always' to also convert existing version PRs back to draft when updating them." required: false - base-branch: + pr-base-branch: description: "Sets the base branch of the PR. Defaults to `github.ref_name`." required: false commit-mode: From 7c58248aab7af578e6df94df532d1df2ebe076dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 19 Jun 2026 11:36:56 +0200 Subject: [PATCH 6/8] add `pack` subaction --- pack/README.md | 3 ++ pack/action.yml | 15 +++++++ rolldown.config.js | 1 + src/pack/index.ts | 92 ++++++++++++++++++++++++++++++++++++++++ src/publish/index.ts | 1 - src/run.ts | 18 +++----- src/select-mode/index.ts | 31 +++----------- src/utils.ts | 38 +++++++++++++++++ 8 files changed, 161 insertions(+), 38 deletions(-) create mode 100644 pack/README.md create mode 100644 pack/action.yml create mode 100644 src/pack/index.ts diff --git a/pack/README.md b/pack/README.md new file mode 100644 index 00000000..1824a561 --- /dev/null +++ b/pack/README.md @@ -0,0 +1,3 @@ +# changesets/action/pack + +TODO diff --git a/pack/action.yml b/pack/action.yml new file mode 100644 index 00000000..7dabad3e --- /dev/null +++ b/pack/action.yml @@ -0,0 +1,15 @@ +name: Changesets - Pack +description: Pack publishable packages into tarballs +runs: + using: node24 + main: ../dist/pack.js +inputs: + publish-plan-artifact-id: + description: "Artifact id for a publish plan generated by the select-mode subaction" + required: false +outputs: + packed-artifact-id: + description: "Artifact id for the packed output directory" +branding: + icon: package + color: blue diff --git a/rolldown.config.js b/rolldown.config.js index c2b2941a..ae9cd9ff 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -3,6 +3,7 @@ import { defineConfig } from "rolldown"; export default defineConfig({ input: { index: "src/index.ts", + pack: "src/pack/index.ts", ["pr-status"]: "src/pr-status/index.ts", ["pr-comment"]: "src/pr-comment/index.ts", ["select-mode"]: "src/select-mode/index.ts", diff --git a/src/pack/index.ts b/src/pack/index.ts new file mode 100644 index 00000000..d89c8c5a --- /dev/null +++ b/src/pack/index.ts @@ -0,0 +1,92 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import artifact from "@actions/artifact"; +import * as core from "@actions/core"; +import { execChangesetsCli } from "../utils.ts"; + +try { + await main(); +} catch (err) { + core.setFailed((err as Error).message); +} + +async function main() { + const publishPlanArtifactId = core.getInput("publish-plan-artifact-id"); + + // If the user needs to change the cwd, set `working-directory` in the step instead + const cwd = process.cwd(); + const tmpDir = process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir())); + const outDir = path.join(tmpDir, `changeset-pack-${Date.now()}`); + + await pack(cwd, { + outDir, + publishPlanPath: publishPlanArtifactId + ? await downloadPublishPlanArtifact(tmpDir, Number(publishPlanArtifactId)) + : undefined, + }); + + const packedArtifact = await artifact.uploadArtifact( + `changeset-pack-${Date.now()}`, + await getFiles(outDir), + outDir, + ); + if (packedArtifact.id === undefined) { + throw new Error("Packed artifact upload did not return an artifact id"); + } + core.setOutput("packed-artifact-id", String(packedArtifact.id)); +} + +async function pack( + cwd: string, + args: { + outDir: string; + publishPlanPath?: string; + }, +) { + const cliArgs = ["pack", "--out-dir", args.outDir]; + if (args.publishPlanPath) { + cliArgs.push("--from-plan", args.publishPlanPath); + } + + await execChangesetsCli(cliArgs, { + cwd, + env: process.env, + }); +} + +async function downloadPublishPlanArtifact(tmpDir: string, artifactId: number) { + if (!Number.isInteger(artifactId) || artifactId <= 0) { + throw new Error(`Invalid publish plan artifact id: ${artifactId}`); + } + + const downloadPath = path.join( + tmpDir, + `changeset-publish-plan-${artifactId}-${Date.now()}`, + ); + const result = await artifact.downloadArtifact(artifactId, { + path: downloadPath, + }); + + if (!result.downloadPath) { + throw new Error( + `Publish plan artifact download did not return a path for artifact ${artifactId}`, + ); + } + + return path.join(result.downloadPath, "publish-plan.json"); +} + +async function getFiles(dir: string): Promise { + const entries = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + entries.map(async (entry) => { + const entryPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + return getFiles(entryPath); + } + return [entryPath]; + }), + ); + return files.flat(); +} diff --git a/src/publish/index.ts b/src/publish/index.ts index a3c3c510..5c28d068 100644 --- a/src/publish/index.ts +++ b/src/publish/index.ts @@ -50,6 +50,5 @@ async function main() { : "" }`, ); - process.exit(result.exitCode); } } diff --git a/src/run.ts b/src/run.ts index 56fa667c..e1e67e54 100644 --- a/src/run.ts +++ b/src/run.ts @@ -1,5 +1,4 @@ import fs from "node:fs/promises"; -import { createRequire } from "node:module"; import path from "node:path"; import * as core from "@actions/core"; import { @@ -15,15 +14,15 @@ import { Git } from "./git.ts"; import type { Octokit } from "./octokit.ts"; import readChangesetState from "./readChangesetState.ts"; import { + execChangesetsCli, getChangedPackages, getChangelogEntry, + getExecOutputChangesetsCli, getVersionsByDirectory, isErrorWithCode, sortTheThings, } from "./utils.ts"; -const require = createRequire(import.meta.url); - // GitHub Issues/PRs messages have a max size limit on the // message body payload. // `body is too long (maximum is 65536 characters)`. @@ -106,12 +105,8 @@ export async function runPublish({ execOptions, ); } else { - const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { - paths: [cwd], - }); - changesetPublishOutput = await getExecOutput( - "node", - [changesetsCliBin, "publish"], + changesetPublishOutput = await getExecOutputChangesetsCli( + ["publish"], execOptions, ); } @@ -300,10 +295,7 @@ export async function runVersion({ if (script) { await exec(script, undefined, { cwd, env }); } else { - const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { - paths: [cwd], - }); - await exec("node", [changesetsCliBin, "version"], { cwd, env }); + await execChangesetsCli(["version"], { cwd, env }); } let changedPackages = await getChangedPackages(cwd, versionsByDirectory); diff --git a/src/select-mode/index.ts b/src/select-mode/index.ts index bcc61da0..c934f732 100644 --- a/src/select-mode/index.ts +++ b/src/select-mode/index.ts @@ -1,13 +1,10 @@ import fs from "node:fs/promises"; -import { createRequire } from "node:module"; import os from "node:os"; import path from "node:path"; import artifact from "@actions/artifact"; import * as core from "@actions/core"; -import { exec } from "tinyexec"; import readChangesetState from "../readChangesetState.ts"; - -const require = createRequire(import.meta.url); +import { execChangesetsCli } from "../utils.ts"; type ModeResult = | { @@ -21,10 +18,7 @@ type ModeResult = publishPlanPath: string; }; -type PublishPlan = { - version: number; - plan: unknown[]; -}; +type PublishPlan = unknown[]; try { await main(); @@ -71,21 +65,13 @@ async function getMode(): Promise { process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir())), `changeset-publish-plan-${Date.now()}.json`, ); - const changesetsCliBin = require.resolve("@changesets/cli/bin.js", { - paths: [cwd], + await execChangesetsCli(["publish-plan", "--output", publishPlanPath], { + cwd, + env: process.env, }); - await exec( - "node", - [changesetsCliBin, "publish-plan", "--output", publishPlanPath], - { - throwOnError: true, - nodeOptions: { cwd, env: process.env }, - }, - ); - const publishPlan = await readPublishPlan(publishPlanPath); - if (publishPlan.plan.length === 0) { + if (publishPlan.length === 0) { return { mode: "none" }; } @@ -126,8 +112,5 @@ async function readPublishPlan(publishPlanPath: string): Promise { `Invalid publish plan at ${publishPlanPath}: expected { version: number; plan: unknown[] }`, ); } - return { - version: plan.version, - plan: plan.plan, - }; + return plan.plan; } diff --git a/src/utils.ts b/src/utils.ts index 76e756c2..91d91820 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,6 +1,15 @@ import fs from "node:fs/promises"; +import { createRequire } from "node:module"; +import { + exec, + getExecOutput, + type ExecOptions as ActionsExecOptions, + type ExecOutput, +} from "@actions/exec"; import { getPackages, type Package } from "@manypkg/get-packages"; +const require = createRequire(import.meta.url); + export const BumpLevels = { dep: 0, patch: 1, @@ -111,3 +120,32 @@ export function fileExists(filePath: string) { () => false, ); } + +function resolveChangesetsCli(cwd: string) { + return require.resolve("@changesets/cli/bin.js", { + paths: [cwd], + }); +} + +interface ExecOptions extends Omit { + env?: Record; +} + +export function execChangesetsCli(args: string[], options?: ExecOptions) { + return exec( + "node", + [resolveChangesetsCli(options?.cwd ?? process.cwd()), ...args], + options as ActionsExecOptions, + ); +} + +export function getExecOutputChangesetsCli( + args: string[], + options?: ExecOptions, +): Promise { + return getExecOutput( + "node", + [resolveChangesetsCli(options?.cwd ?? process.cwd()), ...args], + options as ActionsExecOptions, + ); +} From 3723a6a9dcc050f7dc11b62f4ce71c4b757dadc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 19 Jun 2026 12:37:58 +0200 Subject: [PATCH 7/8] `--from-pack` support in the publish subaction --- publish/action.yml | 5 ++++- src/pack/index.ts | 23 +++++------------------ src/publish/index.ts | 15 ++++++++++++++- src/run.ts | 8 +++++++- src/utils.ts | 27 +++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 21 deletions(-) diff --git a/publish/action.yml b/publish/action.yml index 33e168c0..5cca2122 100644 --- a/publish/action.yml +++ b/publish/action.yml @@ -11,6 +11,9 @@ inputs: script: description: "The command to use to publish packages" required: false + packed-artifact-id: + description: "Artifact id for packed publish output generated by the pack subaction" + required: false create-github-releases: description: "Whether to create Github releases after publish" required: false @@ -18,7 +21,7 @@ inputs: outputs: published: description: "A boolean value to indicate whether a publishing has happened or not" - publishedPackages: + published-packages: description: > A JSON array to present the published packages. The format is `[{"name": "@xx/xx", "version": "1.2.0"}, {"name": "@xx/xy", "version": "0.8.9"}]` branding: diff --git a/src/pack/index.ts b/src/pack/index.ts index d89c8c5a..42708568 100644 --- a/src/pack/index.ts +++ b/src/pack/index.ts @@ -3,7 +3,7 @@ import os from "node:os"; import path from "node:path"; import artifact from "@actions/artifact"; import * as core from "@actions/core"; -import { execChangesetsCli } from "../utils.ts"; +import { downloadArtifact, execChangesetsCli } from "../utils.ts"; try { await main(); @@ -56,25 +56,12 @@ async function pack( } async function downloadPublishPlanArtifact(tmpDir: string, artifactId: number) { - if (!Number.isInteger(artifactId) || artifactId <= 0) { - throw new Error(`Invalid publish plan artifact id: ${artifactId}`); - } - - const downloadPath = path.join( + const downloadPath = await downloadArtifact( tmpDir, - `changeset-publish-plan-${artifactId}-${Date.now()}`, + artifactId, + "changeset-publish-plan", ); - const result = await artifact.downloadArtifact(artifactId, { - path: downloadPath, - }); - - if (!result.downloadPath) { - throw new Error( - `Publish plan artifact download did not return a path for artifact ${artifactId}`, - ); - } - - return path.join(result.downloadPath, "publish-plan.json"); + return path.join(downloadPath, "publish-plan.json"); } async function getFiles(dir: string): Promise { diff --git a/src/publish/index.ts b/src/publish/index.ts index 5c28d068..f46fc1af 100644 --- a/src/publish/index.ts +++ b/src/publish/index.ts @@ -1,7 +1,10 @@ +import fs from "node:fs/promises"; +import os from "node:os"; import * as core from "@actions/core"; import { Git } from "../git.ts"; import { setupOctokit } from "../octokit.ts"; import { runPublish } from "../run.ts"; +import { downloadArtifact } from "../utils.ts"; try { await main(); @@ -12,6 +15,7 @@ try { async function main() { const githubToken = core.getInput("github-token", { required: true }); const script = core.getInput("script"); + const packedArtifactId = core.getInput("packed-artifact-id"); const createGithubReleases = core.getBooleanInput("create-github-releases"); // If the user needs to change the cwd, set `working-directory` in the step instead @@ -21,6 +25,14 @@ async function main() { // NOTE: Always pass octokit here as publish does not need a commit-mode const git = new Git({ octokit, cwd }); + const fromPackDir = packedArtifactId + ? await downloadArtifact( + process.env.RUNNER_TEMP ?? (await fs.realpath(os.tmpdir())), + Number(packedArtifactId), + "changeset-pack", + ) + : undefined; + const result = await runPublish({ script, githubToken, @@ -28,12 +40,13 @@ async function main() { octokit, createGithubReleases, cwd, + fromPackDir, }); if (result.published) { core.setOutput("published", "true"); core.setOutput( - "publishedPackages", + "published-packages", JSON.stringify(result.publishedPackages), ); } else { diff --git a/src/run.ts b/src/run.ts index e1e67e54..84b793fe 100644 --- a/src/run.ts +++ b/src/run.ts @@ -63,6 +63,7 @@ const createRelease = async ( type PublishOptions = { script?: string; + fromPackDir?: string; githubToken: string; octokit: Octokit; createGithubReleases: boolean; @@ -85,6 +86,7 @@ type PublishResult = export async function runPublish({ script, + fromPackDir, githubToken, git, octokit, @@ -105,8 +107,12 @@ export async function runPublish({ execOptions, ); } else { + const args = ["publish"]; + if (fromPackDir) { + args.push("--from-pack", fromPackDir); + } changesetPublishOutput = await getExecOutputChangesetsCli( - ["publish"], + args, execOptions, ); } diff --git a/src/utils.ts b/src/utils.ts index 91d91820..e21b2379 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,7 @@ import fs from "node:fs/promises"; import { createRequire } from "node:module"; +import path from "node:path"; +import artifact from "@actions/artifact"; import { exec, getExecOutput, @@ -149,3 +151,28 @@ export function getExecOutputChangesetsCli( options as ActionsExecOptions, ); } + +export async function downloadArtifact( + tmpDir: string, + artifactId: number, + name: string, +) { + if (!Number.isInteger(artifactId) || artifactId <= 0) { + throw new Error( + `Invalid ${JSON.stringify(name)} artifact id: ${artifactId}`, + ); + } + + const downloadPath = path.join(tmpDir, `${name}-${artifactId}-${Date.now()}`); + const result = await artifact.downloadArtifact(artifactId, { + path: downloadPath, + }); + + if (!result.downloadPath) { + throw new Error( + `${JSON.stringify(name)} artifact download did not return a path for artifact ${artifactId}`, + ); + } + + return result.downloadPath; +} From ae062ce280cc8b5b8c6b6c372ab8308e33db4188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Sat, 20 Jun 2026 15:25:45 +0200 Subject: [PATCH 8/8] rename CLI arg --- src/run.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/run.ts b/src/run.ts index 84b793fe..599eeaaf 100644 --- a/src/run.ts +++ b/src/run.ts @@ -109,7 +109,7 @@ export async function runPublish({ } else { const args = ["publish"]; if (fromPackDir) { - args.push("--from-pack", fromPackDir); + args.push("--from-pack-dir", fromPackDir); } changesetPublishOutput = await getExecOutputChangesetsCli( args,