From 51ec80c2006cc51532973766caa2179c1c129b8a Mon Sep 17 00:00:00 2001 From: Michael Cousins Date: Sun, 14 Sep 2025 14:24:13 -0400 Subject: [PATCH] build: update lint and TS configs for maintainability --- .editorconfig | 27 - .eslintignore | 3 - .eslintrc.yaml | 59 - .github/dependabot.yaml | 8 - .prettierrc.yaml | 4 - bin/npm-publish.js | 3 +- dist/main.js | 1024 +++++----- eslint.config.js | 45 + package.json | 24 +- pnpm-lock.yaml | 1748 +++++++---------- prettier.config.js | 10 + src/__tests__/format-publish-result.test.ts | 10 +- src/__tests__/normalize-options.test.ts | 5 +- src/__tests__/npm-publish.test.ts | 16 +- src/__tests__/read-manifest.test.ts | 7 +- src/action/__tests__/main.test.ts | 20 +- src/action/core.ts | 15 +- src/action/main.ts | 8 +- src/cli/__tests__/cli.test.ts | 2 +- src/cli/__tests__/parse-cli-arguments.test.ts | 2 +- src/cli/index.ts | 2 +- src/cli/parse-cli-arguments.ts | 1 + .../__tests__/compare-and-publish.test.ts | 13 +- .../__tests__/compare-versions.test.ts | 4 +- .../__tests__/get-arguments.test.ts | 4 +- .../compare-and-publish.ts | 10 +- src/compare-and-publish/compare-versions.ts | 4 +- src/format-publish-result.ts | 2 +- src/index.ts | 2 +- src/normalize-options.ts | 12 +- src/npm-publish.ts | 6 +- src/npm/__tests__/use-npm-environment.test.ts | 6 +- src/npm/call-npm-cli.ts | 17 +- src/npm/use-npm-environment.ts | 2 +- src/read-manifest.ts | 14 +- src/results.ts | 3 +- tsconfig.eslint.json | 8 - tsconfig.json | 27 +- 38 files changed, 1398 insertions(+), 1779 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .eslintignore delete mode 100644 .eslintrc.yaml delete mode 100644 .prettierrc.yaml create mode 100644 eslint.config.js create mode 100644 prettier.config.js delete mode 100644 tsconfig.eslint.json diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7f37c99..0000000 --- a/.editorconfig +++ /dev/null @@ -1,27 +0,0 @@ -# Editor config -# http://EditorConfig.org - -# This EditorConfig overrides any parent EditorConfigs -root = true - -# Default rules applied to all file types -[*] - -# No trailing spaces, newline at EOF -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -end_of_line = lf - -# 2 space indentation -indent_style = space -indent_size = 2 - -# JavaScript-specific settings -[*.{js,ts}] -quote_type = double -continuation_indent_size = 2 -curly_bracket_next_line = false -indent_brace_style = BSD -spaces_around_operators = true -spaces_around_brackets = none diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 4bc4547..0000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -lib -coverage diff --git a/.eslintrc.yaml b/.eslintrc.yaml deleted file mode 100644 index 0a04ee6..0000000 --- a/.eslintrc.yaml +++ /dev/null @@ -1,59 +0,0 @@ -root: true - -extends: - - "eslint:recommended" - - "plugin:@typescript-eslint/strict-type-checked" - - "plugin:@typescript-eslint/stylistic-type-checked" - - "plugin:import/recommended" - - "plugin:import/typescript" - - "plugin:jsdoc/recommended-typescript-error" - - "plugin:n/recommended" - - "plugin:promise/recommended" - - "plugin:sonarjs/recommended-legacy" - - "plugin:unicorn/recommended" - - "prettier" - -parserOptions: - project: - - "tsconfig.eslint.json" - -settings: - import/resolver: - typescript: true - node: true - -env: - es2021: true - node: true - -rules: - unicorn/prefer-top-level-await: "off" - jsdoc/tag-lines: "off" - "@typescript-eslint/restrict-template-expressions": - - "error" - - allowAny: false - allowBoolean: false - allowNullish: false - allowNumber: true - allowRegExp: false - allowNever: false - "@typescript-eslint/no-unnecessary-type-parameters": "off" - n/no-missing-import: "off" - -overrides: - - files: ["**/*.js"] - rules: - "@typescript-eslint/no-var-requires": "off" - unicorn/prefer-module: "off" - - - files: ["**/__tests__/**/*"] - rules: - "@typescript-eslint/no-non-null-assertion": "off" - "@typescript-eslint/no-unsafe-argument": "off" - "@typescript-eslint/no-unsafe-assignment": "off" - sonarjs/no-duplicate-string: "off" - unicorn/no-useless-undefined: "off" - - - files: ["src/action/**/*"] - rules: - n/no-unpublished-import: "off" diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 26dacdf..f72351a 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -19,14 +19,6 @@ updates: development: dependency-type: "development" - ignore: - # TODO(mcous, 2024-07-06): update to ESLint v9 + flat config - - dependency-name: "eslint" - versions: [">=9"] - # rimraf dropped support for ESLint v18 - - dependency-name: "rimraf" - versions: [">=6"] - # Update GitHub Actions dependencies - package-ecosystem: "github-actions" directory: "/" diff --git a/.prettierrc.yaml b/.prettierrc.yaml deleted file mode 100644 index a1477df..0000000 --- a/.prettierrc.yaml +++ /dev/null @@ -1,4 +0,0 @@ -plugins: - - prettier-plugin-jsdoc -tsdoc: true -trailingComma: es5 diff --git a/bin/npm-publish.js b/bin/npm-publish.js index 1c64145..fef20a0 100644 --- a/bin/npm-publish.js +++ b/bin/npm-publish.js @@ -1,14 +1,13 @@ #!/usr/bin/env node -import process from "node:process"; import fs from "node:fs"; import path from "node:path"; +import process from "node:process"; import url from "node:url"; import { main } from "../lib/cli/index.js"; const dirname = path.dirname(url.fileURLToPath(import.meta.url)); -// eslint-disable-next-line jsdoc/check-tag-names /** @type {{ version: string }} */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { version } = JSON.parse( diff --git a/dist/main.js b/dist/main.js index dcb8508..c554036 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,5 +1,6 @@ import { createRequire } from "node:module"; import os from "node:os"; +import childProcess from "node:child_process"; import fs from "node:fs/promises"; import path, { basename, posix } from "node:path"; import EE, { EventEmitter } from "events"; @@ -12,7 +13,6 @@ import { dirname, parse } from "path"; import assert from "assert"; import { Buffer as Buffer$1 } from "buffer"; import realZlib from "zlib"; -import childProcess from "node:child_process"; import crypto from "crypto"; //#region rolldown:runtime @@ -60,11 +60,6 @@ const ACCESS_RESTRICTED = "restricted"; const STRATEGY_UPGRADE = "upgrade"; const STRATEGY_ALL = "all"; -//#endregion -//#region src/results.ts -const INITIAL = "initial"; -const DIFFERENT = "different"; - //#endregion //#region src/errors.ts var InvalidPackageError = class extends TypeError { @@ -150,61 +145,142 @@ var NpmCallError = class extends Error { }; //#endregion -//#region node_modules/.pnpm/validate-npm-package-name@5.0.1/node_modules/validate-npm-package-name/lib/index.js -var require_lib$1 = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/validate-npm-package-name@5.0.1/node_modules/validate-npm-package-name/lib/index.js": ((exports, module) => { - const { builtinModules: builtins } = __require("module"); - var scopedPackagePattern = /* @__PURE__ */ new RegExp("^(?:@([^/]+?)[/])?([^/]+?)$"); - var blacklist = ["node_modules", "favicon.ico"]; - function validate$1(name$1) { - var warnings = []; - var errors = []; - if (name$1 === null) { - errors.push("name cannot be null"); - return done(warnings, errors); - } - if (name$1 === void 0) { - errors.push("name cannot be undefined"); - return done(warnings, errors); - } - if (typeof name$1 !== "string") { - errors.push("name must be a string"); - return done(warnings, errors); - } - if (!name$1.length) errors.push("name length must be greater than zero"); - if (name$1.match(/^\./)) errors.push("name cannot start with a period"); - if (name$1.match(/^_/)) errors.push("name cannot start with an underscore"); - if (name$1.trim() !== name$1) errors.push("name cannot contain leading or trailing spaces"); - blacklist.forEach(function(blacklistedName) { - if (name$1.toLowerCase() === blacklistedName) errors.push(blacklistedName + " is a blacklisted name"); +//#region src/results.ts +const INITIAL = "initial"; +const DIFFERENT = "different"; + +//#endregion +//#region src/npm/call-npm-cli.ts +const VIEW = "view"; +const PUBLISH = "publish"; +const E404 = "E404"; +const E409 = "E409"; +const EPUBLISHCONFLICT = "EPUBLISHCONFLICT"; +const IS_WINDOWS = os.platform() === "win32"; +const NPM = IS_WINDOWS ? "npm.cmd" : "npm"; +const JSON_MATCH_RE = /(\{[\s\S]*\})/mu; +const baseArguments = (options) => options.ignoreScripts ? ["--ignore-scripts", "--json"] : ["--json"]; +/** +* Call the NPM CLI in JSON mode. +* +* @param command The command of the NPM CLI to call +* @param cliArguments Any arguments to send to the command +* @param options Customize environment variables or add an error handler. +* @returns The parsed JSON, or stdout if unparsable. +*/ +async function callNpmCli(command, cliArguments, options) { + const { stdout, stderr, exitCode } = await execNpm([ + command, + ...baseArguments(options), + ...cliArguments + ], options.environment, options.logger); + let successData; + let errorCode; + let error$1; + if (exitCode === 0) successData = parseJson(stdout); + else { + const errorPayload = parseJson(stdout, stderr); + if (typeof errorPayload?.error?.code === "string") errorCode = errorPayload.error.code.toUpperCase(); + error$1 = new NpmCallError(command, exitCode, stderr); + } + return { + successData, + errorCode, + error: error$1 + }; +} +/** +* Execute the npm CLI. +* +* @param commandArguments Npm subcommand and arguments. +* @param environment Environment variables. +* @param logger Optional logger. +* @returns Stdout, stderr, and the exit code. +*/ +async function execNpm(commandArguments, environment, logger$1) { + logger$1?.debug?.(`Running command: ${NPM} ${commandArguments.join(" ")}`); + return new Promise((resolve) => { + let stdout = ""; + let stderr = ""; + const npm = childProcess.spawn(NPM, commandArguments, { + env: { + ...process.env, + ...environment + }, + shell: IS_WINDOWS }); - if (builtins.includes(name$1.toLowerCase())) warnings.push(name$1 + " is a core module name"); - if (name$1.length > 214) warnings.push("name can no longer contain more than 214 characters"); - if (name$1.toLowerCase() !== name$1) warnings.push("name can no longer contain capital letters"); - if (/[~'!()*]/.test(name$1.split("/").slice(-1)[0])) warnings.push("name can no longer contain special characters (\"~'!()*\")"); - if (encodeURIComponent(name$1) !== name$1) { - var nameMatch = name$1.match(scopedPackagePattern); - if (nameMatch) { - var user = nameMatch[1]; - var pkg = nameMatch[2]; - if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) return done(warnings, errors); - } - errors.push("name can only contain URL-friendly characters"); + npm.stdout.on("data", (data) => stdout += data); + npm.stderr.on("data", (data) => stderr += data); + npm.on("close", (code$1) => { + logger$1?.debug?.(`Received stdout: ${stdout}`); + logger$1?.debug?.(`Received stderr: ${stderr}`); + resolve({ + stdout: stdout.trim(), + stderr: stderr.trim(), + exitCode: code$1 ?? 0 + }); + }); + }); +} +/** +* Parse CLI outputs for JSON data. +* +* Certain versions of the npm CLI may intersperse JSON with human-readable +* output, which this function accounts for. +* +* @param values CLI outputs to check +* @returns Parsed JSON, if able to parse. +*/ +function parseJson(...values) { + for (const value of values) { + const jsonValue = JSON_MATCH_RE.exec(value)?.[1]; + if (jsonValue) try { + return JSON.parse(jsonValue); + } catch { + return; } - return done(warnings, errors); } - var done = function(warnings, errors) { - var result = { - validForNewPackages: errors.length === 0 && warnings.length === 0, - validForOldPackages: errors.length === 0, - warnings, - errors - }; - if (!result.warnings.length) delete result.warnings; - if (!result.errors.length) delete result.errors; - return result; +} + +//#endregion +//#region src/npm/use-npm-environment.ts +/** +* Create a temporary .npmrc file with the given auth token, and call a task +* with env vars set to use that .npmrc. +* +* @param manifest Pacakge metadata. +* @param options Configuration options. +* @param task A function called with the configured environment. After the +* function resolves, the temporary .npmrc file will be removed. +* @returns The resolved value of `task` +*/ +async function useNpmEnvironment(manifest, options, task) { + const { registry, token, logger: logger$1, temporaryDirectory } = options; + const { host, origin, pathname } = registry; + const pathnameWithSlash = pathname.endsWith("/") ? pathname : `${pathname}/`; + const config = [ + "; created by jsdevtools/npm-publish", + `//${host}${pathnameWithSlash}:_authToken=\${NODE_AUTH_TOKEN}`, + `registry=${origin}${pathnameWithSlash}`, + "" + ].join(os.EOL); + const npmrcDirectory = await fs.mkdtemp(path.join(temporaryDirectory, "npm-publish-")); + const npmrc = path.join(npmrcDirectory, ".npmrc"); + const environment = { + NODE_AUTH_TOKEN: token, + npm_config_userconfig: npmrc }; - module.exports = validate$1; -}) }); + await fs.writeFile(npmrc, config, "utf8"); + logger$1?.debug?.(`Temporary .npmrc created at ${npmrc}\n${config}`); + try { + return await task(manifest, options, environment); + } finally { + await fs.rm(npmrcDirectory, { + force: true, + recursive: true + }); + } +} //#endregion //#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/internal/debug.js @@ -533,36 +609,280 @@ var require_parse = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6. module.exports = parse$5; }) }); +//#endregion +//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/diff.js +var require_diff = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/diff.js": ((exports, module) => { + const parse$4 = require_parse(); + const diff = (version1, version2) => { + const v1$1 = parse$4(version1, null, true); + const v2 = parse$4(version2, null, true); + const comparison = v1$1.compare(v2); + if (comparison === 0) return null; + const v1Higher = comparison > 0; + const highVersion = v1Higher ? v1$1 : v2; + const lowVersion = v1Higher ? v2 : v1$1; + const highHasPre = !!highVersion.prerelease.length; + if (!!lowVersion.prerelease.length && !highHasPre) { + if (!lowVersion.patch && !lowVersion.minor) return "major"; + if (highVersion.patch) return "patch"; + if (highVersion.minor) return "minor"; + return "major"; + } + const prefix = highHasPre ? "pre" : ""; + if (v1$1.major !== v2.major) return prefix + "major"; + if (v1$1.minor !== v2.minor) return prefix + "minor"; + if (v1$1.patch !== v2.patch) return prefix + "patch"; + return "prerelease"; + }; + module.exports = diff; +}) }); + +//#endregion +//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/compare.js +var require_compare = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/compare.js": ((exports, module) => { + const SemVer = require_semver(); + const compare$1 = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)); + module.exports = compare$1; +}) }); + +//#endregion +//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/gt.js +var require_gt = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/gt.js": ((exports, module) => { + const compare = require_compare(); + const gt = (a, b, loose) => compare(a, b, loose) > 0; + module.exports = gt; +}) }); + //#endregion //#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/valid.js var require_valid = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/valid.js": ((exports, module) => { - const parse$4 = require_parse(); + const parse$3 = require_parse(); const valid = (version$1, options) => { - const v = parse$4(version$1, options); + const v = parse$3(version$1, options); return v ? v.version : null; }; module.exports = valid; }) }); //#endregion -//#region node_modules/.pnpm/minipass@7.1.2/node_modules/minipass/dist/esm/index.js +//#region src/compare-and-publish/compare-versions.ts +var import_diff = /* @__PURE__ */ __toESM(require_diff(), 1); +var import_gt = /* @__PURE__ */ __toESM(require_gt(), 1); var import_valid$1 = /* @__PURE__ */ __toESM(require_valid(), 1); -var import_lib = /* @__PURE__ */ __toESM(require_lib$1(), 1); -const proc = typeof process === "object" && process ? process : { - stdout: null, - stderr: null -}; -/** -* Return true if the argument is a Minipass stream, Node stream, or something -* else that Minipass can interact with. -*/ -const isStream = (s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof Stream || isReadable(s) || isWritable(s)); /** -* Return true if the argument is a valid {@link Minipass.Readable} +* Compare previously published versions with the package's current version. +* +* @param currentVersion The current package version. +* @param publishedVersions The versions that have already been published. +* @param options Configuration options +* @returns The release type and previous version. */ -const isReadable = (s) => !!s && typeof s === "object" && s instanceof EventEmitter$1 && typeof s.pipe === "function" && s.pipe !== Stream.Writable.prototype.pipe; -/** -* Return true if the argument is a valid {@link Minipass.Writable} +function compareVersions(currentVersion, publishedVersions, options) { + const { versions, "dist-tags": tags } = publishedVersions ?? {}; + const { strategy, tag: publishTag } = options; + const oldVersion = (0, import_valid$1.default)(tags?.[publishTag.value]) ?? void 0; + const isUnique = !versions?.includes(currentVersion); + let type; + if (isUnique) { + if (!oldVersion) type = INITIAL; + else if ((0, import_gt.default)(currentVersion, oldVersion)) type = (0, import_diff.default)(currentVersion, oldVersion) ?? DIFFERENT; + else if (strategy.value === STRATEGY_ALL) type = DIFFERENT; + } + return { + type, + oldVersion + }; +} + +//#endregion +//#region src/compare-and-publish/get-arguments.ts +/** +* Given a package name and publish configuration, get the NPM CLI view +* arguments. +* +* @param packageName Package name. +* @param options Publish configuration. +* @param retryWithTag Include a non-latest tag in the package spec for a rety +* attempt. +* @returns Arguments to pass to the NPM CLI. If `retryWithTag` is true, but the +* publish config is using the `latest` tag, will return `undefined`. +*/ +function getViewArguments(packageName, options, retryWithTag = false) { + return [ + retryWithTag ? `${packageName}@${options.tag.value}` : packageName, + "dist-tags", + "versions" + ]; +} +/** +* Given a publish configuration, get the NPM CLI publish arguments. +* +* @param packageSpec Package specification path. +* @param options Publish configuration. +* @returns Arguments to pass to the NPM CLI. +*/ +function getPublishArguments(packageSpec, options) { + const { tag, access: access$1, dryRun, provenance } = options; + const publishArguments = []; + if (packageSpec.length > 0) publishArguments.push(packageSpec); + if (!tag.isDefault) publishArguments.push("--tag", tag.value); + if (!access$1.isDefault && access$1.value) publishArguments.push("--access", access$1.value); + if (!provenance.isDefault && provenance.value) publishArguments.push("--provenance"); + if (!dryRun.isDefault && dryRun.value) publishArguments.push("--dry-run", "--force"); + return publishArguments; +} + +//#endregion +//#region src/compare-and-publish/compare-and-publish.ts +/** +* Get the currently published versions of a package and publish if needed. +* +* @param manifest The package to potentially publish. +* @param options Configuration options. +* @param environment Environment variables for the npm cli. +* @returns Information about the publish, including if it occurred. +*/ +async function compareAndPublish(manifest, options, environment) { + const { name: name$1, version: version$1, packageSpec } = manifest; + const cliOptions = { + environment, + ignoreScripts: options.ignoreScripts.value, + logger: options.logger + }; + const viewArguments = getViewArguments(name$1, options); + const publishArguments = getPublishArguments(packageSpec, options); + let viewCall = await callNpmCli(VIEW, viewArguments, cliOptions); + if (!viewCall.successData && !viewCall.error) { + const viewWithTagArguments = getViewArguments(name$1, options, true); + viewCall = await callNpmCli(VIEW, viewWithTagArguments, cliOptions); + } + if (viewCall.error && viewCall.errorCode !== E404) throw viewCall.error; + const isDryRun = options.dryRun.value; + const comparison = compareVersions(version$1, viewCall.successData, options); + const publishCall = comparison.type ?? isDryRun ? await callNpmCli(PUBLISH, publishArguments, cliOptions) : { + successData: void 0, + errorCode: void 0, + error: void 0 + }; + if (publishCall.error && publishCall.errorCode !== EPUBLISHCONFLICT && publishCall.errorCode !== E409) throw publishCall.error; + const { successData: publishData } = publishCall; + return { + id: isDryRun && !comparison.type ? void 0 : publishData?.id, + files: publishData?.files ?? [], + type: publishData ? comparison.type : void 0, + oldVersion: comparison.oldVersion + }; +} + +//#endregion +//#region src/format-publish-result.ts +const DRY_RUN_BANNER = "=== DRY RUN === DRY RUN === DRY RUN === DRY RUN === DRY RUN ==="; +const CONTENTS_BANNER = "=== Contents ==="; +/** +* Format publish results into a string. +* +* @param manifest Package manifest +* @param options Configuration options. +* @param result Results from running npm publish. +* @returns Formatted string. +*/ +function formatPublishResult(manifest, options, result) { + const lines = []; + lines.push(result.id === void 0 ? `🙅‍♀️ ${manifest.name}@${manifest.version} already published.` : `📦 ${result.id}`); + if (result.files.length > 0) lines.push("", CONTENTS_BANNER); + for (const { path: path$3, size } of result.files) lines.push(`${formatSize(size)}\t${path$3}`); + return (options.dryRun.value ? [ + DRY_RUN_BANNER, + "", + ...lines, + "", + DRY_RUN_BANNER + ] : lines).join(os.EOL); +} +const formatSize = (size) => { + if (size < 1e3) return `${size} B`; + if (size < 1e6) return `${(size / 1e3).toFixed(1)} kB`; + return `${(size / 1e6).toFixed(1)} MB`; +}; + +//#endregion +//#region src/normalize-options.ts +const REGISTRY_NPM = "https://registry.npmjs.org/"; +const TAG_LATEST = "latest"; +/** +* Normalizes and sanitizes options, and fills-in any default values. +* +* @param manifest Package metadata from package.json. +* @param options User-input options. +* @returns Validated auth and publish configuration. +*/ +function normalizeOptions(manifest, options) { + const defaultTag = manifest.publishConfig?.tag ?? TAG_LATEST; + const defaultRegistry = manifest.publishConfig?.registry ?? REGISTRY_NPM; + const defaultAccess = manifest.publishConfig?.access ?? (manifest.scope === void 0 ? ACCESS_PUBLIC : void 0); + const defaultProvenance = manifest.publishConfig?.provenance ?? false; + return { + token: validateToken(options.token), + registry: validateRegistry(options.registry ?? defaultRegistry), + tag: setValue(options.tag, defaultTag, validateTag), + access: setValue(options.access, defaultAccess, validateAccess), + provenance: setValue(options.provenance, defaultProvenance, Boolean), + ignoreScripts: setValue(options.ignoreScripts, true, Boolean), + dryRun: setValue(options.dryRun, false, Boolean), + strategy: setValue(options.strategy, STRATEGY_ALL, validateStrategy), + logger: options.logger, + temporaryDirectory: options.temporaryDirectory ?? os.tmpdir() + }; +} +const setValue = (value, defaultValue, validate$2) => ({ + value: validate$2(value ?? defaultValue), + isDefault: value === void 0 +}); +const validateToken = (value) => { + if (typeof value === "string" && value.length > 0) return value; + throw new InvalidTokenError(); +}; +const validateRegistry = (value) => { + try { + return new URL(value); + } catch { + throw new InvalidRegistryUrlError(value); + } +}; +const validateTag = (value) => { + if (typeof value === "string") { + const trimmedValue = value.trim(); + const encodedValue = encodeURIComponent(trimmedValue); + if (trimmedValue.length > 0 && trimmedValue === encodedValue) return value; + } + throw new InvalidTagError(value); +}; +const validateAccess = (value) => { + if (value === void 0 || value === ACCESS_PUBLIC || value === ACCESS_RESTRICTED) return value; + throw new InvalidAccessError(value); +}; +const validateStrategy = (value) => { + if (value === STRATEGY_ALL || value === STRATEGY_UPGRADE) return value; + throw new InvalidStrategyError(value); +}; + +//#endregion +//#region node_modules/.pnpm/minipass@7.1.2/node_modules/minipass/dist/esm/index.js +const proc = typeof process === "object" && process ? process : { + stdout: null, + stderr: null +}; +/** +* Return true if the argument is a Minipass stream, Node stream, or something +* else that Minipass can interact with. +*/ +const isStream = (s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof Stream || isReadable(s) || isWritable(s)); +/** +* Return true if the argument is a valid {@link Minipass.Readable} +*/ +const isReadable = (s) => !!s && typeof s === "object" && s instanceof EventEmitter$1 && typeof s.pipe === "function" && s.pipe !== Stream.Writable.prototype.pipe; +/** +* Return true if the argument is a valid {@link Minipass.Writable} */ const isWritable = (s) => !!s && typeof s === "object" && s instanceof EventEmitter$1 && typeof s.write === "function" && typeof s.end === "function"; const EOF = Symbol("EOF"); @@ -2404,7 +2724,7 @@ const encodeNegative = (num, buf) => { } } }; -const parse$3 = (buf) => { +const parse$2 = (buf) => { const pre = buf[0]; const value = pre === 128 ? pos(buf.subarray(1, buf.length)) : pre === 255 ? twos(buf) : null; if (value === null) throw Error("invalid base256 encoding"); @@ -2630,7 +2950,7 @@ const splitPrefix = (p, prefixSize) => { const decString = (buf, off, size) => buf.subarray(off, off + size).toString("utf8").replace(/\0.*/, ""); const decDate = (buf, off, size) => numToDate(decNumber(buf, off, size)); const numToDate = (num) => num === void 0 ? void 0 : /* @__PURE__ */ new Date(num * 1e3); -const decNumber = (buf, off, size) => Number(buf[off]) & 128 ? parse$3(buf.subarray(off, off + size)) : decSmallNumber(buf, off, size); +const decNumber = (buf, off, size) => Number(buf[off]) & 128 ? parse$2(buf.subarray(off, off + size)) : decSmallNumber(buf, off, size); const nanUndef = (value) => isNaN(value) ? void 0 : value; const decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf.subarray(off, off + size).toString("utf8").replace(/\0.*$/, "").trim(), 8)); const MAXNUM = { @@ -3350,58 +3670,117 @@ const list = makeCommand(listFileSync, listFile, (opt) => new Parser(opt), (opt) }); //#endregion -//#region src/read-manifest.ts -const SCOPE_RE = /^(@.+)\/.+$/u; -const MANIFEST_BASENAME = "package.json"; -const TARBALL_EXTNAME = ".tgz"; -const isManifest = (file) => { - return typeof file === "string" && path.basename(file) === MANIFEST_BASENAME; -}; -const isDirectory = (file) => { - return typeof file === "string" && path.extname(file) === ""; -}; -const isTarball = (file) => { - return typeof file === "string" && path.extname(file) === TARBALL_EXTNAME; -}; -const normalizeVersion = (version$1) => { - return (0, import_valid$1.default)(version$1) ?? void 0; -}; -const validateName = (name$1) => { - return (0, import_lib.default)(name$1).validForNewPackages; -}; -const readPackageJson = async (...pathSegments) => { - const file = path.resolve(...pathSegments); - try { - return await fs.readFile(file, "utf8"); - } catch (error$1) { - throw new PackageJsonReadError(file, error$1); - } -}; -const readTarballPackageJson = async (file) => { - const data = []; - const onReadEntry = (entry) => { - if (entry.path === "package/package.json") entry.on("data", (chunk) => data.push(chunk)); - }; - try { - await list({ - file, - onReadEntry - }); - if (data.length === 0) throw new Error("package.json not found inside archive"); - } catch (error$1) { - throw new PackageTarballReadError(file, error$1); - } - return Buffer.concat(data).toString(); -}; -/** -* Reads the package manifest (package.json) and returns its parsed contents. -* -* @param packagePath The path to the package being published. -* @returns The parsed package metadata. -*/ -async function readManifest(packagePath) { - let packageSpec; - let manifestContents; +//#region node_modules/.pnpm/validate-npm-package-name@5.0.1/node_modules/validate-npm-package-name/lib/index.js +var require_lib$1 = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/validate-npm-package-name@5.0.1/node_modules/validate-npm-package-name/lib/index.js": ((exports, module) => { + const { builtinModules: builtins } = __require("module"); + var scopedPackagePattern = /* @__PURE__ */ new RegExp("^(?:@([^/]+?)[/])?([^/]+?)$"); + var blacklist = ["node_modules", "favicon.ico"]; + function validate$1(name$1) { + var warnings = []; + var errors = []; + if (name$1 === null) { + errors.push("name cannot be null"); + return done(warnings, errors); + } + if (name$1 === void 0) { + errors.push("name cannot be undefined"); + return done(warnings, errors); + } + if (typeof name$1 !== "string") { + errors.push("name must be a string"); + return done(warnings, errors); + } + if (!name$1.length) errors.push("name length must be greater than zero"); + if (name$1.match(/^\./)) errors.push("name cannot start with a period"); + if (name$1.match(/^_/)) errors.push("name cannot start with an underscore"); + if (name$1.trim() !== name$1) errors.push("name cannot contain leading or trailing spaces"); + blacklist.forEach(function(blacklistedName) { + if (name$1.toLowerCase() === blacklistedName) errors.push(blacklistedName + " is a blacklisted name"); + }); + if (builtins.includes(name$1.toLowerCase())) warnings.push(name$1 + " is a core module name"); + if (name$1.length > 214) warnings.push("name can no longer contain more than 214 characters"); + if (name$1.toLowerCase() !== name$1) warnings.push("name can no longer contain capital letters"); + if (/[~'!()*]/.test(name$1.split("/").slice(-1)[0])) warnings.push("name can no longer contain special characters (\"~'!()*\")"); + if (encodeURIComponent(name$1) !== name$1) { + var nameMatch = name$1.match(scopedPackagePattern); + if (nameMatch) { + var user = nameMatch[1]; + var pkg = nameMatch[2]; + if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) return done(warnings, errors); + } + errors.push("name can only contain URL-friendly characters"); + } + return done(warnings, errors); + } + var done = function(warnings, errors) { + var result = { + validForNewPackages: errors.length === 0 && warnings.length === 0, + validForOldPackages: errors.length === 0, + warnings, + errors + }; + if (!result.warnings.length) delete result.warnings; + if (!result.errors.length) delete result.errors; + return result; + }; + module.exports = validate$1; +}) }); + +//#endregion +//#region src/read-manifest.ts +var import_valid = /* @__PURE__ */ __toESM(require_valid(), 1); +var import_lib = /* @__PURE__ */ __toESM(require_lib$1(), 1); +const SCOPE_RE = /^(@.+)\/.+$/u; +const MANIFEST_BASENAME = "package.json"; +const TARBALL_EXTNAME = ".tgz"; +const isManifest = (file) => { + return typeof file === "string" && path.basename(file) === MANIFEST_BASENAME; +}; +const isDirectory = (file) => { + return typeof file === "string" && path.extname(file) === ""; +}; +const isTarball = (file) => { + return typeof file === "string" && path.extname(file) === TARBALL_EXTNAME; +}; +const normalizeVersion = (version$1) => { + return (0, import_valid.default)(version$1) ?? void 0; +}; +const validateName = (name$1) => { + return (0, import_lib.default)(name$1).validForNewPackages; +}; +const readPackageJson = async (...pathSegments) => { + const file = path.resolve(...pathSegments); + try { + return await fs.readFile(file, "utf8"); + } catch (error$1) { + throw new PackageJsonReadError(file, error$1); + } +}; +const readTarballPackageJson = async (file) => { + const data = []; + const onReadEntry = (entry) => { + if (entry.path === "package/package.json") entry.on("data", (chunk) => data.push(chunk)); + }; + try { + await list({ + file, + onReadEntry + }); + if (data.length === 0) throw new Error("package.json not found inside archive"); + } catch (error$1) { + throw new PackageTarballReadError(file, error$1); + } + return Buffer.concat(data).toString(); +}; +/** +* Reads the package manifest (package.json) and returns its parsed contents. +* +* @param packagePath The path to the package being published. +* @returns The parsed package metadata. +*/ +async function readManifest(packagePath) { + let packageSpec; + let manifestContents; if (!packagePath) { packageSpec = ""; manifestContents = await readPackageJson(MANIFEST_BASENAME); @@ -3421,14 +3800,14 @@ async function readManifest(packagePath) { let publishConfig; try { manifestJson = JSON.parse(manifestContents); - name$1 = manifestJson["name"]; - version$1 = normalizeVersion(manifestJson["version"]); - publishConfig = manifestJson["publishConfig"] ?? {}; + name$1 = manifestJson.name; + version$1 = normalizeVersion(manifestJson.version); + publishConfig = manifestJson.publishConfig ?? {}; } catch (error$1) { throw new PackageJsonParseError(packageSpec, error$1); } if (!validateName(name$1)) throw new InvalidPackageNameError(name$1); - if (typeof version$1 !== "string") throw new InvalidPackageVersionError(manifestJson["version"]); + if (typeof version$1 !== "string") throw new InvalidPackageVersionError(manifestJson.version); if (typeof publishConfig !== "object" || Array.isArray(publishConfig) || !publishConfig) throw new InvalidPackagePublishConfigError(publishConfig); return { packageSpec, @@ -3439,385 +3818,6 @@ async function readManifest(packagePath) { }; } -//#endregion -//#region src/normalize-options.ts -const REGISTRY_NPM = "https://registry.npmjs.org/"; -const TAG_LATEST = "latest"; -/** -* Normalizes and sanitizes options, and fills-in any default values. -* -* @param manifest Package metadata from package.json. -* @param options User-input options. -* @returns Validated auth and publish configuration. -*/ -function normalizeOptions(manifest, options) { - const defaultTag = manifest.publishConfig?.tag ?? TAG_LATEST; - const defaultRegistry = manifest.publishConfig?.registry ?? REGISTRY_NPM; - const defaultAccess = manifest.publishConfig?.access ?? (manifest.scope === void 0 ? ACCESS_PUBLIC : void 0); - const defaultProvenance = manifest.publishConfig?.provenance ?? false; - return { - token: validateToken(options.token), - registry: validateRegistry(options.registry ?? defaultRegistry), - tag: setValue(options.tag, defaultTag, validateTag), - access: setValue(options.access, defaultAccess, validateAccess), - provenance: setValue(options.provenance, defaultProvenance, Boolean), - ignoreScripts: setValue(options.ignoreScripts, true, Boolean), - dryRun: setValue(options.dryRun, false, Boolean), - strategy: setValue(options.strategy, STRATEGY_ALL, validateStrategy), - logger: options.logger, - temporaryDirectory: options.temporaryDirectory ?? os.tmpdir() - }; -} -const setValue = (value, defaultValue, validate$2) => ({ - value: validate$2(value ?? defaultValue), - isDefault: value === void 0 -}); -const validateToken = (value) => { - if (typeof value === "string" && value.length > 0) return value; - throw new InvalidTokenError(); -}; -const validateRegistry = (value) => { - try { - return new URL(value); - } catch { - throw new InvalidRegistryUrlError(value); - } -}; -const validateTag = (value) => { - if (typeof value === "string") { - const trimmedValue = value.trim(); - const encodedValue = encodeURIComponent(trimmedValue); - if (trimmedValue.length > 0 && trimmedValue === encodedValue) return value; - } - throw new InvalidTagError(value); -}; -const validateAccess = (value) => { - if (value === void 0 || value === ACCESS_PUBLIC || value === ACCESS_RESTRICTED) return value; - throw new InvalidAccessError(value); -}; -const validateStrategy = (value) => { - if (value === STRATEGY_ALL || value === STRATEGY_UPGRADE) return value; - throw new InvalidStrategyError(value); -}; - -//#endregion -//#region src/npm/call-npm-cli.ts -const VIEW = "view"; -const PUBLISH = "publish"; -const E404 = "E404"; -const E409 = "E409"; -const EPUBLISHCONFLICT = "EPUBLISHCONFLICT"; -const IS_WINDOWS = os.platform() === "win32"; -const NPM = IS_WINDOWS ? "npm.cmd" : "npm"; -const JSON_MATCH_RE = /(\{[\s\S]*\})/mu; -const baseArguments = (options) => options.ignoreScripts ? ["--ignore-scripts", "--json"] : ["--json"]; -/** -* Call the NPM CLI in JSON mode. -* -* @param command The command of the NPM CLI to call -* @param cliArguments Any arguments to send to the command -* @param options Customize environment variables or add an error handler. -* @returns The parsed JSON, or stdout if unparsable. -*/ -async function callNpmCli(command, cliArguments, options) { - const { stdout, stderr, exitCode } = await execNpm([ - command, - ...baseArguments(options), - ...cliArguments - ], options.environment, options.logger); - let successData; - let errorCode; - let error$1; - if (exitCode === 0) successData = parseJson(stdout); - else { - const errorPayload = parseJson(stdout, stderr); - if (errorPayload?.error?.code) errorCode = String(errorPayload.error.code).toUpperCase(); - error$1 = new NpmCallError(command, exitCode, stderr); - } - return { - successData, - errorCode, - error: error$1 - }; -} -/** -* Execute the npm CLI. -* -* @param commandArguments Npm subcommand and arguments. -* @param environment Environment variables. -* @param logger Optional logger. -* @returns Stdout, stderr, and the exit code. -*/ -async function execNpm(commandArguments, environment, logger$1) { - logger$1?.debug?.(`Running command: ${NPM} ${commandArguments.join(" ")}`); - return new Promise((resolve) => { - let stdout = ""; - let stderr = ""; - const npm = childProcess.spawn(NPM, commandArguments, { - env: { - ...process.env, - ...environment - }, - shell: IS_WINDOWS - }); - npm.stdout.on("data", (data) => stdout += data); - npm.stderr.on("data", (data) => stderr += data); - npm.on("close", (code$1) => { - logger$1?.debug?.(`Received stdout: ${stdout}`); - logger$1?.debug?.(`Received stderr: ${stderr}`); - resolve({ - stdout: stdout.trim(), - stderr: stderr.trim(), - exitCode: code$1 ?? 0 - }); - }); - }); -} -/** -* Parse CLI outputs for JSON data. -* -* Certain versions of the npm CLI may intersperse JSON with human-readable -* output, which this function accounts for. -* -* @param values CLI outputs to check -* @returns Parsed JSON, if able to parse. -*/ -function parseJson(...values) { - for (const value of values) { - const jsonValue = JSON_MATCH_RE.exec(value)?.[1]; - if (jsonValue) try { - return JSON.parse(jsonValue); - } catch { - return; - } - } -} - -//#endregion -//#region src/npm/use-npm-environment.ts -/** -* Create a temporary .npmrc file with the given auth token, and call a task -* with env vars set to use that .npmrc. -* -* @param manifest Pacakge metadata. -* @param options Configuration options. -* @param task A function called with the configured environment. After the -* function resolves, the temporary .npmrc file will be removed. -* @returns The resolved value of `task` -*/ -async function useNpmEnvironment(manifest, options, task) { - const { registry, token, logger: logger$1, temporaryDirectory } = options; - const { host, origin, pathname } = registry; - const pathnameWithSlash = pathname.endsWith("/") ? pathname : `${pathname}/`; - const config = [ - "; created by jsdevtools/npm-publish", - `//${host}${pathnameWithSlash}:_authToken=\${NODE_AUTH_TOKEN}`, - `registry=${origin}${pathnameWithSlash}`, - "" - ].join(os.EOL); - const npmrcDirectory = await fs.mkdtemp(path.join(temporaryDirectory, "npm-publish-")); - const npmrc = path.join(npmrcDirectory, ".npmrc"); - const environment = { - NODE_AUTH_TOKEN: token, - npm_config_userconfig: npmrc - }; - await fs.writeFile(npmrc, config, "utf8"); - logger$1?.debug?.(`Temporary .npmrc created at ${npmrc}\n${config}`); - try { - return await task(manifest, options, environment); - } finally { - await fs.rm(npmrcDirectory, { - force: true, - recursive: true - }); - } -} - -//#endregion -//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/diff.js -var require_diff = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/diff.js": ((exports, module) => { - const parse$2 = require_parse(); - const diff = (version1, version2) => { - const v1$1 = parse$2(version1, null, true); - const v2 = parse$2(version2, null, true); - const comparison = v1$1.compare(v2); - if (comparison === 0) return null; - const v1Higher = comparison > 0; - const highVersion = v1Higher ? v1$1 : v2; - const lowVersion = v1Higher ? v2 : v1$1; - const highHasPre = !!highVersion.prerelease.length; - if (!!lowVersion.prerelease.length && !highHasPre) { - if (!lowVersion.patch && !lowVersion.minor) return "major"; - if (highVersion.patch) return "patch"; - if (highVersion.minor) return "minor"; - return "major"; - } - const prefix = highHasPre ? "pre" : ""; - if (v1$1.major !== v2.major) return prefix + "major"; - if (v1$1.minor !== v2.minor) return prefix + "minor"; - if (v1$1.patch !== v2.patch) return prefix + "patch"; - return "prerelease"; - }; - module.exports = diff; -}) }); - -//#endregion -//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/compare.js -var require_compare = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/compare.js": ((exports, module) => { - const SemVer = require_semver(); - const compare$1 = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)); - module.exports = compare$1; -}) }); - -//#endregion -//#region node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/gt.js -var require_gt = /* @__PURE__ */ __commonJS({ "node_modules/.pnpm/semver@7.6.2/node_modules/semver/functions/gt.js": ((exports, module) => { - const compare = require_compare(); - const gt = (a, b, loose) => compare(a, b, loose) > 0; - module.exports = gt; -}) }); - -//#endregion -//#region src/compare-and-publish/compare-versions.ts -var import_diff = /* @__PURE__ */ __toESM(require_diff(), 1); -var import_gt = /* @__PURE__ */ __toESM(require_gt(), 1); -var import_valid = /* @__PURE__ */ __toESM(require_valid(), 1); -/** -* Compare previously published versions with the package's current version. -* -* @param currentVersion The current package version. -* @param publishedVersions The versions that have already been published. -* @param options Configuration options -* @returns The release type and previous version. -*/ -function compareVersions(currentVersion, publishedVersions, options) { - const { versions, "dist-tags": tags } = publishedVersions ?? {}; - const { strategy, tag: publishTag } = options; - const oldVersion = (0, import_valid.default)(tags?.[publishTag.value]) ?? void 0; - const isUnique = !versions?.includes(currentVersion); - let type; - if (isUnique) { - if (!oldVersion) type = INITIAL; - else if ((0, import_gt.default)(currentVersion, oldVersion)) type = (0, import_diff.default)(currentVersion, oldVersion) ?? DIFFERENT; - else if (strategy.value === STRATEGY_ALL) type = DIFFERENT; - } - return { - type, - oldVersion - }; -} - -//#endregion -//#region src/compare-and-publish/get-arguments.ts -/** -* Given a package name and publish configuration, get the NPM CLI view -* arguments. -* -* @param packageName Package name. -* @param options Publish configuration. -* @param retryWithTag Include a non-latest tag in the package spec for a rety -* attempt. -* @returns Arguments to pass to the NPM CLI. If `retryWithTag` is true, but the -* publish config is using the `latest` tag, will return `undefined`. -*/ -function getViewArguments(packageName, options, retryWithTag = false) { - return [ - retryWithTag ? `${packageName}@${options.tag.value}` : packageName, - "dist-tags", - "versions" - ]; -} -/** -* Given a publish configuration, get the NPM CLI publish arguments. -* -* @param packageSpec Package specification path. -* @param options Publish configuration. -* @returns Arguments to pass to the NPM CLI. -*/ -function getPublishArguments(packageSpec, options) { - const { tag, access: access$1, dryRun, provenance } = options; - const publishArguments = []; - if (packageSpec.length > 0) publishArguments.push(packageSpec); - if (!tag.isDefault) publishArguments.push("--tag", tag.value); - if (!access$1.isDefault && access$1.value) publishArguments.push("--access", access$1.value); - if (!provenance.isDefault && provenance.value) publishArguments.push("--provenance"); - if (!dryRun.isDefault && dryRun.value) publishArguments.push("--dry-run", "--force"); - return publishArguments; -} - -//#endregion -//#region src/compare-and-publish/compare-and-publish.ts -/** -* Get the currently published versions of a package and publish if needed. -* -* @param manifest The package to potentially publish. -* @param options Configuration options. -* @param environment Environment variables for the npm cli. -* @returns Information about the publish, including if it occurred. -*/ -async function compareAndPublish(manifest, options, environment) { - const { name: name$1, version: version$1, packageSpec } = manifest; - const cliOptions = { - environment, - ignoreScripts: options.ignoreScripts.value, - logger: options.logger - }; - const viewArguments = getViewArguments(name$1, options); - const publishArguments = getPublishArguments(packageSpec, options); - let viewCall = await callNpmCli(VIEW, viewArguments, cliOptions); - if (!viewCall.successData && !viewCall.error) { - const viewWithTagArguments = getViewArguments(name$1, options, true); - viewCall = await callNpmCli(VIEW, viewWithTagArguments, cliOptions); - } - if (viewCall.error && viewCall.errorCode !== E404) throw viewCall.error; - const isDryRun = options.dryRun.value; - const comparison = compareVersions(version$1, viewCall.successData, options); - const publishCall = comparison.type ?? isDryRun ? await callNpmCli(PUBLISH, publishArguments, cliOptions) : { - successData: void 0, - errorCode: void 0, - error: void 0 - }; - if (publishCall.error && publishCall.errorCode !== EPUBLISHCONFLICT && publishCall.errorCode !== E409) throw publishCall.error; - const { successData: publishData } = publishCall; - return { - id: isDryRun && !comparison.type ? void 0 : publishData?.id, - files: publishData?.files ?? [], - type: publishData ? comparison.type : void 0, - oldVersion: comparison.oldVersion - }; -} - -//#endregion -//#region src/format-publish-result.ts -const DRY_RUN_BANNER = "=== DRY RUN === DRY RUN === DRY RUN === DRY RUN === DRY RUN ==="; -const CONTENTS_BANNER = "=== Contents ==="; -/** -* Format publish results into a string. -* -* @param manifest Package manifest -* @param options Configuration options. -* @param result Results from running npm publish. -* @returns Formatted string. -*/ -function formatPublishResult(manifest, options, result) { - const lines = []; - lines.push(result.id === void 0 ? `🙅‍♀️ ${manifest.name}@${manifest.version} already published.` : `📦 ${result.id}`); - if (result.files.length > 0) lines.push("", CONTENTS_BANNER); - for (const { path: path$3, size } of result.files) lines.push(`${formatSize(size)}\t${path$3}`); - return (options.dryRun.value ? [ - DRY_RUN_BANNER, - "", - ...lines, - "", - DRY_RUN_BANNER - ] : lines).join(os.EOL); -} -const formatSize = (size) => { - if (size < 1e3) return `${size} B`; - if (size < 1e6) return `${(size / 1e3).toFixed(1)} kB`; - return `${(size / 1e6).toFixed(1)} MB`; -}; - //#endregion //#region src/npm-publish.ts /** @@ -6010,7 +6010,7 @@ async function run() { ignoreScripts: getBooleanInput("ignore-scripts"), dryRun: getBooleanInput("dry-run"), logger, - temporaryDirectory: process.env["RUNNER_TEMP"] + temporaryDirectory: process.env.RUNNER_TEMP }); setOutput("id", results.id, ""); setOutput("name", results.name); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..676ee50 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,45 @@ +import baseConfig from "@mcous/eslint-config"; +import { defineConfig, globalIgnores } from "eslint/config"; +import jsdoc from "eslint-plugin-jsdoc"; +import globals from "globals"; + +export default defineConfig( + baseConfig, + { + languageOptions: { + globals: globals.node, + parserOptions: { + tsconfigRootDir: import.meta.dirname, + projectService: { + allowDefaultProject: [ + "eslint.config.js", + "prettier.config.js", + "vitest.config.ts", + "action.js", + "bin/npm-publish.js", + ], + }, + }, + }, + }, + { + files: ["**/*.ts"], + extends: [jsdoc.configs["flat/recommended-typescript-error"]], + }, + { + files: ["**/*.js"], + extends: [jsdoc.configs["flat/recommended-typescript-flavor-error"]], + }, + { + files: ["**/__tests__/**"], + rules: { + "@typescript-eslint/no-unsafe-assignment": "off", + }, + }, + { + rules: { + "jsdoc/tag-lines": "off", + }, + }, + globalIgnores(["dist/**", "lib/**", "coverage/**"]) +); diff --git a/package.json b/package.json index 7112648..7e7664e 100644 --- a/package.json +++ b/package.json @@ -53,28 +53,24 @@ }, "devDependencies": { "@actions/core": "^1.10.1", + "@mcous/eslint-config": "^0.7.0", + "@mcous/prettier-config": "^0.4.0", + "@mcous/typescript-config": "^0.3.0", "@types/command-line-args": "^5.2.1", - "@types/node": "^22.1.0", + "@types/node": "^24.4.0", "@types/validate-npm-package-name": "^4.0.2", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-istanbul": "^2.0.5", "concurrently": "^8.2.1", - "esbuild": "^0.23.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "npm:eslint-plugin-i@^2.29.0", - "eslint-plugin-jsdoc": "^48.0.4", - "eslint-plugin-n": "^17.9.0", - "eslint-plugin-promise": "^7.0.0", - "eslint-plugin-sonarjs": "^1.0.3", - "eslint-plugin-unicorn": "^55.0.0", - "prettier": "^3.0.3", - "prettier-plugin-jsdoc": "^1.1.1", + "eslint": "^9.35.0", + "eslint-plugin-jsdoc": "^57.0.8", + "globals": "^16.4.0", + "prettier": "^3.6.2", + "prettier-plugin-jsdoc": "^1.3.3", "rimraf": "^5.0.9", "rolldown": "1.0.0-beta.37", - "typescript": "^5.2.2", + "typescript": "^5.9.2", "vitest": "^2.0.5", "vitest-when": "^0.4.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db8092a..944291b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,63 +27,51 @@ importers: '@actions/core': specifier: ^1.10.1 version: 1.10.1 + '@mcous/eslint-config': + specifier: ^0.7.0 + version: 0.7.0(eslint@9.35.0)(typescript@5.9.2)(vitest@2.0.5(@types/node@24.4.0)) + '@mcous/prettier-config': + specifier: ^0.4.0 + version: 0.4.0(prettier@3.6.2) + '@mcous/typescript-config': + specifier: ^0.3.0 + version: 0.3.0(typescript@5.9.2) '@types/command-line-args': specifier: ^5.2.1 version: 5.2.3 '@types/node': - specifier: ^22.1.0 - version: 22.1.0 + specifier: ^24.4.0 + version: 24.4.0 '@types/validate-npm-package-name': specifier: ^4.0.2 version: 4.0.2 '@typescript-eslint/eslint-plugin': specifier: ^8.0.0 - version: 8.0.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + version: 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^8.0.0 - version: 8.0.0(eslint@8.57.0)(typescript@5.5.4) + version: 8.0.0(eslint@9.35.0)(typescript@5.9.2) '@vitest/coverage-istanbul': specifier: ^2.0.5 - version: 2.0.5(vitest@2.0.5(@types/node@22.1.0)) + version: 2.0.5(vitest@2.0.5(@types/node@24.4.0)) concurrently: specifier: ^8.2.1 version: 8.2.2 - esbuild: - specifier: ^0.23.0 - version: 0.23.0 eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-import-resolver-typescript: - specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-i@2.29.1)(eslint@8.57.0) - eslint-plugin-import: - specifier: npm:eslint-plugin-i@^2.29.0 - version: eslint-plugin-i@2.29.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + specifier: ^9.35.0 + version: 9.35.0 eslint-plugin-jsdoc: - specifier: ^48.0.4 - version: 48.11.0(eslint@8.57.0) - eslint-plugin-n: - specifier: ^17.9.0 - version: 17.10.1(eslint@8.57.0) - eslint-plugin-promise: - specifier: ^7.0.0 - version: 7.0.0(eslint@8.57.0) - eslint-plugin-sonarjs: - specifier: ^1.0.3 - version: 1.0.4(eslint@8.57.0) - eslint-plugin-unicorn: - specifier: ^55.0.0 - version: 55.0.0(eslint@8.57.0) + specifier: ^57.0.8 + version: 57.0.8(eslint@9.35.0) + globals: + specifier: ^16.4.0 + version: 16.4.0 prettier: - specifier: ^3.0.3 - version: 3.3.3 + specifier: ^3.6.2 + version: 3.6.2 prettier-plugin-jsdoc: - specifier: ^1.1.1 - version: 1.3.0(prettier@3.3.3) + specifier: ^1.3.3 + version: 1.3.3(prettier@3.6.2) rimraf: specifier: ^5.0.9 version: 5.0.10 @@ -91,14 +79,14 @@ importers: specifier: 1.0.0-beta.37 version: 1.0.0-beta.37 typescript: - specifier: ^5.2.2 - version: 5.5.4 + specifier: ^5.9.2 + version: 5.9.2 vitest: specifier: ^2.0.5 - version: 2.0.5(@types/node@22.1.0) + version: 2.0.5(@types/node@24.4.0) vitest-when: specifier: ^0.4.0 - version: 0.4.1(@vitest/expect@2.0.5)(vitest@2.0.5(@types/node@22.1.0)) + version: 0.4.1(@vitest/expect@2.0.5)(vitest@2.0.5(@types/node@24.4.0)) packages: @@ -158,6 +146,10 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} @@ -200,9 +192,9 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} - engines: {node: '>=16'} + '@es-joy/jsdoccomment@0.58.0': + resolution: {integrity: sha512-smMc5pDht/UVsCD3hhw/a/e/p8m0RdRYiluXToVfd+d4yaQQh7nn9bACjkk6nXJvat7EWPAxuFkMEFfrxeGa3Q==} + engines: {node: '>=20.11.0'} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -210,312 +202,201 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.23.0': - resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.23.0': - resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.23.0': - resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.23.0': - resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.23.0': - resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.23.0': - resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.23.0': - resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.23.0': - resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.23.0': - resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.23.0': - resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.23.0': - resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.23.0': - resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.23.0': - resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.23.0': - resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.23.0': - resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.23.0': - resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.23.0': - resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.23.0': - resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.23.0': - resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.23.0': - resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.23.0': - resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.23.0': - resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.23.0': - resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.23.0': - resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.11.0': resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.35.0': + resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -551,6 +432,22 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@mcous/eslint-config@0.7.0': + resolution: {integrity: sha512-dyWdP3HdaVm3kaq38gwK8LWpuETqoh6vo5HkUulsA5PnLvBnS8pORAdHxhiIJL0a8eohqEUIX7nvqHFrnHNzoQ==} + peerDependencies: + eslint: '>=9.22.0 <10' + typescript: '>=5.0.0 <6' + + '@mcous/prettier-config@0.4.0': + resolution: {integrity: sha512-+Q8LED2ivW61shpWFE5+7lIpS6kXRs5VRfnH+qhRT0C+XhFphPMyVXXZfn+ytYzEeOAixlys34xJMFgDmMroHw==} + peerDependencies: + prettier: '>=3.0.0 <4' + + '@mcous/typescript-config@0.3.0': + resolution: {integrity: sha512-hGynLdZwOnv3stD4Vo6YKxr5FrECdyc86LCHT0j2jOQmB6JmI4YgdltaqNRAxShsLZ01uf0ffXSuHu/a+94fhg==} + peerDependencies: + typescript: '>=5.0.0 <6' + '@napi-rs/wasm-runtime@1.0.5': resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} @@ -577,10 +474,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rolldown/binding-android-arm64@1.0.0-beta.37': resolution: {integrity: sha512-Pdr3USGBdoYzcygfJTSATHd7x476vVF3rnQ6SuUAh4YjhgGoNaI/ZycQ0RsonptwwU5NmQRWxfWv+aUPL6JlJg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -762,17 +655,20 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdast@4.0.1': resolution: {integrity: sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==} '@types/ms@0.7.32': resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} - '@types/node@22.1.0': - resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} - - '@types/normalize-package-data@2.4.1': - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + '@types/node@24.4.0': + resolution: {integrity: sha512-gUuVEAK4/u6F9wRLznPUU4WGUacSEBDPoC2TrBkw3GAnOLHBL45QdfHOXp1kJ4ypBGLxTOB+t7NJLpKoC3gznQ==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -794,6 +690,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.43.0': + resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.43.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.0.0': resolution: {integrity: sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -804,10 +708,33 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.43.0': + resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.43.0': + resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.0.0': resolution: {integrity: sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.43.0': + resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.43.0': + resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.0.0': resolution: {integrity: sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -817,10 +744,21 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.43.0': + resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.0.0': resolution: {integrity: sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.43.0': + resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.0.0': resolution: {integrity: sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -830,24 +768,50 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.43.0': + resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.0.0': resolution: {integrity: sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.43.0': + resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.0.0': resolution: {integrity: sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@typescript-eslint/visitor-keys@8.43.0': + resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitest/coverage-istanbul@2.0.5': resolution: {integrity: sha512-BvjWKtp7fiMAeYUD0mO5cuADzn1gmjTm54jm5qUEnh/O08riczun8rI4EtQlg3bWoRo2lT3FO8DmjPDX9ZthPw==} peerDependencies: vitest: 2.0.5 + '@vitest/eslint-plugin@1.3.9': + resolution: {integrity: sha512-wsNe7xy44ovm/h9ISDkDNcv0aOnUsaOYDqan2y6qCFAUQ0odFr6df/+FdGKHZN+mCM+SvIDWoXuvm5T5V3Kh6w==} + peerDependencies: + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + typescript: + optional: true + vitest: + optional: true + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -871,8 +835,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -929,6 +893,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + baseline-browser-mapping@2.8.3: + resolution: {integrity: sha512-mcE+Wr2CAhHNWxXN/DdTI+n4gsPc5QpXpWnyCQWiQYIYZX+ZMJ8juXZgjRa/0/YPJo/NSsgW15/YgmI4nbysYw==} + hasBin: true + binary-searching@2.0.5: resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} @@ -947,9 +915,14 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} + browserslist@4.26.0: + resolution: {integrity: sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -962,6 +935,9 @@ packages: caniuse-lite@1.0.30001639: resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + caniuse-lite@1.0.30001741: + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} + chai@5.1.1: resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} engines: {node: '>=12'} @@ -974,6 +950,9 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -985,8 +964,8 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} clean-regexp@1.0.0: @@ -1029,27 +1008,32 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + core-js-compat@3.45.1: + resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1078,46 +1062,34 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} electron-to-chromium@1.4.815: resolution: {integrity: sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==} + electron-to-chromium@1.5.218: + resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - esbuild@0.23.0: - resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} - engines: {node: '>=18'} - hasBin: true - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -1126,118 +1098,61 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-compat-utils@0.1.2: - resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es-x@7.5.0: - resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8' - - eslint-plugin-i@2.29.1: - resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} - engines: {node: '>=12'} - deprecated: Please migrate to the brand new `eslint-plugin-import-x` instead - peerDependencies: - eslint: ^7.2.0 || ^8 - - eslint-plugin-jsdoc@48.11.0: - resolution: {integrity: sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==} - engines: {node: '>=18'} + eslint-plugin-jsdoc@57.0.8: + resolution: {integrity: sha512-L3kb1fz1VsWMDxcNOPqomC8gWROxCJomynYZkhQJInZu4m3Ugjod75pWAICRrKW1WedHkX8BotknBtGCLUFpAg==} + engines: {node: '>=20.11.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-n@17.10.1: - resolution: {integrity: sha512-hm/q37W6efDptJXdwirsm6A257iY6ZNtpoSG0wEzFzjJ3AhL7OhEIhdSR2e4OdYfHO5EDeqlCfFrjf9q208IPw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.23.0' - - eslint-plugin-promise@7.0.0: - resolution: {integrity: sha512-wb1ECT+b90ndBdAujhIdAU8oQ3Vt5gKqP/t78KOmg0ifynrvc2jGR9f6ndbOVNFpKf6jLUBlBBDF3H3Wk0JICg==} + eslint-plugin-promise@7.2.1: + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-sonarjs@1.0.4: - resolution: {integrity: sha512-jF0eGCUsq/HzMub4ExAyD8x1oEgjOyB9XVytYGyWgSFvdiJQJp6IuP7RmtauCf06o6N/kZErh+zW4b10y1WZ+Q==} - engines: {node: '>=16'} + eslint-plugin-simple-import-sort@12.1.1: + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: - eslint: ^8.0.0 || ^9.0.0 + eslint: '>=5.0.0' - eslint-plugin-unicorn@55.0.0: - resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==} - engines: {node: '>=18.18'} + eslint-plugin-unicorn@61.0.2: + resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==} + engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: - eslint: '>=8.56.0' + eslint: '>=9.29.0' - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@9.35.0: + resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -1268,6 +1183,10 @@ packages: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1277,9 +1196,9 @@ packages: fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1289,17 +1208,17 @@ packages: resolution: {integrity: sha512-o5/Y8HrCNRuFF5rdNTkX8Vhv6kTFTV0t1zIoigwlCdbkA9qaapRzxvWPND2VvlFa9LBI05Q1i8ml/saMqkOJUQ==} engines: {node: '>=14'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -1308,17 +1227,11 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1334,9 +1247,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1349,29 +1259,22 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} - globals@15.9.0: - resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1383,13 +1286,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1401,6 +1297,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -1409,26 +1309,13 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-builtin-module@5.0.0: + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} + engines: {node: '>=18.20'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -1446,10 +1333,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1488,14 +1371,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + jsdoc-type-pratt-parser@5.4.0: + resolution: {integrity: sha512-F9GQ+F1ZU6qvSrZV8fNFpjDNf614YzR2eF6S0+XbDjAcUI28FSoXnYZFjQmb1kFx3rrJb5PnxUH3/Yti6fcM+g==} engines: {node: '>=12.0.0'} - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} @@ -1506,12 +1385,14 @@ packages: engines: {node: '>=6'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -1530,13 +1411,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1650,14 +1524,14 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1681,6 +1555,9 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1692,15 +1569,15 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + object-deep-merge@1.0.5: + resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -1710,26 +1587,14 @@ packages: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} @@ -1737,22 +1602,16 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} - engines: {node: '>= 18'} + parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1761,9 +1620,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -1782,6 +1638,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -1798,14 +1657,14 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-jsdoc@1.3.0: - resolution: {integrity: sha512-cQm8xIa0fN9ieJFMXACQd6JPycl+8ouOijAqUqu44EF/s4fXL3Wi9sKXuEaodsEWgCN42Xby/bNhqgM1iWx4uw==} + prettier-plugin-jsdoc@1.3.3: + resolution: {integrity: sha512-YIxejcbPYK4N58jHGiXjYvrCzBMyvV2AEMSoF5LvqqeMEI0nsmww57I6NGnpVc0AU9ncFCTEBoYHN/xuBf80YA==} engines: {node: '>=14.13.1 || >=16.0.0'} peerDependencies: prettier: ^3.0.0 - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -1823,14 +1682,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} @@ -1838,8 +1689,8 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true require-directory@2.1.1: @@ -1850,22 +1701,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -1886,10 +1725,6 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1904,6 +1739,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1926,9 +1766,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -1936,20 +1773,14 @@ packages: spawn-command@0.0.2: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1977,9 +1808,9 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@4.1.0: + resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} + engines: {node: '>=12'} strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -1997,18 +1828,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - tar@7.4.0: resolution: {integrity: sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==} engines: {node: '>=18'} @@ -2017,9 +1836,6 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} @@ -2053,6 +1869,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -2064,20 +1886,19 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} + type-fest@4.2.0: + resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} + engines: {node: '>=16'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} + typescript-eslint@8.43.0: + resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -2085,8 +1906,8 @@ packages: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} - undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + undici-types@7.11.0: + resolution: {integrity: sha512-kt1ZriHTi7MU+Z/r9DOdAI3ONdaR3M3csEaRc6ewa4f4dTvX4cQCbJ4NkEn0ohE4hHtq85+PhPSTY+pO/1PwgA==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -2097,6 +1918,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2104,9 +1931,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2196,9 +2020,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2310,6 +2131,8 @@ snapshots: '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.24.8': {} '@babel/helpers@7.25.0': @@ -2372,166 +2195,117 @@ snapshots: tslib: 2.6.2 optional: true - '@es-joy/jsdoccomment@0.46.0': + '@es-joy/jsdoccomment@0.58.0': dependencies: + '@types/estree': 1.0.8 + '@typescript-eslint/types': 8.43.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 + jsdoc-type-pratt-parser: 5.4.0 '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.23.0': - optional: true - '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.23.0': - optional: true - '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.23.0': - optional: true - '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.23.0': - optional: true - '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.23.0': - optional: true - '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.23.0': - optional: true - '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.23.0': - optional: true - '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.23.0': - optional: true - '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.23.0': - optional: true - '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.23.0': - optional: true - '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.23.0': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.23.0': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.23.0': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.23.0': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.23.0': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.23.0': + '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-x64@0.23.0': + '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.23.0': + '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/openbsd-arm64@0.23.0': + '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.23.0': + '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.23.0': - optional: true - '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.23.0': - optional: true - '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.23.0': - optional: true - '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.23.0': - optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@9.35.0)': + dependencies: + eslint: 9.35.0 + eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0)': dependencies: - eslint: 8.57.0 + eslint: 9.35.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.3.5 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.1': {} + + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.3.5 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.4.0 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -2540,19 +2314,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.35.0': {} - '@humanwhocodes/config-array@0.11.14': + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.5': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 0.15.2 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.4.3': {} '@isaacs/cliui@8.0.2': dependencies: @@ -2590,6 +2370,30 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@mcous/eslint-config@0.7.0(eslint@9.35.0)(typescript@5.9.2)(vitest@2.0.5(@types/node@24.4.0))': + dependencies: + '@eslint/js': 9.35.0 + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + '@vitest/eslint-plugin': 1.3.9(eslint@9.35.0)(typescript@5.9.2)(vitest@2.0.5(@types/node@24.4.0)) + eslint: 9.35.0 + eslint-config-prettier: 10.1.8(eslint@9.35.0) + eslint-plugin-promise: 7.2.1(eslint@9.35.0) + eslint-plugin-simple-import-sort: 12.1.1(eslint@9.35.0) + eslint-plugin-unicorn: 61.0.2(eslint@9.35.0) + typescript: 5.9.2 + typescript-eslint: 8.43.0(eslint@9.35.0)(typescript@5.9.2) + transitivePeerDependencies: + - supports-color + - vitest + + '@mcous/prettier-config@0.4.0(prettier@3.6.2)': + dependencies: + prettier: 3.6.2 + + '@mcous/typescript-config@0.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + '@napi-rs/wasm-runtime@1.0.5': dependencies: '@emnapi/core': 1.5.0 @@ -2616,8 +2420,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.1.1': {} - '@rolldown/binding-android-arm64@1.0.0-beta.37': optional: true @@ -2727,17 +2529,19 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + '@types/mdast@4.0.1': dependencies: '@types/unist': 3.0.0 '@types/ms@0.7.32': {} - '@types/node@22.1.0': + '@types/node@24.4.0': dependencies: - undici-types: 6.13.0 - - '@types/normalize-package-data@2.4.1': {} + undici-types: 7.11.0 '@types/semver@7.5.8': {} @@ -2745,34 +2549,72 @@ snapshots: '@types/validate-npm-package-name@4.0.2': {} - '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.0.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.0.0(eslint@9.35.0)(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.0.0 - '@typescript-eslint/type-utils': 8.0.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 8.0.0(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.0.0(eslint@9.35.0)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.0.0 - eslint: 8.57.0 + eslint: 9.35.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.9.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.43.0 + eslint: 9.35.0 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@8.0.0(eslint@9.35.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.0.0 '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.0.0 debug: 4.3.5 - eslint: 8.57.0 + eslint: 9.35.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.43.0 + debug: 4.3.5 + eslint: 9.35.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 + debug: 4.3.5 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -2781,21 +2623,44 @@ snapshots: '@typescript-eslint/types': 8.0.0 '@typescript-eslint/visitor-keys': 8.0.0 - '@typescript-eslint/type-utils@8.0.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/scope-manager@8.43.0': + dependencies: + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 + + '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@8.57.0)(typescript@5.5.4) + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.0.0(eslint@9.35.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.0.0(eslint@9.35.0)(typescript@5.9.2) debug: 4.3.5 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.9.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.9.2 transitivePeerDependencies: - eslint - supports-color + '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + debug: 4.3.5 + eslint: 9.35.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.0.0': {} - '@typescript-eslint/typescript-estree@8.0.0(typescript@5.5.4)': + '@typescript-eslint/types@8.43.0': {} + + '@typescript-eslint/typescript-estree@8.0.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.0.0 '@typescript-eslint/visitor-keys': 8.0.0 @@ -2804,31 +2669,61 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.9.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 + debug: 4.3.5 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.0.0(eslint@9.35.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.35.0) '@typescript-eslint/scope-manager': 8.0.0 '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.9.2) + eslint: 9.35.0 transitivePeerDependencies: - supports-color - typescript + '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + eslint: 9.35.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.0.0': dependencies: '@typescript-eslint/types': 8.0.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@typescript-eslint/visitor-keys@8.43.0': + dependencies: + '@typescript-eslint/types': 8.43.0 + eslint-visitor-keys: 4.2.1 - '@vitest/coverage-istanbul@2.0.5(vitest@2.0.5(@types/node@22.1.0))': + '@vitest/coverage-istanbul@2.0.5(vitest@2.0.5(@types/node@24.4.0))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.3.5 @@ -2840,7 +2735,18 @@ snapshots: magicast: 0.3.4 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.0.5(@types/node@22.1.0) + vitest: 2.0.5(@types/node@24.4.0) + transitivePeerDependencies: + - supports-color + + '@vitest/eslint-plugin@1.3.9(eslint@9.35.0)(typescript@5.9.2)(vitest@2.0.5(@types/node@24.4.0))': + dependencies: + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + eslint: 9.35.0 + optionalDependencies: + typescript: 5.9.2 + vitest: 2.0.5(@types/node@24.4.0) transitivePeerDependencies: - supports-color @@ -2877,11 +2783,11 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 - acorn-jsx@5.3.2(acorn@8.12.0): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.12.0 + acorn: 8.15.0 - acorn@8.12.0: {} + acorn@8.15.0: {} ajv@6.12.6: dependencies: @@ -2920,6 +2826,8 @@ snapshots: balanced-match@1.0.2: {} + baseline-browser-mapping@2.8.3: {} + binary-searching@2.0.5: {} brace-expansion@1.1.11: @@ -2942,7 +2850,15 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) - builtin-modules@3.3.0: {} + browserslist@4.26.0: + dependencies: + baseline-browser-mapping: 2.8.3 + caniuse-lite: 1.0.30001741 + electron-to-chromium: 1.5.218 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.0) + + builtin-modules@5.0.0: {} cac@6.7.14: {} @@ -2950,6 +2866,8 @@ snapshots: caniuse-lite@1.0.30001639: {} + caniuse-lite@1.0.30001741: {} + chai@5.1.1: dependencies: assertion-error: 2.0.1 @@ -2969,13 +2887,15 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + change-case@5.4.4: {} + character-entities@2.0.2: {} check-error@2.1.1: {} chownr@3.0.0: {} - ci-info@4.0.0: {} + ci-info@4.3.0: {} clean-regexp@1.0.0: dependencies: @@ -3024,9 +2944,9 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.37.1: + core-js-compat@3.45.1: dependencies: - browserslist: 4.23.1 + browserslist: 4.26.0 cross-spawn@7.0.3: dependencies: @@ -3034,17 +2954,23 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + date-fns@2.30.0: dependencies: '@babel/runtime': 7.22.15 - debug@3.2.7: + debug@4.3.5: dependencies: ms: 2.1.2 - debug@4.3.5: + debug@4.4.3: dependencies: - ms: 2.1.2 + ms: 2.1.3 decode-named-character-reference@1.0.2: dependencies: @@ -3064,29 +2990,16 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - eastasianwidth@0.2.0: {} electron-to-chromium@1.4.815: {} + electron-to-chromium@1.5.218: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.10 - tapable: 2.2.1 - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-module-lexer@1.5.4: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3113,227 +3026,120 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.0 - '@esbuild/android-arm': 0.23.0 - '@esbuild/android-arm64': 0.23.0 - '@esbuild/android-x64': 0.23.0 - '@esbuild/darwin-arm64': 0.23.0 - '@esbuild/darwin-x64': 0.23.0 - '@esbuild/freebsd-arm64': 0.23.0 - '@esbuild/freebsd-x64': 0.23.0 - '@esbuild/linux-arm': 0.23.0 - '@esbuild/linux-arm64': 0.23.0 - '@esbuild/linux-ia32': 0.23.0 - '@esbuild/linux-loong64': 0.23.0 - '@esbuild/linux-mips64el': 0.23.0 - '@esbuild/linux-ppc64': 0.23.0 - '@esbuild/linux-riscv64': 0.23.0 - '@esbuild/linux-s390x': 0.23.0 - '@esbuild/linux-x64': 0.23.0 - '@esbuild/netbsd-x64': 0.23.0 - '@esbuild/openbsd-arm64': 0.23.0 - '@esbuild/openbsd-x64': 0.23.0 - '@esbuild/sunos-x64': 0.23.0 - '@esbuild/win32-arm64': 0.23.0 - '@esbuild/win32-ia32': 0.23.0 - '@esbuild/win32-x64': 0.23.0 - escalade@3.1.2: {} + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.1.2(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-config-prettier@9.1.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-i@2.29.1)(eslint@8.57.0): - dependencies: - debug: 4.3.5 - enhanced-resolve: 5.17.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.1 - get-tsconfig: 4.7.5 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.0.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-i@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-es-x@7.5.0(eslint@8.57.0): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 - eslint: 8.57.0 - eslint-compat-utils: 0.1.2(eslint@8.57.0) - - eslint-plugin-i@2.29.1(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-config-prettier@10.1.8(eslint@9.35.0): dependencies: - debug: 4.3.5 - doctrine: 3.0.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.0.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - get-tsconfig: 4.7.5 - is-glob: 4.0.3 - minimatch: 3.1.2 - semver: 7.6.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + eslint: 9.35.0 - eslint-plugin-jsdoc@48.11.0(eslint@8.57.0): + eslint-plugin-jsdoc@57.0.8(eslint@9.35.0): dependencies: - '@es-joy/jsdoccomment': 0.46.0 + '@es-joy/jsdoccomment': 0.58.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.5 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 8.57.0 - espree: 10.1.0 + eslint: 9.35.0 + espree: 10.4.0 esquery: 1.6.0 - parse-imports: 2.1.1 - semver: 7.6.3 + object-deep-merge: 1.0.5 + parse-imports-exports: 0.2.4 + semver: 7.7.2 spdx-expression-parse: 4.0.0 - synckit: 0.9.1 transitivePeerDependencies: - supports-color - eslint-plugin-n@17.10.1(eslint@8.57.0): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - enhanced-resolve: 5.17.0 - eslint: 8.57.0 - eslint-plugin-es-x: 7.5.0(eslint@8.57.0) - get-tsconfig: 4.7.5 - globals: 15.9.0 - ignore: 5.3.1 - minimatch: 9.0.5 - semver: 7.6.3 - - eslint-plugin-promise@7.0.0(eslint@8.57.0): + eslint-plugin-promise@7.2.1(eslint@9.35.0): dependencies: - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + eslint: 9.35.0 - eslint-plugin-sonarjs@1.0.4(eslint@8.57.0): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.35.0): dependencies: - eslint: 8.57.0 + eslint: 9.35.0 - eslint-plugin-unicorn@55.0.0(eslint@8.57.0): + eslint-plugin-unicorn@61.0.2(eslint@9.35.0): dependencies: - '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - ci-info: 4.0.0 + '@babel/helper-validator-identifier': 7.27.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint/plugin-kit': 0.3.5 + change-case: 5.4.4 + ci-info: 4.3.0 clean-regexp: 1.0.0 - core-js-compat: 3.37.1 - eslint: 8.57.0 + core-js-compat: 3.45.1 + eslint: 9.35.0 esquery: 1.6.0 - globals: 15.9.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 + find-up-simple: 1.0.1 + globals: 16.4.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 + jsesc: 3.1.0 pluralize: 8.0.0 - read-pkg-up: 7.0.1 regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.3 - strip-indent: 3.0.0 + regjsparser: 0.12.0 + semver: 7.7.2 + strip-indent: 4.1.0 - eslint-scope@7.2.2: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@8.57.0: + eslint@9.35.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.35.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.5 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@10.1.0: - dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 4.0.0 - - espree@9.6.1: + espree@10.4.0: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 3.4.3 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esquery@1.6.0: dependencies: @@ -3373,6 +3179,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.5 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -3381,9 +3195,9 @@ snapshots: dependencies: reusify: 1.0.4 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -3393,21 +3207,17 @@ snapshots: dependencies: array-back: 6.2.2 - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 + find-up-simple@1.0.1: {} find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.1: {} @@ -3416,13 +3226,9 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -3431,10 +3237,6 @@ snapshots: get-stream@8.0.1: {} - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3452,22 +3254,11 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} - globals@15.9.0: {} + globals@16.4.0: {} globby@11.1.0: dependencies: @@ -3478,26 +3269,20 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - graceful-fs@4.2.10: {} - graphemer@1.4.0: {} has-flag@3.0.0: {} has-flag@4.0.0: {} - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - - hosted-git-info@2.8.9: {} - html-escaper@2.0.2: {} human-signals@5.0.0: {} ignore@5.3.1: {} + ignore@7.0.5: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -3505,24 +3290,11 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-arrayish@0.2.1: {} - - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 + indent-string@5.0.0: {} - is-core-module@2.13.1: + is-builtin-module@5.0.0: dependencies: - hasown: 2.0.0 + builtin-modules: 5.0.0 is-extglob@2.1.1: {} @@ -3534,8 +3306,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-stream@3.0.0: {} isexe@2.0.0: {} @@ -3583,17 +3353,15 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.0.0: {} - - jsesc@0.5.0: {} + jsdoc-type-pratt-parser@5.4.0: {} jsesc@2.5.2: {} jsesc@3.0.2: {} - json-buffer@3.0.1: {} + jsesc@3.1.0: {} - json-parse-even-better-errors@2.3.1: {} + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} @@ -3610,12 +3378,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lines-and-columns@1.2.4: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -3789,7 +3551,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.9 - debug: 4.3.5 + debug: 4.4.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -3813,9 +3575,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@4.0.0: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 - min-indent@1.0.1: {} + mimic-fn@4.0.0: {} minimatch@3.1.2: dependencies: @@ -3836,26 +3601,23 @@ snapshots: ms@2.1.2: {} + ms@2.1.3: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} node-releases@2.0.14: {} - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 + node-releases@2.0.21: {} npm-run-path@5.1.0: dependencies: path-key: 4.0.0 - once@1.4.0: + object-deep-merge@1.0.5: dependencies: - wrappy: 1.0.2 + type-fest: 4.2.0 onetime@6.0.0: dependencies: @@ -3870,52 +3632,32 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-try@2.2.0: {} - package-json-from-dist@1.0.0: {} parent-module@1.0.1: dependencies: callsites: 3.1.0 - parse-imports@2.1.1: + parse-imports-exports@0.2.4: dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 + parse-statements: 1.0.11 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + parse-statements@1.0.11: {} path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.3.1 @@ -3929,6 +3671,8 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pluralize@8.0.0: {} @@ -3941,16 +3685,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-jsdoc@1.3.0(prettier@3.3.3): + prettier-plugin-jsdoc@1.3.3(prettier@3.6.2): dependencies: binary-searching: 2.0.5 comment-parser: 1.4.1 mdast-util-from-markdown: 2.0.0 - prettier: 3.3.3 + prettier: 3.6.2 transitivePeerDependencies: - supports-color - prettier@3.3.3: {} + prettier@3.6.2: {} pretty-format@29.7.0: dependencies: @@ -3964,45 +3708,20 @@ snapshots: react-is@18.3.1: {} - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - regenerator-runtime@0.14.0: {} regexp-tree@0.1.27: {} - regjsparser@0.10.0: + regjsparser@0.12.0: dependencies: - jsesc: 0.5.0 + jsesc: 3.0.2 require-directory@2.1.1: {} resolve-from@4.0.0: {} - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rimraf@5.0.10: dependencies: glob: 10.4.5 @@ -4059,14 +3778,14 @@ snapshots: dependencies: tslib: 2.6.2 - semver@5.7.2: {} - semver@6.3.1: {} semver@7.6.2: {} semver@7.6.3: {} + semver@7.7.2: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -4081,30 +3800,18 @@ snapshots: slash@3.0.0: {} - slashes@3.0.12: {} - source-map-js@1.2.0: {} spawn-command@0.0.2: {} - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 - - spdx-exceptions@2.3.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-exceptions@2.5.0: {} spdx-expression-parse@4.0.0: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 - spdx-license-ids@3.0.13: {} + spdx-license-ids@3.0.22: {} stackback@0.0.2: {} @@ -4132,9 +3839,7 @@ snapshots: strip-final-newline@3.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.0: {} strip-json-comments@3.1.1: {} @@ -4150,15 +3855,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.1: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.2 - - tapable@2.2.1: {} - tar@7.4.0: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -4174,8 +3870,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - text-table@0.2.0: {} - tinybench@2.8.0: {} tinypool@1.0.0: {} @@ -4192,9 +3886,13 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.5.4 + typescript: 5.9.2 tslib@2.6.2: {} @@ -4204,17 +3902,24 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - - type-fest@0.6.0: {} + type-fest@4.2.0: {} - type-fest@0.8.1: {} + typescript-eslint@8.43.0(eslint@9.35.0)(typescript@5.9.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2) + eslint: 9.35.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - typescript@5.5.4: {} + typescript@5.9.2: {} typical@7.1.1: {} - undici-types@6.13.0: {} + undici-types@7.11.0: {} unist-util-stringify-position@4.0.0: dependencies: @@ -4226,26 +3931,27 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.3(browserslist@4.26.0): + dependencies: + browserslist: 4.26.0 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 uuid@8.3.2: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.1: {} - vite-node@2.0.5(@types/node@22.1.0): + vite-node@2.0.5(@types/node@24.4.0): dependencies: cac: 6.7.14 debug: 4.3.5 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.3.5(@types/node@22.1.0) + vite: 5.3.5(@types/node@24.4.0) transitivePeerDependencies: - '@types/node' - less @@ -4256,23 +3962,23 @@ snapshots: - supports-color - terser - vite@5.3.5(@types/node@22.1.0): + vite@5.3.5(@types/node@24.4.0): dependencies: esbuild: 0.21.5 postcss: 8.4.40 rollup: 4.19.2 optionalDependencies: - '@types/node': 22.1.0 + '@types/node': 24.4.0 fsevents: 2.3.3 - vitest-when@0.4.1(@vitest/expect@2.0.5)(vitest@2.0.5(@types/node@22.1.0)): + vitest-when@0.4.1(@vitest/expect@2.0.5)(vitest@2.0.5(@types/node@24.4.0)): dependencies: pretty-format: 29.7.0 - vitest: 2.0.5(@types/node@22.1.0) + vitest: 2.0.5(@types/node@24.4.0) optionalDependencies: '@vitest/expect': 2.0.5 - vitest@2.0.5(@types/node@22.1.0): + vitest@2.0.5(@types/node@24.4.0): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 @@ -4290,11 +3996,11 @@ snapshots: tinybench: 2.8.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.3.5(@types/node@22.1.0) - vite-node: 2.0.5(@types/node@22.1.0) + vite: 5.3.5(@types/node@24.4.0) + vite-node: 2.0.5(@types/node@24.4.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.1.0 + '@types/node': 24.4.0 transitivePeerDependencies: - less - lightningcss @@ -4325,8 +4031,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..f759bf2 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,10 @@ +import baseConfig from "@mcous/prettier-config"; + +export default { + ...baseConfig, + plugins: ["prettier-plugin-jsdoc"], + tsdoc: true, + semi: true, + singleQuote: false, + trailingComma: "es5", +}; diff --git a/src/__tests__/format-publish-result.test.ts b/src/__tests__/format-publish-result.test.ts index 3c64360..48810a4 100644 --- a/src/__tests__/format-publish-result.test.ts +++ b/src/__tests__/format-publish-result.test.ts @@ -1,12 +1,12 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; -import * as subject from "../format-publish-result.js"; -import type { PackageManifest } from "../read-manifest.js"; -import type { NormalizedOptions } from "../normalize-options.js"; import type { - PublishResult, PublishFile, + PublishResult, } from "../compare-and-publish/index.js"; +import * as subject from "../format-publish-result.js"; +import type { NormalizedOptions } from "../normalize-options.js"; +import type { PackageManifest } from "../read-manifest.js"; describe("formatPublishResult", () => { it("should say if a publish was skipped", () => { diff --git a/src/__tests__/normalize-options.test.ts b/src/__tests__/normalize-options.test.ts index 46220f3..58ddc2d 100644 --- a/src/__tests__/normalize-options.test.ts +++ b/src/__tests__/normalize-options.test.ts @@ -1,8 +1,9 @@ import os from "node:os"; -import { describe, it, expect } from "vitest"; -import * as subject from "../normalize-options.js"; +import { describe, expect, it } from "vitest"; + import * as errors from "../errors.js"; +import * as subject from "../normalize-options.js"; import type { Logger } from "../options.js"; describe("normalizeOptions", () => { diff --git a/src/__tests__/npm-publish.test.ts b/src/__tests__/npm-publish.test.ts index 68f2533..ddedc8f 100644 --- a/src/__tests__/npm-publish.test.ts +++ b/src/__tests__/npm-publish.test.ts @@ -1,18 +1,18 @@ -import { vi, describe, it, expect } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import { when } from "vitest-when"; -import * as subject from "../npm-publish.js"; -import { readManifest, type PackageManifest } from "../read-manifest.js"; -import { - normalizeOptions, - type NormalizedOptions, -} from "../normalize-options.js"; -import { useNpmEnvironment } from "../npm/index.js"; import { compareAndPublish, type PublishResult, } from "../compare-and-publish/index.js"; +import { + type NormalizedOptions, + normalizeOptions, +} from "../normalize-options.js"; +import { useNpmEnvironment } from "../npm/index.js"; +import * as subject from "../npm-publish.js"; import type { Logger, Options } from "../options.js"; +import { type PackageManifest, readManifest } from "../read-manifest.js"; vi.mock("../read-manifest"); vi.mock("../normalize-options"); diff --git a/src/__tests__/read-manifest.test.ts b/src/__tests__/read-manifest.test.ts index 1d295f2..4a0eacf 100644 --- a/src/__tests__/read-manifest.test.ts +++ b/src/__tests__/read-manifest.test.ts @@ -1,11 +1,12 @@ import fs from "node:fs/promises"; -import path from "node:path"; import os from "node:os"; +import path from "node:path"; + import { create as tarCreate } from "tar"; -import { describe, it, beforeEach, afterEach, expect } from "vitest"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import * as subject from "../read-manifest.js"; import * as errors from "../errors.js"; +import * as subject from "../read-manifest.js"; describe("readManifest", () => { let directory: string; diff --git a/src/action/__tests__/main.test.ts b/src/action/__tests__/main.test.ts index 0312046..7a88e89 100644 --- a/src/action/__tests__/main.test.ts +++ b/src/action/__tests__/main.test.ts @@ -1,4 +1,4 @@ -import { vi, describe, it, beforeEach, expect } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { when } from "vitest-when"; import { npmPublish } from "../../index.js"; @@ -13,22 +13,14 @@ describe("run", () => { vi.stubEnv("RUNNER_TEMP", "/path/to/temp"); when(core.getRequiredSecretInput).calledWith("token").thenReturn("abc123"); - when(core.getInput) - .calledWith("package") - .thenReturn("./package.json"); - when(core.getInput) + when(core.getInput).calledWith("package").thenReturn("./package.json"); + when(core.getInput) .calledWith("registry") .thenReturn("https://example.com"); - when(core.getInput) - .calledWith("tag") - .thenReturn("next"); - when(core.getInput) - .calledWith("access") - .thenReturn("restricted"); + when(core.getInput).calledWith("tag").thenReturn("next"); + when(core.getInput).calledWith("access").thenReturn("restricted"); when(core.getBooleanInput).calledWith("provenance").thenReturn(true); - when(core.getInput) - .calledWith("strategy") - .thenReturn("all"); + when(core.getInput).calledWith("strategy").thenReturn("all"); when(core.getBooleanInput).calledWith("ignore-scripts").thenReturn(false); when(core.getBooleanInput).calledWith("dry-run").thenReturn(true); }); diff --git a/src/action/core.ts b/src/action/core.ts index d188b64..62add55 100644 --- a/src/action/core.ts +++ b/src/action/core.ts @@ -1,12 +1,12 @@ /** Wrapper module for @actions/core */ import { + debug as ghLogDebug, + error as ghLogError, getInput as ghGetInput, + info as ghLogInfo, + setFailed as ghSetFailed, setOutput as ghSetOutput, setSecret as ghSetSecret, - setFailed as ghSetFailed, - debug as ghLogDebug, - info as ghLogInfo, - error as ghLogError, } from "@actions/core"; import type { Logger } from "../options.js"; @@ -24,9 +24,9 @@ export const logger: Logger = { * @param name Input name * @returns The input string value, or undefined if not set */ -export function getInput(name: string): T | undefined { +export function getInput(name: string): string | undefined { const inputString = ghGetInput(name); - return inputString.length > 0 ? (inputString as T) : undefined; + return inputString.length > 0 ? inputString : undefined; } /** @@ -85,11 +85,10 @@ export function setOutput( defaultValue: string | boolean ): void; -// eslint-disable-next-line jsdoc/require-jsdoc export function setOutput( name: string, value: string | boolean | undefined, - defaultValue?: string | boolean | undefined + defaultValue?: string | boolean ): void { ghSetOutput(name, value ?? defaultValue); } diff --git a/src/action/main.ts b/src/action/main.ts index c65c6ea..c29bbaa 100644 --- a/src/action/main.ts +++ b/src/action/main.ts @@ -1,5 +1,5 @@ /** Action entry point */ -import { npmPublish } from "../index.js"; +import { type Access, npmPublish, type Strategy } from "../index.js"; import * as core from "./core.js"; /** Run the action. */ @@ -9,13 +9,13 @@ async function run(): Promise { registry: core.getInput("registry"), package: core.getInput("package"), tag: core.getInput("tag"), - access: core.getInput("access"), + access: core.getInput("access") as Access | undefined, provenance: core.getBooleanInput("provenance"), - strategy: core.getInput("strategy"), + strategy: core.getInput("strategy") as Strategy | undefined, ignoreScripts: core.getBooleanInput("ignore-scripts"), dryRun: core.getBooleanInput("dry-run"), logger: core.logger, - temporaryDirectory: process.env["RUNNER_TEMP"], + temporaryDirectory: process.env.RUNNER_TEMP, }); core.setOutput("id", results.id, ""); diff --git a/src/cli/__tests__/cli.test.ts b/src/cli/__tests__/cli.test.ts index 3eaa9c5..840404a 100644 --- a/src/cli/__tests__/cli.test.ts +++ b/src/cli/__tests__/cli.test.ts @@ -1,4 +1,4 @@ -import { vi, describe, beforeEach, it, expect } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { when } from "vitest-when"; import { npmPublish, type Options } from "../../index.js"; diff --git a/src/cli/__tests__/parse-cli-arguments.test.ts b/src/cli/__tests__/parse-cli-arguments.test.ts index 5510e7a..3180759 100644 --- a/src/cli/__tests__/parse-cli-arguments.test.ts +++ b/src/cli/__tests__/parse-cli-arguments.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import * as subject from "../parse-cli-arguments.js"; diff --git a/src/cli/index.ts b/src/cli/index.ts index 054f951..cfc2ebb 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -1,4 +1,4 @@ -import { npmPublish, type Logger } from "../index.js"; +import { type Logger, npmPublish } from "../index.js"; import { parseCliArguments } from "./parse-cli-arguments.js"; export const USAGE = ` diff --git a/src/cli/parse-cli-arguments.ts b/src/cli/parse-cli-arguments.ts index f2316f1..083b8c4 100644 --- a/src/cli/parse-cli-arguments.ts +++ b/src/cli/parse-cli-arguments.ts @@ -1,6 +1,7 @@ /** Wrapper module for command-line-args */ import commandLineArgs from "command-line-args"; + import type { Options } from "../options.js"; const ARGUMENTS_OPTIONS = [ diff --git a/src/compare-and-publish/__tests__/compare-and-publish.test.ts b/src/compare-and-publish/__tests__/compare-and-publish.test.ts index b405950..bc19246 100644 --- a/src/compare-and-publish/__tests__/compare-and-publish.test.ts +++ b/src/compare-and-publish/__tests__/compare-and-publish.test.ts @@ -1,15 +1,14 @@ -import { vi, describe, it, beforeEach, expect } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { when } from "vitest-when"; -import type { PackageManifest } from "../../read-manifest.js"; -import type { NormalizedOptions } from "../../normalize-options.js"; - -import * as subject from "../compare-and-publish.js"; import * as errors from "../../errors.js"; -import type { Logger } from "../../options.js"; +import type { NormalizedOptions } from "../../normalize-options.js"; import { callNpmCli, type NpmCliEnvironment } from "../../npm/index.js"; +import type { Logger } from "../../options.js"; +import type { PackageManifest } from "../../read-manifest.js"; +import * as subject from "../compare-and-publish.js"; import { compareVersions } from "../compare-versions.js"; -import { getViewArguments, getPublishArguments } from "../get-arguments.js"; +import { getPublishArguments, getViewArguments } from "../get-arguments.js"; vi.mock("../../npm"); vi.mock("../compare-versions"); diff --git a/src/compare-and-publish/__tests__/compare-versions.test.ts b/src/compare-and-publish/__tests__/compare-versions.test.ts index b57c19e..0dcc252 100644 --- a/src/compare-and-publish/__tests__/compare-versions.test.ts +++ b/src/compare-and-publish/__tests__/compare-versions.test.ts @@ -1,7 +1,7 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; -import * as subject from "../compare-versions.js"; import type { NormalizedOptions } from "../../normalize-options.js"; +import * as subject from "../compare-versions.js"; describe("compareVersions", () => { it("should recognize initial release on a tag", () => { diff --git a/src/compare-and-publish/__tests__/get-arguments.test.ts b/src/compare-and-publish/__tests__/get-arguments.test.ts index 7e4ce8a..f65f90c 100644 --- a/src/compare-and-publish/__tests__/get-arguments.test.ts +++ b/src/compare-and-publish/__tests__/get-arguments.test.ts @@ -1,7 +1,7 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; -import * as subject from "../get-arguments.js"; import type { NormalizedOptions } from "../../normalize-options.js"; +import * as subject from "../get-arguments.js"; describe("get command arguments", () => { describe("getViewArguments", () => { diff --git a/src/compare-and-publish/compare-and-publish.ts b/src/compare-and-publish/compare-and-publish.ts index bf9a6f3..6c0569b 100644 --- a/src/compare-and-publish/compare-and-publish.ts +++ b/src/compare-and-publish/compare-and-publish.ts @@ -1,16 +1,16 @@ -import type { PackageManifest } from "../read-manifest.js"; import type { NormalizedOptions } from "../normalize-options.js"; import { - VIEW, - PUBLISH, + callNpmCli, E404, E409, EPUBLISHCONFLICT, - callNpmCli, type NpmCliEnvironment, + PUBLISH, + VIEW, } from "../npm/index.js"; +import type { PackageManifest } from "../read-manifest.js"; import { compareVersions, type VersionComparison } from "./compare-versions.js"; -import { getViewArguments, getPublishArguments } from "./get-arguments.js"; +import { getPublishArguments, getViewArguments } from "./get-arguments.js"; export interface PublishResult extends VersionComparison { id: string | undefined; diff --git a/src/compare-and-publish/compare-versions.ts b/src/compare-and-publish/compare-versions.ts index f998513..72723e3 100644 --- a/src/compare-and-publish/compare-versions.ts +++ b/src/compare-and-publish/compare-versions.ts @@ -2,10 +2,10 @@ import semverDifference from "semver/functions/diff.js"; import semverGreaterThan from "semver/functions/gt.js"; import semverValid from "semver/functions/valid.js"; -import { STRATEGY_ALL } from "../options.js"; import type { NormalizedOptions } from "../normalize-options.js"; -import { INITIAL, DIFFERENT, type ReleaseType } from "../results.js"; import type { NpmViewData } from "../npm/index.js"; +import { STRATEGY_ALL } from "../options.js"; +import { DIFFERENT, INITIAL, type ReleaseType } from "../results.js"; export interface VersionComparison { type: ReleaseType | undefined; diff --git a/src/format-publish-result.ts b/src/format-publish-result.ts index ad68256..75e0a5d 100644 --- a/src/format-publish-result.ts +++ b/src/format-publish-result.ts @@ -1,8 +1,8 @@ import os from "node:os"; import type { PublishResult } from "./compare-and-publish/index.js"; -import type { PackageManifest } from "./read-manifest.js"; import type { NormalizedOptions } from "./normalize-options.js"; +import type { PackageManifest } from "./read-manifest.js"; const DRY_RUN_BANNER = "=== DRY RUN === DRY RUN === DRY RUN === DRY RUN === DRY RUN ==="; diff --git a/src/index.ts b/src/index.ts index c16a4a6..a4cc650 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ // Export the external type definitions as named exports +export * from "./errors.js"; export * from "./options.js"; export * from "./results.js"; -export * from "./errors.js"; // Export `npmPublish` as a named export export { npmPublish } from "./npm-publish.js"; diff --git a/src/normalize-options.ts b/src/normalize-options.ts index 473830e..e08ddc0 100644 --- a/src/normalize-options.ts +++ b/src/normalize-options.ts @@ -1,17 +1,17 @@ import os from "node:os"; import * as errors from "./errors.js"; -import type { PackageManifest } from "./read-manifest.js"; import { + type Access, ACCESS_PUBLIC, ACCESS_RESTRICTED, - STRATEGY_UPGRADE, - STRATEGY_ALL, - type Access, - type Strategy, - type Options, type Logger, + type Options, + type Strategy, + STRATEGY_ALL, + STRATEGY_UPGRADE, } from "./options.js"; +import type { PackageManifest } from "./read-manifest.js"; const REGISTRY_NPM = "https://registry.npmjs.org/"; export const TAG_LATEST = "latest"; diff --git a/src/npm-publish.ts b/src/npm-publish.ts index 7bd3f05..c5c4ed7 100644 --- a/src/npm-publish.ts +++ b/src/npm-publish.ts @@ -1,9 +1,9 @@ -import { readManifest } from "./read-manifest.js"; -import { normalizeOptions } from "./normalize-options.js"; -import { useNpmEnvironment } from "./npm/index.js"; import { compareAndPublish } from "./compare-and-publish/index.js"; import { formatPublishResult } from "./format-publish-result.js"; +import { normalizeOptions } from "./normalize-options.js"; +import { useNpmEnvironment } from "./npm/index.js"; import type { Options } from "./options.js"; +import { readManifest } from "./read-manifest.js"; import type { Results } from "./results.js"; /** diff --git a/src/npm/__tests__/use-npm-environment.test.ts b/src/npm/__tests__/use-npm-environment.test.ts index cbb3960..e246cfd 100644 --- a/src/npm/__tests__/use-npm-environment.test.ts +++ b/src/npm/__tests__/use-npm-environment.test.ts @@ -2,10 +2,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import { describe, beforeEach, afterEach, it, expect } from "vitest"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import type { PackageManifest } from "../../read-manifest.js"; import type { NormalizedOptions } from "../../normalize-options.js"; +import type { PackageManifest } from "../../read-manifest.js"; import * as subject from "../use-npm-environment.js"; describe("useNpmEnvironment", () => { @@ -57,7 +57,7 @@ describe("useNpmEnvironment", () => { inputManifest, inputOptions, async (manifest, options, environment) => { - npmrcPath = environment["npm_config_userconfig"]!; + npmrcPath = environment.npm_config_userconfig!; npmrcContents = await fs.readFile(npmrcPath, "utf8"); return { manifest, options, environment }; } diff --git a/src/npm/call-npm-cli.ts b/src/npm/call-npm-cli.ts index ec257d3..fcda95d 100644 --- a/src/npm/call-npm-cli.ts +++ b/src/npm/call-npm-cli.ts @@ -70,15 +70,14 @@ export async function callNpmCli( let error; if (exitCode === 0) { - successData = parseJson>(stdout); + successData = parseJson(stdout) as SuccessData | undefined; } else { - const errorPayload = parseJson<{ error?: { code?: unknown } }>( - stdout, - stderr - ); + const errorPayload = parseJson(stdout, stderr) as + | { error?: { code?: unknown } } + | undefined; - if (errorPayload?.error?.code) { - errorCode = String(errorPayload.error.code).toUpperCase(); + if (typeof errorPayload?.error?.code === "string") { + errorCode = errorPayload.error.code.toUpperCase(); } error = new errors.NpmCallError(command, exitCode, stderr); @@ -135,13 +134,13 @@ async function execNpm( * @param values CLI outputs to check * @returns Parsed JSON, if able to parse. */ -function parseJson(...values: string[]): TParsed | undefined { +function parseJson(...values: string[]): unknown { for (const value of values) { const jsonValue = JSON_MATCH_RE.exec(value)?.[1]; if (jsonValue) { try { - return JSON.parse(jsonValue) as TParsed; + return JSON.parse(jsonValue); } catch { return undefined; } diff --git a/src/npm/use-npm-environment.ts b/src/npm/use-npm-environment.ts index ac0b543..d984629 100644 --- a/src/npm/use-npm-environment.ts +++ b/src/npm/use-npm-environment.ts @@ -2,8 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import type { PackageManifest } from "../read-manifest.js"; import type { NormalizedOptions } from "../normalize-options.js"; +import type { PackageManifest } from "../read-manifest.js"; export type NpmCliEnvironment = Record; diff --git a/src/read-manifest.ts b/src/read-manifest.ts index ff4aea2..d806cef 100644 --- a/src/read-manifest.ts +++ b/src/read-manifest.ts @@ -1,9 +1,11 @@ import fs from "node:fs/promises"; import path from "node:path"; -import validatePackageName from "validate-npm-package-name"; + import semverValid from "semver/functions/valid.js"; -import { list as tarList } from "tar/list"; import type { ReadEntry } from "tar"; +import { list as tarList } from "tar/list"; +import validatePackageName from "validate-npm-package-name"; + import * as errors from "./errors.js"; /** A package manifest (package.json) and associated details. */ @@ -114,9 +116,9 @@ export async function readManifest( try { manifestJson = JSON.parse(manifestContents) as Record; - name = manifestJson["name"]; - version = normalizeVersion(manifestJson["version"]); - publishConfig = manifestJson["publishConfig"] ?? {}; + name = manifestJson.name; + version = normalizeVersion(manifestJson.version); + publishConfig = manifestJson.publishConfig ?? {}; } catch (error) { throw new errors.PackageJsonParseError(packageSpec, error); } @@ -126,7 +128,7 @@ export async function readManifest( } if (typeof version !== "string") { - throw new errors.InvalidPackageVersionError(manifestJson["version"]); + throw new errors.InvalidPackageVersionError(manifestJson.version); } if ( diff --git a/src/results.ts b/src/results.ts index fd61655..c021028 100644 --- a/src/results.ts +++ b/src/results.ts @@ -1,6 +1,7 @@ -import type { Access, Strategy } from "./options.js"; import type { ReleaseType as SemverReleaseType } from "semver"; +import type { Access, Strategy } from "./options.js"; + /** Release type */ export type ReleaseType = SemverReleaseType | typeof INITIAL | typeof DIFFERENT; diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index 1d0d3ee..0000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "allowJs": true - }, - "include": ["**/*.ts", "**/*.mts", "**/*.js"] -} diff --git a/tsconfig.json b/tsconfig.json index c8fc5ef..b578cdd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,36 +1,15 @@ { + "extends": ["@mcous/typescript-config/base.json"], "compilerOptions": { // target Node v20 / ES2023 "target": "es2023", "module": "nodenext", "moduleResolution": "nodenext", - "resolveJsonModule": true, - - // Interoperability with CommonJS modules - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - - // Do not error out for errors in third-party modules - "skipLibCheck": true, - - // Type-checking options - "strict": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - - // inputs and outputs "declaration": true, "sourceMap": true, "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "types": ["node"] }, "include": ["src/**/*.ts"] }