From 28b598d3a1a3848d5c1a5c43f076c557d2f58d23 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Tue, 12 Jul 2022 01:14:50 -0400 Subject: [PATCH 1/4] wip --- src/index.ts | 23 +++++-- tests/fixtures/lib/cjs-ext-cjs/index.cjs | 72 +++++++++++++++------ tests/fixtures/lib/cjs-ext-js/index.js | 72 +++++++++++++++------ tests/fixtures/lib/esm-ext-js/index.js | 72 +++++++++++++++------ tests/fixtures/lib/esm-ext-mjs/index.mjs | 72 +++++++++++++++------ tests/fixtures/lib/ts-ext-cts/index.cts | 76 +++++++++++++++------- tests/fixtures/lib/ts-ext-jsx/index.jsx | 72 +++++++++++++++------ tests/fixtures/lib/ts-ext-mts/index.mts | 76 +++++++++++++++------- tests/fixtures/lib/ts-ext-ts/index.ts | 76 +++++++++++++++------- tests/fixtures/lib/ts-ext-ts/index.tsx.ts | 76 +++++++++++++++------- tests/fixtures/lib/ts-ext-tsx/index.tsx | 72 +++++++++++++++------ tests/index.ts | 1 + tests/specs/javascript/cjs.ts | 65 ++++++++++++++----- tests/specs/javascript/esm.ts | 79 ++++++++++++++++++----- tests/specs/typescript/cts.ts | 39 ++++++++--- tests/specs/typescript/jsx.ts | 39 ++++++++--- tests/specs/typescript/mts.ts | 39 ++++++++--- tests/specs/typescript/ts.ts | 56 +++++++++++----- tests/specs/typescript/tsx.ts | 39 ++++++++--- tests/utils/node-supports.ts | 3 + 20 files changed, 810 insertions(+), 309 deletions(-) diff --git a/src/index.ts b/src/index.ts index 85c2cc0..201c8ba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,15 +32,23 @@ const tsconfigPathsMatcher = tsconfig && createPathsMatcher(tsconfig); const sourcemaps = installSourceMapSupport(); -const nodeVersion = process.versions.node.split('.').map(Number); +type Version = [number, number, number]; +const nodeVersion = process.versions.node.split('.').map(Number) as Version; + +const compareNodeVersion = (version: Version) => ( + nodeVersion[0] - version[0] + || nodeVersion[1] - version[1] + || nodeVersion[2] - version[2] +); + const nodeSupportsImport = ( // v13.2.0 and higher - (nodeVersion[0] >= 13 && nodeVersion[1] >= 2) + compareNodeVersion([13, 2, 0]) >= 0 // 12.20.0 ~ 13.0.0 || ( - (nodeVersion[0] >= 12 && nodeVersion[1] >= 20) - && (nodeVersion[0] < 13 && nodeVersion[1] < 0) + compareNodeVersion([12, 20, 0]) >= 0 + && compareNodeVersion([13, 0, 0]) < 0 ) ); @@ -115,12 +123,17 @@ Object.defineProperty(extensions, '.mjs', { enumerable: false, }); +const supportsNodePrefix = ( + compareNodeVersion([16, 0, 0]) >= 0 + || compareNodeVersion([14, 18, 0]) >= 0 +); + // Add support for "node:" protocol const resolveFilename = Module._resolveFilename; Module._resolveFilename = function (request, parent, isMain, options) { // Added in v12.20.0 // https://nodejs.org/api/esm.html#esm_node_imports - if (request.startsWith('node:')) { + if (!supportsNodePrefix && request.startsWith('node:')) { request = request.slice(5); } diff --git a/tests/fixtures/lib/cjs-ext-cjs/index.cjs b/tests/fixtures/lib/cjs-ext-cjs/index.cjs index 0de041f..80f48bd 100644 --- a/tests/fixtures/lib/cjs-ext-cjs/index.cjs +++ b/tests/fixtures/lib/cjs-ext-cjs/index.cjs @@ -1,22 +1,56 @@ -const fs = require('node:fs'); - -console.log( - 'loaded cjs-ext-cjs/index.cjs', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - }), +async function test(description, testFunction) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded cjs-ext-cjs/index.cjs'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +// esbuild uses import.meta as a signal for ESM +// test( +// 'import.meta.url', +// () => Boolean(import.meta.url), +// ); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack.includes(':38:'), +); + +test( + 'resolves optional node prefix', + () => Boolean(require('node:fs')), +); + +test( + 'resolves required node prefix', + () => Boolean(require('node:test')), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), ); module.exports = 1234; diff --git a/tests/fixtures/lib/cjs-ext-js/index.js b/tests/fixtures/lib/cjs-ext-js/index.js index 1d659b0..63f2580 100644 --- a/tests/fixtures/lib/cjs-ext-js/index.js +++ b/tests/fixtures/lib/cjs-ext-js/index.js @@ -1,22 +1,56 @@ -const fs = require('node:fs'); - -console.log( - 'loaded cjs-ext-js/index.js', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - }), +async function test(description, testFunction) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded cjs-ext-js/index.js'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +// esbuild uses import.meta as a signal for ESM +// test( +// 'import.meta.url', +// () => Boolean(import.meta.url), +// ); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack.includes(':38:'), +); + +test( + 'resolves optional node prefix', + () => Boolean(require('node:fs')), +); + +test( + 'resolves required node prefix', + () => Boolean(require('node:test')), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), ); module.exports = 1234; diff --git a/tests/fixtures/lib/esm-ext-js/index.js b/tests/fixtures/lib/esm-ext-js/index.js index 03ba42f..4565978 100644 --- a/tests/fixtures/lib/esm-ext-js/index.js +++ b/tests/fixtures/lib/esm-ext-js/index.js @@ -1,23 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded esm-ext-js/index.js', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description, testFunction) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded esm-ext-js/index.js'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack.includes(':37:'), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); + +test( + 'resolves optional node prefix', + () => import('node:fs').then(Boolean), +); + +test( + 'resolves required node prefix', + () => import('node:test').then(Boolean), ); export default 1234; diff --git a/tests/fixtures/lib/esm-ext-mjs/index.mjs b/tests/fixtures/lib/esm-ext-mjs/index.mjs index 6981873..d1c0e5a 100644 --- a/tests/fixtures/lib/esm-ext-mjs/index.mjs +++ b/tests/fixtures/lib/esm-ext-mjs/index.mjs @@ -1,23 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded esm-ext-mjs/index.mjs', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description, testFunction) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded esm-ext-mjs/index.mjs'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack.includes(':37:'), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); + +test( + 'resolves optional node prefix', + () => import('node:fs').then(Boolean), +); + +test( + 'resolves required node prefix', + () => import('node:test').then(Boolean), ); export default 1234; diff --git a/tests/fixtures/lib/ts-ext-cts/index.cts b/tests/fixtures/lib/ts-ext-cts/index.cts index 1961754..eb50990 100644 --- a/tests/fixtures/lib/ts-ext-cts/index.cts +++ b/tests/fixtures/lib/ts-ext-cts/index.cts @@ -1,27 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-cts/index.cts', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description: string, testFunction: () => any | Promise) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-cts/index.cts'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', ); -function valueNumber(value: number) { - return value; -} +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack!.includes(':37:'), +); + +test( + 'resolves optional node prefix', + () => Boolean(require('node:fs')), +); + +test( + 'resolves required node prefix', + () => Boolean(require('node:test')), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); -export default valueNumber(1234); +export default 1234; diff --git a/tests/fixtures/lib/ts-ext-jsx/index.jsx b/tests/fixtures/lib/ts-ext-jsx/index.jsx index e0985e5..b1ef836 100644 --- a/tests/fixtures/lib/ts-ext-jsx/index.jsx +++ b/tests/fixtures/lib/ts-ext-jsx/index.jsx @@ -1,23 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-jsx/index.jsx', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description, testFunction) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-jsx/index.jsx'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack.includes(':37:'), +); + +test( + 'resolves optional node prefix', + () => Boolean(require('node:fs')), +); + +test( + 'resolves required node prefix', + () => Boolean(require('node:test')), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), ); const React = { diff --git a/tests/fixtures/lib/ts-ext-mts/index.mts b/tests/fixtures/lib/ts-ext-mts/index.mts index 3a1c6cb..834ced1 100644 --- a/tests/fixtures/lib/ts-ext-mts/index.mts +++ b/tests/fixtures/lib/ts-ext-mts/index.mts @@ -1,27 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-mts/index.mts', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description: string, testFunction: () => any | Promise) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-mts/index.mts'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', ); -function valueNumber(value: number) { - return value; -} +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack!.includes(':37:'), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); + +test( + 'resolves optional node prefix', + () => import('node:fs').then(Boolean), +); + +test( + 'resolves required node prefix', + () => import('node:test').then(Boolean), +); -export default valueNumber(1234); +export default 1234; diff --git a/tests/fixtures/lib/ts-ext-ts/index.ts b/tests/fixtures/lib/ts-ext-ts/index.ts index 5629210..87ef4b8 100644 --- a/tests/fixtures/lib/ts-ext-ts/index.ts +++ b/tests/fixtures/lib/ts-ext-ts/index.ts @@ -1,27 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-ts/index.ts', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description: string, testFunction: () => any | Promise) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-ts/index.ts'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', ); -function valueNumber(value: number) { - return value; -} +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack!.includes(':37:'), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); + +test( + 'resolves optional node prefix', + () => import('node:fs').then(Boolean), +); + +test( + 'resolves required node prefix', + () => import('node:test').then(Boolean), +); -export default valueNumber(1234); +export default 1234; diff --git a/tests/fixtures/lib/ts-ext-ts/index.tsx.ts b/tests/fixtures/lib/ts-ext-ts/index.tsx.ts index bede193..3bb9016 100644 --- a/tests/fixtures/lib/ts-ext-ts/index.tsx.ts +++ b/tests/fixtures/lib/ts-ext-ts/index.tsx.ts @@ -1,27 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-ts/index.tsx.ts', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description: string, testFunction: () => any | Promise) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-ts/index.tsx.ts'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', ); -function valueNumber(value: number) { - return value; -} +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack!.includes(':37:'), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), +); + +test( + 'resolves optional node prefix', + () => import('node:fs').then(Boolean), +); + +test( + 'resolves required node prefix', + () => import('node:test').then(Boolean), +); -export default valueNumber(1234); +export default 1234; diff --git a/tests/fixtures/lib/ts-ext-tsx/index.tsx b/tests/fixtures/lib/ts-ext-tsx/index.tsx index 8548ee4..3746cfc 100644 --- a/tests/fixtures/lib/ts-ext-tsx/index.tsx +++ b/tests/fixtures/lib/ts-ext-tsx/index.tsx @@ -1,23 +1,55 @@ -import fs from 'node:fs'; - -console.log( - 'loaded ts-ext-tsx/index.tsx', - JSON.stringify({ - nodePrefix: Boolean(fs), - hasDynamicImport: Boolean(import('fs')), - ...(() => { - let nameInError; - try { - nameInError(); - } catch (error) { - return { - nameInError: error.message.includes('nameInError'), - sourceMap: error.stack.includes(':11:5'), - }; - } - })(), - 'import.meta.url': Boolean(import.meta.url), - }), +async function test(description: string, testFunction: () => any | Promise) { + try { + const result = await testFunction(); + if (!result) { throw result; } + console.log(`✔ ${description}`); + } catch (error) { + console.log(`✖ ${description}: ${error.toString().split('\n').shift()}`); + } +} + +console.log('loaded ts-ext-tsx/index.tsx'); + +test( + 'has CJS context', + () => typeof require !== 'undefined' || typeof module !== 'undefined', +); + +test( + 'import.meta.url', + () => Boolean(import.meta.url), +); + +test( + 'name in error', + () => { + let nameInError; + try { + nameInError(); + } catch (error) { + return error.message.includes('nameInError'); + } + }, +); + +test( + 'sourcemaps', + () => new Error().stack!.includes(':37:'), +); + +test( + 'resolves optional node prefix', + () => Boolean(require('node:fs')), +); + +test( + 'resolves required node prefix', + () => Boolean(require('node:test')), +); + +test( + 'has dynamic import', + () => import('fs').then(Boolean), ); const React = { diff --git a/tests/index.ts b/tests/index.ts index bf426d9..d566772 100644 --- a/tests/index.ts +++ b/tests/index.ts @@ -10,6 +10,7 @@ const nodeVersions = [ '14.19.1', '16.14.2', '17.8.0', + '18.0.0', ] : [] ), diff --git a/tests/specs/javascript/cjs.ts b/tests/specs/javascript/cjs.ts index aa9adfa..c03b761 100644 --- a/tests/specs/javascript/cjs.ts +++ b/tests/specs/javascript/cjs.ts @@ -6,29 +6,44 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('Load CJS', ({ describe }) => { describe('.cjs extension', ({ describe }) => { - const output = 'loaded cjs-ext-cjs/index.cjs {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true}'; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded cjs-ext-cjs/index.cjs'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/cjs-ext-cjs/index.cjs'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('TypeScript Import', async () => { const nodeProcess = await node.importDynamic(importPath, { mode: 'typescript' }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n1234`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('1234'); }); }); @@ -77,24 +92,38 @@ export default testSuite(async ({ describe }, node: NodeApis) => { }); describe('.js extension', ({ describe }) => { - const output = 'loaded cjs-ext-js/index.js {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true}'; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded cjs-ext-js/index.js'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/cjs-ext-js/index.js'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n1234`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('1234'); }); }); @@ -103,7 +132,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); /** @@ -123,13 +152,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n1234`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('1234'); }); }); @@ -138,8 +169,8 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); - }); + assertResults(nodeProcess.stdout); + }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); @@ -147,13 +178,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Directory import'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n1234`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('1234'); }); }); }); diff --git a/tests/specs/javascript/esm.ts b/tests/specs/javascript/esm.ts index ea11cf6..243dbec 100644 --- a/tests/specs/javascript/esm.ts +++ b/tests/specs/javascript/esm.ts @@ -4,31 +4,53 @@ import type { NodeApis } from '../../utils/node-with-loader'; import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { + const nodeSupportsEsm = semver.satisfies(node.version, nodeSupports.esm); + describe('Load ESM', ({ describe }) => { describe('.mjs extension', ({ describe }) => { - const output = 'loaded esm-ext-mjs/index.mjs {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; + function assertResults(stdout: string, cjsContext: boolean) { + expect(stdout).toMatch('loaded esm-ext-mjs/index.mjs'); + expect(stdout).toMatch( + cjsContext + ? '✔ has CJS context' + : '✖ has CJS context', + ); + expect(stdout).toMatch('✔ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/esm-ext-mjs/index.mjs'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout, !nodeSupportsEsm); }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, !nodeSupportsEsm); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); test('TypeScript Import', async () => { const nodeProcess = await node.importDynamic(importPath, { mode: 'typescript' }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, !nodeSupportsEsm); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -77,29 +99,48 @@ export default testSuite(async ({ describe }, node: NodeApis) => { }); describe('.js extension', ({ describe }) => { - const output = 'loaded esm-ext-js/index.js {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; + function assertResults(stdout: string, cjsContext: boolean) { + expect(stdout).toMatch('loaded esm-ext-js/index.js'); + expect(stdout).toMatch( + cjsContext + ? '✔ has CJS context' + : '✖ has CJS context', + ); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/esm-ext-js/index.js'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout, true); }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); test('CommonJS Import', async () => { const nodeProcess = await node.importDynamic(importPath, { mode: 'commonjs' }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -108,7 +149,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout, true); }); test('Import', async () => { @@ -117,13 +158,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -132,7 +175,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout, true); }); test('Import', async () => { @@ -141,13 +184,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Directory import'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); - } + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout, true); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); }); diff --git a/tests/specs/typescript/cts.ts b/tests/specs/typescript/cts.ts index 3a4f743..82e62b0 100644 --- a/tests/specs/typescript/cts.ts +++ b/tests/specs/typescript/cts.ts @@ -5,15 +5,27 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('.cts extension', ({ describe }) => { - const output = 'loaded ts-ext-cts/index.cts {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":false}'; - const outputExport = `${output}\n{"default":1234}`; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded ts-ext-cts/index.cts'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✖ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/ts-ext-cts/index.cts'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import dynamic', async () => { @@ -22,30 +34,35 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); describe('Import static', ({ test }) => { test('from .js', async () => { const nodeProcess = await node.importStatic(importPath); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('from .ts', async () => { const nodeProcess = await node.importStatic(importPath, { extension: 'ts' }); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('from .mts', async () => { const nodeProcess = await node.importStatic(importPath, { extension: 'mts' }); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -63,13 +80,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath, { typescript: true }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); diff --git a/tests/specs/typescript/jsx.ts b/tests/specs/typescript/jsx.ts index b12aac3..5e745b5 100644 --- a/tests/specs/typescript/jsx.ts +++ b/tests/specs/typescript/jsx.ts @@ -5,14 +5,27 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('.jsx extension', ({ describe }) => { - const output = 'loaded ts-ext-jsx/index.jsx {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded ts-ext-jsx/index.jsx'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/ts-ext-jsx/index.jsx'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -21,13 +34,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); @@ -36,7 +51,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -45,13 +60,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); @@ -60,7 +77,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -69,13 +86,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Directory import'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); }); diff --git a/tests/specs/typescript/mts.ts b/tests/specs/typescript/mts.ts index 4ebd77c..4927944 100644 --- a/tests/specs/typescript/mts.ts +++ b/tests/specs/typescript/mts.ts @@ -5,15 +5,27 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('.mts extension', ({ describe }) => { - const output = 'loaded ts-ext-mts/index.mts {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; - const outputExport = `${output}\n{"default":1234}`; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded ts-ext-mts/index.mts'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test, describe }) => { const importPath = './lib/ts-ext-mts/index.mts'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import dynamic', async () => { @@ -22,30 +34,35 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); describe('Import static', ({ test }) => { test('from .js', async () => { const nodeProcess = await node.importStatic(importPath); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('from .ts', async () => { const nodeProcess = await node.importStatic(importPath, { extension: 'ts' }); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('from .mts', async () => { const nodeProcess = await node.importStatic(importPath, { extension: 'mts' }); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(outputExport); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -63,13 +80,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath, { typescript: true }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); diff --git a/tests/specs/typescript/ts.ts b/tests/specs/typescript/ts.ts index c4870ba..aa6b4f6 100644 --- a/tests/specs/typescript/ts.ts +++ b/tests/specs/typescript/ts.ts @@ -5,14 +5,27 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('.ts extension', ({ describe }) => { - const output = 'loaded ts-ext-ts/index.ts {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; + function assertResults(stdout: string, loadedMessage = 'loaded ts-ext-ts/index.ts\n') { + expect(stdout).toMatch(loadedMessage); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/ts-ext-ts/index.ts'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); if (semver.satisfies(node.version, nodeSupports.sourceMap)) { @@ -20,7 +33,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { const nodeProcess = await node.load(importPath, { nodeOptions: ['-r', 'source-map-support/register'], }); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); } @@ -30,13 +43,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -54,13 +69,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath, { typescript: true }); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -69,7 +86,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -78,23 +95,24 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); describe('extensionless with subextension', ({ test }) => { const importPath = './lib/ts-ext-ts/index.tsx'; - const outputSubextension = 'loaded ts-ext-ts/index.tsx.ts {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(outputSubextension); + assertResults(nodeProcess.stdout, 'loaded ts-ext-ts/index.tsx.ts\n'); }); test('Import', async () => { @@ -103,13 +121,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${outputSubextension}\n{"default":1234}`); + assertResults(nodeProcess.stdout, 'loaded ts-ext-ts/index.tsx.ts\n'); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${outputSubextension}\n{"default":1234}`); + assertResults(nodeProcess.stdout, 'loaded ts-ext-ts/index.tsx.ts\n'); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); @@ -118,7 +138,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -127,13 +147,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Directory import'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":1234}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":1234}`); }); }); }); diff --git a/tests/specs/typescript/tsx.ts b/tests/specs/typescript/tsx.ts index d622496..d15b8d1 100644 --- a/tests/specs/typescript/tsx.ts +++ b/tests/specs/typescript/tsx.ts @@ -5,14 +5,27 @@ import nodeSupports from '../../utils/node-supports'; export default testSuite(async ({ describe }, node: NodeApis) => { describe('.tsx extension', ({ describe }) => { - const output = 'loaded ts-ext-tsx/index.tsx {"nodePrefix":true,"hasDynamicImport":true,"nameInError":true,"sourceMap":true,"import.meta.url":true}'; + function assertResults(stdout: string) { + expect(stdout).toMatch('loaded ts-ext-tsx/index.tsx'); + expect(stdout).toMatch('✔ has CJS context'); + expect(stdout).toMatch('✔ import.meta.url'); + expect(stdout).toMatch('✔ name in error'); + expect(stdout).toMatch('✔ sourcemaps'); + expect(stdout).toMatch('✔ has dynamic import'); + expect(stdout).toMatch('✔ resolves optional node prefix'); + expect(stdout).toMatch( + semver.satisfies(node.version, nodeSupports.testRunner) + ? '✔ resolves required node prefix' + : '✖ resolves required node prefix: Error', + ); + } describe('full path', ({ test }) => { const importPath = './lib/ts-ext-tsx/index.tsx'; test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -21,13 +34,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); @@ -36,7 +51,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -45,13 +60,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); @@ -60,7 +77,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); - expect(nodeProcess.stdout).toBe(output); + assertResults(nodeProcess.stdout); }); test('Import', async () => { @@ -69,13 +86,15 @@ export default testSuite(async ({ describe }, node: NodeApis) => { if (semver.satisfies(node.version, nodeSupports.import)) { expect(nodeProcess.stderr).toMatch('Directory import'); } else { - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); - expect(nodeProcess.stdout).toBe(`${output}\n{"default":["div",null,"hello world"]}`); + assertResults(nodeProcess.stdout); + expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); }); }); }); diff --git a/tests/utils/node-supports.ts b/tests/utils/node-supports.ts index 1fc918a..bf73058 100644 --- a/tests/utils/node-supports.ts +++ b/tests/utils/node-supports.ts @@ -1,4 +1,7 @@ export default { + esm: '>= 12.20.0', import: '^12.20.0 || >=13.2.0', sourceMap: '^14.18.0 || >=16.6.0', + nodePrefixRequire: '^14.18.0 || >= 16.0.0', + testRunner: '>= 18.0.0', }; From c3e1b85306e62948343fbe5dac8b06742d16fd82 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Tue, 12 Jul 2022 01:15:15 -0400 Subject: [PATCH 2/4] style: lintfix --- tests/specs/javascript/cjs.ts | 2 +- tests/specs/javascript/esm.ts | 22 +++++++++++----------- tests/specs/typescript/jsx.ts | 12 ++++++------ tests/specs/typescript/ts.ts | 20 ++++++++++---------- tests/specs/typescript/tsx.ts | 12 ++++++------ 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/tests/specs/javascript/cjs.ts b/tests/specs/javascript/cjs.ts index c03b761..664db84 100644 --- a/tests/specs/javascript/cjs.ts +++ b/tests/specs/javascript/cjs.ts @@ -170,7 +170,7 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Load', async () => { const nodeProcess = await node.load(importPath); assertResults(nodeProcess.stdout); - }); + }); test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); diff --git a/tests/specs/javascript/esm.ts b/tests/specs/javascript/esm.ts index 243dbec..ecffeb5 100644 --- a/tests/specs/javascript/esm.ts +++ b/tests/specs/javascript/esm.ts @@ -38,19 +38,19 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); assertResults(nodeProcess.stdout, !nodeSupportsEsm); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('TypeScript Import', async () => { const nodeProcess = await node.importDynamic(importPath, { mode: 'typescript' }); assertResults(nodeProcess.stdout, !nodeSupportsEsm); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -128,19 +128,19 @@ export default testSuite(async ({ describe }, node: NodeApis) => { test('Import', async () => { const nodeProcess = await node.importDynamic(importPath); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('CommonJS Import', async () => { const nodeProcess = await node.importDynamic(importPath, { mode: 'commonjs' }); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -159,14 +159,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -185,14 +185,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Directory import'); } else { assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); - } + expect(nodeProcess.stdout).toMatch('{"default":1234}'); + } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout, true); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); }); diff --git a/tests/specs/typescript/jsx.ts b/tests/specs/typescript/jsx.ts index 5e745b5..0830e37 100644 --- a/tests/specs/typescript/jsx.ts +++ b/tests/specs/typescript/jsx.ts @@ -35,14 +35,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); @@ -61,14 +61,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); @@ -87,14 +87,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Directory import'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); }); diff --git a/tests/specs/typescript/ts.ts b/tests/specs/typescript/ts.ts index aa6b4f6..35ce4bc 100644 --- a/tests/specs/typescript/ts.ts +++ b/tests/specs/typescript/ts.ts @@ -44,14 +44,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -70,14 +70,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath, { typescript: true }); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -96,14 +96,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -122,14 +122,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout, 'loaded ts-ext-ts/index.tsx.ts\n'); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout, 'loaded ts-ext-ts/index.tsx.ts\n'); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); @@ -148,14 +148,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Directory import'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":1234}`); + expect(nodeProcess.stdout).toMatch('{"default":1234}'); }); }); }); diff --git a/tests/specs/typescript/tsx.ts b/tests/specs/typescript/tsx.ts index d15b8d1..96c0f57 100644 --- a/tests/specs/typescript/tsx.ts +++ b/tests/specs/typescript/tsx.ts @@ -35,14 +35,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Unknown file extension'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); @@ -61,14 +61,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Cannot find module'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); @@ -87,14 +87,14 @@ export default testSuite(async ({ describe }, node: NodeApis) => { expect(nodeProcess.stderr).toMatch('Directory import'); } else { assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); } }); test('Require', async () => { const nodeProcess = await node.require(importPath); assertResults(nodeProcess.stdout); - expect(nodeProcess.stdout).toMatch(`{"default":["div",null,"hello world"]}`); + expect(nodeProcess.stdout).toMatch('{"default":["div",null,"hello world"]}'); }); }); }); From 78f6f945a7449d7880b02ba9653b8501731b3619 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Tue, 12 Jul 2022 01:40:43 -0400 Subject: [PATCH 3/4] refactor: use dev core-utils --- package.json | 2 +- pnpm-lock.yaml | 20 +++++++++++--------- src/index.ts | 10 +--------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index d497239..d807a20 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test": "node --require ./dist/index.js tests/index.ts" }, "dependencies": { - "@esbuild-kit/core-utils": "^2.0.2", + "@esbuild-kit/core-utils": "github:esbuild-kit/core-utils#built/compare-node-version", "get-tsconfig": "^4.1.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48e7ece..248321f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: 5.4 specifiers: - '@esbuild-kit/core-utils': ^2.0.2 + '@esbuild-kit/core-utils': github:esbuild-kit/core-utils#built/compare-node-version '@pvtnbr/eslint-config': ^0.26.2 '@types/node': ^18.0.0 '@types/semver': ^7.3.10 @@ -16,7 +16,7 @@ specifiers: typescript: ^4.7.4 dependencies: - '@esbuild-kit/core-utils': 2.0.2 + '@esbuild-kit/core-utils': github.com/esbuild-kit/core-utils/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe get-tsconfig: 4.1.0 devDependencies: @@ -55,13 +55,6 @@ packages: js-tokens: 4.0.0 dev: true - /@esbuild-kit/core-utils/2.0.2: - resolution: {integrity: sha512-clNYQUsqtc36pzW5EufMsahcbLG45EaW3YDyf0DlaS0eCMkDXpxIlHwPC0rndUwG6Ytk9sMSD5k1qHbwYEC/OQ==} - dependencies: - esbuild: 0.14.48 - source-map-support: 0.5.21 - dev: false - /@eslint/eslintrc/1.3.0: resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3593,3 +3586,12 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true + + github.com/esbuild-kit/core-utils/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe: + resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe} + name: '@esbuild-kit/core-utils' + version: 0.0.0-semantic-release + dependencies: + esbuild: 0.14.48 + source-map-support: 0.5.21 + dev: false diff --git a/src/index.ts b/src/index.ts index 201c8ba..bd6831a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,7 @@ import { resolveTsPath, transformDynamicImport, applySourceMap, + compareNodeVersion, } from '@esbuild-kit/core-utils'; import { getTsconfig, @@ -32,15 +33,6 @@ const tsconfigPathsMatcher = tsconfig && createPathsMatcher(tsconfig); const sourcemaps = installSourceMapSupport(); -type Version = [number, number, number]; -const nodeVersion = process.versions.node.split('.').map(Number) as Version; - -const compareNodeVersion = (version: Version) => ( - nodeVersion[0] - version[0] - || nodeVersion[1] - version[1] - || nodeVersion[2] - version[2] -); - const nodeSupportsImport = ( // v13.2.0 and higher compareNodeVersion([13, 2, 0]) >= 0 From b3246618c51d79a0ecade2d104f3da0e90eab5c9 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Tue, 12 Jul 2022 16:28:55 -0400 Subject: [PATCH 4/4] chore: use stable core-utils --- package.json | 2 +- pnpm-lock.yaml | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index d807a20..1383d74 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test": "node --require ./dist/index.js tests/index.ts" }, "dependencies": { - "@esbuild-kit/core-utils": "github:esbuild-kit/core-utils#built/compare-node-version", + "@esbuild-kit/core-utils": "^2.1.0", "get-tsconfig": "^4.1.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 248321f..63311e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: 5.4 specifiers: - '@esbuild-kit/core-utils': github:esbuild-kit/core-utils#built/compare-node-version + '@esbuild-kit/core-utils': ^2.1.0 '@pvtnbr/eslint-config': ^0.26.2 '@types/node': ^18.0.0 '@types/semver': ^7.3.10 @@ -16,7 +16,7 @@ specifiers: typescript: ^4.7.4 dependencies: - '@esbuild-kit/core-utils': github.com/esbuild-kit/core-utils/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe + '@esbuild-kit/core-utils': 2.1.0 get-tsconfig: 4.1.0 devDependencies: @@ -55,6 +55,13 @@ packages: js-tokens: 4.0.0 dev: true + /@esbuild-kit/core-utils/2.1.0: + resolution: {integrity: sha512-fZirrc2KjeTumVjE4bpleWOk2gD83b7WuGeQqOceKFQL+heNKKkNB5G5pekOUTLzfSBc0hP7hCSBoD9TuR0hLw==} + dependencies: + esbuild: 0.14.48 + source-map-support: 0.5.21 + dev: false + /@eslint/eslintrc/1.3.0: resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3586,12 +3593,3 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true - - github.com/esbuild-kit/core-utils/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe: - resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/3c9ef888e2e1c453d72d8bcb33bcfa4d0b3accbe} - name: '@esbuild-kit/core-utils' - version: 0.0.0-semantic-release - dependencies: - esbuild: 0.14.48 - source-map-support: 0.5.21 - dev: false