From 7e8738027ce049778a6dfe230ea683058646897d Mon Sep 17 00:00:00 2001 From: Jamie Rolfs Date: Mon, 27 Feb 2023 13:03:15 -0800 Subject: [PATCH 1/3] feat(config/jest): add `swc_mut_cjs_exports` plugin to SWC configuration In an effort to make the SWC-based Jest compilation as backward compatible as possible, add the `swc_mut_cjs_exports` plugin so that Jest spies work in all the places they used to work. See: https://github.com/magic-akari/swc_mut_cjs_exports --- .gitignore | 4 ++- package.json | 7 ++++-- src/api/test.js | 0 src/config/jest.config.js | 52 ++++++++++++++++++++++++++++++++++++++- src/tsconfig.json | 3 ++- yarn.lock | 22 +++++++++++++++++ 6 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 src/api/test.js diff --git a/.gitignore b/.gitignore index 3161e47d..d2fe970a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ dist !.yarn/plugins !.yarn/sdks !.yarn/versions -.pnp.* \ No newline at end of file +.pnp.* + +.swc/ \ No newline at end of file diff --git a/package.json b/package.json index 3a343584..209820c1 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,8 @@ "@commitlint/config-conventional": "^17.8.1", "@commitlint/prompt": "^17.8.1", "@swc-node/jest": "^1.5.6", - "@swc/core": "^1.3.38", - "@swc/helpers": "^0.4.14", + "@swc/core": "^1.3.102", + "@swc/helpers": "^0.5.3", "@types/jest": "^29.5.4", "@types/lodash.has": "^4.5.8", "@types/mkdirp": "^1.0.2", @@ -85,10 +85,12 @@ "jest-watch-typeahead": "^2.2.2", "lint-staged": "^15.1.0", "lodash.has": "^4.5.2", + "lodash.merge": "^4.6.2", "mkdirp": "^2.1.3", "prettier": "^2.8.8", "read-pkg-up": "^7.0.1", "rimraf": "^4.1.1", + "swc_mut_cjs_exports": "^0.86.17", "tslib": "^2.6.2", "typescript": "^4.9.5", "which": "^3.0.0", @@ -130,6 +132,7 @@ "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@types/cross-spawn": "^6.0.4", + "@types/lodash.merge": "^4", "depcheck": "^1.4.7", "eslint-config-kentcdodds": "^20.5.0", "husky": "^8.0.3", diff --git a/src/api/test.js b/src/api/test.js new file mode 100644 index 00000000..e69de29b diff --git a/src/config/jest.config.js b/src/config/jest.config.js index 82000b6c..7b49c86d 100644 --- a/src/config/jest.config.js +++ b/src/config/jest.config.js @@ -1,5 +1,12 @@ /** @typedef {import('@jest/types').Config.InitialOptions} JestConfig */ +/** @typedef {import('@swc-node/core').Options} SwcNodeOptions */ +const {dirname} = require('path') +const merge = require('lodash.merge') +const { + readDefaultTsConfig, + tsCompilerOptionsToSwcConfig, +} = require('@swc-node/register/read-default-tsconfig') const {ifAnyDep, hasFile, fromRoot, hasDevDep} = require('../utils') const { @@ -17,6 +24,23 @@ const ignores = [ '__mocks__', ] +/** + * Get the path at which `@hover/javascript/jest` is installed in a dependent + * project in order to resolve the Jest preset as sometimes package managers + * nest the preset installation within the `@hover/javascript` installation. + * + * @returns + */ +const getResolvePaths = () => { + try { + const nested = require.resolve('@hover/javascript/jest') + + return {paths: [dirname(nested)]} + } catch { + return undefined + } +} + /** @type JestConfig */ const jestConfig = { roots: [fromRoot('.')], @@ -50,7 +74,33 @@ const jestConfig = { ], ), ) - : {'^.+\\.(t|j)sx?$': [require.resolve('@swc-node/jest')]}, + : { + '^.+\\.(t|j)sx?$': [ + require.resolve('@swc-node/jest', getResolvePaths()), + /** @type {SwcNodeOptions} */ ( + merge(tsCompilerOptionsToSwcConfig(readDefaultTsConfig(), ''), { + esModuleInterop: true, + module: 'commonjs', + swc: { + jsc: { + target: 'es2020', + experimental: { + plugins: [[require.resolve('swc_mut_cjs_exports'), {}]], + }, + parser: { + syntax: 'typescript', + tsx: true, + decorators: false, + dynamicimport: true, + }, + loose: true, + externalHelpers: false, + }, + }, + }) + ), + ], + }, coveragePathIgnorePatterns: [ ...ignores, 'src/(umd|cjs|esm)-entry.js$', diff --git a/src/tsconfig.json b/src/tsconfig.json index 18439810..3bbcdb91 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -8,6 +8,7 @@ "declarationMap": true, "emitDeclarationOnly": true, "outDir": "../dist", - "rootDir": "." + "rootDir": ".", + "skipLibCheck": true } } diff --git a/yarn.lock b/yarn.lock index 1329a099..564b24b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2223,6 +2223,7 @@ __metadata: "@types/cross-spawn": ^6.0.4 "@types/jest": ^29.5.4 "@types/lodash.has": ^4.5.8 + "@types/lodash.merge": ^4 "@types/mkdirp": ^1.0.2 "@types/node": ^18.18.6 "@types/rimraf": ^3.0.2 @@ -2257,12 +2258,14 @@ __metadata: jest-watch-typeahead: ^2.2.2 lint-staged: ^15.1.0 lodash.has: ^4.5.2 + lodash.merge: ^4.6.2 mkdirp: ^2.1.3 npm-run-all: ^4.1.5 prettier: ^2.8.8 read-pkg-up: ^7.0.1 rimraf: ^4.1.1 slash: ^3.0.0 + swc_mut_cjs_exports: ^0.86.17 tslib: ^2.6.2 typescript: ^4.9.5 which: ^3.0.0 @@ -3269,6 +3272,15 @@ __metadata: languageName: node linkType: hard +"@types/lodash.merge@npm:^4": + version: 4.6.9 + resolution: "@types/lodash.merge@npm:4.6.9" + dependencies: + "@types/lodash": "*" + checksum: d0dd6654547c9d8d905184d14aa5c2a37a1ed1c3204f5ab20b7d591a05f34859ef09d3b72c065e94ca1989abf9109eb8230f67c4d64a5768b1d65b9ed8baf8e7 + languageName: node + linkType: hard + "@types/lodash@npm:*": version: 4.14.181 resolution: "@types/lodash@npm:4.14.181" @@ -11358,6 +11370,16 @@ __metadata: languageName: node linkType: hard +"swc_mut_cjs_exports@npm:^0.86.17": + version: 0.86.17 + resolution: "swc_mut_cjs_exports@npm:0.86.17" + peerDependencies: + "@swc/core": ^1.3.58 + "@swc/jest": ^0.2.26 + checksum: 709e0b3d32ea6a70f12c29d6455454eb9b27f27708f57b0fb9eb76ce55c1876acec65a26f53d27b00a5e3a114afd28dad472e1b32be1d6d89d60563ec1cf9bc5 + languageName: node + linkType: hard + "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" From 5fe61c1d110e48a2d3c5b16771f1d39fc781b72e Mon Sep 17 00:00:00 2001 From: Jamie Rolfs Date: Mon, 8 Jan 2024 13:23:49 -0800 Subject: [PATCH 2/3] feat(config/eslint): disable 'import/consistent-type-specifier-style' rule --- package.json | 3 ++- src/config/__tests__/__snapshots__/eslintrc.js.snap | 2 ++ src/config/helpers/build-eslint.js | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 209820c1..260977c5 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,8 @@ "no-console": "off", "no-nested-ternary": "off", "no-useless-catch": "off", - "jest/prefer-snapshot-hint": "off" + "jest/prefer-snapshot-hint": "off", + "import/consistent-type-specifier-style": "off" } }, "eslintIgnore": [ diff --git a/src/config/__tests__/__snapshots__/eslintrc.js.snap b/src/config/__tests__/__snapshots__/eslintrc.js.snap index 7a363ba8..bf50218c 100644 --- a/src/config/__tests__/__snapshots__/eslintrc.js.snap +++ b/src/config/__tests__/__snapshots__/eslintrc.js.snap @@ -67,6 +67,7 @@ Object { "@typescript-eslint/no-throw-literal": "off", "@typescript-eslint/return-await": "off", "class-methods-use-this": "off", + "import/consistent-type-specifier-style": "off", "import/no-extraneous-dependencies": Array [ "error", Object { @@ -200,6 +201,7 @@ Object { "@typescript-eslint/no-throw-literal": "off", "@typescript-eslint/return-await": "off", "class-methods-use-this": "off", + "import/consistent-type-specifier-style": "off", "import/no-extraneous-dependencies": Array [ "error", Object { diff --git a/src/config/helpers/build-eslint.js b/src/config/helpers/build-eslint.js index cd245bb3..e71fdc69 100644 --- a/src/config/helpers/build-eslint.js +++ b/src/config/helpers/build-eslint.js @@ -53,6 +53,7 @@ const buildConfig = ({withReact = false} = {}) => { rules: { 'class-methods-use-this': 'off', 'import/prefer-default-export': 'off', + 'import/consistent-type-specifier-style': 'off', 'import/no-extraneous-dependencies': [ 'error', { From ab6f8cd31d6ae8d10df8b4f15fbc6704f9eba352 Mon Sep 17 00:00:00 2001 From: Jamie Rolfs Date: Mon, 8 Jan 2024 14:00:39 -0800 Subject: [PATCH 3/3] feat(api/test): make ts-jest's `pathsToModuleNameMapper` helper available This copies in the module name mapper helper from `ts-jest` so we can use that whether we're using ts-jest or not. --- .babelrc.json | 3 +- package.json | 3 +- src/api/test.js | 0 src/api/test.ts | 1 + .../paths-to-module-name-mapper.ts.snap | 43 ++++ .../__tests__/paths-to-module-name-mapper.ts | 104 ++++++++ src/api/test/index.ts | 1 + src/api/test/paths-to-module-name-mapper.ts | 76 ++++++ yarn.lock | 242 ++++++++++++++---- 9 files changed, 421 insertions(+), 52 deletions(-) delete mode 100644 src/api/test.js create mode 100644 src/api/test.ts create mode 100644 src/api/test/__tests__/__snapshots__/paths-to-module-name-mapper.ts.snap create mode 100644 src/api/test/__tests__/paths-to-module-name-mapper.ts create mode 100644 src/api/test/index.ts create mode 100644 src/api/test/paths-to-module-name-mapper.ts diff --git a/.babelrc.json b/.babelrc.json index 22e6e87e..fd2a0015 100644 --- a/.babelrc.json +++ b/.babelrc.json @@ -6,6 +6,7 @@ "targets": {"node": "12"}, "modules": "commonjs" } - ] + ], + "@babel/preset-typescript" ] } diff --git a/package.json b/package.json index 260977c5..cd2f1a01 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "scripts": { "build": "run-p 'build:*'", - "build:source": "babel --source-maps --out-dir dist --ignore '**/__tests__/**','**/__mocks__/**' --copy-files --no-copy-ignored src", + "build:source": "babel --source-maps --extensions '.ts' --out-dir dist --ignore '**/__tests__/**','**/__mocks__/**' --copy-files --no-copy-ignored src", "build:types": "tsc -p src/", "ci-after-success": "node src ci-after-success", "commit": "node src commit", @@ -132,6 +132,7 @@ "@babel/cli": "^7.23.0", "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.23.3", "@types/cross-spawn": "^6.0.4", "@types/lodash.merge": "^4", "depcheck": "^1.4.7", diff --git a/src/api/test.js b/src/api/test.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/api/test.ts b/src/api/test.ts new file mode 100644 index 00000000..baa282df --- /dev/null +++ b/src/api/test.ts @@ -0,0 +1 @@ +export * from './test/index' diff --git a/src/api/test/__tests__/__snapshots__/paths-to-module-name-mapper.ts.snap b/src/api/test/__tests__/__snapshots__/paths-to-module-name-mapper.ts.snap new file mode 100644 index 00000000..c0d20c8e --- /dev/null +++ b/src/api/test/__tests__/__snapshots__/paths-to-module-name-mapper.ts.snap @@ -0,0 +1,43 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`pathsToModuleNameMapper should convert tsconfig mapping with given prefix: / 1`] = ` +Object { + "^@foo\\\\-bar/common$": "/../common/dist/library", + "^@pkg/(.*)$": "/packages/$1", + "^api/(.*)$": "/src/api/$1", + "^client$": Array [ + "/src/client", + "/src/client/index", + ], + "^log$": "/src/utils/log", + "^mocks/(.*)$": "/test/mocks/$1", + "^server$": "/src/server", + "^test/(.*)$": "/test/$1", + "^test/(.*)/mock$": Array [ + "/test/mocks/$1", + "/test/__mocks__/$1", + ], + "^util/(.*)$": "/src/utils/$1", +} +`; + +exports[`pathsToModuleNameMapper should convert tsconfig mapping with given prefix: foo 1`] = ` +Object { + "^@foo\\\\-bar/common$": "foo/../common/dist/library", + "^@pkg/(.*)$": "foo/packages/$1", + "^api/(.*)$": "foo/src/api/$1", + "^client$": Array [ + "foo/src/client", + "foo/src/client/index", + ], + "^log$": "foo/src/utils/log", + "^mocks/(.*)$": "foo/test/mocks/$1", + "^server$": "foo/src/server", + "^test/(.*)$": "foo/test/$1", + "^test/(.*)/mock$": Array [ + "foo/test/mocks/$1", + "foo/test/__mocks__/$1", + ], + "^util/(.*)$": "foo/src/utils/$1", +} +`; diff --git a/src/api/test/__tests__/paths-to-module-name-mapper.ts b/src/api/test/__tests__/paths-to-module-name-mapper.ts new file mode 100644 index 00000000..64effd79 --- /dev/null +++ b/src/api/test/__tests__/paths-to-module-name-mapper.ts @@ -0,0 +1,104 @@ +import {pathsToModuleNameMapper} from '../paths-to-module-name-mapper' + +const tsconfigMap = { + log: ['src/utils/log'], + server: ['src/server'], + client: ['src/client', 'src/client/index'], + 'util/*': ['src/utils/*'], + 'api/*': ['src/api/*'], + 'test/*': ['test/*'], + 'mocks/*': ['test/mocks/*'], + 'test/*/mock': ['test/mocks/*', 'test/__mocks__/*'], + '@foo-bar/common': ['../common/dist/library'], + '@pkg/*': ['./packages/*'], +} + +describe('pathsToModuleNameMapper', () => { + test('should convert tsconfig mapping with no given prefix', () => { + expect(pathsToModuleNameMapper(tsconfigMap)).toMatchInlineSnapshot(` + Object { + "^@foo\\\\-bar/common$": "../common/dist/library", + "^@pkg/(.*)$": "./packages/$1", + "^api/(.*)$": "src/api/$1", + "^client$": Array [ + "src/client", + "src/client/index", + ], + "^log$": "src/utils/log", + "^mocks/(.*)$": "test/mocks/$1", + "^server$": "src/server", + "^test/(.*)$": "test/$1", + "^test/(.*)/mock$": Array [ + "test/mocks/$1", + "test/__mocks__/$1", + ], + "^util/(.*)$": "src/utils/$1", + } + `) + }) + + test('should add `js` extension to resolved config with useESM: true', () => { + expect(pathsToModuleNameMapper(tsconfigMap, {useESM: true})).toEqual({ + /** + * Why not using snapshot here? + * Because the snapshot does not keep the property order, which is important for jest. + * A pattern ending with `\\.js` should appear before another pattern without the extension does. + */ + '^log$': 'src/utils/log', + '^server$': 'src/server', + '^client$': ['src/client', 'src/client/index'], + '^util/(.*)\\.js$': 'src/utils/$1', + '^util/(.*)$': 'src/utils/$1', + '^api/(.*)\\.js$': 'src/api/$1', + '^api/(.*)$': 'src/api/$1', + '^test/(.*)\\.js$': 'test/$1', + '^test/(.*)$': 'test/$1', + '^mocks/(.*)\\.js$': 'test/mocks/$1', + '^mocks/(.*)$': 'test/mocks/$1', + '^test/(.*)/mock\\.js$': ['test/mocks/$1', 'test/__mocks__/$1'], + '^test/(.*)/mock$': ['test/mocks/$1', 'test/__mocks__/$1'], + '^@foo\\-bar/common$': '../common/dist/library', + '^@pkg/(.*)\\.js$': './packages/$1', + '^@pkg/(.*)$': './packages/$1', + '^(\\.{1,2}/.*)\\.js$': '$1', + }) + }) + + test.each(['/', 'foo'])( + 'should convert tsconfig mapping with given prefix', + prefix => { + expect(pathsToModuleNameMapper(tsconfigMap, {prefix})).toMatchSnapshot( + prefix, + ) + }, + ) + + describe('warnings', () => { + beforeEach(() => { + jest.spyOn(console, 'warn').mockImplementation() + }) + + afterEach(() => jest.mocked(console.warn).mockRestore()) + + test('should warn about mapping it cannot handle', () => { + expect( + pathsToModuleNameMapper({ + kept: ['src/kept'], + 'no-target': [], + 'too/*/many/*/stars': ['to/*/many/*/stars'], + }), + ).toMatchInlineSnapshot(` + Object { + "^kept$": "src/kept", + } + `) + + expect(jest.mocked(console.warn)).toHaveBeenCalledWith( + 'Not mapping "no-target" because it has no target.', + ) + expect(jest.mocked(console.warn)).toHaveBeenCalledWith( + 'Not mapping "too/*/many/*/stars" because it has more than one star (`*`).', + ) + }) + }) +}) diff --git a/src/api/test/index.ts b/src/api/test/index.ts new file mode 100644 index 00000000..a1dca9f3 --- /dev/null +++ b/src/api/test/index.ts @@ -0,0 +1 @@ +export {pathsToModuleNameMapper} from './paths-to-module-name-mapper' diff --git a/src/api/test/paths-to-module-name-mapper.ts b/src/api/test/paths-to-module-name-mapper.ts new file mode 100644 index 00000000..8f6b6638 --- /dev/null +++ b/src/api/test/paths-to-module-name-mapper.ts @@ -0,0 +1,76 @@ +/** + * NOTE: this was copy pasta'ed from `ts-jest` so that we can support path + * aliases in `tsconfig.json` without necessarily relying on `ts-jest` + * + * @see {@link https://github.com/kulshekhar/ts-jest/blob/dd3523cb7571714f06f1ea2ed1e3cf11970fbfce/src/config/paths-to-module-name-mapper.ts} + */ + +import type {Config} from '@jest/types' +import type {CompilerOptions} from 'typescript' + +type TsPathMapping = Exclude +type JestPathMapping = Config.InitialOptions['moduleNameMapper'] + +// we don't need to escape all chars, so commented out is the real one +// const escapeRegex = (str: string) => str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') +const escapeRegex = (str: string) => str.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&') + +export const pathsToModuleNameMapper = ( + mapping: TsPathMapping, + {prefix = '', useESM = false}: {prefix?: string; useESM?: boolean} = {}, +): JestPathMapping => { + const jestMap: JestPathMapping = {} + for (const fromPath of Object.keys(mapping)) { + const toPaths = mapping[fromPath] + // check that we have only one target path + if (toPaths.length === 0) { + console.warn(`Not mapping "${fromPath}" because it has no target.`) + + continue + } + + // split with '*' + const segments = fromPath.split(/\*/g) + if (segments.length === 1) { + const paths = toPaths.map(target => { + const enrichedPrefix = + prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix + + return `${enrichedPrefix}${target}` + }) + const cjsPattern = `^${escapeRegex(fromPath)}$` + jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths + } else if (segments.length === 2) { + const paths = toPaths.map(target => { + const enrichedTarget = + target.startsWith('./') && prefix !== '' + ? target.substring(target.indexOf('/') + 1) + : target + const enrichedPrefix = + prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix + + return `${enrichedPrefix}${enrichedTarget.replace(/\*/g, '$1')}` + }) + if (useESM) { + const esmPattern = `^${escapeRegex(segments[0])}(.*)${escapeRegex( + segments[1], + )}\\.js$` + jestMap[esmPattern] = paths.length === 1 ? paths[0] : paths + } + const cjsPattern = `^${escapeRegex(segments[0])}(.*)${escapeRegex( + segments[1], + )}$` + jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths + } else { + console.warn( + `Not mapping "${fromPath}" because it has more than one star (\`*\`).`, + ) + } + } + + if (useESM) { + jestMap['^(\\.{1,2}/.*)\\.js$'] = '$1' + } + + return jestMap +} diff --git a/yarn.lock b/yarn.lock index 564b24b6..7288fdb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -304,6 +304,25 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.23.6": + version: 7.23.7 + resolution: "@babel/helper-create-class-features-plugin@npm:7.23.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-member-expression-to-functions": ^7.23.0 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 33e60714b856c3816a7965d4c76278cc8f430644a2dfc4eeafad2f7167c4fbd2becdb74cbfeb04b02efd6bbd07176ef53c6683262b588e65d378438e9c55c26b + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6": version: 7.20.5 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5" @@ -431,6 +450,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" @@ -504,6 +532,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -553,6 +596,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": version: 7.22.9 resolution: "@babel/helper-replace-supers@npm:7.22.9" @@ -923,6 +979,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" @@ -1022,6 +1089,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 + languageName: node + linkType: hard + "@babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.12.13 resolution: "@babel/plugin-syntax-typescript@npm:7.12.13" @@ -1326,6 +1404,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" + dependencies: + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 720a231ceade4ae4d2632478db4e7fecf21987d444942b72d523487ac8d715ca97de6c8f415c71e939595e1a4776403e7dc24ed68fe9125ad4acf57753c9bff7 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.23.0": version: 7.23.0 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" @@ -1591,6 +1682,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.23.3": + version: 7.23.6 + resolution: "@babel/plugin-transform-typescript@npm:7.23.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.23.6 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-typescript": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0462241843d14dff9f1a4c49ab182a6f01a5f7679957c786b08165dac3e8d49184011f05ca204183d164c54b9d3496d1b3005f904fa8708e394e6f15bf5548e6 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" @@ -1741,6 +1846,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/preset-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-syntax-jsx": ^7.23.3 + "@babel/plugin-transform-modules-commonjs": ^7.23.3 + "@babel/plugin-transform-typescript": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 105a2d39bbc464da0f7e1ad7f535c77c5f62d6b410219355b20e552e7d29933567a5c55339b5d0aec1a5c7a0a7dfdf1b54aae601a4fe15a157d54dcbfcb3e854 + languageName: node + linkType: hard + "@babel/regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "@babel/regjsgen@npm:0.8.0" @@ -2214,12 +2334,13 @@ __metadata: "@babel/cli": ^7.23.0 "@babel/core": ^7.23.2 "@babel/preset-env": ^7.23.2 + "@babel/preset-typescript": ^7.23.3 "@commitlint/cli": ^17.8.1 "@commitlint/config-conventional": ^17.8.1 "@commitlint/prompt": ^17.8.1 "@swc-node/jest": ^1.5.6 - "@swc/core": ^1.3.38 - "@swc/helpers": ^0.4.14 + "@swc/core": ^1.3.102 + "@swc/helpers": ^0.5.3 "@types/cross-spawn": ^6.0.4 "@types/jest": ^29.5.4 "@types/lodash.has": ^4.5.8 @@ -2934,90 +3055,94 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-arm64@npm:1.3.38" +"@swc/core-darwin-arm64@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-darwin-arm64@npm:1.3.102" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-x64@npm:1.3.38" +"@swc/core-darwin-x64@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-darwin-x64@npm:1.3.102" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.38" +"@swc/core-linux-arm-gnueabihf@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.102" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.38" +"@swc/core-linux-arm64-gnu@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.102" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.38" +"@swc/core-linux-arm64-musl@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.102" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.38" +"@swc/core-linux-x64-gnu@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.102" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-musl@npm:1.3.38" +"@swc/core-linux-x64-musl@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-linux-x64-musl@npm:1.3.102" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.38" +"@swc/core-win32-arm64-msvc@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.102" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.38" +"@swc/core-win32-ia32-msvc@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.102" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.38" +"@swc/core-win32-x64-msvc@npm:1.3.102": + version: 1.3.102 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.102" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.3.38": - version: 1.3.38 - resolution: "@swc/core@npm:1.3.38" +"@swc/core@npm:^1.3.102": + version: 1.3.102 + resolution: "@swc/core@npm:1.3.102" dependencies: - "@swc/core-darwin-arm64": 1.3.38 - "@swc/core-darwin-x64": 1.3.38 - "@swc/core-linux-arm-gnueabihf": 1.3.38 - "@swc/core-linux-arm64-gnu": 1.3.38 - "@swc/core-linux-arm64-musl": 1.3.38 - "@swc/core-linux-x64-gnu": 1.3.38 - "@swc/core-linux-x64-musl": 1.3.38 - "@swc/core-win32-arm64-msvc": 1.3.38 - "@swc/core-win32-ia32-msvc": 1.3.38 - "@swc/core-win32-x64-msvc": 1.3.38 + "@swc/core-darwin-arm64": 1.3.102 + "@swc/core-darwin-x64": 1.3.102 + "@swc/core-linux-arm-gnueabihf": 1.3.102 + "@swc/core-linux-arm64-gnu": 1.3.102 + "@swc/core-linux-arm64-musl": 1.3.102 + "@swc/core-linux-x64-gnu": 1.3.102 + "@swc/core-linux-x64-musl": 1.3.102 + "@swc/core-win32-arm64-msvc": 1.3.102 + "@swc/core-win32-ia32-msvc": 1.3.102 + "@swc/core-win32-x64-msvc": 1.3.102 + "@swc/counter": ^0.1.1 + "@swc/types": ^0.1.5 + peerDependencies: + "@swc/helpers": ^0.5.0 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -3039,16 +3164,33 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: c55d30e57638bcd21f788add8490c3f3e71bfe027aa5a8b153e1b1b9686ecddd6deeaaa6a6b17717c7eab4c1e2a232b465b6755b6c891506fc0d03139badfbf7 + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 45c0edb06f87a811e28fb3ed587fbe6b7ca67ff2440fe15666d43729788903a4af61e3b57842aecc0b2b70e3c9981b698d8233746ba94dfb5a19e1c62eea33ad languageName: node linkType: hard -"@swc/helpers@npm:^0.4.14": - version: 0.4.14 - resolution: "@swc/helpers@npm:0.4.14" +"@swc/counter@npm:^0.1.1": + version: 0.1.2 + resolution: "@swc/counter@npm:0.1.2" + checksum: 8427c594f1f0cf44b83885e9c8fe1e370c9db44ae96e07a37c117a6260ee97797d0709483efbcc244e77bac578690215f45b23254c4cd8a70fb25ddbb50bf33e + languageName: node + linkType: hard + +"@swc/helpers@npm:^0.5.3": + version: 0.5.3 + resolution: "@swc/helpers@npm:0.5.3" dependencies: tslib: ^2.4.0 - checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 + checksum: 61c3f7ccd47fc70ad91437df88be6b458cdc11e311cb331288827d7c50befffc72aa18fe913ec2a9e70fbf44e4b818bed38bfd7c329d689e1ff3c198d084cd02 + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.5": + version: 0.1.5 + resolution: "@swc/types@npm:0.1.5" + checksum: 6aee11f62d3d805a64848e0bd5f0e0e615f958e327a9e1260056c368d7d28764d89e38bd8005a536c9bf18afbcd303edd84099d60df34a2975d62540f61df13b languageName: node linkType: hard