From c7ec29ade2ab74d09b973272eedd11e5d0bb651c Mon Sep 17 00:00:00 2001 From: Exelo Date: Tue, 26 May 2026 13:03:10 +0900 Subject: [PATCH] feat: add new release actions --- .github/workflows/alpha-release.yml | 34 + .github/workflows/pre-release.yml | 10 +- .github/workflows/release-tag.yml | 31 - .github/workflows/release.yml | 42 +- .husky/commit-msg | 2 +- .husky/pre-commit | 2 +- actions/create-packages-release-pr/action.yml | 30 + .../create-packages-release-pr/changelog.ts | 115 ++ actions/create-packages-release-pr/git.ts | 11 + actions/create-packages-release-pr/github.ts | 14 + actions/create-packages-release-pr/index.ts | 132 ++ actions/release-dev/action.yml | 22 + actions/release-dev/git.ts | 14 + actions/release-dev/index.ts | 96 ++ actions/release-dev/npm.ts | 40 + actions/release-dev/version.ts | 67 + actions/release-packages/action.yml | 38 + .../release-packages/generate-release-tree.ts | 88 ++ actions/release-packages/github.ts | 47 + actions/release-packages/index.ts | 178 +++ actions/release-packages/npm.ts | 52 + lib/changelog.ts | 51 + lib/format.ts | 18 + lib/index.ts | 6 + lib/inputs.ts | 9 + lib/octokit.ts | 7 + lib/packages.ts | 21 + lib/types.ts | 8 + package.json | 6 +- pnpm-lock.yaml | 1314 +++++++---------- pnpm-workspace.yaml | 14 +- tsconfig.json | 7 +- 32 files changed, 1666 insertions(+), 860 deletions(-) create mode 100644 .github/workflows/alpha-release.yml delete mode 100644 .github/workflows/release-tag.yml create mode 100644 actions/create-packages-release-pr/action.yml create mode 100644 actions/create-packages-release-pr/changelog.ts create mode 100644 actions/create-packages-release-pr/git.ts create mode 100644 actions/create-packages-release-pr/github.ts create mode 100644 actions/create-packages-release-pr/index.ts create mode 100644 actions/release-dev/action.yml create mode 100644 actions/release-dev/git.ts create mode 100644 actions/release-dev/index.ts create mode 100644 actions/release-dev/npm.ts create mode 100644 actions/release-dev/version.ts create mode 100644 actions/release-packages/action.yml create mode 100644 actions/release-packages/generate-release-tree.ts create mode 100644 actions/release-packages/github.ts create mode 100644 actions/release-packages/index.ts create mode 100644 actions/release-packages/npm.ts create mode 100644 lib/changelog.ts create mode 100644 lib/format.ts create mode 100644 lib/index.ts create mode 100644 lib/inputs.ts create mode 100644 lib/octokit.ts create mode 100644 lib/packages.ts create mode 100644 lib/types.ts diff --git a/.github/workflows/alpha-release.yml b/.github/workflows/alpha-release.yml new file mode 100644 index 0000000..1c37697 --- /dev/null +++ b/.github/workflows/alpha-release.yml @@ -0,0 +1,34 @@ +name: Alpha Release + +on: + workflow_dispatch: + inputs: + dry_run: + description: Perform a dry run? + type: boolean + default: false + +permissions: + contents: write + +jobs: + alpha-release: + name: Alpha release + runs-on: ubuntu-latest + if: github.repository_owner == 'NanoForge-dev' && github.ref_name != 'main' && github.ref_name != 'master' + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Prepare + uses: ./.github/actions/prepare + + - name: Release alpha + uses: ./actions/release-dev + with: + package: "@nanoforge-dev/actions" + tag: alpha + dry: ${{ inputs.dry_run }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index ba550cd..50f4af6 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -4,9 +4,9 @@ on: workflow_dispatch: inputs: version: - description: "New version of the package (leave empty for auto generated version)" + description: "New version for the packages" type: string - required: false + required: true dry_run: description: Perform a dry run? type: boolean @@ -31,10 +31,10 @@ jobs: - name: Prepare uses: ./.github/actions/prepare - - name: Release packages - uses: ./dist/create-release-pr + - name: Create release PR + uses: ./actions/create-packages-release-pr with: - package: "@nanoforge-dev/actions" + packages: "@nanoforge-dev/actions" version: ${{ inputs.version }} dry: ${{ inputs.dry_run }} env: diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml deleted file mode 100644 index c91476b..0000000 --- a/.github/workflows/release-tag.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Release Tag - -on: - pull_request: - types: - - closed - branches: - - main - -permissions: - contents: write - -jobs: - create-release-tag: - name: Create release tag - runs-on: ubuntu-latest - if: github.repository_owner == 'NanoForge-dev' && github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/') - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Prepare - uses: ./.github/actions/prepare - - - name: Create release tag - uses: ./dist/create-release-tag - with: - commit: ${{ github.sha }} - branch: ${{ github.head_ref }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bcaf4eb..9a14da9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,21 +1,20 @@ name: Release on: - workflow_dispatch: - inputs: - dry_run: - description: Perform a dry run? - type: boolean - default: false + pull_request: + types: + - closed + branches: + - main permissions: contents: write jobs: - npm-publish: - name: npm publish + release: + name: Release runs-on: ubuntu-latest - if: github.repository_owner == 'NanoForge-dev' + if: github.repository_owner == 'NanoForge-dev' && github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/') steps: - name: Checkout repository uses: actions/checkout@v6 @@ -24,10 +23,31 @@ jobs: uses: ./.github/actions/prepare - name: Release packages - uses: ./dist/release-packages + uses: ./actions/release-packages + with: + packages: "@nanoforge-dev/actions" + tag-format: "{version}" + latest: true + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + beta-release: + name: Beta release + runs-on: ubuntu-latest + if: github.repository_owner == 'NanoForge-dev' && github.event.pull_request.merged == true && !startsWith(github.head_ref, 'releases/') + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Prepare + uses: ./.github/actions/prepare + + - name: Release beta + uses: ./actions/release-dev with: package: "@nanoforge-dev/actions" - dry: ${{ inputs.dry_run }} + tag: beta env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.husky/commit-msg b/.husky/commit-msg index 2a397b8..9ef41ae 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1 +1 @@ -pnpm --no-install commitlint --edit "$1" +pnpm commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit index c7acc22..cb2c84d 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -pnpm --no-install lint-staged +pnpm lint-staged diff --git a/actions/create-packages-release-pr/action.yml b/actions/create-packages-release-pr/action.yml new file mode 100644 index 0000000..a0c2e96 --- /dev/null +++ b/actions/create-packages-release-pr/action.yml @@ -0,0 +1,30 @@ +name: "Create Packages Release PR" +description: "Create a PR releasing multiple packages at a shared version" +inputs: + packages: + description: "Comma-separated list of package names to release" + required: true + version: + description: "Version to release all packages at" + required: true + branch-format: + description: "Branch name format. Tokens: {org}, {package} (single package only), {version}" + default: "releases/{package}@{version}" + commit-format: + description: "Commit message format. Tokens: {org}, {package} (single package only), {version}" + default: "chore({package}): release {org}/{package}@{version}" + dry: + description: "Perform a dry run that skips PR creation and outputs logs indicating what would have happened" + default: "false" +runs: + using: composite + steps: + - uses: oven-sh/setup-bun@v2 + - run: bun $GITHUB_ACTION_PATH/index.ts + shell: bash + env: + INPUT_DRY: ${{ inputs.dry }} + INPUT_PACKAGES: ${{ inputs.packages }} + INPUT_VERSION: ${{ inputs.version }} + INPUT_BRANCH_FORMAT: ${{ inputs.branch-format }} + INPUT_COMMIT_FORMAT: ${{ inputs.commit-format }} diff --git a/actions/create-packages-release-pr/changelog.ts b/actions/create-packages-release-pr/changelog.ts new file mode 100644 index 0000000..7cae452 --- /dev/null +++ b/actions/create-packages-release-pr/changelog.ts @@ -0,0 +1,115 @@ +import { $, file, write } from "bun"; +import { type IPkg, readPackageChangelog } from "lib"; +import { join } from "path"; + +export const runPackageChangelog = async (name: string): Promise => { + await $`pnpm --filter=${name} run release --skip-automatic-bump --skip-tag`; +}; + +const parseIntoSections = (body: string): Map => { + const sections = new Map(); + let currentSection: string | null = null; + + for (const line of body.split("\n")) { + if (line.startsWith("## ")) { + currentSection = line.slice(3).trim(); + if (!sections.has(currentSection)) sections.set(currentSection, []); + } else if (currentSection && line.trim()) { + sections.get(currentSection)?.push(line); + } + } + return sections; +}; + +const extractCommitHash = (line: string): string | null => { + const match = line.match(/\(([a-f0-9]{7,40})]\(https?:\/\//); + return match?.[1] ?? null; +}; + +const mergePackageBodies = (bodies: string[]): string => { + const merged = new Map>(); + + for (const body of bodies) { + for (const [section, lines] of parseIntoSections(body)) { + if (!merged.has(section)) merged.set(section, new Map()); + const entries = merged.get(section); + for (const line of lines) { + const key = extractCommitHash(line) ?? line; + if (entries && !entries.has(key)) entries.set(key, line); + } + } + } + + return [...merged.entries()] + .map(([section, entries]) => `## ${section}\n\n${[...entries.values()].join("\n")}`) + .join("\n\n"); +}; + +const buildVersionHeader = async ( + rootPath: string, + version: string, + today: string, + existing: string | null, +): Promise => { + try { + const pkgJson = await file(join(rootPath, "package.json")).json(); + const repoUrl = ((pkgJson.repository?.url as string) ?? "") + .replace(/^git\+/, "") + .replace(/\.git$/, ""); + if (!repoUrl) throw new Error("No repository URL found"); + const name = pkgJson.name as string; + const prevVersion = existing?.match(/^# \[(\d+\.\d+\.\d+)/m)?.[1]; + + if (prevVersion) { + return `# [${version}](${repoUrl}/compare/${name}@${prevVersion}...${name}@${version}) - (${today})`; + } + return `# [${version}](${repoUrl}/tree/${name}@${version}) - (${today})`; + } catch { + return `# ${version} - (${today})`; + } +}; + +export const updateRootChangelog = async ( + rootPath: string, + pkgs: IPkg[], + version: string, +): Promise => { + const changelogPath = join(rootPath, "CHANGELOG.md"); + const today = new Date().toISOString().slice(0, 10); + + const bodies: string[] = []; + for (const pkg of pkgs) { + const body = await readPackageChangelog(pkg.path, pkg.name, version); + if (body) bodies.push(body); + } + + if (!bodies.length) return; + + const mergedBody = mergePackageBodies(bodies); + + let existing: string | null = null; + try { + existing = await file(changelogPath).text(); + } catch { + // file doesn't exist yet + } + + const versionHeader = await buildVersionHeader(rootPath, version, today, existing); + const newEntry = `${versionHeader}\n\n${mergedBody}\n\n`; + + if (!existing) { + await write( + changelogPath, + `# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n${newEntry}`, + ); + return; + } + + const insertAt = existing.search(/\n# \[/); + const updated = + insertAt !== -1 + ? `${existing.slice(0, insertAt + 1)}${newEntry}${existing.slice(insertAt + 1)}` + : `${existing}\n${newEntry}`; + + await write(changelogPath, updated); +}; diff --git a/actions/create-packages-release-pr/git.ts b/actions/create-packages-release-pr/git.ts new file mode 100644 index 0000000..ab43123 --- /dev/null +++ b/actions/create-packages-release-pr/git.ts @@ -0,0 +1,11 @@ +import { $ } from "bun"; + +export const checkoutToReleaseBranch = async (branchName: string): Promise => { + await $`git checkout -B ${branchName}`; +}; + +export const commitAndPush = async (branchName: string, message: string): Promise => { + await $`git add --all`; + await $`git -c user.name='github-actions[bot]' -c user.email='username@users.noreply.github.com' commit -m ${message}`; + await $`git push origin refs/heads/${branchName}:${branchName}`; +}; diff --git a/actions/create-packages-release-pr/github.ts b/actions/create-packages-release-pr/github.ts new file mode 100644 index 0000000..8e1c673 --- /dev/null +++ b/actions/create-packages-release-pr/github.ts @@ -0,0 +1,14 @@ +import { context } from "@actions/github"; +import { createOctokit } from "lib"; + +const octokit = createOctokit(); + +export const createPR = async (branchName: string, title: string): Promise => { + const base = context.payload.repository?.default_branch ?? "main"; + await octokit?.rest.pulls.create({ + ...context.repo, + base, + head: branchName, + title, + }); +}; diff --git a/actions/create-packages-release-pr/index.ts b/actions/create-packages-release-pr/index.ts new file mode 100644 index 0000000..76f74c0 --- /dev/null +++ b/actions/create-packages-release-pr/index.ts @@ -0,0 +1,132 @@ +import { getInput, info, summary } from "@actions/core"; +import { program } from "commander"; +import { + type IPkg, + extractTokens, + formatString, + resolvePackage, + resolveRootPath, + safeGetBooleanInput, + updateVersion, +} from "lib"; + +import { runPackageChangelog, updateRootChangelog } from "./changelog"; +import { checkoutToReleaseBranch, commitAndPush } from "./git"; +import { createPR } from "./github"; + +const parseOptions = () => { + program + .name("create packages release pr") + .description("Creates a release PR for multiple packages at a shared version") + .option( + "--dry", + "skips PR creation and outputs logs instead", + safeGetBooleanInput("dry", false), + ) + .option("--packages ", "comma-separated list of package names", getInput("packages")) + .option("--version ", "version to release", getInput("version")) + .option( + "--branch-format ", + "branch name format ({org}, {package}, {version})", + getInput("branch_format") || "releases/{package}@{version}", + ) + .option( + "--commit-format ", + "commit message format ({org}, {package}, {version})", + getInput("commit_format") || "chore({package}): release {org}/{package}@{version}", + ) + .parse(); + + return program.opts<{ + dry: boolean; + packages: string; + version: string; + branchFormat: string; + commitFormat: string; + }>(); +}; + +const updatePackages = async (pkgs: IPkg[], rootPath: string, version: string): Promise => { + for (const pkg of pkgs) { + await updateVersion(pkg.path, version); + await runPackageChangelog(pkg.name); + } + + if (pkgs.length > 1 && !pkgs.some((p) => p.path === rootPath)) { + try { + await updateVersion(rootPath, version); + } catch { + info("Root package.json not found, skipping root version update"); + } + + try { + await updateRootChangelog(rootPath, pkgs, version); + } catch (error) { + info(`Failed to update root changelog: ${error}`); + } + } +}; + +const writeSummary = async ( + pkgs: IPkg[], + version: string, + branchName: string, + commitMessage: string, + dry: boolean, +): Promise => { + const result = summary.addHeading("Pre-Release summary"); + if (dry) result.addRaw("\n\n> [!NOTE]\n> This is a dry run.\n\n"); + + result.addHeading("Packages", 2); + result.addRaw("\n"); + for (const pkg of pkgs) result.addRaw(`- \`${pkg.name}@${version}\`\n`); + result.addRaw("\n"); + + result.addHeading("Branch", 2); + result.addRaw(`\n\`${branchName}\`\n\n`); + + result.addHeading("Commit", 2); + result.addRaw(`\n\`${commitMessage}\`\n\n`); + + await result.write(); +}; + +const bootstrap = async () => { + const { dry, packages: packagesInput, version, branchFormat, commitFormat } = parseOptions(); + + const packageNames = packagesInput + .split(",") + .map((p) => p.trim()) + .filter(Boolean); + if (!packageNames.length) throw new Error("No packages specified"); + if (!version) throw new Error("No version specified"); + + if (branchFormat.includes("{package}") && packageNames.length > 1) + throw new Error( + "{package} token cannot be used in branch-format when releasing multiple packages", + ); + if (commitFormat.includes("{package}") && packageNames.length > 1) + throw new Error( + "{package} token cannot be used in commit-format when releasing multiple packages", + ); + + const pkgs = (await Promise.all(packageNames.map(resolvePackage))) as [IPkg, ...IPkg[]]; + const tokens = extractTokens(packageNames, version); + const branchName = formatString(branchFormat, tokens); + const commitMessage = formatString(commitFormat, tokens); + + await checkoutToReleaseBranch(branchName); + await updatePackages(pkgs, resolveRootPath(), version); + + if (dry) { + info(`[DRY] Would create branch "${branchName}" with commit: "${commitMessage}"`); + info(`[DRY] Packages: ${pkgs.map((p) => `${p.name}@${version}`).join(", ")}`); + } else { + await commitAndPush(branchName, commitMessage); + await createPR(branchName, commitMessage); + } + + await writeSummary(pkgs, version, branchName, commitMessage, dry); +}; + +void bootstrap(); diff --git a/actions/release-dev/action.yml b/actions/release-dev/action.yml new file mode 100644 index 0000000..7f4697a --- /dev/null +++ b/actions/release-dev/action.yml @@ -0,0 +1,22 @@ +name: "Release Dev" +description: "Releases a package as a pre-release version on npm." +inputs: + package: + description: "The published name of the package to release" + required: true + tag: + description: "Pre-release tag to publish under (e.g. alpha, beta)" + default: "alpha" + dry: + description: "Perform a dry run that skips publishing, deprecation, and the commit" + default: "false" +runs: + using: composite + steps: + - uses: oven-sh/setup-bun@v2 + - run: bun $GITHUB_ACTION_PATH/index.ts + shell: bash + env: + INPUT_DRY: ${{ inputs.dry }} + INPUT_PACKAGE: ${{ inputs.package }} + INPUT_TAG: ${{ inputs.tag }} diff --git a/actions/release-dev/git.ts b/actions/release-dev/git.ts new file mode 100644 index 0000000..1f7dc0d --- /dev/null +++ b/actions/release-dev/git.ts @@ -0,0 +1,14 @@ +import { $ } from "bun"; + +export const commitAndPush = async ( + pkgName: string, + version: string, + tag: string, +): Promise => { + const shortName = pkgName.split("/").at(-1); + const message = `chore(${shortName}): release ${tag} ${version}`; + + await $`git add --all`; + await $`git -c user.name='github-actions[bot]' -c user.email='username@users.noreply.github.com' commit -m ${message}`; + await $`git push`; +}; diff --git a/actions/release-dev/index.ts b/actions/release-dev/index.ts new file mode 100644 index 0000000..a6f18ff --- /dev/null +++ b/actions/release-dev/index.ts @@ -0,0 +1,96 @@ +import { getInput, info, summary } from "@actions/core"; +import { program } from "commander"; +import { resolvePackage, safeGetBooleanInput, updateVersion } from "lib"; +import process from "node:process"; + +import { commitAndPush } from "./git"; +import { deprecateOldDevVersions, publishDev } from "./npm"; +import { fetchDevVersions, resolveAlphaRelease, resolveBetaRelease } from "./version"; + +const parseOptions = () => { + program + .name("release dev") + .description("Releases a package as a pre-release version on npm") + .option( + "--dry", + "skips publishing and deprecation, outputs logs instead", + safeGetBooleanInput("dry", false), + ) + .option("--package ", "published name of the package to release", getInput("package")) + .option( + "--tag ", + "pre-release tag to publish under (alpha or beta)", + getInput("tag") || "alpha", + ) + .parse(); + + return program.opts<{ dry: boolean; package: string; tag: string }>(); +}; + +const resolveRelease = (currentVersion: string, tag: string, existingVersions: string[]) => { + if (tag === "alpha") { + const branch = process.env.GITHUB_REF_NAME ?? ""; + if (!branch) throw new Error("GITHUB_REF_NAME is required for alpha releases"); + return resolveAlphaRelease(currentVersion, branch, existingVersions); + } + + if (tag === "beta") { + const commitSha = process.env.GITHUB_SHA ?? ""; + if (!commitSha) throw new Error("GITHUB_SHA is required for beta releases"); + return resolveBetaRelease(currentVersion, commitSha, existingVersions); + } + + throw new Error(`Unsupported tag "${tag}". Supported values: alpha, beta`); +}; + +const writeSummary = async ( + pkgName: string, + newVersion: string, + tag: string, + toDeprecate: string[], + dry: boolean, +): Promise => { + const result = summary.addHeading("Dev Release summary"); + if (dry) result.addRaw("\n\n> [!NOTE]\n> This is a dry run.\n\n"); + + result.addHeading("Published", 2); + result.addRaw(`\n\`${pkgName}@${newVersion}\` (tag: \`${tag}\`)\n\n`); + + if (toDeprecate.length) { + result.addHeading("Deprecated", 2); + result.addRaw("\n"); + for (const v of toDeprecate) result.addRaw(`- \`${pkgName}@${v}\`\n`); + result.addRaw("\n"); + } + + await result.write(); +}; + +const bootstrap = async () => { + const { dry, package: pkgName, tag } = parseOptions(); + if (!pkgName) throw new Error("No package specified"); + + const pkg = await resolvePackage(pkgName); + const existingVersions = await fetchDevVersions(pkgName, tag); + const { newVersion, toDeprecate } = resolveRelease(pkg.version, tag, existingVersions); + + info(`Resolved next ${tag}: ${pkgName}@${newVersion}`); + if (toDeprecate.length) + info(`Found ${toDeprecate.length} existing ${tag}(s) — older ones will be deprecated`); + + await updateVersion(pkg.path, newVersion); + + if (dry) { + info( + `[DRY] Would commit, push, publish ${pkgName}@${newVersion}, and deprecate: ${toDeprecate.join(", ") || "none"}`, + ); + } else { + await commitAndPush(pkgName, newVersion, tag); + await publishDev(pkgName, newVersion, tag, dry); + await deprecateOldDevVersions(pkgName, toDeprecate, newVersion, dry); + } + + await writeSummary(pkgName, newVersion, tag, toDeprecate, dry); +}; + +void bootstrap(); diff --git a/actions/release-dev/npm.ts b/actions/release-dev/npm.ts new file mode 100644 index 0000000..c02fcd8 --- /dev/null +++ b/actions/release-dev/npm.ts @@ -0,0 +1,40 @@ +import { info, warning } from "@actions/core"; +import { $ } from "bun"; + +export const publishDev = async ( + pkgName: string, + version: string, + tag: string, + dry: boolean, +): Promise => { + if (dry) { + info(`[DRY] Publishing ${pkgName}@${version} with tag ${tag}`); + return; + } + + await $`pnpm --filter=${pkgName} publish --provenance --no-git-checks --tag ${tag}`; +}; + +export const deprecateOldDevVersions = async ( + pkgName: string, + versionsToDeprecate: string[], + supersededBy: string, + dry: boolean, +): Promise => { + if (!versionsToDeprecate.length) return; + + const message = `Superseded by ${pkgName}@${supersededBy}`; + + for (const version of versionsToDeprecate) { + if (dry) { + info(`[DRY] Deprecating ${pkgName}@${version}`); + continue; + } + + try { + await $`npm deprecate ${pkgName}@${version} ${message}`; + } catch (error) { + warning(`Failed to deprecate ${pkgName}@${version}: ${error}`); + } + } +}; diff --git a/actions/release-dev/version.ts b/actions/release-dev/version.ts new file mode 100644 index 0000000..b8ca2b1 --- /dev/null +++ b/actions/release-dev/version.ts @@ -0,0 +1,67 @@ +import semver from "semver"; + +interface DevRelease { + newVersion: string; + toDeprecate: string[]; +} + +const resolveNextBase = (currentVersion: string): string => { + const parsed = semver.parse(currentVersion); + if (!parsed) throw new Error(`Invalid semver version: ${currentVersion}`); + const stable = `${parsed.major}.${parsed.minor}.${parsed.patch}`; + return parsed.prerelease.length > 0 ? stable : (semver.inc(stable, "patch") as string); +}; + +const sanitizeBranch = (branch: string): string => { + const args = branch.split("/"); + if (args.length > 1) branch = args.slice(1).join("-"); + return branch + .toLowerCase() + .replace(/[^a-z0-9-]/g, "-") + .replace(/-+/g, "-") + .replace(/^-|-$/g, ""); +}; + +export const fetchDevVersions = async (pkgName: string, tag: string): Promise => { + try { + const res = await fetch(`https://registry.npmjs.org/${pkgName}`); + if (!res.ok) return []; + const data = (await res.json()) as { versions: Record }; + return Object.keys(data.versions).filter((v) => semver.prerelease(v)?.[0] === tag); + } catch { + return []; + } +}; + +export const resolveAlphaRelease = ( + currentVersion: string, + branchName: string, + existingAlphas: string[], +): DevRelease => { + const nextBase = resolveNextBase(currentVersion); + const branchSlug = sanitizeBranch(branchName); + const prefix = `${nextBase}-alpha.${branchSlug}.`; + + const branchAlphas = existingAlphas.filter((v) => v.startsWith(prefix)); + const maxN = branchAlphas.reduce((max, v) => { + const n = parseInt(v.slice(prefix.length), 10); + return isNaN(n) ? max : Math.max(max, n); + }, -1); + + const newVersion = `${prefix}${maxN + 1}`; + const toDeprecate = branchAlphas.filter((v) => v !== newVersion); + + return { newVersion, toDeprecate }; +}; + +export const resolveBetaRelease = ( + currentVersion: string, + commitSha: string, + existingBetas: string[], +): DevRelease => { + const nextBase = resolveNextBase(currentVersion); + const newVersion = `${nextBase}-beta.${commitSha.slice(0, 7)}`; + const toDeprecate = existingBetas.filter((v) => v !== newVersion); + + return { newVersion, toDeprecate }; +}; diff --git a/actions/release-packages/action.yml b/actions/release-packages/action.yml new file mode 100644 index 0000000..e45c92b --- /dev/null +++ b/actions/release-packages/action.yml @@ -0,0 +1,38 @@ +name: "Release Packages" +description: "Publishes packages and creates a tagged GitHub release after a packages release PR is merged" +inputs: + packages: + description: "Comma-separated list of package names to release" + required: true + version: + description: "Version being released. Resolved from the packages' package.json if not provided" + required: false + tag-format: + description: "Git tag format. Tokens: {org}, {package} (single package only), {version}" + default: "{org}/{package}@{version}" + npm: + description: "Publish packages to npm registry" + default: "true" + github-release: + description: "Create a GitHub release. Uses the package changelog for a single package, the aggregate root changelog for multiple" + default: "true" + latest: + description: "Mark the GitHub release as the latest release" + default: "true" + dry: + description: "Perform a dry run that skips publishing and tag creation" + default: "false" +runs: + using: composite + steps: + - uses: oven-sh/setup-bun@v2 + - run: bun $GITHUB_ACTION_PATH/index.ts + shell: bash + env: + INPUT_DRY: ${{ inputs.dry }} + INPUT_PACKAGES: ${{ inputs.packages }} + INPUT_VERSION: ${{ inputs.version }} + INPUT_TAG_FORMAT: ${{ inputs.tag-format }} + INPUT_NPM: ${{ inputs.npm }} + INPUT_GITHUB_RELEASE: ${{ inputs.github-release }} + INPUT_LATEST: ${{ inputs.latest }} diff --git a/actions/release-packages/generate-release-tree.ts b/actions/release-packages/generate-release-tree.ts new file mode 100644 index 0000000..13c8d44 --- /dev/null +++ b/actions/release-packages/generate-release-tree.ts @@ -0,0 +1,88 @@ +import { $ } from "bun"; +import { readPackageChangelog } from "lib"; + +interface PnpmTreeDependency { + from: string; + path: string; + version: string; +} + +interface PnpmTree { + dependencies?: Record; + name?: string; + path: string; + private?: boolean; + version?: string; +} + +export interface ReleaseEntry { + changelog?: string; + dependsOn?: string[]; + name: string; + path: string; + private: boolean; + version: string; +} + +export const generateReleaseTree = async (packageNames: string[]): Promise => { + const packageList: PnpmTree[] = + await $`pnpm list --recursive --only-projects --prod --json`.json(); + + const nameSet = new Set(packageNames); + let releaseEntries: ReleaseEntry[] = []; + + for (const pkg of packageList) { + if (!pkg.name || !pkg.version) continue; + if (!nameSet.has(pkg.name)) continue; + + const entry: ReleaseEntry = { + name: pkg.name, + version: pkg.version, + path: pkg.path, + private: pkg.private ?? false, + changelog: await readPackageChangelog(pkg.path, pkg.name, pkg.version), + }; + + if (pkg.dependencies) { + const internalDeps = Object.keys(pkg.dependencies).filter((dep) => nameSet.has(dep)); + if (internalDeps.length) entry.dependsOn = internalDeps; + } + + releaseEntries.push(entry); + } + + const foundNames = new Set(releaseEntries.map((e) => e.name)); + const missing = packageNames.filter((n) => !foundNames.has(n)); + if (missing.length) { + throw new Error(`Packages not found in workspace: ${missing.join(", ")}`); + } + + const releaseTree: ReleaseEntry[][] = []; + const released = new Set(); + + while (releaseEntries.length) { + const nextBatch: ReleaseEntry[] = []; + const remaining: ReleaseEntry[] = []; + + for (const entry of releaseEntries) { + if (!entry.dependsOn || entry.dependsOn.every((dep) => released.has(dep))) { + nextBatch.push(entry); + } else { + remaining.push(entry); + } + } + + if (releaseEntries.length === remaining.length) { + throw new Error( + `Unresolvable dependency order among: ${remaining.map((e) => e.name).join(", ")}`, + ); + } + + for (const entry of nextBatch) released.add(entry.name); + + releaseTree.push(nextBatch); + releaseEntries = remaining; + } + + return releaseTree; +}; diff --git a/actions/release-packages/github.ts b/actions/release-packages/github.ts new file mode 100644 index 0000000..d644794 --- /dev/null +++ b/actions/release-packages/github.ts @@ -0,0 +1,47 @@ +import { info, warning } from "@actions/core"; +import { context } from "@actions/github"; +import { createOctokit } from "lib"; + +const octokit = createOctokit(); + +export const createTag = async (tagName: string, dry: boolean): Promise => { + if (dry) { + info(`[DRY] Would create tag "${tagName}"`); + return; + } + + try { + await octokit?.rest.git.createRef({ + ...context.repo, + ref: `refs/tags/${tagName}`, + sha: context.sha, + }); + } catch (error) { + warning(`Failed to create tag "${tagName}": ${error}`); + } +}; + +export const createGitHubRelease = async ( + tagName: string, + changelog: string | undefined, + latest: boolean, + dry: boolean, +): Promise => { + if (dry) { + info(`[DRY] Would create GitHub release "${tagName}"`); + return; + } + + try { + await octokit?.rest.repos.createRelease({ + ...context.repo, + tag_name: tagName, + name: tagName, + body: changelog ?? "", + generate_release_notes: changelog === undefined, + make_latest: latest ? "true" : "false", + }); + } catch (error) { + warning(`Failed to create GitHub release "${tagName}": ${error}`); + } +}; diff --git a/actions/release-packages/index.ts b/actions/release-packages/index.ts new file mode 100644 index 0000000..b2764b6 --- /dev/null +++ b/actions/release-packages/index.ts @@ -0,0 +1,178 @@ +import { endGroup, getInput, startGroup, summary } from "@actions/core"; +import { program } from "commander"; +import { + extractTokens, + formatString, + readRootChangelog, + resolveRootPath, + safeGetBooleanInput, +} from "lib"; + +import { type ReleaseEntry, generateReleaseTree } from "./generate-release-tree"; +import { createGitHubRelease, createTag } from "./github"; +import { publishToNpm } from "./npm"; + +interface ReleaseResult { + identifier: string; +} + +const parseOptions = () => { + program + .name("release packages from pr") + .description( + "Publishes packages and creates a tagged GitHub release after a release PR is merged", + ) + .option( + "--dry", + "skips publishing and tag creation, outputs logs instead", + safeGetBooleanInput("dry", false), + ) + .option("--packages ", "comma-separated list of package names", getInput("packages")) + .option("--version ", "version being released", getInput("version")) + .option( + "--tag-format ", + "git tag format ({org}, {package} for single package only, {version})", + getInput("tag_format") || "{org}/{package}@{version}", + ) + .option("--npm", "publish packages to npm registry", safeGetBooleanInput("npm", true)) + .option( + "--github-release", + "create a GitHub release", + safeGetBooleanInput("github_release", true), + ) + .option("--latest", "mark the GitHub release as latest", safeGetBooleanInput("latest", true)) + .parse(); + + return program.opts<{ + dry: boolean; + packages: string; + version: string; + tagFormat: string; + npm: boolean; + githubRelease: boolean; + latest: boolean; + }>(); +}; + +const resolveVersion = (allEntries: ReleaseEntry[], version: string): string => { + if (version) return version; + const versions = [...new Set(allEntries.map((e) => e.version))]; + if (versions.length !== 1) + throw new Error( + `Packages have mismatched versions (${versions.join(", ")}). Provide --version to override.`, + ); + return versions[0] as string; +}; + +const publishPackages = async ( + releaseTree: ReleaseEntry[][], + dry: boolean, +): Promise<{ published: ReleaseResult[]; skipped: ReleaseResult[] }> => { + const published: ReleaseResult[] = []; + const skipped: ReleaseResult[] = []; + + for (const batch of releaseTree) { + startGroup(`Publishing ${batch.map((e) => `${e.name}@${e.version}`).join(", ")}`); + + await Promise.all( + batch.map(async (entry) => { + const wasPublished = await publishToNpm(entry, dry); + const identifier = `${entry.name}@${entry.version}`; + if (wasPublished) published.push({ identifier }); + else skipped.push({ identifier }); + }), + ); + + endGroup(); + } + + return { published, skipped }; +}; + +const writeSummary = async ( + tagName: string, + doNpm: boolean, + published: ReleaseResult[], + skipped: ReleaseResult[], + dry: boolean, +): Promise => { + const result = summary.addHeading("Release summary"); + if (dry) result.addRaw("\n\n> [!NOTE]\n> This is a dry run.\n\n"); + + result.addHeading("Tag", 2); + result.addRaw(`\n\`${tagName}\`\n\n`); + + if (doNpm) { + result.addHeading("Published", 2); + if (published.length === 0) { + result.addRaw("\n_None_\n\n"); + } else { + result.addRaw("\n"); + for (const { identifier } of published) result.addRaw(`- \`${identifier}\`\n`); + result.addRaw("\n"); + } + + result.addHeading("Skipped", 2); + if (skipped.length === 0) { + result.addRaw("\n_None_\n\n"); + } else { + result.addRaw("\n"); + for (const { identifier } of skipped) result.addRaw(`- \`${identifier}\`\n`); + result.addRaw("\n"); + } + } + + await result.write(); +}; + +const bootstrap = async () => { + const { + dry, + packages: packagesInput, + version, + tagFormat, + npm: doNpm, + githubRelease: doGithubRelease, + latest: makeLatest, + } = parseOptions(); + + const packageNames = packagesInput + .split(",") + .map((p) => p.trim()) + .filter(Boolean); + if (!packageNames.length) throw new Error("No packages specified"); + if (tagFormat.includes("{package}") && packageNames.length > 1) + throw new Error( + "{package} token cannot be used in tag-format when releasing multiple packages", + ); + + const rootPath = resolveRootPath(); + const releaseTree = await generateReleaseTree(packageNames); + const allEntries = releaseTree.flat(); + + const resolvedVersion = resolveVersion(allEntries, version); + const tagName = formatString(tagFormat, extractTokens(packageNames, resolvedVersion)); + + const published: ReleaseResult[] = []; + const skipped: ReleaseResult[] = []; + + if (doNpm) { + const results = await publishPackages(releaseTree, dry); + published.push(...results.published); + skipped.push(...results.skipped); + } + + if (doGithubRelease) { + const changelog = + allEntries.length === 1 + ? allEntries[0]?.changelog + : await readRootChangelog(rootPath, resolvedVersion); + await createGitHubRelease(tagName, changelog, makeLatest, dry); + } else { + await createTag(tagName, dry); + } + + await writeSummary(tagName, doNpm, published, skipped, dry); +}; + +void bootstrap(); diff --git a/actions/release-packages/npm.ts b/actions/release-packages/npm.ts new file mode 100644 index 0000000..6687c23 --- /dev/null +++ b/actions/release-packages/npm.ts @@ -0,0 +1,52 @@ +import { info } from "@actions/core"; +import { $ } from "bun"; + +import type { ReleaseEntry } from "./generate-release-tree"; + +const REGISTRY_TIMEOUT_MS = 5 * 60 * 1_000; +const REGISTRY_POLL_INTERVAL_MS = 15_000; + +const checkRegistry = async (name: string, version: string): Promise => { + const res = await fetch(`https://registry.npmjs.org/${name}/${version}`); + return res.ok; +}; + +const pollUntilAvailable = async (name: string, version: string): Promise => { + const deadline = performance.now() + REGISTRY_TIMEOUT_MS; + + await new Promise((resolve, reject) => { + const interval = setInterval(async () => { + if (await checkRegistry(name, version)) { + clearInterval(interval); + resolve(); + return; + } + if (performance.now() > deadline) { + clearInterval(interval); + reject(new Error(`Timed out waiting for ${name}@${version} on the npm registry`)); + } + }, REGISTRY_POLL_INTERVAL_MS); + }); +}; + +export const publishToNpm = async (entry: ReleaseEntry, dry: boolean): Promise => { + if (entry.private) { + info(`${entry.name} is private, skipping npm publish.`); + return false; + } + + if (await checkRegistry(entry.name, entry.version)) { + info(`${entry.name}@${entry.version} already published, skipping.`); + return false; + } + + if (dry) { + info(`[DRY] Publishing ${entry.name}@${entry.version} to npm`); + return true; + } + + await $`pnpm --filter=${entry.name} publish --provenance --no-git-checks`; + await pollUntilAvailable(entry.name, entry.version); + + return true; +}; diff --git a/lib/changelog.ts b/lib/changelog.ts new file mode 100644 index 0000000..e127b00 --- /dev/null +++ b/lib/changelog.ts @@ -0,0 +1,51 @@ +import { file } from "bun"; +import { join } from "path"; + +const extractSection = ( + content: string, + matchHeader: (line: string) => boolean, +): string | undefined => { + const lines: string[] = []; + let found = false; + + for (const line of content.split("\n")) { + if (line.startsWith("# [")) { + if (found) break; + if (!matchHeader(line)) continue; + found = true; + continue; + } + if (found) lines.push(line); + } + + if (!lines.length) return undefined; + return `${lines.join("\n").replace(/^\s+|\s+$/g, "")}\n`; +}; + +export const readPackageChangelog = async ( + pkgPath: string, + name: string, + version: string, +): Promise => { + try { + const content = await file(join(pkgPath, "CHANGELOG.md")).text(); + return extractSection( + content, + (line) => line.startsWith(`# [${name}@${version}]`) || line.startsWith(`# [${version}]`), + ); + } catch { + return undefined; + } +}; + +export const readRootChangelog = async ( + rootPath: string, + version: string, +): Promise => { + try { + const content = await file(join(rootPath, "CHANGELOG.md")).text(); + return extractSection(content, (line) => line.startsWith(`# [${version}]`)); + } catch { + return undefined; + } +}; diff --git a/lib/format.ts b/lib/format.ts new file mode 100644 index 0000000..e1a2aa8 --- /dev/null +++ b/lib/format.ts @@ -0,0 +1,18 @@ +import type { FormatTokens } from "./types"; + +export const formatString = (format: string, tokens: FormatTokens): string => { + let result = format.replaceAll("{org}", tokens.org).replaceAll("{version}", tokens.version); + if (tokens.package !== undefined) { + result = result.replaceAll("{package}", tokens.package); + } + return result; +}; + +export const extractTokens = (packageNames: string[], version: string): FormatTokens => { + const [org, pkg] = packageNames[0]?.split("/") ?? []; + return { + org: org ?? "", + package: packageNames.length === 1 ? (pkg ?? org ?? "") : undefined, + version, + }; +}; diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 0000000..ef66e82 --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,6 @@ +export { readPackageChangelog, readRootChangelog } from "./changelog"; +export { formatString, extractTokens } from "./format"; +export { safeGetBooleanInput } from "./inputs"; +export { createOctokit } from "./octokit"; +export { resolvePackage, resolveRootPath, updateVersion } from "./packages"; +export type { FormatTokens, IPkg } from "./types"; diff --git a/lib/inputs.ts b/lib/inputs.ts new file mode 100644 index 0000000..bfa49ac --- /dev/null +++ b/lib/inputs.ts @@ -0,0 +1,9 @@ +import { getBooleanInput } from "@actions/core"; + +export const safeGetBooleanInput = (name: string, fallback: boolean): boolean => { + try { + return getBooleanInput(name); + } catch { + return fallback; + } +}; diff --git a/lib/octokit.ts b/lib/octokit.ts new file mode 100644 index 0000000..068abc5 --- /dev/null +++ b/lib/octokit.ts @@ -0,0 +1,7 @@ +import { getOctokit } from "@actions/github"; +import process from "node:process"; + +export const createOctokit = (): ReturnType | undefined => { + if (!process.env.GITHUB_TOKEN) return undefined; + return getOctokit(process.env.GITHUB_TOKEN); +}; diff --git a/lib/packages.ts b/lib/packages.ts new file mode 100644 index 0000000..b1a2c4e --- /dev/null +++ b/lib/packages.ts @@ -0,0 +1,21 @@ +import { $, file, write } from "bun"; +import process from "node:process"; +import { join } from "path"; + +import type { IPkg } from "./types"; + +export const resolveRootPath = (): string => process.env.GITHUB_WORKSPACE ?? process.cwd(); + +export const resolvePackage = async (name: string): Promise => { + const pkgs: [IPkg, ...IPkg[]] = + await $`pnpm list --filter ${name} --recursive --only-projects --prod --json`.json(); + if (pkgs.length <= 0) throw new Error(`Package ${name} not found`); + return pkgs[0]; +}; + +export const updateVersion = async (pkgPath: string, version: string): Promise => { + const fullPath = join(pkgPath, "package.json"); + const pkg = await file(fullPath).json(); + pkg.version = version; + await write(fullPath, `${JSON.stringify(pkg, null, 2)}\n`); +}; diff --git a/lib/types.ts b/lib/types.ts new file mode 100644 index 0000000..abc39f2 --- /dev/null +++ b/lib/types.ts @@ -0,0 +1,8 @@ +export interface IPkg { + name: string; + version: string; + path: string; + private: boolean; +} + +export type FormatTokens = { org: string; package?: string; version: string }; diff --git a/package.json b/package.json index b46ec42..079dd8e 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,8 @@ "dependencies": { "@actions/core": "catalog:actions", "@actions/github": "catalog:actions", - "commander": "catalog:core" + "commander": "catalog:core", + "semver": "catalog:core" }, "devDependencies": { "@commitlint/cli": "catalog:ci", @@ -56,6 +57,7 @@ "@npm/types": "catalog:core", "@trivago/prettier-plugin-sort-imports": "catalog:lint", "@types/bun": "catalog:core", + "@types/semver": "catalog:core", "eslint": "catalog:lint", "husky": "catalog:ci", "lint-staged": "catalog:ci", @@ -64,7 +66,7 @@ "tsdown": "catalog:build", "typescript": "catalog:build" }, - "packageManager": "pnpm@10.28.2", + "packageManager": "pnpm@11.3.0", "engines": { "node": "25" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d02156..eb121bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,8 +14,8 @@ catalogs: version: 9.1.1 build: terser: - specifier: ^5.46.1 - version: 5.46.1 + specifier: ^5.48.0 + version: 5.48.0 tsdown: specifier: ^0.22.0 version: 0.22.0 @@ -24,11 +24,11 @@ catalogs: version: 6.0.3 ci: '@commitlint/cli': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.1 + version: 21.0.1 '@commitlint/config-conventional': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.1 + version: 21.0.1 '@favware/cliff-jumper': specifier: ^6.1.0 version: 6.1.0 @@ -36,18 +36,24 @@ catalogs: specifier: ^9.1.7 version: 9.1.7 lint-staged: - specifier: ^17.0.4 - version: 17.0.4 + specifier: ^17.0.5 + version: 17.0.5 core: '@npm/types': specifier: ^2.1.0 version: 2.1.0 '@types/bun': - specifier: ^1.3.12 - version: 1.3.12 + specifier: ^1.3.14 + version: 1.3.14 + '@types/semver': + specifier: ^7.7.1 + version: 7.7.1 commander: specifier: ^14.0.3 version: 14.0.3 + semver: + specifier: ^7.8.1 + version: 7.8.1 lint: '@nanoforge-dev/utils-eslint-config': specifier: ^1.0.2 @@ -59,8 +65,8 @@ catalogs: specifier: ^6.0.2 version: 6.0.2 eslint: - specifier: ^10.2.1 - version: 10.2.1 + specifier: ^10.4.0 + version: 10.4.0 prettier: specifier: ^3.8.3 version: 3.8.3 @@ -78,19 +84,22 @@ importers: commander: specifier: catalog:core version: 14.0.3 + semver: + specifier: catalog:core + version: 7.8.1 devDependencies: '@commitlint/cli': specifier: catalog:ci - version: 20.5.0(@types/node@25.6.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + version: 21.0.1(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': specifier: catalog:ci - version: 20.5.0 + version: 21.0.1 '@favware/cliff-jumper': specifier: catalog:ci version: 6.1.0 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 @@ -102,25 +111,28 @@ importers: version: 6.0.2(prettier@3.8.3) '@types/bun': specifier: catalog:core - version: 1.3.12 + version: 1.3.14 + '@types/semver': + specifier: catalog:core + version: 7.7.1 eslint: specifier: catalog:lint - version: 10.2.1(jiti@2.6.1) + version: 10.4.0(jiti@2.6.1) husky: specifier: catalog:ci version: 9.1.7 lint-staged: specifier: catalog:ci - version: 17.0.4 + version: 17.0.5 prettier: specifier: catalog:lint version: 3.8.3 terser: specifier: catalog:build - version: 5.46.1 + version: 5.48.0 tsdown: specifier: catalog:build - version: 0.22.0(typescript@6.0.3)(unrun@0.2.37(synckit@0.11.12)) + version: 0.22.0(typescript@6.0.3) typescript: specifier: catalog:build version: 6.0.3 @@ -153,9 +165,9 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.4': - resolution: {integrity: sha512-YZ+FuIgkj7KrIb2a2X1XiY0QYgDxAbVbYP64SjwJzOK3euCsUerzenh2oqdsmKuPSlhzmFOOklnxzHAzXagvpw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/generator@8.0.0-rc.5': + resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} @@ -165,20 +177,20 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0-rc.4': - resolution: {integrity: sha512-dluR3v287dp6YPF57kyKKrHPKffUeuxH1zQcF1WD30TeFzWXhDiVi1U6PkqaDB0++H1PeCwRhmYl4DvoerlPIw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-string-parser@8.0.0-rc.5': + resolution: {integrity: sha512-sN7R8rBvDurfaziNfDEIjIntlazmlkCDGO4SNl2RJ3wRCn+QxspLV7hzYAE8WWVd2joVuT8sUxeePdLp2idI1A==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.4': - resolution: {integrity: sha512-HTD3bskipk5MSm08twTW6832jzIXUhxMddy4NPPzIMuyMEsrs0ZgwAaMj5ubB5+6hMlUjDu17vNconEmwsmpYg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-validator-identifier@8.0.0-rc.5': + resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true @@ -187,6 +199,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + '@babel/parser@8.0.0-rc.5': + resolution: {integrity: sha512-/Mfg83rK3+jsRbl4Vbd0jqxc6M1A1/WNFtgrowRM1unEsD3XcNnrBdMM0JWakd0/RN9lseQKwPduW1TiEwKOlQ==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -199,78 +216,78 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.0-rc.4': - resolution: {integrity: sha512-bw30DV880P/VYtsjWWdoWmJpb9S2Vn1/PqayyccTELzRQ/HslIO7+BD9rNoZ4AAFOAjC1vrNeBCkAsyh6Ibfww==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/types@8.0.0-rc.5': + resolution: {integrity: sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA==} + engines: {node: ^22.18.0 || >=24.11.0} - '@commitlint/cli@20.5.0': - resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==} - engines: {node: '>=v18'} + '@commitlint/cli@21.0.1': + resolution: {integrity: sha512-8vq10krmbJwBkvzXKhbs4o4JQEVscd3pqOlWuDUaDBwbeL694/P33UC29tZQFTAgPU9fVJ2+f2m3zw16yKWxHg==} + engines: {node: '>=22.12.0'} hasBin: true - '@commitlint/config-conventional@20.5.0': - resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==} - engines: {node: '>=v18'} + '@commitlint/config-conventional@21.0.1': + resolution: {integrity: sha512-gRorrkfWOh/+V5X8GYWWbQvrzPczopGMS4CCNrQdHkK4xWElv82BDvIsDhJZWTlI7TazOlYea6VATufCsFs+sw==} + engines: {node: '>=22.12.0'} - '@commitlint/config-validator@20.5.0': - resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} - engines: {node: '>=v18'} + '@commitlint/config-validator@21.0.1': + resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==} + engines: {node: '>=22.12.0'} - '@commitlint/ensure@20.5.0': - resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} - engines: {node: '>=v18'} + '@commitlint/ensure@21.0.1': + resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==} + engines: {node: '>=22.12.0'} - '@commitlint/execute-rule@20.0.0': - resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} - engines: {node: '>=v18'} + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} - '@commitlint/format@20.5.0': - resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} - engines: {node: '>=v18'} + '@commitlint/format@21.0.1': + resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==} + engines: {node: '>=22.12.0'} - '@commitlint/is-ignored@20.5.0': - resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} - engines: {node: '>=v18'} + '@commitlint/is-ignored@21.0.1': + resolution: {integrity: sha512-iNDP8SFdw8JEkM0CHZ2XFnhTN4Zg5jKUY2d8kBOSFrI2aA+3YJI7fcqVpfgbpJ9xtxFVYpi+DBATU5AvhoTq8g==} + engines: {node: '>=22.12.0'} - '@commitlint/lint@20.5.0': - resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} - engines: {node: '>=v18'} + '@commitlint/lint@21.0.1': + resolution: {integrity: sha512-gF+iYtUw1gBG3HUH9z3VxwUjGg2R2G5j+nmvPs8aIeYkiB7TtneBu3wO85I0bUl93bYNsvsCNI9Nte2fmDUMww==} + engines: {node: '>=22.12.0'} - '@commitlint/load@20.5.0': - resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} - engines: {node: '>=v18'} + '@commitlint/load@21.0.1': + resolution: {integrity: sha512-Btg1q1mKmiihN4W3x0EsPDrJMOQfMa9NIqlzlJyXAfxvsOGdGXOW5p3R3RcSxDCaY7JabY9flIl+Om1af3PSrw==} + engines: {node: '>=22.12.0'} - '@commitlint/message@20.4.3': - resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} - engines: {node: '>=v18'} + '@commitlint/message@21.0.1': + resolution: {integrity: sha512-R3dVQeJQ0B6yqrZEjkUHD4r7UJYLV9Lvk2xs3PTOmtWk2G3mI6Xgc+YdRxL1PwcDfBiUjv2SkIkW4AUc976w1w==} + engines: {node: '>=22.12.0'} - '@commitlint/parse@20.5.0': - resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} - engines: {node: '>=v18'} + '@commitlint/parse@21.0.1': + resolution: {integrity: sha512-oh/nCSOqdoeQNA1tO8aAmxkq5EBo8/NzcFQRvv66AWc9HpED28sL2iSicCKU6hPintWuscL6BJEWi77Wq1LPMQ==} + engines: {node: '>=22.12.0'} - '@commitlint/read@20.5.0': - resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} - engines: {node: '>=v18'} + '@commitlint/read@21.0.1': + resolution: {integrity: sha512-pMEu4lbpC8W0ZgKJj2U6WaobXIZWdFlULpIEewYhkPXx+WZcnoO53YrVPc7QErQuNolq2Me8dP58Wu7YAVXVOA==} + engines: {node: '>=22.12.0'} - '@commitlint/resolve-extends@20.5.0': - resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} - engines: {node: '>=v18'} + '@commitlint/resolve-extends@21.0.1': + resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==} + engines: {node: '>=22.12.0'} - '@commitlint/rules@20.5.0': - resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} - engines: {node: '>=v18'} + '@commitlint/rules@21.0.1': + resolution: {integrity: sha512-VMooYpz4nJg7xlaUso6CCOWEz8D/ChkvsvZUMARcoJ1ZpfKPyFCGrHNha2tbsETNAb6ErgiRuCr2DvghrvPDYQ==} + engines: {node: '>=22.12.0'} - '@commitlint/to-lines@20.0.0': - resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} - engines: {node: '>=v18'} + '@commitlint/to-lines@21.0.1': + resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} + engines: {node: '>=22.12.0'} - '@commitlint/top-level@20.4.3': - resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} - engines: {node: '>=v18'} + '@commitlint/top-level@21.0.1': + resolution: {integrity: sha512-4esUYqzY7K0FCgcJ/1xWEZekV7Ch4yZT1+xjEb7KzqbJ05XEkxHVsTfC8ADKNNtlCE2pj98KEbPGZWw9WwEnVw==} + engines: {node: '>=22.12.0'} - '@commitlint/types@20.5.0': - resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} - engines: {node: '>=v18'} + '@commitlint/types@21.0.1': + resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==} + engines: {node: '>=22.12.0'} '@conventional-changelog/git-client@2.7.0': resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} @@ -316,8 +333,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -440,18 +457,15 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} + '@octokit/request@10.0.9': + resolution: {integrity: sha512-o8Bi3f608eyM+7BmBiUWxFsdjLb3/ym1cQek5LZOv9KkZcxRrHCPhhRzm6xjO6HVZ85ItD6+sTsjxo821SVa/A==} engines: {node: '>= 20'} '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oxc-project/types@0.127.0': - resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - - '@oxc-project/types@0.129.0': - resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} '@oxfmt/binding-android-arm-eabi@0.35.0': resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==} @@ -582,201 +596,103 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.0.0': - resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==} + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0': - resolution: {integrity: sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0': - resolution: {integrity: sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.17': - resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0': - resolution: {integrity: sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-freebsd-x64@1.0.0-rc.17': - resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0': - resolution: {integrity: sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': - resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0': - resolution: {integrity: sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-arm64-musl@1.0.0': - resolution: {integrity: sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': - resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0': - resolution: {integrity: sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==} + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-s390x-gnu@1.0.0': - resolution: {integrity: sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0': - resolution: {integrity: sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': - resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0': - resolution: {integrity: sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': - resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0': - resolution: {integrity: sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==} + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': - resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.0.0': - resolution: {integrity: sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': - resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0': - resolution: {integrity: sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==} + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': - resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0': - resolution: {integrity: sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': - resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0': - resolution: {integrity: sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==} - - '@rolldown/pluginutils@1.0.0-rc.17': - resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@sapphire/result@2.8.0': resolution: {integrity: sha512-693yWouX+hR9uJm1Jgq0uSSjbSD3UrblMaxiuGbHPjSwzLCSZTcm0h3kvdVhq3o/yl4+oeAWW3hiaJ0TELuRJQ==} @@ -820,11 +736,11 @@ packages: svelte: optional: true - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} - '@types/bun@1.3.12': - resolution: {integrity: sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A==} + '@types/bun@1.3.14': + resolution: {integrity: sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==} '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} @@ -832,8 +748,8 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} @@ -841,66 +757,69 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} - '@typescript-eslint/eslint-plugin@8.59.0': - resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@typescript-eslint/eslint-plugin@8.59.4': + resolution: {integrity: sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.0 + '@typescript-eslint/parser': ^8.59.4 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.0': - resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} + '@typescript-eslint/parser@8.59.4': + resolution: {integrity: sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.0': - resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} + '@typescript-eslint/project-service@8.59.4': + resolution: {integrity: sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.0': - resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} + '@typescript-eslint/scope-manager@8.59.4': + resolution: {integrity: sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.0': - resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} + '@typescript-eslint/tsconfig-utils@8.59.4': + resolution: {integrity: sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.0': - resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} + '@typescript-eslint/type-utils@8.59.4': + resolution: {integrity: sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.0': - resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} + '@typescript-eslint/types@8.59.4': + resolution: {integrity: sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.0': - resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} + '@typescript-eslint/typescript-estree@8.59.4': + resolution: {integrity: sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.0': - resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} + '@typescript-eslint/utils@8.59.4': + resolution: {integrity: sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.0': - resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} + '@typescript-eslint/visitor-keys@8.59.4': + resolution: {integrity: sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -913,34 +832,26 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} - ansi-regex@5.0.1: - 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'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + ansis@4.3.0: + resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==} engines: {node: '>=14'} argparse@2.0.1: @@ -972,15 +883,15 @@ packages: brace-expansion@2.1.0: resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bun-types@1.3.12: - resolution: {integrity: sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA==} + bun-types@1.3.14: + resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==} cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} @@ -1002,16 +913,9 @@ packages: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - 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==} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -1026,6 +930,10 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + conventional-changelog-angular@8.3.1: resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} @@ -1104,11 +1012,8 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} env-paths@2.2.1: @@ -1122,6 +1027,9 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + es-toolkit@1.46.1: + resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1182,8 +1090,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.1: - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + eslint@10.4.0: + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1237,8 +1145,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1272,8 +1180,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-stream@9.0.1: @@ -1284,39 +1192,39 @@ packages: resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} engines: {node: '>=20.20.0'} - git-cliff-darwin-arm64@2.12.0: - resolution: {integrity: sha512-k3jzFDmkjc+6MjpnqvRenzMWRbZN5J+w3iQ8WNt9pSmPewNJIm92O/G6AbAxQaCbSfzQapeZ0e+5wSacVc62GA==} + git-cliff-darwin-arm64@2.13.1: + resolution: {integrity: sha512-3ebPUnUlLmrSZDHknSZQmyZV7DEJVtKse8I25Am0cENET5Py9u9Hg9k8IRXdiDtHtPDs6MYZx7BOi11WtcfqSg==} cpu: [arm64] os: [darwin] - git-cliff-darwin-x64@2.12.0: - resolution: {integrity: sha512-Kkoe+nfmXM/WMcZuC+OaIGA5vj847Ima6NEaaHnyb7Xsri+OAJryPXlABV7q6UeGfiiN2MlL8UsoHgnIEIQLqQ==} + git-cliff-darwin-x64@2.13.1: + resolution: {integrity: sha512-KZfggGAiw1EvZH3BOUclEU4eGCP2+Z+lH/N2Ni3FH9L2M1U7FYJqqaMhqgO8azTj67betvDshH8WBUkIkSsVxA==} cpu: [x64] os: [darwin] - git-cliff-linux-arm64@2.12.0: - resolution: {integrity: sha512-eTp2gZjV4LmfzdlhFsYFYuWf5mojALU03X/37r3VmnpuabaijuTEQo/zm/0BKP8gPiLKLR4ofdUvE1OSisCE1A==} + git-cliff-linux-arm64@2.13.1: + resolution: {integrity: sha512-clNRcNzdvk4GKyTt3ZhhWqcrjVRghcUcGNSV/Y87YJf3Mc/zl9ajUAhnXPOBSX/KWBr2od5SmkCt0qGYagY07g==} cpu: [arm64] os: [linux] - git-cliff-linux-x64@2.12.0: - resolution: {integrity: sha512-abidFG6dH2N5hPUF245/kRYdwViP11Pz7ZwIW/a86CJLZ/WSE7dJt0f2cUIkxTcFSsp11OwuLc5k1hAbwmiIRw==} + git-cliff-linux-x64@2.13.1: + resolution: {integrity: sha512-gZcIQhIQ1lDUMD8UieUSEZAYoyZN7nPd8O3VQoj1Ddhqll4UAS1Zxms1SU3U8pb0UTdc2m3ia/wtOnyhvbjdjQ==} cpu: [x64] os: [linux] - git-cliff-windows-arm64@2.12.0: - resolution: {integrity: sha512-rFuI+D/3Yq3jqafazZw5E68HsXEvcwI/B/5IPDIZD+QqZh8vETf4IXs7wVxYWWtHQJDC+G9ZrR3vE5648mdG3A==} + git-cliff-windows-arm64@2.13.1: + resolution: {integrity: sha512-+XubuQv68DuDwF0u6Af5d889MEf/RD48VBQS7ZmPi4sUSCXAZqRm1/ApCsStLqxMDCf1+7s05B/kNbm9wjV80A==} cpu: [arm64] os: [win32] - git-cliff-windows-x64@2.12.0: - resolution: {integrity: sha512-jskb3nyVGr4dekHSCDM/J6iho45t37wnmMGkPNq42kOoUp04JS96yMBrNRdXfXV9ViZsaZq3NaNu1e3QkhFlyA==} + git-cliff-windows-x64@2.13.1: + resolution: {integrity: sha512-Bi8ehp1VMkomY7M/356PgovKQ8CBRiuOOkq+aWC2evQuMFfXWjG0GBlPED9QkZoUJ4iQ5ygB5DYdK3BjhaOyPw==} cpu: [x64] os: [win32] - git-cliff@2.12.0: - resolution: {integrity: sha512-kjTm5439LsvMs/xRxndWBUetrA4aQfLE8DTbR/ER5H7fGn7ioeFG9YNAK1V7dpTtNi6k2uKYY4f3EvT8J1d+1Q==} - engines: {node: '>=18.19 || >=20.6 || >=21'} + git-cliff@2.13.1: + resolution: {integrity: sha512-2BzXwrom+SMHeNA5Ut+MtzqXejg0wbVwmzj3k7e9w62UQoyCDrM9UIcvtl6hnT3jocEQ1zLRQBaXXx97Gmnk7A==} + engines: {node: ^18.19 || >=20.6} hasBin: true git-raw-commits@5.0.1: @@ -1328,9 +1236,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} @@ -1364,9 +1272,6 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-meta-resolve@4.2.0: - resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - import-without-cache@0.4.0: resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} engines: {node: ^22.18.0 || >=24.0.0} @@ -1375,9 +1280,9 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} irregular-plurals@3.5.0: resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} @@ -1390,10 +1295,6 @@ 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-fullwidth-code-point@5.1.0: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} @@ -1468,8 +1369,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@17.0.4: - resolution: {integrity: sha512-+rU9lSUyVOZ/hDUmRLVGzyS2v73cDdQjX+XQz1AaOdIE4RysLq0HoPW2HrrgeNCLklkhi904VBU1bmgWLHVnkA==} + lint-staged@17.0.5: + resolution: {integrity: sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==} engines: {node: '>=22.22.1'} hasBin: true @@ -1484,24 +1385,6 @@ packages: lodash-es@4.18.1: resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -1526,9 +1409,6 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1634,10 +1514,6 @@ packages: quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1660,14 +1536,14 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-plugin-dts@0.25.0: - resolution: {integrity: sha512-GE3uDZgUuA9l6g+1u928TRmadd5IVhaWiwpWast2kCyLv9tYJJCC6E5HHkV0HGmwC5ZL73xh12/PRZI+KZ2vdQ==} + rolldown-plugin-dts@0.25.1: + resolution: {integrity: sha512-zK82aC/8z1iVW+g0bCnlQZq04Y5bNeL/RcRwTYBwsnU6wH0N+6vpIFkN7JC0kYRS5qKA+pxQyfIPvXJ6Q5xSpQ==} engines: {node: ^22.18.0 || >=24.0.0} peerDependencies: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20260325.1' rolldown: ^1.0.0 - typescript: ^6.0.0 + typescript: ^5.0.0 || ^6.0.0 vue-tsc: ~3.2.0 peerDependenciesMeta: '@ts-macro/tsc': @@ -1679,18 +1555,13 @@ packages: vue-tsc: optional: true - rolldown@1.0.0: - resolution: {integrity: sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==} + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.17: - resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} hasBin: true @@ -1729,22 +1600,14 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -1765,17 +1628,13 @@ packages: resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} hasBin: true - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} - engines: {node: '>=18'} - - tinyexec@1.1.2: - resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + tinyexec@1.2.2: + resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} engines: {node: '>=18'} tinyglobby@0.2.16: @@ -1841,8 +1700,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.59.0: - resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} + typescript-eslint@8.59.4: + resolution: {integrity: sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1856,8 +1715,8 @@ packages: unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} undici@6.25.0: resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} @@ -1870,16 +1729,6 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - unrun@0.2.37: - resolution: {integrity: sha512-AA7vDuYsgeSYVzJMm16UKA+aXFKhy7nFqW9z5l7q44K4ppFWZAMqYS58ePRZbugMLPH0fwwMzD5A8nP0avxwZQ==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - synckit: ^0.11.11 - peerDependenciesMeta: - synckit: - optional: true - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -1896,10 +1745,6 @@ packages: resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} engines: {node: '>=20'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -1908,18 +1753,18 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.8.4: - resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -1946,7 +1791,7 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 undici: 6.25.0 @@ -1970,16 +1815,16 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.4': + '@babel/generator@8.0.0-rc.5': dependencies: - '@babel/parser': 8.0.0-rc.4 - '@babel/types': 8.0.0-rc.4 + '@babel/parser': 8.0.0-rc.5 + '@babel/types': 8.0.0-rc.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -1989,24 +1834,28 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@8.0.0-rc.4': {} + '@babel/helper-string-parser@8.0.0-rc.5': {} '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@8.0.0-rc.4': {} + '@babel/helper-validator-identifier@8.0.0-rc.5': {} - '@babel/parser@7.29.2': + '@babel/parser@7.29.3': dependencies: '@babel/types': 7.29.0 '@babel/parser@8.0.0-rc.4': dependencies: - '@babel/types': 8.0.0-rc.4 + '@babel/types': 8.0.0-rc.5 + + '@babel/parser@8.0.0-rc.5': + dependencies: + '@babel/types': 8.0.0-rc.5 '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -2014,7 +1863,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -2026,121 +1875,115 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@8.0.0-rc.4': + '@babel/types@8.0.0-rc.5': dependencies: - '@babel/helper-string-parser': 8.0.0-rc.4 - '@babel/helper-validator-identifier': 8.0.0-rc.4 + '@babel/helper-string-parser': 8.0.0-rc.5 + '@babel/helper-validator-identifier': 8.0.0-rc.5 - '@commitlint/cli@20.5.0(@types/node@25.6.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.0.1(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: - '@commitlint/format': 20.5.0 - '@commitlint/lint': 20.5.0 - '@commitlint/load': 20.5.0(@types/node@25.6.0)(typescript@6.0.3) - '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) - '@commitlint/types': 20.5.0 - tinyexec: 1.1.1 - yargs: 17.7.2 + '@commitlint/format': 21.0.1 + '@commitlint/lint': 21.0.1 + '@commitlint/load': 21.0.1(@types/node@25.9.1)(typescript@6.0.3) + '@commitlint/read': 21.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.0.1 + tinyexec: 1.2.2 + yargs: 18.0.0 transitivePeerDependencies: - '@types/node' - conventional-commits-filter - conventional-commits-parser - typescript - '@commitlint/config-conventional@20.5.0': + '@commitlint/config-conventional@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 conventional-changelog-conventionalcommits: 9.3.1 - '@commitlint/config-validator@20.5.0': + '@commitlint/config-validator@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - ajv: 8.18.0 + '@commitlint/types': 21.0.1 + ajv: 8.20.0 - '@commitlint/ensure@20.5.0': + '@commitlint/ensure@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + '@commitlint/types': 21.0.1 + es-toolkit: 1.46.1 - '@commitlint/execute-rule@20.0.0': {} + '@commitlint/execute-rule@21.0.1': {} - '@commitlint/format@20.5.0': + '@commitlint/format@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 picocolors: 1.1.1 - '@commitlint/is-ignored@20.5.0': + '@commitlint/is-ignored@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - semver: 7.7.4 + '@commitlint/types': 21.0.1 + semver: 7.8.1 - '@commitlint/lint@20.5.0': + '@commitlint/lint@21.0.1': dependencies: - '@commitlint/is-ignored': 20.5.0 - '@commitlint/parse': 20.5.0 - '@commitlint/rules': 20.5.0 - '@commitlint/types': 20.5.0 + '@commitlint/is-ignored': 21.0.1 + '@commitlint/parse': 21.0.1 + '@commitlint/rules': 21.0.1 + '@commitlint/types': 21.0.1 - '@commitlint/load@20.5.0(@types/node@25.6.0)(typescript@6.0.3)': + '@commitlint/load@21.0.1(@types/node@25.9.1)(typescript@6.0.3)': dependencies: - '@commitlint/config-validator': 20.5.0 - '@commitlint/execute-rule': 20.0.0 - '@commitlint/resolve-extends': 20.5.0 - '@commitlint/types': 20.5.0 + '@commitlint/config-validator': 21.0.1 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.0.1 + '@commitlint/types': 21.0.1 cosmiconfig: 9.0.1(typescript@6.0.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.46.1 is-plain-obj: 4.1.0 - lodash.mergewith: 4.6.2 picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/message@20.4.3': {} + '@commitlint/message@21.0.1': {} - '@commitlint/parse@20.5.0': + '@commitlint/parse@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 conventional-changelog-angular: 8.3.1 conventional-commits-parser: 6.4.0 - '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': + '@commitlint/read@21.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: - '@commitlint/top-level': 20.4.3 - '@commitlint/types': 20.5.0 + '@commitlint/top-level': 21.0.1 + '@commitlint/types': 21.0.1 git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) - minimist: 1.2.8 - tinyexec: 1.1.1 + tinyexec: 1.2.2 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@20.5.0': + '@commitlint/resolve-extends@21.0.1': dependencies: - '@commitlint/config-validator': 20.5.0 - '@commitlint/types': 20.5.0 - global-directory: 4.0.1 - import-meta-resolve: 4.2.0 - lodash.mergewith: 4.6.2 + '@commitlint/config-validator': 21.0.1 + '@commitlint/types': 21.0.1 + es-toolkit: 1.46.1 + global-directory: 5.0.0 resolve-from: 5.0.0 - '@commitlint/rules@20.5.0': + '@commitlint/rules@21.0.1': dependencies: - '@commitlint/ensure': 20.5.0 - '@commitlint/message': 20.4.3 - '@commitlint/to-lines': 20.0.0 - '@commitlint/types': 20.5.0 + '@commitlint/ensure': 21.0.1 + '@commitlint/message': 21.0.1 + '@commitlint/to-lines': 21.0.1 + '@commitlint/types': 21.0.1 - '@commitlint/to-lines@20.0.0': {} + '@commitlint/to-lines@21.0.1': {} - '@commitlint/top-level@20.4.3': + '@commitlint/top-level@21.0.1': dependencies: escalade: 3.2.0 - '@commitlint/types@20.5.0': + '@commitlint/types@21.0.1': dependencies: conventional-commits-parser: 6.4.0 picocolors: 1.1.1 @@ -2149,7 +1992,7 @@ snapshots: dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 - semver: 7.7.4 + semver: 7.8.1 optionalDependencies: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.4.0 @@ -2176,9 +2019,9 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.6.1))': dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -2191,7 +2034,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.5': + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 @@ -2220,9 +2063,9 @@ snapshots: commander: 14.0.3 conventional-recommended-bump: 11.2.0 execa: 9.6.1 - git-cliff: 2.12.0 + git-cliff: 2.13.1 js-yaml: 4.1.1 - semver: 7.7.4 + semver: 7.8.1 smol-toml: 1.6.1 '@favware/colorette-spinner@1.0.1': @@ -2264,16 +2107,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3)': + '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3)': dependencies: '@eslint/js': 9.39.4 '@favware/cliff-jumper': 6.1.0 - eslint-config-prettier: 10.1.8(eslint@10.2.1(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.6.1)) eslint-formatter-pretty: 7.1.0 - eslint-plugin-format: 1.5.0(eslint@10.2.1(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)))(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3) + eslint-plugin-format: 1.5.0(eslint@10.4.0(jiti@2.6.1)) + eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)))(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3) globals: 16.5.0 - typescript-eslint: 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + typescript-eslint: 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - '@types/eslint' - eslint @@ -2287,7 +2130,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@npm/types@2.1.0': {} @@ -2298,7 +2141,7 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 @@ -2311,7 +2154,7 @@ snapshots: '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -2338,11 +2181,12 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.9': dependencies: '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 + content-type: 2.0.0 fast-content-type-parse: 3.0.0 json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 @@ -2351,10 +2195,7 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oxc-project/types@0.127.0': - optional: true - - '@oxc-project/types@0.129.0': {} + '@oxc-project/types@0.132.0': {} '@oxfmt/binding-android-arm-eabi@0.35.0': optional: true @@ -2419,108 +2260,56 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.0.0': - optional: true - - '@rolldown/binding-android-arm64@1.0.0-rc.17': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-rc.17': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0': + '@rolldown/binding-android-arm64@1.0.2': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.17': + '@rolldown/binding-darwin-arm64@1.0.2': optional: true - '@rolldown/binding-freebsd-x64@1.0.0': + '@rolldown/binding-darwin-x64@1.0.2': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + '@rolldown/binding-freebsd-x64@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0': + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + '@rolldown/binding-linux-arm64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0': + '@rolldown/binding-linux-arm64-musl@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + '@rolldown/binding-linux-ppc64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0': + '@rolldown/binding-linux-s390x-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + '@rolldown/binding-linux-x64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0': + '@rolldown/binding-linux-x64-musl@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + '@rolldown/binding-openharmony-arm64@1.0.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0': - optional: true - - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + '@rolldown/binding-wasm32-wasi@1.0.2': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0': + '@rolldown/binding-win32-arm64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + '@rolldown/binding-win32-x64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': - optional: true - - '@rolldown/pluginutils@1.0.0': {} - - '@rolldown/pluginutils@1.0.0-rc.17': - optional: true + '@rolldown/pluginutils@1.0.1': {} '@sapphire/result@2.8.0': {} @@ -2539,7 +2328,7 @@ snapshots: '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.3)': dependencies: '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 javascript-natural-sort: 0.7.1 @@ -2550,41 +2339,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true - '@types/bun@1.3.12': + '@types/bun@1.3.14': dependencies: - bun-types: 1.3.12 + bun-types: 1.3.14 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/jsesc@2.5.1': {} '@types/json-schema@7.0.15': {} - '@types/node@25.6.0': + '@types/node@25.9.1': dependencies: - undici-types: 7.19.2 + undici-types: 7.24.6 + + '@types/semver@7.7.1': {} - '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.0 - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/type-utils': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 + eslint: 10.4.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -2592,79 +2383,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.0': + '@typescript-eslint/scope-manager@8.59.4': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 - '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.59.4(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.0': {} + '@typescript-eslint/types@8.59.4': {} - '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.59.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/project-service': 8.59.4(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.7.4 + semver: 7.8.1 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) - eslint: 10.2.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + eslint: 10.4.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.0': + '@typescript-eslint/visitor-keys@8.59.4': dependencies: - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/types': 8.59.4 eslint-visitor-keys: 5.0.1 acorn-jsx@5.3.2(acorn@8.16.0): @@ -2673,17 +2464,17 @@ snapshots: acorn@8.16.0: {} - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -2691,17 +2482,11 @@ snapshots: dependencies: environment: 1.1.0 - 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: {} - ansis@4.2.0: {} + ansis@4.3.0: {} argparse@2.0.1: {} @@ -2727,15 +2512,15 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 buffer-from@1.1.2: {} - bun-types@1.3.12: + bun-types@1.3.14: dependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 cac@7.0.0: {} @@ -2750,19 +2535,13 @@ snapshots: cli-truncate@5.2.0: dependencies: slice-ansi: 8.0.0 - string-width: 8.2.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + string-width: 8.2.1 - color-convert@2.0.1: + cliui@9.0.1: dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 colorette@2.0.20: {} @@ -2775,6 +2554,8 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 + content-type@2.0.0: {} + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -2800,9 +2581,9 @@ snapshots: conventional-commits-parser: 6.4.0 meow: 13.2.0 - cosmiconfig-typescript-loader@6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 typescript: 6.0.3 @@ -2838,9 +2619,7 @@ snapshots: emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} - - empathic@2.0.0: {} + empathic@2.0.1: {} env-paths@2.2.1: {} @@ -2850,13 +2629,15 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-toolkit@1.46.1: {} + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) eslint-formatter-pretty@7.1.0: dependencies: @@ -2866,45 +2647,45 @@ snapshots: eslint-rule-docs: 1.1.235 log-symbols: 7.0.1 plur: 5.1.0 - string-width: 8.2.0 + string-width: 8.2.1 supports-hyperlinks: 4.4.0 - eslint-formatting-reporter@0.0.0(eslint@10.2.1(jiti@2.6.1)): + eslint-formatting-reporter@0.0.0(eslint@10.4.0(jiti@2.6.1)): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) prettier-linter-helpers: 1.0.1 eslint-parser-plain@0.1.1: {} - eslint-plugin-format@1.5.0(eslint@10.2.1(jiti@2.6.1)): + eslint-plugin-format@1.5.0(eslint@10.4.0(jiti@2.6.1)): dependencies: '@dprint/formatter': 0.5.1 '@dprint/markdown': 0.21.1 '@dprint/toml': 0.7.0 - eslint: 10.2.1(jiti@2.6.1) - eslint-formatting-reporter: 0.0.0(eslint@10.2.1(jiti@2.6.1)) + eslint: 10.4.0(jiti@2.6.1) + eslint-formatting-reporter: 0.0.0(eslint@10.4.0(jiti@2.6.1)) eslint-parser-plain: 0.1.1 ohash: 2.0.11 oxfmt: 0.35.0 prettier: 3.8.3 synckit: 0.11.12 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)))(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.6.1)))(eslint@10.4.0(jiti@2.6.1))(prettier@3.8.3): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.6.1) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.1(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.6.1)) eslint-rule-docs@1.1.235: {} eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2912,19 +2693,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1(jiti@2.6.1): + eslint@10.4.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 + '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.1 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 @@ -2967,7 +2748,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -2998,7 +2779,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.0: {} + fast-uri@3.1.2: {} fdir@6.5.0(picomatch@4.0.4): optionalDependencies: @@ -3026,7 +2807,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-stream@9.0.1: dependencies: @@ -3037,34 +2818,34 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - git-cliff-darwin-arm64@2.12.0: + git-cliff-darwin-arm64@2.13.1: optional: true - git-cliff-darwin-x64@2.12.0: + git-cliff-darwin-x64@2.13.1: optional: true - git-cliff-linux-arm64@2.12.0: + git-cliff-linux-arm64@2.13.1: optional: true - git-cliff-linux-x64@2.12.0: + git-cliff-linux-x64@2.13.1: optional: true - git-cliff-windows-arm64@2.12.0: + git-cliff-windows-arm64@2.13.1: optional: true - git-cliff-windows-x64@2.12.0: + git-cliff-windows-x64@2.13.1: optional: true - git-cliff@2.12.0: + git-cliff@2.13.1: dependencies: execa: 9.6.1 optionalDependencies: - git-cliff-darwin-arm64: 2.12.0 - git-cliff-darwin-x64: 2.12.0 - git-cliff-linux-arm64: 2.12.0 - git-cliff-linux-x64: 2.12.0 - git-cliff-windows-arm64: 2.12.0 - git-cliff-windows-x64: 2.12.0 + git-cliff-darwin-arm64: 2.13.1 + git-cliff-darwin-x64: 2.13.1 + git-cliff-linux-arm64: 2.13.1 + git-cliff-linux-x64: 2.13.1 + git-cliff-windows-arm64: 2.13.1 + git-cliff-windows-x64: 2.13.1 git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0): dependencies: @@ -3078,9 +2859,9 @@ snapshots: dependencies: is-glob: 4.0.3 - global-directory@4.0.1: + global-directory@5.0.0: dependencies: - ini: 4.1.1 + ini: 6.0.0 globals@16.5.0: {} @@ -3101,13 +2882,11 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-meta-resolve@4.2.0: {} - import-without-cache@0.4.0: {} imurmurhash@0.1.4: {} - ini@4.1.1: {} + ini@6.0.0: {} irregular-plurals@3.5.0: {} @@ -3115,11 +2894,9 @@ snapshots: is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-glob@4.0.3: dependencies: @@ -3170,14 +2947,14 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@17.0.4: + lint-staged@17.0.5: dependencies: listr2: 10.2.1 picomatch: 4.0.4 string-argv: 0.3.2 - tinyexec: 1.1.2 + tinyexec: 1.2.2 optionalDependencies: - yaml: 2.8.4 + yaml: 2.9.0 listr2@10.2.1: dependencies: @@ -3193,18 +2970,6 @@ snapshots: lodash-es@4.18.1: {} - lodash.camelcase@4.3.0: {} - - lodash.kebabcase@4.1.1: {} - - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.upperfirst@4.3.1: {} - log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -3224,14 +2989,12 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@9.0.9: dependencies: brace-expansion: 2.1.0 - minimist@1.2.8: {} - ms@2.1.3: {} natural-compare@1.4.0: {} @@ -3341,8 +3104,6 @@ snapshots: quansync@1.0.0: {} - require-directory@2.1.1: {} - require-from-string@2.0.2: {} resolve-from@4.0.0: {} @@ -3358,66 +3119,44 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.25.0(rolldown@1.0.0)(typescript@6.0.3): + rolldown-plugin-dts@0.25.1(rolldown@1.0.2)(typescript@6.0.3): dependencies: - '@babel/generator': 8.0.0-rc.4 - '@babel/helper-validator-identifier': 8.0.0-rc.4 + '@babel/generator': 8.0.0-rc.5 + '@babel/helper-validator-identifier': 8.0.0-rc.5 '@babel/parser': 8.0.0-rc.4 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 dts-resolver: 3.0.0 get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 - rolldown: 1.0.0 + rolldown: 1.0.2 optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0: + rolldown@1.0.2: dependencies: - '@oxc-project/types': 0.129.0 - '@rolldown/pluginutils': 1.0.0 + '@oxc-project/types': 0.132.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0 - '@rolldown/binding-darwin-arm64': 1.0.0 - '@rolldown/binding-darwin-x64': 1.0.0 - '@rolldown/binding-freebsd-x64': 1.0.0 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0 - '@rolldown/binding-linux-arm64-gnu': 1.0.0 - '@rolldown/binding-linux-arm64-musl': 1.0.0 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0 - '@rolldown/binding-linux-s390x-gnu': 1.0.0 - '@rolldown/binding-linux-x64-gnu': 1.0.0 - '@rolldown/binding-linux-x64-musl': 1.0.0 - '@rolldown/binding-openharmony-arm64': 1.0.0 - '@rolldown/binding-wasm32-wasi': 1.0.0 - '@rolldown/binding-win32-arm64-msvc': 1.0.0 - '@rolldown/binding-win32-x64-msvc': 1.0.0 - - rolldown@1.0.0-rc.17: - dependencies: - '@oxc-project/types': 0.127.0 - '@rolldown/pluginutils': 1.0.0-rc.17 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.17 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 - '@rolldown/binding-darwin-x64': 1.0.0-rc.17 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 - optional: true - - semver@7.7.4: {} + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 + + semver@7.8.1: {} shebang-command@2.0.0: dependencies: @@ -3448,27 +3187,17 @@ snapshots: string-argv@0.3.2: {} - 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@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string-width@8.2.0: + string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -3486,16 +3215,14 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - terser@5.46.1: + terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 - tinyexec@1.1.1: {} - - tinyexec@1.1.2: {} + tinyexec@1.2.2: {} tinyglobby@0.2.16: dependencies: @@ -3510,26 +3237,25 @@ snapshots: dependencies: typescript: 6.0.3 - tsdown@0.22.0(typescript@6.0.3)(unrun@0.2.37(synckit@0.11.12)): + tsdown@0.22.0(typescript@6.0.3): dependencies: - ansis: 4.2.0 + ansis: 4.3.0 cac: 7.0.0 defu: 6.1.7 - empathic: 2.0.0 + empathic: 2.0.1 hookable: 6.1.1 import-without-cache: 0.4.0 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0 - rolldown-plugin-dts: 0.25.0(rolldown@1.0.0)(typescript@6.0.3) - semver: 7.7.4 - tinyexec: 1.1.2 + rolldown: 1.0.2 + rolldown-plugin-dts: 0.25.1(rolldown@1.0.2)(typescript@6.0.3) + semver: 7.8.1 + tinyexec: 1.2.2 tinyglobby: 0.2.16 tree-kill: 1.2.2 unconfig-core: 7.5.0 optionalDependencies: typescript: 6.0.3 - unrun: 0.2.37(synckit@0.11.12) transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' @@ -3545,13 +3271,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3): + typescript-eslint@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.4.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -3563,7 +3289,7 @@ snapshots: '@quansync/fs': 1.0.0 quansync: 1.0.0 - undici-types@7.19.2: {} + undici-types@7.24.6: {} undici@6.25.0: {} @@ -3571,13 +3297,6 @@ snapshots: universal-user-agent@7.0.3: {} - unrun@0.2.37(synckit@0.11.12): - dependencies: - rolldown: 1.0.0-rc.17 - optionalDependencies: - synckit: 0.11.12 - optional: true - uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -3591,15 +3310,9 @@ snapshots: wrap-ansi@10.0.0: dependencies: ansi-styles: 6.2.3 - string-width: 8.2.0 + string-width: 8.2.1 strip-ansi: 7.2.0 - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -3608,20 +3321,19 @@ snapshots: y18n@5.0.8: {} - yaml@2.8.4: + yaml@2.9.0: optional: true - yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} - yargs@17.7.2: + yargs@18.0.0: dependencies: - cliui: 8.0.1 + cliui: 9.0.1 escalade: 3.2.0 get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 + string-width: 7.2.0 y18n: 5.0.8 - yargs-parser: 21.1.1 + yargs-parser: 22.0.0 yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 01e4844..09ade42 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,24 +3,26 @@ catalogs: '@actions/core': ^3.0.1 '@actions/github': ^9.1.1 build: - terser: ^5.46.1 + terser: ^5.48.0 tsdown: ^0.22.0 typescript: ^6.0.3 ci: - '@commitlint/cli': ^20.5.0 - '@commitlint/config-conventional': ^20.5.0 + '@commitlint/cli': ^21.0.1 + '@commitlint/config-conventional': ^21.0.1 '@favware/cliff-jumper': ^6.1.0 husky: ^9.1.7 - lint-staged: ^17.0.4 + lint-staged: ^17.0.5 core: '@npm/types': ^2.1.0 - '@types/bun': ^1.3.12 + '@types/bun': ^1.3.14 + '@types/semver': ^7.7.1 commander: ^14.0.3 + semver: ^7.8.1 lint: '@nanoforge-dev/utils-eslint-config': ^1.0.2 '@nanoforge-dev/utils-prettier-config': ^1.0.2 '@trivago/prettier-plugin-sort-imports': ^6.0.2 - eslint: ^10.2.1 + eslint: ^10.4.0 prettier: ^3.8.3 onlyBuiltDependencies: diff --git a/tsconfig.json b/tsconfig.json index 7ceadba..291b7fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -44,8 +44,11 @@ "types": ["bun"], "target": "ESNext", "experimentalDecorators": true, - "useDefineForClassFields": true + "useDefineForClassFields": true, + "paths": { + "lib": ["./lib"] + } }, - "include": ["src/**/*.ts"], + "include": ["src/**/*.ts", "actions/**/*.ts", "lib/**/*.ts"], "exclude": ["node_modules", "dist"] }