diff --git a/.github/workflows/CreateGWRelease.yml b/.github/workflows/CreateGWRelease.yml deleted file mode 100644 index 3bacfb00..00000000 --- a/.github/workflows/CreateGWRelease.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Create GitHub release of GW - -# This workflow for generator-widget: -# 1. Puts current version from package.json as the version for unreleased changes in CHANGELOG.md -# 2. Commits the updates of CHANGELOG.md and pushes the commit to the repo -# 3. Based on the commit it: -# 3.1 Creates a draft GitHub release for GW. -# 3.2 Creates a merge request that targets CHANGELOG.md updates back to master. -# -# NOTE: Publishing to npm doesn't happen in this workflow. PublishNpm.yml is responsible fot npm publishing. -# When the GitHub release is approved, that creates a corresponding git tag to trigger PublishNpm.yml. - -on: workflow_dispatch - -jobs: - release: - name: "Create GitHub release and changelogs MR of GW" - runs-on: ubuntu-latest - - steps: - - name: "Checking-out code" - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # v2 - with: - submodules: false - - - name: Setup pnpm - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0 - - - name: "Defining node version" - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version-file: ".nvmrc" - cache: 'pnpm' - - - name: "Installing dependencies" - run: pnpm install - - - name: "Creating GW release and MR" - run: "pnpm --dir packages/release-tools run release:gw" - env: - GH_USERNAME: ${{ secrets.GH_USERNAME }} - GH_EMAIL: ${{ secrets.GH_EMAIL }} - GH_NAME: ${{ secrets.GH_NAME }} - GH_PAT: ${{ secrets.GH_PAT }} diff --git a/.github/workflows/CreatePWTRelease.yml b/.github/workflows/CreateGithubRelease.yml similarity index 75% rename from .github/workflows/CreatePWTRelease.yml rename to .github/workflows/CreateGithubRelease.yml index aa3d6fef..a1fa95f7 100644 --- a/.github/workflows/CreatePWTRelease.yml +++ b/.github/workflows/CreateGithubRelease.yml @@ -1,4 +1,4 @@ -name: Create GitHub release of PWT +name: Create GitHub release # This workflow for pluggable-widgets-tools: # 1. Puts current version from package.json as the version for unreleased changes in CHANGELOG.md @@ -10,11 +10,20 @@ name: Create GitHub release of PWT # NOTE: Publishing to npm doesn't happen in this workflow. PublishNpm.yml is responsible fot npm publishing. # When the GitHub release is approved, that creates a corresponding git tag to trigger PublishNpm.yml. -on: workflow_dispatch +on: + workflow_dispatch: + inputs: + package_name: + description: Package to create release for + required: true + type: choice + options: + - pluggable-widgets-tools + - generator-widget jobs: release: - name: "Create GitHub release and changelogs MR of PWT" + name: "Create GitHub release and changelogs MR" runs-on: ubuntu-latest steps: @@ -35,8 +44,8 @@ jobs: - name: "Installing dependencies" run: pnpm install - - name: "Creating PWT release and MR" - run: "pnpm --dir packages/release-tools run release:pwt" + - name: "Creating Github release and MR" + run: pnpm exec create-release ${{ inputs.package_name }} $GITHUB_REF_NAME env: GH_USERNAME: ${{ secrets.GH_USERNAME }} GH_EMAIL: ${{ secrets.GH_EMAIL }} diff --git a/.github/workflows/TestPWTCommands.yml b/.github/workflows/TestPWTCommands.yml index 13deb0f1..6090d0c7 100644 --- a/.github/workflows/TestPWTCommands.yml +++ b/.github/workflows/TestPWTCommands.yml @@ -20,11 +20,10 @@ on: jobs: test: - name: "Script tests (Node ${{ matrix.node }}, ${{ matrix.os }})" + name: "Script tests (${{ matrix.os }})" runs-on: ${{ matrix.os }} strategy: matrix: - node: [20] os: [windows-latest, ubuntu-latest] steps: - name: "Checking-out code" diff --git a/.github/workflows/UnitTests.yml b/.github/workflows/UnitTests.yml index 094da009..95c85000 100644 --- a/.github/workflows/UnitTests.yml +++ b/.github/workflows/UnitTests.yml @@ -40,3 +40,18 @@ jobs: - name: "Linting packages" run: pnpm lint + + - name: "Linting changelogs" + run: | + failures=0 + for changelog in $(find . -type f -name CHANGELOG.md -mindepth 3 -maxdepth 3); do + echo "Parsing $changelog" + if pnpm exec changelog-parser parse $changelog; then + : + else + : $((failures++)) + fi + done + if [[ $failures -gt 0 ]]; then + exit 1; + fi diff --git a/.nvmrc b/.nvmrc index ccc4c6c7..c9471194 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.20.2 +22.23.2 diff --git a/eslint.config.js b/eslint.config.js index 279de296..a7c988f8 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -8,7 +8,8 @@ import prettierRecommended from "eslint-plugin-prettier/recommended"; export default defineConfig( globalIgnores([ "packages/generator-widget/generators/app/templates/**", - "packages/pluggable-widgets-tools/dist/**" + "packages/pluggable-widgets-tools/dist/**", + "packages/release-tools/utils/changelog-parser/changelog.*" ]), { files: ["**/*.js", "**/*.mjs"], diff --git a/package.json b/package.json index 31903fd2..5e091b33 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "widgets-tools", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "private": "true", "type": "module", @@ -17,6 +17,7 @@ }, "packageManager": "pnpm@10.33.4+sha512.1c67b3b359b2d408119ba1ed289f34b8fc3c6873412bec6fd264fbdc82489e510fcbecb9ce9d22dae7f3b76269d8441046014bdca53b9979cd7a561ad631b800", "devDependencies": { + "@mendix/release-tools": "workspace:*", "@eslint/js": "^10.0.1", "@prettier/plugin-xml": "^3.4.2", "@typescript-eslint/eslint-plugin": "^8.59.0", diff --git a/packages/command-tests/package.json b/packages/command-tests/package.json index 74edf49c..3dd153bb 100644 --- a/packages/command-tests/package.json +++ b/packages/command-tests/package.json @@ -13,7 +13,7 @@ "@mendix/pluggable-widgets-tools": "workspace:*", "@prettier/plugin-xml": "^2.2.0", "@types/jest-image-snapshot": "^4.3.1", - "@types/node": "^20.14.8", + "@types/node": "^22.18.0", "@types/shelljs": "^0.10.0", "@types/xml2js": "^0.4.5", "async-mutex": "^0.5.0", diff --git a/packages/generator-widget/CHANGELOG.md b/packages/generator-widget/CHANGELOG.md index 2aa2b3cf..0e687165 100644 --- a/packages/generator-widget/CHANGELOG.md +++ b/packages/generator-widget/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - We cleaned up a template with unused imports. +- We increased the minimum node version to 22. ## [11.11.0] - 2026-06-04 diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json index 08cffe5c..6bde4930 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json index 4bd5d7b6..05986161 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json index 3e038020..516219c6 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json index 6155da66..c1ae700c 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json index 0a77cae6..6fb2f2e3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json index 49c37938..ff7973a1 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json index d1d80190..267e1151 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json index 4b2b2132..370c88bd 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json index 761cf8d1..fc05b579 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json index 22a6ff61..0f96ad9d 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json index b1d7c49f..bea8e0e3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json index f81db78d..f1488729 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs index d6e15df1..976a52d8 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs @@ -6,7 +6,7 @@ "copyright": <%- JSON.stringify(copyright) %>, "author": <%- JSON.stringify(author) %>, "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": <%- JSON.stringify(license) %>, "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs index a303a1b3..848b1725 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs @@ -6,7 +6,7 @@ "copyright": <%- JSON.stringify(copyright) %>, "author": <%- JSON.stringify(author) %>, "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": <%- JSON.stringify(license) %>, "config": { diff --git a/packages/generator-widget/package.json b/packages/generator-widget/package.json index 13d09874..6fc7f287 100644 --- a/packages/generator-widget/package.json +++ b/packages/generator-widget/package.json @@ -4,12 +4,13 @@ "description": "Mendix Pluggable Widgets Generator", "type": "module", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "bin": "./bin.js", "main": "generators/app/index.js", "scripts": { - "test": "jest --config ./jest.config.js" + "test": "jest --config ./jest.config.js", + "lint:changelog": "../release-tools/utils/changelog-parser/cli.ts parse ./CHANGELOG.md" }, "files": [ "generators" diff --git a/packages/pluggable-widgets-tools/CHANGELOG.md b/packages/pluggable-widgets-tools/CHANGELOG.md index f26e8e40..9d25aa9b 100644 --- a/packages/pluggable-widgets-tools/CHANGELOG.md +++ b/packages/pluggable-widgets-tools/CHANGELOG.md @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - We fixed an issue with the Jest configuration affecting unit tests for widgets importing enums from the mendix package (e.g. ValueStatus, FormatterType). It would cause tests to fail with the error "This package should not be used in the runtime". +### Changed + +- We increased the minimum node version to 22. + ## [11.12.0] - 2026-06-30 ### Changed diff --git a/packages/pluggable-widgets-tools/package.json b/packages/pluggable-widgets-tools/package.json index 40cd838d..3c3cd923 100644 --- a/packages/pluggable-widgets-tools/package.json +++ b/packages/pluggable-widgets-tools/package.json @@ -3,7 +3,7 @@ "version": "11.12.0", "description": "Mendix Pluggable Widgets Tools", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "main": "dist/index.js", "types": "dist/index.d.ts", @@ -11,6 +11,7 @@ "pluggable-widgets-tools": "bin/mx-scripts.js" }, "scripts": { + "lint:changelog": "../release-tools/utils/changelog-parser/cli.ts parse ./CHANGELOG.md", "prepack": "shx rm -rf dist && tsc", "typecheck:test-config": "tsc -p test-config/tsconfig.json", "test": "pnpm typecheck:test-config && jest" @@ -108,7 +109,7 @@ }, "devDependencies": { "@types/jest": "^30.0.0", - "@types/node": "^16.18.126", + "@types/node": "^22.18.0", "@types/xml2js": "^0.4.5", "react": "^19.2.5", "react-dom": "^19.2.5", diff --git a/packages/pluggable-widgets-tools/tsconfig.json b/packages/pluggable-widgets-tools/tsconfig.json index ebfe4142..393bc4d3 100644 --- a/packages/pluggable-widgets-tools/tsconfig.json +++ b/packages/pluggable-widgets-tools/tsconfig.json @@ -3,8 +3,8 @@ "include": ["./src"], "compilerOptions": { "module": "commonjs", - "lib": ["es2015"], - "target": "es2015", + "lib": ["es2024", "ESNext.Array", "ESNext.Collection", "ESNext.Iterator"], + "target": "es2022", "noImplicitAny": true, "noImplicitReturns": true, "noImplicitThis": true, diff --git a/packages/release-tools/.eslintrc.js b/packages/release-tools/.eslintrc.js deleted file mode 100644 index 0f8ae100..00000000 --- a/packages/release-tools/.eslintrc.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - ignorePatterns: ["utils/changelog-parser/changelog.js"], - rules: { - "@typescript-eslint/ban-ts-ignore": "off", - "no-unused-expressions": "off", - "@typescript-eslint/no-unused-expressions": "error", - "no-undef": "off" - }, - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:prettier/recommended"], - parser: "@typescript-eslint/parser", - parserOptions: { - project: "./tsconfig.json", - ecmaVersion: 2018, - sourceType: "module" - }, - plugins: ["@typescript-eslint"] -}; diff --git a/packages/release-tools/createRelease.ts b/packages/release-tools/createRelease.ts old mode 100644 new mode 100755 index 7eeb93c1..15307dfd --- a/packages/release-tools/createRelease.ts +++ b/packages/release-tools/createRelease.ts @@ -1,51 +1,70 @@ -import { join } from "path"; +#! /usr/bin/env -S node --experimental-strip-types +import { join } from "node:path"; import { addRemoteWithAuthentication, execShellCommand, getPackageInfo, gh, - PackageInfo, + type PackageInfo, ChangelogFileWrapper -} from "./utils"; +} from "./utils/index.ts"; +import { ArgumentError, handleError } from "./utils/errors.ts"; +import { format } from "node:util"; + +const packages = new Map([ + [ + "pluggable-widgets-tools", + { + name: "pluggable-widgets-tools", + fullName: "Pluggable Widgets Tools" + } + ], + [ + "generator-widget", + { + name: "generator-widget", + fullName: "Pluggable Widgets Generator" + } + ] +]); main().catch(e => { - console.error(e); - process.exit(-1); + handleError( + e, + format( + "\nUsage: %s \nRequired environment variables: GH_NAME, GH_EMAIL, GH_USERNAME, GH_PAT", + process.argv[1] + ) + ); + process.exit(1); }); async function main(): Promise { - const packages = new Map([ - [ - "pwt", - { - name: "pluggable-widgets-tools", - fullName: "Pluggable Widgets Tools" - } - ], - [ - "gw", - { - name: "generator-widget", - fullName: "Pluggable Widgets Generator" - } - ] - ]); const arg = process.argv[2]; const mendixPackage = packages.get(arg); - if (!mendixPackage) throw new Error(`Argument "${arg}" is not a valid package name`); + if (!mendixPackage) + throw new ArgumentError(format("package name of (%s)", packages.keys().toArray().join(", ")), arg); + const branch = process.argv[3]; + if (!branch || !/^(master|version\/.*)$/.test(branch)) + throw new ArgumentError("branch name of (master, version/*)", branch); - const pwtPath = join(__dirname, "../", mendixPackage.name); + const dirname = new URL("./", import.meta.url).pathname; + const pwtPath = join(dirname, "../", mendixPackage.name); // 1. Get release info - console.log(`Getting the release information for ${mendixPackage.name}...`); - console.log(`directory:`, pwtPath); + console.log("Gathering release information"); + console.log(" Package: %s", mendixPackage.name); + console.log(" Directory: %s", pwtPath); + console.log(" Branch: %s", branch); const packageInfo = await getPackageInfo(pwtPath); packageInfo.packageName = mendixPackage.name; packageInfo.packageFullName = mendixPackage.fullName; const releaseTag = `${packageInfo.packageName}-v${packageInfo.version.format()}`; - const changelog = ChangelogFileWrapper.fromFile(`${pwtPath}/CHANGELOG.md`); + console.log(" Version: %s", packageInfo.version.format()); + + const changelog = ChangelogFileWrapper.fromFile(`${pwtPath}/CHANGELOG.md`); // 2. Check prerequisites // 2.1. Check if current version is already in CHANGELOG if (changelog.hasVersion(packageInfo.version)) { @@ -77,7 +96,7 @@ async function main(): Promise { // 4.2 Update CHANGELOG.md and create PR console.log("Creating PR with updated CHANGELOG.md file..."); - await updateChangelogsAndCreatePR(packageInfo, changelog, releaseTag, remoteName); + await updateChangelogsAndCreatePR(packageInfo, changelog, releaseTag, remoteName, branch); // 4.3 Create release console.log("Creating Github release..."); @@ -99,7 +118,8 @@ async function updateChangelogsAndCreatePR( packageInfo: PackageInfo, changelog: ChangelogFileWrapper, releaseTag: string, - remoteName: string + remoteName: string, + branch: string ): Promise { const releaseBranchName = `${releaseTag}-update-changelog`; @@ -121,7 +141,7 @@ async function updateChangelogsAndCreatePR( await gh.createGithubPRFrom({ title: `${packageInfo.packageFullName} v${packageInfo.version.format()}: Update changelog`, body: "This is an automated PR that merges changelog update to master.", - base: "master", + base: branch, head: releaseBranchName, repo: packageInfo.repositoryUrl }); diff --git a/packages/release-tools/package.json b/packages/release-tools/package.json index b29ef045..19ecb461 100644 --- a/packages/release-tools/package.json +++ b/packages/release-tools/package.json @@ -1,23 +1,33 @@ { - "name": "release-tools", + "name": "@mendix/release-tools", "version": "1.0.0", "description": "Scripts used for release management of the widgets tools packages.", "private": true, "main": "./createRelease.ts", + "type": "module", + "bin": { + "create-release": "./createRelease.ts", + "changelog-parser": "./utils/changelog-parser/cli.ts" + }, "scripts": { - "release:pwt": "ts-node --project ./tsconfig.json ./createRelease.ts pwt", - "release:gw": "ts-node --project ./tsconfig.json ./createRelease.ts gw", - "build:release:parser": "peggy -o ./utils/changelog-parser/changelog.js ./utils/changelog-parser/changelog.pegjs" + "release:pwt": "./createRelease.ts pluggable-widgets-tools", + "release:gw": "./createRelease.ts generator-widget", + "build:release:parser": "peggy -o ./utils/changelog-parser/changelog.js --dts --format es ./utils/changelog-parser/changelog.pegjs", + "test": "tsc --noEmit" + }, + "engines": { + "node": "^22.18.0" }, "devDependencies": { - "@types/node": "^16.11.19", + "@tsconfig/node-ts": "^23.6.4", + "@tsconfig/node22": "^22.0.5", + "@types/node": "^22.18.0", "@types/node-fetch": "2.6.13", - "peggy": "^1.2.0", - "typescript": "^4.8.4" + "peggy": "^5.1.0", + "typescript": "^5.9.3" }, "dependencies": { - "node-fetch": "^2.7.0", - "ts-node": "^10.9.1" + "node-fetch": "^2.7.0" }, "keywords": [], "author": "", diff --git a/packages/release-tools/tsconfig.json b/packages/release-tools/tsconfig.json index 688db97c..fbad9609 100644 --- a/packages/release-tools/tsconfig.json +++ b/packages/release-tools/tsconfig.json @@ -1,16 +1,9 @@ { - "include": ["./"], - "compilerOptions": { - "strict": true, - "noEmitOnError": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": false, - "noImplicitReturns": true, - "noImplicitThis": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "forceConsistentCasingInFileNames": true, - "types": ["node"], - "esModuleInterop": true - } + "extends": [ + "@tsconfig/node22/tsconfig.json", + "@tsconfig/node-ts/tsconfig.json" + ], + "compilerOptions": { + "allowImportingTsExtensions": true + } } diff --git a/packages/release-tools/utils/changelog-parser/changelog.d.ts b/packages/release-tools/utils/changelog-parser/changelog.d.ts new file mode 100644 index 00000000..40e04320 --- /dev/null +++ b/packages/release-tools/utils/changelog-parser/changelog.d.ts @@ -0,0 +1,208 @@ +/** Provides information pointing to a location within a source. */ +export interface Location { + /** Line in the parsed source (1-based). */ + readonly line: number; + /** Column in the parsed source (1-based). */ + readonly column: number; + /** Offset in the parsed source (0-based). */ + readonly offset: number; +} + +/** + * Anything that can successfully be converted to a string with `String()` + * so that it can be used in error messages. + * + * The GrammarLocation class in Peggy is a good example. + */ +export interface GrammarSourceObject { + readonly toString: () => string; + + /** + * If specified, allows the grammar source to be embedded in a larger file + * at some offset. + */ + readonly offset?: undefined | ((loc: Location) => Location); +} + +/** + * Most often, you just use a string with the file name. + */ +export type GrammarSource = string | GrammarSourceObject; + +/** The `start` and `end` position's of an object within the source. */ +export interface LocationRange { + /** + * A string or object that was supplied to the `parse()` call as the + * `grammarSource` option. + */ + readonly source: GrammarSource; + /** Position at the beginning of the expression. */ + readonly start: Location; + /** Position after the end of the expression. */ + readonly end: Location; +} + +/** + * Expected a literal string, like `"foo"i`. + */ +export interface LiteralExpectation { + readonly type: "literal"; + readonly text: string; + readonly ignoreCase: boolean; +} + +/** + * Range of characters, like `a-z` + */ +export type ClassRange = [ + start: string, + end: string, +] + +export interface ClassParts extends Array { +} + +/** + * Expected a class, such as `[^acd-gz]i` + */ +export interface ClassExpectation { + readonly type: "class"; + readonly parts: ClassParts; + readonly inverted: boolean; + readonly ignoreCase: boolean; +} + +/** + * Expected any character, with `.` + */ +export interface AnyExpectation { + readonly type: "any"; +} + +/** + * Expected the end of input. + */ +export interface EndExpectation { + readonly type: "end"; +} + +/** + * Expected some other input. These are specified with a rule's + * "human-readable name", or with the `expected(message, location)` + * function. + */ +export interface OtherExpectation { + readonly type: "other"; + readonly description: string; +} + +export type Expectation = + | AnyExpectation + | ClassExpectation + | EndExpectation + | LiteralExpectation + | OtherExpectation; + +/** + * Pass an array of these into `SyntaxError.prototype.format()` + */ +export interface SourceText { + /** + * Identifier of an input that was used as a grammarSource in parse(). + */ + readonly source: GrammarSource; + /** Source text of the input. */ + readonly text: string; +} + +export declare class SyntaxError extends globalThis.SyntaxError { + /** + * Constructs the human-readable message from the machine representation. + * + * @param expected Array of expected items, generated by the parser + * @param found Any text that will appear as found in the input instead of + * expected + */ + static buildMessage(expected: Expectation[], found?: string | null | undefined): string; + readonly expected: Expectation[]; + readonly found: string | null | undefined; + readonly location: LocationRange; + readonly name: string; + constructor( + message: string, + expected: Expectation[], + found: string | null, + location: LocationRange, + ); + + /** + * With good sources, generates a feature-rich error message pointing to the + * error in the input. + * @param sources List of {source, text} objects that map to the input. + */ + format(sources: SourceText[]): string; +} + +/** + * Trace execution of the parser. + */ +export interface ParserTracer { + trace: (event: ParserTracerEvent) => void; +} + +export type ParserTracerEvent + = { + readonly type: "rule.enter"; + readonly rule: string; + readonly location: LocationRange + } + | { + readonly type: "rule.fail"; + readonly rule: string; + readonly location: LocationRange + } + | { + readonly type: "rule.match"; + readonly rule: string; + readonly location: LocationRange + /** Return value from the rule. */ + readonly result: unknown; + }; + +export type StartRuleNames = "ChangelogFile"; +export interface ParseOptions { + /** + * String or object that will be attached to the each `LocationRange` object + * created by the parser. For example, this can be path to the parsed file + * or even the File object. + */ + readonly grammarSource?: GrammarSource; + readonly startRule?: T; + readonly tracer?: ParserTracer; + + // Internal use only: + readonly peg$library?: boolean; + // Internal use only: + peg$currPos?: number; + // Internal use only: + peg$silentFails?: number; + // Internal use only: + peg$maxFailExpected?: Expectation[]; + // Extra application-specific properties + [key: string]: unknown; +} + +export declare const StartRules: StartRuleNames[]; +export declare const parse: typeof ParseFunction; + +// Overload of ParseFunction for each allowedStartRule + +declare function ParseFunction>( + input: string, + options?: Options, +): any; + +declare function ParseFunction>( + input: string, + options?: Options, +): any; diff --git a/packages/release-tools/utils/changelog-parser/changelog.js b/packages/release-tools/utils/changelog-parser/changelog.js index 5e8b1547..12327ca2 100644 --- a/packages/release-tools/utils/changelog-parser/changelog.js +++ b/packages/release-tools/utils/changelog-parser/changelog.js @@ -1,1173 +1,1095 @@ -// Generated by Peggy 1.2.0. +// @generated by Peggy 5.1.0. // // https://peggyjs.org/ -"use strict"; -function peg$subclass(child, parent) { - function C() { - this.constructor = child; +class peg$SyntaxError extends SyntaxError { + constructor(message, expected, found, location) { + super(message); + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + } + + format(sources) { + let str = "Error: " + this.message; + if (this.location) { + let src = null; + const st = sources.find(s => s.source === this.location.source); + if (st) { + src = st.text.split(/\r\n|\n|\r/g); + } + const s = this.location.start; + const offset_s = (this.location.source && (typeof this.location.source.offset === "function")) + ? this.location.source.offset(s) + : s; + const loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + const e = this.location.end; + const filler = "".padEnd(offset_s.line.toString().length, " "); + const line = src[s.line - 1]; + const last = s.line === e.line ? e.column : line.length + 1; + const hatLen = (last - s.column) || 1; + str += "\n --> " + loc + "\n" + + filler + " |\n" + + offset_s.line + " | " + line + "\n" + + filler + " | " + "".padEnd(s.column - 1, " ") + + "".padEnd(hatLen, "^"); + } else { + str += "\n at " + loc; + } } - C.prototype = parent.prototype; - child.prototype = new C(); -} + return str; + } -function peg$SyntaxError(message, expected, found, location) { - var self = Error.call(this, message); - if (Object.setPrototypeOf) { - Object.setPrototypeOf(self, peg$SyntaxError.prototype); + static buildMessage(expected, found) { + function hex(ch) { + return ch.codePointAt(0).toString(16).toUpperCase(); } - self.expected = expected; - self.found = found; - self.location = location; - self.name = "SyntaxError"; - return self; -} -peg$subclass(peg$SyntaxError, Error); + const nonPrintable = Object.prototype.hasOwnProperty.call(RegExp.prototype, "unicode") + ? new RegExp("[\\p{C}\\p{Mn}\\p{Mc}]", "gu") + : null; + function unicodeEscape(s) { + if (nonPrintable) { + return s.replace(nonPrintable, ch => "\\u{" + hex(ch) + "}"); + } + return s; + } -function peg$padEnd(str, targetLength, padString) { - padString = padString || " "; - if (str.length > targetLength) { - return str; + function literalEscape(s) { + return unicodeEscape(s + .replace(/\\/g, "\\\\") + .replace(/"/g, "\\\"") + .replace(/\0/g, "\\0") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x0F]/g, ch => "\\x0" + hex(ch)) + .replace(/[\x10-\x1F\x7F-\x9F]/g, ch => "\\x" + hex(ch))); } - targetLength -= str.length; - padString += padString.repeat(targetLength); - return str + padString.slice(0, targetLength); -} -peg$SyntaxError.prototype.format = function (sources) { - var str = "Error: " + this.message; - if (this.location) { - var src = null; - var k; - for (k = 0; k < sources.length; k++) { - if (sources[k].source === this.location.source) { - src = sources[k].text.split(/\r\n|\n|\r/g); - break; - } - } - var s = this.location.start; - var loc = this.location.source + ":" + s.line + ":" + s.column; - if (src) { - var e = this.location.end; - var filler = peg$padEnd("", s.line.toString().length); - var line = src[s.line - 1]; - var last = s.line === e.line ? e.column : line.length + 1; - str += - "\n --> " + - loc + - "\n" + - filler + - " |\n" + - s.line + - " | " + - line + - "\n" + - filler + - " | " + - peg$padEnd("", s.column - 1) + - peg$padEnd("", last - s.column, "^"); - } else { - str += "\n at " + loc; - } + function classEscape(s) { + return unicodeEscape(s + .replace(/\\/g, "\\\\") + .replace(/\]/g, "\\]") + .replace(/\^/g, "\\^") + .replace(/-/g, "\\-") + .replace(/\0/g, "\\0") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x0F]/g, ch => "\\x0" + hex(ch)) + .replace(/[\x10-\x1F\x7F-\x9F]/g, ch => "\\x" + hex(ch))); } - return str; -}; -peg$SyntaxError.buildMessage = function (expected, found) { - var DESCRIBE_EXPECTATION_FNS = { - literal: function (expectation) { - return '"' + literalEscape(expectation.text) + '"'; - }, + const DESCRIBE_EXPECTATION_FNS = { + literal(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, - class: function (expectation) { - var escapedParts = expectation.parts.map(function (part) { - return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); - }); + class(expectation) { + const escapedParts = expectation.parts.map( + part => (Array.isArray(part) + ? classEscape(part[0]) + "-" + classEscape(part[1]) + : classEscape(part)) + ); - return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; - }, + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]" + (expectation.unicode ? "u" : ""); + }, - any: function () { - return "any character"; - }, + any() { + return "any character"; + }, - end: function () { - return "end of input"; - }, + end() { + return "end of input"; + }, - other: function (expectation) { - return expectation.description; - } + other(expectation) { + return expectation.description; + }, }; - function hex(ch) { - return ch.charCodeAt(0).toString(16).toUpperCase(); - } - - function literalEscape(s) { - return s - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\0/g, "\\0") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x0F]/g, function (ch) { - return "\\x0" + hex(ch); - }) - .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { - return "\\x" + hex(ch); - }); - } - - function classEscape(s) { - return s - .replace(/\\/g, "\\\\") - .replace(/\]/g, "\\]") - .replace(/\^/g, "\\^") - .replace(/-/g, "\\-") - .replace(/\0/g, "\\0") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x0F]/g, function (ch) { - return "\\x0" + hex(ch); - }) - .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { - return "\\x" + hex(ch); - }); - } - function describeExpectation(expectation) { - return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); } function describeExpected(expected) { - var descriptions = expected.map(describeExpectation); - var i, j; - - descriptions.sort(); - - if (descriptions.length > 0) { - for (i = 1, j = 1; i < descriptions.length; i++) { - if (descriptions[i - 1] !== descriptions[i]) { - descriptions[j] = descriptions[i]; - j++; - } - } - descriptions.length = j; + const descriptions = expected.map(describeExpectation); + descriptions.sort(); + + if (descriptions.length > 0) { + let j = 1; + for (let i = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } } + descriptions.length = j; + } - switch (descriptions.length) { - case 1: - return descriptions[0]; + switch (descriptions.length) { + case 1: + return descriptions[0]; - case 2: - return descriptions[0] + " or " + descriptions[1]; + case 2: + return descriptions[0] + " or " + descriptions[1]; - default: - return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; - } + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } } function describeFound(found) { - return found ? '"' + literalEscape(found) + '"' : "end of input"; + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; } return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; -}; + } +} function peg$parse(input, options) { - options = options !== undefined ? options : {}; - - var peg$FAILED = {}; - var peg$source = options.grammarSource; - - var peg$startRuleFunctions = { ChangelogFile: peg$parseChangelogFile }; - var peg$startRuleFunction = peg$parseChangelogFile; - - var peg$c0 = "##"; - var peg$c1 = "["; - var peg$c2 = "]"; - var peg$c3 = "-"; - var peg$c4 = "[Unreleased]"; - var peg$c5 = "###"; - var peg$c6 = "# Changelog"; - var peg$c7 = - "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)."; - var peg$c8 = "Added"; - var peg$c9 = "Changed"; - var peg$c10 = "Deprecated"; - var peg$c11 = "Removed"; - var peg$c12 = "Fixed"; - var peg$c13 = "Security"; - var peg$c14 = "Breaking changes"; - var peg$c15 = "Documentation"; - var peg$c16 = "."; - - var peg$r0 = /^[^\r\n]/; - var peg$r1 = /^[0-9]/; - var peg$r2 = /^[ \t\n\r]/; - - var peg$e0 = peg$literalExpectation("##", false); - var peg$e1 = peg$literalExpectation("[", false); - var peg$e2 = peg$literalExpectation("]", false); - var peg$e3 = peg$literalExpectation("-", false); - var peg$e4 = peg$literalExpectation("[Unreleased]", false); - var peg$e5 = peg$literalExpectation("###", false); - var peg$e6 = peg$literalExpectation("# Changelog", false); - var peg$e7 = peg$literalExpectation( - "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", - false - ); - var peg$e8 = peg$literalExpectation("Added", false); - var peg$e9 = peg$literalExpectation("Changed", false); - var peg$e10 = peg$literalExpectation("Deprecated", false); - var peg$e11 = peg$literalExpectation("Removed", false); - var peg$e12 = peg$literalExpectation("Fixed", false); - var peg$e13 = peg$literalExpectation("Security", false); - var peg$e14 = peg$literalExpectation("Breaking changes", false); - var peg$e15 = peg$literalExpectation("Documentation", false); - var peg$e16 = peg$literalExpectation(".", false); - var peg$e17 = peg$classExpectation(["\r", "\n"], true, false); - var peg$e18 = peg$classExpectation([["0", "9"]], false, false); - var peg$e19 = peg$otherExpectation("whitespace"); - var peg$e20 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false); - - var peg$f0 = function (header, content) { - return { header, content }; - }; - var peg$f1 = function (header, sections) { - return { ...header, sections }; - }; - var peg$f2 = function (version, date) { - return { type: "normal", version, date }; - }; - var peg$f3 = function () { - return { type: "unreleased" }; - }; - var peg$f4 = function (title, txt) { - return { type: "note", title, text: txt }; - }; - var peg$f5 = function (type, logs) { - return { type, logs }; - }; - var peg$f6 = function (log) { - return log; - }; - var peg$f7 = function (txt) { - return txt; - }; - var peg$f8 = function () { - return text().trim(); - }; - var peg$f9 = function () { - return text(); - }; - var peg$f10 = function (major, minor, patch) { - return options.Version.fromParts(major, minor, patch); - }; - var peg$f11 = function (year, month, day) { - return new Date(year, month - 1, day); - }; - var peg$f12 = function (txt) { - return txt.join("").trim(); - }; - var peg$f13 = function () { - return parseInt(text(), 10); - }; - - var peg$currPos = 0; - var peg$savedPos = 0; - var peg$posDetailsCache = [{ line: 1, column: 1 }]; - var peg$maxFailPos = 0; - var peg$maxFailExpected = []; - var peg$silentFails = 0; + options = options !== undefined ? options : {}; + + const peg$FAILED = {}; + const peg$source = options.grammarSource; + + const peg$startRuleFunctions = { + ChangelogFile: peg$parseChangelogFile, + }; + let peg$startRuleFunction = peg$parseChangelogFile; + + const peg$c0 = "##"; + const peg$c1 = "["; + const peg$c2 = "]"; + const peg$c3 = "-"; + const peg$c4 = "[Unreleased]"; + const peg$c5 = "###"; + const peg$c6 = "# Changelog"; + const peg$c7 = "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)."; + const peg$c8 = "Added"; + const peg$c9 = "Changed"; + const peg$c10 = "Deprecated"; + const peg$c11 = "Removed"; + const peg$c12 = "Fixed"; + const peg$c13 = "Security"; + const peg$c14 = "Breaking changes"; + const peg$c15 = "Documentation"; + const peg$c16 = "."; + + const peg$r0 = /^[^\r\n]/; + const peg$r1 = /^[0-9]/; + const peg$r2 = /^[ \t\n\r]/; + + const peg$e0 = peg$literalExpectation("##", false); + const peg$e1 = peg$literalExpectation("[", false); + const peg$e2 = peg$literalExpectation("]", false); + const peg$e3 = peg$literalExpectation("-", false); + const peg$e4 = peg$literalExpectation("[Unreleased]", false); + const peg$e5 = peg$literalExpectation("###", false); + const peg$e6 = peg$literalExpectation("# Changelog", false); + const peg$e7 = peg$literalExpectation("The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", false); + const peg$e8 = peg$literalExpectation("Added", false); + const peg$e9 = peg$literalExpectation("Changed", false); + const peg$e10 = peg$literalExpectation("Deprecated", false); + const peg$e11 = peg$literalExpectation("Removed", false); + const peg$e12 = peg$literalExpectation("Fixed", false); + const peg$e13 = peg$literalExpectation("Security", false); + const peg$e14 = peg$literalExpectation("Breaking changes", false); + const peg$e15 = peg$literalExpectation("Documentation", false); + const peg$e16 = peg$literalExpectation(".", false); + const peg$e17 = peg$classExpectation(["\r", "\n"], true, false, false); + const peg$e18 = peg$classExpectation([["0", "9"]], false, false, false); + const peg$e19 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false, false); + + function peg$f0(header, content) { return { header, content } } + function peg$f1(header, sections) { return { ...header, sections } } + function peg$f2(version, date) { return { type: "normal", version, date } } + function peg$f3() { return { type: "unreleased" } } + function peg$f4(title, txt) { return { type: "note", title, text: txt } } + function peg$f5(type, logs) { return { type, logs } } + function peg$f6(log) { return log } + function peg$f7(txt) { return txt; } + function peg$f8() { return text().trim() } + function peg$f9() { return text() } + function peg$f10(major, minor, patch) { return options.Version.fromParts(major, minor, patch) } + function peg$f11(year, month, day) { return new Date(year, month - 1, day) } + function peg$f12(txt) { return txt.join("").trim() } + function peg$f13() { return parseInt(text(), 10) } + let peg$currPos = options.peg$currPos | 0; + let peg$savedPos = peg$currPos; + const peg$posDetailsCache = [{ line: 1, column: 1 }]; + let peg$maxFailPos = peg$currPos; + let peg$maxFailExpected = options.peg$maxFailExpected || []; + let peg$silentFails = options.peg$silentFails | 0; + + let peg$result; + + if (options.startRule) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } - var peg$result; + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } - if ("startRule" in options) { - if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error("Can't start parsing from rule \"" + options.startRule + '".'); - } - - peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; - } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } - function text() { - return input.substring(peg$savedPos, peg$currPos); - } + function offset() { + return peg$savedPos; + } - function offset() { - return peg$savedPos; - } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos, + }; + } - function range() { - return { - source: peg$source, - start: peg$savedPos, - end: peg$currPos - }; - } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } - function location() { - return peg$computeLocation(peg$savedPos, peg$currPos); - } + function expected(description, location) { + location = location !== undefined + ? location + : peg$computeLocation(peg$savedPos, peg$currPos); - function expected(description, location) { - location = location !== undefined ? location : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } - throw peg$buildStructuredError( - [peg$otherExpectation(description)], - input.substring(peg$savedPos, peg$currPos), - location - ); - } + function error(message, location) { + location = location !== undefined + ? location + : peg$computeLocation(peg$savedPos, peg$currPos); - function error(message, location) { - location = location !== undefined ? location : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location); + } - throw peg$buildSimpleError(message, location); + function peg$getUnicode(pos = peg$currPos) { + const cp = input.codePointAt(pos); + if (cp === undefined) { + return ""; } + return String.fromCodePoint(cp); + } - function peg$literalExpectation(text, ignoreCase) { - return { type: "literal", text: text, ignoreCase: ignoreCase }; - } + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text, ignoreCase }; + } - function peg$classExpectation(parts, inverted, ignoreCase) { - return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; - } + function peg$classExpectation(parts, inverted, ignoreCase, unicode) { + return { type: "class", parts, inverted, ignoreCase, unicode }; + } - function peg$anyExpectation() { - return { type: "any" }; - } + function peg$anyExpectation() { + return { type: "any" }; + } - function peg$endExpectation() { - return { type: "end" }; - } + function peg$endExpectation() { + return { type: "end" }; + } - function peg$otherExpectation(description) { - return { type: "other", description: description }; - } + function peg$otherExpectation(description) { + return { type: "other", description }; + } - function peg$computePosDetails(pos) { - var details = peg$posDetailsCache[pos]; - var p; + function peg$computePosDetails(pos) { + let details = peg$posDetailsCache[pos]; + let p; - if (details) { - return details; + if (details) { + return details; + } else { + if (pos >= peg$posDetailsCache.length) { + p = peg$posDetailsCache.length - 1; + } else { + p = pos; + while (!peg$posDetailsCache[--p]) {} + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column, + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; } else { - p = pos - 1; - while (!peg$posDetailsCache[p]) { - p--; - } + details.column++; + } - details = peg$posDetailsCache[p]; - details = { - line: details.line, - column: details.column - }; + p++; + } - while (p < pos) { - if (input.charCodeAt(p) === 10) { - details.line++; - details.column = 1; - } else { - details.column++; - } + peg$posDetailsCache[pos] = details; - p++; - } + return details; + } + } + + function peg$computeLocation(startPos, endPos, offset) { + const startPosDetails = peg$computePosDetails(startPos); + const endPosDetails = peg$computePosDetails(endPos); + + const res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column, + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column, + }, + }; + if (offset && peg$source && (typeof peg$source.offset === "function")) { + res.start = peg$source.offset(res.start); + res.end = peg$source.offset(res.end); + } + return res; + } - peg$posDetailsCache[pos] = details; + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } - return details; - } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; } - function peg$computeLocation(startPos, endPos) { - var startPosDetails = peg$computePosDetails(startPos); - var endPosDetails = peg$computePosDetails(endPos); - - return { - source: peg$source, - start: { - offset: startPos, - line: startPosDetails.line, - column: startPosDetails.column - }, - end: { - offset: endPos, - line: endPosDetails.line, - column: endPosDetails.column - } - }; - } + peg$maxFailExpected.push(expected); + } - function peg$fail(expected) { - if (peg$currPos < peg$maxFailPos) { - return; - } + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } - if (peg$currPos > peg$maxFailPos) { - peg$maxFailPos = peg$currPos; - peg$maxFailExpected = []; + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseChangelogFile() { + let s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseChangelogHead(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + s3 = []; + s4 = peg$parseVersionEntry(); + if (s4 === peg$FAILED) { + s4 = peg$parseOtherNotes(); + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVersionEntry(); + if (s4 === peg$FAILED) { + s4 = peg$parseOtherNotes(); + } } - - peg$maxFailExpected.push(expected); + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f0(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$buildSimpleError(message, location) { - return new peg$SyntaxError(message, null, null, location); - } + return s0; + } + + function peg$parseVersionEntry() { + let s0, s1, s2, s3, s4; - function peg$buildStructuredError(expected, found, location) { - return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location); + s0 = peg$currPos; + s1 = peg$parseVersionHeader(); + if (s1 === peg$FAILED) { + s1 = peg$parseUnreleasedVersionHeader(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + s3 = []; + s4 = peg$parseSection(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseSection(); + } + s4 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f1(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseChangelogFile() { - var s0, s1, s2, s3, s4; - - s0 = peg$currPos; - s1 = peg$parseChangelogHead(); - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - s3 = []; - s4 = peg$parseVersionEntry(); - if (s4 === peg$FAILED) { - s4 = peg$parseOtherNotes(); - } - if (s4 !== peg$FAILED) { - while (s4 !== peg$FAILED) { - s3.push(s4); - s4 = peg$parseVersionEntry(); - if (s4 === peg$FAILED) { - s4 = peg$parseOtherNotes(); - } - } + return s0; + } + + function peg$parseVersionHeader() { + let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c0) { + s1 = peg$c0; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e0); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (input.charCodeAt(peg$currPos) === 91) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e1); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseSemVer(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c2; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e2); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (input.charCodeAt(peg$currPos) === 45) { + s7 = peg$c3; + peg$currPos++; } else { - s3 = peg$FAILED; + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e3); } } - if (s3 !== peg$FAILED) { - s4 = peg$parse_(); + if (s7 !== peg$FAILED) { + s8 = peg$parse_(); + s9 = peg$parseDate(); + if (s9 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f0(s1, s3); - } else { + s0 = peg$f2(s4, s9); + } else { peg$currPos = s0; s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - } else { + } else { peg$currPos = s0; s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - - return s0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseVersionEntry() { - var s0, s1, s2, s3, s4; + return s0; + } - s0 = peg$currPos; - s1 = peg$parseVersionHeader(); - if (s1 === peg$FAILED) { - s1 = peg$parseUnreleasedVersionHeader(); - } - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - s3 = []; - s4 = peg$parseSection(); - while (s4 !== peg$FAILED) { - s3.push(s4); - s4 = peg$parseSection(); - } - s4 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f1(s1, s3); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseUnreleasedVersionHeader() { + let s0, s1, s2, s3, s4; - return s0; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c0) { + s1 = peg$c0; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e0); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (input.substr(peg$currPos, 12) === peg$c4) { + s3 = peg$c4; + peg$currPos += 12; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f3(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseVersionHeader() { - var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + return s0; + } - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c0) { - s1 = peg$c0; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e0); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - if (input.charCodeAt(peg$currPos) === 91) { - s3 = peg$c1; - peg$currPos++; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e1); - } - } - if (s3 !== peg$FAILED) { - s4 = peg$parseSemVer(); - if (s4 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 93) { - s5 = peg$c2; - peg$currPos++; - } else { - s5 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e2); - } - } - if (s5 !== peg$FAILED) { - s6 = peg$parse_(); - if (input.charCodeAt(peg$currPos) === 45) { - s7 = peg$c3; - peg$currPos++; - } else { - s7 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e3); - } - } - if (s7 !== peg$FAILED) { - s8 = peg$parse_(); - s9 = peg$parseDate(); - if (s9 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f2(s4, s9); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseOtherNotes() { + let s0, s1, s2, s3, s4, s5, s6; - return s0; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c0) { + s1 = peg$c0; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e0); } } - - function peg$parseUnreleasedVersionHeader() { - var s0, s1, s2, s3, s4; - - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c0) { - s1 = peg$c0; - peg$currPos += 2; + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + s3 = peg$parseOneLineSentence(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + s5 = peg$parseOneLineSentence(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f4(s3, s5); } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e0); - } + peg$currPos = s0; + s0 = peg$FAILED; } - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - if (input.substr(peg$currPos, 12) === peg$c4) { - s3 = peg$c4; - peg$currPos += 12; - } else { - s3 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e4); - } - } - if (s3 !== peg$FAILED) { - s4 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f3(); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseOtherNotes() { - var s0, s1, s2, s3, s4, s5, s6; + return s0; + } - s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c0) { - s1 = peg$c0; - peg$currPos += 2; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e0); - } - } - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - s3 = peg$parseOneLineSentence(); - if (s3 !== peg$FAILED) { - s4 = peg$parse_(); - s5 = peg$parseOneLineSentence(); - if (s5 !== peg$FAILED) { - s6 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f4(s3, s5); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseSection() { + let s0, s1, s2, s3, s4, s5, s6, s7; - return s0; + s0 = peg$currPos; + s1 = peg$parse_(); + if (input.substr(peg$currPos, 3) === peg$c5) { + s2 = peg$c5; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e5); } } - - function peg$parseSection() { - var s0, s1, s2, s3, s4, s5, s6, s7; - - s0 = peg$currPos; - s1 = peg$parse_(); - if (input.substr(peg$currPos, 3) === peg$c5) { - s2 = peg$c5; - peg$currPos += 3; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e5); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parse_(); - s4 = peg$parseSectionType(); - if (s4 !== peg$FAILED) { - s5 = peg$parse_(); - s6 = []; - s7 = peg$parseLogLine(); - while (s7 !== peg$FAILED) { - s6.push(s7); - s7 = peg$parseLogLine(); - } - peg$savedPos = s0; - s0 = peg$f5(s4, s6); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + s4 = peg$parseSectionType(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + s6 = []; + s7 = peg$parseLogLine(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseLogLine(); } - - return s0; + peg$savedPos = s0; + s0 = peg$f5(s4, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseLogLine() { - var s0, s1, s2, s3, s4, s5; + return s0; + } - s0 = peg$currPos; - s1 = peg$parse_(); - if (input.charCodeAt(peg$currPos) === 45) { - s2 = peg$c3; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e3); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parse_(); - s4 = peg$parseOneLineSentence(); - if (s4 !== peg$FAILED) { - s5 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f6(s4); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseLogLine() { + let s0, s1, s2, s3, s4, s5; - return s0; + s0 = peg$currPos; + s1 = peg$parse_(); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c3; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e3); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + s4 = peg$parseOneLineSentence(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f6(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseChangelogHead() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - s1 = peg$parseChangelogHeadLine1(); - if (s1 !== peg$FAILED) { - s2 = peg$parseChangelogHeadLine2(); - if (s2 !== peg$FAILED) { - s3 = peg$parseChangelogHeadLine3(); - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f7(s2); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + return s0; + } + + function peg$parseChangelogHead() { + let s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseChangelogHeadLine1(); + if (s1 !== peg$FAILED) { + s2 = peg$parseChangelogHeadLine2(); + if (s2 !== peg$FAILED) { + s3 = peg$parseChangelogHeadLine3(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f7(s2); } else { - peg$currPos = s0; - s0 = peg$FAILED; + peg$currPos = s0; + s0 = peg$FAILED; } - - return s0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseChangelogHeadLine1() { - var s0, s1, s2, s3; + return s0; + } - s0 = peg$currPos; - s1 = peg$parse_(); - if (input.substr(peg$currPos, 11) === peg$c6) { - s2 = peg$c6; - peg$currPos += 11; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e6); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parse_(); - s1 = [s1, s2, s3]; - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseChangelogHeadLine1() { + let s0, s1, s2, s3; - return s0; + s0 = peg$currPos; + s1 = peg$parse_(); + if (input.substr(peg$currPos, 11) === peg$c6) { + s2 = peg$c6; + peg$currPos += 11; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e6); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseChangelogHeadLine2() { - var s0, s1, s2, s3; + return s0; + } - s0 = peg$currPos; - s1 = peg$parse_(); - s2 = peg$parseOneLineSentence(); - if (s2 !== peg$FAILED) { - s3 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f8(); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseChangelogHeadLine2() { + let s0, s1, s2, s3; - return s0; + s0 = peg$currPos; + s1 = peg$parse_(); + s2 = peg$parseOneLineSentence(); + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseChangelogHeadLine3() { - var s0, s1, s2, s3; + return s0; + } - s0 = peg$currPos; - s1 = peg$parse_(); - if (input.substr(peg$currPos, 168) === peg$c7) { - s2 = peg$c7; - peg$currPos += 168; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e7); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parse_(); - s1 = [s1, s2, s3]; - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + function peg$parseChangelogHeadLine3() { + let s0, s1, s2, s3; - return s0; + s0 = peg$currPos; + s1 = peg$parse_(); + if (input.substr(peg$currPos, 168) === peg$c7) { + s2 = peg$c7; + peg$currPos += 168; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e7); } } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } - function peg$parseSectionType() { - var s0, s1; + function peg$parseSectionType() { + let s0, s1; - if (input.substr(peg$currPos, 5) === peg$c8) { - s0 = peg$c8; - peg$currPos += 5; + if (input.substr(peg$currPos, 5) === peg$c8) { + s0 = peg$c8; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e8); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c9) { + s0 = peg$c9; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e9); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c10) { + s0 = peg$c10; + peg$currPos += 10; } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e8); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e10); } } if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 7) === peg$c9) { - s0 = peg$c9; - peg$currPos += 7; + if (input.substr(peg$currPos, 7) === peg$c11) { + s0 = peg$c11; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e11); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c12) { + s0 = peg$c12; + peg$currPos += 5; } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e9); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e12); } } if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 10) === peg$c10) { - s0 = peg$c10; - peg$currPos += 10; + if (input.substr(peg$currPos, 8) === peg$c13) { + s0 = peg$c13; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e13); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 16) === peg$c14) { + s0 = peg$c14; + peg$currPos += 16; } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e10); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 7) === peg$c11) { - s0 = peg$c11; - peg$currPos += 7; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e11); - } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 5) === peg$c12) { - s0 = peg$c12; - peg$currPos += 5; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e12); - } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 8) === peg$c13) { - s0 = peg$c13; - peg$currPos += 8; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e13); - } - } - if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 16) === peg$c14) { - s0 = peg$c14; - peg$currPos += 16; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e14); - } - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - if (input.substr(peg$currPos, 13) === peg$c15) { - s1 = peg$c15; - peg$currPos += 13; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e15); - } - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f9(); - } - s0 = s1; - } - } - } - } + s0 = peg$currPos; + if (input.substr(peg$currPos, 13) === peg$c15) { + s1 = peg$c15; + peg$currPos += 13; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e15); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f9(); + } + s0 = s1; } + } } + } } - - return s0; + } } - function peg$parseSemVer() { - var s0, s1, s2, s3, s4, s5, s6; - - s0 = peg$currPos; - s1 = peg$parseNumber(); - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 46) { - s2 = peg$c16; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e16); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parseNumber(); - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 46) { - s4 = peg$c16; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e16); - } - } - if (s4 !== peg$FAILED) { - s5 = peg$parseNumber(); - if (s5 !== peg$FAILED) { - s6 = peg$parse_(); - peg$savedPos = s0; - s0 = peg$f10(s1, s3, s5); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + return s0; + } + + function peg$parseSemVer() { + let s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseNumber(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e16); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseNumber(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e16); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseNumber(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + peg$savedPos = s0; + s0 = peg$f10(s1, s3, s5); } else { - peg$currPos = s0; - s0 = peg$FAILED; + peg$currPos = s0; + s0 = peg$FAILED; } - } else { + } else { peg$currPos = s0; s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - - return s0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseDate() { - var s0, s1, s2, s3, s4, s5; - - s0 = peg$currPos; - s1 = peg$parseNumber(); - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 45) { - s2 = peg$c3; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e3); - } - } - if (s2 !== peg$FAILED) { - s3 = peg$parseNumber(); - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 45) { - s4 = peg$c3; - peg$currPos++; - } else { - s4 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e3); - } - } - if (s4 !== peg$FAILED) { - s5 = peg$parseNumber(); - if (s5 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f11(s1, s3, s5); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + return s0; + } + + function peg$parseDate() { + let s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseNumber(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c3; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e3); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseNumber(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e3); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseNumber(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f11(s1, s3, s5); } else { - peg$currPos = s0; - s0 = peg$FAILED; + peg$currPos = s0; + s0 = peg$FAILED; } - } else { + } else { peg$currPos = s0; s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - - return s0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } - function peg$parseOneLineSentence() { - var s0, s1, s2; + return s0; + } - s0 = peg$currPos; - s1 = []; - if (peg$r0.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e17); - } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$r0.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e17); - } - } - } + function peg$parseOneLineSentence() { + let s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = input.charAt(peg$currPos); + if (peg$r0.test(s2)) { + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e17); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = input.charAt(peg$currPos); + if (peg$r0.test(s2)) { + peg$currPos++; } else { - s1 = peg$FAILED; - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f12(s1); + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e17); } } - s0 = s1; - - return s0; + } + } else { + s1 = peg$FAILED; } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f12(s1); + } + s0 = s1; - function peg$parseNumber() { - var s0, s1, s2; + return s0; + } - s0 = peg$currPos; - s1 = []; - if (peg$r1.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e18); - } - } - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - if (peg$r1.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e18); - } - } - } + function peg$parseNumber() { + let s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = input.charAt(peg$currPos); + if (peg$r1.test(s2)) { + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e18); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = input.charAt(peg$currPos); + if (peg$r1.test(s2)) { + peg$currPos++; } else { - s1 = peg$FAILED; - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f13(); + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e18); } } - s0 = s1; - - return s0; + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f13(); } + s0 = s1; - function peg$parse_() { - var s0, s1; + return s0; + } - peg$silentFails++; - s0 = []; - if (peg$r2.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e20); - } - } - while (s1 !== peg$FAILED) { - s0.push(s1); - if (peg$r2.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e20); - } - } - } - peg$silentFails--; - s1 = peg$FAILED; - if (peg$silentFails === 0) { - peg$fail(peg$e19); - } + function peg$parse_() { + let s0, s1; - return s0; + peg$silentFails++; + s0 = []; + s1 = input.charAt(peg$currPos); + if (peg$r2.test(s1)) { + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e19); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = input.charAt(peg$currPos); + if (peg$r2.test(s1)) { + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e19); } + } } + peg$silentFails--; - peg$result = peg$startRuleFunction(); + return s0; + } - if (peg$result !== peg$FAILED && peg$currPos === input.length) { - return peg$result; - } else { - if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail(peg$endExpectation()); - } + peg$result = peg$startRuleFunction(); - throw peg$buildStructuredError( - peg$maxFailExpected, - peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, - peg$maxFailPos < input.length - ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) - : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) - ); + const peg$success = (peg$result !== peg$FAILED && peg$currPos === input.length); + function peg$throw() { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? peg$getUnicode(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + if (options.peg$library) { + return /** @type {any} */ ({ + peg$result, + peg$currPos, + peg$FAILED, + peg$maxFailExpected, + peg$maxFailPos, + peg$success, + peg$throw: peg$success ? undefined : peg$throw, + }); + } + if (peg$success) { + return peg$result; + } else { + peg$throw(); + } } -module.exports = { - SyntaxError: peg$SyntaxError, - parse: peg$parse +const peg$allowedStartRules = [ + "ChangelogFile" +]; + +export { + peg$allowedStartRules as StartRules, + peg$SyntaxError as SyntaxError, + peg$parse as parse }; diff --git a/packages/release-tools/utils/changelog-parser/changelog.ts b/packages/release-tools/utils/changelog-parser/changelog.ts deleted file mode 100644 index da44c9b5..00000000 --- a/packages/release-tools/utils/changelog-parser/changelog.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChangelogFile } from "./types"; - -declare interface Location { - line: number; - column: number; - offset: number; -} - -declare interface LocationRange { - start: Location; - end: Location; -} - -export declare class SyntaxError { - line: number; - column: number; - offset: number; - location: LocationRange; - expected: unknown[]; - found: unknown; - name: string; - message: string; -} - -export declare function parse(fileContent: string, options: object): ChangelogFile; diff --git a/packages/release-tools/utils/changelog-parser/cli.ts b/packages/release-tools/utils/changelog-parser/cli.ts old mode 100644 new mode 100755 index ecc17cdc..a3bc4d58 --- a/packages/release-tools/utils/changelog-parser/cli.ts +++ b/packages/release-tools/utils/changelog-parser/cli.ts @@ -1,22 +1,46 @@ -import { ChangelogFileWrapper } from "."; -import { resolve } from "path"; -import * as process from "process"; +#!/usr/bin/env -S node --experimental-strip-types +import { ChangelogFileWrapper } from "./index.ts"; +import { resolve } from "node:path"; +import * as process from "node:process"; +import { ArgumentError, handleError } from "../errors.ts"; +import { format } from "node:util"; -function reformat(filePath: string): void { - try { - const changelog = ChangelogFileWrapper.fromFile(filePath); - - changelog.save(); - } catch (e) { - console.log(e); - process.exit(); +function ensureFilePath(filePath: string | undefined) { + if (!filePath) { + throw new ArgumentError("filepath", filePath); } + return resolve(filePath); +} + +function reformat(filePath: string | undefined): void { + filePath = ensureFilePath(filePath); + const changelog = ChangelogFileWrapper.fromFile(filePath); + changelog.save(); + console.log("Finished formatting %s", filePath); +} + +function parse(filePath: string | undefined): void { + filePath = ensureFilePath(filePath); + ChangelogFileWrapper.fromFile(filePath); + console.log("Successfully parsed %s", filePath); } function main(): void { - switch (process.argv[2]) { - case "reformat": - return reformat(resolve(process.argv[3])); + try { + switch (process.argv[2]) { + case "reformat": + return reformat(process.argv[3]); + case "parse": + return parse(process.argv[3]); + default: + throw new ArgumentError("command of reformat", process.argv[2]); + } + } catch (e) { + handleError( + e, + format("Usage: %s \n\nCommands:\n\treformat \n\tparse ", process.argv[1]) + ); + process.exit(1); } } diff --git a/packages/release-tools/utils/changelog-parser/index.ts b/packages/release-tools/utils/changelog-parser/index.ts index 6bcc02f6..d51587dd 100644 --- a/packages/release-tools/utils/changelog-parser/index.ts +++ b/packages/release-tools/utils/changelog-parser/index.ts @@ -1,7 +1,8 @@ -import { readFileSync, writeFileSync } from "fs"; -import { Version } from "../version"; -import { parse as parseChangelogFile } from "./changelog"; -import { LogSection, ReleasedVersionEntry, UnreleasedVersionEntry, VersionEntry, ChangelogFile } from "./types"; +import { readFileSync, writeFileSync } from "node:fs"; +import { Version } from "../version.ts"; +import { parse as parseChangelogFile } from "./changelog.js"; +import type { LogSection, ReleasedVersionEntry, UnreleasedVersionEntry, VersionEntry, ChangelogFile } from "./types.ts"; +import { ChangelogError, ensureError } from "../errors.ts"; function formatHeader(header: string): string[] { return [ @@ -41,12 +42,11 @@ function formatDate(date: Date): string { export class ChangelogFileWrapper { changelog: ChangelogFile; + changelogPath: string; - private constructor( - changelog: ChangelogFile, - public changelogPath: string - ) { + private constructor(changelog: ChangelogFile, changelogPath: string) { this.changelog = Object.freeze(changelog); + this.changelogPath = changelogPath; } save(): void { @@ -95,6 +95,13 @@ export class ChangelogFileWrapper { } static fromFile(filePath: string): ChangelogFileWrapper { - return new ChangelogFileWrapper(parseChangelogFile(readFileSync(filePath).toString(), { Version }), filePath); + try { + return new ChangelogFileWrapper( + parseChangelogFile(readFileSync(filePath).toString(), { Version, grammarSource: filePath }), + filePath + ); + } catch (e) { + throw new ChangelogError(filePath, ensureError(e)); + } } } diff --git a/packages/release-tools/utils/changelog-parser/types.ts b/packages/release-tools/utils/changelog-parser/types.ts index 1700f8f7..fd4f2823 100644 --- a/packages/release-tools/utils/changelog-parser/types.ts +++ b/packages/release-tools/utils/changelog-parser/types.ts @@ -1,4 +1,4 @@ -import { Version } from "../version"; +import { Version } from "../version.ts"; export interface ReleasedVersionEntry { type: "normal"; diff --git a/packages/release-tools/utils/errors.ts b/packages/release-tools/utils/errors.ts new file mode 100644 index 00000000..1af6b426 --- /dev/null +++ b/packages/release-tools/utils/errors.ts @@ -0,0 +1,73 @@ +import { styleText, format } from "node:util"; +import { SyntaxError } from "./changelog-parser/changelog.js"; + +export class UsageError extends Error { + constructor(message: string) { + super(message); + } +} + +export class ArgumentError extends UsageError { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + constructor(argument: string, received: any) { + super(`Argument "${received}" is not a valid ${argument}`); + } +} + +export class ConfigurationError extends UsageError { + constructor(message: string) { + super(message); + } +} + +export class ChangelogError extends Error { + file: string; + constructor(file: string, error: Error) { + super(format("%s while parsing changelog file %s", error.constructor.name, file), { cause: error }); + this.file = file; + } + + toString() { + if ("GITHUB_ACTIONS" in process.env) { + if (this.cause instanceof SyntaxError) { + return format( + "::error file=%s,line=%d,col=%d,endLine=%d,endColumn=%d,title=Changelog SyntaxError::%s", + this.file, + this.cause.location.start.line, + this.cause.location.start.column, + this.cause.location.end.line, + this.cause.location.end.column, + this.cause.format([]) + ); + } else { + return format("::error file=%s,title=ChangelogError::%s", this.file, this.cause); + } + } + + const msg = "ChangelogError: %s:\n\t%s"; + if (this.cause instanceof SyntaxError) { + return format(msg, this.message, this.cause.format([])); + } else { + return format(msg, this.message, this.cause); + } + } +} + +export function ensureError(e: unknown) { + if (e instanceof Error) { + return e; + } + if (typeof e === "string") { + return new Error(e); + } + return new Error(format("Unknown Error: %O", e)); +} + +export function handleError(e: unknown, usage: string) { + if (e instanceof UsageError) { + console.error(styleText("red", format("%s: %s", e.constructor.name, e.message))); + console.error(usage); + } else { + console.error(styleText("red", format("%s", e))); + } +} diff --git a/packages/release-tools/utils/fetch.ts b/packages/release-tools/utils/fetch.ts index 3421e321..0cbadf26 100644 --- a/packages/release-tools/utils/fetch.ts +++ b/packages/release-tools/utils/fetch.ts @@ -1,19 +1,4 @@ -import nodefetch, { BodyInit, RequestInit } from "node-fetch"; - -const config = { - appStoreUrl: "https://appstore.home.mendix.com/rest/packagesapi/v2" -}; - -export async function fetchMarketplace( - method: "GET" | "POST" | "PUT" | "DELETE", - url: string, - body: BodyInit -): Promise> { - return fetch(method, `${config.appStoreUrl}/${url}`, body, { - "Mendix-Username": process.env.MARKETPLACE_USERNAME, - "Mendix-ApiKey": process.env.MARKETPLACE_API_KEY - }); -} +import nodefetch, { type BodyInit, type RequestInit } from "node-fetch"; export async function fetch( method: "GET" | "POST" | "PUT" | "DELETE", diff --git a/packages/release-tools/utils/git.ts b/packages/release-tools/utils/git.ts index 4c39cb97..f898aaa7 100644 --- a/packages/release-tools/utils/git.ts +++ b/packages/release-tools/utils/git.ts @@ -1,12 +1,11 @@ -import { execSync } from "child_process"; -import { mkdir, rm } from "fs/promises"; -import { execShellCommand } from "./shell"; +import { ConfigurationError } from "./errors.ts"; +import { execShellCommand } from "./shell.ts"; function getGHRepoAuthUrl(repoUrl: string): string { const url = new URL(repoUrl); const { GH_USERNAME, GH_PAT } = process.env; if (!GH_USERNAME || !GH_PAT) { - throw new Error("Required GH_USERNAME and GH_PAT env vars are not set."); + throw new ConfigurationError("Required GH_USERNAME and GH_PAT env vars are not set."); } url.username = GH_USERNAME; @@ -15,29 +14,10 @@ function getGHRepoAuthUrl(repoUrl: string): string { return url.toString(); } -export async function cloneRepo(githubUrl: string, localFolder: string): Promise { - // clean up local folder - await rm(localFolder, { recursive: true, force: true }); - await mkdir(localFolder, { recursive: true }); - - // clone and set local credentials - await execSync(`git clone ${getGHRepoAuthUrl(githubUrl)} ${localFolder}`, { stdio: "inherit" }); - - // set credentials - await setLocalGitUserInfo(localFolder); -} - -export async function cloneRepoShallow(remoteUrl: string, branch: string, localFolder: string): Promise { - await execSync( - `git clone ${getGHRepoAuthUrl(remoteUrl)} --branch=${branch} --depth=1 --single-branch ${localFolder}`, - { stdio: "inherit" } - ); -} - -export async function setLocalGitUserInfo(workingDirectory?: string): Promise { +async function setLocalGitUserInfo(workingDirectory?: string): Promise { const { GH_NAME, GH_EMAIL } = process.env; if (!GH_NAME || !GH_EMAIL) { - throw new Error("Required GH_NAME and GH_EMAIL env vars are not set."); + throw new ConfigurationError("Required GH_NAME and GH_EMAIL env vars are not set."); } await execShellCommand(`git config user.name "${GH_NAME}"`, workingDirectory); await execShellCommand(`git config user.email "${GH_EMAIL}"`, workingDirectory); diff --git a/packages/release-tools/utils/github.ts b/packages/release-tools/utils/github.ts index b7afc445..fb2b6f86 100644 --- a/packages/release-tools/utils/github.ts +++ b/packages/release-tools/utils/github.ts @@ -1,7 +1,7 @@ -import { execShellCommand } from "./shell"; -import { fetch } from "./fetch"; -import { mkdtemp, writeFile } from "fs/promises"; -import { join } from "path"; +import { execShellCommand } from "./shell.ts"; +import { fetch } from "./fetch.ts"; +import { mkdtemp, writeFile } from "node:fs/promises"; +import { join } from "node:path"; interface GitHubReleaseInfo { title: string; @@ -21,7 +21,7 @@ interface GitHubPRInfo { repo?: string; } -export class GitHub { +class GitHub { authSet = false; private async ensureAuth(): Promise { diff --git a/packages/release-tools/utils/index.ts b/packages/release-tools/utils/index.ts index a3cb3592..875e1e61 100644 --- a/packages/release-tools/utils/index.ts +++ b/packages/release-tools/utils/index.ts @@ -1,6 +1,6 @@ -export * from "./version"; -export * from "./package-info"; -export * from "./shell"; -export * from "./git"; -export * from "./github"; -export * from "./changelog-parser"; +export * from "./version.ts"; +export * from "./package-info.ts"; +export * from "./shell.ts"; +export * from "./git.ts"; +export * from "./github.ts"; +export * from "./changelog-parser/index.ts"; diff --git a/packages/release-tools/utils/package-info.ts b/packages/release-tools/utils/package-info.ts index 8d6971c4..81ffb27b 100644 --- a/packages/release-tools/utils/package-info.ts +++ b/packages/release-tools/utils/package-info.ts @@ -1,11 +1,11 @@ -import { join } from "path"; -import { access } from "fs/promises"; -import { Version, VersionString } from "./version"; +import { join } from "node:path"; +import { readFile } from "node:fs/promises"; +import { isVersionString, Version, type VersionString } from "./version.ts"; // FIXME: Uncomment when md parser is 100% ready. // Disable changelog parser for now // import { ChangelogFileWrapper } from "./changelog-parser"; -export interface PackageJsonFileContent { +interface PackageJsonFileContent { name?: string; version?: VersionString; @@ -28,24 +28,15 @@ export interface PackageInfo { changelog: string; } -export async function getPackageFileContent(dirPath: string): Promise { - const pkgPath = join(dirPath, `package.json`); - try { - await access(pkgPath); - const result = (await import(pkgPath)) as PackageJsonFileContent; - return result; - } catch (error) { - console.log(error); - console.error(`ERROR: Path does not exist: ${pkgPath}`); - throw new Error("Error while reading package info at " + dirPath); - } +async function readPackageJSON(filePath: string): Promise { + const raw = await readFile(filePath, "utf-8"); + return JSON.parse(raw); } export async function getPackageInfo(path: string): Promise { const pkgPath = join(path, `package.json`); try { - await access(pkgPath); - const { name, version, repository } = (await import(pkgPath)) as PackageJsonFileContent; + const { name, version, repository } = await readPackageJSON(pkgPath); return { packageName: ensureString(name, "name"), packageFullName: "", @@ -72,8 +63,8 @@ function ensureString(str: string | undefined, fieldName: string): string { return str; } -function ensureVersion(version: VersionString | undefined): Version { - if (version && /\d+\.\d+\.\d+/.test(version)) { +function ensureVersion(version: string | undefined): Version { + if (isVersionString(version)) { return Version.fromString(version); } diff --git a/packages/release-tools/utils/shell.ts b/packages/release-tools/utils/shell.ts index 18cf1a22..9ccd1ae5 100644 --- a/packages/release-tools/utils/shell.ts +++ b/packages/release-tools/utils/shell.ts @@ -1,6 +1,4 @@ -import { exec } from "child_process"; -import { readdir } from "fs/promises"; -import { extname, resolve } from "path"; +import { exec } from "node:child_process"; export function execShellCommand(cmd: string | string[], workingDirectory: string = process.cwd()): Promise { const command = Array.isArray(cmd) ? cmd.join(" && ") : cmd; @@ -18,31 +16,3 @@ export function execShellCommand(cmd: string | string[], workingDirectory: strin }); }); } - -export async function zip(src: string, fileName: string): Promise { - return execShellCommand(`cd "${src}" && zip -r ${fileName} .`); -} - -export async function unzip(src: string, dest: string): Promise { - return execShellCommand(`unzip "${src}" -d "${dest}"`); -} - -export async function getFiles(dir: string, includeExtension: string[] = []): Promise { - const dirents = await readdir(dir, { withFileTypes: true }); - const files = await Promise.all( - dirents - .filter(dirent => !dirent.name.startsWith(".")) - .map(dirent => { - const res = resolve(dir, dirent.name); - return dirent.isDirectory() ? getFiles(res, includeExtension) : res; - }) - ); - - const f = files.flat(); - - if (!includeExtension.length) { - return f; - } - - return f.filter(file => extname(file) && includeExtension.includes(extname(file))); -} diff --git a/packages/release-tools/utils/version.ts b/packages/release-tools/utils/version.ts index 4388b941..45dbe03f 100644 --- a/packages/release-tools/utils/version.ts +++ b/packages/release-tools/utils/version.ts @@ -1,12 +1,21 @@ export type VersionString = `${number}.${number}.${number}` | `${number}.${number}.${number}.${number}`; +export function isVersionString(input: unknown): input is VersionString { + return typeof input === "string" && /\d+\.\d+\.\d+/.test(input); +} + export class Version { - constructor( - public readonly major: number, - public readonly minor: number, - public readonly patch: number, - public readonly build: number | undefined - ) {} + public readonly major: number; + public readonly minor: number; + public readonly patch: number; + public readonly build: number | undefined; + + constructor(major: number, minor: number, patch: number, build?: number) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.build = build; + } bumpPatch(): Version { return new Version(this.major, this.minor, this.patch + 1, undefined); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93f9caf..8a80c6a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,28 +10,31 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.4.0) + version: 10.0.1(eslint@10.4.0(jiti@2.7.0)) + '@mendix/release-tools': + specifier: workspace:* + version: link:packages/release-tools '@prettier/plugin-xml': specifier: ^3.4.2 version: 3.4.2(prettier@3.8.3) '@typescript-eslint/eslint-plugin': specifier: ^8.59.0 - version: 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) + version: 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.59.0 - version: 8.59.3(eslint@10.4.0)(typescript@5.9.3) + version: 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) eslint: specifier: ^10.4.0 - version: 10.4.0 + version: 10.4.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.4.0) + version: 10.1.8(eslint@10.4.0(jiti@2.7.0)) eslint-plugin-jest: specifier: ^29.15.2 - version: 29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(jest@30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(jest@30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3) eslint-plugin-prettier: specifier: ^5.5.5 - version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint@10.4.0)(prettier@3.8.3) + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)))(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3) globals: specifier: ^17.6.0 version: 17.6.0 @@ -40,7 +43,7 @@ importers: version: 3.8.3 typescript-eslint: specifier: ^8.59.3 - version: 8.59.3(eslint@10.4.0)(typescript@5.9.3) + version: 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) packages/command-tests: devDependencies: @@ -57,8 +60,8 @@ importers: specifier: ^4.3.1 version: 4.3.2 '@types/node': - specifier: ^20.14.8 - version: 20.19.41 + specifier: ^22.18.0 + version: 22.20.1 '@types/shelljs': specifier: ^0.10.0 version: 0.10.0 @@ -73,7 +76,7 @@ importers: version: 5.6.2 eslint-config-prettier: specifier: ^8.5.0 - version: 8.10.2(eslint@10.4.0) + version: 8.10.2(eslint@10.4.0(jiti@2.7.0)) fs-extra: specifier: ^11.3.4 version: 11.3.5 @@ -97,16 +100,16 @@ importers: version: 1.2.2 ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@4.9.5) + version: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@4.9.5) typescript: specifier: ^4.8.4 version: 4.9.5 yeoman-environment: specifier: ^6.0.1 - version: 6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) + version: 6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) yeoman-test: specifier: ^11.3.1 - version: 11.5.2(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4)(yeoman-environment@6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4))(yeoman-generator@8.2.2(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4)) + version: 11.5.2(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4)(yeoman-environment@6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4))(yeoman-generator@8.2.2(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4)) packages/generator-widget: dependencies: @@ -121,17 +124,17 @@ importers: version: 7.8.0 yeoman-environment: specifier: ^6.1.0 - version: 6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) + version: 6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) yeoman-generator: specifier: ^8.2.2 - version: 8.2.2(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) + version: 8.2.2(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) devDependencies: ejs: specifier: ^5.0.2 version: 5.0.2 jest: specifier: ^30.3.0 - version: 30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + version: 30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) packages/pluggable-widgets-tools: dependencies: @@ -140,7 +143,7 @@ importers: version: 7.29.0 '@babel/eslint-parser': specifier: ^7.28.6 - version: 7.28.6(@babel/core@7.29.0)(eslint@9.39.4) + version: 7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.7.0)) '@babel/plugin-transform-class-properties': specifier: ^7.28.6 version: 7.28.6(@babel/core@7.29.0) @@ -209,7 +212,7 @@ importers: version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@testing-library/react-native': specifier: ^13.3.3 - version: 13.3.3(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6) + version: 13.3.3(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -227,10 +230,10 @@ importers: version: 5.14.9 '@typescript-eslint/eslint-plugin': specifier: ^8.59.0 - version: 8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + version: 8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.59.0 - version: 8.59.3(eslint@9.39.4)(typescript@5.9.3) + version: 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) ansi-colors: specifier: 4.1.3 version: 4.1.3 @@ -248,25 +251,25 @@ importers: version: 17.4.2 eslint: specifier: ^9.39.4 - version: 9.39.4 + version: 9.39.4(jiti@2.7.0) eslint-config-prettier: specifier: ^8.0.0 - version: 8.10.2(eslint@9.39.4) + version: 8.10.2(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-jest: specifier: ^29.15.2 - version: 29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3) eslint-plugin-prettier: specifier: ^3.3.1 - version: 3.4.1(eslint-config-prettier@8.10.2(eslint@9.39.4))(eslint@9.39.4)(prettier@2.8.8) + version: 3.4.1(eslint-config-prettier@8.10.2(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@2.8.8) eslint-plugin-promise: specifier: ^4.3.1 version: 4.3.1 eslint-plugin-react: specifier: ~7.37.5 - version: 7.37.5(eslint@9.39.4) + version: 7.37.5(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-react-hooks: specifier: ^7.1.1 - version: 7.1.1(eslint@9.39.4) + version: 7.1.1(eslint@9.39.4(jiti@2.7.0)) fast-glob: specifier: ^3.0.0 version: 3.3.3 @@ -284,7 +287,7 @@ importers: version: 3.99.1 jest: specifier: ~30.3.0 - version: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + version: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-environment-jsdom: specifier: ~30.3.0 version: 30.3.0 @@ -341,7 +344,7 @@ importers: version: 2.0.5 rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + version: 4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) rollup-plugin-re: specifier: ^1.0.7 version: 1.0.7 @@ -359,10 +362,10 @@ importers: version: 0.4.0 ts-jest: specifier: ^29.4.9 - version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) typescript: specifier: ^5.6.3 version: 5.9.3 @@ -377,8 +380,8 @@ importers: specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^16.18.126 - version: 16.18.126 + specifier: ^22.18.0 + version: 22.20.1 '@types/xml2js': specifier: ^0.4.5 version: 0.4.14 @@ -397,22 +400,25 @@ importers: node-fetch: specifier: ^2.7.0 version: 2.7.0 - ts-node: - specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@4.9.5) devDependencies: + '@tsconfig/node-ts': + specifier: ^23.6.4 + version: 23.6.4 + '@tsconfig/node22': + specifier: ^22.0.5 + version: 22.0.5 '@types/node': - specifier: ^16.11.19 - version: 16.18.126 + specifier: ^22.18.0 + version: 22.20.1 '@types/node-fetch': specifier: 2.6.13 version: 2.6.13 peggy: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^5.1.0 + version: 5.1.0 typescript: - specifier: ^4.8.4 - version: 4.9.5 + specifier: ^5.9.3 + version: 5.9.3 packages: @@ -1797,6 +1803,10 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} + '@peggyjs/from-mem@3.1.3': + resolution: {integrity: sha512-LLlgtfXIaeYXoOYovOI0spLM8ZXaqkAlmcRRrLzHJzLMqkU6Sw0R4KMoCoHx1PjaP815pSCBlS+BN6aD8t1Jgg==} + engines: {node: '>=20.8'} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2337,6 +2347,9 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@tsconfig/node-ts@23.6.4': + resolution: {integrity: sha512-37BMJvNQZ+vTgd1xG2TGBkJ6ENeT4eO4Wh2CHrnn0IwH7ybLFCzh4Uc//kc7UIvqiRac4uGdIc1meKOjMSlKzw==} + '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -2349,6 +2362,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tsconfig/node22@22.0.5': + resolution: {integrity: sha512-hLf2ld+sYN/BtOJjHUWOk568dvjFQkHnLNa6zce25GIH+vxKfvTgm3qpaH6ToF5tu/NN0IH66s+Bb5wElHrLcw==} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2435,11 +2451,8 @@ packages: '@types/node-forge@1.3.14': resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@16.18.126': - resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - - '@types/node@20.19.41': - resolution: {integrity: sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4712,6 +4725,10 @@ packages: node-notifier: optional: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5520,6 +5537,11 @@ packages: engines: {node: '>=10'} hasBin: true + peggy@5.1.0: + resolution: {integrity: sha512-IEo5aYRZ2kXH4Qby06cjtL114PZnwLoTiA41vUmg2vPZgANn+c87m5BUurhuDr5/cu758ZlpgsAfBVx+hhO5+w==} + engines: {node: '>=20'} + hasBin: true + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6166,6 +6188,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + semver@7.8.0: resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} @@ -6302,6 +6329,10 @@ packages: resolution: {integrity: sha512-ueSlHJMwpIw42CJ4B11Uxzh/S0p0AlOyiNktlv2KOu5e1JpUE6DlC4AAUjXqesHdBRv/g0wC9Q4vwq0NP2pA9w==} engines: {node: '>=20'} + source-map-generator@2.0.6: + resolution: {integrity: sha512-IlassDs1Ve8nV6uyQZXF9kdkJpVKnMte2JZQXu13M0A5zwc+vu6+LNHfmxsHBMDtoZE21RHiKI0/xvpecZRCNg==} + engines: {node: '>=20'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -7100,11 +7131,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@9.39.4)': + '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.7.0))': dependencies: '@babel/core': 7.29.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -7992,14 +8023,14 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))': dependencies: - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': dependencies: - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -8050,9 +8081,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@10.0.1(eslint@10.4.0)': + '@eslint/js@10.0.1(eslint@10.4.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) '@eslint/js@9.39.4': {} @@ -8090,122 +8121,122 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.5(@types/node@20.19.41)': + '@inquirer/checkbox@5.1.5(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/confirm@6.0.13(@types/node@20.19.41)': + '@inquirer/confirm@6.0.13(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/core@11.1.10(@types/node@20.19.41)': + '@inquirer/core@11.1.10(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/type': 4.0.5(@types/node@22.20.1) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/editor@5.1.2(@types/node@20.19.41)': + '@inquirer/editor@5.1.2(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/external-editor': 3.0.0(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/external-editor': 3.0.0(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/expand@5.0.14(@types/node@20.19.41)': + '@inquirer/expand@5.0.14(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/external-editor@3.0.0(@types/node@20.19.41)': + '@inquirer/external-editor@3.0.0(@types/node@22.20.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.13(@types/node@20.19.41)': + '@inquirer/input@5.0.13(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/number@4.0.13(@types/node@20.19.41)': + '@inquirer/number@4.0.13(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/password@5.0.13(@types/node@20.19.41)': + '@inquirer/password@5.0.13(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/prompts@8.4.3(@types/node@20.19.41)': - dependencies: - '@inquirer/checkbox': 5.1.5(@types/node@20.19.41) - '@inquirer/confirm': 6.0.13(@types/node@20.19.41) - '@inquirer/editor': 5.1.2(@types/node@20.19.41) - '@inquirer/expand': 5.0.14(@types/node@20.19.41) - '@inquirer/input': 5.0.13(@types/node@20.19.41) - '@inquirer/number': 4.0.13(@types/node@20.19.41) - '@inquirer/password': 5.0.13(@types/node@20.19.41) - '@inquirer/rawlist': 5.2.9(@types/node@20.19.41) - '@inquirer/search': 4.1.9(@types/node@20.19.41) - '@inquirer/select': 5.1.5(@types/node@20.19.41) + '@types/node': 22.20.1 + + '@inquirer/prompts@8.4.3(@types/node@22.20.1)': + dependencies: + '@inquirer/checkbox': 5.1.5(@types/node@22.20.1) + '@inquirer/confirm': 6.0.13(@types/node@22.20.1) + '@inquirer/editor': 5.1.2(@types/node@22.20.1) + '@inquirer/expand': 5.0.14(@types/node@22.20.1) + '@inquirer/input': 5.0.13(@types/node@22.20.1) + '@inquirer/number': 4.0.13(@types/node@22.20.1) + '@inquirer/password': 5.0.13(@types/node@22.20.1) + '@inquirer/rawlist': 5.2.9(@types/node@22.20.1) + '@inquirer/search': 4.1.9(@types/node@22.20.1) + '@inquirer/select': 5.1.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/rawlist@5.2.9(@types/node@20.19.41)': + '@inquirer/rawlist@5.2.9(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/search@4.1.9(@types/node@20.19.41)': + '@inquirer/search@4.1.9(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/select@5.1.5(@types/node@20.19.41)': + '@inquirer/select@5.1.5(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/type': 4.0.5(@types/node@22.20.1) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 - '@inquirer/type@4.0.5(@types/node@20.19.41)': + '@inquirer/type@4.0.5(@types/node@22.20.1)': optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@isaacs/cliui@8.0.2': dependencies: @@ -8237,7 +8268,7 @@ snapshots: '@jest/console@30.3.0': dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 jest-message-util: 30.3.0 jest-util: 30.3.0 @@ -8246,13 +8277,13 @@ snapshots: '@jest/console@30.4.1': dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 jest-message-util: 30.4.1 jest-util: 30.4.1 slash: 3.0.0 - '@jest/core@30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3))': + '@jest/core@30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3))': dependencies: '@jest/console': 30.3.0 '@jest/pattern': 30.0.1 @@ -8260,14 +8291,14 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.3.0 - jest-config: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest-config: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-haste-map: 30.3.0 jest-message-util: 30.3.0 jest-regex-util: 30.0.1 @@ -8287,7 +8318,7 @@ snapshots: - supports-color - ts-node - '@jest/core@30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3))': + '@jest/core@30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3))': dependencies: '@jest/console': 30.4.1 '@jest/pattern': 30.4.0 @@ -8295,7 +8326,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 @@ -8303,7 +8334,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 jest-changed-files: 30.4.1 - jest-config: 30.4.2(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + jest-config: 30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-haste-map: 30.4.1 jest-message-util: 30.4.1 jest-regex-util: 30.4.0 @@ -8341,7 +8372,7 @@ snapshots: '@jest/fake-timers': 30.3.0 '@jest/types': 30.3.0 '@types/jsdom': 21.1.7 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 30.3.0 jest-util: 30.3.0 jsdom: 26.1.0 @@ -8350,21 +8381,21 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 29.7.0 '@jest/environment@30.3.0': dependencies: '@jest/fake-timers': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 30.3.0 '@jest/environment@30.4.1': dependencies: '@jest/fake-timers': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 30.4.1 '@jest/expect-utils@30.3.0': @@ -8393,7 +8424,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8402,7 +8433,7 @@ snapshots: dependencies: '@jest/types': 30.3.0 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-message-util: 30.3.0 jest-mock: 30.3.0 jest-util: 30.3.0 @@ -8411,7 +8442,7 @@ snapshots: dependencies: '@jest/types': 30.4.1 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-message-util: 30.4.1 jest-mock: 30.4.1 jest-util: 30.4.1 @@ -8438,12 +8469,12 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-regex-util: 30.0.1 '@jest/pattern@30.4.0': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-regex-util: 30.4.0 '@jest/reporters@30.3.0': @@ -8454,7 +8485,7 @@ snapshots: '@jest/transform': 30.3.0 '@jest/types': 30.3.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8482,7 +8513,7 @@ snapshots: '@jest/transform': 30.4.1 '@jest/types': 30.4.1 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8625,7 +8656,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8635,7 +8666,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8645,7 +8676,7 @@ snapshots: '@jest/schemas': 30.4.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8888,6 +8919,10 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true + '@peggyjs/from-mem@3.1.3': + dependencies: + semver: 7.7.4 + '@pkgjs/parseargs@0.11.0': optional: true @@ -9434,7 +9469,7 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react-native@13.3.3(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6)': + '@testing-library/react-native@13.3.3(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: jest-matcher-utils: 30.4.1 picocolors: 1.1.1 @@ -9444,7 +9479,7 @@ snapshots: react-test-renderer: 19.2.6(react@19.2.6) redent: 3.0.0 optionalDependencies: - jest: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -9460,6 +9495,8 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 + '@tsconfig/node-ts@23.6.4': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -9468,6 +9505,8 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tsconfig/node22@22.0.5': {} + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -9521,7 +9560,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -9546,7 +9585,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -9562,16 +9601,14 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 form-data: 4.0.5 '@types/node-forge@1.3.14': dependencies: - '@types/node': 16.18.126 - - '@types/node@16.18.126': {} + '@types/node': 22.20.1 - '@types/node@20.19.41': + '@types/node@22.20.1': dependencies: undici-types: 6.21.0 @@ -9581,7 +9618,7 @@ snapshots: '@types/pixelmatch@5.2.6': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: @@ -9597,7 +9634,7 @@ snapshots: '@types/shelljs@0.10.0': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 fast-glob: 3.3.3 '@types/stack-utils@2.0.3': {} @@ -9611,11 +9648,11 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/xml2js@0.4.14': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/yargs-parser@21.0.3': {} @@ -9623,15 +9660,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -9639,15 +9676,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -9655,26 +9692,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9697,25 +9734,25 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.59.3(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -9738,24 +9775,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9835,12 +9872,12 @@ snapshots: dependencies: chevrotain: 7.1.1 - '@yeoman/adapter@4.0.2(@types/node@20.19.41)': + '@yeoman/adapter@4.0.2(@types/node@22.20.1)': dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/prompts': 8.4.3(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/prompts': 8.4.3(@types/node@22.20.1) chalk: 5.6.2 - inquirer: 13.4.3(@types/node@20.19.41) + inquirer: 13.4.3(@types/node@22.20.1) log-symbols: 7.0.1 ora: 9.4.0 p-queue: 9.3.0 @@ -9848,18 +9885,18 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@yeoman/conflicter@4.1.0(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4)': + '@yeoman/conflicter@4.1.0(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4)': dependencies: - '@types/node': 20.19.41 - '@yeoman/transform': 2.1.1(@types/node@20.19.41) - '@yeoman/types': 1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4) + '@types/node': 22.20.1 + '@yeoman/transform': 2.1.1(@types/node@22.20.1) + '@yeoman/types': 1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4) binary-extensions: 3.1.0 cli-table: 0.3.11 dateformat: 5.0.3 diff: 9.0.0 isbinaryfile: 5.0.7 mem-fs: 4.1.4 - mem-fs-editor: 12.0.4(@types/node@20.19.41)(mem-fs@4.1.4) + mem-fs-editor: 12.0.4(@types/node@22.20.1)(mem-fs@4.1.4) minimatch: 10.2.5 p-transform: 5.0.1 pretty-bytes: 7.1.0 @@ -9872,16 +9909,16 @@ snapshots: '@yeoman/namespace@2.1.0': {} - '@yeoman/transform@2.1.1(@types/node@20.19.41)': + '@yeoman/transform@2.1.1(@types/node@22.20.1)': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 minimatch: 9.0.9 - '@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4)': + '@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4)': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 optionalDependencies: - '@yeoman/adapter': 4.0.2(@types/node@20.19.41) + '@yeoman/adapter': 4.0.2(@types/node@22.20.1) mem-fs: 4.1.4 abbrev@4.0.0: {} @@ -10358,7 +10395,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10367,7 +10404,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10836,71 +10873,71 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.4.0): + eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)): dependencies: - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) - eslint-config-prettier@8.10.2(eslint@10.4.0): + eslint-config-prettier@8.10.2(eslint@10.4.0(jiti@2.7.0)): dependencies: - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) - eslint-config-prettier@8.10.2(eslint@9.39.4): + eslint-config-prettier@8.10.2(eslint@9.39.4(jiti@2.7.0)): dependencies: - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) - eslint-plugin-jest@29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(jest@30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)))(typescript@5.9.3): + eslint-plugin-jest@29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(jest@30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - eslint: 10.4.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.4.0(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) - jest: 30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) + jest: 30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-jest@29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3): + eslint-plugin-jest@29.15.2(@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.3(eslint@9.39.4)(typescript@5.9.3) - eslint: 9.39.4 + '@typescript-eslint/utils': 8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) - jest: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + jest: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.2(eslint@9.39.4))(eslint@9.39.4)(prettier@2.8.8): + eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.2(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@2.8.8): dependencies: - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) prettier: 2.8.8 prettier-linter-helpers: 1.0.1 optionalDependencies: - eslint-config-prettier: 8.10.2(eslint@9.39.4) + eslint-config-prettier: 8.10.2(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint@10.4.0)(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)))(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3): dependencies: - eslint: 10.4.0 + eslint: 10.4.0(jiti@2.7.0) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.4.0) + eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.7.0)) eslint-plugin-promise@4.3.1: {} - eslint-plugin-react-hooks@7.1.1(eslint@9.39.4): + eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.3 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) hermes-parser: 0.25.1 zod: 4.4.3 zod-validation-error: 4.0.2(zod@4.4.3) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.4): + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -10908,7 +10945,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.3.2 - eslint: 9.39.4 + eslint: 9.39.4(jiti@2.7.0) estraverse: 5.3.0 hasown: 2.0.3 jsx-ast-utils: 3.3.5 @@ -10947,9 +10984,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.4.0: + eslint@10.4.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -10979,12 +11016,14 @@ snapshots: minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color - eslint@9.39.4: + eslint@9.39.4(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -11018,6 +11057,8 @@ snapshots: minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -11545,17 +11586,17 @@ snapshots: ini@6.0.0: {} - inquirer@13.4.3(@types/node@20.19.41): + inquirer@13.4.3(@types/node@22.20.1): dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/prompts': 8.4.3(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/prompts': 8.4.3(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) mute-stream: 3.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 internal-slot@1.1.0: dependencies: @@ -11816,7 +11857,7 @@ snapshots: '@jest/expect': 30.3.0 '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -11842,7 +11883,7 @@ snapshots: '@jest/expect': 30.4.1 '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -11862,15 +11903,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + jest-cli@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: - '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest-config: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-util: 30.3.0 jest-validate: 30.3.0 yargs: 17.7.2 @@ -11881,15 +11922,15 @@ snapshots: - supports-color - ts-node - jest-cli@30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)): + jest-cli@30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: - '@jest/core': 30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + '@jest/core': 30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + jest-config: 30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-util: 30.4.1 jest-validate: 30.4.1 yargs: 17.7.2 @@ -11900,7 +11941,7 @@ snapshots: - supports-color - ts-node - jest-config@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + jest-config@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 @@ -11926,45 +11967,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 16.18.126 - ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@30.4.2(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)): - dependencies: - '@babel/core': 7.29.0 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.4.0 - '@jest/test-sequencer': 30.4.1 - '@jest/types': 30.4.1 - babel-jest: 30.4.1(@babel/core@7.29.0) - chalk: 4.1.2 - ci-info: 4.4.0 - deepmerge: 4.3.1 - glob: 10.5.0 - graceful-fs: 4.2.11 - jest-circus: 30.4.2 - jest-docblock: 30.4.0 - jest-environment-node: 30.4.1 - jest-regex-util: 30.4.0 - jest-resolve: 30.4.1 - jest-runner: 30.4.2 - jest-util: 30.4.1 - jest-validate: 30.4.1 - parse-json: 5.2.0 - pretty-format: 30.4.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 16.18.126 - ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3) + '@types/node': 22.20.1 + ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)): + jest-config@30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 @@ -11990,8 +11999,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.19.41 - ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3) + '@types/node': 22.20.1 + ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12049,7 +12058,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12058,7 +12067,7 @@ snapshots: '@jest/environment': 30.3.0 '@jest/fake-timers': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 30.3.0 jest-util: 30.3.0 jest-validate: 30.3.0 @@ -12068,7 +12077,7 @@ snapshots: '@jest/environment': 30.4.1 '@jest/fake-timers': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-mock: 30.4.1 jest-util: 30.4.1 jest-validate: 30.4.1 @@ -12079,7 +12088,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.126 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12094,7 +12103,7 @@ snapshots: jest-haste-map@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12109,7 +12118,7 @@ snapshots: jest-haste-map@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12128,7 +12137,7 @@ snapshots: '@jest/source-map': 30.0.1 '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 is-generator-fn: 2.1.0 @@ -12214,19 +12223,19 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-util: 29.7.0 jest-mock@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-util: 30.3.0 jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-util: 30.4.1 jest-pnp-resolver@1.2.3(jest-resolve@30.3.0): @@ -12286,7 +12295,7 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12313,7 +12322,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12342,7 +12351,7 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12369,7 +12378,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12442,7 +12451,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12451,7 +12460,7 @@ snapshots: jest-util@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12460,7 +12469,7 @@ snapshots: jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12497,7 +12506,7 @@ snapshots: dependencies: '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12508,7 +12517,7 @@ snapshots: dependencies: '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12517,14 +12526,14 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.3.0: dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@ungap/structured-clone': 1.3.1 jest-util: 30.3.0 merge-stream: 2.0.0 @@ -12532,18 +12541,18 @@ snapshots: jest-worker@30.4.1: dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@ungap/structured-clone': 1.3.1 jest-util: 30.4.1 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: - '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@jest/types': 30.3.0 import-local: 3.2.0 - jest-cli: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest-cli: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12551,12 +12560,12 @@ snapshots: - supports-color - ts-node - jest@30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)): + jest@30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: - '@jest/core': 30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + '@jest/core': 30.4.2(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@jest/types': 30.4.1 import-local: 3.2.0 - jest-cli: 30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3)) + jest-cli: 30.4.2(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12564,6 +12573,9 @@ snapshots: - supports-color - ts-node + jiti@2.7.0: + optional: true + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -12831,7 +12843,7 @@ snapshots: mdn-data@2.0.14: {} - mem-fs-editor@12.0.4(@types/node@20.19.41)(mem-fs@4.1.4): + mem-fs-editor@12.0.4(@types/node@22.20.1)(mem-fs@4.1.4): dependencies: '@types/ejs': 3.1.5 '@types/picomatch': 4.0.3 @@ -12849,7 +12861,7 @@ snapshots: tinyglobby: 0.2.16 vinyl: 3.0.1 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -12857,7 +12869,7 @@ snapshots: mem-fs@4.1.4: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/vinyl': 2.0.12 vinyl: 3.0.1 vinyl-file: 5.0.0 @@ -13417,7 +13429,7 @@ snapshots: p-transform@5.0.1: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 p-queue: 8.1.1 p-try@2.2.0: {} @@ -13519,6 +13531,12 @@ snapshots: peggy@1.2.0: {} + peggy@5.1.0: + dependencies: + '@peggyjs/from-mem': 3.1.3 + commander: 14.0.3 + source-map-generator: 2.0.6 + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -13586,13 +13604,13 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.12 - postcss-load-config@3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + postcss-load-config@3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: postcss: 8.5.23 - ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) postcss-merge-longhand@5.1.7(postcss@8.5.23): dependencies: @@ -14127,7 +14145,7 @@ snapshots: - bufferutil - utf-8-validate - rollup-plugin-postcss@4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + rollup-plugin-postcss@4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -14136,7 +14154,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.5.23 - postcss-load-config: 3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + postcss-load-config: 3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) postcss-modules: 4.3.1(postcss@8.5.23) promise.series: 0.2.0 resolve: 1.22.12 @@ -14248,6 +14266,8 @@ snapshots: semver@6.3.1: {} + semver@7.7.4: {} + semver@7.8.0: {} send@0.19.2: @@ -14420,6 +14440,8 @@ snapshots: dependencies: is-plain-obj: 4.1.0 + source-map-generator@2.0.6: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: @@ -14733,12 +14755,12 @@ snapshots: dependencies: typescript: 5.9.3 - ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -14753,14 +14775,14 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.29.0) jest-util: 30.4.1 - ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@4.9.5): + ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -14773,14 +14795,14 @@ snapshots: optionalDependencies: '@swc/core': 1.15.41 - ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.126 + '@types/node': 22.20.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -14793,47 +14815,6 @@ snapshots: optionalDependencies: '@swc/core': 1.15.41 - ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@4.9.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.41 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.41 - - ts-node@10.9.2(@swc/core@1.15.41)(@types/node@20.19.41)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.41 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.41 - optional: true - tslib@2.8.1: {} tuf-js@4.1.0: @@ -14893,13 +14874,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.59.3(eslint@10.4.0)(typescript@5.9.3): + typescript-eslint@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - eslint: 10.4.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.4.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -15196,13 +15177,13 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yeoman-environment@6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4): + yeoman-environment@6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4): dependencies: - '@yeoman/adapter': 4.0.2(@types/node@20.19.41) - '@yeoman/conflicter': 4.1.0(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) + '@yeoman/adapter': 4.0.2(@types/node@22.20.1) + '@yeoman/conflicter': 4.1.0(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) '@yeoman/namespace': 2.1.0 - '@yeoman/transform': 2.1.1(@types/node@20.19.41) - '@yeoman/types': 1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4) + '@yeoman/transform': 2.1.1(@types/node@22.20.1) + '@yeoman/types': 1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4) arrify: 3.0.0 chalk: 5.6.2 commander: 14.0.3 @@ -15214,7 +15195,7 @@ snapshots: locate-path: 8.0.0 lodash-es: 4.18.1 mem-fs: 4.1.4 - mem-fs-editor: 12.0.4(@types/node@20.19.41)(mem-fs@4.1.4) + mem-fs-editor: 12.0.4(@types/node@22.20.1)(mem-fs@4.1.4) semver: 7.8.0 slash: 5.1.0 untildify: 6.0.0 @@ -15225,19 +15206,19 @@ snapshots: - react-native-b4a - supports-color - yeoman-generator@8.2.2(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4): + yeoman-generator@8.2.2(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4): dependencies: '@types/debug': 4.1.13 '@types/lodash-es': 4.17.12 '@yeoman/namespace': 2.1.0 - '@yeoman/types': 1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4) + '@yeoman/types': 1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4) chalk: 5.6.2 debug: 4.4.3 execa: 9.6.1 latest-version: 9.0.0 lodash-es: 4.18.1 mem-fs: 4.1.4 - mem-fs-editor: 12.0.4(@types/node@20.19.41)(mem-fs@4.1.4) + mem-fs-editor: 12.0.4(@types/node@22.20.1)(mem-fs@4.1.4) minimist: 1.2.8 read-package-up: 12.0.0 semver: 7.8.0 @@ -15246,24 +15227,24 @@ snapshots: text-table: 0.2.0 type-fest: 5.6.0 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - supports-color - yeoman-test@11.5.2(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4)(yeoman-environment@6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4))(yeoman-generator@8.2.2(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4)): + yeoman-test@11.5.2(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4)(yeoman-environment@6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4))(yeoman-generator@8.2.2(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4)): dependencies: - '@yeoman/types': 1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4) + '@yeoman/types': 1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4) lodash-es: 4.18.1 - mem-fs-editor: 12.0.4(@types/node@20.19.41)(mem-fs@4.1.4) + mem-fs-editor: 12.0.4(@types/node@22.20.1)(mem-fs@4.1.4) signal-exit: 4.1.0 type-fest: 5.6.0 optionalDependencies: - '@yeoman/adapter': 4.0.2(@types/node@20.19.41) + '@yeoman/adapter': 4.0.2(@types/node@22.20.1) mem-fs: 4.1.4 - yeoman-environment: 6.1.0(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) - yeoman-generator: 8.2.2(@types/node@20.19.41)(@yeoman/types@1.11.1(@types/node@20.19.41)(@yeoman/adapter@4.0.2(@types/node@20.19.41))(mem-fs@4.1.4))(mem-fs@4.1.4) + yeoman-environment: 6.1.0(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) + yeoman-generator: 8.2.2(@types/node@22.20.1)(@yeoman/types@1.11.1(@types/node@22.20.1)(@yeoman/adapter@4.0.2(@types/node@22.20.1))(mem-fs@4.1.4))(mem-fs@4.1.4) transitivePeerDependencies: - '@types/node' - bare-abort-controller