From 20258de54c9c10f8d2495bda174f9865a3cebc91 Mon Sep 17 00:00:00 2001 From: Ahn <27772165+ahnpnl@users.noreply.github.com> Date: Tue, 7 Dec 2021 21:53:11 +0100 Subject: [PATCH] fix: make `esbuild` as optional peer dependency (#3129) --- e2e/__tests__/ast-transformers.test.ts | 10 +- .../transformer-in-ts/package-lock.json | 372 ++++++++++++++++++ .../transformer-in-ts/package.json | 3 + package-lock.json | 72 +++- package.json | 12 +- src/config/config-set.ts | 46 ++- src/types.ts | 2 + src/utils/importer.ts | 9 +- src/utils/messages.ts | 1 + 9 files changed, 485 insertions(+), 42 deletions(-) create mode 100644 e2e/ast-transformers/transformer-in-ts/package-lock.json diff --git a/e2e/__tests__/ast-transformers.test.ts b/e2e/__tests__/ast-transformers.test.ts index f49f564a74..97ed127d86 100644 --- a/e2e/__tests__/ast-transformers.test.ts +++ b/e2e/__tests__/ast-transformers.test.ts @@ -63,10 +63,14 @@ describe('hoist-jest', () => { }) describe('transformer-in-ts', () => { - const TRANSFORMER_IN_TS_DIR_NAME = `${AST_TRANSFORMERS_DIR_NAME}/transformer-in-ts` + const DIR = path.join(__dirname, '..', AST_TRANSFORMERS_DIR_NAME, 'transformer-in-ts') - test(`successfully runs the tests inside ${TRANSFORMER_IN_TS_DIR_NAME}`, () => { - const { json } = runWithJson(TRANSFORMER_IN_TS_DIR_NAME) + beforeAll(() => { + runNpmInstall(DIR) + }) + + test(`successfully runs the tests inside ${DIR}`, () => { + const { json } = runWithJson(DIR) expect(json.success).toBe(true) }) diff --git a/e2e/ast-transformers/transformer-in-ts/package-lock.json b/e2e/ast-transformers/transformer-in-ts/package-lock.json new file mode 100644 index 0000000000..0332badbc2 --- /dev/null +++ b/e2e/ast-transformers/transformer-in-ts/package-lock.json @@ -0,0 +1,372 @@ +{ + "name": "transformer-in-ts", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "esbuild": "~0.14.2" + } + }, + "node_modules/esbuild": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", + "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.2", + "esbuild-darwin-64": "0.14.2", + "esbuild-darwin-arm64": "0.14.2", + "esbuild-freebsd-64": "0.14.2", + "esbuild-freebsd-arm64": "0.14.2", + "esbuild-linux-32": "0.14.2", + "esbuild-linux-64": "0.14.2", + "esbuild-linux-arm": "0.14.2", + "esbuild-linux-arm64": "0.14.2", + "esbuild-linux-mips64le": "0.14.2", + "esbuild-linux-ppc64le": "0.14.2", + "esbuild-netbsd-64": "0.14.2", + "esbuild-openbsd-64": "0.14.2", + "esbuild-sunos-64": "0.14.2", + "esbuild-windows-32": "0.14.2", + "esbuild-windows-64": "0.14.2", + "esbuild-windows-arm64": "0.14.2" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", + "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", + "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", + "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", + "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", + "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", + "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", + "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", + "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", + "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", + "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", + "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", + "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", + "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", + "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", + "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", + "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", + "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + } + }, + "dependencies": { + "esbuild": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", + "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "requires": { + "esbuild-android-arm64": "0.14.2", + "esbuild-darwin-64": "0.14.2", + "esbuild-darwin-arm64": "0.14.2", + "esbuild-freebsd-64": "0.14.2", + "esbuild-freebsd-arm64": "0.14.2", + "esbuild-linux-32": "0.14.2", + "esbuild-linux-64": "0.14.2", + "esbuild-linux-arm": "0.14.2", + "esbuild-linux-arm64": "0.14.2", + "esbuild-linux-mips64le": "0.14.2", + "esbuild-linux-ppc64le": "0.14.2", + "esbuild-netbsd-64": "0.14.2", + "esbuild-openbsd-64": "0.14.2", + "esbuild-sunos-64": "0.14.2", + "esbuild-windows-32": "0.14.2", + "esbuild-windows-64": "0.14.2", + "esbuild-windows-arm64": "0.14.2" + } + }, + "esbuild-android-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", + "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", + "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", + "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", + "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", + "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", + "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", + "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", + "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", + "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", + "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", + "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", + "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", + "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", + "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", + "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", + "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", + "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "optional": true + } + } +} diff --git a/e2e/ast-transformers/transformer-in-ts/package.json b/e2e/ast-transformers/transformer-in-ts/package.json index 042ee7f52f..b7af817e87 100644 --- a/e2e/ast-transformers/transformer-in-ts/package.json +++ b/e2e/ast-transformers/transformer-in-ts/package.json @@ -1,4 +1,7 @@ { + "dependencies": { + "esbuild": "~0.14.2" + }, "jest": { "globals": { "ts-jest": { diff --git a/package-lock.json b/package-lock.json index 603762c8d6..f6d31247a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "bs-logger": "0.x", - "esbuild": "~0.14.0", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", @@ -28,10 +27,10 @@ "@jest/transform": "^27.4.2", "@jest/types": "^27.4.2", "@types/babel__core": "7.x", - "@types/cross-spawn": "*", - "@types/fs-extra": "*", + "@types/cross-spawn": "latest", + "@types/fs-extra": "latest", "@types/jest": "^27.0.3", - "@types/js-yaml": "*", + "@types/js-yaml": "latest", "@types/lodash.camelcase": "4.x", "@types/lodash.memoize": "4.x", "@types/lodash.set": "4.x", @@ -40,30 +39,31 @@ "@types/node-fetch": "^3.0.3", "@types/react": "17.x", "@types/rimraf": "^3.0.2", - "@types/semver": "*", - "@types/yargs": "*", + "@types/semver": "latest", + "@types/yargs": "latest", "@types/yargs-parser": "20.x", "@typescript-eslint/eslint-plugin": "^5.3.0", "@typescript-eslint/parser": "^5.3.0", "conventional-changelog-cli": "2.x", - "cross-spawn": "*", + "cross-spawn": "latest", + "esbuild": "~0.14.2", "eslint": "8.4.0", - "eslint-config-prettier": "*", - "eslint-plugin-import": "*", - "eslint-plugin-jest": "*", - "eslint-plugin-jsdoc": "*", - "eslint-plugin-prefer-arrow": "*", - "eslint-plugin-prettier": "*", + "eslint-config-prettier": "latest", + "eslint-plugin-import": "latest", + "eslint-plugin-jest": "latest", + "eslint-plugin-jsdoc": "latest", + "eslint-plugin-prefer-arrow": "latest", + "eslint-plugin-prettier": "latest", "execa": "5.1.1", "fs-extra": "10.x", "glob": "^7.1.7", - "glob-gitignore": "*", + "glob-gitignore": "latest", "husky": "4.x", "jest": "^27.4.3", "jest-snapshot-serializer-raw": "^1.2.0", - "js-yaml": "*", + "js-yaml": "latest", "json-schema-to-typescript": "^10.1.4", - "lint-staged": "*", + "lint-staged": "latest", "lodash.camelcase": "^4.3.0", "lodash.set": "^4.3.2", "node-fetch": "^3.0.0", @@ -78,6 +78,7 @@ "@babel/core": ">=7.0.0-beta.0 <8", "@types/jest": "^27.0.0", "babel-jest": ">=27.0.0 <28", + "esbuild": "~0.14.0", "jest": "^27.0.0", "typescript": ">=3.8 <5.0" }, @@ -90,6 +91,9 @@ }, "babel-jest": { "optional": true + }, + "esbuild": { + "optional": true } } }, @@ -3827,6 +3831,7 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -3858,6 +3863,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -3870,6 +3876,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -3882,6 +3889,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -3894,6 +3902,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -3906,6 +3915,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -3918,6 +3928,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3930,6 +3941,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3942,6 +3954,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3954,6 +3967,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3966,6 +3980,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3978,6 +3993,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -3990,6 +4006,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -4002,6 +4019,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -4014,6 +4032,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -4026,6 +4045,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -4038,6 +4058,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -4050,6 +4071,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -12608,6 +12630,7 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "dev": true, "requires": { "esbuild-android-arm64": "0.14.2", "esbuild-darwin-64": "0.14.2", @@ -12632,102 +12655,119 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "dev": true, "optional": true }, "esbuild-darwin-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "dev": true, "optional": true }, "esbuild-darwin-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "dev": true, "optional": true }, "esbuild-freebsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "dev": true, "optional": true }, "esbuild-freebsd-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "dev": true, "optional": true }, "esbuild-linux-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "dev": true, "optional": true }, "esbuild-linux-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "dev": true, "optional": true }, "esbuild-linux-arm": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "dev": true, "optional": true }, "esbuild-linux-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "dev": true, "optional": true }, "esbuild-linux-mips64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "dev": true, "optional": true }, "esbuild-linux-ppc64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "dev": true, "optional": true }, "esbuild-netbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "dev": true, "optional": true }, "esbuild-openbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "dev": true, "optional": true }, "esbuild-sunos-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "dev": true, "optional": true }, "esbuild-windows-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "dev": true, "optional": true }, "esbuild-windows-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "dev": true, "optional": true }, "esbuild-windows-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "dev": true, "optional": true }, "escalade": { diff --git a/package.json b/package.json index c7c84f2372..2a7233a5e5 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "homepage": "https://kulshekhar.github.io/ts-jest", "dependencies": { "bs-logger": "0.x", - "esbuild": "~0.14.0", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", @@ -65,18 +64,22 @@ "@babel/core": ">=7.0.0-beta.0 <8", "@types/jest": "^27.0.0", "babel-jest": ">=27.0.0 <28", + "esbuild": "~0.14.0", "jest": "^27.0.0", "typescript": ">=3.8 <5.0" }, "peerDependenciesMeta": { - "babel-jest": { - "optional": true - }, "@babel/core": { "optional": true }, "@types/jest": { "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true } }, "husky": { @@ -111,6 +114,7 @@ "@typescript-eslint/parser": "^5.3.0", "conventional-changelog-cli": "2.x", "cross-spawn": "latest", + "esbuild": "~0.14.2", "eslint": "8.4.0", "eslint-config-prettier": "latest", "eslint-plugin-import": "latest", diff --git a/src/config/config-set.ts b/src/config/config-set.ts index 9d81930842..485736be70 100644 --- a/src/config/config-set.ts +++ b/src/config/config-set.ts @@ -13,10 +13,9 @@ import Module from 'module' import { dirname, extname, isAbsolute, join, normalize, resolve } from 'path' import { LogContexts, Logger } from 'bs-logger' -import { transformSync } from 'esbuild' import { globsToMatcher } from 'jest-util' import json5 from 'json5' -import type { CompilerOptions, Diagnostic, FormatDiagnosticsHost, ParsedCommandLine } from 'typescript' +import type * as ts from 'typescript' import { DEFAULT_JEST_TEST_MATCH, JS_JSX_EXTENSIONS } from '../constants' import type { RawCompilerOptions } from '../raw-compiler-options' @@ -31,7 +30,8 @@ import type { TsJestGlobalOptions, TTypeScript, } from '../types' -import { stringify, rootLogger } from '../utils' +import { TsCompilerInstance } from '../types' +import { rootLogger, stringify } from '../utils' import { backportJestConfig } from '../utils/backports' import { importer } from '../utils/importer' import { Errors, ImportReasons, interpolate } from '../utils/messages' @@ -119,7 +119,7 @@ export class ConfigSet { cacheSuffix!: string tsCacheDir: string | undefined // eslint-disable-next-line @typescript-eslint/no-explicit-any - parsedTsConfig!: ParsedCommandLine | Record + parsedTsConfig!: ts.ParsedCommandLine | Record resolvedTransformers: TsJestAstTransformer = { before: [], after: [], @@ -161,7 +161,7 @@ export class ConfigSet { /** * @internal */ - private readonly _overriddenCompilerOptions: Partial = { + private readonly _overriddenCompilerOptions: Partial = { inlineSourceMap: false, // we don't want to create declaration files declaration: false, @@ -316,13 +316,22 @@ export class ConfigSet { const { astTransformers } = options if (astTransformers) { const resolveTransformerFunc = (transformerPath: string) => { - let transformerFunc + let transformerFunc: { + version: number + name: string + factory: ( + compilerInstance: TsCompilerInstance, + options?: Record, + ) => (ctx: ts.TransformationContext) => ts.Transformer + } if (extname(transformerPath) === '.ts') { - const compiledTransformer = transformSync(readFileSync(transformerPath, 'utf-8'), { - loader: 'ts', - format: 'cjs', - target: 'es2015', - }).code + const compiledTransformer = importer + .esBuild(ImportReasons.EsBuild) + .transformSync(readFileSync(transformerPath, 'utf-8'), { + loader: 'ts', + format: 'cjs', + target: 'es2015', + }).code transformerFunc = requireFromString(compiledTransformer, transformerPath.replace('.ts', '.js')) } else { transformerFunc = require(transformerPath) @@ -423,8 +432,11 @@ export class ConfigSet { /** * @internal */ - private _getAndResolveTsConfig(compilerOptions?: RawCompilerOptions, resolvedConfigFile?: string): ParsedCommandLine { - const result = this._resolveTsConfig(compilerOptions, resolvedConfigFile) as ParsedCommandLine + private _getAndResolveTsConfig( + compilerOptions?: RawCompilerOptions, + resolvedConfigFile?: string, + ): ts.ParsedCommandLine { + const result = this._resolveTsConfig(compilerOptions, resolvedConfigFile) as ts.ParsedCommandLine const { _overriddenCompilerOptions: forcedOptions } = this const finalOptions = result.options // Target ES2015 output by default (instead of ES3). @@ -519,7 +531,7 @@ export class ConfigSet { // eslint-disable-next-line @typescript-eslint/no-explicit-any protected _resolveTsConfig(compilerOptions?: RawCompilerOptions, resolvedConfigFile?: string): Record // eslint-disable-next-line no-dupe-class-members - protected _resolveTsConfig(compilerOptions?: RawCompilerOptions, resolvedConfigFile?: string): ParsedCommandLine { + protected _resolveTsConfig(compilerOptions?: RawCompilerOptions, resolvedConfigFile?: string): ts.ParsedCommandLine { let config = { compilerOptions: Object.create(null) } let basePath = normalizeSlashes(this.rootDir) const ts = this.compilerModule @@ -559,7 +571,7 @@ export class ConfigSet { return this._stringifyContentRegExp ? this._stringifyContentRegExp.test(filePath) : false } - raiseDiagnostics(diagnostics: Diagnostic[], filePath?: string, logger?: Logger): void { + raiseDiagnostics(diagnostics: ts.Diagnostic[], filePath?: string, logger?: Logger): void { const { ignoreCodes } = this._diagnostics const { DiagnosticCategory } = this.compilerModule const filteredDiagnostics = @@ -594,12 +606,12 @@ export class ConfigSet { /** * @internal */ - private _createTsError(diagnostics: readonly Diagnostic[]): TSError { + private _createTsError(diagnostics: readonly ts.Diagnostic[]): TSError { const formatDiagnostics = this._diagnostics.pretty ? this.compilerModule.formatDiagnosticsWithColorAndContext : this.compilerModule.formatDiagnostics /* istanbul ignore next (not possible to cover) */ - const diagnosticHost: FormatDiagnosticsHost = { + const diagnosticHost: ts.FormatDiagnosticsHost = { getNewLine: () => '\n', getCurrentDirectory: () => this.cwd, getCanonicalFileName: (path: string) => path, diff --git a/src/types.ts b/src/types.ts index 26853a2563..e2a7ba28d9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,7 @@ import type { Transformer, TransformOptions } from '@jest/transform' import type { Config } from '@jest/types' import type * as _babel from 'babel__core' +import type * as _esbuild from 'esbuild' import type * as _ts from 'typescript' import type { ConfigSet } from './config' @@ -26,6 +27,7 @@ declare module '@jest/types' { */ export type TBabelCore = typeof _babel export type TTypeScript = typeof _ts +export type TEsBuild = typeof _esbuild /** * @internal */ diff --git a/src/utils/importer.ts b/src/utils/importer.ts index dd67c3053c..37a8c463aa 100644 --- a/src/utils/importer.ts +++ b/src/utils/importer.ts @@ -1,4 +1,5 @@ import type { TBabelCore, TBabelJest, TTypeScript } from '../types' +import type { TEsBuild } from '../types' import { rootLogger } from './logger' import { Memoize } from './memoize' @@ -59,6 +60,10 @@ export class Importer { return this._import(why, which) } + esBuild(why: ImportReasons): TEsBuild { + return this._import(why, 'esbuild') + } + @Memoize((...args: string[]) => args.join(':')) tryThese(moduleName: string, ...fallbacks: string[]): RequireResult | undefined { let name: string @@ -119,12 +124,12 @@ export class Importer { return unpatched } - protected _import( + protected _import( why: string, moduleName: string, { alternatives = [], installTip = moduleName }: ImportOptions = {}, // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): any { + ): T { // try to load any of the alternative after trying main one const res = this.tryThese(moduleName, ...alternatives) // if we could load one, return it diff --git a/src/utils/messages.ts b/src/utils/messages.ts index 5990caa390..43223df492 100644 --- a/src/utils/messages.ts +++ b/src/utils/messages.ts @@ -47,6 +47,7 @@ export const enum Deprecations { export const enum ImportReasons { TsJest = 'Using "ts-jest" requires this package to be installed.', BabelJest = 'Using "babel-jest" requires this package to be installed.', + EsBuild = 'Using "esbuild" requires this package to be installed.', } /**