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 6cedeb8a..ca5010f6 100644 --- a/.github/workflows/TestPWTCommands.yml +++ b/.github/workflows/TestPWTCommands.yml @@ -22,11 +22,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 bdd27d0c..ba4fedd3 100644 --- a/.github/workflows/UnitTests.yml +++ b/.github/workflows/UnitTests.yml @@ -44,3 +44,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 82dc781c..eb1c7e35 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. - We updated the version of cypress when e2e tests are generated. 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 bdfa90f2..618cf5d4 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 b355c02e..0477eccb 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 2655d006..02920d88 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 e3acf7da..f0ade70b 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 41afc024..4decbbe4 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 d941561f..599f7d07 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 2ef05627..2d56ef2d 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 f1e82cae..3ccad369 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 74ae1112..c89d5136 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 84236ea4..e190b07a 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 c2f7fe8e..7d5c7715 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 7763a51a..6435315a 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 ffd79275..6d6dc7da 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 3a2805f2..717a0369 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 f205dd57..6e0e9493 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 58baaa70..af74dec5 100644 --- a/packages/pluggable-widgets-tools/CHANGELOG.md +++ b/packages/pluggable-widgets-tools/CHANGELOG.md @@ -14,6 +14,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed +- We increased the minimum node version to 22. + - We replaced `ts-jest` with `@swc/jest` as the Jest transform (3–5× faster for TSX-heavy test suites) and switched the test runner from `jest-jasmine2` to `jest-circus`. - **Breaking:** The `jest-jasmine2` runner has been removed. Tests using Jasmine-specific globals (`jasmine.createSpy()`, `jasmine.objectContaining()`, etc.) will throw `ReferenceError: jasmine is not defined`. Replace with Jest equivalents: `jest.fn()`, `expect.objectContaining()`. diff --git a/packages/pluggable-widgets-tools/package.json b/packages/pluggable-widgets-tools/package.json index b6fc1d09..0d700d63 100644 --- a/packages/pluggable-widgets-tools/package.json +++ b/packages/pluggable-widgets-tools/package.json @@ -3,7 +3,7 @@ "version": "10.24.1", "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" }, "peerDependencies": { 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 319fe049..246c742e 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@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@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.77.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@18.3.31)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) + 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.77.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@18.3.31)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) '@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 @@ -350,7 +353,7 @@ importers: version: 2.0.5 rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.14)(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.14)(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 @@ -368,10 +371,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 @@ -386,8 +389,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'} @@ -2321,6 +2331,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==} @@ -2333,6 +2346,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} @@ -2419,11 +2435,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==} @@ -4705,6 +4718,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==} @@ -5516,6 +5533,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==} @@ -6167,6 +6189,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'} @@ -6303,6 +6330,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'} @@ -7101,11 +7132,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 @@ -7993,14 +8024,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': {} @@ -8051,9 +8082,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': {} @@ -8091,122 +8122,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: @@ -8238,7 +8269,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 @@ -8247,13 +8278,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 @@ -8261,14 +8292,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 @@ -8288,7 +8319,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 @@ -8296,7 +8327,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 @@ -8304,7 +8335,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 @@ -8342,7 +8373,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 @@ -8351,21 +8382,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': @@ -8394,7 +8425,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 @@ -8403,7 +8434,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 @@ -8412,7 +8443,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 @@ -8439,12 +8470,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': @@ -8455,7 +8486,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 @@ -8483,7 +8514,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 @@ -8626,7 +8657,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 @@ -8636,7 +8667,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 @@ -8646,7 +8677,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 @@ -8889,6 +8920,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 @@ -9363,7 +9398,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.77.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@18.3.31)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': + '@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.77.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@18.3.31)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: jest-matcher-utils: 30.4.1 picocolors: 1.1.1 @@ -9373,7 +9408,7 @@ snapshots: react-test-renderer: 18.3.1(react@18.3.1) 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@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -9389,6 +9424,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': {} @@ -9397,6 +9434,8 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tsconfig/node22@22.0.5': {} + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -9450,7 +9489,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': {} @@ -9475,7 +9514,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 @@ -9491,16 +9530,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 @@ -9510,7 +9547,7 @@ snapshots: '@types/pixelmatch@5.2.6': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/prop-types@15.7.15': {} @@ -9537,7 +9574,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': {} @@ -9551,11 +9588,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': {} @@ -9563,15 +9600,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) @@ -9579,15 +9616,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) @@ -9595,26 +9632,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 @@ -9637,25 +9674,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: @@ -9678,24 +9715,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 @@ -9775,12 +9812,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 @@ -9788,18 +9825,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 @@ -9812,16 +9849,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: {} @@ -10298,7 +10335,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 @@ -10307,7 +10344,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 @@ -10776,71 +10813,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 @@ -10848,7 +10885,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 @@ -10887,9 +10924,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 @@ -10919,12 +10956,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 @@ -10958,6 +10997,8 @@ snapshots: minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -11485,17 +11526,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: @@ -11756,7 +11797,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 @@ -11782,7 +11823,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 @@ -11802,15 +11843,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 @@ -11821,15 +11862,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 @@ -11840,7 +11881,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 @@ -11866,45 +11907,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 @@ -11930,8 +11939,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 @@ -11989,7 +11998,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 @@ -11998,7 +12007,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 @@ -12008,7 +12017,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 @@ -12019,7 +12028,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 @@ -12034,7 +12043,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 @@ -12049,7 +12058,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 @@ -12068,7 +12077,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 @@ -12154,19 +12163,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): @@ -12226,7 +12235,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 @@ -12253,7 +12262,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 @@ -12282,7 +12291,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 @@ -12309,7 +12318,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 @@ -12382,7 +12391,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 @@ -12391,7 +12400,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 @@ -12400,7 +12409,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 @@ -12437,7 +12446,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 @@ -12448,7 +12457,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 @@ -12457,14 +12466,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 @@ -12472,18 +12481,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 @@ -12491,12 +12500,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 @@ -12504,6 +12513,9 @@ snapshots: - supports-color - ts-node + jiti@2.7.0: + optional: true + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -12773,7 +12785,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 @@ -12791,7 +12803,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 @@ -12799,7 +12811,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 @@ -13359,7 +13371,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: {} @@ -13461,6 +13473,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: {} @@ -13528,13 +13546,13 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.12 - postcss-load-config@3.1.4(postcss@8.5.14)(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.14)(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.14 - 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.14): dependencies: @@ -14080,7 +14098,7 @@ snapshots: - bufferutil - utf-8-validate - rollup-plugin-postcss@4.0.2(postcss@8.5.14)(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.14)(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 @@ -14089,7 +14107,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.5.14 - postcss-load-config: 3.1.4(postcss@8.5.14)(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.14)(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.14) promise.series: 0.2.0 resolve: 1.22.12 @@ -14205,6 +14223,8 @@ snapshots: semver@6.3.1: {} + semver@7.7.4: {} + semver@7.8.0: {} send@0.19.2: @@ -14377,6 +14397,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: @@ -14690,12 +14712,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 @@ -14710,14 +14732,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 @@ -14730,14 +14752,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 @@ -14750,47 +14772,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: @@ -14850,13 +14831,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 @@ -15153,13 +15134,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 @@ -15171,7 +15152,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 @@ -15182,19 +15163,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 @@ -15203,24 +15184,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