diff --git a/package.json b/package.json index 65b5328795..4cbfb17959 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "clean": "rimraf dist && lerna exec -- rimraf dist tsconfig.tsbuildinfo", "build": "tsc -b packages", "build:watch": "yarn build --watch", - "postbuild": "ts-node tools/test-dist", + "postbuild": "tsx tools/test-dist.ts", "docs": "yarn build && npx typedoc", "lerna:publish": "lerna publish --force-publish --conventional-commits --no-changelog --exact", "lint:js": "prettier --check . && eslint . --cache", @@ -24,8 +24,8 @@ "test": "xvfb-maybe vitest run --project fast --project slow", "test:fast": "xvfb-maybe vitest run --project fast", "test:slow": "xvfb-maybe vitest run --project slow", - "test:clear": "ts-node tools/test-clear", - "postinstall": "rimraf node_modules/.bin/*.ps1 && ts-node ./tools/gen-tsconfigs.ts && ts-node ./tools/gen-ts-glue.ts", + "test:clear": "tsx tools/test-clear.ts", + "postinstall": "rimraf node_modules/.bin/*.ps1 && tsx ./tools/gen-tsconfigs.ts && tsx ./tools/gen-ts-glue.ts", "prepare": "husky install", "preversion": "yarn build" }, @@ -70,6 +70,7 @@ "semver": "^7.2.1", "source-map-support": "^0.5.13", "sudo-prompt": "^9.1.1", + "tsx": "^4.19.3", "username": "^5.1.0", "vite": "^5.0.12", "webpack": "^5.69.1", @@ -119,7 +120,6 @@ "prettier": "^2.4.0", "rimraf": "^3.0.1", "syncpack": "^11.2.1", - "ts-node": "^10.0.0", "typedoc": "0.25.13", "typescript": "~5.4.5", "vitest": "^3.0.3", diff --git a/packages/api/core/package.json b/packages/api/core/package.json index 910c199ecb..aa8f2c20fb 100644 --- a/packages/api/core/package.json +++ b/packages/api/core/package.json @@ -60,6 +60,7 @@ "semver": "^7.2.1", "source-map-support": "^0.5.13", "sudo-prompt": "^9.1.1", + "tsx": "^4.19.3", "username": "^5.1.0" }, "engines": { diff --git a/packages/api/core/spec/fast/util/forge-config.spec.ts b/packages/api/core/spec/fast/util/forge-config.spec.ts index 212eaa60d2..d4ff846af0 100644 --- a/packages/api/core/spec/fast/util/forge-config.spec.ts +++ b/packages/api/core/spec/fast/util/forge-config.spec.ts @@ -252,10 +252,24 @@ describe('findConfig', () => { expect(conf.buildIdentifier).toEqual('yml'); }); - it('should resolve the TS file exports of forge.config.ts if config.forge does not exist and the TS config exists', async () => { - const fixturePath = path.resolve(__dirname, '../../fixture/dummy_default_ts_conf'); - const conf = await findConfig(fixturePath); - expect(conf.buildIdentifier).toEqual('typescript'); + describe('TypeScript', () => { + it('should resolve forge.config.ts', async () => { + const fixturePath = path.resolve(__dirname, '../../fixture/dummy_default_ts_conf'); + const conf = await findConfig(fixturePath); + expect(conf.buildIdentifier).toEqual('typescript'); + }); + + it('should resolve forge.config.cts', async () => { + const fixturePath = path.resolve(__dirname, '../../fixture/dummy_default_cts_conf'); + const conf = await findConfig(fixturePath); + expect(conf.buildIdentifier).toEqual('typescript-commonjs'); + }); + + it('should resolve forge.config.mts', async () => { + const fixturePath = path.resolve(__dirname, '../../fixture/dummy_default_mts_conf'); + const conf = await findConfig(fixturePath); + expect(conf.buildIdentifier).toEqual('typescript-esm'); + }); }); }); }); diff --git a/packages/api/core/spec/fixture/dummy_default_cts_conf/forge.config.cts b/packages/api/core/spec/fixture/dummy_default_cts_conf/forge.config.cts new file mode 100644 index 0000000000..0e87630e42 --- /dev/null +++ b/packages/api/core/spec/fixture/dummy_default_cts_conf/forge.config.cts @@ -0,0 +1,7 @@ +import type { ForgeConfig } from '@electron-forge/shared-types'; + +const config: ForgeConfig = { + buildIdentifier: 'typescript-commonjs', +}; + +export default config; diff --git a/packages/api/core/spec/fixture/dummy_default_cts_conf/package.json b/packages/api/core/spec/fixture/dummy_default_cts_conf/package.json new file mode 100644 index 0000000000..f60ef4faf3 --- /dev/null +++ b/packages/api/core/spec/fixture/dummy_default_cts_conf/package.json @@ -0,0 +1,18 @@ +{ + "name": "", + "productName": "", + "version": "1.0.0", + "description": "", + "main": "src/index.js", + "type": "commonjs", + "scripts": { + "start": "electron-forge start" + }, + "keywords": [], + "author": "", + "license": "MIT", + "devDependencies": { + "@electron-forge/shared-types": "*", + "electron": "99.99.99" + } +} diff --git a/packages/api/core/spec/fixture/dummy_default_mts_conf/forge.config.mts b/packages/api/core/spec/fixture/dummy_default_mts_conf/forge.config.mts new file mode 100644 index 0000000000..0ac856c096 --- /dev/null +++ b/packages/api/core/spec/fixture/dummy_default_mts_conf/forge.config.mts @@ -0,0 +1,7 @@ +import type { ForgeConfig } from '@electron-forge/shared-types'; + +const config: ForgeConfig = { + buildIdentifier: 'typescript-esm', +}; + +export default config; diff --git a/packages/api/core/spec/fixture/dummy_default_mts_conf/package.json b/packages/api/core/spec/fixture/dummy_default_mts_conf/package.json new file mode 100644 index 0000000000..ac67fceff2 --- /dev/null +++ b/packages/api/core/spec/fixture/dummy_default_mts_conf/package.json @@ -0,0 +1,18 @@ +{ + "name": "", + "productName": "", + "version": "1.0.0", + "description": "", + "main": "src/index.js", + "type": "module", + "scripts": { + "start": "electron-forge start" + }, + "keywords": [], + "author": "", + "license": "MIT", + "devDependencies": { + "@electron-forge/shared-types": "*", + "electron": "99.99.99" + } +} diff --git a/packages/api/core/src/api/init-scripts/init-link.ts b/packages/api/core/src/api/init-scripts/init-link.ts index f61b916c62..e24cfd8e23 100644 --- a/packages/api/core/src/api/init-scripts/init-link.ts +++ b/packages/api/core/src/api/init-scripts/init-link.ts @@ -1,3 +1,4 @@ +import fs from 'node:fs'; import path from 'node:path'; import { PMDetails, spawnPackageManager } from '@electron-forge/core-utils'; @@ -34,6 +35,7 @@ export async function initLink(pm: PMDetails, dir: string, task?: ForgeListrT }); } } + await fs.promises.chmod(path.resolve(dir, 'node_modules', '.bin', 'electron-forge'), 0o755); } else { d('LINK_FORGE_DEPENDENCIES_ON_INIT is falsy. Skipping.'); } diff --git a/packages/api/core/src/util/forge-config.ts b/packages/api/core/src/util/forge-config.ts index a30b5e73e3..4291a65777 100644 --- a/packages/api/core/src/util/forge-config.ts +++ b/packages/api/core/src/util/forge-config.ts @@ -1,18 +1,27 @@ import path from 'node:path'; +import { supportsModuleRegister } from '@electron-forge/core-utils'; import { ForgeConfig, ResolvedForgeConfig } from '@electron-forge/shared-types'; +import chalk from 'chalk'; import fs from 'fs-extra'; -import * as interpret from 'interpret'; +import interpret from 'interpret'; import { template } from 'lodash'; -import * as rechoir from 'rechoir'; +import rechoir from 'rechoir'; -// eslint-disable-next-line n/no-missing-import -import { dynamicImportMaybe } from '../../helper/dynamic-import.js'; +import { dynamicImportMaybe } from '../../helper/dynamic-import'; import { runMutatingHook } from './hook'; import PluginInterface from './plugin-interface'; import { readRawPackageJson } from './read-package-json'; +/* eslint-disable @typescript-eslint/no-require-imports */ +// TSX imports only work with Node16 resolution while we're still on CommonJS resolution in tsconfig.base.json +// However, all of Vite's entire TS types break when using CommonJS with Node16 resolution, it's more approachable +// to use `require` directly for the time being. +const tsxCJS = require('tsx/cjs/api'); +const tsxESM = require('tsx/esm/api'); +/* eslint-enable @typescript-eslint/no-require-imports */ + const underscoreCase = (str: string) => str .replace(/(.)([A-Z][a-z]+)/g, '$1_$2') @@ -99,6 +108,9 @@ export function fromBuildIdentifier(map: BuildIdentifierMap): BuildIdentif }; } +/** + * Checks specifically if the Forge config is a file path on disk. + */ export async function forgeConfigIsValidFilePath(dir: string, forgeConfig: string | ForgeConfig): Promise { return typeof forgeConfig === 'string' && ((await fs.pathExists(path.resolve(dir, forgeConfig))) || fs.pathExists(path.resolve(dir, `${forgeConfig}.js`))); } @@ -130,10 +142,14 @@ export default async (dir: string): Promise => { } if (!forgeConfig || typeof forgeConfig === 'string') { - for (const extension of ['.js', ...Object.keys(interpret.extensions)]) { + // interpret.extensions doesn't support `.mts` files + for (const extension of ['.js', '.mts', ...Object.keys(interpret.extensions)]) { const pathToConfig = path.resolve(dir, `forge.config${extension}`); if (await fs.pathExists(pathToConfig)) { - rechoir.prepare(interpret.extensions, pathToConfig, dir); + // Use rechoir to parse any alternative syntaxes (except for TypeScript when tsx register is supported) + if (!supportsModuleRegister(process.version) || !['.cts', '.mts', '.ts'].includes(extension)) { + rechoir.prepare(interpret.extensions, pathToConfig, dir); + } forgeConfig = `forge.config${extension}`; break; } @@ -143,14 +159,27 @@ export default async (dir: string): Promise => { if (await forgeConfigIsValidFilePath(dir, forgeConfig)) { const forgeConfigPath = path.resolve(dir, forgeConfig as string); + let unregisterCJS, unregisterESM; try { - // The loaded "config" could potentially be a static forge config, ESM module or async function + // Register tsx enhancements + unregisterCJS = tsxCJS.register(); + unregisterESM = tsxESM.register(); + + // The loaded "config" could potentially be a static Forge config, ESM module, or async function const loaded = (await dynamicImportMaybe(forgeConfigPath)) as MaybeESM; const maybeForgeConfig = 'default' in loaded ? loaded.default : loaded; forgeConfig = typeof maybeForgeConfig === 'function' ? await maybeForgeConfig() : maybeForgeConfig; } catch (err) { - console.error(`Failed to load: ${forgeConfigPath}`); + console.error(chalk.red(`Failed to load config file at ${chalk.green(forgeConfigPath)}`)); + console.error(chalk.red(err)); throw err; + } finally { + if (typeof unregisterCJS === 'function') { + unregisterCJS(); + } + if (typeof unregisterESM === 'function') { + unregisterESM(); + } } } else if (typeof forgeConfig !== 'object') { throw new Error('Expected packageJSON.config.forge to be an object or point to a requirable JS file'); diff --git a/packages/api/core/src/util/plugin-interface.ts b/packages/api/core/src/util/plugin-interface.ts index b8a07769a0..97e4f4fb56 100644 --- a/packages/api/core/src/util/plugin-interface.ts +++ b/packages/api/core/src/util/plugin-interface.ts @@ -152,7 +152,8 @@ export default class PluginInterface implements IForgePluginInterface { let newStartFn; const claimed: string[] = []; for (const plugin of this.plugins) { - if (typeof plugin.startLogic === 'function' && plugin.startLogic !== PluginBase.prototype.startLogic) { + // FIXME(erickzhao): reference equality doesn't work due to loading Forge config from `tsx` + if (typeof plugin.startLogic === 'function' && plugin.startLogic.toString() !== PluginBase.prototype.startLogic.toString()) { claimed.push(plugin.name); newStartFn = plugin.startLogic; } diff --git a/packages/plugin/fuses/spec/FusesPlugin.slow.spec.ts b/packages/plugin/fuses/spec/FusesPlugin.slow.spec.ts index ba33a49461..25cea6f976 100644 --- a/packages/plugin/fuses/spec/FusesPlugin.slow.spec.ts +++ b/packages/plugin/fuses/spec/FusesPlugin.slow.spec.ts @@ -1,9 +1,11 @@ import fs from 'node:fs'; import path from 'node:path'; +import { PACKAGE_MANAGERS, spawnPackageManager } from '@electron-forge/core-utils'; import { CrossSpawnOptions, spawn } from '@malept/cross-spawn-promise'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { initLink } from '../../../api/core/src/api/init-scripts/init-link'; import { getElectronExecutablePath } from '../src/util/getElectronExecutablePath'; describe('FusesPlugin', () => { @@ -25,9 +27,17 @@ describe('FusesPlugin', () => { const outDir = path.join(appPath, 'out', 'fuses-test-app'); beforeAll(async () => { + await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['run', 'link:prepare']); delete process.env.TS_NODE_PROJECT; await fs.promises.copyFile(path.join(appPath, 'package.json.tmpl'), path.join(appPath, 'package.json')); await spawn('yarn', ['install'], spawnOptions); + + // Installing deps removes symlinks that were added at the start of this + // spec via `api.init`. So we should re-link local forge dependencies + // again. + process.env.LINK_FORGE_DEPENDENCIES_ON_INIT = '1'; + await initLink(PACKAGE_MANAGERS['yarn'], appPath); + delete process.env.LINK_FORGE_DEPENDENCIES_ON_INIT; }); afterAll(async () => { diff --git a/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json b/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json index 6057dbeed8..b4da17fe01 100644 --- a/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json +++ b/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json @@ -12,7 +12,7 @@ "native-hello-world": "^2.0.0" }, "devDependencies": { - "@vercel/webpack-asset-relocator-loader": "1.7.0", + "@vercel/webpack-asset-relocator-loader": "1.7.3", "electron": "^33.3.1" } }, @@ -126,11 +126,14 @@ } }, "node_modules/@vercel/webpack-asset-relocator-loader": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.0.tgz", - "integrity": "sha512-1Dy3BdOliDwxA7VZSIg55E1d/us2KvsCQOZV25fgufG//CsnZBGiSAL7qewTQf7YVHH0A9PHgzwMmKIZ8aFYVw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz", + "integrity": "sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "resolve": "^1.10.0" + } }, "node_modules/bindings": { "version": "1.5.0", @@ -440,6 +443,16 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -568,6 +581,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -589,6 +615,22 @@ "node": ">=10.19.0" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -722,6 +764,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -763,6 +812,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", @@ -858,6 +928,19 @@ "node": ">= 8.0" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", diff --git a/packages/template/vite-typescript/package.json b/packages/template/vite-typescript/package.json index 42b21df326..469519bb67 100644 --- a/packages/template/vite-typescript/package.json +++ b/packages/template/vite-typescript/package.json @@ -15,12 +15,12 @@ "node": ">= 16.4.0" }, "dependencies": { + "@electron-forge/core-utils": "7.8.0", "@electron-forge/shared-types": "7.8.0", "@electron-forge/template-base": "7.8.0", "fs-extra": "^10.0.0" }, "devDependencies": { - "@electron-forge/core-utils": "7.8.0", "@electron-forge/test-utils": "7.8.0", "fast-glob": "^3.2.7", "vitest": "^3.0.3" diff --git a/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.spec.ts b/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.spec.ts index 05eb9ea878..06e57c3243 100644 --- a/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.spec.ts +++ b/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.spec.ts @@ -1,11 +1,10 @@ import fs from 'node:fs'; -import os from 'node:os'; import path from 'node:path'; import { PACKAGE_MANAGERS, spawnPackageManager } from '@electron-forge/core-utils'; import testUtils from '@electron-forge/test-utils'; import glob from 'fast-glob'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; // eslint-disable-next-line n/no-missing-import import { api } from '../../../api/core/dist/api'; @@ -17,14 +16,14 @@ describe('ViteTypeScriptTemplate', () => { beforeAll(async () => { await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['run', 'link:prepare']); dir = await testUtils.ensureTestDirIsNonexistent(); - }); - afterAll(async () => { - await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['run', 'link:remove']); - if (os.platform() !== 'win32') { - // Windows platform `fs.remove(dir)` logic using `npm run test:clear`. - await fs.promises.rm(dir, { force: true, recursive: true }); - } + return async () => { + await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['run', 'link:remove']); + if (process.platform !== 'win32') { + // Windows platform `fs.remove(dir)` logic using `npm run test:clear`. + await fs.promises.rm(dir, { force: true, recursive: true }); + } + }; }); describe('template files are copied to project', () => { @@ -68,7 +67,7 @@ describe('ViteTypeScriptTemplate', () => { describe('package', () => { let cwd: string; - beforeAll(async () => { + beforeEach(async () => { delete process.env.TS_NODE_PROJECT; // Vite resolves plugins via cwd cwd = process.cwd(); @@ -89,10 +88,10 @@ describe('ViteTypeScriptTemplate', () => { // spec via `api.init`. So we should re-link local forge dependencies // again. await initLink(PACKAGE_MANAGERS['yarn'], dir); - }); - afterAll(() => { - process.chdir(cwd); + return () => { + process.chdir(cwd); + }; }); it('should pass', async () => { diff --git a/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts b/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts index 3c23f07562..90dbbd911a 100644 --- a/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts +++ b/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts @@ -1,5 +1,6 @@ import path from 'node:path'; +import { supportsModuleRegister } from '@electron-forge/core-utils'; import { ForgeListrTaskDefinition, InitTemplateOptions } from '@electron-forge/shared-types'; import { BaseTemplate } from '@electron-forge/template-base'; import fs from 'fs-extra'; @@ -7,6 +8,18 @@ import fs from 'fs-extra'; class ViteTypeScriptTemplate extends BaseTemplate { public templateDir = path.resolve(__dirname, '..', 'tmpl'); + /** + * `ts-node` is required for `forge.config.ts` files for Node.js versions where + * `module.register` is not supported. + */ + public get devDependencies(): string[] { + if (!supportsModuleRegister(process.version)) { + return ['ts-node@^10.0.0', ...super.devDependencies]; + } else { + return super.devDependencies; + } + } + public async initializeTemplate(directory: string, options: InitTemplateOptions): Promise { const superTasks = await super.initializeTemplate(directory, options); return [ diff --git a/packages/template/vite-typescript/tmpl/package.json b/packages/template/vite-typescript/tmpl/package.json index 8697eb9a5e..a83b8014d2 100644 --- a/packages/template/vite-typescript/tmpl/package.json +++ b/packages/template/vite-typescript/tmpl/package.json @@ -5,7 +5,6 @@ "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.1", "eslint-plugin-import": "^2.25.0", - "ts-node": "^10.0.0", "typescript": "~4.5.4", "vite": "^5.0.12" } diff --git a/packages/template/webpack-typescript/package.json b/packages/template/webpack-typescript/package.json index 13dc0aea5a..060eb4f2cd 100644 --- a/packages/template/webpack-typescript/package.json +++ b/packages/template/webpack-typescript/package.json @@ -11,12 +11,12 @@ "node": ">= 16.4.0" }, "dependencies": { + "@electron-forge/core-utils": "7.8.0", "@electron-forge/shared-types": "7.8.0", "@electron-forge/template-base": "7.8.0", "fs-extra": "^10.0.0" }, "devDependencies": { - "@electron-forge/core-utils": "7.8.0", "@electron-forge/maker-deb": "7.8.0", "@electron-forge/maker-rpm": "7.8.0", "@electron-forge/maker-squirrel": "7.8.0", diff --git a/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.spec.ts b/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.spec.ts index f814c796ba..9c9b54a09e 100644 --- a/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.spec.ts +++ b/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.spec.ts @@ -4,7 +4,7 @@ import path from 'node:path'; import { PACKAGE_MANAGERS, spawnPackageManager } from '@electron-forge/core-utils'; import testUtils from '@electron-forge/test-utils'; import glob from 'fast-glob'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; // eslint-disable-next-line n/no-missing-import import { api } from '../../../api/core/dist/api'; @@ -16,6 +16,15 @@ describe('WebpackTypeScriptTemplate', () => { beforeAll(async () => { await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['run', 'link:prepare']); dir = await testUtils.ensureTestDirIsNonexistent(); + + return async () => { + await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['link:remove']); + + if (process.platform !== 'win32') { + // Windows platform `fs.remove(dir)` logic using `npm run test:clear`. + await fs.promises.rm(dir, { force: true, recursive: true }); + } + }; }); it('should succeed in initializing the typescript template', async () => { @@ -58,7 +67,7 @@ describe('WebpackTypeScriptTemplate', () => { describe('package', () => { let cwd: string; - beforeAll(async () => { + beforeEach(async () => { delete process.env.TS_NODE_PROJECT; // Webpack resolves plugins via cwd cwd = process.cwd(); @@ -79,10 +88,10 @@ describe('WebpackTypeScriptTemplate', () => { // spec via `api.init`. So we should re-link local forge dependencies // again. await initLink(PACKAGE_MANAGERS['yarn'], dir); - }); - afterAll(() => { - process.chdir(cwd); + return () => { + process.chdir(cwd); + }; }); it('should pass', async () => { @@ -92,9 +101,4 @@ describe('WebpackTypeScriptTemplate', () => { }); }); }); - - afterAll(async () => { - await spawnPackageManager(PACKAGE_MANAGERS['yarn'], ['link:remove']); - await fs.promises.rm(dir, { recursive: true, force: true }); - }); }); diff --git a/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts b/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts index 7d2e61881c..3fba6b163f 100644 --- a/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts +++ b/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts @@ -1,5 +1,6 @@ import path from 'node:path'; +import { supportsModuleRegister } from '@electron-forge/core-utils'; import { ForgeListrTaskDefinition, InitTemplateOptions } from '@electron-forge/shared-types'; import { BaseTemplate } from '@electron-forge/template-base'; import fs from 'fs-extra'; @@ -7,6 +8,18 @@ import fs from 'fs-extra'; class WebpackTypeScriptTemplate extends BaseTemplate { public templateDir = path.resolve(__dirname, '..', 'tmpl'); + /** + * `ts-node` is required for `forge.config.ts` files for Node.js versions where + * `module.register` is not supported. + */ + public get devDependencies(): string[] { + if (!supportsModuleRegister(process.version)) { + return ['ts-node@^10.0.0', ...super.devDependencies]; + } else { + return super.devDependencies; + } + } + async initializeTemplate(directory: string, options: InitTemplateOptions): Promise { const superTasks = await super.initializeTemplate(directory, options); return [ diff --git a/packages/template/webpack-typescript/tmpl/package.json b/packages/template/webpack-typescript/tmpl/package.json index 72d70fb4d9..39cdd2b692 100644 --- a/packages/template/webpack-typescript/tmpl/package.json +++ b/packages/template/webpack-typescript/tmpl/package.json @@ -11,7 +11,6 @@ "node-loader": "^2.0.0", "style-loader": "^3.0.0", "ts-loader": "^9.2.2", - "ts-node": "^10.0.0", "typescript": "~4.5.4" } } diff --git a/packages/utils/core-utils/spec/supports-module-register.spec.ts b/packages/utils/core-utils/spec/supports-module-register.spec.ts new file mode 100644 index 0000000000..7686165029 --- /dev/null +++ b/packages/utils/core-utils/spec/supports-module-register.spec.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from 'vitest'; + +import { supportsModuleRegister } from '../src/supports-module-register'; + +describe('supportsModuleRegister', () => { + it('should return false for Node < 18', () => { + expect(supportsModuleRegister('16.4.0')).toBe(false); + expect(supportsModuleRegister('17.0.0')).toBe(false); + }); + + it('should return true for Node 18 if patch version >= 18.19', () => { + expect(supportsModuleRegister('18.0.0')).toBe(false); + expect(supportsModuleRegister('18.19.0')).toBe(true); + expect(supportsModuleRegister('18.20.0')).toBe(true); + }); + + it('should return true for Node 20 if patch version >= 20.6', () => { + expect(supportsModuleRegister('20.0.0')).toBe(false); + expect(supportsModuleRegister('20.6.0')).toBe(true); + expect(supportsModuleRegister('20.25.0')).toBe(true); + }); + + it('should return true for Node 22', () => { + expect(supportsModuleRegister('22.0.0')).toBe(true); + }); +}); diff --git a/packages/utils/core-utils/src/index.ts b/packages/utils/core-utils/src/index.ts index e5b67335f6..8dbc588e8c 100644 --- a/packages/utils/core-utils/src/index.ts +++ b/packages/utils/core-utils/src/index.ts @@ -1,3 +1,4 @@ export * from './rebuild'; export * from './electron-version'; export * from './package-manager'; +export * from './supports-module-register'; diff --git a/packages/utils/core-utils/src/supports-module-register.ts b/packages/utils/core-utils/src/supports-module-register.ts new file mode 100644 index 0000000000..d1464ee438 --- /dev/null +++ b/packages/utils/core-utils/src/supports-module-register.ts @@ -0,0 +1,28 @@ +import semver from 'semver'; + +/** + * Checks for support for the {@link https://nodejs.org/api/module.html#moduleregisterspecifier-parenturl-options | module.register} API + * in Node.js, powers `tsx`'s `register` APIs (used to load TypeScript Forge configurations). + * + * This API was added in Node.js v18.19.0 and v20.6.0. + * + * @deprecated Remove in Electron Forge 8 when Node 22 is the minimum version. + */ +export function supportsModuleRegister(version: string) { + const parsed = semver.parse(version); + if (parsed === null) { + return false; + } + + if (parsed.major < 18) { + return false; + } else if (parsed.major === 18) { + return parsed.minor >= 19; + } else if (parsed.major === 19) { + return false; + } else if (parsed.major === 20) { + return parsed.minor >= 6; + } else { + return true; + } +} diff --git a/yarn.lock b/yarn.lock index b1912354f4..8de0690607 100644 --- a/yarn.lock +++ b/yarn.lock @@ -772,18 +772,6 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - "@doyensec/csp-evaluator@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@doyensec/csp-evaluator/-/csp-evaluator-1.0.3.tgz#0d0405cbfb5bb814c24b8a73736a9700da2c681f" @@ -1045,6 +1033,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== +"@esbuild/aix-ppc64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz#c33cf6bbee34975626b01b80451cbb72b4c6c91d" + integrity sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ== + "@esbuild/android-arm64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" @@ -1055,6 +1048,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== +"@esbuild/android-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz#ea766015c7d2655164f22100d33d7f0308a28d6d" + integrity sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA== + "@esbuild/android-arm@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" @@ -1065,6 +1063,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== +"@esbuild/android-arm@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.1.tgz#e84d2bf2fe2e6177a0facda3a575b2139fd3cb9c" + integrity sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q== + "@esbuild/android-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" @@ -1075,6 +1078,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== +"@esbuild/android-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.1.tgz#58337bee3bc6d78d10425e5500bd11370cfdfbed" + integrity sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw== + "@esbuild/darwin-arm64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" @@ -1085,6 +1093,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== +"@esbuild/darwin-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz#a46805c1c585d451aa83be72500bd6e8495dd591" + integrity sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ== + "@esbuild/darwin-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" @@ -1095,6 +1108,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== +"@esbuild/darwin-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz#0643e003bb238c63fc93ddbee7d26a003be3cd98" + integrity sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA== + "@esbuild/freebsd-arm64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" @@ -1105,6 +1123,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== +"@esbuild/freebsd-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz#cff18da5469c09986b93e87979de5d6872fe8f8e" + integrity sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A== + "@esbuild/freebsd-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" @@ -1115,6 +1138,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== +"@esbuild/freebsd-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz#362fc09c2de14987621c1878af19203c46365dde" + integrity sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww== + "@esbuild/linux-arm64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" @@ -1125,6 +1153,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== +"@esbuild/linux-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz#aa90d5b02efc97a271e124e6d1cea490634f7498" + integrity sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ== + "@esbuild/linux-arm@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" @@ -1135,6 +1168,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== +"@esbuild/linux-arm@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz#dfcefcbac60a20918b19569b4b657844d39db35a" + integrity sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ== + "@esbuild/linux-ia32@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" @@ -1145,6 +1183,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== +"@esbuild/linux-ia32@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz#6f9527077ccb7953ed2af02e013d4bac69f13754" + integrity sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ== + "@esbuild/linux-loong64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" @@ -1155,6 +1198,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== +"@esbuild/linux-loong64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz#287d2412a5456e5860c2839d42a4b51284d1697c" + integrity sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg== + "@esbuild/linux-mips64el@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" @@ -1165,6 +1213,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== +"@esbuild/linux-mips64el@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz#530574b9e1bc5d20f7a4f44c5f045e26f3783d57" + integrity sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg== + "@esbuild/linux-ppc64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" @@ -1175,6 +1228,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== +"@esbuild/linux-ppc64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz#5d7e6b283a0b321ea42c6bc0abeb9eb99c1f5589" + integrity sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg== + "@esbuild/linux-riscv64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" @@ -1185,6 +1243,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== +"@esbuild/linux-riscv64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz#14fa0cd073c26b4ee2465d18cd1e18eea7859fa8" + integrity sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ== + "@esbuild/linux-s390x@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" @@ -1195,6 +1258,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== +"@esbuild/linux-s390x@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz#e677b4b9d1b384098752266ccaa0d52a420dc1aa" + integrity sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ== + "@esbuild/linux-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" @@ -1205,11 +1273,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== +"@esbuild/linux-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz#f1c796b78fff5ce393658313e8c58613198d9954" + integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA== + "@esbuild/netbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== +"@esbuild/netbsd-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz#0d280b7dfe3973f111b02d5fe9f3063b92796d29" + integrity sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g== + "@esbuild/netbsd-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" @@ -1220,11 +1298,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== +"@esbuild/netbsd-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz#be663893931a4bb3f3a009c5cc24fa9681cc71c0" + integrity sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA== + "@esbuild/openbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== +"@esbuild/openbsd-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz#d9021b884233673a05dc1cc26de0bf325d824217" + integrity sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg== + "@esbuild/openbsd-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" @@ -1235,6 +1323,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== +"@esbuild/openbsd-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz#9f1dc1786ed2e2938c404b06bcc48be9a13250de" + integrity sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw== + "@esbuild/sunos-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" @@ -1245,6 +1338,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== +"@esbuild/sunos-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz#89aac24a4b4115959b3f790192cf130396696c27" + integrity sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg== + "@esbuild/win32-arm64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" @@ -1255,6 +1353,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== +"@esbuild/win32-arm64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz#354358647a6ea98ea6d243bf48bdd7a434999582" + integrity sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ== + "@esbuild/win32-ia32@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" @@ -1265,6 +1368,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== +"@esbuild/win32-ia32@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz#8cea7340f2647eba951a041dc95651e3908cd4cb" + integrity sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A== + "@esbuild/win32-x64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" @@ -1275,6 +1383,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@esbuild/win32-x64@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz#7d79922cb2d88f9048f06393dbf62d2e4accb584" + integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg== + "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.4.1": version "4.4.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" @@ -2866,26 +2979,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== - -"@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== - -"@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== - -"@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== - "@tufjs/canonical-json@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" @@ -3659,17 +3752,12 @@ acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2: +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -3893,11 +3981,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -5037,11 +5120,6 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-dirname@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c" @@ -5349,11 +5427,6 @@ diff-sequences@^29.6.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -6110,6 +6183,37 @@ esbuild@^0.24.2: "@esbuild/win32-ia32" "0.24.2" "@esbuild/win32-x64" "0.24.2" +esbuild@~0.25.0: + version "0.25.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.1.tgz#a16b8d070b6ad4871935277bda6ccfe852e3fa2f" + integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.1" + "@esbuild/android-arm" "0.25.1" + "@esbuild/android-arm64" "0.25.1" + "@esbuild/android-x64" "0.25.1" + "@esbuild/darwin-arm64" "0.25.1" + "@esbuild/darwin-x64" "0.25.1" + "@esbuild/freebsd-arm64" "0.25.1" + "@esbuild/freebsd-x64" "0.25.1" + "@esbuild/linux-arm" "0.25.1" + "@esbuild/linux-arm64" "0.25.1" + "@esbuild/linux-ia32" "0.25.1" + "@esbuild/linux-loong64" "0.25.1" + "@esbuild/linux-mips64el" "0.25.1" + "@esbuild/linux-ppc64" "0.25.1" + "@esbuild/linux-riscv64" "0.25.1" + "@esbuild/linux-s390x" "0.25.1" + "@esbuild/linux-x64" "0.25.1" + "@esbuild/netbsd-arm64" "0.25.1" + "@esbuild/netbsd-x64" "0.25.1" + "@esbuild/openbsd-arm64" "0.25.1" + "@esbuild/openbsd-x64" "0.25.1" + "@esbuild/sunos-x64" "0.25.1" + "@esbuild/win32-arm64" "0.25.1" + "@esbuild/win32-ia32" "0.25.1" + "@esbuild/win32-x64" "0.25.1" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -7478,6 +7582,13 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.6" +get-tsconfig@^4.7.5: + version "4.10.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" + integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== + dependencies: + resolve-pkg-maps "^1.0.0" + get-tsconfig@^4.8.1: version "4.9.0" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.9.0.tgz#704ae2ce2a94935921675dd19c05508b713a405d" @@ -9418,11 +9529,6 @@ make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - make-fetch-happen@^10.0.3, make-fetch-happen@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" @@ -13080,25 +13186,6 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== -ts-node@^10.0.0: - version "10.5.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.5.0.tgz#618bef5854c1fbbedf5e31465cbb224a1d524ef9" - integrity sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw== - dependencies: - "@cspotcode/source-map-support" "0.7.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" - yn "3.1.1" - ts-toolbelt@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" @@ -13160,6 +13247,16 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tsx@^4.19.3: + version "4.19.3" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666" + integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ== + dependencies: + esbuild "~0.25.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + tuf-js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" @@ -13525,11 +13622,6 @@ uvu@^0.5.0: kleur "^4.0.3" sade "^1.7.3" -v8-compile-cache-lib@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" - integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== - v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -14187,11 +14279,6 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"