From 6cdeeebcb03d154e53c4fa684742b195faa9aed0 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 15:33:45 +0200 Subject: [PATCH 1/7] Migrate to using just node with strip types --- packages/release-tools/createRelease.ts | 10 ++-- packages/release-tools/package.json | 18 ++++-- packages/release-tools/tsconfig.json | 21 +++---- .../{changelog.ts => changelog.d.ts} | 2 +- .../utils/changelog-parser/changelog.js | 58 +++++++++---------- .../utils/changelog-parser/cli.ts | 6 +- .../utils/changelog-parser/index.ts | 15 +++-- .../utils/changelog-parser/types.ts | 2 +- packages/release-tools/utils/fetch.ts | 2 +- packages/release-tools/utils/git.ts | 6 +- packages/release-tools/utils/github.ts | 8 +-- packages/release-tools/utils/index.ts | 12 ++-- packages/release-tools/utils/package-info.ts | 27 +++------ packages/release-tools/utils/shell.ts | 6 +- packages/release-tools/utils/version.ts | 21 +++++-- pnpm-lock.yaml | 33 +++-------- 16 files changed, 114 insertions(+), 133 deletions(-) mode change 100644 => 100755 packages/release-tools/createRelease.ts rename packages/release-tools/utils/changelog-parser/{changelog.ts => changelog.d.ts} (90%) diff --git a/packages/release-tools/createRelease.ts b/packages/release-tools/createRelease.ts old mode 100644 new mode 100755 index 7eeb93c1..186f14e0 --- a/packages/release-tools/createRelease.ts +++ b/packages/release-tools/createRelease.ts @@ -1,12 +1,13 @@ -import { join } from "path"; +#! /usr/bin/env node --experimental-strip-types +import { join } from "node:path"; import { addRemoteWithAuthentication, execShellCommand, getPackageInfo, gh, - PackageInfo, + type PackageInfo, ChangelogFileWrapper -} from "./utils"; +} from "./utils/index.ts"; main().catch(e => { console.error(e); @@ -34,7 +35,8 @@ async function main(): Promise { const mendixPackage = packages.get(arg); if (!mendixPackage) throw new Error(`Argument "${arg}" is not a valid package name`); - 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}...`); diff --git a/packages/release-tools/package.json b/packages/release-tools/package.json index b29ef045..1ad7ca4f 100644 --- a/packages/release-tools/package.json +++ b/packages/release-tools/package.json @@ -4,20 +4,26 @@ "description": "Scripts used for release management of the widgets tools packages.", "private": true, "main": "./createRelease.ts", + "type": "module", "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": "node --experimental-strip-types ./createRelease.ts pwt", + "release:gw": "node --experimental-strip-types ./createRelease.ts gw", + "build:release:parser": "peggy -o ./utils/changelog-parser/changelog.js ./utils/changelog-parser/changelog.pegjs", + "test": "tsc --noEmit" + }, + "engines": { + "node": "^22.18.0" }, "devDependencies": { + "@tsconfig/node-ts": "^23.6.4", + "@tsconfig/node22": "^22.0.5", "@types/node": "^16.11.19", "@types/node-fetch": "2.6.13", "peggy": "^1.2.0", - "typescript": "^4.8.4" + "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.ts b/packages/release-tools/utils/changelog-parser/changelog.d.ts similarity index 90% rename from packages/release-tools/utils/changelog-parser/changelog.ts rename to packages/release-tools/utils/changelog-parser/changelog.d.ts index da44c9b5..9765d96e 100644 --- a/packages/release-tools/utils/changelog-parser/changelog.ts +++ b/packages/release-tools/utils/changelog-parser/changelog.d.ts @@ -1,4 +1,4 @@ -import { ChangelogFile } from "./types"; +import type { ChangelogFile } from "./types.ts"; declare interface Location { line: number; diff --git a/packages/release-tools/utils/changelog-parser/changelog.js b/packages/release-tools/utils/changelog-parser/changelog.js index 5e8b1547..2d4f44f5 100644 --- a/packages/release-tools/utils/changelog-parser/changelog.js +++ b/packages/release-tools/utils/changelog-parser/changelog.js @@ -36,7 +36,7 @@ function peg$padEnd(str, targetLength, padString) { return str + padString.slice(0, targetLength); } -peg$SyntaxError.prototype.format = function (sources) { +peg$SyntaxError.prototype.format = function(sources) { var str = "Error: " + this.message; if (this.location) { var src = null; @@ -75,29 +75,29 @@ peg$SyntaxError.prototype.format = function (sources) { return str; }; -peg$SyntaxError.buildMessage = function (expected, found) { +peg$SyntaxError.buildMessage = function(expected, found) { var DESCRIBE_EXPECTATION_FNS = { - literal: function (expectation) { + literal: function(expectation) { return '"' + literalEscape(expectation.text) + '"'; }, - class: function (expectation) { - var escapedParts = expectation.parts.map(function (part) { + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); }); return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; }, - any: function () { + any: function() { return "any character"; }, - end: function () { + end: function() { return "end of input"; }, - other: function (expectation) { + other: function(expectation) { return expectation.description; } }; @@ -114,10 +114,10 @@ peg$SyntaxError.buildMessage = function (expected, found) { .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") - .replace(/[\x00-\x0F]/g, function (ch) { + .replace(/[\x00-\x0F]/g, function(ch) { return "\\x0" + hex(ch); }) - .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return "\\x" + hex(ch); }); } @@ -132,10 +132,10 @@ peg$SyntaxError.buildMessage = function (expected, found) { .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") - .replace(/[\x00-\x0F]/g, function (ch) { + .replace(/[\x00-\x0F]/g, function(ch) { return "\\x0" + hex(ch); }) - .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return "\\x" + hex(ch); }); } @@ -236,46 +236,46 @@ function peg$parse(input, options) { var peg$e19 = peg$otherExpectation("whitespace"); var peg$e20 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false); - var peg$f0 = function (header, content) { + var peg$f0 = function(header, content) { return { header, content }; }; - var peg$f1 = function (header, sections) { + var peg$f1 = function(header, sections) { return { ...header, sections }; }; - var peg$f2 = function (version, date) { + var peg$f2 = function(version, date) { return { type: "normal", version, date }; }; - var peg$f3 = function () { + var peg$f3 = function() { return { type: "unreleased" }; }; - var peg$f4 = function (title, txt) { + var peg$f4 = function(title, txt) { return { type: "note", title, text: txt }; }; - var peg$f5 = function (type, logs) { + var peg$f5 = function(type, logs) { return { type, logs }; }; - var peg$f6 = function (log) { + var peg$f6 = function(log) { return log; }; - var peg$f7 = function (txt) { + var peg$f7 = function(txt) { return txt; }; - var peg$f8 = function () { + var peg$f8 = function() { return text().trim(); }; - var peg$f9 = function () { + var peg$f9 = function() { return text(); }; - var peg$f10 = function (major, minor, patch) { + var peg$f10 = function(major, minor, patch) { return options.Version.fromParts(major, minor, patch); }; - var peg$f11 = function (year, month, day) { + var peg$f11 = function(year, month, day) { return new Date(year, month - 1, day); }; - var peg$f12 = function (txt) { + var peg$f12 = function(txt) { return txt.join("").trim(); }; - var peg$f13 = function () { + var peg$f13 = function() { return parseInt(text(), 10); }; @@ -1167,7 +1167,5 @@ function peg$parse(input, options) { } } -module.exports = { - SyntaxError: peg$SyntaxError, - parse: peg$parse -}; +export const SyntaxError = peg$SyntaxError; +export const parse = peg$parse; diff --git a/packages/release-tools/utils/changelog-parser/cli.ts b/packages/release-tools/utils/changelog-parser/cli.ts index ecc17cdc..00795968 100644 --- a/packages/release-tools/utils/changelog-parser/cli.ts +++ b/packages/release-tools/utils/changelog-parser/cli.ts @@ -1,6 +1,6 @@ -import { ChangelogFileWrapper } from "."; -import { resolve } from "path"; -import * as process from "process"; +import { ChangelogFileWrapper } from "./index.ts"; +import { resolve } from "node:path"; +import * as process from "node:process"; function reformat(filePath: string): void { try { diff --git a/packages/release-tools/utils/changelog-parser/index.ts b/packages/release-tools/utils/changelog-parser/index.ts index 6bcc02f6..ca2f0e9f 100644 --- a/packages/release-tools/utils/changelog-parser/index.ts +++ b/packages/release-tools/utils/changelog-parser/index.ts @@ -1,7 +1,7 @@ -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"; function formatHeader(header: string): string[] { return [ @@ -41,12 +41,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 { 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/fetch.ts b/packages/release-tools/utils/fetch.ts index 3421e321..4c469f13 100644 --- a/packages/release-tools/utils/fetch.ts +++ b/packages/release-tools/utils/fetch.ts @@ -1,4 +1,4 @@ -import nodefetch, { BodyInit, RequestInit } from "node-fetch"; +import nodefetch, { type BodyInit, type RequestInit } from "node-fetch"; const config = { appStoreUrl: "https://appstore.home.mendix.com/rest/packagesapi/v2" diff --git a/packages/release-tools/utils/git.ts b/packages/release-tools/utils/git.ts index 4c39cb97..eccfd494 100644 --- a/packages/release-tools/utils/git.ts +++ b/packages/release-tools/utils/git.ts @@ -1,6 +1,6 @@ -import { execSync } from "child_process"; -import { mkdir, rm } from "fs/promises"; -import { execShellCommand } from "./shell"; +import { execSync } from "node:child_process"; +import { mkdir, rm } from "node:fs/promises"; +import { execShellCommand } from "./shell.ts"; function getGHRepoAuthUrl(repoUrl: string): string { const url = new URL(repoUrl); diff --git a/packages/release-tools/utils/github.ts b/packages/release-tools/utils/github.ts index b7afc445..25cd2f5e 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; 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..9377db35 100644 --- a/packages/release-tools/utils/package-info.ts +++ b/packages/release-tools/utils/package-info.ts @@ -1,6 +1,6 @@ -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"; @@ -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..e65d5f1b 100644 --- a/packages/release-tools/utils/shell.ts +++ b/packages/release-tools/utils/shell.ts @@ -1,6 +1,6 @@ -import { exec } from "child_process"; -import { readdir } from "fs/promises"; -import { extname, resolve } from "path"; +import { exec } from "node:child_process"; +import { readdir } from "node:fs/promises"; +import { extname, resolve } from "node:path"; export function execShellCommand(cmd: string | string[], workingDirectory: string = process.cwd()): Promise { const command = Array.isArray(cmd) ? cmd.join(" && ") : cmd; diff --git a/packages/release-tools/utils/version.ts b/packages/release-tools/utils/version.ts index 4388b941..45dbe03f 100644 --- a/packages/release-tools/utils/version.ts +++ b/packages/release-tools/utils/version.ts @@ -1,12 +1,21 @@ export type VersionString = `${number}.${number}.${number}` | `${number}.${number}.${number}.${number}`; +export function isVersionString(input: unknown): input is VersionString { + return typeof input === "string" && /\d+\.\d+\.\d+/.test(input); +} + export class Version { - constructor( - public readonly major: number, - public readonly minor: number, - public readonly patch: number, - public readonly build: number | undefined - ) {} + public readonly major: number; + public readonly minor: number; + public readonly patch: number; + public readonly build: number | undefined; + + constructor(major: number, minor: number, patch: number, build?: number) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.build = build; + } bumpPatch(): Version { return new Version(this.major, this.minor, this.patch + 1, undefined); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93f9caf..9e3e83de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -397,10 +397,13 @@ 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 @@ -411,8 +414,8 @@ importers: specifier: ^1.2.0 version: 1.2.0 typescript: - specifier: ^4.8.4 - version: 4.9.5 + specifier: ^5.9.3 + version: 5.9.3 packages: @@ -14753,26 +14756,6 @@ 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): - 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 - 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@16.18.126)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 From 3cee6ff33d29a527e09c83c21a0c4cd609c0c920 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 15:58:14 +0200 Subject: [PATCH 2/7] Remove unused code or exports --- packages/release-tools/.eslintrc.js | 17 ----------- packages/release-tools/utils/fetch.ts | 15 ---------- packages/release-tools/utils/git.ts | 23 +-------------- packages/release-tools/utils/github.ts | 2 +- packages/release-tools/utils/package-info.ts | 2 +- packages/release-tools/utils/shell.ts | 30 -------------------- 6 files changed, 3 insertions(+), 86 deletions(-) delete mode 100644 packages/release-tools/.eslintrc.js 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/utils/fetch.ts b/packages/release-tools/utils/fetch.ts index 4c469f13..0cbadf26 100644 --- a/packages/release-tools/utils/fetch.ts +++ b/packages/release-tools/utils/fetch.ts @@ -1,20 +1,5 @@ import nodefetch, { type BodyInit, type 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 - }); -} - export async function fetch( method: "GET" | "POST" | "PUT" | "DELETE", url: string, diff --git a/packages/release-tools/utils/git.ts b/packages/release-tools/utils/git.ts index eccfd494..1a204654 100644 --- a/packages/release-tools/utils/git.ts +++ b/packages/release-tools/utils/git.ts @@ -1,5 +1,3 @@ -import { execSync } from "node:child_process"; -import { mkdir, rm } from "node:fs/promises"; import { execShellCommand } from "./shell.ts"; function getGHRepoAuthUrl(repoUrl: string): string { @@ -15,26 +13,7 @@ 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."); diff --git a/packages/release-tools/utils/github.ts b/packages/release-tools/utils/github.ts index 25cd2f5e..fb2b6f86 100644 --- a/packages/release-tools/utils/github.ts +++ b/packages/release-tools/utils/github.ts @@ -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/package-info.ts b/packages/release-tools/utils/package-info.ts index 9377db35..81ffb27b 100644 --- a/packages/release-tools/utils/package-info.ts +++ b/packages/release-tools/utils/package-info.ts @@ -5,7 +5,7 @@ import { isVersionString, Version, type VersionString } from "./version.ts"; // Disable changelog parser for now // import { ChangelogFileWrapper } from "./changelog-parser"; -export interface PackageJsonFileContent { +interface PackageJsonFileContent { name?: string; version?: VersionString; diff --git a/packages/release-tools/utils/shell.ts b/packages/release-tools/utils/shell.ts index e65d5f1b..9ccd1ae5 100644 --- a/packages/release-tools/utils/shell.ts +++ b/packages/release-tools/utils/shell.ts @@ -1,6 +1,4 @@ import { exec } from "node:child_process"; -import { readdir } from "node:fs/promises"; -import { extname, resolve } from "node:path"; 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))); -} From 6e02b66bcba34511c91d15791057d4eb938f61e9 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 16:13:37 +0200 Subject: [PATCH 3/7] Upgrade peggy and generate changelog types --- eslint.config.js | 3 +- packages/release-tools/package.json | 6 +- .../utils/changelog-parser/changelog.d.ts | 219 +- .../utils/changelog-parser/changelog.js | 1934 ++++++++--------- .../utils/changelog-parser/cli.ts | 23 +- pnpm-lock.yaml | 669 ++++-- 6 files changed, 1655 insertions(+), 1199 deletions(-) mode change 100644 => 100755 packages/release-tools/utils/changelog-parser/cli.ts 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/packages/release-tools/package.json b/packages/release-tools/package.json index 1ad7ca4f..56a864c8 100644 --- a/packages/release-tools/package.json +++ b/packages/release-tools/package.json @@ -8,7 +8,7 @@ "scripts": { "release:pwt": "node --experimental-strip-types ./createRelease.ts pwt", "release:gw": "node --experimental-strip-types ./createRelease.ts gw", - "build:release:parser": "peggy -o ./utils/changelog-parser/changelog.js ./utils/changelog-parser/changelog.pegjs", + "build:release:parser": "peggy -o ./utils/changelog-parser/changelog.js --dts --format es ./utils/changelog-parser/changelog.pegjs", "test": "tsc --noEmit" }, "engines": { @@ -17,9 +17,9 @@ "devDependencies": { "@tsconfig/node-ts": "^23.6.4", "@tsconfig/node22": "^22.0.5", - "@types/node": "^16.11.19", + "@types/node": "^22.18.0", "@types/node-fetch": "2.6.13", - "peggy": "^1.2.0", + "peggy": "^5.1.0", "typescript": "^5.9.3" }, "dependencies": { diff --git a/packages/release-tools/utils/changelog-parser/changelog.d.ts b/packages/release-tools/utils/changelog-parser/changelog.d.ts index 9765d96e..40e04320 100644 --- a/packages/release-tools/utils/changelog-parser/changelog.d.ts +++ b/packages/release-tools/utils/changelog-parser/changelog.d.ts @@ -1,25 +1,208 @@ -import type { ChangelogFile } from "./types.ts"; +/** 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); +} -declare interface Location { - line: number; - column: number; - offset: number; +/** + * 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; } -declare interface LocationRange { - start: Location; - end: Location; +/** + * Range of characters, like `a-z` + */ +export type ClassRange = [ + start: string, + end: string, +] + +export interface ClassParts extends Array { } -export declare class SyntaxError { - line: number; - column: number; - offset: number; - location: LocationRange; - expected: unknown[]; - found: unknown; - name: string; - message: string; +/** + * Expected a class, such as `[^acd-gz]i` + */ +export interface ClassExpectation { + readonly type: "class"; + readonly parts: ClassParts; + readonly inverted: boolean; + readonly ignoreCase: boolean; } -export declare function parse(fileContent: string, options: object): ChangelogFile; +/** + * 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 2d4f44f5..12327ca2 100644 --- a/packages/release-tools/utils/changelog-parser/changelog.js +++ b/packages/release-tools/utils/changelog-parser/changelog.js @@ -1,1171 +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; + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e18); } } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f13(); - } - 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(); + } } -export const SyntaxError = peg$SyntaxError; -export const 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/cli.ts b/packages/release-tools/utils/changelog-parser/cli.ts old mode 100644 new mode 100755 index 00795968..2a545ef2 --- a/packages/release-tools/utils/changelog-parser/cli.ts +++ b/packages/release-tools/utils/changelog-parser/cli.ts @@ -1,22 +1,23 @@ +#!/usr/bin/env node --experimental-strip-types import { ChangelogFileWrapper } from "./index.ts"; import { resolve } from "node:path"; import * as process from "node:process"; function reformat(filePath: string): void { - try { - const changelog = ChangelogFileWrapper.fromFile(filePath); - - changelog.save(); - } catch (e) { - console.log(e); - process.exit(); - } + const changelog = ChangelogFileWrapper.fromFile(filePath); + changelog.save(); + console.log("Finished formatting %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(resolve(process.argv[3])); + } + } catch (e) { + console.error(e); + process.exit(); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e3e83de..1deca68e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,28 +10,28 @@ 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)) '@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 +40,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: @@ -73,7 +73,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 @@ -121,17 +121,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 +140,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) @@ -227,10 +227,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 +248,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@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-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 @@ -405,14 +405,14 @@ importers: 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: ^5.9.3 version: 5.9.3 @@ -1800,6 +1800,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'} @@ -2340,6 +2344,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==} @@ -2352,6 +2359,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} @@ -2444,6 +2454,9 @@ packages: '@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==} @@ -4715,6 +4728,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==} @@ -5523,6 +5540,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==} @@ -6169,6 +6191,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'} @@ -6305,6 +6332,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'} @@ -7103,11 +7134,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 @@ -7995,14 +8026,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': {} @@ -8053,9 +8084,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': {} @@ -8102,6 +8133,15 @@ snapshots: optionalDependencies: '@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@22.20.1) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/confirm@6.0.13(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8109,6 +8149,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/confirm@6.0.13(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/core@11.1.10(@types/node@20.19.41)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8121,6 +8168,18 @@ snapshots: optionalDependencies: '@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@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': 22.20.1 + '@inquirer/editor@5.1.2(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8129,6 +8188,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/editor@5.1.2(@types/node@22.20.1)': + dependencies: + '@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': 22.20.1 + '@inquirer/expand@5.0.14(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8136,6 +8203,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/expand@5.0.14(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/external-editor@3.0.0(@types/node@20.19.41)': dependencies: chardet: 2.1.1 @@ -8143,6 +8217,13 @@ snapshots: optionalDependencies: '@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': 22.20.1 + '@inquirer/figures@2.0.5': {} '@inquirer/input@5.0.13(@types/node@20.19.41)': @@ -8152,6 +8233,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/input@5.0.13(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/number@4.0.13(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8159,6 +8247,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/number@4.0.13(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/password@5.0.13(@types/node@20.19.41)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8167,6 +8262,14 @@ snapshots: optionalDependencies: '@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@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/prompts@8.4.3(@types/node@20.19.41)': dependencies: '@inquirer/checkbox': 5.1.5(@types/node@20.19.41) @@ -8182,6 +8285,21 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@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': 22.20.1 + '@inquirer/rawlist@5.2.9(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8189,6 +8307,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/rawlist@5.2.9(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/search@4.1.9(@types/node@20.19.41)': dependencies: '@inquirer/core': 11.1.10(@types/node@20.19.41) @@ -8197,6 +8322,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.41 + '@inquirer/search@4.1.9(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@22.20.1) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/select@5.1.5(@types/node@20.19.41)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8206,10 +8339,23 @@ snapshots: optionalDependencies: '@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@22.20.1) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/type@4.0.5(@types/node@20.19.41)': optionalDependencies: '@types/node': 20.19.41 + '@inquirer/type@4.0.5(@types/node@22.20.1)': + optionalDependencies: + '@types/node': 22.20.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8240,7 +8386,7 @@ snapshots: '@jest/console@30.3.0': dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 chalk: 4.1.2 jest-message-util: 30.3.0 jest-util: 30.3.0 @@ -8249,7 +8395,7 @@ snapshots: '@jest/console@30.4.1': dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 20.19.41 chalk: 4.1.2 jest-message-util: 30.4.1 jest-util: 30.4.1 @@ -8263,14 +8409,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': 20.19.41 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@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) jest-haste-map: 30.3.0 jest-message-util: 30.3.0 jest-regex-util: 30.0.1 @@ -8290,7 +8436,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 @@ -8298,7 +8444,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': 20.19.41 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 @@ -8306,7 +8452,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@20.19.41)(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 @@ -8344,7 +8490,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': 20.19.41 jest-mock: 30.3.0 jest-util: 30.3.0 jsdom: 26.1.0 @@ -8353,21 +8499,21 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 20.19.41 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': 20.19.41 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': 20.19.41 jest-mock: 30.4.1 '@jest/expect-utils@30.3.0': @@ -8396,7 +8542,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8405,7 +8551,7 @@ snapshots: dependencies: '@jest/types': 30.3.0 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-message-util: 30.3.0 jest-mock: 30.3.0 jest-util: 30.3.0 @@ -8414,7 +8560,7 @@ snapshots: dependencies: '@jest/types': 30.4.1 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-message-util: 30.4.1 jest-mock: 30.4.1 jest-util: 30.4.1 @@ -8441,12 +8587,12 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-regex-util: 30.0.1 '@jest/pattern@30.4.0': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-regex-util: 30.4.0 '@jest/reporters@30.3.0': @@ -8457,7 +8603,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': 20.19.41 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8485,7 +8631,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': 20.19.41 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8628,7 +8774,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': 20.19.41 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8638,7 +8784,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': 20.19.41 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8648,7 +8794,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': 20.19.41 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8891,6 +9037,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 @@ -9463,6 +9613,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': {} @@ -9471,6 +9623,8 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tsconfig/node22@22.0.5': {} + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -9524,7 +9678,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 '@types/istanbul-lib-coverage@2.0.6': {} @@ -9549,7 +9703,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -9565,12 +9719,12 @@ 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': 20.19.41 '@types/node@16.18.126': {} @@ -9578,6 +9732,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@22.20.1': + dependencies: + undici-types: 6.21.0 + '@types/normalize-package-data@2.4.4': {} '@types/picomatch@4.0.3': {} @@ -9600,7 +9758,7 @@ snapshots: '@types/shelljs@0.10.0': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 fast-glob: 3.3.3 '@types/stack-utils@2.0.3': {} @@ -9614,11 +9772,11 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 16.18.126 + '@types/node': 20.19.41 '@types/xml2js@0.4.14': dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 '@types/yargs-parser@21.0.3': {} @@ -9626,15 +9784,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) @@ -9642,15 +9800,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) @@ -9658,26 +9816,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 @@ -9700,25 +9858,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: @@ -9741,24 +9899,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 @@ -9851,6 +10009,19 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@yeoman/adapter@4.0.2(@types/node@22.20.1)': + dependencies: + '@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@22.20.1) + log-symbols: 7.0.1 + ora: 9.4.0 + p-queue: 9.3.0 + text-table: 0.2.0 + 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)': dependencies: '@types/node': 20.19.41 @@ -9873,6 +10044,28 @@ snapshots: - react-native-b4a - supports-color + '@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': 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@22.20.1)(mem-fs@4.1.4) + minimatch: 10.2.5 + p-transform: 5.0.1 + pretty-bytes: 7.1.0 + slash: 5.1.0 + textextensions: 6.11.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color + '@yeoman/namespace@2.1.0': {} '@yeoman/transform@2.1.1(@types/node@20.19.41)': @@ -9880,6 +10073,11 @@ snapshots: '@types/node': 20.19.41 minimatch: 9.0.9 + '@yeoman/transform@2.1.1(@types/node@22.20.1)': + dependencies: + '@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)': dependencies: '@types/node': 20.19.41 @@ -9887,6 +10085,13 @@ snapshots: '@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': 22.20.1 + optionalDependencies: + '@yeoman/adapter': 4.0.2(@types/node@22.20.1) + mem-fs: 4.1.4 + abbrev@4.0.0: {} abort-controller@3.0.0: @@ -10361,7 +10566,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10370,7 +10575,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10839,71 +11044,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@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): 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) + '@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@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 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 @@ -10911,7 +11116,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 @@ -10950,9 +11155,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 @@ -10982,12 +11187,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 @@ -11021,6 +11228,8 @@ snapshots: minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -11560,6 +11769,18 @@ snapshots: optionalDependencies: '@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@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': 22.20.1 + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -11819,7 +12040,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': 20.19.41 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -11845,7 +12066,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': 20.19.41 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -11884,15 +12105,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 @@ -11935,7 +12156,39 @@ snapshots: - 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)): + jest-config@30.3.0(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + dependencies: + '@babel/core': 7.29.0 + '@jest/get-type': 30.1.0 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.3.0 + '@jest/types': 30.3.0 + babel-jest: 30.3.0(@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.3.0 + jest-docblock: 30.2.0 + jest-environment-node: 30.3.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.3.0 + jest-runner: 30.3.0 + jest-util: 30.3.0 + jest-validate: 30.3.0 + parse-json: 5.2.0 + pretty-format: 30.3.0 + 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@16.18.126)(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@22.20.1)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 @@ -11961,13 +12214,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@20.19.41)(typescript@5.9.3) + '@types/node': 20.19.41 + 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 @@ -11993,8 +12246,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 @@ -12052,7 +12305,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': 20.19.41 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12061,7 +12314,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': 20.19.41 jest-mock: 30.3.0 jest-util: 30.3.0 jest-validate: 30.3.0 @@ -12071,7 +12324,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': 20.19.41 jest-mock: 30.4.1 jest-util: 30.4.1 jest-validate: 30.4.1 @@ -12082,7 +12335,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.126 + '@types/node': 20.19.41 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12097,7 +12350,7 @@ snapshots: jest-haste-map@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12112,7 +12365,7 @@ snapshots: jest-haste-map@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 20.19.41 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12131,7 +12384,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': 20.19.41 chalk: 4.1.2 co: 4.6.0 is-generator-fn: 2.1.0 @@ -12217,19 +12470,19 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-util: 29.7.0 jest-mock@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-util: 30.3.0 jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 20.19.41 jest-util: 30.4.1 jest-pnp-resolver@1.2.3(jest-resolve@30.3.0): @@ -12289,7 +12542,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': 20.19.41 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12316,7 +12569,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': 20.19.41 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12345,7 +12598,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': 20.19.41 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12372,7 +12625,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': 20.19.41 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12445,7 +12698,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.126 + '@types/node': 20.19.41 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12454,7 +12707,7 @@ snapshots: jest-util@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12463,7 +12716,7 @@ snapshots: jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 20.19.41 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12500,7 +12753,7 @@ snapshots: dependencies: '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 16.18.126 + '@types/node': 20.19.41 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12511,7 +12764,7 @@ snapshots: dependencies: '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 16.18.126 + '@types/node': 20.19.41 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12520,14 +12773,14 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 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': 20.19.41 '@ungap/structured-clone': 1.3.1 jest-util: 30.3.0 merge-stream: 2.0.0 @@ -12535,7 +12788,7 @@ snapshots: jest-worker@30.4.1: dependencies: - '@types/node': 16.18.126 + '@types/node': 20.19.41 '@ungap/structured-clone': 1.3.1 jest-util: 30.4.1 merge-stream: 2.0.0 @@ -12554,12 +12807,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 @@ -12567,6 +12820,9 @@ snapshots: - supports-color - ts-node + jiti@2.7.0: + optional: true + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -12858,6 +13114,30 @@ snapshots: - react-native-b4a - supports-color + 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 + binaryextensions: 6.11.0 + commondir: 1.0.1 + debug: 4.4.3 + deep-extend: 0.6.0 + ejs: 5.0.2 + isbinaryfile: 5.0.7 + mem-fs: 4.1.4 + minimatch: 10.2.5 + multimatch: 8.0.0 + normalize-path: 3.0.0 + textextensions: 6.11.0 + tinyglobby: 0.2.16 + vinyl: 3.0.1 + optionalDependencies: + '@types/node': 22.20.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color + mem-fs@4.1.4: dependencies: '@types/node': 20.19.41 @@ -13522,6 +13802,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: {} @@ -14251,6 +14537,8 @@ snapshots: semver@6.3.1: {} + semver@7.7.4: {} + semver@7.8.0: {} send@0.19.2: @@ -14423,6 +14711,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: @@ -14796,14 +15086,14 @@ snapshots: 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): + 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': 20.19.41 + '@types/node': 22.20.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -14876,13 +15166,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 @@ -15208,6 +15498,35 @@ snapshots: - react-native-b4a - supports-color + 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@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@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 + debug: 4.4.3 + execa: 9.6.1 + fly-import: 1.0.0 + globby: 16.2.0 + grouped-queue: 2.1.0 + locate-path: 8.0.0 + lodash-es: 4.18.1 + 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 + which-package-manager: 1.0.1 + transitivePeerDependencies: + - '@types/node' + - bare-abort-controller + - 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): dependencies: '@types/debug': 4.1.13 @@ -15234,6 +15553,34 @@ snapshots: - bare-abort-controller - react-native-b4a - supports-color + optional: true + + 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@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@22.20.1)(mem-fs@4.1.4) + minimist: 1.2.8 + read-package-up: 12.0.0 + semver: 7.8.0 + simple-git: 3.36.0 + sort-keys: 6.0.0 + text-table: 0.2.0 + type-fest: 5.6.0 + optionalDependencies: + '@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)): dependencies: From bdccd5102482ed89cb78737c25eccb0b741b6b62 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 16:18:35 +0200 Subject: [PATCH 4/7] Improve error logging --- packages/release-tools/createRelease.ts | 52 +++++++------ .../utils/changelog-parser/cli.ts | 26 ++++++- .../utils/changelog-parser/index.ts | 10 ++- packages/release-tools/utils/errors.ts | 73 +++++++++++++++++++ packages/release-tools/utils/git.ts | 5 +- 5 files changed, 139 insertions(+), 27 deletions(-) create mode 100644 packages/release-tools/utils/errors.ts diff --git a/packages/release-tools/createRelease.ts b/packages/release-tools/createRelease.ts index 186f14e0..b169525b 100755 --- a/packages/release-tools/createRelease.ts +++ b/packages/release-tools/createRelease.ts @@ -8,32 +8,43 @@ import { type PackageInfo, ChangelogFileWrapper } from "./utils/index.ts"; +import { ArgumentError, handleError } from "./utils/errors.ts"; +import { format } from "node:util"; + +const packages = new Map([ + [ + "pwt", + { + name: "pluggable-widgets-tools", + fullName: "Pluggable Widgets Tools" + } + ], + [ + "gw", + { + name: "generator-widget", + fullName: "Pluggable Widgets Generator" + } + ] +]); main().catch(e => { - console.error(e); - process.exit(-1); + handleError( + e, + format( + "\nUsage: %s \n\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("package name", arg); + const branch = process.argv[3]; + if (!branch) throw new ArgumentError("branch", branch); const dirname = new URL("./", import.meta.url).pathname; const pwtPath = join(dirname, "../", mendixPackage.name); @@ -57,8 +68,7 @@ async function main(): Promise { // 2.2. Check if there is something to release (entries under "Unreleased" section) if (!changelog.hasUnreleasedLogs()) { throw new Error( - `No unreleased changes found in the CHANGELOG.md for ${ - packageInfo.packageName + `No unreleased changes found in the CHANGELOG.md for ${packageInfo.packageName } ${packageInfo.version.format()}.` ); } diff --git a/packages/release-tools/utils/changelog-parser/cli.ts b/packages/release-tools/utils/changelog-parser/cli.ts index 2a545ef2..d6939cd6 100755 --- a/packages/release-tools/utils/changelog-parser/cli.ts +++ b/packages/release-tools/utils/changelog-parser/cli.ts @@ -2,21 +2,41 @@ 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 { +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 { try { switch (process.argv[2]) { case "reformat": - return reformat(resolve(process.argv[3])); + return reformat(process.argv[3]); + case "parse": + return parse(process.argv[3]); + default: + throw new ArgumentError("command of reformat", process.argv[2]); } } catch (e) { - console.error(e); + handleError(e, format("Usage: %s\n\treformat \n\tparse ", process.argv[1])); process.exit(); } } diff --git a/packages/release-tools/utils/changelog-parser/index.ts b/packages/release-tools/utils/changelog-parser/index.ts index ca2f0e9f..d51587dd 100644 --- a/packages/release-tools/utils/changelog-parser/index.ts +++ b/packages/release-tools/utils/changelog-parser/index.ts @@ -2,6 +2,7 @@ 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 [ @@ -94,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/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/git.ts b/packages/release-tools/utils/git.ts index 1a204654..f898aaa7 100644 --- a/packages/release-tools/utils/git.ts +++ b/packages/release-tools/utils/git.ts @@ -1,10 +1,11 @@ +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; @@ -16,7 +17,7 @@ function getGHRepoAuthUrl(repoUrl: string): string { 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); From 2dd605855f0004c634676afb72049075f8494730 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 18:27:31 +0200 Subject: [PATCH 5/7] Lint changelog on each push --- .github/workflows/UnitTests.yml | 15 +++++++++++++++ package.json | 1 + packages/generator-widget/package.json | 3 ++- packages/pluggable-widgets-tools/package.json | 1 + packages/release-tools/createRelease.ts | 3 ++- packages/release-tools/package.json | 6 +++++- .../release-tools/utils/changelog-parser/cli.ts | 9 ++++++--- pnpm-lock.yaml | 3 +++ 8 files changed, 35 insertions(+), 6 deletions(-) diff --git a/.github/workflows/UnitTests.yml b/.github/workflows/UnitTests.yml index 094da009..95c85000 100644 --- a/.github/workflows/UnitTests.yml +++ b/.github/workflows/UnitTests.yml @@ -40,3 +40,18 @@ jobs: - name: "Linting packages" run: pnpm lint + + - name: "Linting changelogs" + run: | + failures=0 + for changelog in $(find . -type f -name CHANGELOG.md -mindepth 3 -maxdepth 3); do + echo "Parsing $changelog" + if pnpm exec changelog-parser parse $changelog; then + : + else + : $((failures++)) + fi + done + if [[ $failures -gt 0 ]]; then + exit 1; + fi diff --git a/package.json b/package.json index 31903fd2..12f98621 100644 --- a/package.json +++ b/package.json @@ -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/generator-widget/package.json b/packages/generator-widget/package.json index 13d09874..7b346213 100644 --- a/packages/generator-widget/package.json +++ b/packages/generator-widget/package.json @@ -9,7 +9,8 @@ "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/package.json b/packages/pluggable-widgets-tools/package.json index 40cd838d..78c864a1 100644 --- a/packages/pluggable-widgets-tools/package.json +++ b/packages/pluggable-widgets-tools/package.json @@ -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" diff --git a/packages/release-tools/createRelease.ts b/packages/release-tools/createRelease.ts index b169525b..70f3044f 100755 --- a/packages/release-tools/createRelease.ts +++ b/packages/release-tools/createRelease.ts @@ -68,7 +68,8 @@ async function main(): Promise { // 2.2. Check if there is something to release (entries under "Unreleased" section) if (!changelog.hasUnreleasedLogs()) { throw new Error( - `No unreleased changes found in the CHANGELOG.md for ${packageInfo.packageName + `No unreleased changes found in the CHANGELOG.md for ${ + packageInfo.packageName } ${packageInfo.version.format()}.` ); } diff --git a/packages/release-tools/package.json b/packages/release-tools/package.json index 56a864c8..494b0586 100644 --- a/packages/release-tools/package.json +++ b/packages/release-tools/package.json @@ -1,10 +1,14 @@ { - "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": "node --experimental-strip-types ./createRelease.ts pwt", "release:gw": "node --experimental-strip-types ./createRelease.ts gw", diff --git a/packages/release-tools/utils/changelog-parser/cli.ts b/packages/release-tools/utils/changelog-parser/cli.ts index d6939cd6..a3bc4d58 100755 --- a/packages/release-tools/utils/changelog-parser/cli.ts +++ b/packages/release-tools/utils/changelog-parser/cli.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env node --experimental-strip-types +#!/usr/bin/env -S node --experimental-strip-types import { ChangelogFileWrapper } from "./index.ts"; import { resolve } from "node:path"; import * as process from "node:process"; @@ -36,8 +36,11 @@ function main(): void { throw new ArgumentError("command of reformat", process.argv[2]); } } catch (e) { - handleError(e, format("Usage: %s\n\treformat \n\tparse ", process.argv[1])); - process.exit(); + handleError( + e, + format("Usage: %s \n\nCommands:\n\treformat \n\tparse ", process.argv[1]) + ); + process.exit(1); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1deca68e..91600b5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@eslint/js': specifier: ^10.0.1 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) From 1d58d92327cbfbcc85d8f2b21b3e1b3229d0970e Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Wed, 29 Jul 2026 19:02:11 +0200 Subject: [PATCH 6/7] Set node version to 22 --- .github/workflows/TestPWTCommands.yml | 3 +- .nvmrc | 2 +- package.json | 2 +- packages/command-tests/package.json | 2 +- packages/generator-widget/CHANGELOG.md | 1 + .../outputs/package_native.json-js-unit.json | 2 +- .../outputs/package_native.json-js.json | 2 +- .../outputs/package_native.json-ts-unit.json | 2 +- .../outputs/package_native.json-ts.json | 2 +- .../outputs/package_web.json-js-e2e.json | 2 +- .../outputs/package_web.json-js-unit-e2e.json | 2 +- .../outputs/package_web.json-js-unit.json | 2 +- .../outputs/package_web.json-js.json | 2 +- .../outputs/package_web.json-ts-e2e.json | 2 +- .../outputs/package_web.json-ts-unit-e2e.json | 2 +- .../outputs/package_web.json-ts-unit.json | 2 +- .../outputs/package_web.json-ts.json | 2 +- .../packages/package_native.json.ejs | 2 +- .../templates/packages/package_web.json.ejs | 2 +- packages/generator-widget/package.json | 2 +- packages/pluggable-widgets-tools/CHANGELOG.md | 4 + packages/pluggable-widgets-tools/package.json | 4 +- .../pluggable-widgets-tools/tsconfig.json | 4 +- pnpm-lock.yaml | 542 +++--------------- 24 files changed, 123 insertions(+), 471 deletions(-) diff --git a/.github/workflows/TestPWTCommands.yml b/.github/workflows/TestPWTCommands.yml index 13deb0f1..6090d0c7 100644 --- a/.github/workflows/TestPWTCommands.yml +++ b/.github/workflows/TestPWTCommands.yml @@ -20,11 +20,10 @@ on: jobs: test: - name: "Script tests (Node ${{ matrix.node }}, ${{ matrix.os }})" + name: "Script tests (${{ matrix.os }})" runs-on: ${{ matrix.os }} strategy: matrix: - node: [20] os: [windows-latest, ubuntu-latest] steps: - name: "Checking-out code" diff --git a/.nvmrc b/.nvmrc index ccc4c6c7..c9471194 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.20.2 +22.23.2 diff --git a/package.json b/package.json index 12f98621..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", diff --git a/packages/command-tests/package.json b/packages/command-tests/package.json index 74edf49c..3dd153bb 100644 --- a/packages/command-tests/package.json +++ b/packages/command-tests/package.json @@ -13,7 +13,7 @@ "@mendix/pluggable-widgets-tools": "workspace:*", "@prettier/plugin-xml": "^2.2.0", "@types/jest-image-snapshot": "^4.3.1", - "@types/node": "^20.14.8", + "@types/node": "^22.18.0", "@types/shelljs": "^0.10.0", "@types/xml2js": "^0.4.5", "async-mutex": "^0.5.0", diff --git a/packages/generator-widget/CHANGELOG.md b/packages/generator-widget/CHANGELOG.md index 2aa2b3cf..0e687165 100644 --- a/packages/generator-widget/CHANGELOG.md +++ b/packages/generator-widget/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - We cleaned up a template with unused imports. +- We increased the minimum node version to 22. ## [11.11.0] - 2026-06-04 diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json index 08cffe5c..6bde4930 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json index 4bd5d7b6..05986161 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json index 3e038020..516219c6 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json index 6155da66..c1ae700c 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json index 0a77cae6..6fb2f2e3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json index 49c37938..ff7973a1 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json index d1d80190..267e1151 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json index 4b2b2132..370c88bd 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json index 761cf8d1..fc05b579 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json index 22a6ff61..0f96ad9d 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json index b1d7c49f..bea8e0e3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json index f81db78d..f1488729 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json @@ -6,7 +6,7 @@ "copyright": "Mendix 2023", "author": "Jest", "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": "Apache-2.0", "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs index d6e15df1..976a52d8 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs @@ -6,7 +6,7 @@ "copyright": <%- JSON.stringify(copyright) %>, "author": <%- JSON.stringify(author) %>, "engines": { - "node": ">=20" + "node": "^22.18.0" }, "license": <%- JSON.stringify(license) %>, "config": { diff --git a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs index a303a1b3..848b1725 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs @@ -6,7 +6,7 @@ "copyright": <%- JSON.stringify(copyright) %>, "author": <%- JSON.stringify(author) %>, "engines": { - "node": ">=16" + "node": "^22.18.0" }, "license": <%- JSON.stringify(license) %>, "config": { diff --git a/packages/generator-widget/package.json b/packages/generator-widget/package.json index 7b346213..6fc7f287 100644 --- a/packages/generator-widget/package.json +++ b/packages/generator-widget/package.json @@ -4,7 +4,7 @@ "description": "Mendix Pluggable Widgets Generator", "type": "module", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "bin": "./bin.js", "main": "generators/app/index.js", diff --git a/packages/pluggable-widgets-tools/CHANGELOG.md b/packages/pluggable-widgets-tools/CHANGELOG.md index f26e8e40..9d25aa9b 100644 --- a/packages/pluggable-widgets-tools/CHANGELOG.md +++ b/packages/pluggable-widgets-tools/CHANGELOG.md @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - We fixed an issue with the Jest configuration affecting unit tests for widgets importing enums from the mendix package (e.g. ValueStatus, FormatterType). It would cause tests to fail with the error "This package should not be used in the runtime". +### Changed + +- We increased the minimum node version to 22. + ## [11.12.0] - 2026-06-30 ### Changed diff --git a/packages/pluggable-widgets-tools/package.json b/packages/pluggable-widgets-tools/package.json index 78c864a1..3c3cd923 100644 --- a/packages/pluggable-widgets-tools/package.json +++ b/packages/pluggable-widgets-tools/package.json @@ -3,7 +3,7 @@ "version": "11.12.0", "description": "Mendix Pluggable Widgets Tools", "engines": { - "node": ">=20" + "node": "^22.18.0" }, "main": "dist/index.js", "types": "dist/index.d.ts", @@ -109,7 +109,7 @@ }, "devDependencies": { "@types/jest": "^30.0.0", - "@types/node": "^16.18.126", + "@types/node": "^22.18.0", "@types/xml2js": "^0.4.5", "react": "^19.2.5", "react-dom": "^19.2.5", diff --git a/packages/pluggable-widgets-tools/tsconfig.json b/packages/pluggable-widgets-tools/tsconfig.json index ebfe4142..393bc4d3 100644 --- a/packages/pluggable-widgets-tools/tsconfig.json +++ b/packages/pluggable-widgets-tools/tsconfig.json @@ -3,8 +3,8 @@ "include": ["./src"], "compilerOptions": { "module": "commonjs", - "lib": ["es2015"], - "target": "es2015", + "lib": ["es2024", "ESNext.Array", "ESNext.Collection", "ESNext.Iterator"], + "target": "es2022", "noImplicitAny": true, "noImplicitReturns": true, "noImplicitThis": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91600b5e..8a80c6a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,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 @@ -100,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: @@ -212,7 +212,7 @@ importers: version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@testing-library/react-native': specifier: ^13.3.3 - version: 13.3.3(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6) + version: 13.3.3(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -257,7 +257,7 @@ importers: 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(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@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(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@2.8.8) @@ -287,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 @@ -344,7 +344,7 @@ importers: version: 2.0.5 rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + version: 4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) rollup-plugin-re: specifier: ^1.0.7 version: 1.0.7 @@ -362,10 +362,10 @@ importers: version: 0.4.0 ts-jest: specifier: ^29.4.9 - version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) typescript: specifier: ^5.6.3 version: 5.9.3 @@ -380,8 +380,8 @@ importers: specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^16.18.126 - version: 16.18.126 + specifier: ^22.18.0 + version: 22.20.1 '@types/xml2js': specifier: ^0.4.5 version: 0.4.14 @@ -2451,12 +2451,6 @@ 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==} @@ -8127,15 +8121,6 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.5(@types/node@20.19.41)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/checkbox@5.1.5(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8145,13 +8130,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/confirm@6.0.13(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/confirm@6.0.13(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8159,18 +8137,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/core@11.1.10(@types/node@20.19.41)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) - 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 - '@inquirer/core@11.1.10(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8183,14 +8149,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/editor@5.1.2(@types/node@20.19.41)': - 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) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/editor@5.1.2(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8199,13 +8157,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/expand@5.0.14(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/expand@5.0.14(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8213,13 +8164,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/external-editor@3.0.0(@types/node@20.19.41)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/external-editor@3.0.0(@types/node@22.20.1)': dependencies: chardet: 2.1.1 @@ -8229,13 +8173,6 @@ snapshots: '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.13(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/input@5.0.13(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8243,13 +8180,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/number@4.0.13(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/number@4.0.13(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8257,14 +8187,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/password@5.0.13(@types/node@20.19.41)': - 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) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/password@5.0.13(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8273,21 +8195,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@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) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/prompts@8.4.3(@types/node@22.20.1)': dependencies: '@inquirer/checkbox': 5.1.5(@types/node@22.20.1) @@ -8303,13 +8210,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/rawlist@5.2.9(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/rawlist@5.2.9(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8317,14 +8217,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/search@4.1.9(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/search@4.1.9(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -8333,15 +8225,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/select@5.1.5(@types/node@20.19.41)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/select@5.1.5(@types/node@22.20.1)': dependencies: '@inquirer/ansi': 2.0.5 @@ -8351,10 +8234,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/type@4.0.5(@types/node@20.19.41)': - optionalDependencies: - '@types/node': 20.19.41 - '@inquirer/type@4.0.5(@types/node@22.20.1)': optionalDependencies: '@types/node': 22.20.1 @@ -8389,7 +8268,7 @@ snapshots: '@jest/console@30.3.0': dependencies: '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 jest-message-util: 30.3.0 jest-util: 30.3.0 @@ -8398,13 +8277,13 @@ snapshots: '@jest/console@30.4.1': dependencies: '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@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 @@ -8412,14 +8291,14 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@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@20.19.41)(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 @@ -8447,7 +8326,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 @@ -8455,7 +8334,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 jest-changed-files: 30.4.1 - jest-config: 30.4.2(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(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 @@ -8493,7 +8372,7 @@ snapshots: '@jest/fake-timers': 30.3.0 '@jest/types': 30.3.0 '@types/jsdom': 21.1.7 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-mock: 30.3.0 jest-util: 30.3.0 jsdom: 26.1.0 @@ -8502,21 +8381,21 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.41 + '@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': 20.19.41 + '@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': 20.19.41 + '@types/node': 22.20.1 jest-mock: 30.4.1 '@jest/expect-utils@30.3.0': @@ -8545,7 +8424,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8554,7 +8433,7 @@ snapshots: dependencies: '@jest/types': 30.3.0 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-message-util: 30.3.0 jest-mock: 30.3.0 jest-util: 30.3.0 @@ -8563,7 +8442,7 @@ snapshots: dependencies: '@jest/types': 30.4.1 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-message-util: 30.4.1 jest-mock: 30.4.1 jest-util: 30.4.1 @@ -8590,12 +8469,12 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-regex-util: 30.0.1 '@jest/pattern@30.4.0': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-regex-util: 30.4.0 '@jest/reporters@30.3.0': @@ -8606,7 +8485,7 @@ snapshots: '@jest/transform': 30.3.0 '@jest/types': 30.3.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8634,7 +8513,7 @@ snapshots: '@jest/transform': 30.4.1 '@jest/types': 30.4.1 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -8777,7 +8656,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8787,7 +8666,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -8797,7 +8676,7 @@ snapshots: '@jest/schemas': 30.4.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -9590,7 +9469,7 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react-native@13.3.3(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6)': + '@testing-library/react-native@13.3.3(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(react-native@0.78.3(@babel/core@7.29.0)(@babel/preset-env@7.29.5(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.6))(react-test-renderer@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: jest-matcher-utils: 30.4.1 picocolors: 1.1.1 @@ -9600,7 +9479,7 @@ snapshots: react-test-renderer: 19.2.6(react@19.2.6) redent: 3.0.0 optionalDependencies: - jest: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -9681,7 +9560,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -9706,7 +9585,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -9727,13 +9606,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 20.19.41 - - '@types/node@16.18.126': {} - - '@types/node@20.19.41': - dependencies: - undici-types: 6.21.0 + '@types/node': 22.20.1 '@types/node@22.20.1': dependencies: @@ -9745,7 +9618,7 @@ snapshots: '@types/pixelmatch@5.2.6': dependencies: - '@types/node': 16.18.126 + '@types/node': 22.20.1 '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: @@ -9761,7 +9634,7 @@ snapshots: '@types/shelljs@0.10.0': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 fast-glob: 3.3.3 '@types/stack-utils@2.0.3': {} @@ -9775,11 +9648,11 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/xml2js@0.4.14': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/yargs-parser@21.0.3': {} @@ -9999,19 +9872,6 @@ snapshots: dependencies: chevrotain: 7.1.1 - '@yeoman/adapter@4.0.2(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 11.1.10(@types/node@20.19.41) - '@inquirer/prompts': 8.4.3(@types/node@20.19.41) - chalk: 5.6.2 - inquirer: 13.4.3(@types/node@20.19.41) - log-symbols: 7.0.1 - ora: 9.4.0 - p-queue: 9.3.0 - text-table: 0.2.0 - transitivePeerDependencies: - - '@types/node' - '@yeoman/adapter@4.0.2(@types/node@22.20.1)': dependencies: '@inquirer/core': 11.1.10(@types/node@22.20.1) @@ -10025,28 +9885,6 @@ 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)': - 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) - 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) - minimatch: 10.2.5 - p-transform: 5.0.1 - pretty-bytes: 7.1.0 - slash: 5.1.0 - textextensions: 6.11.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - supports-color - '@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': 22.20.1 @@ -10071,23 +9909,11 @@ snapshots: '@yeoman/namespace@2.1.0': {} - '@yeoman/transform@2.1.1(@types/node@20.19.41)': - dependencies: - '@types/node': 20.19.41 - minimatch: 9.0.9 - '@yeoman/transform@2.1.1(@types/node@22.20.1)': dependencies: '@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)': - dependencies: - '@types/node': 20.19.41 - optionalDependencies: - '@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': 22.20.1 @@ -10569,7 +10395,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10578,7 +10404,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -11070,13 +10896,13 @@ snapshots: 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(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@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(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(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@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)) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11760,18 +11586,6 @@ snapshots: ini@6.0.0: {} - inquirer@13.4.3(@types/node@20.19.41): - 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) - mute-stream: 3.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 20.19.41 - inquirer@13.4.3(@types/node@22.20.1): dependencies: '@inquirer/ansi': 2.0.5 @@ -12043,7 +11857,7 @@ snapshots: '@jest/expect': 30.3.0 '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -12069,7 +11883,7 @@ snapshots: '@jest/expect': 30.4.1 '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -12089,15 +11903,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + jest-cli@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: - '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest-config: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) jest-util: 30.3.0 jest-validate: 30.3.0 yargs: 17.7.2 @@ -12127,7 +11941,7 @@ snapshots: - supports-color - ts-node - jest-config@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + jest-config@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 @@ -12153,71 +11967,7 @@ 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.3.0(@types/node@20.19.41)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): - dependencies: - '@babel/core': 7.29.0 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.3.0 - '@jest/types': 30.3.0 - babel-jest: 30.3.0(@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.3.0 - jest-docblock: 30.2.0 - jest-environment-node: 30.3.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.3.0 - jest-runner: 30.3.0 - jest-util: 30.3.0 - jest-validate: 30.3.0 - parse-json: 5.2.0 - pretty-format: 30.3.0 - 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@16.18.126)(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@22.20.1)(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': 20.19.41 + '@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 @@ -12308,7 +12058,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12317,7 +12067,7 @@ snapshots: '@jest/environment': 30.3.0 '@jest/fake-timers': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-mock: 30.3.0 jest-util: 30.3.0 jest-validate: 30.3.0 @@ -12327,7 +12077,7 @@ snapshots: '@jest/environment': 30.4.1 '@jest/fake-timers': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-mock: 30.4.1 jest-util: 30.4.1 jest-validate: 30.4.1 @@ -12338,7 +12088,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.41 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12353,7 +12103,7 @@ snapshots: jest-haste-map@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12368,7 +12118,7 @@ snapshots: jest-haste-map@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12387,7 +12137,7 @@ snapshots: '@jest/source-map': 30.0.1 '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 is-generator-fn: 2.1.0 @@ -12473,19 +12223,19 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-util: 29.7.0 jest-mock@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-util: 30.3.0 jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 jest-util: 30.4.1 jest-pnp-resolver@1.2.3(jest-resolve@30.3.0): @@ -12545,7 +12295,7 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12572,7 +12322,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -12601,7 +12351,7 @@ snapshots: '@jest/test-result': 30.3.0 '@jest/transform': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12628,7 +12378,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -12701,7 +12451,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12710,7 +12460,7 @@ snapshots: jest-util@30.3.0: dependencies: '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12719,7 +12469,7 @@ snapshots: jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -12756,7 +12506,7 @@ snapshots: dependencies: '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 - '@types/node': 20.19.41 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12767,7 +12517,7 @@ snapshots: dependencies: '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 20.19.41 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12776,14 +12526,14 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.19.41 + '@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': 20.19.41 + '@types/node': 22.20.1 '@ungap/structured-clone': 1.3.1 jest-util: 30.3.0 merge-stream: 2.0.0 @@ -12791,18 +12541,18 @@ snapshots: jest-worker@30.4.1: dependencies: - '@types/node': 20.19.41 + '@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 @@ -13093,30 +12843,6 @@ snapshots: mdn-data@2.0.14: {} - mem-fs-editor@12.0.4(@types/node@20.19.41)(mem-fs@4.1.4): - dependencies: - '@types/ejs': 3.1.5 - '@types/picomatch': 4.0.3 - binaryextensions: 6.11.0 - commondir: 1.0.1 - debug: 4.4.3 - deep-extend: 0.6.0 - ejs: 5.0.2 - isbinaryfile: 5.0.7 - mem-fs: 4.1.4 - minimatch: 10.2.5 - multimatch: 8.0.0 - normalize-path: 3.0.0 - textextensions: 6.11.0 - tinyglobby: 0.2.16 - vinyl: 3.0.1 - optionalDependencies: - '@types/node': 20.19.41 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - supports-color - mem-fs-editor@12.0.4(@types/node@22.20.1)(mem-fs@4.1.4): dependencies: '@types/ejs': 3.1.5 @@ -13143,7 +12869,7 @@ snapshots: mem-fs@4.1.4: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 '@types/vinyl': 2.0.12 vinyl: 3.0.1 vinyl-file: 5.0.0 @@ -13703,7 +13429,7 @@ snapshots: p-transform@5.0.1: dependencies: - '@types/node': 20.19.41 + '@types/node': 22.20.1 p-queue: 8.1.1 p-try@2.2.0: {} @@ -13878,13 +13604,13 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.12 - postcss-load-config@3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + postcss-load-config@3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: postcss: 8.5.23 - ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3) postcss-merge-longhand@5.1.7(postcss@8.5.23): dependencies: @@ -14419,7 +14145,7 @@ snapshots: - bufferutil - utf-8-validate - rollup-plugin-postcss@4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)): + rollup-plugin-postcss@4.0.2(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -14428,7 +14154,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.5.23 - postcss-load-config: 3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + postcss-load-config: 3.1.4(postcss@8.5.23)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) postcss-modules: 4.3.1(postcss@8.5.23) promise.series: 0.2.0 resolve: 1.22.12 @@ -15029,12 +14755,12 @@ snapshots: dependencies: typescript: 5.9.3 - ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.4.1)(jest@30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 30.3.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3)) + jest: 30.3.0(@types/node@22.20.1)(ts-node@10.9.2(@swc/core@1.15.41)(@types/node@22.20.1)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -15049,34 +14775,14 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.29.0) jest-util: 30.4.1 - ts-node@10.9.2(@swc/core@1.15.41)(@types/node@16.18.126)(typescript@5.9.3): + 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 - 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 - - 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 + '@types/node': 22.20.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -15108,7 +14814,6 @@ snapshots: yn: 3.1.1 optionalDependencies: '@swc/core': 1.15.41 - optional: true tslib@2.8.1: {} @@ -15472,35 +15177,6 @@ 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): - 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/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) - arrify: 3.0.0 - chalk: 5.6.2 - commander: 14.0.3 - debug: 4.4.3 - execa: 9.6.1 - fly-import: 1.0.0 - globby: 16.2.0 - grouped-queue: 2.1.0 - 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) - semver: 7.8.0 - slash: 5.1.0 - untildify: 6.0.0 - which-package-manager: 1.0.1 - transitivePeerDependencies: - - '@types/node' - - bare-abort-controller - - react-native-b4a - - supports-color - 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@22.20.1) @@ -15530,34 +15206,6 @@ 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): - 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) - 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) - minimist: 1.2.8 - read-package-up: 12.0.0 - semver: 7.8.0 - simple-git: 3.36.0 - sort-keys: 6.0.0 - text-table: 0.2.0 - type-fest: 5.6.0 - optionalDependencies: - '@types/node': 20.19.41 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - supports-color - optional: true - 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 @@ -15585,18 +15233,18 @@ snapshots: - 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 From a160b98ae0807771807be4711ab6710b35d71153 Mon Sep 17 00:00:00 2001 From: Arjo Bruijnes Date: Thu, 30 Jul 2026 13:43:33 +0200 Subject: [PATCH 7/7] Allow release workflow to specify release branch --- .github/workflows/CreateGWRelease.yml | 44 ------------------- ...PWTRelease.yml => CreateGithubRelease.yml} | 19 +++++--- packages/release-tools/createRelease.ts | 31 ++++++++----- packages/release-tools/package.json | 4 +- 4 files changed, 35 insertions(+), 63 deletions(-) delete mode 100644 .github/workflows/CreateGWRelease.yml rename .github/workflows/{CreatePWTRelease.yml => CreateGithubRelease.yml} (75%) 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/packages/release-tools/createRelease.ts b/packages/release-tools/createRelease.ts index 70f3044f..15307dfd 100755 --- a/packages/release-tools/createRelease.ts +++ b/packages/release-tools/createRelease.ts @@ -1,4 +1,4 @@ -#! /usr/bin/env node --experimental-strip-types +#! /usr/bin/env -S node --experimental-strip-types import { join } from "node:path"; import { addRemoteWithAuthentication, @@ -13,14 +13,14 @@ import { format } from "node:util"; const packages = new Map([ [ - "pwt", + "pluggable-widgets-tools", { name: "pluggable-widgets-tools", fullName: "Pluggable Widgets Tools" } ], [ - "gw", + "generator-widget", { name: "generator-widget", fullName: "Pluggable Widgets Generator" @@ -32,7 +32,7 @@ main().catch(e => { handleError( e, format( - "\nUsage: %s \n\nRequired environment variables: GH_NAME, GH_EMAIL, GH_USERNAME, GH_PAT", + "\nUsage: %s \nRequired environment variables: GH_NAME, GH_EMAIL, GH_USERNAME, GH_PAT", process.argv[1] ) ); @@ -42,23 +42,29 @@ main().catch(e => { async function main(): Promise { const arg = process.argv[2]; const mendixPackage = packages.get(arg); - if (!mendixPackage) throw new ArgumentError("package name", arg); + if (!mendixPackage) + throw new ArgumentError(format("package name of (%s)", packages.keys().toArray().join(", ")), arg); const branch = process.argv[3]; - if (!branch) throw new ArgumentError("branch", branch); + if (!branch || !/^(master|version\/.*)$/.test(branch)) + throw new ArgumentError("branch name of (master, version/*)", branch); 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)) { @@ -90,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..."); @@ -112,7 +118,8 @@ async function updateChangelogsAndCreatePR( packageInfo: PackageInfo, changelog: ChangelogFileWrapper, releaseTag: string, - remoteName: string + remoteName: string, + branch: string ): Promise { const releaseBranchName = `${releaseTag}-update-changelog`; @@ -134,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 494b0586..19ecb461 100644 --- a/packages/release-tools/package.json +++ b/packages/release-tools/package.json @@ -10,8 +10,8 @@ "changelog-parser": "./utils/changelog-parser/cli.ts" }, "scripts": { - "release:pwt": "node --experimental-strip-types ./createRelease.ts pwt", - "release:gw": "node --experimental-strip-types ./createRelease.ts gw", + "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" },