From 3be1fdec77a84945fe1a0a1a48ae77c48164d91c Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Wed, 29 Dec 2021 13:02:56 +0100 Subject: [PATCH 01/74] Add path mapping support to ESM loader The ESM loader now resolves import paths using TypeScripts [path mapping][1] feature. [1]: https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping Signed-off-by: Thomas Scholtes --- dist-raw/node-errors.js | 45 +++--- src/esm.ts | 38 ++++- src/path-mapping.ts | 131 ++++++++++++++++++ src/test/index.spec.ts | 10 ++ tests/esm-path-mapping/index.ts | 32 +++++ tests/esm-path-mapping/mapped/1-foo.ts | 1 + tests/esm-path-mapping/mapped/1-jsx.jsx | 6 + tests/esm-path-mapping/mapped/2-foo.ts | 1 + .../esm-path-mapping/mapped/2-specific-foo.ts | 1 + tests/esm-path-mapping/mapped/2a-bar.ts | 1 + tests/esm-path-mapping/mapped/2a-foo.ts | 1 + tests/esm-path-mapping/mapped/2a-js.js | 1 + tests/esm-path-mapping/mapped/static.ts | 1 + tests/esm-path-mapping/package.json | 3 + tests/esm-path-mapping/tsconfig.json | 15 ++ 15 files changed, 259 insertions(+), 28 deletions(-) create mode 100644 src/path-mapping.ts create mode 100644 tests/esm-path-mapping/index.ts create mode 100644 tests/esm-path-mapping/mapped/1-foo.ts create mode 100644 tests/esm-path-mapping/mapped/1-jsx.jsx create mode 100644 tests/esm-path-mapping/mapped/2-foo.ts create mode 100644 tests/esm-path-mapping/mapped/2-specific-foo.ts create mode 100644 tests/esm-path-mapping/mapped/2a-bar.ts create mode 100644 tests/esm-path-mapping/mapped/2a-foo.ts create mode 100644 tests/esm-path-mapping/mapped/2a-js.js create mode 100644 tests/esm-path-mapping/mapped/static.ts create mode 100644 tests/esm-path-mapping/package.json create mode 100644 tests/esm-path-mapping/tsconfig.json diff --git a/dist-raw/node-errors.js b/dist-raw/node-errors.js index 73255a7d2..1c55ed0f8 100644 --- a/dist-raw/node-errors.js +++ b/dist-raw/node-errors.js @@ -1,30 +1,29 @@ -exports.codes = { - ERR_INPUT_TYPE_NOT_ALLOWED: createErrorCtor(joinArgs('ERR_INPUT_TYPE_NOT_ALLOWED')), - ERR_INVALID_ARG_VALUE: createErrorCtor(joinArgs('ERR_INVALID_ARG_VALUE')), - ERR_INVALID_MODULE_SPECIFIER: createErrorCtor(joinArgs('ERR_INVALID_MODULE_SPECIFIER')), - ERR_INVALID_PACKAGE_CONFIG: createErrorCtor(joinArgs('ERR_INVALID_PACKAGE_CONFIG')), - ERR_INVALID_PACKAGE_TARGET: createErrorCtor(joinArgs('ERR_INVALID_PACKAGE_TARGET')), - ERR_MANIFEST_DEPENDENCY_MISSING: createErrorCtor(joinArgs('ERR_MANIFEST_DEPENDENCY_MISSING')), - ERR_MODULE_NOT_FOUND: createErrorCtor((path, base, type = 'package') => { - return `Cannot find ${type} '${path}' imported from ${base}` - }), - ERR_PACKAGE_IMPORT_NOT_DEFINED: createErrorCtor(joinArgs('ERR_PACKAGE_IMPORT_NOT_DEFINED')), - ERR_PACKAGE_PATH_NOT_EXPORTED: createErrorCtor(joinArgs('ERR_PACKAGE_PATH_NOT_EXPORTED')), - ERR_UNSUPPORTED_DIR_IMPORT: createErrorCtor(joinArgs('ERR_UNSUPPORTED_DIR_IMPORT')), - ERR_UNSUPPORTED_ESM_URL_SCHEME: createErrorCtor(joinArgs('ERR_UNSUPPORTED_ESM_URL_SCHEME')), - ERR_UNKNOWN_FILE_EXTENSION: createErrorCtor(joinArgs('ERR_UNKNOWN_FILE_EXTENSION')), -} +exports.codes = {} -function joinArgs(name) { - return (...args) => { - return [name, ...args].join(' ') +function defineError(code, buildMessage) { + if (!buildMessage) { + buildMessage = (...args) => args.join(' ') } -} -function createErrorCtor(errorMessageCreator) { - return class CustomError extends Error { + exports.codes[code] = class CustomError extends Error { constructor(...args) { - super(errorMessageCreator(...args)) + super(`${code}: ${buildMessage(...args)}`) + this.code = code } } } + +defineError("ERR_INPUT_TYPE_NOT_ALLOWED") +defineError("ERR_INVALID_ARG_VALUE") +defineError("ERR_INVALID_MODULE_SPECIFIER") +defineError("ERR_INVALID_PACKAGE_CONFIG") +defineError("ERR_INVALID_PACKAGE_TARGET") +defineError("ERR_MANIFEST_DEPENDENCY_MISSING") +defineError("ERR_MODULE_NOT_FOUND", (path, base, type = 'package') => { + return `Cannot find ${type} '${path}' imported from ${base}` +}) +defineError("ERR_PACKAGE_IMPORT_NOT_DEFINED") +defineError("ERR_PACKAGE_PATH_NOT_EXPORTED") +defineError("ERR_UNSUPPORTED_DIR_IMPORT") +defineError("ERR_UNSUPPORTED_ESM_URL_SCHEME") +defineError("ERR_UNKNOWN_FILE_EXTENSION") diff --git a/src/esm.ts b/src/esm.ts index c83fd22c4..04ec1f1cf 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -15,6 +15,7 @@ import { import { extname } from 'path'; import * as assert from 'assert'; import { normalizeSlashes } from './util'; +import { createPathMapper } from './path-mapping'; const { createResolve, } = require('../dist-raw/node-esm-resolve-implementation'); @@ -93,6 +94,7 @@ export function registerAndCreateEsmHooks(opts?: RegisterOptions) { export function createEsmHooks(tsNodeService: Service) { tsNodeService.enableExperimentalEsmLoaderInterop(); + const mapPath = createPathMapper(tsNodeService.config.options); // Custom implementation that considers additional file extensions and automatically adds file extensions const nodeResolveImplementation = createResolve({ @@ -147,12 +149,38 @@ export function createEsmHooks(tsNodeService: Service) { return defer(); } - // pathname is the path to be resolved + let candidateSpecifiers: string[] = [specifier]; - return nodeResolveImplementation.defaultResolve( - specifier, - context, - defaultResolve + if (context.parentURL) { + const parentUrl = parseUrl(context.parentURL); + if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { + const mappedSpecifiers = mapPath(specifier); + if (mappedSpecifiers) { + candidateSpecifiers = mappedSpecifiers; + } + } + } + + let candidateSpecifier: string | undefined; + while ((candidateSpecifier = candidateSpecifiers.shift())) { + try { + return nodeResolveImplementation.defaultResolve( + candidateSpecifier, + context, + defaultResolve + ); + } catch (err) { + const isNotFoundError = (err).code === 'ERR_MODULE_NOT_FOUND'; + if (isNotFoundError && candidateSpecifiers.length > 0) { + continue; + } else { + throw err; + } + } + } + + throw new Error( + `Empty mapped paths for ${specifier} imported from ${context.parentURL}` ); } diff --git a/src/path-mapping.ts b/src/path-mapping.ts new file mode 100644 index 000000000..e7e5346dc --- /dev/null +++ b/src/path-mapping.ts @@ -0,0 +1,131 @@ +import type * as ts from 'typescript'; +import { join as joinPath } from 'path'; + +// Path mapper returns a list of mapped specifiers or `null` if the +// given `specifier` was not mapped. +type PathMapper = (specifier: string) => string[] | null; + +export function createPathMapper( + compilerOptions: ts.CompilerOptions +): PathMapper { + if (compilerOptions.paths) { + if (!compilerOptions.baseUrl) { + throw new Error(`Compiler option 'baseUrl' required when 'paths' is set`); + } + + const mappings = Object.entries(compilerOptions.paths).map( + ([patternString, outputs]) => ({ + pattern: parsePattern(patternString), + outputs, + }) + ); + const mappingConfig = { mappings, baseUrl: compilerOptions.baseUrl }; + + return function map(specifier: string): string[] | null { + return mapPath(mappingConfig, specifier); + }; + } else { + return () => null; + } +} + +interface MappingConfig { + mappings: Mapping[]; + baseUrl: string; +} + +interface Mapping { + pattern: Pattern; + outputs: string[]; +} + +type Pattern = + | { + type: 'wildcard'; + prefix: string; + suffix: string; + } + | { type: 'static'; value: string }; + +function mapPath(mappingConfig: MappingConfig, path: string): string[] | null { + let bestMatchWeight = -Infinity; + let bestMatch: [Mapping, string] | null = null; + + for (const mapping of mappingConfig.mappings) { + if (patternWeight(mapping.pattern) > bestMatchWeight) { + const match = matchPattern(mapping.pattern, path); + if (match !== null) { + bestMatch = [mapping, match]; + bestMatchWeight = patternWeight(mapping.pattern); + } + } + } + + if (bestMatch) { + const [mapping, match] = bestMatch; + return mapping.outputs.map((output) => + joinPath(mappingConfig.baseUrl, output.replace('*', match)) + ); + } else { + return null; + } +} + +// Return the submatch when the pattern matches. +// +// For the wildcard pattern string `a*z` and candidate `afooz` this +// returns `foo`. For the static pattern `bar` and the candidate `bar` +// this returns `bar`. +function matchPattern(pattern: Pattern, candidate: string): string | null { + switch (pattern.type) { + case 'wildcard': + if ( + candidate.length >= pattern.prefix.length + pattern.suffix.length && + candidate.startsWith(pattern.prefix) && + candidate.endsWith(pattern.suffix) + ) { + return candidate.substring( + pattern.prefix.length, + candidate.length - pattern.suffix.length + ); + } else { + return null; + } + case 'static': + if (pattern.value === candidate) { + return candidate; + } else { + return null; + } + } +} + +// Pattern weight to sort best matches. +// +// Static patterns have the highest weight. For wildcard patterns the +// weight is determined by the length of the prefix before the glob +// `*`. +function patternWeight(pattern: Pattern): number { + if (pattern.type === 'wildcard') { + return pattern.prefix.length; + } else { + return Infinity; + } +} + +function parsePattern(patternString: string): Pattern { + const indexOfStar = patternString.indexOf('*'); + if (indexOfStar === -1) { + return { type: 'static', value: patternString }; + } + + if (patternString.indexOf('*', indexOfStar + 1) !== -1) { + throw new Error(`Path pattern ${patternString} contains two wildcards '*'`); + } + + return { + type: 'wildcard', + prefix: patternString.substring(0, indexOfStar), + suffix: patternString.substring(indexOfStar + 1), + }; +} diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 40f12ca59..68afaaaa3 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1224,6 +1224,16 @@ test.suite('ts-node', (test) => { if (semver.gte(process.version, '14.13.1')) await runModuleTypeTest('override-to-esm', 'mjs'); }); + + test('path mapping', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBe(null); + }); } if (semver.gte(process.version, '12.0.0')) { diff --git a/tests/esm-path-mapping/index.ts b/tests/esm-path-mapping/index.ts new file mode 100644 index 000000000..29e053bf3 --- /dev/null +++ b/tests/esm-path-mapping/index.ts @@ -0,0 +1,32 @@ +import * as assert from 'assert'; + +// Path is mapped +import map1foo from 'map1/foo.js'; + +// Path is mapped using `.jsx` extension +import map1jsx from 'map1/jsx.js'; + +// Path is mapped using the first candidate `mapped/2-foo` and not `mapped/2a-foo` +import map2foo from 'map2/foo.js'; + +// Path is mapped using the second candidate because the first `mapped/2-bar.ts` +// does not exist +import map2bar from 'map2/bar.js'; + +// Path is mapped using `.js` extension +import map2js from 'map2/js.js'; + +// Path is mapped using the more specific pattern instead of +// `mapped/2-specific/foo +import map2specific from 'map2/specific/foo.js'; + +// Path is mapped when using no wildcard +import mapStatic from 'static'; + +assert.equal(map1foo, 'mapped/1-foo'); +assert.equal(map1jsx, 'mapped/1-jsx'); +assert.equal(map2foo, 'mapped/2-foo'); +assert.equal(map2bar, 'mapped/2a-bar'); +assert.equal(map2js, 'mapped/2a-js'); +assert.equal(map2specific, 'mapped/2-specific-foo'); +assert.equal(mapStatic, 'mapped/static'); diff --git a/tests/esm-path-mapping/mapped/1-foo.ts b/tests/esm-path-mapping/mapped/1-foo.ts new file mode 100644 index 000000000..4e7948707 --- /dev/null +++ b/tests/esm-path-mapping/mapped/1-foo.ts @@ -0,0 +1 @@ +export default 'mapped/1-foo'; diff --git a/tests/esm-path-mapping/mapped/1-jsx.jsx b/tests/esm-path-mapping/mapped/1-jsx.jsx new file mode 100644 index 000000000..94b8b9dc9 --- /dev/null +++ b/tests/esm-path-mapping/mapped/1-jsx.jsx @@ -0,0 +1,6 @@ +export default 'mapped/1-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/mapped/2-foo.ts b/tests/esm-path-mapping/mapped/2-foo.ts new file mode 100644 index 000000000..b45568563 --- /dev/null +++ b/tests/esm-path-mapping/mapped/2-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2-foo'; diff --git a/tests/esm-path-mapping/mapped/2-specific-foo.ts b/tests/esm-path-mapping/mapped/2-specific-foo.ts new file mode 100644 index 000000000..8d0855780 --- /dev/null +++ b/tests/esm-path-mapping/mapped/2-specific-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2-specific-foo'; diff --git a/tests/esm-path-mapping/mapped/2a-bar.ts b/tests/esm-path-mapping/mapped/2a-bar.ts new file mode 100644 index 000000000..8fb8c8334 --- /dev/null +++ b/tests/esm-path-mapping/mapped/2a-bar.ts @@ -0,0 +1 @@ +export default 'mapped/2a-bar'; diff --git a/tests/esm-path-mapping/mapped/2a-foo.ts b/tests/esm-path-mapping/mapped/2a-foo.ts new file mode 100644 index 000000000..271b1a87f --- /dev/null +++ b/tests/esm-path-mapping/mapped/2a-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2a/foo'; diff --git a/tests/esm-path-mapping/mapped/2a-js.js b/tests/esm-path-mapping/mapped/2a-js.js new file mode 100644 index 000000000..19b657c80 --- /dev/null +++ b/tests/esm-path-mapping/mapped/2a-js.js @@ -0,0 +1 @@ +export default 'mapped/2a-js'; diff --git a/tests/esm-path-mapping/mapped/static.ts b/tests/esm-path-mapping/mapped/static.ts new file mode 100644 index 000000000..d1ce0b1c8 --- /dev/null +++ b/tests/esm-path-mapping/mapped/static.ts @@ -0,0 +1 @@ +export default 'mapped/static'; diff --git a/tests/esm-path-mapping/package.json b/tests/esm-path-mapping/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/tsconfig.json new file mode 100644 index 000000000..c6148badd --- /dev/null +++ b/tests/esm-path-mapping/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "ESNext", + "allowJs": true, + "jsx": "react", + "baseUrl": "./mapped", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.js"] + }, + "moduleResolution": "node" + } +} From c542d98b221e9e17ba5c521855051eec967974e6 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Wed, 29 Dec 2021 22:43:22 +0100 Subject: [PATCH 02/74] fixup! Add path mapping support to ESM loader --- src/esm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/esm.ts b/src/esm.ts index 04ec1f1cf..5392c1db2 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -156,7 +156,7 @@ export function createEsmHooks(tsNodeService: Service) { if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { const mappedSpecifiers = mapPath(specifier); if (mappedSpecifiers) { - candidateSpecifiers = mappedSpecifiers; + candidateSpecifiers = mappedSpecifiers.map((path) => pathToFileURL(path).toString()); } } } From 0cbfa6c3c13b6f8caae458a926894a89b43632d4 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Thu, 30 Dec 2021 09:51:28 +0100 Subject: [PATCH 03/74] fixup! fixup! Add path mapping support to ESM loader --- src/esm.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/esm.ts b/src/esm.ts index 5392c1db2..54058e18b 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -156,7 +156,9 @@ export function createEsmHooks(tsNodeService: Service) { if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { const mappedSpecifiers = mapPath(specifier); if (mappedSpecifiers) { - candidateSpecifiers = mappedSpecifiers.map((path) => pathToFileURL(path).toString()); + candidateSpecifiers = mappedSpecifiers.map((path) => + pathToFileURL(path).toString() + ); } } } From e7082b1195911c19205136f74c571310ef2bb64b Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Thu, 30 Dec 2021 09:29:50 +0100 Subject: [PATCH 04/74] fixup! fixup! fixup! Add path mapping support to ESM loader --- src/esm.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/esm.ts b/src/esm.ts index 54058e18b..70832a396 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -152,7 +152,7 @@ export function createEsmHooks(tsNodeService: Service) { let candidateSpecifiers: string[] = [specifier]; if (context.parentURL) { - const parentUrl = parseUrl(context.parentURL); + const parentUrl = new URL(context.parentURL); if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { const mappedSpecifiers = mapPath(specifier); if (mappedSpecifiers) { @@ -166,7 +166,7 @@ export function createEsmHooks(tsNodeService: Service) { let candidateSpecifier: string | undefined; while ((candidateSpecifier = candidateSpecifiers.shift())) { try { - return nodeResolveImplementation.defaultResolve( + return await nodeResolveImplementation.defaultResolve( candidateSpecifier, context, defaultResolve From 2fcb9821593fd9235f45585ed0c95b1943a9c3de Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Mon, 24 Jan 2022 10:49:01 +0100 Subject: [PATCH 05/74] address code review comments Signed-off-by: Thomas Scholtes --- src/esm.ts | 17 ++++++++--------- src/index.ts | 12 ++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/esm.ts b/src/esm.ts index f6e41ed23..8a7a372e4 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -15,7 +15,6 @@ import { import { extname } from 'path'; import * as assert from 'assert'; import { normalizeSlashes } from './util'; -import { createPathMapper } from './path-mapping'; const { createResolve, } = require('../dist-raw/node-esm-resolve-implementation'); @@ -106,7 +105,6 @@ export function registerAndCreateEsmHooks(opts?: RegisterOptions) { export function createEsmHooks(tsNodeService: Service) { tsNodeService.enableExperimentalEsmLoaderInterop(); - const mapPath = createPathMapper(tsNodeService.config.options); // Custom implementation that considers additional file extensions and automatically adds file extensions const nodeResolveImplementation = createResolve({ @@ -166,7 +164,7 @@ export function createEsmHooks(tsNodeService: Service) { if (context.parentURL) { const parentUrl = new URL(context.parentURL); if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { - const mappedSpecifiers = mapPath(specifier); + const mappedSpecifiers = tsNodeService.mapPath(specifier); if (mappedSpecifiers) { candidateSpecifiers = mappedSpecifiers.map((path) => pathToFileURL(path).toString() @@ -175,17 +173,16 @@ export function createEsmHooks(tsNodeService: Service) { } } - let candidateSpecifier: string | undefined; - while ((candidateSpecifier = candidateSpecifiers.shift())) { + for (let i = 0; i < candidateSpecifiers.length; i++) { try { return await nodeResolveImplementation.defaultResolve( - candidateSpecifier, + candidateSpecifiers[i], context, defaultResolve ); } catch (err) { - const isNotFoundError = (err).code === 'ERR_MODULE_NOT_FOUND'; - if (isNotFoundError && candidateSpecifiers.length > 0) { + const isNotFoundError = (err as any).code === 'ERR_MODULE_NOT_FOUND'; + if (isNotFoundError && i < candidateSpecifiers.length - 1) { continue; } else { throw err; @@ -193,8 +190,10 @@ export function createEsmHooks(tsNodeService: Service) { } } + // This code should be unreachable: The for-loop always returns or + // throws. throw new Error( - `Empty mapped paths for ${specifier} imported from ${context.parentURL}` + `Unreachable code mapping ${specifier} in ${context.parentURL}` ); } diff --git a/src/index.ts b/src/index.ts index 613775083..88693ab35 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,6 +25,7 @@ import { } from './module-type-classifier'; import { createResolverFunctions } from './resolver-functions'; import type { createEsmHooks as createEsmHooksFn } from './esm'; +import { createPathMapper } from './path-mapping'; export { TSCommon }; export { @@ -482,6 +483,14 @@ export interface Service { enableExperimentalEsmLoaderInterop(): void; /** @internal */ transpileOnly: boolean; + /** + * @internal + * + * Map import paths to candidates according to the `paths` compiler + * option. Returns `null` if the specifier did not match and was not + * mapped. + */ + mapPath(specifier: string): string[] | null; } /** @@ -1318,6 +1327,8 @@ export function create(rawOptions: CreateOptions = {}): Service { }); } + const mapPath = createPathMapper(config.options); + return { [TS_NODE_SERVICE_BRAND]: true, ts, @@ -1334,6 +1345,7 @@ export function create(rawOptions: CreateOptions = {}): Service { installSourceMapSupport, enableExperimentalEsmLoaderInterop, transpileOnly, + mapPath, }; } From 48f5262e64adaa270b16a309011857a9722bf2fd Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Mon, 24 Jan 2022 11:28:36 +0100 Subject: [PATCH 06/74] map esm paths in all included files Signed-off-by: Thomas Scholtes --- src/esm.ts | 5 ++++- tests/esm-path-mapping/index-js.js | 4 ++++ tests/esm-path-mapping/index-tsx.tsx | 4 ++++ tests/esm-path-mapping/index.ts | 4 ++++ tests/esm-path-mapping/tsconfig.json | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/esm-path-mapping/index-js.js create mode 100644 tests/esm-path-mapping/index-tsx.tsx diff --git a/src/esm.ts b/src/esm.ts index 8a7a372e4..b8dd10ea1 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -11,6 +11,7 @@ import { UrlWithStringQuery, fileURLToPath, pathToFileURL, + URL, } from 'url'; import { extname } from 'path'; import * as assert from 'assert'; @@ -163,7 +164,9 @@ export function createEsmHooks(tsNodeService: Service) { if (context.parentURL) { const parentUrl = new URL(context.parentURL); - if (parentUrl.pathname && extname(parentUrl.pathname) === '.ts') { + const parentPath = + parentUrl.protocol === 'file:' && fileURLToPath(parentUrl); + if (parentPath && !tsNodeService.ignored(parentPath)) { const mappedSpecifiers = tsNodeService.mapPath(specifier); if (mappedSpecifiers) { candidateSpecifiers = mappedSpecifiers.map((path) => diff --git a/tests/esm-path-mapping/index-js.js b/tests/esm-path-mapping/index-js.js new file mode 100644 index 000000000..a8b3da265 --- /dev/null +++ b/tests/esm-path-mapping/index-js.js @@ -0,0 +1,4 @@ +import * as assert from 'assert'; + +import map1foo from 'map1/foo.js'; +assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping/index-tsx.tsx b/tests/esm-path-mapping/index-tsx.tsx new file mode 100644 index 000000000..a8b3da265 --- /dev/null +++ b/tests/esm-path-mapping/index-tsx.tsx @@ -0,0 +1,4 @@ +import * as assert from 'assert'; + +import map1foo from 'map1/foo.js'; +assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping/index.ts b/tests/esm-path-mapping/index.ts index 29e053bf3..cb3831daa 100644 --- a/tests/esm-path-mapping/index.ts +++ b/tests/esm-path-mapping/index.ts @@ -23,6 +23,10 @@ import map2specific from 'map2/specific/foo.js'; // Path is mapped when using no wildcard import mapStatic from 'static'; +// Test path mapping in `.tsx` and `.js` files. +import './index-tsx.tsx'; +import './index-js.js'; + assert.equal(map1foo, 'mapped/1-foo'); assert.equal(map1jsx, 'mapped/1-jsx'); assert.equal(map2foo, 'mapped/2-foo'); diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/tsconfig.json index c6148badd..5e90ede56 100644 --- a/tests/esm-path-mapping/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig.json @@ -1,4 +1,5 @@ { + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "module": "ESNext", "allowJs": true, From a19454b107bf824a4324824251545595ee7d7d9b Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Mon, 24 Jan 2022 12:01:17 +0100 Subject: [PATCH 07/74] improve error message when mapped module is not found Signed-off-by: Thomas Scholtes --- src/esm.ts | 28 +++++++++++++++++++--- src/test/index.spec.ts | 16 +++++++++++++ tests/esm-path-mapping/mapped-not-found.ts | 1 + 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 tests/esm-path-mapping/mapped-not-found.ts diff --git a/src/esm.ts b/src/esm.ts index b8dd10ea1..4a48e10e5 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -185,10 +185,16 @@ export function createEsmHooks(tsNodeService: Service) { ); } catch (err) { const isNotFoundError = (err as any).code === 'ERR_MODULE_NOT_FOUND'; - if (isNotFoundError && i < candidateSpecifiers.length - 1) { - continue; - } else { + if (!isNotFoundError) { throw err; + } else if (i == candidateSpecifiers.length - 1) { + throw new MappedModuleNotFound( + specifier, + context.parentURL, + candidateSpecifiers + ); + } else { + continue; } } } @@ -334,3 +340,19 @@ export function createEsmHooks(tsNodeService: Service) { return { source: emittedJs }; } } + +class MappedModuleNotFound extends Error { + // Same code as other module not found errors. + static code = 'ERR_MODULE_NOT_FOUND'; + + constructor(specifier: string, base: string, candidates: string[]) { + super( + [ + `Cannot find '${specifier}' imported from ${base} using TypeScript path mapping`, + 'Candidates attempted:', + ...candidates.map((candidate) => `- ${candidate}`), + ].join('\n') + ); + this.name = `Error [${MappedModuleNotFound.code}]`; + } +} diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 68afaaaa3..6e617c70a 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1234,6 +1234,22 @@ test.suite('ts-node', (test) => { ); expect(err).toBe(null); }); + + test('path mapping error candidates', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + "[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'" + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + }); } if (semver.gte(process.version, '12.0.0')) { diff --git a/tests/esm-path-mapping/mapped-not-found.ts b/tests/esm-path-mapping/mapped-not-found.ts new file mode 100644 index 000000000..adbcc018c --- /dev/null +++ b/tests/esm-path-mapping/mapped-not-found.ts @@ -0,0 +1 @@ +import 'map2/does-not-exist.ts'; From 32e26e8dae5655407705e705bedd95de0df85386 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 00:07:15 -0500 Subject: [PATCH 08/74] Review changes; add CommonJS path mapping --- src/cjs-resolve-filename-hook.ts | 112 ++++++++++++++++++ src/esm.ts | 55 +++++---- src/index.ts | 3 + src/test/index.spec.ts | 75 ++++++++---- tests/cjs-path-mapping/index-js.js | 4 + tests/cjs-path-mapping/index-tsx.tsx | 4 + tests/cjs-path-mapping/index.ts | 36 ++++++ tests/cjs-path-mapping/mapped-not-found.ts | 1 + tests/cjs-path-mapping/mapped/1-foo.ts | 1 + tests/cjs-path-mapping/mapped/1-jsx.jsx | 6 + tests/cjs-path-mapping/mapped/2-foo.ts | 1 + .../cjs-path-mapping/mapped/2-specific-foo.ts | 1 + tests/cjs-path-mapping/mapped/2a-bar.ts | 1 + tests/cjs-path-mapping/mapped/2a-foo.ts | 1 + tests/cjs-path-mapping/mapped/2a-js.js | 1 + tests/cjs-path-mapping/mapped/static.ts | 1 + tests/cjs-path-mapping/package.json | 1 + tests/cjs-path-mapping/tsconfig.json | 16 +++ 18 files changed, 278 insertions(+), 42 deletions(-) create mode 100644 src/cjs-resolve-filename-hook.ts create mode 100644 tests/cjs-path-mapping/index-js.js create mode 100644 tests/cjs-path-mapping/index-tsx.tsx create mode 100644 tests/cjs-path-mapping/index.ts create mode 100644 tests/cjs-path-mapping/mapped-not-found.ts create mode 100644 tests/cjs-path-mapping/mapped/1-foo.ts create mode 100644 tests/cjs-path-mapping/mapped/1-jsx.jsx create mode 100644 tests/cjs-path-mapping/mapped/2-foo.ts create mode 100644 tests/cjs-path-mapping/mapped/2-specific-foo.ts create mode 100644 tests/cjs-path-mapping/mapped/2a-bar.ts create mode 100644 tests/cjs-path-mapping/mapped/2a-foo.ts create mode 100644 tests/cjs-path-mapping/mapped/2a-js.js create mode 100644 tests/cjs-path-mapping/mapped/static.ts create mode 100644 tests/cjs-path-mapping/package.json create mode 100644 tests/cjs-path-mapping/tsconfig.json diff --git a/src/cjs-resolve-filename-hook.ts b/src/cjs-resolve-filename-hook.ts new file mode 100644 index 000000000..1d589efae --- /dev/null +++ b/src/cjs-resolve-filename-hook.ts @@ -0,0 +1,112 @@ +import type Module = require('module'); +import type { Service } from '.'; + +type ModuleConstructorWithInternals = typeof Module & { + _resolveFilename( + request: string, + parent?: Module, + isMain?: boolean, + options?: ModuleResolveFilenameOptions + ): string; +}; + +interface ModuleResolveFilenameOptions { + paths?: Array; +} + +/** + * @internal + */ +export function installCommonjsResolveHook(tsNodeService: Service) { + const Module = require('module') as ModuleConstructorWithInternals; + const originalResolveFilename = Module._resolveFilename; + Module._resolveFilename = function ( + request: string, + parent?: Module, + isMain?: boolean, + options?: ModuleResolveFilenameOptions + ): string { + // Note: [SYNC-PATH-MAPPING] keep this logic synced with the corresponding ESM implementation. + let candidateSpecifiers: string[] = [request]; + const attemptPathMapping = + parent && !tsNodeService.ignored(parent.filename); + if (attemptPathMapping) { + const mappedSpecifiers = tsNodeService.mapPath(request); + if (mappedSpecifiers) { + candidateSpecifiers = mappedSpecifiers; + } + } + // Attempt all resolutions. Collect resolution failures and throw an + // aggregated error if they all fail. + const moduleNotFoundErrors = []; + for (let i = 0; i < candidateSpecifiers.length; i++) { + try { + // TODO does this break if `options.paths` is passed? Should we bail if + // we receive `options.paths`? + return originalResolveFilename.call( + this, + candidateSpecifiers[i], + parent, + isMain, + options + ); + } catch (err: any) { + const isNotFoundError = err.code === 'MODULE_NOT_FOUND'; + if (!isNotFoundError) { + throw err; + } + moduleNotFoundErrors.push(err); + } + } + // If only one candidate, no need to wrap it. + if (candidateSpecifiers.length === 1) { + throw moduleNotFoundErrors[0]; + } else { + throw new MappedCommonJSModuleNotFoundError( + request, + parent!.filename, + candidateSpecifiers, + moduleNotFoundErrors + ); + } + }; +} + +interface NodeCommonJSModuleNotFoundError extends Error { + requireStack?: string[]; +} + +class MappedCommonJSModuleNotFoundError extends Error { + // Same code as other module not found errors. + readonly code = 'MODULE_NOT_FOUND' as const; + readonly errors!: ReadonlyArray; + readonly requireStack?: string[]; + + constructor( + specifier: string, + parentFilename: string, + candidates: string[], + moduleNotFoundErrors: Error[] + ) { + super( + [ + `Cannot find '${specifier}' imported from ${parentFilename} using TypeScript path mapping`, + 'Candidates attempted:', + ...candidates.map((candidate) => `- ${candidate}`), + ].join('\n') + ); + // TODO this differs slightly from nodejs errors; see if we can match them + this.name = `Error [${this.code}]`; + // Match shape of `AggregateError` + Object.defineProperty(this, 'errors', { + value: moduleNotFoundErrors, + configurable: true, + writable: true, + }); + // Assume every `requireStack` is identical, and maybe downstream code is doing + // something with it + this.requireStack = ( + moduleNotFoundErrors[0] as NodeCommonJSModuleNotFoundError | undefined + )?.requireStack; + } +} diff --git a/src/esm.ts b/src/esm.ts index 4a48e10e5..75a807e80 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -160,6 +160,7 @@ export function createEsmHooks(tsNodeService: Service) { return defer(); } + // Note: [SYNC-PATH-MAPPING] keep this logic synced with the corresponding CJS implementation. let candidateSpecifiers: string[] = [specifier]; if (context.parentURL) { @@ -176,6 +177,9 @@ export function createEsmHooks(tsNodeService: Service) { } } + // Attempt all resolutions. Collect resolution failures and throw an + // aggregated error if they all fail. + const moduleNotFoundErrors = []; for (let i = 0; i < candidateSpecifiers.length; i++) { try { return await nodeResolveImplementation.defaultResolve( @@ -183,27 +187,25 @@ export function createEsmHooks(tsNodeService: Service) { context, defaultResolve ); - } catch (err) { - const isNotFoundError = (err as any).code === 'ERR_MODULE_NOT_FOUND'; + } catch (err: any) { + const isNotFoundError = err.code === 'ERR_MODULE_NOT_FOUND'; if (!isNotFoundError) { throw err; - } else if (i == candidateSpecifiers.length - 1) { - throw new MappedModuleNotFound( - specifier, - context.parentURL, - candidateSpecifiers - ); - } else { - continue; } + moduleNotFoundErrors.push(err); } } - - // This code should be unreachable: The for-loop always returns or - // throws. - throw new Error( - `Unreachable code mapping ${specifier} in ${context.parentURL}` - ); + // If only one candidate, no need to wrap it. + if (candidateSpecifiers.length === 1) { + throw moduleNotFoundErrors[0]; + } else { + throw new MappedModuleNotFoundError( + specifier, + context.parentURL, + candidateSpecifiers, + moduleNotFoundErrors + ); + } } // `load` from new loader hook API (See description at the top of this file) @@ -341,11 +343,17 @@ export function createEsmHooks(tsNodeService: Service) { } } -class MappedModuleNotFound extends Error { +class MappedModuleNotFoundError extends Error { // Same code as other module not found errors. - static code = 'ERR_MODULE_NOT_FOUND'; + readonly code = 'ERR_MODULE_NOT_FOUND' as const; + readonly errors!: ReadonlyArray; - constructor(specifier: string, base: string, candidates: string[]) { + constructor( + specifier: string, + base: string, + candidates: string[], + moduleNotFoundErrors: Error[] + ) { super( [ `Cannot find '${specifier}' imported from ${base} using TypeScript path mapping`, @@ -353,6 +361,13 @@ class MappedModuleNotFound extends Error { ...candidates.map((candidate) => `- ${candidate}`), ].join('\n') ); - this.name = `Error [${MappedModuleNotFound.code}]`; + // TODO this differs slightly from nodejs errors; see if we can match them + this.name = `Error [${this.code}]`; + // Match shape of `AggregateError` + Object.defineProperty(this, 'errors', { + value: moduleNotFoundErrors, + configurable: true, + writable: true, + }); } } diff --git a/src/index.ts b/src/index.ts index 88693ab35..68f32bdac 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,6 +26,7 @@ import { import { createResolverFunctions } from './resolver-functions'; import type { createEsmHooks as createEsmHooksFn } from './esm'; import { createPathMapper } from './path-mapping'; +import { installCommonjsResolveHook } from './cjs-resolve-filename-hook'; export { TSCommon }; export { @@ -555,6 +556,8 @@ export function register( originalJsHandler ); + installCommonjsResolveHook(service); + // Require specified modules before start-up. (Module as any)._preloadModules(service.options.require); diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 6e617c70a..fc51b4b86 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1225,30 +1225,61 @@ test.suite('ts-node', (test) => { await runModuleTypeTest('override-to-esm', 'mjs'); }); - test('path mapping', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - } - ); - expect(err).toBe(null); + test.suite('ESM path mapping', (test) => { + test('path mapping', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBe(null); + }); + + test('path mapping error candidates', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + }); }); + // TODO ensure these tests run even when `--loader` is not supported + // Do so by moving these test cases elsewhere + test.suite('CJS path mapping', (test) => { + test('path mapping', async () => { + const { err } = await exec( + `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} index.ts`, + { + cwd: join(TEST_DIR, './cjs-path-mapping'), + } + ); + expect(err).toBe(null); + }); - test('path mapping error candidates', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - "[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'" - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + test('path mapping error candidates', async () => { + const { stderr, err } = await exec( + `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} mapped-not-found.ts`, + { + cwd: join(TEST_DIR, './cjs-path-mapping'), + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- \/.*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- \/.*mapped\/2a-does-not-exist.ts/); + }); }); } diff --git a/tests/cjs-path-mapping/index-js.js b/tests/cjs-path-mapping/index-js.js new file mode 100644 index 000000000..18905ca3b --- /dev/null +++ b/tests/cjs-path-mapping/index-js.js @@ -0,0 +1,4 @@ +import * as assert from 'assert'; + +import map1foo from 'map1/foo'; +assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/cjs-path-mapping/index-tsx.tsx b/tests/cjs-path-mapping/index-tsx.tsx new file mode 100644 index 000000000..18905ca3b --- /dev/null +++ b/tests/cjs-path-mapping/index-tsx.tsx @@ -0,0 +1,4 @@ +import * as assert from 'assert'; + +import map1foo from 'map1/foo'; +assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/cjs-path-mapping/index.ts b/tests/cjs-path-mapping/index.ts new file mode 100644 index 000000000..b1b07da8a --- /dev/null +++ b/tests/cjs-path-mapping/index.ts @@ -0,0 +1,36 @@ +import * as assert from 'assert'; + +// Path is mapped +import map1foo from 'map1/foo'; + +// Path is mapped using `.jsx` extension +import map1jsx from 'map1/jsx'; + +// Path is mapped using the first candidate `mapped/2-foo` and not `mapped/2a-foo` +import map2foo from 'map2/foo'; + +// Path is mapped using the second candidate because the first `mapped/2-bar.ts` +// does not exist +import map2bar from 'map2/bar'; + +// Path is mapped using `.js` extension +import map2js from 'map2/js'; + +// Path is mapped using the more specific pattern instead of +// `mapped/2-specific/foo +import map2specific from 'map2/specific/foo'; + +// Path is mapped when using no wildcard +import mapStatic from 'static'; + +// Test path mapping in `.tsx` and `.js` files. +import './index-tsx.tsx'; +import './index-js.js'; + +assert.equal(map1foo, 'mapped/1-foo'); +assert.equal(map1jsx, 'mapped/1-jsx'); +assert.equal(map2foo, 'mapped/2-foo'); +assert.equal(map2bar, 'mapped/2a-bar'); +assert.equal(map2js, 'mapped/2a-js'); +assert.equal(map2specific, 'mapped/2-specific-foo'); +assert.equal(mapStatic, 'mapped/static'); diff --git a/tests/cjs-path-mapping/mapped-not-found.ts b/tests/cjs-path-mapping/mapped-not-found.ts new file mode 100644 index 000000000..adbcc018c --- /dev/null +++ b/tests/cjs-path-mapping/mapped-not-found.ts @@ -0,0 +1 @@ +import 'map2/does-not-exist.ts'; diff --git a/tests/cjs-path-mapping/mapped/1-foo.ts b/tests/cjs-path-mapping/mapped/1-foo.ts new file mode 100644 index 000000000..4e7948707 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/1-foo.ts @@ -0,0 +1 @@ +export default 'mapped/1-foo'; diff --git a/tests/cjs-path-mapping/mapped/1-jsx.jsx b/tests/cjs-path-mapping/mapped/1-jsx.jsx new file mode 100644 index 000000000..94b8b9dc9 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/1-jsx.jsx @@ -0,0 +1,6 @@ +export default 'mapped/1-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/cjs-path-mapping/mapped/2-foo.ts b/tests/cjs-path-mapping/mapped/2-foo.ts new file mode 100644 index 000000000..b45568563 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/2-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2-foo'; diff --git a/tests/cjs-path-mapping/mapped/2-specific-foo.ts b/tests/cjs-path-mapping/mapped/2-specific-foo.ts new file mode 100644 index 000000000..8d0855780 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/2-specific-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2-specific-foo'; diff --git a/tests/cjs-path-mapping/mapped/2a-bar.ts b/tests/cjs-path-mapping/mapped/2a-bar.ts new file mode 100644 index 000000000..8fb8c8334 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/2a-bar.ts @@ -0,0 +1 @@ +export default 'mapped/2a-bar'; diff --git a/tests/cjs-path-mapping/mapped/2a-foo.ts b/tests/cjs-path-mapping/mapped/2a-foo.ts new file mode 100644 index 000000000..271b1a87f --- /dev/null +++ b/tests/cjs-path-mapping/mapped/2a-foo.ts @@ -0,0 +1 @@ +export default 'mapped/2a/foo'; diff --git a/tests/cjs-path-mapping/mapped/2a-js.js b/tests/cjs-path-mapping/mapped/2a-js.js new file mode 100644 index 000000000..19b657c80 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/2a-js.js @@ -0,0 +1 @@ +export default 'mapped/2a-js'; diff --git a/tests/cjs-path-mapping/mapped/static.ts b/tests/cjs-path-mapping/mapped/static.ts new file mode 100644 index 000000000..d1ce0b1c8 --- /dev/null +++ b/tests/cjs-path-mapping/mapped/static.ts @@ -0,0 +1 @@ +export default 'mapped/static'; diff --git a/tests/cjs-path-mapping/package.json b/tests/cjs-path-mapping/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/cjs-path-mapping/tsconfig.json b/tests/cjs-path-mapping/tsconfig.json new file mode 100644 index 000000000..ea91ba900 --- /dev/null +++ b/tests/cjs-path-mapping/tsconfig.json @@ -0,0 +1,16 @@ +{ + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "module": "CommonJS", + "allowJs": true, + "jsx": "react", + "baseUrl": "./mapped", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.ts"] + }, + "moduleResolution": "node" + } +} From 362935bf5da7cc874467c32093bcb5d511385dc4 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 00:22:10 -0500 Subject: [PATCH 09/74] fix failing tests --- src/cjs-resolve-filename-hook.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cjs-resolve-filename-hook.ts b/src/cjs-resolve-filename-hook.ts index 1d589efae..f9b44de8d 100644 --- a/src/cjs-resolve-filename-hook.ts +++ b/src/cjs-resolve-filename-hook.ts @@ -29,7 +29,7 @@ export function installCommonjsResolveHook(tsNodeService: Service) { // Note: [SYNC-PATH-MAPPING] keep this logic synced with the corresponding ESM implementation. let candidateSpecifiers: string[] = [request]; const attemptPathMapping = - parent && !tsNodeService.ignored(parent.filename); + parent?.filename && !tsNodeService.ignored(parent.filename); if (attemptPathMapping) { const mappedSpecifiers = tsNodeService.mapPath(request); if (mappedSpecifiers) { From e573fd773c114ea4aba1f7b1b13f8e872dbf9da5 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 00:39:11 -0500 Subject: [PATCH 10/74] add path mapping to docs --- website/docs/overview.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/overview.md b/website/docs/overview.md index 4afde82d2..738f8e017 100644 --- a/website/docs/overview.md +++ b/website/docs/overview.md @@ -19,6 +19,7 @@ tools and libraries. * Write standalone scripts * Native ESM loader * Use third-party transpilers +* Automatic [TypeScript path mapping](https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping) * Use custom transformers * Integrate with test runners, debuggers, and CLI tools * Compatible with pre-compilation for production From 0012b22c9a44814f4d35f6592b23f2ae802548c7 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 11:22:45 -0500 Subject: [PATCH 11/74] add flag to enable/disable path mapping in the two loaders --- src/cjs-resolve-filename-hook.ts | 4 +++- src/configuration.ts | 2 ++ src/esm.ts | 2 +- src/index.ts | 32 ++++++++++++++++++++++++++++ tests/cjs-path-mapping/tsconfig.json | 3 +++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/cjs-resolve-filename-hook.ts b/src/cjs-resolve-filename-hook.ts index f9b44de8d..d85b3eca9 100644 --- a/src/cjs-resolve-filename-hook.ts +++ b/src/cjs-resolve-filename-hook.ts @@ -29,7 +29,9 @@ export function installCommonjsResolveHook(tsNodeService: Service) { // Note: [SYNC-PATH-MAPPING] keep this logic synced with the corresponding ESM implementation. let candidateSpecifiers: string[] = [request]; const attemptPathMapping = - parent?.filename && !tsNodeService.ignored(parent.filename); + tsNodeService.commonjsPathMapping && + parent?.filename && + !tsNodeService.ignored(parent.filename); if (attemptPathMapping) { const mappedSpecifiers = tsNodeService.mapPath(request); if (mappedSpecifiers) { diff --git a/src/configuration.ts b/src/configuration.ts index 4ac594155..c95d27d26 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -277,6 +277,7 @@ function filterRecognizedTsConfigTsNodeOptions(jsonObject: any): { moduleTypes, experimentalReplAwait, swc, + experimentalPathMapping, ...unrecognized } = jsonObject as TsConfigOptions; const filteredTsConfigOptions = { @@ -300,6 +301,7 @@ function filterRecognizedTsConfigTsNodeOptions(jsonObject: any): { scopeDir, moduleTypes, swc, + experimentalPathMapping, }; // Use the typechecker to make sure this implementation has the correct set of properties const catchExtraneousProps: keyof TsConfigOptions = diff --git a/src/esm.ts b/src/esm.ts index 75a807e80..97ab7a527 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -163,7 +163,7 @@ export function createEsmHooks(tsNodeService: Service) { // Note: [SYNC-PATH-MAPPING] keep this logic synced with the corresponding CJS implementation. let candidateSpecifiers: string[] = [specifier]; - if (context.parentURL) { + if (tsNodeService.esmPathMapping && context.parentURL) { const parentUrl = new URL(context.parentURL); const parentPath = parentUrl.protocol === 'file:' && fileURLToPath(parentUrl); diff --git a/src/index.ts b/src/index.ts index 68f32bdac..2c6d0c395 100644 --- a/src/index.ts +++ b/src/index.ts @@ -362,6 +362,17 @@ export interface CreateOptions { * @default console.log */ tsTrace?: (str: string) => void; + /** + * Enable TypeScript path mapping in the ESM loader, CommonJS loader, or both. + * Today, the default is 'esm' to map paths in the experimental ESM loader but not + * CommonJS. In the next major release, the default will become 'both'. + * + * Note: If you use tsconfig-paths, be sure to disable it before enabling ts-node's CommonJS path mapper. + * tsconfig-paths already maps paths in CommonJS but not ESM, and it may conflict with ts-node's mapper. + * + * See: https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping + */ + experimentalPathMapping?: 'both' | 'esm' | 'cjs' | 'none'; } /** @internal */ @@ -492,6 +503,10 @@ export interface Service { * mapped. */ mapPath(specifier: string): string[] | null; + /** @internal */ + commonjsPathMapping: boolean; + /** @internal */ + esmPathMapping: boolean; } /** @@ -736,6 +751,21 @@ export function create(rawOptions: CreateOptions = {}): Service { }); } + if ( + ![undefined, null, 'both', 'esm', 'cjs', 'none'].includes( + options.experimentalPathMapping + ) + ) { + throw new Error( + `experimentalPathMapping must be one of: "both", "esm", "cjs", "none"` + ); + } + const experimentalPathMapping = options.experimentalPathMapping ?? 'esm'; + const commonjsPathMapping = + experimentalPathMapping === 'both' || experimentalPathMapping === 'cjs'; + const esmPathMapping = + experimentalPathMapping === 'both' || experimentalPathMapping === 'esm'; + /** * True if require() hooks should interop with experimental ESM loader. * Enabled explicitly via a flag since it is a breaking change. @@ -1349,6 +1379,8 @@ export function create(rawOptions: CreateOptions = {}): Service { enableExperimentalEsmLoaderInterop, transpileOnly, mapPath, + commonjsPathMapping, + esmPathMapping, }; } diff --git a/tests/cjs-path-mapping/tsconfig.json b/tests/cjs-path-mapping/tsconfig.json index ea91ba900..04e1a95b0 100644 --- a/tests/cjs-path-mapping/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig.json @@ -12,5 +12,8 @@ "static": ["./static.ts"] }, "moduleResolution": "node" + }, + "ts-node": { + "experimentalPathMapping": "both" } } From b6352e33e78f241c2f9349efb7a318a97c6e3948 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 11:34:15 -0500 Subject: [PATCH 12/74] fix windows tests? --- src/path-mapping.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/path-mapping.ts b/src/path-mapping.ts index e7e5346dc..3fbf655ca 100644 --- a/src/path-mapping.ts +++ b/src/path-mapping.ts @@ -1,5 +1,6 @@ import type * as ts from 'typescript'; import { join as joinPath } from 'path'; +import { normalizeSlashes } from './util'; // Path mapper returns a list of mapped specifiers or `null` if the // given `specifier` was not mapped. @@ -64,7 +65,9 @@ function mapPath(mappingConfig: MappingConfig, path: string): string[] | null { if (bestMatch) { const [mapping, match] = bestMatch; return mapping.outputs.map((output) => - joinPath(mappingConfig.baseUrl, output.replace('*', match)) + normalizeSlashes( + joinPath(mappingConfig.baseUrl, output.replace('*', match)) + ) ); } else { return null; From 85643fdb7935d5c9538bdaf3e0126a904ab113ac Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 25 Jan 2022 11:56:40 -0500 Subject: [PATCH 13/74] fix windows tests? --- src/test/index.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index fc51b4b86..4c78e8b88 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1277,8 +1277,8 @@ test.suite('ts-node', (test) => { `[MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` ); // Expect tried candidates to be listed - expect(stderr).toMatch(/- \/.*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- \/.*mapped\/2a-does-not-exist.ts/); + expect(stderr).toMatch(/- .*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- .*mapped\/2a-does-not-exist.ts/); }); }); } From bede1b607549a7bb2ff959e18fb2b5eb5186a50a Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Mon, 31 Jan 2022 00:24:36 -0500 Subject: [PATCH 14/74] add path mapping option to docs --- website/docs/options.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/options.md b/website/docs/options.md index 848b0a75f..473024bba 100644 --- a/website/docs/options.md +++ b/website/docs/options.md @@ -58,6 +58,7 @@ _Environment variables, where available, are in `ALL_CAPS`_ - `TS_NODE_HISTORY` Path to history file for REPL
*Default:* `~/.ts_node_repl_history`
- `--noExperimentalReplAwait` Disable top-level await in REPL. Equivalent to node's [`--no-experimental-repl-await`](https://nodejs.org/api/cli.html#cli_no_experimental_repl_await)
*Default:* Enabled if TypeScript version is 3.8 or higher and target is ES2018 or higher.
*Environment:* `TS_NODE_EXPERIMENTAL_REPL_AWAIT` set `false` to disable - `experimentalResolverFeatures` Enable experimental features that re-map imports and require calls to support: `baseUrl`, `paths`, `rootDirs`, `.js` to `.ts` file extension mappings, `outDir` to `rootDir` mappings for composite projects and monorepos. For details, see [#1514](https://github.com/TypeStrong/ts-node/issues/1514)
*Default:* `false`
*Can only be specified via `tsconfig.json` or API.* +- `experimentalPathMapping` Enable TypeScript path mapping in the ESM loader, CommonJS loader, or both. Today, the default is `'esm'` to map paths in the experimental ESM loader but not CommonJS. In the next major release, the default will become `'both'`.
*Default:* `'esm'`
*Can only be specified via `tsconfig.json` or API.* ## API From 80746c25c5af2673c1191971d91c237aa28fa9d9 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Mon, 31 Jan 2022 00:32:30 -0500 Subject: [PATCH 15/74] changes --- src/path-mapping.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/path-mapping.ts b/src/path-mapping.ts index 3fbf655ca..a8e30f847 100644 --- a/src/path-mapping.ts +++ b/src/path-mapping.ts @@ -14,12 +14,15 @@ export function createPathMapper( throw new Error(`Compiler option 'baseUrl' required when 'paths' is set`); } - const mappings = Object.entries(compilerOptions.paths).map( - ([patternString, outputs]) => ({ - pattern: parsePattern(patternString), - outputs, - }) - ); + // TODO this should run when baseUrl is set even if paths is not set. + // TODO should only attempt baseUrl / path mapping for non-relative, non-absolute specifiers. + const mappings = Object.entries({ + '*': ['*'], + ...(compilerOptions.paths ?? {}), + }).map(([patternString, outputs]) => ({ + pattern: parsePattern(patternString), + outputs, + })); const mappingConfig = { mappings, baseUrl: compilerOptions.baseUrl }; return function map(specifier: string): string[] | null { From 885b7b1df7b5e0c480c4e9fbaf80df340b9bd7dc Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:33:58 +0700 Subject: [PATCH 16/74] replace equal (deprecated) with strictEqual --- tests/esm-path-mapping/index-js.js | 2 +- tests/esm-path-mapping/index-tsx.tsx | 2 +- tests/esm-path-mapping/index.ts | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/esm-path-mapping/index-js.js b/tests/esm-path-mapping/index-js.js index a8b3da265..1bcc820a2 100644 --- a/tests/esm-path-mapping/index-js.js +++ b/tests/esm-path-mapping/index-js.js @@ -1,4 +1,4 @@ import * as assert from 'assert'; import map1foo from 'map1/foo.js'; -assert.equal(map1foo, 'mapped/1-foo'); +assert.strictEqual(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping/index-tsx.tsx b/tests/esm-path-mapping/index-tsx.tsx index a8b3da265..1bcc820a2 100644 --- a/tests/esm-path-mapping/index-tsx.tsx +++ b/tests/esm-path-mapping/index-tsx.tsx @@ -1,4 +1,4 @@ import * as assert from 'assert'; import map1foo from 'map1/foo.js'; -assert.equal(map1foo, 'mapped/1-foo'); +assert.strictEqual(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping/index.ts b/tests/esm-path-mapping/index.ts index cb3831daa..d22e0fe06 100644 --- a/tests/esm-path-mapping/index.ts +++ b/tests/esm-path-mapping/index.ts @@ -27,10 +27,10 @@ import mapStatic from 'static'; import './index-tsx.tsx'; import './index-js.js'; -assert.equal(map1foo, 'mapped/1-foo'); -assert.equal(map1jsx, 'mapped/1-jsx'); -assert.equal(map2foo, 'mapped/2-foo'); -assert.equal(map2bar, 'mapped/2a-bar'); -assert.equal(map2js, 'mapped/2a-js'); -assert.equal(map2specific, 'mapped/2-specific-foo'); -assert.equal(mapStatic, 'mapped/static'); +assert.strictEqual(map1foo, 'mapped/1-foo'); +assert.strictEqual(map1jsx, 'mapped/1-jsx'); +assert.strictEqual(map2foo, 'mapped/2-foo'); +assert.strictEqual(map2bar, 'mapped/2a-bar'); +assert.strictEqual(map2js, 'mapped/2a-js'); +assert.strictEqual(map2specific, 'mapped/2-specific-foo'); +assert.strictEqual(mapStatic, 'mapped/static'); From c3dbe73174f7f82a5ad5fac5b0be409450863cf5 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:35:29 +0700 Subject: [PATCH 17/74] extract shared tsconfig --- tests/esm-path-mapping/tsconfig-base.json | 9 +++++++++ tests/esm-path-mapping/tsconfig.json | 8 ++------ 2 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 tests/esm-path-mapping/tsconfig-base.json diff --git a/tests/esm-path-mapping/tsconfig-base.json b/tests/esm-path-mapping/tsconfig-base.json new file mode 100644 index 000000000..2b17811af --- /dev/null +++ b/tests/esm-path-mapping/tsconfig-base.json @@ -0,0 +1,9 @@ +{ + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "module": "ESNext", + "allowJs": true, + "jsx": "react", + "moduleResolution": "node" + } +} diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/tsconfig.json index 5e90ede56..f18a14289 100644 --- a/tests/esm-path-mapping/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig.json @@ -1,16 +1,12 @@ { - "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "extends": "./tsconfig-base.json", "compilerOptions": { - "module": "ESNext", - "allowJs": true, - "jsx": "react", "baseUrl": "./mapped", "paths": { "map1/*": ["./1-*"], "map2/*": ["./2-*", "./2a-*"], "map2/specific/*": ["./2-specific-*"], "static": ["./static.js"] - }, - "moduleResolution": "node" + } } } From 8c5fd23f85d7feb6aa30f1ca070cc2debf2c50fe Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:36:28 +0700 Subject: [PATCH 18/74] move import targets 2-deep (to support combined baseUrl + * path) --- tests/esm-path-mapping/{mapped => level-1/level-2}/1-foo.ts | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/1-jsx.jsx | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/2-foo.ts | 0 .../{mapped => level-1/level-2}/2-specific-foo.ts | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/2a-bar.ts | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/2a-foo.ts | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/2a-js.js | 0 tests/esm-path-mapping/{mapped => level-1/level-2}/static.ts | 0 tests/esm-path-mapping/tsconfig.json | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) rename tests/esm-path-mapping/{mapped => level-1/level-2}/1-foo.ts (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/1-jsx.jsx (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/2-foo.ts (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/2-specific-foo.ts (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/2a-bar.ts (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/2a-foo.ts (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/2a-js.js (100%) rename tests/esm-path-mapping/{mapped => level-1/level-2}/static.ts (100%) diff --git a/tests/esm-path-mapping/mapped/1-foo.ts b/tests/esm-path-mapping/level-1/level-2/1-foo.ts similarity index 100% rename from tests/esm-path-mapping/mapped/1-foo.ts rename to tests/esm-path-mapping/level-1/level-2/1-foo.ts diff --git a/tests/esm-path-mapping/mapped/1-jsx.jsx b/tests/esm-path-mapping/level-1/level-2/1-jsx.jsx similarity index 100% rename from tests/esm-path-mapping/mapped/1-jsx.jsx rename to tests/esm-path-mapping/level-1/level-2/1-jsx.jsx diff --git a/tests/esm-path-mapping/mapped/2-foo.ts b/tests/esm-path-mapping/level-1/level-2/2-foo.ts similarity index 100% rename from tests/esm-path-mapping/mapped/2-foo.ts rename to tests/esm-path-mapping/level-1/level-2/2-foo.ts diff --git a/tests/esm-path-mapping/mapped/2-specific-foo.ts b/tests/esm-path-mapping/level-1/level-2/2-specific-foo.ts similarity index 100% rename from tests/esm-path-mapping/mapped/2-specific-foo.ts rename to tests/esm-path-mapping/level-1/level-2/2-specific-foo.ts diff --git a/tests/esm-path-mapping/mapped/2a-bar.ts b/tests/esm-path-mapping/level-1/level-2/2a-bar.ts similarity index 100% rename from tests/esm-path-mapping/mapped/2a-bar.ts rename to tests/esm-path-mapping/level-1/level-2/2a-bar.ts diff --git a/tests/esm-path-mapping/mapped/2a-foo.ts b/tests/esm-path-mapping/level-1/level-2/2a-foo.ts similarity index 100% rename from tests/esm-path-mapping/mapped/2a-foo.ts rename to tests/esm-path-mapping/level-1/level-2/2a-foo.ts diff --git a/tests/esm-path-mapping/mapped/2a-js.js b/tests/esm-path-mapping/level-1/level-2/2a-js.js similarity index 100% rename from tests/esm-path-mapping/mapped/2a-js.js rename to tests/esm-path-mapping/level-1/level-2/2a-js.js diff --git a/tests/esm-path-mapping/mapped/static.ts b/tests/esm-path-mapping/level-1/level-2/static.ts similarity index 100% rename from tests/esm-path-mapping/mapped/static.ts rename to tests/esm-path-mapping/level-1/level-2/static.ts diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/tsconfig.json index f18a14289..866570525 100644 --- a/tests/esm-path-mapping/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig-base.json", "compilerOptions": { - "baseUrl": "./mapped", + "baseUrl": "./level-1/level-2", "paths": { "map1/*": ["./1-*"], "map2/*": ["./2-*", "./2a-*"], From e66d236fbddc02180bc0859ce010a70e2030ff9a Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:38:22 +0700 Subject: [PATCH 19/74] test: baseUrl + no paths --- src/test/index.spec.ts | 10 ++++++++++ tests/esm-path-mapping/baseurl-no-paths.ts | 10 ++++++++++ tests/esm-path-mapping/tsconfig-baseurl-no-paths.json | 6 ++++++ 3 files changed, 26 insertions(+) create mode 100644 tests/esm-path-mapping/baseurl-no-paths.ts create mode 100644 tests/esm-path-mapping/tsconfig-baseurl-no-paths.json diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 4c78e8b88..de876e849 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1251,6 +1251,16 @@ test.suite('ts-node', (test) => { expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); }); + + test('baseUrl set and no paths', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-no-paths.json" baseurl-no-paths.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBe(null); + }); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/baseurl-no-paths.ts b/tests/esm-path-mapping/baseurl-no-paths.ts new file mode 100644 index 000000000..f289b72fd --- /dev/null +++ b/tests/esm-path-mapping/baseurl-no-paths.ts @@ -0,0 +1,10 @@ +import * as assert from 'assert'; + +// Import js using baseUrl +import map1foo from '1-foo.js'; + +// Import jsx using baseUrl and jsx extension +import map1jsx from '1-jsx.js'; + +assert.strictEqual(map1foo, 'mapped/1-foo'); +assert.strictEqual(map1jsx, 'mapped/1-jsx'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json new file mode 100644 index 000000000..96864dec6 --- /dev/null +++ b/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + "baseUrl": "./level-1/level-2" + } +} From 23f40b18b0c4867a158a33e0364fbf0ced045bfe Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:41:13 +0700 Subject: [PATCH 20/74] test: baseUrl + * path --- src/test/index.spec.ts | 10 ++++++++++ tests/esm-path-mapping/baseurl-star-path.ts | 10 ++++++++++ tests/esm-path-mapping/tsconfig-baseurl-star-path.json | 9 +++++++++ 3 files changed, 29 insertions(+) create mode 100644 tests/esm-path-mapping/baseurl-star-path.ts create mode 100644 tests/esm-path-mapping/tsconfig-baseurl-star-path.json diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index de876e849..92cfb5077 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1261,6 +1261,16 @@ test.suite('ts-node', (test) => { ); expect(err).toBe(null); }); + + test('baseUrl set and * path', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-star-path.json" baseurl-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBe(null); + }); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/baseurl-star-path.ts b/tests/esm-path-mapping/baseurl-star-path.ts new file mode 100644 index 000000000..eaa1f6aba --- /dev/null +++ b/tests/esm-path-mapping/baseurl-star-path.ts @@ -0,0 +1,10 @@ +import * as assert from 'assert'; + +// Import js using baseUrl (level-1) and star-path (level-2) +import map1foo from '1-foo.js'; + +// Import jsx using baseUrl (level-1), star-path (level-2), and jsx extension +import map1jsx from '1-jsx.js'; + +assert.strictEqual(map1foo, 'mapped/1-foo'); +assert.strictEqual(map1jsx, 'mapped/1-jsx'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-star-path.json b/tests/esm-path-mapping/tsconfig-baseurl-star-path.json new file mode 100644 index 000000000..aa935da3d --- /dev/null +++ b/tests/esm-path-mapping/tsconfig-baseurl-star-path.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + "baseUrl": "./level-1", + "paths": { + "*": ["./level-2/*"] + } + } +} From 54fdbba9d08d29e8f50223252586557c23634781 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:55:48 +0700 Subject: [PATCH 21/74] test: fallback to node_modules --- src/test/index.spec.ts | 10 ++++++++++ tests/esm-path-mapping/node-modules-star-path.ts | 6 ++++++ .../esm-path-mapping/node_modules/some-lib/index.d.ts | 4 ++++ tests/esm-path-mapping/node_modules/some-lib/index.js | 1 + 4 files changed, 21 insertions(+) create mode 100644 tests/esm-path-mapping/node-modules-star-path.ts create mode 100644 tests/esm-path-mapping/node_modules/some-lib/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/some-lib/index.js diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 92cfb5077..27fa3b7e2 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1271,6 +1271,16 @@ test.suite('ts-node', (test) => { ); expect(err).toBe(null); }); + + test('fallback to node_modules', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-star-path.json" node-modules-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBe(null); + }); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/node-modules-star-path.ts b/tests/esm-path-mapping/node-modules-star-path.ts new file mode 100644 index 000000000..9d05a57b0 --- /dev/null +++ b/tests/esm-path-mapping/node-modules-star-path.ts @@ -0,0 +1,6 @@ +import * as assert from 'assert'; + +// Fallback to node_modules +import somelib from 'some-lib'; + +assert.strictEqual(somelib, 'some-lib'); diff --git a/tests/esm-path-mapping/node_modules/some-lib/index.d.ts b/tests/esm-path-mapping/node_modules/some-lib/index.d.ts new file mode 100644 index 000000000..619adcb1c --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-lib/index.d.ts @@ -0,0 +1,4 @@ +declare module 'some-lib' { + const def = 'some-lib' + export default def +} diff --git a/tests/esm-path-mapping/node_modules/some-lib/index.js b/tests/esm-path-mapping/node_modules/some-lib/index.js new file mode 100644 index 000000000..22ea3fa3a --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-lib/index.js @@ -0,0 +1 @@ +export default 'some-lib'; From 78652b226c28e9f7c71c806014f6caa001f48e79 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:56:15 +0700 Subject: [PATCH 22/74] clean up destructuring --- src/test/index.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 27fa3b7e2..13f778b10 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1253,7 +1253,7 @@ test.suite('ts-node', (test) => { }); test('baseUrl set and no paths', async () => { - const { stderr, err } = await exec( + const { err } = await exec( `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-no-paths.json" baseurl-no-paths.ts`, { cwd: join(TEST_DIR, './esm-path-mapping'), @@ -1263,7 +1263,7 @@ test.suite('ts-node', (test) => { }); test('baseUrl set and * path', async () => { - const { stderr, err } = await exec( + const { err } = await exec( `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-star-path.json" baseurl-star-path.ts`, { cwd: join(TEST_DIR, './esm-path-mapping'), From b8e6fb706cb90e85e71ceca5b267d274b9a9c196 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 23:39:19 +0700 Subject: [PATCH 23/74] fix setting project --- src/test/index.spec.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 13f778b10..fc6d31c49 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1254,9 +1254,12 @@ test.suite('ts-node', (test) => { test('baseUrl set and no paths', async () => { const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-no-paths.json" baseurl-no-paths.ts`, + `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-no-paths.ts`, { cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-no-paths.json`, + }, } ); expect(err).toBe(null); @@ -1264,9 +1267,12 @@ test.suite('ts-node', (test) => { test('baseUrl set and * path', async () => { const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-star-path.json" baseurl-star-path.ts`, + `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-star-path.ts`, { cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + }, } ); expect(err).toBe(null); @@ -1274,9 +1280,12 @@ test.suite('ts-node', (test) => { test('fallback to node_modules', async () => { const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} --project="tsconfig-baseurl-star-path.json" node-modules-star-path.ts`, + `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-star-path.ts`, { cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + }, } ); expect(err).toBe(null); From 2973399ee7735c0e9eab85c12e39b5ec2a77b8e9 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 23:39:51 +0700 Subject: [PATCH 24/74] test: fallback to built-in --- src/test/index.spec.ts | 13 +++++++++++++ tests/esm-path-mapping/built-in-star-path.ts | 6 ++++++ 2 files changed, 19 insertions(+) create mode 100644 tests/esm-path-mapping/built-in-star-path.ts diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index fc6d31c49..a49b06461 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1290,6 +1290,19 @@ test.suite('ts-node', (test) => { ); expect(err).toBe(null); }); + + test('fallback to Node built-in', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} built-in-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBe(null); + }); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/built-in-star-path.ts b/tests/esm-path-mapping/built-in-star-path.ts new file mode 100644 index 000000000..45d31c7aa --- /dev/null +++ b/tests/esm-path-mapping/built-in-star-path.ts @@ -0,0 +1,6 @@ +import * as assert from 'assert'; + +// Fallback to built-in +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); From 5ffd905efc2af1bb262f63df101daf4e7f99775c Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Fri, 25 Feb 2022 23:40:15 +0700 Subject: [PATCH 25/74] avoid space in command & add comment --- src/test/helpers.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/helpers.ts b/src/test/helpers.ts index 83d45d3f9..266db6387 100644 --- a/src/test/helpers.ts +++ b/src/test/helpers.ts @@ -33,8 +33,9 @@ export const CMD_TS_NODE_WITH_PROJECT_FLAG = `"${BIN_PATH}" --project "${PROJECT export const CMD_TS_NODE_WITHOUT_PROJECT_FLAG = `"${BIN_PATH}"`; export const EXPERIMENTAL_MODULES_FLAG = semver.gte(process.version, '12.17.0') ? '' - : '--experimental-modules'; -export const CMD_ESM_LOADER_WITHOUT_PROJECT = `node ${EXPERIMENTAL_MODULES_FLAG} --loader ts-node/esm`; + : ' --experimental-modules'; +/** Default `node --loader` invocation (pass `TS_NODE_PROJECT` as env) */ +export const CMD_ESM_LOADER_WITHOUT_PROJECT = `node${EXPERIMENTAL_MODULES_FLAG} --loader ts-node/esm`; // `createRequire` does not exist on older node versions export const testsDirRequire = createRequire(join(TEST_DIR, 'index.js')); From d200301556d815c3e266413446259d9a40b478fc Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sun, 27 Feb 2022 11:14:41 +0700 Subject: [PATCH 26/74] fix setting project and PATH --- src/test/index.spec.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index a49b06461..5dc2d6758 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1258,7 +1258,8 @@ test.suite('ts-node', (test) => { { cwd: join(TEST_DIR, './esm-path-mapping'), env: { - TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-no-paths.json`, + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, }, } ); @@ -1271,7 +1272,8 @@ test.suite('ts-node', (test) => { { cwd: join(TEST_DIR, './esm-path-mapping'), env: { - TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, }, } ); @@ -1284,7 +1286,8 @@ test.suite('ts-node', (test) => { { cwd: join(TEST_DIR, './esm-path-mapping'), env: { - TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, }, } ); @@ -1297,7 +1300,8 @@ test.suite('ts-node', (test) => { { cwd: join(TEST_DIR, './esm-path-mapping'), env: { - TS_NODE_PROJECT: `./esm-path-mapping/tsconfig-baseurl-star-path.json`, + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, }, } ); From c621af0c7eb935e4b1a792b6409c42a33a0afc64 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sun, 27 Feb 2022 12:16:18 +0700 Subject: [PATCH 27/74] test: skip type-defs --- src/test/index.spec.ts | 13 +++++++++++++ tests/esm-path-mapping/level-1/level-2/ambient.d.ts | 4 ++++ .../node_modules/ambient/index.d.ts | 4 ++++ .../esm-path-mapping/node_modules/ambient/index.js | 1 + tests/esm-path-mapping/type-definition.ts | 6 ++++++ 5 files changed, 28 insertions(+) create mode 100644 tests/esm-path-mapping/level-1/level-2/ambient.d.ts create mode 100644 tests/esm-path-mapping/node_modules/ambient/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/ambient/index.js create mode 100644 tests/esm-path-mapping/type-definition.ts diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 5dc2d6758..012e08b54 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1307,6 +1307,19 @@ test.suite('ts-node', (test) => { ); expect(err).toBe(null); }); + + test('skip type definitions', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} type-definition.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, + }, + } + ); + expect(err).toBe(null); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/level-1/level-2/ambient.d.ts b/tests/esm-path-mapping/level-1/level-2/ambient.d.ts new file mode 100644 index 000000000..29d5a9b51 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/ambient.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const def = 'local-ambient' // not the same as in node_modules + export default def +} diff --git a/tests/esm-path-mapping/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/node_modules/ambient/index.d.ts new file mode 100644 index 000000000..446485b59 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/index.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const def = 'ambient' + export default def +} diff --git a/tests/esm-path-mapping/node_modules/ambient/index.js b/tests/esm-path-mapping/node_modules/ambient/index.js new file mode 100644 index 000000000..755c3b16d --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/index.js @@ -0,0 +1 @@ +export default 'ambient'; diff --git a/tests/esm-path-mapping/type-definition.ts b/tests/esm-path-mapping/type-definition.ts new file mode 100644 index 000000000..61acb44a5 --- /dev/null +++ b/tests/esm-path-mapping/type-definition.ts @@ -0,0 +1,6 @@ +import * as assert from 'assert'; + +// Import should ignore .d.ts +import ambient from 'ambient'; + +assert.strictEqual(ambient, 'ambient'); From ec038c184edfc4b54740ae22bc4fdecf82ce84f3 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sun, 27 Feb 2022 12:17:15 +0700 Subject: [PATCH 28/74] test: external imports ignore paths --- src/test/index.spec.ts | 15 +++++++++++++++ tests/esm-path-mapping/node-modules-import.ts | 6 ++++++ .../node_modules/lodash/index.d.ts | 4 ++++ .../esm-path-mapping/node_modules/lodash/index.js | 1 + .../node_modules/some-lib/index.js | 3 +++ tests/esm-path-mapping/tsconfig-lodash-path.json | 9 +++++++++ 6 files changed, 38 insertions(+) create mode 100644 tests/esm-path-mapping/node-modules-import.ts create mode 100644 tests/esm-path-mapping/node_modules/lodash/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/lodash/index.js create mode 100644 tests/esm-path-mapping/tsconfig-lodash-path.json diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 012e08b54..b2f3ebc8d 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1320,6 +1320,21 @@ test.suite('ts-node', (test) => { } ); expect(err).toBe(null); + }); + + test('external modules ignore paths', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-import.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-lodash-path.json`, + }, + } + ); + expect(err).toBe(null); + }); }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere diff --git a/tests/esm-path-mapping/node-modules-import.ts b/tests/esm-path-mapping/node-modules-import.ts new file mode 100644 index 000000000..2772bd5a6 --- /dev/null +++ b/tests/esm-path-mapping/node-modules-import.ts @@ -0,0 +1,6 @@ +import * as assert from 'assert'; + +// node_modules imports should ignore mapping +import lodash from 'some-lib'; + +assert.strictEqual(lodash, 'lodash'); diff --git a/tests/esm-path-mapping/node_modules/lodash/index.d.ts b/tests/esm-path-mapping/node_modules/lodash/index.d.ts new file mode 100644 index 000000000..dc010c660 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/index.d.ts @@ -0,0 +1,4 @@ +declare module 'lodash' { + const def = 'lodash' + export default def +} diff --git a/tests/esm-path-mapping/node_modules/lodash/index.js b/tests/esm-path-mapping/node_modules/lodash/index.js new file mode 100644 index 000000000..e701c9209 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/index.js @@ -0,0 +1 @@ +export default 'lodash'; diff --git a/tests/esm-path-mapping/node_modules/some-lib/index.js b/tests/esm-path-mapping/node_modules/some-lib/index.js index 22ea3fa3a..c61f35ad1 100644 --- a/tests/esm-path-mapping/node_modules/some-lib/index.js +++ b/tests/esm-path-mapping/node_modules/some-lib/index.js @@ -1 +1,4 @@ +import lodash from 'lodash' + export default 'some-lib'; +export const lodash; diff --git a/tests/esm-path-mapping/tsconfig-lodash-path.json b/tests/esm-path-mapping/tsconfig-lodash-path.json new file mode 100644 index 000000000..898940762 --- /dev/null +++ b/tests/esm-path-mapping/tsconfig-lodash-path.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + "baseUrl": "./level-1/level-2", + "paths": { + "lodash": ["./1-foo.js"] + } + } +} From d471d1d5bff719b8215ce87819e5ac4eaa3cd2f0 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sun, 27 Feb 2022 12:17:57 +0700 Subject: [PATCH 29/74] tests: relative/base-relative imports ignore paths --- src/test/index.spec.ts | 38 ++++++++++++++++++++ tests/esm-path-mapping/path-base-relative.ts | 2 ++ tests/esm-path-mapping/path-relative.ts | 2 ++ 3 files changed, 42 insertions(+) create mode 100644 tests/esm-path-mapping/path-base-relative.ts create mode 100644 tests/esm-path-mapping/path-relative.ts diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index b2f3ebc8d..e831694a8 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1336,6 +1336,44 @@ test.suite('ts-node', (test) => { expect(err).toBe(null); }); }); + + test('relative imports should ignore paths', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-relative.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find './1-foo'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); + }); + + test('base relative imports should ignore paths', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-base-relative.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find '/1-foo'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); + }); // TODO ensure these tests run even when `--loader` is not supported // Do so by moving these test cases elsewhere test.suite('CJS path mapping', (test) => { diff --git a/tests/esm-path-mapping/path-base-relative.ts b/tests/esm-path-mapping/path-base-relative.ts new file mode 100644 index 000000000..d4c6755fb --- /dev/null +++ b/tests/esm-path-mapping/path-base-relative.ts @@ -0,0 +1,2 @@ +// Should fail because path mapping should be ignored +import foo from '/1-foo'; diff --git a/tests/esm-path-mapping/path-relative.ts b/tests/esm-path-mapping/path-relative.ts new file mode 100644 index 000000000..f5c3fbdb0 --- /dev/null +++ b/tests/esm-path-mapping/path-relative.ts @@ -0,0 +1,2 @@ +// Should fail because path mapping should be ignored +import foo from './1-foo'; From 5b686e16ea1dfb203f1c7cb77a09eb07e7da5c81 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Mon, 28 Feb 2022 22:22:50 -0500 Subject: [PATCH 30/74] Updates --- dist-raw/node-errors.js | 34 ++-- src/cjs-resolve-filename-hook.ts | 2 +- src/esm.ts | 7 +- src/path-mapping.ts | 15 +- src/test/index.spec.ts | 179 ----------------- src/test/path-mapping.spec.ts | 185 ++++++++++++++++++ .../level-1/level-2/ambient.d.ts | 4 +- tests/esm-path-mapping/tsconfig-base.json | 3 + 8 files changed, 217 insertions(+), 212 deletions(-) create mode 100644 src/test/path-mapping.spec.ts diff --git a/dist-raw/node-errors.js b/dist-raw/node-errors.js index 1c55ed0f8..2446e2a68 100644 --- a/dist-raw/node-errors.js +++ b/dist-raw/node-errors.js @@ -1,29 +1,29 @@ -exports.codes = {} +exports.codes = {}; function defineError(code, buildMessage) { if (!buildMessage) { - buildMessage = (...args) => args.join(' ') + buildMessage = (...args) => args.join(' '); } exports.codes[code] = class CustomError extends Error { constructor(...args) { - super(`${code}: ${buildMessage(...args)}`) - this.code = code + super(`${code}: ${buildMessage(...args)}`); + this.code = code; } } } -defineError("ERR_INPUT_TYPE_NOT_ALLOWED") -defineError("ERR_INVALID_ARG_VALUE") -defineError("ERR_INVALID_MODULE_SPECIFIER") -defineError("ERR_INVALID_PACKAGE_CONFIG") -defineError("ERR_INVALID_PACKAGE_TARGET") -defineError("ERR_MANIFEST_DEPENDENCY_MISSING") +defineError("ERR_INPUT_TYPE_NOT_ALLOWED"); +defineError("ERR_INVALID_ARG_VALUE"); +defineError("ERR_INVALID_MODULE_SPECIFIER"); +defineError("ERR_INVALID_PACKAGE_CONFIG"); +defineError("ERR_INVALID_PACKAGE_TARGET"); +defineError("ERR_MANIFEST_DEPENDENCY_MISSING"); defineError("ERR_MODULE_NOT_FOUND", (path, base, type = 'package') => { - return `Cannot find ${type} '${path}' imported from ${base}` -}) -defineError("ERR_PACKAGE_IMPORT_NOT_DEFINED") -defineError("ERR_PACKAGE_PATH_NOT_EXPORTED") -defineError("ERR_UNSUPPORTED_DIR_IMPORT") -defineError("ERR_UNSUPPORTED_ESM_URL_SCHEME") -defineError("ERR_UNKNOWN_FILE_EXTENSION") + return `Cannot find ${type} '${path}' imported from ${base}`; +}); +defineError("ERR_PACKAGE_IMPORT_NOT_DEFINED"); +defineError("ERR_PACKAGE_PATH_NOT_EXPORTED"); +defineError("ERR_UNSUPPORTED_DIR_IMPORT"); +defineError("ERR_UNSUPPORTED_ESM_URL_SCHEME"); +defineError("ERR_UNKNOWN_FILE_EXTENSION"); diff --git a/src/cjs-resolve-filename-hook.ts b/src/cjs-resolve-filename-hook.ts index 85618fd2a..cee2d42af 100644 --- a/src/cjs-resolve-filename-hook.ts +++ b/src/cjs-resolve-filename-hook.ts @@ -55,7 +55,7 @@ export function installCommonjsResolveHookIfNecessary(tsNodeService: Service) { if (attemptPathMapping) { const mappedSpecifiers = tsNodeService.mapPath(request); if (mappedSpecifiers) { - candidateSpecifiers = mappedSpecifiers; + candidateSpecifiers = [...mappedSpecifiers, request]; } } // Attempt all resolutions. Collect resolution failures and throw an diff --git a/src/esm.ts b/src/esm.ts index b27058052..1390f780f 100644 --- a/src/esm.ts +++ b/src/esm.ts @@ -214,9 +214,10 @@ export function createEsmHooks(tsNodeService: Service) { if (parentPath && !tsNodeService.ignored(parentPath)) { const mappedSpecifiers = tsNodeService.mapPath(specifier); if (mappedSpecifiers) { - candidateSpecifiers = mappedSpecifiers.map((path) => - pathToFileURL(path).toString() - ); + candidateSpecifiers = [ + ...mappedSpecifiers.map((path) => pathToFileURL(path).toString()), + specifier, + ]; } } } diff --git a/src/path-mapping.ts b/src/path-mapping.ts index a8e30f847..c15d06396 100644 --- a/src/path-mapping.ts +++ b/src/path-mapping.ts @@ -9,17 +9,12 @@ type PathMapper = (specifier: string) => string[] | null; export function createPathMapper( compilerOptions: ts.CompilerOptions ): PathMapper { - if (compilerOptions.paths) { - if (!compilerOptions.baseUrl) { - throw new Error(`Compiler option 'baseUrl' required when 'paths' is set`); - } - - // TODO this should run when baseUrl is set even if paths is not set. + if (compilerOptions.baseUrl) { // TODO should only attempt baseUrl / path mapping for non-relative, non-absolute specifiers. - const mappings = Object.entries({ - '*': ['*'], - ...(compilerOptions.paths ?? {}), - }).map(([patternString, outputs]) => ({ + // TODO double-check: should `*` default apply if `paths` is specified but it does not specify a `*` mapping? + const mappings = Object.entries( + compilerOptions.paths ?? { '*': ['*'] } + ).map(([patternString, outputs]) => ({ pattern: parsePattern(patternString), outputs, })); diff --git a/src/test/index.spec.ts b/src/test/index.spec.ts index 97230ea11..5487a7b64 100644 --- a/src/test/index.spec.ts +++ b/src/test/index.spec.ts @@ -1105,185 +1105,6 @@ test.suite('node environment', (test) => { expect(JSON.parse(generations[1])).toMatchObject(expectation); expect(JSON.parse(generations[2])).toMatchObject(expectation); }); - - test.suite('ESM path mapping', (test) => { - test('path mapping', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - } - ); - expect(err).toBe(null); - }); - - test('path mapping error candidates', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); - }); - - test('baseUrl set and no paths', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-no-paths.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, - }, - } - ); - expect(err).toBe(null); - }); - - test('baseUrl set and * path', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - expect(err).toBe(null); - }); - - test('fallback to node_modules', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - expect(err).toBe(null); - }); - - test('fallback to Node built-in', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} built-in-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - expect(err).toBe(null); - }); - - test('skip type definitions', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} type-definition.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, - }, - } - ); - expect(err).toBe(null); - }); - - test('external modules ignore paths', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-import.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-lodash-path.json`, - }, - } - ); - expect(err).toBe(null); - }); - }); - - test('relative imports should ignore paths', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-relative.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[ERR_MODULE_NOT_FOUND]: Cannot find './1-foo'` - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); - }); - - test('base relative imports should ignore paths', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-base-relative.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[ERR_MODULE_NOT_FOUND]: Cannot find '/1-foo'` - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); - }); - // TODO ensure these tests run even when `--loader` is not supported - // Do so by moving these test cases elsewhere - test.suite('CJS path mapping', (test) => { - test('path mapping', async () => { - const { err } = await exec( - `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} index.ts`, - { - cwd: join(TEST_DIR, './cjs-path-mapping'), - } - ); - expect(err).toBe(null); - }); - - test('path mapping error candidates', async () => { - const { stderr, err } = await exec( - `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} mapped-not-found.ts`, - { - cwd: join(TEST_DIR, './cjs-path-mapping'), - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- .*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- .*mapped\/2a-does-not-exist.ts/); - }); - }); } }); }); diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts new file mode 100644 index 000000000..2df62b5ba --- /dev/null +++ b/src/test/path-mapping.spec.ts @@ -0,0 +1,185 @@ +import { test } from './testlib'; +import * as expect from 'expect'; +import { + CMD_ESM_LOADER_WITHOUT_PROJECT, + CMD_TS_NODE_WITHOUT_PROJECT_FLAG, + nodeSupportsEsmHooks, + TEST_DIR, +} from './helpers'; +import { join } from 'path'; +import { createExec } from './exec-helpers'; + +const exec = createExec({ + cwd: TEST_DIR, +}); + +test.suite('path mapping cjs', (test) => { + test('path mapping', async () => { + const { err } = await exec(`${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} index.ts`, { + cwd: join(TEST_DIR, './cjs-path-mapping'), + }); + expect(err).toBe(null); + }); + + test('path mapping error candidates', async () => { + const { stderr, err } = await exec( + `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} mapped-not-found.ts`, + { + cwd: join(TEST_DIR, './cjs-path-mapping'), + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- .*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- .*mapped\/2a-does-not-exist.ts/); + }); +}); + +test.suite('path mapping esm', (test) => { + test.runIf(nodeSupportsEsmHooks); + + test('path mapping', async () => { + const { err } = await exec(`${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, { + cwd: join(TEST_DIR, './esm-path-mapping'), + }); + expect(err).toBe(null); + }); + + test('path mapping error candidates', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + ); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); + expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + }); + + test('baseUrl set and no paths', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-no-paths.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, + }, + } + ); + expect(err).toBe(null); + }); + + test('baseUrl set and * path', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBe(null); + }); + + test('fallback to node_modules', async (t) => { + const { stdout, stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + t.log({ stdout, stderr }); + expect(err).toBe(null); + }); + + test('fallback to Node built-in', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} built-in-star-path.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBe(null); + }); + + test('skip type definitions', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} type-definition.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, + }, + } + ); + expect(err).toBe(null); + }); + + test('external modules ignore paths', async () => { + const { err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-import.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-lodash-path.json`, + }, + } + ); + expect(err).toBe(null); + }); + + test('relative imports should ignore paths', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-relative.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find './1-foo'`); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); + }); + + test('base relative imports should ignore paths', async () => { + const { stderr, err } = await exec( + `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-base-relative.ts`, + { + cwd: join(TEST_DIR, './esm-path-mapping'), + env: { + ...process.env, + TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, + }, + } + ); + expect(err).toBeTruthy(); + expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find '/1-foo'`); + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); + }); +}); diff --git a/tests/esm-path-mapping/level-1/level-2/ambient.d.ts b/tests/esm-path-mapping/level-1/level-2/ambient.d.ts index 29d5a9b51..2178958a4 100644 --- a/tests/esm-path-mapping/level-1/level-2/ambient.d.ts +++ b/tests/esm-path-mapping/level-1/level-2/ambient.d.ts @@ -1,4 +1,4 @@ declare module 'ambient' { - const def = 'local-ambient' // not the same as in node_modules - export default def + const def = 'local-ambient'; // not the same as in node_modules + export default def; } diff --git a/tests/esm-path-mapping/tsconfig-base.json b/tests/esm-path-mapping/tsconfig-base.json index 2b17811af..f43e923d3 100644 --- a/tests/esm-path-mapping/tsconfig-base.json +++ b/tests/esm-path-mapping/tsconfig-base.json @@ -5,5 +5,8 @@ "allowJs": true, "jsx": "react", "moduleResolution": "node" + }, + "ts-node": { + "experimentalPathMapping": "both" } } From cb3706ef5be6b0de0fa6e84a11b3d75b4ea95e4d Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Mon, 28 Feb 2022 22:26:56 -0500 Subject: [PATCH 31/74] add missing package.json from node_modules --- tests/esm-path-mapping/node_modules/ambient/package.json | 3 +++ tests/esm-path-mapping/node_modules/lodash/package.json | 3 +++ tests/esm-path-mapping/node_modules/some-lib/package.json | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 tests/esm-path-mapping/node_modules/ambient/package.json create mode 100644 tests/esm-path-mapping/node_modules/lodash/package.json create mode 100644 tests/esm-path-mapping/node_modules/some-lib/package.json diff --git a/tests/esm-path-mapping/node_modules/ambient/package.json b/tests/esm-path-mapping/node_modules/ambient/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/esm-path-mapping/node_modules/lodash/package.json b/tests/esm-path-mapping/node_modules/lodash/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/esm-path-mapping/node_modules/some-lib/package.json b/tests/esm-path-mapping/node_modules/some-lib/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-lib/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} From d00bf7317ba5308ef19d864ad5fc79f95b92131f Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Mon, 28 Feb 2022 22:44:00 -0500 Subject: [PATCH 32/74] rolling back a config change; I was wrong --- tests/esm-path-mapping/tsconfig-base.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/esm-path-mapping/tsconfig-base.json b/tests/esm-path-mapping/tsconfig-base.json index f43e923d3..2b17811af 100644 --- a/tests/esm-path-mapping/tsconfig-base.json +++ b/tests/esm-path-mapping/tsconfig-base.json @@ -5,8 +5,5 @@ "allowJs": true, "jsx": "react", "moduleResolution": "node" - }, - "ts-node": { - "experimentalPathMapping": "both" } } From 398db86875917466589fa31cc8455fc1e0e82d54 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sat, 12 Mar 2022 12:14:56 +0700 Subject: [PATCH 33/74] add helper execEsm(...) --- src/test/path-mapping.spec.ts | 147 +++++++++++++--------------------- 1 file changed, 54 insertions(+), 93 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 2df62b5ba..4c621df1f 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -7,12 +7,24 @@ import { TEST_DIR, } from './helpers'; import { join } from 'path'; -import { createExec } from './exec-helpers'; +import { createExec, ExecReturn } from './exec-helpers'; + +interface ExecEsmOpts { + cwd?: string; + file?: string; + project?: string; +} const exec = createExec({ cwd: TEST_DIR, }); +const execEsm = ({ cwd, file, project }: ExecEsmOpts): ExecReturn => + exec(`${CMD_ESM_LOADER_WITHOUT_PROJECT} ${file ?? 'index.ts'}`, { + cwd: join(TEST_DIR, './esm-path-mapping', cwd ?? ''), + ...(project ? { env: { ...process.env, TS_NODE_PROJECT: project } } : {}), + }); + test.suite('path mapping cjs', (test) => { test('path mapping', async () => { const { err } = await exec(`${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} index.ts`, { @@ -42,144 +54,93 @@ test.suite('path mapping esm', (test) => { test.runIf(nodeSupportsEsmHooks); test('path mapping', async () => { - const { err } = await exec(`${CMD_ESM_LOADER_WITHOUT_PROJECT} index.ts`, { - cwd: join(TEST_DIR, './esm-path-mapping'), - }); + const { err } = await execEsm({ file: 'index.ts' }); expect(err).toBe(null); }); test('path mapping error candidates', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} mapped-not-found.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - } - ); + const { stderr, err } = await execEsm({ file: 'mapped-not-found.ts' }); + + // Expect error expect(err).toBeTruthy(); expect(stderr).toMatch( `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` ); + // Expect tried candidates to be listed expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); }); test('baseUrl set and no paths', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-no-paths.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, - }, - } - ); + const { err } = await execEsm({ + file: 'baseurl-no-paths.ts', + project: './tsconfig-baseurl-no-paths.json', + }); expect(err).toBe(null); }); test('baseUrl set and * path', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} baseurl-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); + const { err } = await execEsm({ + file: 'baseurl-star-path.ts', + project: './tsconfig-baseurl-star-path.json', + }); expect(err).toBe(null); }); test('fallback to node_modules', async (t) => { - const { stdout, stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); - t.log({ stdout, stderr }); + const { err } = await execEsm({ + file: 'node-modules-star-path.ts', + project: './tsconfig-baseurl-star-path.json', + }); expect(err).toBe(null); }); test('fallback to Node built-in', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} built-in-star-path.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); + const { err } = await execEsm({ + file: 'built-in-star-path.ts', + project: './tsconfig-baseurl-star-path.json', + }); expect(err).toBe(null); }); test('skip type definitions', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} type-definition.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-no-paths.json`, - }, - } - ); + const { err } = await execEsm({ + file: 'type-definition.ts', + project: './tsconfig-baseurl-no-paths.json', + }); expect(err).toBe(null); }); test('external modules ignore paths', async () => { - const { err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} node-modules-import.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-lodash-path.json`, - }, - } - ); + const { err } = await execEsm({ + file: 'node-modules-import.ts', + project: './tsconfig-lodash-path.json', + }); expect(err).toBe(null); }); test('relative imports should ignore paths', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-relative.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); + const { stderr, err } = await execEsm({ + file: 'path-relative.ts', + project: './tsconfig-baseurl-star-path.json', + }); + + // Expect error & tried candidates to be listed expect(err).toBeTruthy(); expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find './1-foo'`); - // Expect tried candidates to be listed expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); }); test('base relative imports should ignore paths', async () => { - const { stderr, err } = await exec( - `${CMD_ESM_LOADER_WITHOUT_PROJECT} path-base-relative.ts`, - { - cwd: join(TEST_DIR, './esm-path-mapping'), - env: { - ...process.env, - TS_NODE_PROJECT: `./tsconfig-baseurl-star-path.json`, - }, - } - ); + const { stderr, err } = await execEsm({ + file: 'path-base-relative.ts', + project: './tsconfig-baseurl-star-path.json', + }); + + // Expect error & tried candidates to be listed expect(err).toBeTruthy(); expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find '/1-foo'`); - // Expect tried candidates to be listed expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); }); }); From a91d5d74d0644ab19df58a131a5434fab8b16c65 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sat, 12 Mar 2022 14:54:58 +0700 Subject: [PATCH 34/74] test: decouple base-url-no-paths test (by extracting it) --- src/test/path-mapping.spec.ts | 5 +---- .../base-url-no-paths/base/1-js.js | 1 + .../base-url-no-paths/base/2-jsx.jsx | 6 ++++++ .../base-url-no-paths/base/3-ts.ts | 1 + .../base-url-no-paths/base/child/1-js.js | 1 + .../base-url-no-paths/base/child/2-jsx.jsx | 6 ++++++ .../base-url-no-paths/base/child/3-ts.ts | 1 + .../base-url-no-paths/index.ts | 4 ++++ .../base-url-no-paths/test-js.js | 19 +++++++++++++++++++ .../base-url-no-paths/test-jsx.jsx | 19 +++++++++++++++++++ .../base-url-no-paths/test-ts.ts | 19 +++++++++++++++++++ .../base-url-no-paths/test-tsx.tsx | 19 +++++++++++++++++++ .../base-url-no-paths/tsconfig.json | 6 ++++++ tests/esm-path-mapping/baseurl-no-paths.ts | 10 ---------- .../tsconfig-baseurl-no-paths.json | 6 ------ 15 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/1-js.js create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx create mode 100644 tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts create mode 100644 tests/esm-path-mapping/base-url-no-paths/index.ts create mode 100644 tests/esm-path-mapping/base-url-no-paths/test-js.js create mode 100644 tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx create mode 100644 tests/esm-path-mapping/base-url-no-paths/test-ts.ts create mode 100644 tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx create mode 100644 tests/esm-path-mapping/base-url-no-paths/tsconfig.json delete mode 100644 tests/esm-path-mapping/baseurl-no-paths.ts delete mode 100644 tests/esm-path-mapping/tsconfig-baseurl-no-paths.json diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 4c621df1f..d5e3a3da2 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -73,10 +73,7 @@ test.suite('path mapping esm', (test) => { }); test('baseUrl set and no paths', async () => { - const { err } = await execEsm({ - file: 'baseurl-no-paths.ts', - project: './tsconfig-baseurl-no-paths.json', - }); + const { err } = await execEsm({ cwd: 'base-url-no-paths' }); expect(err).toBe(null); }); diff --git a/tests/esm-path-mapping/base-url-no-paths/base/1-js.js b/tests/esm-path-mapping/base-url-no-paths/base/1-js.js new file mode 100644 index 000000000..41d1c6995 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/1-js.js @@ -0,0 +1 @@ +export default 'base/js'; diff --git a/tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx b/tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx new file mode 100644 index 000000000..db6e955eb --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx @@ -0,0 +1,6 @@ +export default 'base/jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts b/tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts new file mode 100644 index 000000000..4a45411ab --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts @@ -0,0 +1 @@ +export default 'base/ts'; diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js b/tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js new file mode 100644 index 000000000..3641e5424 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js @@ -0,0 +1 @@ +export default 'base/child/js'; diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx b/tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx new file mode 100644 index 000000000..f3bfb26c8 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx @@ -0,0 +1,6 @@ +export default 'base/child/jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts b/tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts new file mode 100644 index 000000000..43d298cb6 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts @@ -0,0 +1 @@ +export default 'base/child/ts'; diff --git a/tests/esm-path-mapping/base-url-no-paths/index.ts b/tests/esm-path-mapping/base-url-no-paths/index.ts new file mode 100644 index 000000000..64263ac04 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/index.ts @@ -0,0 +1,4 @@ +import './test-js.js'; +import './test-jsx.js'; +import './test-ts.js'; +import './test-tsx.js'; diff --git a/tests/esm-path-mapping/base-url-no-paths/test-js.js b/tests/esm-path-mapping/base-url-no-paths/test-js.js new file mode 100644 index 000000000..bec09a301 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/test-js.js @@ -0,0 +1,19 @@ +import * as assert from 'assert'; + +// Import js, jsx, ts at baseUrl +import baseJs from '1-js.js'; +import baseJsx from '2-jsx.js'; +import baseTs from '3-ts.js'; + +// Import js, jsx, ts under baseUrl +import childJs from 'child/1-js.js'; +import childJsx from 'child/2-jsx.js'; +import childTs from 'child/3-ts.js'; + +assert.strictEqual(baseJs, 'base/js'); +assert.strictEqual(baseJsx, 'base/jsx'); +assert.strictEqual(baseTs, 'base/ts'); + +assert.strictEqual(childJs, 'base/child/js'); +assert.strictEqual(childJsx, 'base/child/jsx'); +assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx b/tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx new file mode 100644 index 000000000..bec09a301 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx @@ -0,0 +1,19 @@ +import * as assert from 'assert'; + +// Import js, jsx, ts at baseUrl +import baseJs from '1-js.js'; +import baseJsx from '2-jsx.js'; +import baseTs from '3-ts.js'; + +// Import js, jsx, ts under baseUrl +import childJs from 'child/1-js.js'; +import childJsx from 'child/2-jsx.js'; +import childTs from 'child/3-ts.js'; + +assert.strictEqual(baseJs, 'base/js'); +assert.strictEqual(baseJsx, 'base/jsx'); +assert.strictEqual(baseTs, 'base/ts'); + +assert.strictEqual(childJs, 'base/child/js'); +assert.strictEqual(childJsx, 'base/child/jsx'); +assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-ts.ts b/tests/esm-path-mapping/base-url-no-paths/test-ts.ts new file mode 100644 index 000000000..bec09a301 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/test-ts.ts @@ -0,0 +1,19 @@ +import * as assert from 'assert'; + +// Import js, jsx, ts at baseUrl +import baseJs from '1-js.js'; +import baseJsx from '2-jsx.js'; +import baseTs from '3-ts.js'; + +// Import js, jsx, ts under baseUrl +import childJs from 'child/1-js.js'; +import childJsx from 'child/2-jsx.js'; +import childTs from 'child/3-ts.js'; + +assert.strictEqual(baseJs, 'base/js'); +assert.strictEqual(baseJsx, 'base/jsx'); +assert.strictEqual(baseTs, 'base/ts'); + +assert.strictEqual(childJs, 'base/child/js'); +assert.strictEqual(childJsx, 'base/child/jsx'); +assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx b/tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx new file mode 100644 index 000000000..bec09a301 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx @@ -0,0 +1,19 @@ +import * as assert from 'assert'; + +// Import js, jsx, ts at baseUrl +import baseJs from '1-js.js'; +import baseJsx from '2-jsx.js'; +import baseTs from '3-ts.js'; + +// Import js, jsx, ts under baseUrl +import childJs from 'child/1-js.js'; +import childJsx from 'child/2-jsx.js'; +import childTs from 'child/3-ts.js'; + +assert.strictEqual(baseJs, 'base/js'); +assert.strictEqual(baseJsx, 'base/jsx'); +assert.strictEqual(baseTs, 'base/ts'); + +assert.strictEqual(childJs, 'base/child/js'); +assert.strictEqual(childJsx, 'base/child/jsx'); +assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping/base-url-no-paths/tsconfig.json b/tests/esm-path-mapping/base-url-no-paths/tsconfig.json new file mode 100644 index 000000000..76108f8c8 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "baseUrl": "./base" + } +} diff --git a/tests/esm-path-mapping/baseurl-no-paths.ts b/tests/esm-path-mapping/baseurl-no-paths.ts deleted file mode 100644 index f289b72fd..000000000 --- a/tests/esm-path-mapping/baseurl-no-paths.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as assert from 'assert'; - -// Import js using baseUrl -import map1foo from '1-foo.js'; - -// Import jsx using baseUrl and jsx extension -import map1jsx from '1-jsx.js'; - -assert.strictEqual(map1foo, 'mapped/1-foo'); -assert.strictEqual(map1jsx, 'mapped/1-jsx'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json deleted file mode 100644 index 96864dec6..000000000 --- a/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig-base.json", - "compilerOptions": { - "baseUrl": "./level-1/level-2" - } -} From 7829b546ded8896b58f3aba1642f5ddf4003c2a1 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Sat, 12 Mar 2022 15:01:45 +0700 Subject: [PATCH 35/74] test: decouple skip-type-definition test (by extracting it) --- src/test/path-mapping.spec.ts | 5 +---- tests/esm-path-mapping/node_modules/ambient/index.d.ts | 4 ---- .../{level-1/level-2 => skip-type-definitions}/ambient.d.ts | 0 .../{type-definition.ts => skip-type-definitions/index.ts} | 0 .../skip-type-definitions/node_modules/ambient/index.d.ts | 4 ++++ .../node_modules/ambient/index.js | 0 .../node_modules/ambient/package.json | 0 tests/esm-path-mapping/skip-type-definitions/tsconfig.json | 4 ++++ 8 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 tests/esm-path-mapping/node_modules/ambient/index.d.ts rename tests/esm-path-mapping/{level-1/level-2 => skip-type-definitions}/ambient.d.ts (100%) rename tests/esm-path-mapping/{type-definition.ts => skip-type-definitions/index.ts} (100%) create mode 100644 tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts rename tests/esm-path-mapping/{ => skip-type-definitions}/node_modules/ambient/index.js (100%) rename tests/esm-path-mapping/{ => skip-type-definitions}/node_modules/ambient/package.json (100%) create mode 100644 tests/esm-path-mapping/skip-type-definitions/tsconfig.json diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index d5e3a3da2..5d7cbba60 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -102,10 +102,7 @@ test.suite('path mapping esm', (test) => { }); test('skip type definitions', async () => { - const { err } = await execEsm({ - file: 'type-definition.ts', - project: './tsconfig-baseurl-no-paths.json', - }); + const { err } = await execEsm({ cwd: 'skip-type-definitions' }); expect(err).toBe(null); }); diff --git a/tests/esm-path-mapping/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/node_modules/ambient/index.d.ts deleted file mode 100644 index 446485b59..000000000 --- a/tests/esm-path-mapping/node_modules/ambient/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'ambient' { - const def = 'ambient' - export default def -} diff --git a/tests/esm-path-mapping/level-1/level-2/ambient.d.ts b/tests/esm-path-mapping/skip-type-definitions/ambient.d.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/ambient.d.ts rename to tests/esm-path-mapping/skip-type-definitions/ambient.d.ts diff --git a/tests/esm-path-mapping/type-definition.ts b/tests/esm-path-mapping/skip-type-definitions/index.ts similarity index 100% rename from tests/esm-path-mapping/type-definition.ts rename to tests/esm-path-mapping/skip-type-definitions/index.ts diff --git a/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts new file mode 100644 index 000000000..e9086db62 --- /dev/null +++ b/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const def = 'ambient'; + export default def; +} diff --git a/tests/esm-path-mapping/node_modules/ambient/index.js b/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.js similarity index 100% rename from tests/esm-path-mapping/node_modules/ambient/index.js rename to tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.js diff --git a/tests/esm-path-mapping/node_modules/ambient/package.json b/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/package.json similarity index 100% rename from tests/esm-path-mapping/node_modules/ambient/package.json rename to tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/package.json diff --git a/tests/esm-path-mapping/skip-type-definitions/tsconfig.json b/tests/esm-path-mapping/skip-type-definitions/tsconfig.json new file mode 100644 index 000000000..b9471ead8 --- /dev/null +++ b/tests/esm-path-mapping/skip-type-definitions/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig-base.json", + "baseUrl": "." +} From 9fd944edf0606e0fd7d17dc2a706cfd89458e8d7 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 15:12:13 +0700 Subject: [PATCH 36/74] test: refactor to apply tests across multiple module types & project configs --- src/test/path-mapping.spec.ts | 240 ++++++++---------- .../import-node-built-in.ts | 4 + .../base-url-and-paths/package.json | 1 + .../base-url-and-paths/tsconfig.json | 13 + .../base-url-no-paths/import-node-built-in.ts | 4 + .../base-url-no-paths/package.json | 1 + .../base-url-no-paths/tsconfig.json | 7 + .../import-node-built-in.ts | 4 + .../base-url-star-path/package.json | 1 + .../base-url-star-path/tsconfig.json | 10 + tests/cjs-path-mapping/tsconfig-base.json | 11 + .../import-node-built-in.ts | 4 + .../package.json | 0 .../base-url-and-paths/tsconfig.json | 13 + .../base-url-no-paths/import-node-built-in.ts | 4 + .../base-url-no-paths/index.ts | 4 - .../base-url-no-paths/package.json | 3 + .../base-url-no-paths/tsconfig.json | 1 + .../import-node-built-in.ts | 4 + .../base-url-star-path/package.json | 3 + .../base-url-star-path/tsconfig.json | 10 + .../skip-type-definitions/tsconfig.json | 4 - tests/esm-path-mapping/tsconfig-base.json | 7 +- 23 files changed, 213 insertions(+), 140 deletions(-) create mode 100644 tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts create mode 100644 tests/cjs-path-mapping/base-url-and-paths/package.json create mode 100644 tests/cjs-path-mapping/base-url-and-paths/tsconfig.json create mode 100644 tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts create mode 100644 tests/cjs-path-mapping/base-url-no-paths/package.json create mode 100644 tests/cjs-path-mapping/base-url-no-paths/tsconfig.json create mode 100644 tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts create mode 100644 tests/cjs-path-mapping/base-url-star-path/package.json create mode 100644 tests/cjs-path-mapping/base-url-star-path/tsconfig.json create mode 100644 tests/cjs-path-mapping/tsconfig-base.json create mode 100644 tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts rename tests/esm-path-mapping/{skip-type-definitions/node_modules/ambient => base-url-and-paths}/package.json (100%) create mode 100644 tests/esm-path-mapping/base-url-and-paths/tsconfig.json create mode 100644 tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts delete mode 100644 tests/esm-path-mapping/base-url-no-paths/index.ts create mode 100644 tests/esm-path-mapping/base-url-no-paths/package.json create mode 100644 tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts create mode 100644 tests/esm-path-mapping/base-url-star-path/package.json create mode 100644 tests/esm-path-mapping/base-url-star-path/tsconfig.json delete mode 100644 tests/esm-path-mapping/skip-type-definitions/tsconfig.json diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 5d7cbba60..365fce38a 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -1,140 +1,122 @@ -import { test } from './testlib'; import * as expect from 'expect'; +import { join } from 'path'; + +import { createExec } from './exec-helpers'; import { CMD_ESM_LOADER_WITHOUT_PROJECT, CMD_TS_NODE_WITHOUT_PROJECT_FLAG, nodeSupportsEsmHooks, TEST_DIR, } from './helpers'; -import { join } from 'path'; -import { createExec, ExecReturn } from './exec-helpers'; - -interface ExecEsmOpts { - cwd?: string; - file?: string; - project?: string; -} - -const exec = createExec({ - cwd: TEST_DIR, -}); - -const execEsm = ({ cwd, file, project }: ExecEsmOpts): ExecReturn => - exec(`${CMD_ESM_LOADER_WITHOUT_PROJECT} ${file ?? 'index.ts'}`, { - cwd: join(TEST_DIR, './esm-path-mapping', cwd ?? ''), - ...(project ? { env: { ...process.env, TS_NODE_PROJECT: project } } : {}), - }); - -test.suite('path mapping cjs', (test) => { - test('path mapping', async () => { - const { err } = await exec(`${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} index.ts`, { - cwd: join(TEST_DIR, './cjs-path-mapping'), - }); - expect(err).toBe(null); - }); - - test('path mapping error candidates', async () => { - const { stderr, err } = await exec( - `${CMD_TS_NODE_WITHOUT_PROJECT_FLAG} mapped-not-found.ts`, - { - cwd: join(TEST_DIR, './cjs-path-mapping'), - } - ); - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - ); - // Expect tried candidates to be listed - expect(stderr).toMatch(/- .*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- .*mapped\/2a-does-not-exist.ts/); - }); -}); - -test.suite('path mapping esm', (test) => { - test.runIf(nodeSupportsEsmHooks); - - test('path mapping', async () => { - const { err } = await execEsm({ file: 'index.ts' }); - expect(err).toBe(null); - }); - - test('path mapping error candidates', async () => { - const { stderr, err } = await execEsm({ file: 'mapped-not-found.ts' }); - - // Expect error - expect(err).toBeTruthy(); - expect(stderr).toMatch( - `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - ); - - // Expect tried candidates to be listed - expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); - expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); - }); - - test('baseUrl set and no paths', async () => { - const { err } = await execEsm({ cwd: 'base-url-no-paths' }); - expect(err).toBe(null); - }); - - test('baseUrl set and * path', async () => { - const { err } = await execEsm({ - file: 'baseurl-star-path.ts', - project: './tsconfig-baseurl-star-path.json', - }); - expect(err).toBe(null); - }); - - test('fallback to node_modules', async (t) => { - const { err } = await execEsm({ - file: 'node-modules-star-path.ts', - project: './tsconfig-baseurl-star-path.json', - }); - expect(err).toBe(null); - }); - - test('fallback to Node built-in', async () => { - const { err } = await execEsm({ - file: 'built-in-star-path.ts', - project: './tsconfig-baseurl-star-path.json', - }); - expect(err).toBe(null); - }); - - test('skip type definitions', async () => { - const { err } = await execEsm({ cwd: 'skip-type-definitions' }); - expect(err).toBe(null); - }); - - test('external modules ignore paths', async () => { - const { err } = await execEsm({ - file: 'node-modules-import.ts', - project: './tsconfig-lodash-path.json', - }); - expect(err).toBe(null); - }); - - test('relative imports should ignore paths', async () => { - const { stderr, err } = await execEsm({ - file: 'path-relative.ts', - project: './tsconfig-baseurl-star-path.json', - }); +import { test } from './testlib'; - // Expect error & tried candidates to be listed - expect(err).toBeTruthy(); - expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find './1-foo'`); - expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); +const execBuilder = ( + command: string, + moduleDir: string, + projectDir: string +) => { + const partialExec = createExec({ + cwd: join(TEST_DIR, moduleDir, projectDir), }); - test('base relative imports should ignore paths', async () => { - const { stderr, err } = await execEsm({ - file: 'path-base-relative.ts', - project: './tsconfig-baseurl-star-path.json', - }); - - // Expect error & tried candidates to be listed - expect(err).toBeTruthy(); - expect(stderr).toMatch(`[ERR_MODULE_NOT_FOUND]: Cannot find '/1-foo'`); - expect(stderr).toMatch(/- file:\/\/.*level-1\/1-foo.ts/); + return (file = 'index.ts') => partialExec(`${command} ${file}`); +}; + +type ModuleType = 'cjs' | 'esm'; +const MODULE_TYPES: ModuleType[] = ['cjs', 'esm']; +const MODULE_TYPE_ESM = MODULE_TYPES[1]; + +type ExecBuilderParams = { baseDir: string; command: string }; +const EXEC_BUILDER_PARAMS: Record = { + cjs: { + baseDir: 'cjs-path-mapping', + command: CMD_TS_NODE_WITHOUT_PROJECT_FLAG, + }, + esm: { baseDir: 'esm-path-mapping', command: CMD_ESM_LOADER_WITHOUT_PROJECT }, +}; + +const PROJECT_CONFIG_DIRS = { + BASE_URL_NO_PATHS: 'base-url-no-paths', + BASE_URL_AND_PATHS: 'base-url-and-paths', + BASE_URL_STAR_PATH: 'base-url-star-path', +}; + +for (const moduleType of MODULE_TYPES) { + test.suite(`path mapping ${moduleType}`, (test) => { + test.runIf(nodeSupportsEsmHooks || moduleType !== MODULE_TYPE_ESM); + + for (const project of Object.values(PROJECT_CONFIG_DIRS)) { + // Create ts-node runner for this config + const exec = execBuilder( + EXEC_BUILDER_PARAMS[moduleType].command, + EXEC_BUILDER_PARAMS[moduleType].baseDir, + project + ); + + test(`fallback to node built-in with ${project}`, async () => { + const { err } = await exec('import-node-built-in.ts'); + expect(err).toBe(null); + }); + + // test('fallback to node_modules', async (t) => { + // const { err } = await exec('import-node-modules.ts'); + // expect(err).toBe(null); + // }); + + // test('external modules ignore paths', async () => { + // const { err } = await exec('import-within-node-modules.ts'); + // expect(err).toBe(null); + // }); + + // test('ignore type definitions', async () => { + // const { err } = await exec('ignore-type-definitions'); + // expect(err).toBe(null); + // }); + + // test(`import from baseUrl with ${project}`, async () => { + // const { err } = await exec('import-from-base.ts'); + // expect(err).toBe(null); + // }); + + // test(`import under baseUrl with ${project}`, async () => { + // const { err } = await exec('import-under-base.ts'); + // expect(err).toBe(null); + // }); + + // test(`import from js, js, tsx with ${project}`, async () => { + // const { err } = await exec('import-from-base.ts'); + // expect(err).toBe(null); + // }); + + // test('relative imports should ignore paths', async () => { + // const { err } = await exec('import-relative.ts'); + // expect(err).toBe(null); + // }); + + // test(`import invalid path with ${project}`, async () => { + // const { stderr, err } = await exec('import-non-existing.ts'); + + // // Expect error + // expect(err).toBeTruthy(); + // expect(stderr).toMatch( + // `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + // ); + + // // Expect tried candidates to be listed + // expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); + // expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + // }); + } + + // const PROJECTS_WITH_PATHS = [PROJECTS.BASE_URL_AND_PATHS, PROJECTS.BASE_URL_STAR_PATH]; + // for(const project of PROJECTS_WITH_PATHS) { + // // Create ts-node runner for this config + // const exec = execBuilder(project); + + // test(`import specific paths with ${project}`, async () => { + // const { err } = await exec('???'); + // expect(err).toBe(null); + // }); + // } }); -}); +} diff --git a/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base-url-and-paths/package.json b/tests/cjs-path-mapping/base-url-and-paths/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-and-paths/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/cjs-path-mapping/base-url-and-paths/tsconfig.json b/tests/cjs-path-mapping/base-url-and-paths/tsconfig.json new file mode 100644 index 000000000..b94a78cc7 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-and-paths/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./mapped", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.ts"] + } + } +} diff --git a/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base-url-no-paths/package.json b/tests/cjs-path-mapping/base-url-no-paths/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-no-paths/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/cjs-path-mapping/base-url-no-paths/tsconfig.json b/tests/cjs-path-mapping/base-url-no-paths/tsconfig.json new file mode 100644 index 000000000..452e05c2d --- /dev/null +++ b/tests/cjs-path-mapping/base-url-no-paths/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./mapped" + } +} diff --git a/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base-url-star-path/package.json b/tests/cjs-path-mapping/base-url-star-path/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-star-path/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/cjs-path-mapping/base-url-star-path/tsconfig.json b/tests/cjs-path-mapping/base-url-star-path/tsconfig.json new file mode 100644 index 000000000..507b279d9 --- /dev/null +++ b/tests/cjs-path-mapping/base-url-star-path/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./mapped", + "paths": { + "*": ["./level-2/*"] + } + } +} diff --git a/tests/cjs-path-mapping/tsconfig-base.json b/tests/cjs-path-mapping/tsconfig-base.json new file mode 100644 index 000000000..fdbae2a30 --- /dev/null +++ b/tests/cjs-path-mapping/tsconfig-base.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "allowJs": true, + "jsx": "react", + "module": "CommonJS", + "moduleResolution": "node" + }, + "ts-node": { + "experimentalPathMapping": "both" + } +} diff --git a/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts b/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/package.json b/tests/esm-path-mapping/base-url-and-paths/package.json similarity index 100% rename from tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/package.json rename to tests/esm-path-mapping/base-url-and-paths/package.json diff --git a/tests/esm-path-mapping/base-url-and-paths/tsconfig.json b/tests/esm-path-mapping/base-url-and-paths/tsconfig.json new file mode 100644 index 000000000..a11c8fd28 --- /dev/null +++ b/tests/esm-path-mapping/base-url-and-paths/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./base", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.js"] + } + } +} diff --git a/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts b/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/base-url-no-paths/index.ts b/tests/esm-path-mapping/base-url-no-paths/index.ts deleted file mode 100644 index 64263ac04..000000000 --- a/tests/esm-path-mapping/base-url-no-paths/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import './test-js.js'; -import './test-jsx.js'; -import './test-ts.js'; -import './test-tsx.js'; diff --git a/tests/esm-path-mapping/base-url-no-paths/package.json b/tests/esm-path-mapping/base-url-no-paths/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/base-url-no-paths/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/esm-path-mapping/base-url-no-paths/tsconfig.json b/tests/esm-path-mapping/base-url-no-paths/tsconfig.json index 76108f8c8..66fc26ba4 100644 --- a/tests/esm-path-mapping/base-url-no-paths/tsconfig.json +++ b/tests/esm-path-mapping/base-url-no-paths/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "baseUrl": "./base" } diff --git a/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts b/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts new file mode 100644 index 000000000..39fe100e1 --- /dev/null +++ b/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts @@ -0,0 +1,4 @@ +import * as assert from 'assert'; +import { stat } from 'fs'; + +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/base-url-star-path/package.json b/tests/esm-path-mapping/base-url-star-path/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/base-url-star-path/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/esm-path-mapping/base-url-star-path/tsconfig.json b/tests/esm-path-mapping/base-url-star-path/tsconfig.json new file mode 100644 index 000000000..5eed69a79 --- /dev/null +++ b/tests/esm-path-mapping/base-url-star-path/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./base", + "paths": { + "*": ["./level-2/*"] + } + } +} diff --git a/tests/esm-path-mapping/skip-type-definitions/tsconfig.json b/tests/esm-path-mapping/skip-type-definitions/tsconfig.json deleted file mode 100644 index b9471ead8..000000000 --- a/tests/esm-path-mapping/skip-type-definitions/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../tsconfig-base.json", - "baseUrl": "." -} diff --git a/tests/esm-path-mapping/tsconfig-base.json b/tests/esm-path-mapping/tsconfig-base.json index 2b17811af..3f991f0a5 100644 --- a/tests/esm-path-mapping/tsconfig-base.json +++ b/tests/esm-path-mapping/tsconfig-base.json @@ -1,9 +1,10 @@ { - "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "module": "ESNext", "allowJs": true, "jsx": "react", - "moduleResolution": "node" + "module": "ESNext", + "moduleResolution": "node", + "noEmit": true, + "outDir": "./lib" } } From 4e0d363d0b3352060895dba74ed06c43785dab8e Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 15:12:30 +0700 Subject: [PATCH 37/74] temporarily move old tests out of the way --- .../cjs-path-mapping/{ => _todo}/index-js.js | 0 .../{ => _todo}/index-tsx.tsx | 0 tests/cjs-path-mapping/{ => _todo}/index.ts | 0 .../{ => _todo}/mapped-not-found.ts | 0 .../{ => _todo}/mapped/1-foo.ts | 0 .../{ => _todo}/mapped/1-jsx.jsx | 0 .../{ => _todo}/mapped/2-foo.ts | 0 .../{ => _todo}/mapped/2-specific-foo.ts | 0 .../{ => _todo}/mapped/2a-bar.ts | 0 .../{ => _todo}/mapped/2a-foo.ts | 0 .../{ => _todo}/mapped/2a-js.js | 0 .../{ => _todo}/mapped/static.ts | 0 .../cjs-path-mapping/{ => _todo}/package.json | 0 .../{ => _todo}/tsconfig.json | 0 .../{ => _todo}/baseurl-star-path.ts | 0 .../{ => _todo}/built-in-star-path.ts | 0 .../esm-path-mapping/{ => _todo}/index-js.js | 0 .../{ => _todo}/index-tsx.tsx | 0 tests/esm-path-mapping/{ => _todo}/index.ts | 0 .../{ => _todo}/level-1/level-2/1-foo.ts | 0 .../{ => _todo}/level-1/level-2/1-jsx.jsx | 0 .../{ => _todo}/level-1/level-2/2-foo.ts | 0 .../level-1/level-2/2-specific-foo.ts | 0 .../{ => _todo}/level-1/level-2/2a-bar.ts | 0 .../{ => _todo}/level-1/level-2/2a-foo.ts | 0 .../{ => _todo}/level-1/level-2/2a-js.js | 0 .../{ => _todo}/level-1/level-2/static.ts | 0 .../{ => _todo}/mapped-not-found.ts | 0 .../{ => _todo}/node-modules-import.ts | 0 .../{ => _todo}/node-modules-star-path.ts | 0 .../{ => _todo}/path-base-relative.ts | 0 .../{ => _todo}/path-relative.ts | 0 .../tsconfig-baseurl-star-path.json | 0 .../{ => _todo}/tsconfig-lodash-path.json | 0 .../{ => _todo}/tsconfig.json | 0 .../ambient.d.ts | 0 .../child/1-js.js => _todo2/base/child/js.js} | 0 .../2-jsx.jsx => _todo2/base/child/jsx.jsx} | 0 .../child/3-ts.ts => _todo2/base/child/ts.ts} | 0 .../base/1-js.js => _todo2/base/js.js} | 0 .../base/2-jsx.jsx => _todo2/base/jsx.jsx} | 0 .../base/3-ts.ts => _todo2/base/ts.ts} | 0 .../ignore-type-definitions.ts} | 0 .../_todo2/import-from-base.ts | 22 +++++++++++++++++++ .../node_modules/ambient/index.d.ts | 0 .../node_modules/ambient/index.js | 0 .../node_modules/ambient}/package.json | 0 .../node_modules/lodash/index.d.ts | 0 .../{ => _todo2}/node_modules/lodash/index.js | 0 .../node_modules/lodash}/package.json | 0 .../node_modules/some-lib/index.d.ts | 0 .../node_modules/some-lib/index.js | 0 .../node_modules/some-lib}/package.json | 0 .../{base-url-no-paths => _todo2}/test-js.js | 12 +++++----- .../test-jsx.jsx | 12 +++++----- .../{base-url-no-paths => _todo2}/test-ts.ts | 12 +++++----- .../test-tsx.tsx | 12 +++++----- 57 files changed, 46 insertions(+), 24 deletions(-) rename tests/cjs-path-mapping/{ => _todo}/index-js.js (100%) rename tests/cjs-path-mapping/{ => _todo}/index-tsx.tsx (100%) rename tests/cjs-path-mapping/{ => _todo}/index.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped-not-found.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/1-foo.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/1-jsx.jsx (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/2-foo.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/2-specific-foo.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/2a-bar.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/2a-foo.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/2a-js.js (100%) rename tests/cjs-path-mapping/{ => _todo}/mapped/static.ts (100%) rename tests/cjs-path-mapping/{ => _todo}/package.json (100%) rename tests/cjs-path-mapping/{ => _todo}/tsconfig.json (100%) rename tests/esm-path-mapping/{ => _todo}/baseurl-star-path.ts (100%) rename tests/esm-path-mapping/{ => _todo}/built-in-star-path.ts (100%) rename tests/esm-path-mapping/{ => _todo}/index-js.js (100%) rename tests/esm-path-mapping/{ => _todo}/index-tsx.tsx (100%) rename tests/esm-path-mapping/{ => _todo}/index.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/1-foo.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/1-jsx.jsx (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/2-foo.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/2-specific-foo.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/2a-bar.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/2a-foo.ts (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/2a-js.js (100%) rename tests/esm-path-mapping/{ => _todo}/level-1/level-2/static.ts (100%) rename tests/esm-path-mapping/{ => _todo}/mapped-not-found.ts (100%) rename tests/esm-path-mapping/{ => _todo}/node-modules-import.ts (100%) rename tests/esm-path-mapping/{ => _todo}/node-modules-star-path.ts (100%) rename tests/esm-path-mapping/{ => _todo}/path-base-relative.ts (100%) rename tests/esm-path-mapping/{ => _todo}/path-relative.ts (100%) rename tests/esm-path-mapping/{ => _todo}/tsconfig-baseurl-star-path.json (100%) rename tests/esm-path-mapping/{ => _todo}/tsconfig-lodash-path.json (100%) rename tests/esm-path-mapping/{ => _todo}/tsconfig.json (100%) rename tests/esm-path-mapping/{skip-type-definitions => _todo2}/ambient.d.ts (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/child/1-js.js => _todo2/base/child/js.js} (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/child/2-jsx.jsx => _todo2/base/child/jsx.jsx} (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/child/3-ts.ts => _todo2/base/child/ts.ts} (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/1-js.js => _todo2/base/js.js} (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/2-jsx.jsx => _todo2/base/jsx.jsx} (100%) rename tests/esm-path-mapping/{base-url-no-paths/base/3-ts.ts => _todo2/base/ts.ts} (100%) rename tests/esm-path-mapping/{skip-type-definitions/index.ts => _todo2/ignore-type-definitions.ts} (100%) create mode 100644 tests/esm-path-mapping/_todo2/import-from-base.ts rename tests/esm-path-mapping/{skip-type-definitions => _todo2}/node_modules/ambient/index.d.ts (100%) rename tests/esm-path-mapping/{skip-type-definitions => _todo2}/node_modules/ambient/index.js (100%) rename tests/esm-path-mapping/{node_modules/lodash => _todo2/node_modules/ambient}/package.json (100%) rename tests/esm-path-mapping/{ => _todo2}/node_modules/lodash/index.d.ts (100%) rename tests/esm-path-mapping/{ => _todo2}/node_modules/lodash/index.js (100%) rename tests/esm-path-mapping/{node_modules/some-lib => _todo2/node_modules/lodash}/package.json (100%) rename tests/esm-path-mapping/{ => _todo2}/node_modules/some-lib/index.d.ts (100%) rename tests/esm-path-mapping/{ => _todo2}/node_modules/some-lib/index.js (100%) rename tests/esm-path-mapping/{ => _todo2/node_modules/some-lib}/package.json (100%) rename tests/esm-path-mapping/{base-url-no-paths => _todo2}/test-js.js (64%) rename tests/esm-path-mapping/{base-url-no-paths => _todo2}/test-jsx.jsx (64%) rename tests/esm-path-mapping/{base-url-no-paths => _todo2}/test-ts.ts (64%) rename tests/esm-path-mapping/{base-url-no-paths => _todo2}/test-tsx.tsx (64%) diff --git a/tests/cjs-path-mapping/index-js.js b/tests/cjs-path-mapping/_todo/index-js.js similarity index 100% rename from tests/cjs-path-mapping/index-js.js rename to tests/cjs-path-mapping/_todo/index-js.js diff --git a/tests/cjs-path-mapping/index-tsx.tsx b/tests/cjs-path-mapping/_todo/index-tsx.tsx similarity index 100% rename from tests/cjs-path-mapping/index-tsx.tsx rename to tests/cjs-path-mapping/_todo/index-tsx.tsx diff --git a/tests/cjs-path-mapping/index.ts b/tests/cjs-path-mapping/_todo/index.ts similarity index 100% rename from tests/cjs-path-mapping/index.ts rename to tests/cjs-path-mapping/_todo/index.ts diff --git a/tests/cjs-path-mapping/mapped-not-found.ts b/tests/cjs-path-mapping/_todo/mapped-not-found.ts similarity index 100% rename from tests/cjs-path-mapping/mapped-not-found.ts rename to tests/cjs-path-mapping/_todo/mapped-not-found.ts diff --git a/tests/cjs-path-mapping/mapped/1-foo.ts b/tests/cjs-path-mapping/_todo/mapped/1-foo.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/1-foo.ts rename to tests/cjs-path-mapping/_todo/mapped/1-foo.ts diff --git a/tests/cjs-path-mapping/mapped/1-jsx.jsx b/tests/cjs-path-mapping/_todo/mapped/1-jsx.jsx similarity index 100% rename from tests/cjs-path-mapping/mapped/1-jsx.jsx rename to tests/cjs-path-mapping/_todo/mapped/1-jsx.jsx diff --git a/tests/cjs-path-mapping/mapped/2-foo.ts b/tests/cjs-path-mapping/_todo/mapped/2-foo.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/2-foo.ts rename to tests/cjs-path-mapping/_todo/mapped/2-foo.ts diff --git a/tests/cjs-path-mapping/mapped/2-specific-foo.ts b/tests/cjs-path-mapping/_todo/mapped/2-specific-foo.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/2-specific-foo.ts rename to tests/cjs-path-mapping/_todo/mapped/2-specific-foo.ts diff --git a/tests/cjs-path-mapping/mapped/2a-bar.ts b/tests/cjs-path-mapping/_todo/mapped/2a-bar.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/2a-bar.ts rename to tests/cjs-path-mapping/_todo/mapped/2a-bar.ts diff --git a/tests/cjs-path-mapping/mapped/2a-foo.ts b/tests/cjs-path-mapping/_todo/mapped/2a-foo.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/2a-foo.ts rename to tests/cjs-path-mapping/_todo/mapped/2a-foo.ts diff --git a/tests/cjs-path-mapping/mapped/2a-js.js b/tests/cjs-path-mapping/_todo/mapped/2a-js.js similarity index 100% rename from tests/cjs-path-mapping/mapped/2a-js.js rename to tests/cjs-path-mapping/_todo/mapped/2a-js.js diff --git a/tests/cjs-path-mapping/mapped/static.ts b/tests/cjs-path-mapping/_todo/mapped/static.ts similarity index 100% rename from tests/cjs-path-mapping/mapped/static.ts rename to tests/cjs-path-mapping/_todo/mapped/static.ts diff --git a/tests/cjs-path-mapping/package.json b/tests/cjs-path-mapping/_todo/package.json similarity index 100% rename from tests/cjs-path-mapping/package.json rename to tests/cjs-path-mapping/_todo/package.json diff --git a/tests/cjs-path-mapping/tsconfig.json b/tests/cjs-path-mapping/_todo/tsconfig.json similarity index 100% rename from tests/cjs-path-mapping/tsconfig.json rename to tests/cjs-path-mapping/_todo/tsconfig.json diff --git a/tests/esm-path-mapping/baseurl-star-path.ts b/tests/esm-path-mapping/_todo/baseurl-star-path.ts similarity index 100% rename from tests/esm-path-mapping/baseurl-star-path.ts rename to tests/esm-path-mapping/_todo/baseurl-star-path.ts diff --git a/tests/esm-path-mapping/built-in-star-path.ts b/tests/esm-path-mapping/_todo/built-in-star-path.ts similarity index 100% rename from tests/esm-path-mapping/built-in-star-path.ts rename to tests/esm-path-mapping/_todo/built-in-star-path.ts diff --git a/tests/esm-path-mapping/index-js.js b/tests/esm-path-mapping/_todo/index-js.js similarity index 100% rename from tests/esm-path-mapping/index-js.js rename to tests/esm-path-mapping/_todo/index-js.js diff --git a/tests/esm-path-mapping/index-tsx.tsx b/tests/esm-path-mapping/_todo/index-tsx.tsx similarity index 100% rename from tests/esm-path-mapping/index-tsx.tsx rename to tests/esm-path-mapping/_todo/index-tsx.tsx diff --git a/tests/esm-path-mapping/index.ts b/tests/esm-path-mapping/_todo/index.ts similarity index 100% rename from tests/esm-path-mapping/index.ts rename to tests/esm-path-mapping/_todo/index.ts diff --git a/tests/esm-path-mapping/level-1/level-2/1-foo.ts b/tests/esm-path-mapping/_todo/level-1/level-2/1-foo.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/1-foo.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/1-foo.ts diff --git a/tests/esm-path-mapping/level-1/level-2/1-jsx.jsx b/tests/esm-path-mapping/_todo/level-1/level-2/1-jsx.jsx similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/1-jsx.jsx rename to tests/esm-path-mapping/_todo/level-1/level-2/1-jsx.jsx diff --git a/tests/esm-path-mapping/level-1/level-2/2-foo.ts b/tests/esm-path-mapping/_todo/level-1/level-2/2-foo.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/2-foo.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/2-foo.ts diff --git a/tests/esm-path-mapping/level-1/level-2/2-specific-foo.ts b/tests/esm-path-mapping/_todo/level-1/level-2/2-specific-foo.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/2-specific-foo.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/2-specific-foo.ts diff --git a/tests/esm-path-mapping/level-1/level-2/2a-bar.ts b/tests/esm-path-mapping/_todo/level-1/level-2/2a-bar.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/2a-bar.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/2a-bar.ts diff --git a/tests/esm-path-mapping/level-1/level-2/2a-foo.ts b/tests/esm-path-mapping/_todo/level-1/level-2/2a-foo.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/2a-foo.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/2a-foo.ts diff --git a/tests/esm-path-mapping/level-1/level-2/2a-js.js b/tests/esm-path-mapping/_todo/level-1/level-2/2a-js.js similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/2a-js.js rename to tests/esm-path-mapping/_todo/level-1/level-2/2a-js.js diff --git a/tests/esm-path-mapping/level-1/level-2/static.ts b/tests/esm-path-mapping/_todo/level-1/level-2/static.ts similarity index 100% rename from tests/esm-path-mapping/level-1/level-2/static.ts rename to tests/esm-path-mapping/_todo/level-1/level-2/static.ts diff --git a/tests/esm-path-mapping/mapped-not-found.ts b/tests/esm-path-mapping/_todo/mapped-not-found.ts similarity index 100% rename from tests/esm-path-mapping/mapped-not-found.ts rename to tests/esm-path-mapping/_todo/mapped-not-found.ts diff --git a/tests/esm-path-mapping/node-modules-import.ts b/tests/esm-path-mapping/_todo/node-modules-import.ts similarity index 100% rename from tests/esm-path-mapping/node-modules-import.ts rename to tests/esm-path-mapping/_todo/node-modules-import.ts diff --git a/tests/esm-path-mapping/node-modules-star-path.ts b/tests/esm-path-mapping/_todo/node-modules-star-path.ts similarity index 100% rename from tests/esm-path-mapping/node-modules-star-path.ts rename to tests/esm-path-mapping/_todo/node-modules-star-path.ts diff --git a/tests/esm-path-mapping/path-base-relative.ts b/tests/esm-path-mapping/_todo/path-base-relative.ts similarity index 100% rename from tests/esm-path-mapping/path-base-relative.ts rename to tests/esm-path-mapping/_todo/path-base-relative.ts diff --git a/tests/esm-path-mapping/path-relative.ts b/tests/esm-path-mapping/_todo/path-relative.ts similarity index 100% rename from tests/esm-path-mapping/path-relative.ts rename to tests/esm-path-mapping/_todo/path-relative.ts diff --git a/tests/esm-path-mapping/tsconfig-baseurl-star-path.json b/tests/esm-path-mapping/_todo/tsconfig-baseurl-star-path.json similarity index 100% rename from tests/esm-path-mapping/tsconfig-baseurl-star-path.json rename to tests/esm-path-mapping/_todo/tsconfig-baseurl-star-path.json diff --git a/tests/esm-path-mapping/tsconfig-lodash-path.json b/tests/esm-path-mapping/_todo/tsconfig-lodash-path.json similarity index 100% rename from tests/esm-path-mapping/tsconfig-lodash-path.json rename to tests/esm-path-mapping/_todo/tsconfig-lodash-path.json diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/_todo/tsconfig.json similarity index 100% rename from tests/esm-path-mapping/tsconfig.json rename to tests/esm-path-mapping/_todo/tsconfig.json diff --git a/tests/esm-path-mapping/skip-type-definitions/ambient.d.ts b/tests/esm-path-mapping/_todo2/ambient.d.ts similarity index 100% rename from tests/esm-path-mapping/skip-type-definitions/ambient.d.ts rename to tests/esm-path-mapping/_todo2/ambient.d.ts diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js b/tests/esm-path-mapping/_todo2/base/child/js.js similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/child/1-js.js rename to tests/esm-path-mapping/_todo2/base/child/js.js diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx b/tests/esm-path-mapping/_todo2/base/child/jsx.jsx similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/child/2-jsx.jsx rename to tests/esm-path-mapping/_todo2/base/child/jsx.jsx diff --git a/tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts b/tests/esm-path-mapping/_todo2/base/child/ts.ts similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/child/3-ts.ts rename to tests/esm-path-mapping/_todo2/base/child/ts.ts diff --git a/tests/esm-path-mapping/base-url-no-paths/base/1-js.js b/tests/esm-path-mapping/_todo2/base/js.js similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/1-js.js rename to tests/esm-path-mapping/_todo2/base/js.js diff --git a/tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx b/tests/esm-path-mapping/_todo2/base/jsx.jsx similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/2-jsx.jsx rename to tests/esm-path-mapping/_todo2/base/jsx.jsx diff --git a/tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts b/tests/esm-path-mapping/_todo2/base/ts.ts similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/base/3-ts.ts rename to tests/esm-path-mapping/_todo2/base/ts.ts diff --git a/tests/esm-path-mapping/skip-type-definitions/index.ts b/tests/esm-path-mapping/_todo2/ignore-type-definitions.ts similarity index 100% rename from tests/esm-path-mapping/skip-type-definitions/index.ts rename to tests/esm-path-mapping/_todo2/ignore-type-definitions.ts diff --git a/tests/esm-path-mapping/_todo2/import-from-base.ts b/tests/esm-path-mapping/_todo2/import-from-base.ts new file mode 100644 index 000000000..1d252a564 --- /dev/null +++ b/tests/esm-path-mapping/_todo2/import-from-base.ts @@ -0,0 +1,22 @@ +import * as assert from 'assert'; + +// Import js, jsx, ts at baseUrl +import baseJs from 'js.js'; +import baseJsx from 'jsx.jsx'; +import baseTs from 'ts.js'; + +// Import js, jsx, ts under baseUrl +import childJs from 'child/js.js'; +import childJsx from 'child/jsx.jsx'; +import childTs from 'child/ts.js'; + +if (typeof assert !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + +assert.strictEqual(baseJs, 'base/js'); +assert.strictEqual(baseJsx, 'base/jsx'); +assert.strictEqual(baseTs, 'base/ts'); + +assert.strictEqual(childJs, 'base/child/js'); +assert.strictEqual(childJsx, 'base/child/jsx'); +assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts similarity index 100% rename from tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.d.ts rename to tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts diff --git a/tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.js b/tests/esm-path-mapping/_todo2/node_modules/ambient/index.js similarity index 100% rename from tests/esm-path-mapping/skip-type-definitions/node_modules/ambient/index.js rename to tests/esm-path-mapping/_todo2/node_modules/ambient/index.js diff --git a/tests/esm-path-mapping/node_modules/lodash/package.json b/tests/esm-path-mapping/_todo2/node_modules/ambient/package.json similarity index 100% rename from tests/esm-path-mapping/node_modules/lodash/package.json rename to tests/esm-path-mapping/_todo2/node_modules/ambient/package.json diff --git a/tests/esm-path-mapping/node_modules/lodash/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts similarity index 100% rename from tests/esm-path-mapping/node_modules/lodash/index.d.ts rename to tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts diff --git a/tests/esm-path-mapping/node_modules/lodash/index.js b/tests/esm-path-mapping/_todo2/node_modules/lodash/index.js similarity index 100% rename from tests/esm-path-mapping/node_modules/lodash/index.js rename to tests/esm-path-mapping/_todo2/node_modules/lodash/index.js diff --git a/tests/esm-path-mapping/node_modules/some-lib/package.json b/tests/esm-path-mapping/_todo2/node_modules/lodash/package.json similarity index 100% rename from tests/esm-path-mapping/node_modules/some-lib/package.json rename to tests/esm-path-mapping/_todo2/node_modules/lodash/package.json diff --git a/tests/esm-path-mapping/node_modules/some-lib/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts similarity index 100% rename from tests/esm-path-mapping/node_modules/some-lib/index.d.ts rename to tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts diff --git a/tests/esm-path-mapping/node_modules/some-lib/index.js b/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js similarity index 100% rename from tests/esm-path-mapping/node_modules/some-lib/index.js rename to tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js diff --git a/tests/esm-path-mapping/package.json b/tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json similarity index 100% rename from tests/esm-path-mapping/package.json rename to tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json diff --git a/tests/esm-path-mapping/base-url-no-paths/test-js.js b/tests/esm-path-mapping/_todo2/test-js.js similarity index 64% rename from tests/esm-path-mapping/base-url-no-paths/test-js.js rename to tests/esm-path-mapping/_todo2/test-js.js index bec09a301..f557d8dfd 100644 --- a/tests/esm-path-mapping/base-url-no-paths/test-js.js +++ b/tests/esm-path-mapping/_todo2/test-js.js @@ -1,14 +1,14 @@ import * as assert from 'assert'; // Import js, jsx, ts at baseUrl -import baseJs from '1-js.js'; -import baseJsx from '2-jsx.js'; -import baseTs from '3-ts.js'; +import baseJs from 'js.js'; +import baseJsx from 'jsx.jsx'; +import baseTs from 'ts.js'; // Import js, jsx, ts under baseUrl -import childJs from 'child/1-js.js'; -import childJsx from 'child/2-jsx.js'; -import childTs from 'child/3-ts.js'; +import childJs from 'child/js.js'; +import childJsx from 'child/jsx.jsx'; +import childTs from 'child/ts.js'; assert.strictEqual(baseJs, 'base/js'); assert.strictEqual(baseJsx, 'base/jsx'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx b/tests/esm-path-mapping/_todo2/test-jsx.jsx similarity index 64% rename from tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx rename to tests/esm-path-mapping/_todo2/test-jsx.jsx index bec09a301..f557d8dfd 100644 --- a/tests/esm-path-mapping/base-url-no-paths/test-jsx.jsx +++ b/tests/esm-path-mapping/_todo2/test-jsx.jsx @@ -1,14 +1,14 @@ import * as assert from 'assert'; // Import js, jsx, ts at baseUrl -import baseJs from '1-js.js'; -import baseJsx from '2-jsx.js'; -import baseTs from '3-ts.js'; +import baseJs from 'js.js'; +import baseJsx from 'jsx.jsx'; +import baseTs from 'ts.js'; // Import js, jsx, ts under baseUrl -import childJs from 'child/1-js.js'; -import childJsx from 'child/2-jsx.js'; -import childTs from 'child/3-ts.js'; +import childJs from 'child/js.js'; +import childJsx from 'child/jsx.jsx'; +import childTs from 'child/ts.js'; assert.strictEqual(baseJs, 'base/js'); assert.strictEqual(baseJsx, 'base/jsx'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-ts.ts b/tests/esm-path-mapping/_todo2/test-ts.ts similarity index 64% rename from tests/esm-path-mapping/base-url-no-paths/test-ts.ts rename to tests/esm-path-mapping/_todo2/test-ts.ts index bec09a301..f557d8dfd 100644 --- a/tests/esm-path-mapping/base-url-no-paths/test-ts.ts +++ b/tests/esm-path-mapping/_todo2/test-ts.ts @@ -1,14 +1,14 @@ import * as assert from 'assert'; // Import js, jsx, ts at baseUrl -import baseJs from '1-js.js'; -import baseJsx from '2-jsx.js'; -import baseTs from '3-ts.js'; +import baseJs from 'js.js'; +import baseJsx from 'jsx.jsx'; +import baseTs from 'ts.js'; // Import js, jsx, ts under baseUrl -import childJs from 'child/1-js.js'; -import childJsx from 'child/2-jsx.js'; -import childTs from 'child/3-ts.js'; +import childJs from 'child/js.js'; +import childJsx from 'child/jsx.jsx'; +import childTs from 'child/ts.js'; assert.strictEqual(baseJs, 'base/js'); assert.strictEqual(baseJsx, 'base/jsx'); diff --git a/tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx b/tests/esm-path-mapping/_todo2/test-tsx.tsx similarity index 64% rename from tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx rename to tests/esm-path-mapping/_todo2/test-tsx.tsx index bec09a301..f557d8dfd 100644 --- a/tests/esm-path-mapping/base-url-no-paths/test-tsx.tsx +++ b/tests/esm-path-mapping/_todo2/test-tsx.tsx @@ -1,14 +1,14 @@ import * as assert from 'assert'; // Import js, jsx, ts at baseUrl -import baseJs from '1-js.js'; -import baseJsx from '2-jsx.js'; -import baseTs from '3-ts.js'; +import baseJs from 'js.js'; +import baseJsx from 'jsx.jsx'; +import baseTs from 'ts.js'; // Import js, jsx, ts under baseUrl -import childJs from 'child/1-js.js'; -import childJsx from 'child/2-jsx.js'; -import childTs from 'child/3-ts.js'; +import childJs from 'child/js.js'; +import childJsx from 'child/jsx.jsx'; +import childTs from 'child/ts.js'; assert.strictEqual(baseJs, 'base/js'); assert.strictEqual(baseJsx, 'base/jsx'); From 09cc514a73d4a925353b8c40ac699b8f8e1d314f Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 18:43:36 +0700 Subject: [PATCH 38/74] test: refactor again to restore shared examples/node_modules (while maintaining test reuse) ...this is still a bit WIP... --- src/test/path-mapping.spec.ts | 152 +++++++++--------- .../import-node-built-in.ts | 4 - .../base-url-no-paths/import-node-built-in.ts | 4 - .../import-node-built-in.ts | 4 - tests/cjs-path-mapping/base/lodash.ts | 1 + .../cjs-path-mapping/import-node-built-in.ts | 7 + tests/cjs-path-mapping/import-node-modules.ts | 11 ++ .../import-within-node-modules.ts | 9 ++ .../node_modules/depends-on-lodash/index.d.ts | 3 + .../node_modules/depends-on-lodash/index.js | 5 + .../depends-on-lodash}/package.json | 0 .../node_modules/lodash/index.d.ts | 4 + .../node_modules/lodash/index.js | 1 + .../lodash}/package.json | 0 .../some-cjs-dependency/index.d.ts | 4 + .../node_modules/some-cjs-dependency/index.js | 1 + .../some-cjs-dependency}/package.json | 0 .../some-esm-dependency/index.d.ts | 4 + .../node_modules/some-esm-dependency/index.js | 1 + .../some-esm-dependency}/package.json | 0 tests/cjs-path-mapping/package.json | 1 + .../tsconfig-baseurl-only.json} | 2 +- .../tsconfig-star-path.json} | 2 +- ...{tsconfig-base.json => tsconfig.base.json} | 4 +- .../{base-url-and-paths => }/tsconfig.json | 2 +- .../_todo2/import-from-base.ts | 2 +- .../import-node-built-in.ts | 4 - .../base-url-no-paths/import-node-built-in.ts | 4 - .../import-node-built-in.ts | 4 - tests/esm-path-mapping/base/lodash.ts | 1 + .../esm-path-mapping/import-node-built-in.ts | 7 + tests/esm-path-mapping/import-node-modules.ts | 16 ++ .../import-within-node-modules.ts | 9 ++ .../node_modules/depends-on-lodash/index.d.ts | 5 + .../node_modules/depends-on-lodash/index.js | 5 + .../depends-on-lodash}/package.json | 0 .../node_modules/lodash/index.d.ts | 4 + .../node_modules/lodash/index.js | 1 + .../node_modules/lodash/package.json | 1 + .../some-cjs-dependency/index.d.ts | 4 + .../node_modules/some-cjs-dependency/index.js | 1 + .../some-cjs-dependency/package.json | 1 + .../some-esm-dependency/index.d.ts | 4 + .../node_modules/some-esm-dependency/index.js | 1 + .../some-esm-dependency}/package.json | 0 tests/esm-path-mapping/package.json | 3 + .../tsconfig-baseurl-only.json} | 4 +- .../tsconfig-star-path.json} | 4 +- ...{tsconfig-base.json => tsconfig.base.json} | 1 - .../{base-url-and-paths => }/tsconfig.json | 2 +- 50 files changed, 207 insertions(+), 107 deletions(-) delete mode 100644 tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts delete mode 100644 tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts delete mode 100644 tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts create mode 100644 tests/cjs-path-mapping/base/lodash.ts create mode 100644 tests/cjs-path-mapping/import-node-built-in.ts create mode 100644 tests/cjs-path-mapping/import-node-modules.ts create mode 100644 tests/cjs-path-mapping/import-within-node-modules.ts create mode 100644 tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts create mode 100644 tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js rename tests/cjs-path-mapping/{base-url-and-paths => node_modules/depends-on-lodash}/package.json (100%) create mode 100644 tests/cjs-path-mapping/node_modules/lodash/index.d.ts create mode 100644 tests/cjs-path-mapping/node_modules/lodash/index.js rename tests/cjs-path-mapping/{base-url-no-paths => node_modules/lodash}/package.json (100%) create mode 100644 tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts create mode 100644 tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.js rename tests/cjs-path-mapping/{base-url-star-path => node_modules/some-cjs-dependency}/package.json (100%) create mode 100644 tests/cjs-path-mapping/node_modules/some-esm-dependency/index.d.ts create mode 100644 tests/cjs-path-mapping/node_modules/some-esm-dependency/index.js rename tests/{esm-path-mapping/base-url-and-paths => cjs-path-mapping/node_modules/some-esm-dependency}/package.json (100%) create mode 100644 tests/cjs-path-mapping/package.json rename tests/{esm-path-mapping/base-url-no-paths/tsconfig.json => cjs-path-mapping/tsconfig-baseurl-only.json} (77%) rename tests/{esm-path-mapping/base-url-star-path/tsconfig.json => cjs-path-mapping/tsconfig-star-path.json} (82%) rename tests/cjs-path-mapping/{tsconfig-base.json => tsconfig.base.json} (65%) rename tests/cjs-path-mapping/{base-url-and-paths => }/tsconfig.json (88%) delete mode 100644 tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts delete mode 100644 tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts delete mode 100644 tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts create mode 100644 tests/esm-path-mapping/base/lodash.ts create mode 100644 tests/esm-path-mapping/import-node-built-in.ts create mode 100644 tests/esm-path-mapping/import-node-modules.ts create mode 100644 tests/esm-path-mapping/import-within-node-modules.ts create mode 100644 tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/depends-on-lodash/index.js rename tests/esm-path-mapping/{base-url-no-paths => node_modules/depends-on-lodash}/package.json (100%) create mode 100644 tests/esm-path-mapping/node_modules/lodash/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/lodash/index.js create mode 100644 tests/esm-path-mapping/node_modules/lodash/package.json create mode 100644 tests/esm-path-mapping/node_modules/some-cjs-dependency/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/some-cjs-dependency/index.js create mode 100644 tests/esm-path-mapping/node_modules/some-cjs-dependency/package.json create mode 100644 tests/esm-path-mapping/node_modules/some-esm-dependency/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/some-esm-dependency/index.js rename tests/esm-path-mapping/{base-url-star-path => node_modules/some-esm-dependency}/package.json (100%) create mode 100644 tests/esm-path-mapping/package.json rename tests/{cjs-path-mapping/base-url-no-paths/tsconfig.json => esm-path-mapping/tsconfig-baseurl-only.json} (61%) rename tests/{cjs-path-mapping/base-url-star-path/tsconfig.json => esm-path-mapping/tsconfig-star-path.json} (70%) rename tests/esm-path-mapping/{tsconfig-base.json => tsconfig.base.json} (88%) rename tests/esm-path-mapping/{base-url-and-paths => }/tsconfig.json (88%) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 365fce38a..617ef121e 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -13,10 +13,11 @@ import { test } from './testlib'; const execBuilder = ( command: string, moduleDir: string, - projectDir: string + tsConfig: string = 'tsconfig.json' ) => { const partialExec = createExec({ - cwd: join(TEST_DIR, moduleDir, projectDir), + cwd: join(TEST_DIR, moduleDir), + env: { ...process.env, TS_NODE_PROJECT: tsConfig }, }); return (file = 'index.ts') => partialExec(`${command} ${file}`); @@ -32,91 +33,98 @@ const EXEC_BUILDER_PARAMS: Record = { baseDir: 'cjs-path-mapping', command: CMD_TS_NODE_WITHOUT_PROJECT_FLAG, }, - esm: { baseDir: 'esm-path-mapping', command: CMD_ESM_LOADER_WITHOUT_PROJECT }, + esm: { + baseDir: 'esm-path-mapping', + command: CMD_ESM_LOADER_WITHOUT_PROJECT, + }, }; -const PROJECT_CONFIG_DIRS = { - BASE_URL_NO_PATHS: 'base-url-no-paths', - BASE_URL_AND_PATHS: 'base-url-and-paths', - BASE_URL_STAR_PATH: 'base-url-star-path', +const PROJECT_CONFIGS = { + BASE_URL_NO_PATHS: 'tsconfig-baseurl-only.json', + BASE_URL_AND_PATHS: 'tsconfig.json', + BASE_URL_STAR_PATH: 'tsconfig-star-path.json', }; for (const moduleType of MODULE_TYPES) { test.suite(`path mapping ${moduleType}`, (test) => { test.runIf(nodeSupportsEsmHooks || moduleType !== MODULE_TYPE_ESM); + const execBuilderParams = EXEC_BUILDER_PARAMS[moduleType]; - for (const project of Object.values(PROJECT_CONFIG_DIRS)) { + for (const project of Object.values(PROJECT_CONFIGS)) { // Create ts-node runner for this config const exec = execBuilder( - EXEC_BUILDER_PARAMS[moduleType].command, - EXEC_BUILDER_PARAMS[moduleType].baseDir, + execBuilderParams.command, + execBuilderParams.baseDir, project ); - test(`fallback to node built-in with ${project}`, async () => { - const { err } = await exec('import-node-built-in.ts'); - expect(err).toBe(null); + test.suite(`project: ${project}`, (test) => { + test(`fallback to node built-in`, async () => { + const { err } = await exec('import-node-built-in.ts'); + expect(err).toBe(null); + }); + + test(`fallback to node_modules`, async () => { + const { err } = await exec('import-node-modules.ts'); + expect(err).toBe(null); + }); + + test(`imports within node_modules ignore paths`, async () => { + const { err } = await exec('import-within-node-modules.ts'); + expect(err).toBe(null); + }); + + // test('ignore type definitions', async () => { + // const { err } = await exec('ignore-type-definitions'); + // expect(err).toBe(null); + // }); + + // test(`import from baseUrl with ${project}`, async () => { + // const { err } = await exec('import-from-base.ts'); + // expect(err).toBe(null); + // }); + + // test(`import under baseUrl with ${project}`, async () => { + // const { err } = await exec('import-under-base.ts'); + // expect(err).toBe(null); + // }); + + // test(`import from js, js, tsx with ${project}`, async () => { + // const { err } = await exec('import-from-base.ts'); + // expect(err).toBe(null); + // }); + + // test('relative imports should ignore paths', async () => { + // const { err } = await exec('import-relative.ts'); + // expect(err).toBe(null); + // }); + + // test(`import invalid path with ${project}`, async () => { + // const { stderr, err } = await exec('import-non-existing.ts'); + + // // Expect error + // expect(err).toBeTruthy(); + // expect(stderr).toMatch( + // `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` + // ); + + // // Expect tried candidates to be listed + // expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); + // expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); + // }); }); - - // test('fallback to node_modules', async (t) => { - // const { err } = await exec('import-node-modules.ts'); - // expect(err).toBe(null); - // }); - - // test('external modules ignore paths', async () => { - // const { err } = await exec('import-within-node-modules.ts'); - // expect(err).toBe(null); - // }); - - // test('ignore type definitions', async () => { - // const { err } = await exec('ignore-type-definitions'); - // expect(err).toBe(null); - // }); - - // test(`import from baseUrl with ${project}`, async () => { - // const { err } = await exec('import-from-base.ts'); - // expect(err).toBe(null); - // }); - - // test(`import under baseUrl with ${project}`, async () => { - // const { err } = await exec('import-under-base.ts'); - // expect(err).toBe(null); - // }); - - // test(`import from js, js, tsx with ${project}`, async () => { - // const { err } = await exec('import-from-base.ts'); - // expect(err).toBe(null); - // }); - - // test('relative imports should ignore paths', async () => { - // const { err } = await exec('import-relative.ts'); - // expect(err).toBe(null); - // }); - - // test(`import invalid path with ${project}`, async () => { - // const { stderr, err } = await exec('import-non-existing.ts'); - - // // Expect error - // expect(err).toBeTruthy(); - // expect(stderr).toMatch( - // `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - // ); - - // // Expect tried candidates to be listed - // expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); - // expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); - // }); } - // const PROJECTS_WITH_PATHS = [PROJECTS.BASE_URL_AND_PATHS, PROJECTS.BASE_URL_STAR_PATH]; - // for(const project of PROJECTS_WITH_PATHS) { - // // Create ts-node runner for this config - // const exec = execBuilder(project); - - // test(`import specific paths with ${project}`, async () => { - // const { err } = await exec('???'); - // expect(err).toBe(null); - // }); - // } + // // Create ts-node runner config with paths + // const exec = execBuilder( + // execBuilderParams.command, + // execBuilderParams.baseDir, + // PROJECT_CONFIGS.BASE_URL_AND_PATHS + // ); + + // test(`import specific paths`, async () => { + // const { err } = await exec('???'); + // expect(err).toBe(null); + // }); }); } diff --git a/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/cjs-path-mapping/base-url-and-paths/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/cjs-path-mapping/base-url-no-paths/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts b/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/cjs-path-mapping/base-url-star-path/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/base/lodash.ts b/tests/cjs-path-mapping/base/lodash.ts new file mode 100644 index 000000000..aa747374a --- /dev/null +++ b/tests/cjs-path-mapping/base/lodash.ts @@ -0,0 +1 @@ +export default 'lodash-local'; // not the same as node_modules/lodash diff --git a/tests/cjs-path-mapping/import-node-built-in.ts b/tests/cjs-path-mapping/import-node-built-in.ts new file mode 100644 index 000000000..06829ff6d --- /dev/null +++ b/tests/cjs-path-mapping/import-node-built-in.ts @@ -0,0 +1,7 @@ +// Should be able to import node built-ins +const assert = require('assert'); +const { stat } = require('fs'); + +if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts new file mode 100644 index 000000000..d73c388c6 --- /dev/null +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -0,0 +1,11 @@ +// Pre-conditions +const assert = require('assert'); +if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + +// Should be able to import from node_modules +const someCjsDependency = require('some-cjs-dependency'); +// const someEsmDependency = await import('some-esm-dependency'); + +assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); +// assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts new file mode 100644 index 000000000..839715245 --- /dev/null +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -0,0 +1,9 @@ +// Pre-conditions +const assert = require('assert'); +if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + +// Act: import a dependency with transitive dependencies +const { proxyLodash } = require('depends-on-lodash'); + +assert.strictEqual(proxyLodash, 'lodash'); // not our 'lodash-local' diff --git a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts new file mode 100644 index 000000000..33720acad --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts @@ -0,0 +1,3 @@ +declare module 'depends-on-lodash' { + export const proxyLodash = 'lodash' +} diff --git a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js new file mode 100644 index 000000000..a2a19fc78 --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js @@ -0,0 +1,5 @@ +const lodash = require('lodash') + +module.exports = { + proxyLodash: lodash +} diff --git a/tests/cjs-path-mapping/base-url-and-paths/package.json b/tests/cjs-path-mapping/node_modules/depends-on-lodash/package.json similarity index 100% rename from tests/cjs-path-mapping/base-url-and-paths/package.json rename to tests/cjs-path-mapping/node_modules/depends-on-lodash/package.json diff --git a/tests/cjs-path-mapping/node_modules/lodash/index.d.ts b/tests/cjs-path-mapping/node_modules/lodash/index.d.ts new file mode 100644 index 000000000..563853d68 --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/lodash/index.d.ts @@ -0,0 +1,4 @@ +declare module 'lodash' { + const defaultExport = 'lodash' + export default defaultExport +} diff --git a/tests/cjs-path-mapping/node_modules/lodash/index.js b/tests/cjs-path-mapping/node_modules/lodash/index.js new file mode 100644 index 000000000..8cae1154e --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = 'lodash'; diff --git a/tests/cjs-path-mapping/base-url-no-paths/package.json b/tests/cjs-path-mapping/node_modules/lodash/package.json similarity index 100% rename from tests/cjs-path-mapping/base-url-no-paths/package.json rename to tests/cjs-path-mapping/node_modules/lodash/package.json diff --git a/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts new file mode 100644 index 000000000..d4efcfa8b --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts @@ -0,0 +1,4 @@ +declare module 'some-cjs-dependency' { + const defaultExport = 'export-from-some-cjs-dependency' + export default defaultExport +} diff --git a/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.js b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.js new file mode 100644 index 000000000..fcbabb7d6 --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.js @@ -0,0 +1 @@ +module.exports = 'export-from-some-cjs-dependency'; diff --git a/tests/cjs-path-mapping/base-url-star-path/package.json b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/package.json similarity index 100% rename from tests/cjs-path-mapping/base-url-star-path/package.json rename to tests/cjs-path-mapping/node_modules/some-cjs-dependency/package.json diff --git a/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.d.ts b/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.d.ts new file mode 100644 index 000000000..fc659026d --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.d.ts @@ -0,0 +1,4 @@ +declare module 'some-esm-dependency' { + const defaultExport = 'export-from-some-esm-dependency' + export default defaultExport +} diff --git a/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.js b/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.js new file mode 100644 index 000000000..44fe556cc --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/some-esm-dependency/index.js @@ -0,0 +1 @@ +export default 'export-from-some-esm-dependency'; diff --git a/tests/esm-path-mapping/base-url-and-paths/package.json b/tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json similarity index 100% rename from tests/esm-path-mapping/base-url-and-paths/package.json rename to tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json diff --git a/tests/cjs-path-mapping/package.json b/tests/cjs-path-mapping/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/esm-path-mapping/base-url-no-paths/tsconfig.json b/tests/cjs-path-mapping/tsconfig-baseurl-only.json similarity index 77% rename from tests/esm-path-mapping/base-url-no-paths/tsconfig.json rename to tests/cjs-path-mapping/tsconfig-baseurl-only.json index 66fc26ba4..b207a5972 100644 --- a/tests/esm-path-mapping/base-url-no-paths/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig-baseurl-only.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "baseUrl": "./base" diff --git a/tests/esm-path-mapping/base-url-star-path/tsconfig.json b/tests/cjs-path-mapping/tsconfig-star-path.json similarity index 82% rename from tests/esm-path-mapping/base-url-star-path/tsconfig.json rename to tests/cjs-path-mapping/tsconfig-star-path.json index 5eed69a79..cd35ad1eb 100644 --- a/tests/esm-path-mapping/base-url-star-path/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig-star-path.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "baseUrl": "./base", diff --git a/tests/cjs-path-mapping/tsconfig-base.json b/tests/cjs-path-mapping/tsconfig.base.json similarity index 65% rename from tests/cjs-path-mapping/tsconfig-base.json rename to tests/cjs-path-mapping/tsconfig.base.json index fdbae2a30..e8f607d0b 100644 --- a/tests/cjs-path-mapping/tsconfig-base.json +++ b/tests/cjs-path-mapping/tsconfig.base.json @@ -3,7 +3,9 @@ "allowJs": true, "jsx": "react", "module": "CommonJS", - "moduleResolution": "node" + "moduleResolution": "node", + "outDir": "./lib", + "esModuleInterop": true }, "ts-node": { "experimentalPathMapping": "both" diff --git a/tests/cjs-path-mapping/base-url-and-paths/tsconfig.json b/tests/cjs-path-mapping/tsconfig.json similarity index 88% rename from tests/cjs-path-mapping/base-url-and-paths/tsconfig.json rename to tests/cjs-path-mapping/tsconfig.json index b94a78cc7..188139f30 100644 --- a/tests/cjs-path-mapping/base-url-and-paths/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "baseUrl": "./mapped", diff --git a/tests/esm-path-mapping/_todo2/import-from-base.ts b/tests/esm-path-mapping/_todo2/import-from-base.ts index 1d252a564..337ef7e2d 100644 --- a/tests/esm-path-mapping/_todo2/import-from-base.ts +++ b/tests/esm-path-mapping/_todo2/import-from-base.ts @@ -10,7 +10,7 @@ import childJs from 'child/js.js'; import childJsx from 'child/jsx.jsx'; import childTs from 'child/ts.js'; -if (typeof assert !== 'function') +if (typeof assert.strictEqual !== 'function') throw new Error('Pre-condition failed: assert could not be imported'); assert.strictEqual(baseJs, 'base/js'); diff --git a/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts b/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/esm-path-mapping/base-url-and-paths/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts b/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/esm-path-mapping/base-url-no-paths/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts b/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts deleted file mode 100644 index 39fe100e1..000000000 --- a/tests/esm-path-mapping/base-url-star-path/import-node-built-in.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/base/lodash.ts b/tests/esm-path-mapping/base/lodash.ts new file mode 100644 index 000000000..aa747374a --- /dev/null +++ b/tests/esm-path-mapping/base/lodash.ts @@ -0,0 +1 @@ +export default 'lodash-local'; // not the same as node_modules/lodash diff --git a/tests/esm-path-mapping/import-node-built-in.ts b/tests/esm-path-mapping/import-node-built-in.ts new file mode 100644 index 000000000..902fd4baf --- /dev/null +++ b/tests/esm-path-mapping/import-node-built-in.ts @@ -0,0 +1,7 @@ +// Should be able to import node built-ins +import * as assert from 'assert'; +import { stat } from 'fs'; + +if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); +assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/import-node-modules.ts b/tests/esm-path-mapping/import-node-modules.ts new file mode 100644 index 000000000..b498dd4d6 --- /dev/null +++ b/tests/esm-path-mapping/import-node-modules.ts @@ -0,0 +1,16 @@ +// Should be able to import from node_modules +import someCjsDependency from 'some-cjs-dependency'; +import someEsmDependency from 'some-esm-dependency'; + +const main = async (): Promise => { + // Pre-conditions + const assert: any = await import('assert'); + if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + + // Assertions + assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); + assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); +}; + +main(); diff --git a/tests/esm-path-mapping/import-within-node-modules.ts b/tests/esm-path-mapping/import-within-node-modules.ts new file mode 100644 index 000000000..8ea71608d --- /dev/null +++ b/tests/esm-path-mapping/import-within-node-modules.ts @@ -0,0 +1,9 @@ +// Pre-conditions +import * as assert from 'assert'; +if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + +// Should ignore paths when importing inside node_modules +import dependsOnLodash from 'depends-on-lodash'; + +assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' diff --git a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts new file mode 100644 index 000000000..d15aae6c0 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts @@ -0,0 +1,5 @@ +declare module 'depends-on-lodash' { + export default { + proxyLodash = 'lodash' + } +} diff --git a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js new file mode 100644 index 000000000..f3b82f8b6 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js @@ -0,0 +1,5 @@ +import lodash from 'lodash' + +export default { + proxyLodash: lodash +} diff --git a/tests/esm-path-mapping/base-url-no-paths/package.json b/tests/esm-path-mapping/node_modules/depends-on-lodash/package.json similarity index 100% rename from tests/esm-path-mapping/base-url-no-paths/package.json rename to tests/esm-path-mapping/node_modules/depends-on-lodash/package.json diff --git a/tests/esm-path-mapping/node_modules/lodash/index.d.ts b/tests/esm-path-mapping/node_modules/lodash/index.d.ts new file mode 100644 index 000000000..563853d68 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/index.d.ts @@ -0,0 +1,4 @@ +declare module 'lodash' { + const defaultExport = 'lodash' + export default defaultExport +} diff --git a/tests/esm-path-mapping/node_modules/lodash/index.js b/tests/esm-path-mapping/node_modules/lodash/index.js new file mode 100644 index 000000000..8cae1154e --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = 'lodash'; diff --git a/tests/esm-path-mapping/node_modules/lodash/package.json b/tests/esm-path-mapping/node_modules/lodash/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/lodash/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.d.ts b/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.d.ts new file mode 100644 index 000000000..d4efcfa8b --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.d.ts @@ -0,0 +1,4 @@ +declare module 'some-cjs-dependency' { + const defaultExport = 'export-from-some-cjs-dependency' + export default defaultExport +} diff --git a/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.js b/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.js new file mode 100644 index 000000000..fcbabb7d6 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-cjs-dependency/index.js @@ -0,0 +1 @@ +module.exports = 'export-from-some-cjs-dependency'; diff --git a/tests/esm-path-mapping/node_modules/some-cjs-dependency/package.json b/tests/esm-path-mapping/node_modules/some-cjs-dependency/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-cjs-dependency/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/esm-path-mapping/node_modules/some-esm-dependency/index.d.ts b/tests/esm-path-mapping/node_modules/some-esm-dependency/index.d.ts new file mode 100644 index 000000000..fc659026d --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-esm-dependency/index.d.ts @@ -0,0 +1,4 @@ +declare module 'some-esm-dependency' { + const defaultExport = 'export-from-some-esm-dependency' + export default defaultExport +} diff --git a/tests/esm-path-mapping/node_modules/some-esm-dependency/index.js b/tests/esm-path-mapping/node_modules/some-esm-dependency/index.js new file mode 100644 index 000000000..44fe556cc --- /dev/null +++ b/tests/esm-path-mapping/node_modules/some-esm-dependency/index.js @@ -0,0 +1 @@ +export default 'export-from-some-esm-dependency'; diff --git a/tests/esm-path-mapping/base-url-star-path/package.json b/tests/esm-path-mapping/node_modules/some-esm-dependency/package.json similarity index 100% rename from tests/esm-path-mapping/base-url-star-path/package.json rename to tests/esm-path-mapping/node_modules/some-esm-dependency/package.json diff --git a/tests/esm-path-mapping/package.json b/tests/esm-path-mapping/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/tests/esm-path-mapping/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/tests/cjs-path-mapping/base-url-no-paths/tsconfig.json b/tests/esm-path-mapping/tsconfig-baseurl-only.json similarity index 61% rename from tests/cjs-path-mapping/base-url-no-paths/tsconfig.json rename to tests/esm-path-mapping/tsconfig-baseurl-only.json index 452e05c2d..b207a5972 100644 --- a/tests/cjs-path-mapping/base-url-no-paths/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-only.json @@ -1,7 +1,7 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./mapped" + "baseUrl": "./base" } } diff --git a/tests/cjs-path-mapping/base-url-star-path/tsconfig.json b/tests/esm-path-mapping/tsconfig-star-path.json similarity index 70% rename from tests/cjs-path-mapping/base-url-star-path/tsconfig.json rename to tests/esm-path-mapping/tsconfig-star-path.json index 507b279d9..cd35ad1eb 100644 --- a/tests/cjs-path-mapping/base-url-star-path/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig-star-path.json @@ -1,8 +1,8 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./mapped", + "baseUrl": "./base", "paths": { "*": ["./level-2/*"] } diff --git a/tests/esm-path-mapping/tsconfig-base.json b/tests/esm-path-mapping/tsconfig.base.json similarity index 88% rename from tests/esm-path-mapping/tsconfig-base.json rename to tests/esm-path-mapping/tsconfig.base.json index 3f991f0a5..0c2b6c5b4 100644 --- a/tests/esm-path-mapping/tsconfig-base.json +++ b/tests/esm-path-mapping/tsconfig.base.json @@ -4,7 +4,6 @@ "jsx": "react", "module": "ESNext", "moduleResolution": "node", - "noEmit": true, "outDir": "./lib" } } diff --git a/tests/esm-path-mapping/base-url-and-paths/tsconfig.json b/tests/esm-path-mapping/tsconfig.json similarity index 88% rename from tests/esm-path-mapping/base-url-and-paths/tsconfig.json rename to tests/esm-path-mapping/tsconfig.json index a11c8fd28..77751ab8a 100644 --- a/tests/esm-path-mapping/base-url-and-paths/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base.json", + "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { "baseUrl": "./base", From 70d9bf510c98eea6081d3103441fe34ec1e60787 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 22:48:03 +0700 Subject: [PATCH 39/74] import `assert` async so we can assert pre-conditions (& so sut import fails first) --- tests/cjs-path-mapping/import-node-modules.ts | 19 ++++++++++++------- .../import-within-node-modules.ts | 19 ++++++++++++------- .../import-within-node-modules.ts | 17 +++++++++++------ 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts index d73c388c6..d2766d98e 100644 --- a/tests/cjs-path-mapping/import-node-modules.ts +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -1,11 +1,16 @@ -// Pre-conditions -const assert = require('assert'); -if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); - // Should be able to import from node_modules const someCjsDependency = require('some-cjs-dependency'); // const someEsmDependency = await import('some-esm-dependency'); -assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); -// assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); +const main = async (): Promise => { + // Pre-conditions + const assert: any = require('assert'); + if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + + // Assertions + assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); + // assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); +}; + +main(); diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts index 839715245..825a96671 100644 --- a/tests/cjs-path-mapping/import-within-node-modules.ts +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -1,9 +1,14 @@ -// Pre-conditions -const assert = require('assert'); -if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); +// Should ignore paths when importing inside node_modules +const dependsOnLodash = require('depends-on-lodash'); -// Act: import a dependency with transitive dependencies -const { proxyLodash } = require('depends-on-lodash'); +const main = async (): Promise => { + // Pre-conditions + const assert: any = require('assert'); + if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); -assert.strictEqual(proxyLodash, 'lodash'); // not our 'lodash-local' + // Assertions + assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' +}; + +main(); diff --git a/tests/esm-path-mapping/import-within-node-modules.ts b/tests/esm-path-mapping/import-within-node-modules.ts index 8ea71608d..2d73bad28 100644 --- a/tests/esm-path-mapping/import-within-node-modules.ts +++ b/tests/esm-path-mapping/import-within-node-modules.ts @@ -1,9 +1,14 @@ -// Pre-conditions -import * as assert from 'assert'; -if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); - // Should ignore paths when importing inside node_modules import dependsOnLodash from 'depends-on-lodash'; -assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' +const main = async (): Promise => { + // Pre-conditions + const assert: any = await import('assert'); + if (typeof assert.strictEqual !== 'function') + throw new Error('Pre-condition failed: assert could not be imported'); + + // Assertions + assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' +}; + +main(); From e50abd4eae604542d1e21509819cc1978ed76a28 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 22:48:15 +0700 Subject: [PATCH 40/74] sync tsconfigs --- tests/cjs-path-mapping/tsconfig.base.json | 3 +-- tests/esm-path-mapping/tsconfig.base.json | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/cjs-path-mapping/tsconfig.base.json b/tests/cjs-path-mapping/tsconfig.base.json index e8f607d0b..4be85826a 100644 --- a/tests/cjs-path-mapping/tsconfig.base.json +++ b/tests/cjs-path-mapping/tsconfig.base.json @@ -4,8 +4,7 @@ "jsx": "react", "module": "CommonJS", "moduleResolution": "node", - "outDir": "./lib", - "esModuleInterop": true + "outDir": "./lib" }, "ts-node": { "experimentalPathMapping": "both" diff --git a/tests/esm-path-mapping/tsconfig.base.json b/tests/esm-path-mapping/tsconfig.base.json index 0c2b6c5b4..5bb0f0a03 100644 --- a/tests/esm-path-mapping/tsconfig.base.json +++ b/tests/esm-path-mapping/tsconfig.base.json @@ -5,5 +5,8 @@ "module": "ESNext", "moduleResolution": "node", "outDir": "./lib" + }, + "ts-node": { + "experimentalPathMapping": "both" } } From 73d6acc542f21e5a2b4fa5040c84e65c09a276f8 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 23:09:21 +0700 Subject: [PATCH 41/74] fix error message in `import-node-built-in` (it's not a precondition) --- tests/cjs-path-mapping/import-node-built-in.ts | 2 +- tests/esm-path-mapping/import-node-built-in.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cjs-path-mapping/import-node-built-in.ts b/tests/cjs-path-mapping/import-node-built-in.ts index 06829ff6d..753708ecb 100644 --- a/tests/cjs-path-mapping/import-node-built-in.ts +++ b/tests/cjs-path-mapping/import-node-built-in.ts @@ -3,5 +3,5 @@ const assert = require('assert'); const { stat } = require('fs'); if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); + throw new Error('Failed to import `assert`'); assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/import-node-built-in.ts b/tests/esm-path-mapping/import-node-built-in.ts index 902fd4baf..d206b5482 100644 --- a/tests/esm-path-mapping/import-node-built-in.ts +++ b/tests/esm-path-mapping/import-node-built-in.ts @@ -3,5 +3,5 @@ import * as assert from 'assert'; import { stat } from 'fs'; if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); + throw new Error('Failed to import `assert`'); assert.strictEqual(typeof stat, 'function'); From d02cbed0dd3f67bf5f01df8d229834e8929ffc3a Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 14 Mar 2022 23:10:08 +0700 Subject: [PATCH 42/74] try to clean up cjs imports :/ --- tests/cjs-path-mapping/import-node-built-in.ts | 4 ++-- tests/cjs-path-mapping/import-node-modules.ts | 8 ++++++-- tests/cjs-path-mapping/import-within-node-modules.ts | 2 +- .../node_modules/some-cjs-dependency/index.d.ts | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tests/cjs-path-mapping/import-node-built-in.ts b/tests/cjs-path-mapping/import-node-built-in.ts index 753708ecb..d206b5482 100644 --- a/tests/cjs-path-mapping/import-node-built-in.ts +++ b/tests/cjs-path-mapping/import-node-built-in.ts @@ -1,6 +1,6 @@ // Should be able to import node built-ins -const assert = require('assert'); -const { stat } = require('fs'); +import * as assert from 'assert'; +import { stat } from 'fs'; if (typeof assert.strictEqual !== 'function') throw new Error('Failed to import `assert`'); diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts index d2766d98e..1d44469d5 100644 --- a/tests/cjs-path-mapping/import-node-modules.ts +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -1,8 +1,12 @@ // Should be able to import from node_modules -const someCjsDependency = require('some-cjs-dependency'); -// const someEsmDependency = await import('some-esm-dependency'); +import someCjsDependency = require('some-cjs-dependency'); +// TODO: Import an ESM dep statically or... +// import someEsmDependency from 'some-esm-dependency' const main = async (): Promise => { + // TODO: ...or dynamically + // const someEsmDependency = await import('some-esm-dependency'); + // Pre-conditions const assert: any = require('assert'); if (typeof assert.strictEqual !== 'function') diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts index 825a96671..b2a4fbcc6 100644 --- a/tests/cjs-path-mapping/import-within-node-modules.ts +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -1,5 +1,5 @@ // Should ignore paths when importing inside node_modules -const dependsOnLodash = require('depends-on-lodash'); +import dependsOnLodash = require('depends-on-lodash'); const main = async (): Promise => { // Pre-conditions diff --git a/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts index d4efcfa8b..f8bd3426e 100644 --- a/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts +++ b/tests/cjs-path-mapping/node_modules/some-cjs-dependency/index.d.ts @@ -1,4 +1,4 @@ declare module 'some-cjs-dependency' { const defaultExport = 'export-from-some-cjs-dependency' - export default defaultExport + export = defaultExport } From 283309d13a4e762abe3a6a297af9ba9b97925165 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:15:26 +0700 Subject: [PATCH 43/74] simplify tests --- src/test/path-mapping.spec.ts | 22 +++++++++---------- .../cjs-path-mapping/import-node-built-in.ts | 3 +-- tests/cjs-path-mapping/import-node-modules.ts | 2 -- .../import-within-node-modules.ts | 14 ++++-------- .../esm-path-mapping/import-node-built-in.ts | 3 +-- tests/esm-path-mapping/import-node-modules.ts | 16 +++++--------- .../import-within-node-modules.ts | 14 ++++-------- 7 files changed, 26 insertions(+), 48 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 617ef121e..b21ee0bde 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -1,4 +1,3 @@ -import * as expect from 'expect'; import { join } from 'path'; import { createExec } from './exec-helpers'; @@ -20,7 +19,11 @@ const execBuilder = ( env: { ...process.env, TS_NODE_PROJECT: tsConfig }, }); - return (file = 'index.ts') => partialExec(`${command} ${file}`); + return (file = 'index.ts', throwErrors = true) => + partialExec(`${command} ${file}`).then((res) => { + if (throwErrors && res.err) throw res.err; + return res; + }); }; type ModuleType = 'cjs' | 'esm'; @@ -59,19 +62,16 @@ for (const moduleType of MODULE_TYPES) { ); test.suite(`project: ${project}`, (test) => { - test(`fallback to node built-in`, async () => { - const { err } = await exec('import-node-built-in.ts'); - expect(err).toBe(null); + test(`fallback to node built-in`, async (t) => { + await t.notThrowsAsync(exec('import-node-built-in.ts')); }); - test(`fallback to node_modules`, async () => { - const { err } = await exec('import-node-modules.ts'); - expect(err).toBe(null); + test(`fallback to node_modules`, async (t) => { + await t.notThrowsAsync(exec('import-node-modules.ts')); }); - test(`imports within node_modules ignore paths`, async () => { - const { err } = await exec('import-within-node-modules.ts'); - expect(err).toBe(null); + test(`imports within node_modules ignore paths`, async (t) => { + await t.notThrowsAsync(exec('import-within-node-modules.ts')); }); // test('ignore type definitions', async () => { diff --git a/tests/cjs-path-mapping/import-node-built-in.ts b/tests/cjs-path-mapping/import-node-built-in.ts index d206b5482..08878447a 100644 --- a/tests/cjs-path-mapping/import-node-built-in.ts +++ b/tests/cjs-path-mapping/import-node-built-in.ts @@ -2,6 +2,5 @@ import * as assert from 'assert'; import { stat } from 'fs'; -if (typeof assert.strictEqual !== 'function') - throw new Error('Failed to import `assert`'); +// Assertions assert.strictEqual(typeof stat, 'function'); diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts index 1d44469d5..4cfc5341f 100644 --- a/tests/cjs-path-mapping/import-node-modules.ts +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -9,8 +9,6 @@ const main = async (): Promise => { // Pre-conditions const assert: any = require('assert'); - if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); // Assertions assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts index b2a4fbcc6..9cbf17400 100644 --- a/tests/cjs-path-mapping/import-within-node-modules.ts +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -1,14 +1,8 @@ // Should ignore paths when importing inside node_modules import dependsOnLodash = require('depends-on-lodash'); -const main = async (): Promise => { - // Pre-conditions - const assert: any = require('assert'); - if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); +// Pre-conditions +import assert = require('assert'); - // Assertions - assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' -}; - -main(); +// Assertions +assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' diff --git a/tests/esm-path-mapping/import-node-built-in.ts b/tests/esm-path-mapping/import-node-built-in.ts index d206b5482..08878447a 100644 --- a/tests/esm-path-mapping/import-node-built-in.ts +++ b/tests/esm-path-mapping/import-node-built-in.ts @@ -2,6 +2,5 @@ import * as assert from 'assert'; import { stat } from 'fs'; -if (typeof assert.strictEqual !== 'function') - throw new Error('Failed to import `assert`'); +// Assertions assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping/import-node-modules.ts b/tests/esm-path-mapping/import-node-modules.ts index b498dd4d6..ed4467b82 100644 --- a/tests/esm-path-mapping/import-node-modules.ts +++ b/tests/esm-path-mapping/import-node-modules.ts @@ -2,15 +2,9 @@ import someCjsDependency from 'some-cjs-dependency'; import someEsmDependency from 'some-esm-dependency'; -const main = async (): Promise => { - // Pre-conditions - const assert: any = await import('assert'); - if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); +// Pre-conditions +import * as assert from 'assert'; - // Assertions - assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); - assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); -}; - -main(); +// Assertions +assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); +assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); diff --git a/tests/esm-path-mapping/import-within-node-modules.ts b/tests/esm-path-mapping/import-within-node-modules.ts index 2d73bad28..5f7869504 100644 --- a/tests/esm-path-mapping/import-within-node-modules.ts +++ b/tests/esm-path-mapping/import-within-node-modules.ts @@ -1,14 +1,8 @@ // Should ignore paths when importing inside node_modules import dependsOnLodash from 'depends-on-lodash'; -const main = async (): Promise => { - // Pre-conditions - const assert: any = await import('assert'); - if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); +// Pre-conditions +import * as assert from 'assert'; - // Assertions - assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' -}; - -main(); +// Assertions +assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' From f2e2f652afce5ebf263f1f3ea3ec4925f7d820dd Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:28:24 +0700 Subject: [PATCH 44/74] test: restore "ignore type definition" tests --- src/test/path-mapping.spec.ts | 7 +++---- tests/cjs-path-mapping/base/ambient.d.ts | 4 ++++ tests/cjs-path-mapping/ignore-type-definitions.ts | 8 ++++++++ tests/cjs-path-mapping/node_modules/ambient/index.d.ts | 4 ++++ tests/cjs-path-mapping/node_modules/ambient/index.js | 1 + tests/cjs-path-mapping/node_modules/ambient/package.json | 1 + tests/esm-path-mapping/_todo2/ambient.d.ts | 4 ---- tests/esm-path-mapping/_todo2/ignore-type-definitions.ts | 6 ------ .../_todo2/node_modules/ambient/index.d.ts | 4 ---- .../esm-path-mapping/_todo2/node_modules/ambient/index.js | 1 - .../_todo2/node_modules/ambient/package.json | 3 --- .../_todo2/node_modules/lodash/package.json | 3 --- tests/esm-path-mapping/base/ambient.d.ts | 4 ++++ tests/esm-path-mapping/ignore-type-definitions.ts | 8 ++++++++ tests/esm-path-mapping/node_modules/ambient/index.d.ts | 4 ++++ tests/esm-path-mapping/node_modules/ambient/index.js | 1 + tests/esm-path-mapping/node_modules/ambient/package.json | 1 + 17 files changed, 39 insertions(+), 25 deletions(-) create mode 100644 tests/cjs-path-mapping/base/ambient.d.ts create mode 100644 tests/cjs-path-mapping/ignore-type-definitions.ts create mode 100644 tests/cjs-path-mapping/node_modules/ambient/index.d.ts create mode 100644 tests/cjs-path-mapping/node_modules/ambient/index.js create mode 100644 tests/cjs-path-mapping/node_modules/ambient/package.json delete mode 100644 tests/esm-path-mapping/_todo2/ambient.d.ts delete mode 100644 tests/esm-path-mapping/_todo2/ignore-type-definitions.ts delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/ambient/index.js delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/ambient/package.json delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/lodash/package.json create mode 100644 tests/esm-path-mapping/base/ambient.d.ts create mode 100644 tests/esm-path-mapping/ignore-type-definitions.ts create mode 100644 tests/esm-path-mapping/node_modules/ambient/index.d.ts create mode 100644 tests/esm-path-mapping/node_modules/ambient/index.js create mode 100644 tests/esm-path-mapping/node_modules/ambient/package.json diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index b21ee0bde..af39c4462 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -74,10 +74,9 @@ for (const moduleType of MODULE_TYPES) { await t.notThrowsAsync(exec('import-within-node-modules.ts')); }); - // test('ignore type definitions', async () => { - // const { err } = await exec('ignore-type-definitions'); - // expect(err).toBe(null); - // }); + test('ignore type definitions', async (t) => { + await t.notThrowsAsync(exec('ignore-type-definitions.ts')); + }); // test(`import from baseUrl with ${project}`, async () => { // const { err } = await exec('import-from-base.ts'); diff --git a/tests/cjs-path-mapping/base/ambient.d.ts b/tests/cjs-path-mapping/base/ambient.d.ts new file mode 100644 index 000000000..71fdb63fc --- /dev/null +++ b/tests/cjs-path-mapping/base/ambient.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const defaultExport = 'ambient-local'; // not the same node_modules/ambient + export default defaultExport; +} diff --git a/tests/cjs-path-mapping/ignore-type-definitions.ts b/tests/cjs-path-mapping/ignore-type-definitions.ts new file mode 100644 index 000000000..27a0b1e61 --- /dev/null +++ b/tests/cjs-path-mapping/ignore-type-definitions.ts @@ -0,0 +1,8 @@ +// Should ignore local ambient.d.ts +import ambient = require('ambient'); + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(ambient, 'ambient'); // not our 'local-ambient' diff --git a/tests/cjs-path-mapping/node_modules/ambient/index.d.ts b/tests/cjs-path-mapping/node_modules/ambient/index.d.ts new file mode 100644 index 000000000..0d8c7c450 --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/ambient/index.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const defaultExport = 'ambient'; + export default defaultExport; +} diff --git a/tests/cjs-path-mapping/node_modules/ambient/index.js b/tests/cjs-path-mapping/node_modules/ambient/index.js new file mode 100644 index 000000000..4b25619bb --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/ambient/index.js @@ -0,0 +1 @@ +module.exports = 'ambient'; diff --git a/tests/cjs-path-mapping/node_modules/ambient/package.json b/tests/cjs-path-mapping/node_modules/ambient/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/cjs-path-mapping/node_modules/ambient/package.json @@ -0,0 +1 @@ +{} diff --git a/tests/esm-path-mapping/_todo2/ambient.d.ts b/tests/esm-path-mapping/_todo2/ambient.d.ts deleted file mode 100644 index 2178958a4..000000000 --- a/tests/esm-path-mapping/_todo2/ambient.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'ambient' { - const def = 'local-ambient'; // not the same as in node_modules - export default def; -} diff --git a/tests/esm-path-mapping/_todo2/ignore-type-definitions.ts b/tests/esm-path-mapping/_todo2/ignore-type-definitions.ts deleted file mode 100644 index 61acb44a5..000000000 --- a/tests/esm-path-mapping/_todo2/ignore-type-definitions.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as assert from 'assert'; - -// Import should ignore .d.ts -import ambient from 'ambient'; - -assert.strictEqual(ambient, 'ambient'); diff --git a/tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts deleted file mode 100644 index e9086db62..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/ambient/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'ambient' { - const def = 'ambient'; - export default def; -} diff --git a/tests/esm-path-mapping/_todo2/node_modules/ambient/index.js b/tests/esm-path-mapping/_todo2/node_modules/ambient/index.js deleted file mode 100644 index 755c3b16d..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/ambient/index.js +++ /dev/null @@ -1 +0,0 @@ -export default 'ambient'; diff --git a/tests/esm-path-mapping/_todo2/node_modules/ambient/package.json b/tests/esm-path-mapping/_todo2/node_modules/ambient/package.json deleted file mode 100644 index 3dbc1ca59..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/ambient/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/tests/esm-path-mapping/_todo2/node_modules/lodash/package.json b/tests/esm-path-mapping/_todo2/node_modules/lodash/package.json deleted file mode 100644 index 3dbc1ca59..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/lodash/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/tests/esm-path-mapping/base/ambient.d.ts b/tests/esm-path-mapping/base/ambient.d.ts new file mode 100644 index 000000000..71fdb63fc --- /dev/null +++ b/tests/esm-path-mapping/base/ambient.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const defaultExport = 'ambient-local'; // not the same node_modules/ambient + export default defaultExport; +} diff --git a/tests/esm-path-mapping/ignore-type-definitions.ts b/tests/esm-path-mapping/ignore-type-definitions.ts new file mode 100644 index 000000000..612cc6f3f --- /dev/null +++ b/tests/esm-path-mapping/ignore-type-definitions.ts @@ -0,0 +1,8 @@ +// Should ignore local ambient.d.ts +import ambient from 'ambient'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(ambient, 'ambient'); // not our 'local-ambient' diff --git a/tests/esm-path-mapping/node_modules/ambient/index.d.ts b/tests/esm-path-mapping/node_modules/ambient/index.d.ts new file mode 100644 index 000000000..0d8c7c450 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/index.d.ts @@ -0,0 +1,4 @@ +declare module 'ambient' { + const defaultExport = 'ambient'; + export default defaultExport; +} diff --git a/tests/esm-path-mapping/node_modules/ambient/index.js b/tests/esm-path-mapping/node_modules/ambient/index.js new file mode 100644 index 000000000..4b25619bb --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/index.js @@ -0,0 +1 @@ +module.exports = 'ambient'; diff --git a/tests/esm-path-mapping/node_modules/ambient/package.json b/tests/esm-path-mapping/node_modules/ambient/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/esm-path-mapping/node_modules/ambient/package.json @@ -0,0 +1 @@ +{} From 93ac2ac9285323623712e1da7b7ccee14e6317c0 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:28:53 +0700 Subject: [PATCH 45/74] delete obsolete examples --- tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts | 4 ---- tests/esm-path-mapping/_todo2/node_modules/lodash/index.js | 1 - .../esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts | 4 ---- tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js | 4 ---- .../_todo2/node_modules/some-lib/package.json | 3 --- 5 files changed, 16 deletions(-) delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/lodash/index.js delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js delete mode 100644 tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json diff --git a/tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts deleted file mode 100644 index dc010c660..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/lodash/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'lodash' { - const def = 'lodash' - export default def -} diff --git a/tests/esm-path-mapping/_todo2/node_modules/lodash/index.js b/tests/esm-path-mapping/_todo2/node_modules/lodash/index.js deleted file mode 100644 index e701c9209..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/lodash/index.js +++ /dev/null @@ -1 +0,0 @@ -export default 'lodash'; diff --git a/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts b/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts deleted file mode 100644 index 619adcb1c..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'some-lib' { - const def = 'some-lib' - export default def -} diff --git a/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js b/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js deleted file mode 100644 index c61f35ad1..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/some-lib/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import lodash from 'lodash' - -export default 'some-lib'; -export const lodash; diff --git a/tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json b/tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json deleted file mode 100644 index 3dbc1ca59..000000000 --- a/tests/esm-path-mapping/_todo2/node_modules/some-lib/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} From bf7bfcd7446073d20b369d9514be8ed6b48e1810 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:29:24 +0700 Subject: [PATCH 46/74] fix star paths --- tests/cjs-path-mapping/tsconfig-star-path.json | 4 ++-- tests/esm-path-mapping/tsconfig-star-path.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/cjs-path-mapping/tsconfig-star-path.json b/tests/cjs-path-mapping/tsconfig-star-path.json index cd35ad1eb..79eac9ede 100644 --- a/tests/cjs-path-mapping/tsconfig-star-path.json +++ b/tests/cjs-path-mapping/tsconfig-star-path.json @@ -2,9 +2,9 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./base", + "baseUrl": "./", "paths": { - "*": ["./level-2/*"] + "*": ["./base/*"] } } } diff --git a/tests/esm-path-mapping/tsconfig-star-path.json b/tests/esm-path-mapping/tsconfig-star-path.json index cd35ad1eb..79eac9ede 100644 --- a/tests/esm-path-mapping/tsconfig-star-path.json +++ b/tests/esm-path-mapping/tsconfig-star-path.json @@ -2,9 +2,9 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./base", + "baseUrl": "./", "paths": { - "*": ["./level-2/*"] + "*": ["./base/*"] } } } From c26b9ddc2f49709cfca197387b93d2387bb40a67 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:32:43 +0700 Subject: [PATCH 47/74] move old tests a bit more out of the way --- .../{cjs-path-mapping/_todo => cjs-path-mapping-todo}/index-js.js | 0 .../_todo => cjs-path-mapping-todo}/index-tsx.tsx | 0 tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/index.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped-not-found.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/1-foo.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/1-jsx.jsx | 0 .../_todo => cjs-path-mapping-todo}/mapped/2-foo.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/2-specific-foo.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/2a-bar.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/2a-foo.ts | 0 .../_todo => cjs-path-mapping-todo}/mapped/2a-js.js | 0 .../_todo => cjs-path-mapping-todo}/mapped/static.ts | 0 .../_todo => cjs-path-mapping-todo}/package.json | 0 .../_todo => cjs-path-mapping-todo}/tsconfig.json | 0 .../_todo => esm-path-mapping-todo1}/baseurl-star-path.ts | 0 .../_todo => esm-path-mapping-todo1}/built-in-star-path.ts | 0 .../_todo => esm-path-mapping-todo1}/index-js.js | 0 .../_todo => esm-path-mapping-todo1}/index-tsx.tsx | 0 tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/index.ts | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/1-foo.ts | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/1-jsx.jsx | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/2-foo.ts | 0 .../level-1/level-2/2-specific-foo.ts | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/2a-bar.ts | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/2a-foo.ts | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/2a-js.js | 0 .../_todo => esm-path-mapping-todo1}/level-1/level-2/static.ts | 0 .../_todo => esm-path-mapping-todo1}/mapped-not-found.ts | 0 .../_todo => esm-path-mapping-todo1}/node-modules-import.ts | 0 .../_todo => esm-path-mapping-todo1}/node-modules-star-path.ts | 0 .../_todo => esm-path-mapping-todo1}/path-base-relative.ts | 0 .../_todo => esm-path-mapping-todo1}/path-relative.ts | 0 .../tsconfig-baseurl-star-path.json | 0 .../_todo => esm-path-mapping-todo1}/tsconfig-lodash-path.json | 0 .../_todo => esm-path-mapping-todo1}/tsconfig.json | 0 .../_todo2 => esm-path-mapping-todo2}/base/child/js.js | 0 .../_todo2 => esm-path-mapping-todo2}/base/child/jsx.jsx | 0 .../_todo2 => esm-path-mapping-todo2}/base/child/ts.ts | 0 .../_todo2 => esm-path-mapping-todo2}/base/js.js | 0 .../_todo2 => esm-path-mapping-todo2}/base/jsx.jsx | 0 .../_todo2 => esm-path-mapping-todo2}/base/ts.ts | 0 .../_todo2 => esm-path-mapping-todo2}/import-from-base.ts | 0 .../_todo2 => esm-path-mapping-todo2}/test-js.js | 0 .../_todo2 => esm-path-mapping-todo2}/test-jsx.jsx | 0 .../_todo2 => esm-path-mapping-todo2}/test-ts.ts | 0 .../_todo2 => esm-path-mapping-todo2}/test-tsx.tsx | 0 46 files changed, 0 insertions(+), 0 deletions(-) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/index-js.js (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/index-tsx.tsx (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/index.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped-not-found.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/1-foo.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/1-jsx.jsx (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/2-foo.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/2-specific-foo.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/2a-bar.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/2a-foo.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/2a-js.js (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/mapped/static.ts (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/package.json (100%) rename tests/{cjs-path-mapping/_todo => cjs-path-mapping-todo}/tsconfig.json (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/baseurl-star-path.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/built-in-star-path.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/index-js.js (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/index-tsx.tsx (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/index.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/1-foo.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/1-jsx.jsx (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/2-foo.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/2-specific-foo.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/2a-bar.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/2a-foo.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/2a-js.js (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/level-1/level-2/static.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/mapped-not-found.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/node-modules-import.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/node-modules-star-path.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/path-base-relative.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/path-relative.ts (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/tsconfig-baseurl-star-path.json (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/tsconfig-lodash-path.json (100%) rename tests/{esm-path-mapping/_todo => esm-path-mapping-todo1}/tsconfig.json (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/child/js.js (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/child/jsx.jsx (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/child/ts.ts (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/js.js (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/jsx.jsx (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/base/ts.ts (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/import-from-base.ts (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/test-js.js (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/test-jsx.jsx (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/test-ts.ts (100%) rename tests/{esm-path-mapping/_todo2 => esm-path-mapping-todo2}/test-tsx.tsx (100%) diff --git a/tests/cjs-path-mapping/_todo/index-js.js b/tests/cjs-path-mapping-todo/index-js.js similarity index 100% rename from tests/cjs-path-mapping/_todo/index-js.js rename to tests/cjs-path-mapping-todo/index-js.js diff --git a/tests/cjs-path-mapping/_todo/index-tsx.tsx b/tests/cjs-path-mapping-todo/index-tsx.tsx similarity index 100% rename from tests/cjs-path-mapping/_todo/index-tsx.tsx rename to tests/cjs-path-mapping-todo/index-tsx.tsx diff --git a/tests/cjs-path-mapping/_todo/index.ts b/tests/cjs-path-mapping-todo/index.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/index.ts rename to tests/cjs-path-mapping-todo/index.ts diff --git a/tests/cjs-path-mapping/_todo/mapped-not-found.ts b/tests/cjs-path-mapping-todo/mapped-not-found.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped-not-found.ts rename to tests/cjs-path-mapping-todo/mapped-not-found.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/1-foo.ts b/tests/cjs-path-mapping-todo/mapped/1-foo.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/1-foo.ts rename to tests/cjs-path-mapping-todo/mapped/1-foo.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/1-jsx.jsx b/tests/cjs-path-mapping-todo/mapped/1-jsx.jsx similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/1-jsx.jsx rename to tests/cjs-path-mapping-todo/mapped/1-jsx.jsx diff --git a/tests/cjs-path-mapping/_todo/mapped/2-foo.ts b/tests/cjs-path-mapping-todo/mapped/2-foo.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/2-foo.ts rename to tests/cjs-path-mapping-todo/mapped/2-foo.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/2-specific-foo.ts b/tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/2-specific-foo.ts rename to tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/2a-bar.ts b/tests/cjs-path-mapping-todo/mapped/2a-bar.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/2a-bar.ts rename to tests/cjs-path-mapping-todo/mapped/2a-bar.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/2a-foo.ts b/tests/cjs-path-mapping-todo/mapped/2a-foo.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/2a-foo.ts rename to tests/cjs-path-mapping-todo/mapped/2a-foo.ts diff --git a/tests/cjs-path-mapping/_todo/mapped/2a-js.js b/tests/cjs-path-mapping-todo/mapped/2a-js.js similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/2a-js.js rename to tests/cjs-path-mapping-todo/mapped/2a-js.js diff --git a/tests/cjs-path-mapping/_todo/mapped/static.ts b/tests/cjs-path-mapping-todo/mapped/static.ts similarity index 100% rename from tests/cjs-path-mapping/_todo/mapped/static.ts rename to tests/cjs-path-mapping-todo/mapped/static.ts diff --git a/tests/cjs-path-mapping/_todo/package.json b/tests/cjs-path-mapping-todo/package.json similarity index 100% rename from tests/cjs-path-mapping/_todo/package.json rename to tests/cjs-path-mapping-todo/package.json diff --git a/tests/cjs-path-mapping/_todo/tsconfig.json b/tests/cjs-path-mapping-todo/tsconfig.json similarity index 100% rename from tests/cjs-path-mapping/_todo/tsconfig.json rename to tests/cjs-path-mapping-todo/tsconfig.json diff --git a/tests/esm-path-mapping/_todo/baseurl-star-path.ts b/tests/esm-path-mapping-todo1/baseurl-star-path.ts similarity index 100% rename from tests/esm-path-mapping/_todo/baseurl-star-path.ts rename to tests/esm-path-mapping-todo1/baseurl-star-path.ts diff --git a/tests/esm-path-mapping/_todo/built-in-star-path.ts b/tests/esm-path-mapping-todo1/built-in-star-path.ts similarity index 100% rename from tests/esm-path-mapping/_todo/built-in-star-path.ts rename to tests/esm-path-mapping-todo1/built-in-star-path.ts diff --git a/tests/esm-path-mapping/_todo/index-js.js b/tests/esm-path-mapping-todo1/index-js.js similarity index 100% rename from tests/esm-path-mapping/_todo/index-js.js rename to tests/esm-path-mapping-todo1/index-js.js diff --git a/tests/esm-path-mapping/_todo/index-tsx.tsx b/tests/esm-path-mapping-todo1/index-tsx.tsx similarity index 100% rename from tests/esm-path-mapping/_todo/index-tsx.tsx rename to tests/esm-path-mapping-todo1/index-tsx.tsx diff --git a/tests/esm-path-mapping/_todo/index.ts b/tests/esm-path-mapping-todo1/index.ts similarity index 100% rename from tests/esm-path-mapping/_todo/index.ts rename to tests/esm-path-mapping-todo1/index.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/1-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/1-foo.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/1-jsx.jsx b/tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/1-jsx.jsx rename to tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/2-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/2-foo.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/2-specific-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/2-specific-foo.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/2a-bar.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/2a-bar.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/2a-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/2a-foo.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/2a-js.js b/tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/2a-js.js rename to tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js diff --git a/tests/esm-path-mapping/_todo/level-1/level-2/static.ts b/tests/esm-path-mapping-todo1/level-1/level-2/static.ts similarity index 100% rename from tests/esm-path-mapping/_todo/level-1/level-2/static.ts rename to tests/esm-path-mapping-todo1/level-1/level-2/static.ts diff --git a/tests/esm-path-mapping/_todo/mapped-not-found.ts b/tests/esm-path-mapping-todo1/mapped-not-found.ts similarity index 100% rename from tests/esm-path-mapping/_todo/mapped-not-found.ts rename to tests/esm-path-mapping-todo1/mapped-not-found.ts diff --git a/tests/esm-path-mapping/_todo/node-modules-import.ts b/tests/esm-path-mapping-todo1/node-modules-import.ts similarity index 100% rename from tests/esm-path-mapping/_todo/node-modules-import.ts rename to tests/esm-path-mapping-todo1/node-modules-import.ts diff --git a/tests/esm-path-mapping/_todo/node-modules-star-path.ts b/tests/esm-path-mapping-todo1/node-modules-star-path.ts similarity index 100% rename from tests/esm-path-mapping/_todo/node-modules-star-path.ts rename to tests/esm-path-mapping-todo1/node-modules-star-path.ts diff --git a/tests/esm-path-mapping/_todo/path-base-relative.ts b/tests/esm-path-mapping-todo1/path-base-relative.ts similarity index 100% rename from tests/esm-path-mapping/_todo/path-base-relative.ts rename to tests/esm-path-mapping-todo1/path-base-relative.ts diff --git a/tests/esm-path-mapping/_todo/path-relative.ts b/tests/esm-path-mapping-todo1/path-relative.ts similarity index 100% rename from tests/esm-path-mapping/_todo/path-relative.ts rename to tests/esm-path-mapping-todo1/path-relative.ts diff --git a/tests/esm-path-mapping/_todo/tsconfig-baseurl-star-path.json b/tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json similarity index 100% rename from tests/esm-path-mapping/_todo/tsconfig-baseurl-star-path.json rename to tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json diff --git a/tests/esm-path-mapping/_todo/tsconfig-lodash-path.json b/tests/esm-path-mapping-todo1/tsconfig-lodash-path.json similarity index 100% rename from tests/esm-path-mapping/_todo/tsconfig-lodash-path.json rename to tests/esm-path-mapping-todo1/tsconfig-lodash-path.json diff --git a/tests/esm-path-mapping/_todo/tsconfig.json b/tests/esm-path-mapping-todo1/tsconfig.json similarity index 100% rename from tests/esm-path-mapping/_todo/tsconfig.json rename to tests/esm-path-mapping-todo1/tsconfig.json diff --git a/tests/esm-path-mapping/_todo2/base/child/js.js b/tests/esm-path-mapping-todo2/base/child/js.js similarity index 100% rename from tests/esm-path-mapping/_todo2/base/child/js.js rename to tests/esm-path-mapping-todo2/base/child/js.js diff --git a/tests/esm-path-mapping/_todo2/base/child/jsx.jsx b/tests/esm-path-mapping-todo2/base/child/jsx.jsx similarity index 100% rename from tests/esm-path-mapping/_todo2/base/child/jsx.jsx rename to tests/esm-path-mapping-todo2/base/child/jsx.jsx diff --git a/tests/esm-path-mapping/_todo2/base/child/ts.ts b/tests/esm-path-mapping-todo2/base/child/ts.ts similarity index 100% rename from tests/esm-path-mapping/_todo2/base/child/ts.ts rename to tests/esm-path-mapping-todo2/base/child/ts.ts diff --git a/tests/esm-path-mapping/_todo2/base/js.js b/tests/esm-path-mapping-todo2/base/js.js similarity index 100% rename from tests/esm-path-mapping/_todo2/base/js.js rename to tests/esm-path-mapping-todo2/base/js.js diff --git a/tests/esm-path-mapping/_todo2/base/jsx.jsx b/tests/esm-path-mapping-todo2/base/jsx.jsx similarity index 100% rename from tests/esm-path-mapping/_todo2/base/jsx.jsx rename to tests/esm-path-mapping-todo2/base/jsx.jsx diff --git a/tests/esm-path-mapping/_todo2/base/ts.ts b/tests/esm-path-mapping-todo2/base/ts.ts similarity index 100% rename from tests/esm-path-mapping/_todo2/base/ts.ts rename to tests/esm-path-mapping-todo2/base/ts.ts diff --git a/tests/esm-path-mapping/_todo2/import-from-base.ts b/tests/esm-path-mapping-todo2/import-from-base.ts similarity index 100% rename from tests/esm-path-mapping/_todo2/import-from-base.ts rename to tests/esm-path-mapping-todo2/import-from-base.ts diff --git a/tests/esm-path-mapping/_todo2/test-js.js b/tests/esm-path-mapping-todo2/test-js.js similarity index 100% rename from tests/esm-path-mapping/_todo2/test-js.js rename to tests/esm-path-mapping-todo2/test-js.js diff --git a/tests/esm-path-mapping/_todo2/test-jsx.jsx b/tests/esm-path-mapping-todo2/test-jsx.jsx similarity index 100% rename from tests/esm-path-mapping/_todo2/test-jsx.jsx rename to tests/esm-path-mapping-todo2/test-jsx.jsx diff --git a/tests/esm-path-mapping/_todo2/test-ts.ts b/tests/esm-path-mapping-todo2/test-ts.ts similarity index 100% rename from tests/esm-path-mapping/_todo2/test-ts.ts rename to tests/esm-path-mapping-todo2/test-ts.ts diff --git a/tests/esm-path-mapping/_todo2/test-tsx.tsx b/tests/esm-path-mapping-todo2/test-tsx.tsx similarity index 100% rename from tests/esm-path-mapping/_todo2/test-tsx.tsx rename to tests/esm-path-mapping-todo2/test-tsx.tsx From e0af73826c544525e482942e44c574865a89a9d4 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 15 Mar 2022 00:54:10 -0400 Subject: [PATCH 48/74] ensure ts-node is installed before running tests --- src/test/path-mapping.spec.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index af39c4462..cf053c4e8 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -6,9 +6,12 @@ import { CMD_TS_NODE_WITHOUT_PROJECT_FLAG, nodeSupportsEsmHooks, TEST_DIR, + installTsNode, } from './helpers'; import { test } from './testlib'; +test.beforeAll(installTsNode); + const execBuilder = ( command: string, moduleDir: string, @@ -46,7 +49,7 @@ const PROJECT_CONFIGS = { BASE_URL_NO_PATHS: 'tsconfig-baseurl-only.json', BASE_URL_AND_PATHS: 'tsconfig.json', BASE_URL_STAR_PATH: 'tsconfig-star-path.json', -}; +} as const; for (const moduleType of MODULE_TYPES) { test.suite(`path mapping ${moduleType}`, (test) => { From 31acd5039683aa15e2b4557a7b8578ddf4d274dd Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Tue, 15 Mar 2022 01:32:57 -0400 Subject: [PATCH 49/74] disable typechecking in tests --- tests/cjs-path-mapping/tsconfig.base.json | 3 ++- tests/esm-path-mapping/tsconfig.base.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/cjs-path-mapping/tsconfig.base.json b/tests/cjs-path-mapping/tsconfig.base.json index 4be85826a..afb259923 100644 --- a/tests/cjs-path-mapping/tsconfig.base.json +++ b/tests/cjs-path-mapping/tsconfig.base.json @@ -7,6 +7,7 @@ "outDir": "./lib" }, "ts-node": { - "experimentalPathMapping": "both" + "experimentalPathMapping": "both", + "transpileOnly": true } } diff --git a/tests/esm-path-mapping/tsconfig.base.json b/tests/esm-path-mapping/tsconfig.base.json index 5bb0f0a03..57e6671e4 100644 --- a/tests/esm-path-mapping/tsconfig.base.json +++ b/tests/esm-path-mapping/tsconfig.base.json @@ -7,6 +7,7 @@ "outDir": "./lib" }, "ts-node": { - "experimentalPathMapping": "both" + "experimentalPathMapping": "both", + "transpileOnly": true } } From 36377fcc61d0643d2b15c032c7a444fad8c0b32d Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 21:00:56 +0700 Subject: [PATCH 50/74] test: add a case that imports an esm lib from node_modules --- tests/cjs-path-mapping/import-node-modules.ts | 16 +++++++------ .../some-esm-dependency/package.json | 8 ++++++- tests/esm-path-mapping/import-node-modules.ts | 24 ++++++++++++------- .../some-esm-dependency/package.json | 8 ++++++- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts index 4cfc5341f..70a3de9f8 100644 --- a/tests/cjs-path-mapping/import-node-modules.ts +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -1,18 +1,20 @@ -// Should be able to import from node_modules -import someCjsDependency = require('some-cjs-dependency'); -// TODO: Import an ESM dep statically or... -// import someEsmDependency from 'some-esm-dependency' +// Do not extract this helper - it will change the meaning of relative imports +const importDefaultHelper = new Function( + 'specifier', + 'return import(specifier).then(mod => mod.default)' +); const main = async (): Promise => { - // TODO: ...or dynamically - // const someEsmDependency = await import('some-esm-dependency'); + // Should be able to import from node_modules + const someCjsDependency = require('some-cjs-dependency'); + const someEsmDependency = await importDefaultHelper('some-esm-dependency'); // Pre-conditions const assert: any = require('assert'); // Assertions assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); - // assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); + assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); }; main(); diff --git a/tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json b/tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json index 3dbc1ca59..32458cb54 100644 --- a/tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json +++ b/tests/cjs-path-mapping/node_modules/some-esm-dependency/package.json @@ -1,3 +1,9 @@ { - "type": "module" + "type": "module", + "main": "./index.js", + "exports": { + "import": "./index.js", + "require": "./index.js", + "default": "./index.js" + } } diff --git a/tests/esm-path-mapping/import-node-modules.ts b/tests/esm-path-mapping/import-node-modules.ts index ed4467b82..f63c0def1 100644 --- a/tests/esm-path-mapping/import-node-modules.ts +++ b/tests/esm-path-mapping/import-node-modules.ts @@ -1,10 +1,18 @@ -// Should be able to import from node_modules -import someCjsDependency from 'some-cjs-dependency'; -import someEsmDependency from 'some-esm-dependency'; +// Using helper to maintain similarity with CJS test +const importDefaultHelper = async (specifier: string) => + await import(specifier).then((mod) => mod.default); -// Pre-conditions -import * as assert from 'assert'; +const main = async (): Promise => { + // Should be able to import from node_modules + const someCjsDependency = await importDefaultHelper('some-cjs-dependency'); + const someEsmDependency = await importDefaultHelper('some-esm-dependency'); -// Assertions -assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); -assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); + // Pre-conditions + const assert: any = await import('assert'); + + // Assertions + assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); + assert.strictEqual(someEsmDependency, 'export-from-some-esm-dependency'); +}; + +main(); diff --git a/tests/esm-path-mapping/node_modules/some-esm-dependency/package.json b/tests/esm-path-mapping/node_modules/some-esm-dependency/package.json index 3dbc1ca59..32458cb54 100644 --- a/tests/esm-path-mapping/node_modules/some-esm-dependency/package.json +++ b/tests/esm-path-mapping/node_modules/some-esm-dependency/package.json @@ -1,3 +1,9 @@ { - "type": "module" + "type": "module", + "main": "./index.js", + "exports": { + "import": "./index.js", + "require": "./index.js", + "default": "./index.js" + } } From 56ef37895ed8412bd7c65f20aa6f36cf1b3beaac Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:12:00 +0700 Subject: [PATCH 51/74] use require everywhere in cjs examples --- tests/cjs-path-mapping/ignore-type-definitions.ts | 7 +++++-- tests/cjs-path-mapping/import-node-built-in.ts | 7 +++++-- tests/cjs-path-mapping/import-node-modules.ts | 5 ++++- tests/cjs-path-mapping/import-within-node-modules.ts | 5 ++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/tests/cjs-path-mapping/ignore-type-definitions.ts b/tests/cjs-path-mapping/ignore-type-definitions.ts index 27a0b1e61..f920e1f94 100644 --- a/tests/cjs-path-mapping/ignore-type-definitions.ts +++ b/tests/cjs-path-mapping/ignore-type-definitions.ts @@ -1,8 +1,11 @@ // Should ignore local ambient.d.ts -import ambient = require('ambient'); +const ambient = require('ambient'); // Pre-conditions -import * as assert from 'assert'; +const assert = require('assert'); // Assertions assert.strictEqual(ambient, 'ambient'); // not our 'local-ambient' + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-node-built-in.ts b/tests/cjs-path-mapping/import-node-built-in.ts index 08878447a..c83abd406 100644 --- a/tests/cjs-path-mapping/import-node-built-in.ts +++ b/tests/cjs-path-mapping/import-node-built-in.ts @@ -1,6 +1,9 @@ // Should be able to import node built-ins -import * as assert from 'assert'; -import { stat } from 'fs'; +const assert = require('assert'); +const { stat } = require('fs'); // Assertions assert.strictEqual(typeof stat, 'function'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-node-modules.ts b/tests/cjs-path-mapping/import-node-modules.ts index 70a3de9f8..fa5602c30 100644 --- a/tests/cjs-path-mapping/import-node-modules.ts +++ b/tests/cjs-path-mapping/import-node-modules.ts @@ -10,7 +10,7 @@ const main = async (): Promise => { const someEsmDependency = await importDefaultHelper('some-esm-dependency'); // Pre-conditions - const assert: any = require('assert'); + const assert = require('assert'); // Assertions assert.strictEqual(someCjsDependency, 'export-from-some-cjs-dependency'); @@ -18,3 +18,6 @@ const main = async (): Promise => { }; main(); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts index 9cbf17400..6ff3cd93c 100644 --- a/tests/cjs-path-mapping/import-within-node-modules.ts +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -2,7 +2,10 @@ import dependsOnLodash = require('depends-on-lodash'); // Pre-conditions -import assert = require('assert'); +const assert = require('assert'); // Assertions assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' + +// Force this to be a module +export {}; From 4dcff42a6759e451eda624715c7f51688a5f4443 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:12:54 +0700 Subject: [PATCH 52/74] destructure import proxyLodash; align both depends-on-lodash deps as cjs --- tests/cjs-path-mapping/import-within-node-modules.ts | 4 ++-- .../node_modules/depends-on-lodash/index.d.ts | 2 +- .../node_modules/depends-on-lodash/index.js | 6 ++---- tests/esm-path-mapping/import-within-node-modules.ts | 4 ++-- .../node_modules/depends-on-lodash/index.d.ts | 4 +--- .../node_modules/depends-on-lodash/index.js | 6 ++---- .../node_modules/depends-on-lodash/package.json | 4 +--- 7 files changed, 11 insertions(+), 19 deletions(-) diff --git a/tests/cjs-path-mapping/import-within-node-modules.ts b/tests/cjs-path-mapping/import-within-node-modules.ts index 6ff3cd93c..1a9328528 100644 --- a/tests/cjs-path-mapping/import-within-node-modules.ts +++ b/tests/cjs-path-mapping/import-within-node-modules.ts @@ -1,11 +1,11 @@ // Should ignore paths when importing inside node_modules -import dependsOnLodash = require('depends-on-lodash'); +const { proxyLodash } = require('depends-on-lodash'); // Pre-conditions const assert = require('assert'); // Assertions -assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' +assert.strictEqual(proxyLodash, 'lodash'); // not our 'lodash-local' // Force this to be a module export {}; diff --git a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts index 33720acad..7c7e06362 100644 --- a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts +++ b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.d.ts @@ -1,3 +1,3 @@ declare module 'depends-on-lodash' { - export const proxyLodash = 'lodash' + export const proxyLodash: any; } diff --git a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js index a2a19fc78..80a74e960 100644 --- a/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js +++ b/tests/cjs-path-mapping/node_modules/depends-on-lodash/index.js @@ -1,5 +1,3 @@ -const lodash = require('lodash') +const lodash = require('lodash'); -module.exports = { - proxyLodash: lodash -} +exports.proxyLodash = lodash diff --git a/tests/esm-path-mapping/import-within-node-modules.ts b/tests/esm-path-mapping/import-within-node-modules.ts index 5f7869504..80e949884 100644 --- a/tests/esm-path-mapping/import-within-node-modules.ts +++ b/tests/esm-path-mapping/import-within-node-modules.ts @@ -1,8 +1,8 @@ // Should ignore paths when importing inside node_modules -import dependsOnLodash from 'depends-on-lodash'; +import { proxyLodash } from 'depends-on-lodash'; // Pre-conditions import * as assert from 'assert'; // Assertions -assert.strictEqual(dependsOnLodash.proxyLodash, 'lodash'); // not our 'lodash-local' +assert.strictEqual(proxyLodash, 'lodash'); // not our 'lodash-local' diff --git a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts index d15aae6c0..7c7e06362 100644 --- a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts +++ b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.d.ts @@ -1,5 +1,3 @@ declare module 'depends-on-lodash' { - export default { - proxyLodash = 'lodash' - } + export const proxyLodash: any; } diff --git a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js index f3b82f8b6..80a74e960 100644 --- a/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js +++ b/tests/esm-path-mapping/node_modules/depends-on-lodash/index.js @@ -1,5 +1,3 @@ -import lodash from 'lodash' +const lodash = require('lodash'); -export default { - proxyLodash: lodash -} +exports.proxyLodash = lodash diff --git a/tests/esm-path-mapping/node_modules/depends-on-lodash/package.json b/tests/esm-path-mapping/node_modules/depends-on-lodash/package.json index 3dbc1ca59..0967ef424 100644 --- a/tests/esm-path-mapping/node_modules/depends-on-lodash/package.json +++ b/tests/esm-path-mapping/node_modules/depends-on-lodash/package.json @@ -1,3 +1 @@ -{ - "type": "module" -} +{} From ba176bf825ceda2cfe4d464ac527e211e0a942c6 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:13:00 +0700 Subject: [PATCH 53/74] fix baseUrl --- tests/cjs-path-mapping/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cjs-path-mapping/tsconfig.json b/tests/cjs-path-mapping/tsconfig.json index 188139f30..2348036ed 100644 --- a/tests/cjs-path-mapping/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./mapped", + "baseUrl": "./base", "paths": { "map1/*": ["./1-*"], "map2/*": ["./2-*", "./2a-*"], From 38ad3f591471c11bfd25a82ead8c43a44a657a59 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:40:34 +0700 Subject: [PATCH 54/74] revert assertions to use expect(err).toBeNull(); Clean up config constants --- src/test/path-mapping.spec.ts | 61 ++++++++++++++++------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index cf053c4e8..b07f54567 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -1,3 +1,4 @@ +import * as expect from 'expect'; import { join } from 'path'; import { createExec } from './exec-helpers'; @@ -22,83 +23,77 @@ const execBuilder = ( env: { ...process.env, TS_NODE_PROJECT: tsConfig }, }); - return (file = 'index.ts', throwErrors = true) => - partialExec(`${command} ${file}`).then((res) => { - if (throwErrors && res.err) throw res.err; - return res; - }); + return (file = 'index.ts') => partialExec(`${command} ${file}`); }; -type ModuleType = 'cjs' | 'esm'; -const MODULE_TYPES: ModuleType[] = ['cjs', 'esm']; -const MODULE_TYPE_ESM = MODULE_TYPES[1]; - -type ExecBuilderParams = { baseDir: string; command: string }; -const EXEC_BUILDER_PARAMS: Record = { - cjs: { +const MODULE_TYPES = { + CJS: { + name: 'cjs', baseDir: 'cjs-path-mapping', command: CMD_TS_NODE_WITHOUT_PROJECT_FLAG, }, - esm: { + ESM: { + name: 'esm', baseDir: 'esm-path-mapping', command: CMD_ESM_LOADER_WITHOUT_PROJECT, }, }; -const PROJECT_CONFIGS = { +const PROJECT_CONFIGS = { BASE_URL_NO_PATHS: 'tsconfig-baseurl-only.json', BASE_URL_AND_PATHS: 'tsconfig.json', BASE_URL_STAR_PATH: 'tsconfig-star-path.json', -} as const; +}; -for (const moduleType of MODULE_TYPES) { - test.suite(`path mapping ${moduleType}`, (test) => { - test.runIf(nodeSupportsEsmHooks || moduleType !== MODULE_TYPE_ESM); - const execBuilderParams = EXEC_BUILDER_PARAMS[moduleType]; +for (const moduleType of Object.values(MODULE_TYPES)) { + test.suite(`path mapping ${moduleType.name}`, (test) => { + test.runIf( + nodeSupportsEsmHooks || moduleType.name !== MODULE_TYPES.ESM.name + ); for (const project of Object.values(PROJECT_CONFIGS)) { // Create ts-node runner for this config - const exec = execBuilder( - execBuilderParams.command, - execBuilderParams.baseDir, - project - ); + const exec = execBuilder(moduleType.command, moduleType.baseDir, project); test.suite(`project: ${project}`, (test) => { test(`fallback to node built-in`, async (t) => { - await t.notThrowsAsync(exec('import-node-built-in.ts')); + const { err } = await exec('import-node-built-in.ts'); + expect(err).toBeNull(); }); test(`fallback to node_modules`, async (t) => { - await t.notThrowsAsync(exec('import-node-modules.ts')); + const { err } = await exec('import-node-modules.ts'); + expect(err).toBeNull(); }); test(`imports within node_modules ignore paths`, async (t) => { - await t.notThrowsAsync(exec('import-within-node-modules.ts')); + const { err } = await exec('import-within-node-modules.ts'); + expect(err).toBeNull(); }); test('ignore type definitions', async (t) => { - await t.notThrowsAsync(exec('ignore-type-definitions.ts')); + const { err } = await exec('ignore-type-definitions.ts'); + expect(err).toBeNull(); }); // test(`import from baseUrl with ${project}`, async () => { // const { err } = await exec('import-from-base.ts'); - // expect(err).toBe(null); + // expect(err).toBeNull(); // }); // test(`import under baseUrl with ${project}`, async () => { // const { err } = await exec('import-under-base.ts'); - // expect(err).toBe(null); + // expect(err).toBeNull(); // }); // test(`import from js, js, tsx with ${project}`, async () => { // const { err } = await exec('import-from-base.ts'); - // expect(err).toBe(null); + // expect(err).toBeNull(); // }); // test('relative imports should ignore paths', async () => { // const { err } = await exec('import-relative.ts'); - // expect(err).toBe(null); + // expect(err).toBeNull(); // }); // test(`import invalid path with ${project}`, async () => { @@ -126,7 +121,7 @@ for (const moduleType of MODULE_TYPES) { // test(`import specific paths`, async () => { // const { err } = await exec('???'); - // expect(err).toBe(null); + // expect(err).toBeNull(); // }); }); } From 1687de97ea5ff2988eee0af19962e47d6007c64d Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:50:55 +0700 Subject: [PATCH 55/74] prefer function declaration to arrow function --- src/test/path-mapping.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index b07f54567..db1da8e79 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -13,18 +13,18 @@ import { test } from './testlib'; test.beforeAll(installTsNode); -const execBuilder = ( +function execBuilder( command: string, moduleDir: string, tsConfig: string = 'tsconfig.json' -) => { +) { const partialExec = createExec({ cwd: join(TEST_DIR, moduleDir), env: { ...process.env, TS_NODE_PROJECT: tsConfig }, }); return (file = 'index.ts') => partialExec(`${command} ${file}`); -}; +} const MODULE_TYPES = { CJS: { From 8e9b11789771621184b1c5059a2f65af08af4c47 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 00:18:32 +0700 Subject: [PATCH 56/74] move base 2 deep, so star path can be used in addition to base --- src/test/path-mapping.spec.ts | 8 ++++---- .../{base => level-1/level-2}/ambient.d.ts | 0 .../{base => level-1/level-2}/lodash.ts | 0 ...url-only.json => tsconfig-baseurl-no-paths.json} | 2 +- .../tsconfig-baseurl-some-paths.json | 13 +++++++++++++ ...ar-path.json => tsconfig-baseurl-star-path.json} | 4 ++-- tests/cjs-path-mapping/tsconfig.json | 13 ++----------- .../{base => level-1/level-2}/ambient.d.ts | 0 .../{base => level-1/level-2}/lodash.ts | 0 ...url-only.json => tsconfig-baseurl-no-paths.json} | 2 +- .../tsconfig-baseurl-some-paths.json | 13 +++++++++++++ ...ar-path.json => tsconfig-baseurl-star-path.json} | 4 ++-- tests/esm-path-mapping/tsconfig.json | 13 ++----------- 13 files changed, 40 insertions(+), 32 deletions(-) rename tests/cjs-path-mapping/{base => level-1/level-2}/ambient.d.ts (100%) rename tests/cjs-path-mapping/{base => level-1/level-2}/lodash.ts (100%) rename tests/cjs-path-mapping/{tsconfig-baseurl-only.json => tsconfig-baseurl-no-paths.json} (80%) create mode 100644 tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json rename tests/cjs-path-mapping/{tsconfig-star-path.json => tsconfig-baseurl-star-path.json} (74%) rename tests/esm-path-mapping/{base => level-1/level-2}/ambient.d.ts (100%) rename tests/esm-path-mapping/{base => level-1/level-2}/lodash.ts (100%) rename tests/esm-path-mapping/{tsconfig-baseurl-only.json => tsconfig-baseurl-no-paths.json} (80%) create mode 100644 tests/esm-path-mapping/tsconfig-baseurl-some-paths.json rename tests/esm-path-mapping/{tsconfig-star-path.json => tsconfig-baseurl-star-path.json} (74%) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index db1da8e79..fc6c9030e 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -40,9 +40,9 @@ const MODULE_TYPES = { }; const PROJECT_CONFIGS = { - BASE_URL_NO_PATHS: 'tsconfig-baseurl-only.json', - BASE_URL_AND_PATHS: 'tsconfig.json', - BASE_URL_STAR_PATH: 'tsconfig-star-path.json', + BASE_URL_NO_PATHS: 'tsconfig-baseurl-no-paths.json', + BASE_URL_SOME_PATHS: 'tsconfig-baseurl-some-paths.json', + BASE_URL_STAR_PATH: 'tsconfig-baseurl-star-path.json', }; for (const moduleType of Object.values(MODULE_TYPES)) { @@ -55,7 +55,7 @@ for (const moduleType of Object.values(MODULE_TYPES)) { // Create ts-node runner for this config const exec = execBuilder(moduleType.command, moduleType.baseDir, project); - test.suite(`project: ${project}`, (test) => { + test.suite(`${project}`, (test) => { test(`fallback to node built-in`, async (t) => { const { err } = await exec('import-node-built-in.ts'); expect(err).toBeNull(); diff --git a/tests/cjs-path-mapping/base/ambient.d.ts b/tests/cjs-path-mapping/level-1/level-2/ambient.d.ts similarity index 100% rename from tests/cjs-path-mapping/base/ambient.d.ts rename to tests/cjs-path-mapping/level-1/level-2/ambient.d.ts diff --git a/tests/cjs-path-mapping/base/lodash.ts b/tests/cjs-path-mapping/level-1/level-2/lodash.ts similarity index 100% rename from tests/cjs-path-mapping/base/lodash.ts rename to tests/cjs-path-mapping/level-1/level-2/lodash.ts diff --git a/tests/cjs-path-mapping/tsconfig-baseurl-only.json b/tests/cjs-path-mapping/tsconfig-baseurl-no-paths.json similarity index 80% rename from tests/cjs-path-mapping/tsconfig-baseurl-only.json rename to tests/cjs-path-mapping/tsconfig-baseurl-no-paths.json index b207a5972..e33017d5d 100644 --- a/tests/cjs-path-mapping/tsconfig-baseurl-only.json +++ b/tests/cjs-path-mapping/tsconfig-baseurl-no-paths.json @@ -2,6 +2,6 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./base" + "baseUrl": "./level-1/level-2" } } diff --git a/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json new file mode 100644 index 000000000..1ca0c848c --- /dev/null +++ b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./level-1/level-2", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.js"] + } + } +} diff --git a/tests/cjs-path-mapping/tsconfig-star-path.json b/tests/cjs-path-mapping/tsconfig-baseurl-star-path.json similarity index 74% rename from tests/cjs-path-mapping/tsconfig-star-path.json rename to tests/cjs-path-mapping/tsconfig-baseurl-star-path.json index 79eac9ede..ebadfcedd 100644 --- a/tests/cjs-path-mapping/tsconfig-star-path.json +++ b/tests/cjs-path-mapping/tsconfig-baseurl-star-path.json @@ -2,9 +2,9 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./", + "baseUrl": "./level-1", "paths": { - "*": ["./base/*"] + "*": ["./level-2/*"] } } } diff --git a/tests/cjs-path-mapping/tsconfig.json b/tests/cjs-path-mapping/tsconfig.json index 2348036ed..524bb2d38 100644 --- a/tests/cjs-path-mapping/tsconfig.json +++ b/tests/cjs-path-mapping/tsconfig.json @@ -1,13 +1,4 @@ { - "extends": "./tsconfig.base.json", - "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], - "compilerOptions": { - "baseUrl": "./base", - "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.ts"] - } - } + "extends": "./tsconfig-baseurl-some-paths.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"] } diff --git a/tests/esm-path-mapping/base/ambient.d.ts b/tests/esm-path-mapping/level-1/level-2/ambient.d.ts similarity index 100% rename from tests/esm-path-mapping/base/ambient.d.ts rename to tests/esm-path-mapping/level-1/level-2/ambient.d.ts diff --git a/tests/esm-path-mapping/base/lodash.ts b/tests/esm-path-mapping/level-1/level-2/lodash.ts similarity index 100% rename from tests/esm-path-mapping/base/lodash.ts rename to tests/esm-path-mapping/level-1/level-2/lodash.ts diff --git a/tests/esm-path-mapping/tsconfig-baseurl-only.json b/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json similarity index 80% rename from tests/esm-path-mapping/tsconfig-baseurl-only.json rename to tests/esm-path-mapping/tsconfig-baseurl-no-paths.json index b207a5972..e33017d5d 100644 --- a/tests/esm-path-mapping/tsconfig-baseurl-only.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-no-paths.json @@ -2,6 +2,6 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./base" + "baseUrl": "./level-1/level-2" } } diff --git a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json new file mode 100644 index 000000000..1ca0c848c --- /dev/null +++ b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], + "compilerOptions": { + "baseUrl": "./level-1/level-2", + "paths": { + "map1/*": ["./1-*"], + "map2/*": ["./2-*", "./2a-*"], + "map2/specific/*": ["./2-specific-*"], + "static": ["./static.js"] + } + } +} diff --git a/tests/esm-path-mapping/tsconfig-star-path.json b/tests/esm-path-mapping/tsconfig-baseurl-star-path.json similarity index 74% rename from tests/esm-path-mapping/tsconfig-star-path.json rename to tests/esm-path-mapping/tsconfig-baseurl-star-path.json index 79eac9ede..ebadfcedd 100644 --- a/tests/esm-path-mapping/tsconfig-star-path.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-star-path.json @@ -2,9 +2,9 @@ "extends": "./tsconfig.base.json", "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "baseUrl": "./", + "baseUrl": "./level-1", "paths": { - "*": ["./base/*"] + "*": ["./level-2/*"] } } } diff --git a/tests/esm-path-mapping/tsconfig.json b/tests/esm-path-mapping/tsconfig.json index 77751ab8a..524bb2d38 100644 --- a/tests/esm-path-mapping/tsconfig.json +++ b/tests/esm-path-mapping/tsconfig.json @@ -1,13 +1,4 @@ { - "extends": "./tsconfig.base.json", - "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], - "compilerOptions": { - "baseUrl": "./base", - "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.js"] - } - } + "extends": "./tsconfig-baseurl-some-paths.json", + "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"] } From 806ce74e874101b8997ec7e4721fa80382e046b4 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 00:38:45 +0700 Subject: [PATCH 57/74] tests: non-relative imports --- src/test/path-mapping.spec.ts | 25 +++++++++++-------- .../import-at-base-no-extension.ts | 15 +++++++++++ tests/cjs-path-mapping/import-at-base.ts | 15 +++++++++++ tests/cjs-path-mapping/import-under-base.ts | 15 +++++++++++ .../level-1/level-2/at-base-js.js | 1 + .../level-1/level-2/at-base-jsx.jsx | 6 +++++ .../level-1/level-2/at-base-ts.ts | 1 + .../level-1/level-2/level-3/under-base-js.js | 1 + .../level-2/level-3/under-base-jsx.jsx | 6 +++++ .../level-1/level-2/level-3/under-base-ts.ts | 1 + .../import-at-base-no-extension.ts | 12 +++++++++ tests/esm-path-mapping/import-at-base.ts | 12 +++++++++ tests/esm-path-mapping/import-under-base.ts | 12 +++++++++ .../level-1/level-2/at-base-js.js | 1 + .../level-1/level-2/at-base-jsx.jsx | 6 +++++ .../level-1/level-2/at-base-ts.ts | 1 + .../level-1/level-2/level-3/under-base-js.js | 1 + .../level-2/level-3/under-base-jsx.jsx | 6 +++++ .../level-1/level-2/level-3/under-base-ts.ts | 1 + 19 files changed, 128 insertions(+), 10 deletions(-) create mode 100644 tests/cjs-path-mapping/import-at-base-no-extension.ts create mode 100644 tests/cjs-path-mapping/import-at-base.ts create mode 100644 tests/cjs-path-mapping/import-under-base.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/at-base-js.js create mode 100644 tests/cjs-path-mapping/level-1/level-2/at-base-jsx.jsx create mode 100644 tests/cjs-path-mapping/level-1/level-2/at-base-ts.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js create mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx create mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts create mode 100644 tests/esm-path-mapping/import-at-base-no-extension.ts create mode 100644 tests/esm-path-mapping/import-at-base.ts create mode 100644 tests/esm-path-mapping/import-under-base.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/at-base-js.js create mode 100644 tests/esm-path-mapping/level-1/level-2/at-base-jsx.jsx create mode 100644 tests/esm-path-mapping/level-1/level-2/at-base-ts.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js create mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx create mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index fc6c9030e..a79783a2a 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -76,17 +76,22 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test(`import from baseUrl with ${project}`, async () => { - // const { err } = await exec('import-from-base.ts'); - // expect(err).toBeNull(); - // }); + test(`import at baseUrl`, async () => { + const { err } = await exec('import-at-base.ts'); + expect(err).toBeNull(); + }); - // test(`import under baseUrl with ${project}`, async () => { - // const { err } = await exec('import-under-base.ts'); - // expect(err).toBeNull(); - // }); + test(`import at baseUrl without file extensions`, async () => { + const { err } = await exec('import-at-base-no-extensions.ts'); + expect(err).toBeNull(); + }); + + test(`import under baseUrl`, async () => { + const { err } = await exec('import-under-base.ts'); + expect(err).toBeNull(); + }); - // test(`import from js, js, tsx with ${project}`, async () => { + // test(`import from js, js, tsx`, async () => { // const { err } = await exec('import-from-base.ts'); // expect(err).toBeNull(); // }); @@ -96,7 +101,7 @@ for (const moduleType of Object.values(MODULE_TYPES)) { // expect(err).toBeNull(); // }); - // test(`import invalid path with ${project}`, async () => { + // test(`import invalid path`, async () => { // const { stderr, err } = await exec('import-non-existing.ts'); // // Expect error diff --git a/tests/cjs-path-mapping/import-at-base-no-extension.ts b/tests/cjs-path-mapping/import-at-base-no-extension.ts new file mode 100644 index 000000000..4a94463ac --- /dev/null +++ b/tests/cjs-path-mapping/import-at-base-no-extension.ts @@ -0,0 +1,15 @@ +// Should import from base directory, assuming file extension +const atBaseJs = require('at-base-js'); +const atBaseJsx = require('at-base-jsx'); +const atBaseTs = require('at-base-ts'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-at-base.ts b/tests/cjs-path-mapping/import-at-base.ts new file mode 100644 index 000000000..14253d90f --- /dev/null +++ b/tests/cjs-path-mapping/import-at-base.ts @@ -0,0 +1,15 @@ +// Should import from base directory +const atBaseJs = require('at-base-js.js'); +const atBaseJsx = require('at-base-jsx.jsx'); +const atBaseTs = require('at-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-under-base.ts b/tests/cjs-path-mapping/import-under-base.ts new file mode 100644 index 000000000..d2d70a991 --- /dev/null +++ b/tests/cjs-path-mapping/import-under-base.ts @@ -0,0 +1,15 @@ +// Should import from base directory +const underBaseJs = require('level-3/under-base-js.js'); +const underBaseJsx = require('level-3/under-base-jsx.jsx'); +const underBaseTs = require('level-3/under-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(underBaseJs, 'under-base-js'); +assert.strictEqual(underBaseJsx, 'under-base-jsx'); +assert.strictEqual(underBaseTs, 'under-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/level-1/level-2/at-base-js.js b/tests/cjs-path-mapping/level-1/level-2/at-base-js.js new file mode 100644 index 000000000..90e543097 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/at-base-js.js @@ -0,0 +1 @@ +export default 'at-base-js'; diff --git a/tests/cjs-path-mapping/level-1/level-2/at-base-jsx.jsx b/tests/cjs-path-mapping/level-1/level-2/at-base-jsx.jsx new file mode 100644 index 000000000..4efaeebfe --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/at-base-jsx.jsx @@ -0,0 +1,6 @@ +export default 'at-base-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/cjs-path-mapping/level-1/level-2/at-base-ts.ts b/tests/cjs-path-mapping/level-1/level-2/at-base-ts.ts new file mode 100644 index 000000000..d1695f553 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/at-base-ts.ts @@ -0,0 +1 @@ +export default 'at-base-ts'; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js new file mode 100644 index 000000000..535449288 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js @@ -0,0 +1 @@ +export default 'under-base-js'; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx new file mode 100644 index 000000000..2586d1af7 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx @@ -0,0 +1,6 @@ +export default 'under-base-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts new file mode 100644 index 000000000..65523e08a --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts @@ -0,0 +1 @@ +export default 'under-base-ts'; diff --git a/tests/esm-path-mapping/import-at-base-no-extension.ts b/tests/esm-path-mapping/import-at-base-no-extension.ts new file mode 100644 index 000000000..fad33cf3c --- /dev/null +++ b/tests/esm-path-mapping/import-at-base-no-extension.ts @@ -0,0 +1,12 @@ +// Should import from base directory, assuming file extension +import atBaseJs from 'at-base-js'; +import atBaseJsx from 'at-base-jsx'; +import atBaseTs from 'at-base-ts'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); diff --git a/tests/esm-path-mapping/import-at-base.ts b/tests/esm-path-mapping/import-at-base.ts new file mode 100644 index 000000000..c149bb314 --- /dev/null +++ b/tests/esm-path-mapping/import-at-base.ts @@ -0,0 +1,12 @@ +// Should import from base directory +import atBaseJs from 'at-base-js.js'; +import atBaseJsx from 'at-base-jsx.jsx'; +import atBaseTs from 'at-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); diff --git a/tests/esm-path-mapping/import-under-base.ts b/tests/esm-path-mapping/import-under-base.ts new file mode 100644 index 000000000..b3ebb480e --- /dev/null +++ b/tests/esm-path-mapping/import-under-base.ts @@ -0,0 +1,12 @@ +// Should import from base directory +import underBaseJs from 'level-3/under-base-js.js'; +import underBaseJsx from 'level-3/under-base-jsx.jsx'; +import underBaseTs from 'level-3/under-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(underBaseJs, 'under-base-js'); +assert.strictEqual(underBaseJsx, 'under-base-jsx'); +assert.strictEqual(underBaseTs, 'under-base-ts'); diff --git a/tests/esm-path-mapping/level-1/level-2/at-base-js.js b/tests/esm-path-mapping/level-1/level-2/at-base-js.js new file mode 100644 index 000000000..90e543097 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/at-base-js.js @@ -0,0 +1 @@ +export default 'at-base-js'; diff --git a/tests/esm-path-mapping/level-1/level-2/at-base-jsx.jsx b/tests/esm-path-mapping/level-1/level-2/at-base-jsx.jsx new file mode 100644 index 000000000..4efaeebfe --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/at-base-jsx.jsx @@ -0,0 +1,6 @@ +export default 'at-base-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/level-1/level-2/at-base-ts.ts b/tests/esm-path-mapping/level-1/level-2/at-base-ts.ts new file mode 100644 index 000000000..d1695f553 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/at-base-ts.ts @@ -0,0 +1 @@ +export default 'at-base-ts'; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js new file mode 100644 index 000000000..535449288 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js @@ -0,0 +1 @@ +export default 'under-base-js'; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx new file mode 100644 index 000000000..2586d1af7 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx @@ -0,0 +1,6 @@ +export default 'under-base-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts new file mode 100644 index 000000000..65523e08a --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts @@ -0,0 +1 @@ +export default 'under-base-ts'; From 0fd8a5ce31513acacde706e74db7dbb39624858e Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:04:04 +0700 Subject: [PATCH 58/74] fix import extensions --- tests/cjs-path-mapping/import-at-base.ts | 2 +- tests/cjs-path-mapping/import-under-base.ts | 4 ++-- tests/esm-path-mapping/import-at-base.ts | 2 +- tests/esm-path-mapping/import-under-base.ts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/cjs-path-mapping/import-at-base.ts b/tests/cjs-path-mapping/import-at-base.ts index 14253d90f..9bd6bde0d 100644 --- a/tests/cjs-path-mapping/import-at-base.ts +++ b/tests/cjs-path-mapping/import-at-base.ts @@ -1,6 +1,6 @@ // Should import from base directory const atBaseJs = require('at-base-js.js'); -const atBaseJsx = require('at-base-jsx.jsx'); +const atBaseJsx = require('at-base-jsx.js'); const atBaseTs = require('at-base-ts.js'); // Pre-conditions diff --git a/tests/cjs-path-mapping/import-under-base.ts b/tests/cjs-path-mapping/import-under-base.ts index d2d70a991..8e0cb3ff5 100644 --- a/tests/cjs-path-mapping/import-under-base.ts +++ b/tests/cjs-path-mapping/import-under-base.ts @@ -1,6 +1,6 @@ -// Should import from base directory +// Should import under base directory const underBaseJs = require('level-3/under-base-js.js'); -const underBaseJsx = require('level-3/under-base-jsx.jsx'); +const underBaseJsx = require('level-3/under-base-jsx.js'); const underBaseTs = require('level-3/under-base-ts.js'); // Pre-conditions diff --git a/tests/esm-path-mapping/import-at-base.ts b/tests/esm-path-mapping/import-at-base.ts index c149bb314..bce786af4 100644 --- a/tests/esm-path-mapping/import-at-base.ts +++ b/tests/esm-path-mapping/import-at-base.ts @@ -1,6 +1,6 @@ // Should import from base directory import atBaseJs from 'at-base-js.js'; -import atBaseJsx from 'at-base-jsx.jsx'; +import atBaseJsx from 'at-base-jsx.js'; import atBaseTs from 'at-base-ts.js'; // Pre-conditions diff --git a/tests/esm-path-mapping/import-under-base.ts b/tests/esm-path-mapping/import-under-base.ts index b3ebb480e..0b305b70a 100644 --- a/tests/esm-path-mapping/import-under-base.ts +++ b/tests/esm-path-mapping/import-under-base.ts @@ -1,6 +1,6 @@ -// Should import from base directory +// Should import under base directory import underBaseJs from 'level-3/under-base-js.js'; -import underBaseJsx from 'level-3/under-base-jsx.jsx'; +import underBaseJsx from 'level-3/under-base-jsx.js'; import underBaseTs from 'level-3/under-base-ts.js'; // Pre-conditions From 02818e395564fef610c7e98036d09534cc3dd157 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:04:52 +0700 Subject: [PATCH 59/74] tests: imports from js, jsx, tsx --- src/test/path-mapping.spec.ts | 8 ++++---- tests/cjs-path-mapping/import-from-js-jsx-tsx.ts | 3 +++ tests/cjs-path-mapping/import-from-js.js | 15 +++++++++++++++ tests/cjs-path-mapping/import-from-jsx.jsx | 15 +++++++++++++++ tests/cjs-path-mapping/import-from-tsx.tsx | 15 +++++++++++++++ tests/esm-path-mapping/import-from-js-jsx-tsx.ts | 3 +++ tests/esm-path-mapping/import-from-js.js | 12 ++++++++++++ tests/esm-path-mapping/import-from-jsx.jsx | 12 ++++++++++++ tests/esm-path-mapping/import-from-tsx.tsx | 12 ++++++++++++ 9 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 tests/cjs-path-mapping/import-from-js-jsx-tsx.ts create mode 100644 tests/cjs-path-mapping/import-from-js.js create mode 100644 tests/cjs-path-mapping/import-from-jsx.jsx create mode 100644 tests/cjs-path-mapping/import-from-tsx.tsx create mode 100644 tests/esm-path-mapping/import-from-js-jsx-tsx.ts create mode 100644 tests/esm-path-mapping/import-from-js.js create mode 100644 tests/esm-path-mapping/import-from-jsx.jsx create mode 100644 tests/esm-path-mapping/import-from-tsx.tsx diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index a79783a2a..250672a7b 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -91,10 +91,10 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test(`import from js, js, tsx`, async () => { - // const { err } = await exec('import-from-base.ts'); - // expect(err).toBeNull(); - // }); + test(`import from js, jsx, tsx`, async () => { + const { err } = await exec('import-from-js-jsx-tsx.ts'); + expect(err).toBeNull(); + }); // test('relative imports should ignore paths', async () => { // const { err } = await exec('import-relative.ts'); diff --git a/tests/cjs-path-mapping/import-from-js-jsx-tsx.ts b/tests/cjs-path-mapping/import-from-js-jsx-tsx.ts new file mode 100644 index 000000000..825ca6ac7 --- /dev/null +++ b/tests/cjs-path-mapping/import-from-js-jsx-tsx.ts @@ -0,0 +1,3 @@ +require('./import-from-js.js'); +require('./import-from-jsx.js'); +require('./import-from-tsx.js'); diff --git a/tests/cjs-path-mapping/import-from-js.js b/tests/cjs-path-mapping/import-from-js.js new file mode 100644 index 000000000..9bd6bde0d --- /dev/null +++ b/tests/cjs-path-mapping/import-from-js.js @@ -0,0 +1,15 @@ +// Should import from base directory +const atBaseJs = require('at-base-js.js'); +const atBaseJsx = require('at-base-jsx.js'); +const atBaseTs = require('at-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-from-jsx.jsx b/tests/cjs-path-mapping/import-from-jsx.jsx new file mode 100644 index 000000000..9bd6bde0d --- /dev/null +++ b/tests/cjs-path-mapping/import-from-jsx.jsx @@ -0,0 +1,15 @@ +// Should import from base directory +const atBaseJs = require('at-base-js.js'); +const atBaseJsx = require('at-base-jsx.js'); +const atBaseTs = require('at-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-from-tsx.tsx b/tests/cjs-path-mapping/import-from-tsx.tsx new file mode 100644 index 000000000..9bd6bde0d --- /dev/null +++ b/tests/cjs-path-mapping/import-from-tsx.tsx @@ -0,0 +1,15 @@ +// Should import from base directory +const atBaseJs = require('at-base-js.js'); +const atBaseJsx = require('at-base-jsx.js'); +const atBaseTs = require('at-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/esm-path-mapping/import-from-js-jsx-tsx.ts b/tests/esm-path-mapping/import-from-js-jsx-tsx.ts new file mode 100644 index 000000000..84f44fcca --- /dev/null +++ b/tests/esm-path-mapping/import-from-js-jsx-tsx.ts @@ -0,0 +1,3 @@ +import './import-from-js.js'; +import './import-from-jsx.js'; +import './import-from-tsx.js'; diff --git a/tests/esm-path-mapping/import-from-js.js b/tests/esm-path-mapping/import-from-js.js new file mode 100644 index 000000000..bce786af4 --- /dev/null +++ b/tests/esm-path-mapping/import-from-js.js @@ -0,0 +1,12 @@ +// Should import from base directory +import atBaseJs from 'at-base-js.js'; +import atBaseJsx from 'at-base-jsx.js'; +import atBaseTs from 'at-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); diff --git a/tests/esm-path-mapping/import-from-jsx.jsx b/tests/esm-path-mapping/import-from-jsx.jsx new file mode 100644 index 000000000..bce786af4 --- /dev/null +++ b/tests/esm-path-mapping/import-from-jsx.jsx @@ -0,0 +1,12 @@ +// Should import from base directory +import atBaseJs from 'at-base-js.js'; +import atBaseJsx from 'at-base-jsx.js'; +import atBaseTs from 'at-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); diff --git a/tests/esm-path-mapping/import-from-tsx.tsx b/tests/esm-path-mapping/import-from-tsx.tsx new file mode 100644 index 000000000..bce786af4 --- /dev/null +++ b/tests/esm-path-mapping/import-from-tsx.tsx @@ -0,0 +1,12 @@ +// Should import from base directory +import atBaseJs from 'at-base-js.js'; +import atBaseJsx from 'at-base-jsx.js'; +import atBaseTs from 'at-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(atBaseJs, 'at-base-js'); +assert.strictEqual(atBaseJsx, 'at-base-jsx'); +assert.strictEqual(atBaseTs, 'at-base-ts'); From 6faedd91d36bfcf3be00429a169834267a64d314 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:08:10 +0700 Subject: [PATCH 60/74] rename under-base to below-base (nicer lexical sort) --- src/test/path-mapping.spec.ts | 4 ++-- tests/cjs-path-mapping/import-below-base.ts | 15 +++++++++++++++ tests/cjs-path-mapping/import-under-base.ts | 15 --------------- .../level-1/level-2/level-3/below-base-js.js | 1 + .../level-1/level-2/level-3/below-base-jsx.jsx} | 2 +- .../level-1/level-2/level-3/below-base-ts.ts | 1 + .../level-1/level-2/level-3/under-base-js.js | 1 - .../level-1/level-2/level-3/under-base-ts.ts | 1 - tests/esm-path-mapping/import-below-base.ts | 12 ++++++++++++ tests/esm-path-mapping/import-under-base.ts | 12 ------------ .../level-1/level-2/level-3/below-base-js.js | 1 + .../level-1/level-2/level-3/below-base-jsx.jsx} | 2 +- .../level-1/level-2/level-3/below-base-ts.ts | 1 + .../level-1/level-2/level-3/under-base-js.js | 1 - .../level-1/level-2/level-3/under-base-ts.ts | 1 - 15 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 tests/cjs-path-mapping/import-below-base.ts delete mode 100644 tests/cjs-path-mapping/import-under-base.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/below-base-js.js rename tests/{esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx => cjs-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx} (67%) create mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/below-base-ts.ts delete mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js delete mode 100644 tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts create mode 100644 tests/esm-path-mapping/import-below-base.ts delete mode 100644 tests/esm-path-mapping/import-under-base.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/below-base-js.js rename tests/{cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx => esm-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx} (67%) create mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/below-base-ts.ts delete mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js delete mode 100644 tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 250672a7b..862cf05af 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -86,8 +86,8 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - test(`import under baseUrl`, async () => { - const { err } = await exec('import-under-base.ts'); + test(`import below baseUrl`, async () => { + const { err } = await exec('import-below-base.ts'); expect(err).toBeNull(); }); diff --git a/tests/cjs-path-mapping/import-below-base.ts b/tests/cjs-path-mapping/import-below-base.ts new file mode 100644 index 000000000..08087f29d --- /dev/null +++ b/tests/cjs-path-mapping/import-below-base.ts @@ -0,0 +1,15 @@ +// Should import below base directory +const belowBaseJs = require('level-3/below-base-js.js'); +const belowBaseJsx = require('level-3/below-base-jsx.js'); +const belowBaseTs = require('level-3/below-base-ts.js'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(belowBaseJs, 'below-base-js'); +assert.strictEqual(belowBaseJsx, 'below-base-jsx'); +assert.strictEqual(belowBaseTs, 'below-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/import-under-base.ts b/tests/cjs-path-mapping/import-under-base.ts deleted file mode 100644 index 8e0cb3ff5..000000000 --- a/tests/cjs-path-mapping/import-under-base.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Should import under base directory -const underBaseJs = require('level-3/under-base-js.js'); -const underBaseJsx = require('level-3/under-base-jsx.js'); -const underBaseTs = require('level-3/under-base-ts.js'); - -// Pre-conditions -const assert = require('assert'); - -// Assertions -assert.strictEqual(underBaseJs, 'under-base-js'); -assert.strictEqual(underBaseJsx, 'under-base-jsx'); -assert.strictEqual(underBaseTs, 'under-base-ts'); - -// Force this to be a module -export {}; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-js.js b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-js.js new file mode 100644 index 000000000..72bebdf46 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-js.js @@ -0,0 +1 @@ +export default 'below-base-js'; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx similarity index 67% rename from tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx rename to tests/cjs-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx index 2586d1af7..b5c8c33c2 100644 --- a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx @@ -1,4 +1,4 @@ -export default 'under-base-jsx'; +export default 'below-base-jsx'; const React = { createElement() {}, diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-ts.ts b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-ts.ts new file mode 100644 index 000000000..e270d7ff1 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/level-3/below-base-ts.ts @@ -0,0 +1 @@ +export default 'below-base-ts'; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js deleted file mode 100644 index 535449288..000000000 --- a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'under-base-js'; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts b/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts deleted file mode 100644 index 65523e08a..000000000 --- a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-ts.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'under-base-ts'; diff --git a/tests/esm-path-mapping/import-below-base.ts b/tests/esm-path-mapping/import-below-base.ts new file mode 100644 index 000000000..f318ff24e --- /dev/null +++ b/tests/esm-path-mapping/import-below-base.ts @@ -0,0 +1,12 @@ +// Should import below base directory +import belowBaseJs from 'level-3/below-base-js.js'; +import belowBaseJsx from 'level-3/below-base-jsx.js'; +import belowBaseTs from 'level-3/below-base-ts.js'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(belowBaseJs, 'below-base-js'); +assert.strictEqual(belowBaseJsx, 'below-base-jsx'); +assert.strictEqual(belowBaseTs, 'below-base-ts'); diff --git a/tests/esm-path-mapping/import-under-base.ts b/tests/esm-path-mapping/import-under-base.ts deleted file mode 100644 index 0b305b70a..000000000 --- a/tests/esm-path-mapping/import-under-base.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Should import under base directory -import underBaseJs from 'level-3/under-base-js.js'; -import underBaseJsx from 'level-3/under-base-jsx.js'; -import underBaseTs from 'level-3/under-base-ts.js'; - -// Pre-conditions -import * as assert from 'assert'; - -// Assertions -assert.strictEqual(underBaseJs, 'under-base-js'); -assert.strictEqual(underBaseJsx, 'under-base-jsx'); -assert.strictEqual(underBaseTs, 'under-base-ts'); diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/below-base-js.js b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-js.js new file mode 100644 index 000000000..72bebdf46 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-js.js @@ -0,0 +1 @@ +export default 'below-base-js'; diff --git a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx similarity index 67% rename from tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx rename to tests/esm-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx index 2586d1af7..b5c8c33c2 100644 --- a/tests/cjs-path-mapping/level-1/level-2/level-3/under-base-jsx.jsx +++ b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-jsx.jsx @@ -1,4 +1,4 @@ -export default 'under-base-jsx'; +export default 'below-base-jsx'; const React = { createElement() {}, diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/below-base-ts.ts b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-ts.ts new file mode 100644 index 000000000..e270d7ff1 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/level-3/below-base-ts.ts @@ -0,0 +1 @@ +export default 'below-base-ts'; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js deleted file mode 100644 index 535449288..000000000 --- a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'under-base-js'; diff --git a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts b/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts deleted file mode 100644 index 65523e08a..000000000 --- a/tests/esm-path-mapping/level-1/level-2/level-3/under-base-ts.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'under-base-ts'; From 64bb6796a2f5c9d0acf9a7fe5e1fc7b1aae953dd Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:26:24 +0700 Subject: [PATCH 61/74] tests: relative imports --- src/test/path-mapping.spec.ts | 40 ++++++++++--------- tests/cjs-path-mapping/import-relative.ts | 15 +++++++ .../cjs-path-mapping/level-1/above-base-js.js | 1 + .../level-1/above-base-jsx.jsx | 1 + .../cjs-path-mapping/level-1/above-base-ts.ts | 1 + tests/esm-path-mapping/import-relative.ts | 15 +++++++ .../esm-path-mapping/level-1/above-base-js.js | 1 + .../level-1/above-base-jsx.jsx | 1 + .../esm-path-mapping/level-1/above-base-ts.ts | 1 + 9 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 tests/cjs-path-mapping/import-relative.ts create mode 100644 tests/cjs-path-mapping/level-1/above-base-js.js create mode 100644 tests/cjs-path-mapping/level-1/above-base-jsx.jsx create mode 100644 tests/cjs-path-mapping/level-1/above-base-ts.ts create mode 100644 tests/esm-path-mapping/import-relative.ts create mode 100644 tests/esm-path-mapping/level-1/above-base-js.js create mode 100644 tests/esm-path-mapping/level-1/above-base-jsx.jsx create mode 100644 tests/esm-path-mapping/level-1/above-base-ts.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 862cf05af..960ce24de 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -56,21 +56,6 @@ for (const moduleType of Object.values(MODULE_TYPES)) { const exec = execBuilder(moduleType.command, moduleType.baseDir, project); test.suite(`${project}`, (test) => { - test(`fallback to node built-in`, async (t) => { - const { err } = await exec('import-node-built-in.ts'); - expect(err).toBeNull(); - }); - - test(`fallback to node_modules`, async (t) => { - const { err } = await exec('import-node-modules.ts'); - expect(err).toBeNull(); - }); - - test(`imports within node_modules ignore paths`, async (t) => { - const { err } = await exec('import-within-node-modules.ts'); - expect(err).toBeNull(); - }); - test('ignore type definitions', async (t) => { const { err } = await exec('ignore-type-definitions.ts'); expect(err).toBeNull(); @@ -96,10 +81,25 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test('relative imports should ignore paths', async () => { - // const { err } = await exec('import-relative.ts'); - // expect(err).toBeNull(); - // }); + test(`import node built-in`, async (t) => { + const { err } = await exec('import-node-built-in.ts'); + expect(err).toBeNull(); + }); + + test(`import node_modules`, async (t) => { + const { err } = await exec('import-node-modules.ts'); + expect(err).toBeNull(); + }); + + test(`import within node_modules ignores paths`, async (t) => { + const { err } = await exec('import-within-node-modules.ts'); + expect(err).toBeNull(); + }); + + test('import relative', async () => { + const { err } = await exec('import-relative.ts'); + expect(err).toBeNull(); + }); // test(`import invalid path`, async () => { // const { stderr, err } = await exec('import-non-existing.ts'); @@ -117,6 +117,8 @@ for (const moduleType of Object.values(MODULE_TYPES)) { }); } + // TODO: Import relative shouldn't succeed using star-path + // // Create ts-node runner config with paths // const exec = execBuilder( // execBuilderParams.command, diff --git a/tests/cjs-path-mapping/import-relative.ts b/tests/cjs-path-mapping/import-relative.ts new file mode 100644 index 000000000..3e30246f8 --- /dev/null +++ b/tests/cjs-path-mapping/import-relative.ts @@ -0,0 +1,15 @@ +// Should be able to use relative imports +const aboveBaseJs = require('./level-1/above-base-js'); +const aboveBaseJsx = require('../cjs-path-mapping/level-1/above-base-jsx'); +const aboveBaseTs = require('/level-1/above-base-ts'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(aboveBaseJs, 'above-base-js'); +assert.strictEqual(aboveBaseJsx, 'above-base-jsx'); +assert.strictEqual(aboveBaseTs, 'above-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/level-1/above-base-js.js b/tests/cjs-path-mapping/level-1/above-base-js.js new file mode 100644 index 000000000..14787d065 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/above-base-js.js @@ -0,0 +1 @@ +export default 'above-base-js'; diff --git a/tests/cjs-path-mapping/level-1/above-base-jsx.jsx b/tests/cjs-path-mapping/level-1/above-base-jsx.jsx new file mode 100644 index 000000000..bf2de07c1 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/above-base-jsx.jsx @@ -0,0 +1 @@ +export default 'above-base-jsx'; diff --git a/tests/cjs-path-mapping/level-1/above-base-ts.ts b/tests/cjs-path-mapping/level-1/above-base-ts.ts new file mode 100644 index 000000000..0e6b7f531 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/above-base-ts.ts @@ -0,0 +1 @@ +export default 'above-base-ts'; diff --git a/tests/esm-path-mapping/import-relative.ts b/tests/esm-path-mapping/import-relative.ts new file mode 100644 index 000000000..2f067314b --- /dev/null +++ b/tests/esm-path-mapping/import-relative.ts @@ -0,0 +1,15 @@ +// Should be able to use relative imports +import aboveBaseJs from './level-1/above-base-js'; +import aboveBaseJsx from '../cjs-path-mapping/level-1/above-base-jsx'; +import aboveBaseTs from '/level-1/above-base-ts'; + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(aboveBaseJs, 'above-base-js'); +assert.strictEqual(aboveBaseJsx, 'above-base-jsx'); +assert.strictEqual(aboveBaseTs, 'above-base-ts'); + +// Force this to be a module +export {}; diff --git a/tests/esm-path-mapping/level-1/above-base-js.js b/tests/esm-path-mapping/level-1/above-base-js.js new file mode 100644 index 000000000..14787d065 --- /dev/null +++ b/tests/esm-path-mapping/level-1/above-base-js.js @@ -0,0 +1 @@ +export default 'above-base-js'; diff --git a/tests/esm-path-mapping/level-1/above-base-jsx.jsx b/tests/esm-path-mapping/level-1/above-base-jsx.jsx new file mode 100644 index 000000000..bf2de07c1 --- /dev/null +++ b/tests/esm-path-mapping/level-1/above-base-jsx.jsx @@ -0,0 +1 @@ +export default 'above-base-jsx'; diff --git a/tests/esm-path-mapping/level-1/above-base-ts.ts b/tests/esm-path-mapping/level-1/above-base-ts.ts new file mode 100644 index 000000000..0e6b7f531 --- /dev/null +++ b/tests/esm-path-mapping/level-1/above-base-ts.ts @@ -0,0 +1 @@ +export default 'above-base-ts'; From 058d2e27b8d7fe4e084972e406c912f81b7dc2d4 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:34:08 +0700 Subject: [PATCH 62/74] tests: import invalid path --- src/test/path-mapping.spec.ts | 25 +++++++++---------- tests/cjs-path-mapping/import-non-existing.ts | 8 ++++++ tests/esm-path-mapping/import-non-existing.ts | 5 ++++ 3 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 tests/cjs-path-mapping/import-non-existing.ts create mode 100644 tests/esm-path-mapping/import-non-existing.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 960ce24de..7b102c793 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -101,19 +101,18 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test(`import invalid path`, async () => { - // const { stderr, err } = await exec('import-non-existing.ts'); - - // // Expect error - // expect(err).toBeTruthy(); - // expect(stderr).toMatch( - // `[ERR_MODULE_NOT_FOUND]: Cannot find 'map2/does-not-exist.ts'` - // ); - - // // Expect tried candidates to be listed - // expect(stderr).toMatch(/- file:\/\/.*mapped\/2-does-not-exist.ts/); - // expect(stderr).toMatch(/- file:\/\/.*mapped\/2a-does-not-exist.ts/); - // }); + test(`import invalid path should error`, async () => { + const { stderr, err } = await exec('import-non-existing.ts'); + + // Expect error + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find 'non-existing.js'` + ); + + // Expect tried candidates to be listed + expect(stderr).toMatch(/- file:\/\/.*non-existing.js/); + }); }); } diff --git a/tests/cjs-path-mapping/import-non-existing.ts b/tests/cjs-path-mapping/import-non-existing.ts new file mode 100644 index 000000000..b834dd231 --- /dev/null +++ b/tests/cjs-path-mapping/import-non-existing.ts @@ -0,0 +1,8 @@ +// Should fail to import non-existing file +const nonExisting = require('non-existing.js'); + +// Pretend we want to use it +console.log(nonExisting); + +// Force this to be a module +export {}; diff --git a/tests/esm-path-mapping/import-non-existing.ts b/tests/esm-path-mapping/import-non-existing.ts new file mode 100644 index 000000000..b1432d821 --- /dev/null +++ b/tests/esm-path-mapping/import-non-existing.ts @@ -0,0 +1,5 @@ +// Should fail to import non-existing file +import nonExisting from 'non-existing.js'; + +// Pretend we want to use it +console.log(nonExisting); From 4a3b6b4ad971b6f0d262e954c03327d7fd91d301 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 01:58:52 +0700 Subject: [PATCH 63/74] test: should not use star-path to resolve relative import --- src/test/path-mapping.spec.ts | 64 ++++++++++++++----- .../import-relative-ignores-star.ts | 8 +++ .../level-1/level-2/should-not-resolve.ts | 1 + .../level-2/should-not-resolve.ts | 1 + .../import-relative-ignores-star.ts | 5 ++ .../level-1/level-2/should-not-resolve.ts | 1 + .../level-2/should-not-resolve.ts | 1 + 7 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 tests/cjs-path-mapping/import-relative-ignores-star.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/should-not-resolve.ts create mode 100644 tests/cjs-path-mapping/level-2/should-not-resolve.ts create mode 100644 tests/esm-path-mapping/import-relative-ignores-star.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/should-not-resolve.ts create mode 100644 tests/esm-path-mapping/level-2/should-not-resolve.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 7b102c793..dcd943555 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -101,33 +101,63 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - test(`import invalid path should error`, async () => { - const { stderr, err } = await exec('import-non-existing.ts'); - - // Expect error + test(`import invalid path should error & list candidates`, async () => { + const { err, stderr } = await exec('import-non-existing.ts'); expect(err).toBeTruthy(); expect(stderr).toMatch( `[ERR_MODULE_NOT_FOUND]: Cannot find 'non-existing.js'` ); - - // Expect tried candidates to be listed expect(stderr).toMatch(/- file:\/\/.*non-existing.js/); }); }); } - // TODO: Import relative shouldn't succeed using star-path + test.suite(`${PROJECT_CONFIGS.BASE_URL_STAR_PATH} only`, (test) => { + const exec = execBuilder( + moduleType.command, + moduleType.baseDir, + PROJECT_CONFIGS.BASE_URL_STAR_PATH + ); + + test('import relative should not succeed using star-path', async (t) => { + const { err, stderr } = await exec('import-relative-ignores-star.ts'); + expect(err).toBeTruthy(); + expect(stderr).toMatch( + `[ERR_MODULE_NOT_FOUND]: Cannot find './should-not-resolve'` + ); + }); + }); + + // test.suite(`${PROJECT_CONFIGS.BASE_URL_SOME_PATHS} only`, (test) => { + // const exec = execBuilder(moduleType.command, moduleType.baseDir, PROJECT_CONFIGS.BASE_URL_SOME_PATHS); + + // test('map using a prefix', async (t) => { + // // TODO + // }); + + // test('map to js, jsx, tsx', async (t) => { + // // TODO + // }); + + // test('map to first candidate', async (t) => { + // // TODO + // }); + + // test('map to second candidate when first not available', async (t) => { + // // TODO + // }); + + // test('map to more specific candidate', async (t) => { + // // TODO + // }); - // // Create ts-node runner config with paths - // const exec = execBuilder( - // execBuilderParams.command, - // execBuilderParams.baseDir, - // PROJECT_CONFIGS.BASE_URL_AND_PATHS - // ); + // test('map to static (no wildcard)', async (t) => { + // // TODO + // }); - // test(`import specific paths`, async () => { - // const { err } = await exec('???'); - // expect(err).toBeNull(); - // }); + // test('map from js, jsx, tsx', async (t) => { + // // TODO + // }); + // }) }); } diff --git a/tests/cjs-path-mapping/import-relative-ignores-star.ts b/tests/cjs-path-mapping/import-relative-ignores-star.ts new file mode 100644 index 000000000..1da0468e5 --- /dev/null +++ b/tests/cjs-path-mapping/import-relative-ignores-star.ts @@ -0,0 +1,8 @@ +// Should fail to import relative import that would need to apply a path +const shouldNotResolve = require('./should-not-resolve'); + +// Pretend we want to use it +console.log(shouldNotResolve); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/level-1/level-2/should-not-resolve.ts b/tests/cjs-path-mapping/level-1/level-2/should-not-resolve.ts new file mode 100644 index 000000000..07f3178c6 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/should-not-resolve.ts @@ -0,0 +1 @@ +export default 'should-not-resolve-at-base'; diff --git a/tests/cjs-path-mapping/level-2/should-not-resolve.ts b/tests/cjs-path-mapping/level-2/should-not-resolve.ts new file mode 100644 index 000000000..938efdb04 --- /dev/null +++ b/tests/cjs-path-mapping/level-2/should-not-resolve.ts @@ -0,0 +1 @@ +export default 'should-not-resolve'; diff --git a/tests/esm-path-mapping/import-relative-ignores-star.ts b/tests/esm-path-mapping/import-relative-ignores-star.ts new file mode 100644 index 000000000..9aab33183 --- /dev/null +++ b/tests/esm-path-mapping/import-relative-ignores-star.ts @@ -0,0 +1,5 @@ +// Should fail to import relative import that would need to apply a path +import shouldNotResolve from './should-not-resolve'; + +// Pretend we want to use it +console.log(shouldNotResolve); diff --git a/tests/esm-path-mapping/level-1/level-2/should-not-resolve.ts b/tests/esm-path-mapping/level-1/level-2/should-not-resolve.ts new file mode 100644 index 000000000..07f3178c6 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/should-not-resolve.ts @@ -0,0 +1 @@ +export default 'should-not-resolve-at-base'; diff --git a/tests/esm-path-mapping/level-2/should-not-resolve.ts b/tests/esm-path-mapping/level-2/should-not-resolve.ts new file mode 100644 index 000000000..938efdb04 --- /dev/null +++ b/tests/esm-path-mapping/level-2/should-not-resolve.ts @@ -0,0 +1 @@ +export default 'should-not-resolve'; From dc7e950091484288424db10189dda0739eef75fe Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:15:47 +0700 Subject: [PATCH 64/74] tests: basic path mapping --- src/test/path-mapping.spec.ts | 54 ++++++++++--------- .../level-1/level-2/mapped-js.js | 1 + .../level-1/level-2/mapped-jsx.jsx} | 2 +- .../level-1/level-2/mapped-ts.ts | 1 + .../level-1/level-2/mapped-tsx.tsx} | 2 +- tests/cjs-path-mapping/map-to-js-jsx-tsx.ts | 15 ++++++ tests/cjs-path-mapping/map-using-prefix.ts | 11 ++++ .../tsconfig-baseurl-some-paths.json | 8 +-- .../level-1/level-2/mapped-js.js | 1 + .../level-1/level-2/mapped-jsx.jsx | 6 +++ .../level-1/level-2/mapped-ts.ts | 1 + .../level-1/level-2/mapped-tsx.tsx | 6 +++ tests/esm-path-mapping/map-to-js-jsx-tsx.ts | 12 +++++ tests/esm-path-mapping/map-using-prefix.ts | 8 +++ .../tsconfig-baseurl-some-paths.json | 8 +-- 15 files changed, 102 insertions(+), 34 deletions(-) create mode 100644 tests/cjs-path-mapping/level-1/level-2/mapped-js.js rename tests/{esm-path-mapping-todo2/base/jsx.jsx => cjs-path-mapping/level-1/level-2/mapped-jsx.jsx} (69%) create mode 100644 tests/cjs-path-mapping/level-1/level-2/mapped-ts.ts rename tests/{esm-path-mapping-todo2/base/child/jsx.jsx => cjs-path-mapping/level-1/level-2/mapped-tsx.tsx} (67%) create mode 100644 tests/cjs-path-mapping/map-to-js-jsx-tsx.ts create mode 100644 tests/cjs-path-mapping/map-using-prefix.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/mapped-js.js create mode 100644 tests/esm-path-mapping/level-1/level-2/mapped-jsx.jsx create mode 100644 tests/esm-path-mapping/level-1/level-2/mapped-ts.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/mapped-tsx.tsx create mode 100644 tests/esm-path-mapping/map-to-js-jsx-tsx.ts create mode 100644 tests/esm-path-mapping/map-using-prefix.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index dcd943555..33148a5f8 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -128,36 +128,42 @@ for (const moduleType of Object.values(MODULE_TYPES)) { }); }); - // test.suite(`${PROJECT_CONFIGS.BASE_URL_SOME_PATHS} only`, (test) => { - // const exec = execBuilder(moduleType.command, moduleType.baseDir, PROJECT_CONFIGS.BASE_URL_SOME_PATHS); + test.suite(`${PROJECT_CONFIGS.BASE_URL_SOME_PATHS} only`, (test) => { + const exec = execBuilder( + moduleType.command, + moduleType.baseDir, + PROJECT_CONFIGS.BASE_URL_SOME_PATHS + ); - // test('map using a prefix', async (t) => { - // // TODO - // }); + test('map using a prefix', async (t) => { + const { err } = await exec('map-using-prefix.ts'); + expect(err).toBeNull(); + }); - // test('map to js, jsx, tsx', async (t) => { - // // TODO - // }); + test('map to js, jsx, tsx', async (t) => { + const { err } = await exec('map-to-js-jsx-tsx.ts'); + expect(err).toBeNull(); + }); - // test('map to first candidate', async (t) => { - // // TODO - // }); + // test('map to first candidate', async (t) => { + // // TODO + // }); - // test('map to second candidate when first not available', async (t) => { - // // TODO - // }); + // test('map to second candidate when first not available', async (t) => { + // // TODO + // }); - // test('map to more specific candidate', async (t) => { - // // TODO - // }); + // test('map to more specific candidate', async (t) => { + // // TODO + // }); - // test('map to static (no wildcard)', async (t) => { - // // TODO - // }); + // test('map to static (no wildcard)', async (t) => { + // // TODO + // }); - // test('map from js, jsx, tsx', async (t) => { - // // TODO - // }); - // }) + // test('map from js, jsx, tsx', async (t) => { + // // TODO + // }); + }); }); } diff --git a/tests/cjs-path-mapping/level-1/level-2/mapped-js.js b/tests/cjs-path-mapping/level-1/level-2/mapped-js.js new file mode 100644 index 000000000..b68675ef9 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/mapped-js.js @@ -0,0 +1 @@ +export default 'mapped-js'; diff --git a/tests/esm-path-mapping-todo2/base/jsx.jsx b/tests/cjs-path-mapping/level-1/level-2/mapped-jsx.jsx similarity index 69% rename from tests/esm-path-mapping-todo2/base/jsx.jsx rename to tests/cjs-path-mapping/level-1/level-2/mapped-jsx.jsx index db6e955eb..c83d6fee6 100644 --- a/tests/esm-path-mapping-todo2/base/jsx.jsx +++ b/tests/cjs-path-mapping/level-1/level-2/mapped-jsx.jsx @@ -1,4 +1,4 @@ -export default 'base/jsx'; +export default 'mapped-jsx'; const React = { createElement() {}, diff --git a/tests/cjs-path-mapping/level-1/level-2/mapped-ts.ts b/tests/cjs-path-mapping/level-1/level-2/mapped-ts.ts new file mode 100644 index 000000000..2859038cc --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/mapped-ts.ts @@ -0,0 +1 @@ +export default 'mapped-ts'; diff --git a/tests/esm-path-mapping-todo2/base/child/jsx.jsx b/tests/cjs-path-mapping/level-1/level-2/mapped-tsx.tsx similarity index 67% rename from tests/esm-path-mapping-todo2/base/child/jsx.jsx rename to tests/cjs-path-mapping/level-1/level-2/mapped-tsx.tsx index f3bfb26c8..3ccd0d524 100644 --- a/tests/esm-path-mapping-todo2/base/child/jsx.jsx +++ b/tests/cjs-path-mapping/level-1/level-2/mapped-tsx.tsx @@ -1,4 +1,4 @@ -export default 'base/child/jsx'; +export default 'mapped-tsx'; const React = { createElement() {}, diff --git a/tests/cjs-path-mapping/map-to-js-jsx-tsx.ts b/tests/cjs-path-mapping/map-to-js-jsx-tsx.ts new file mode 100644 index 000000000..16304de0b --- /dev/null +++ b/tests/cjs-path-mapping/map-to-js-jsx-tsx.ts @@ -0,0 +1,15 @@ +// Should be able to use path to map to js, jsx, tsx +const mappedJs = require('mapped/js'); +const mappedJsx = require('mapped/jsx'); +const mappedTsx = require('mapped/tsx'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/map-using-prefix.ts b/tests/cjs-path-mapping/map-using-prefix.ts new file mode 100644 index 000000000..6f720e26b --- /dev/null +++ b/tests/cjs-path-mapping/map-using-prefix.ts @@ -0,0 +1,11 @@ +// Should be able to use path to map import +const mappedTs = require('mapped/ts'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json index 1ca0c848c..711c57c87 100644 --- a/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json @@ -4,10 +4,10 @@ "compilerOptions": { "baseUrl": "./level-1/level-2", "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.js"] + "mapped/*": ["./mapped-*"] + // "map2/*": ["./2-*", "./2a-*"], + // "map2/specific/*": ["./2-specific-*"], + // "static": ["./static.js"] } } } diff --git a/tests/esm-path-mapping/level-1/level-2/mapped-js.js b/tests/esm-path-mapping/level-1/level-2/mapped-js.js new file mode 100644 index 000000000..b68675ef9 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/mapped-js.js @@ -0,0 +1 @@ +export default 'mapped-js'; diff --git a/tests/esm-path-mapping/level-1/level-2/mapped-jsx.jsx b/tests/esm-path-mapping/level-1/level-2/mapped-jsx.jsx new file mode 100644 index 000000000..c83d6fee6 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/mapped-jsx.jsx @@ -0,0 +1,6 @@ +export default 'mapped-jsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/level-1/level-2/mapped-ts.ts b/tests/esm-path-mapping/level-1/level-2/mapped-ts.ts new file mode 100644 index 000000000..2859038cc --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/mapped-ts.ts @@ -0,0 +1 @@ +export default 'mapped-ts'; diff --git a/tests/esm-path-mapping/level-1/level-2/mapped-tsx.tsx b/tests/esm-path-mapping/level-1/level-2/mapped-tsx.tsx new file mode 100644 index 000000000..3ccd0d524 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/mapped-tsx.tsx @@ -0,0 +1,6 @@ +export default 'mapped-tsx'; + +const React = { + createElement() {}, +}; +const div =
; diff --git a/tests/esm-path-mapping/map-to-js-jsx-tsx.ts b/tests/esm-path-mapping/map-to-js-jsx-tsx.ts new file mode 100644 index 000000000..c2bd52d48 --- /dev/null +++ b/tests/esm-path-mapping/map-to-js-jsx-tsx.ts @@ -0,0 +1,12 @@ +// Should be able to use path to map to js, jsx, tsx +import mappedJs from 'mapped/js'; +import mappedJsx from 'mapped/jsx'; +import mappedTsx from 'mapped/tsx'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); diff --git a/tests/esm-path-mapping/map-using-prefix.ts b/tests/esm-path-mapping/map-using-prefix.ts new file mode 100644 index 000000000..fc4e2819f --- /dev/null +++ b/tests/esm-path-mapping/map-using-prefix.ts @@ -0,0 +1,8 @@ +// Should be able to use path to map import +import mappedTs from 'mapped/ts'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json index 1ca0c848c..711c57c87 100644 --- a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json @@ -4,10 +4,10 @@ "compilerOptions": { "baseUrl": "./level-1/level-2", "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.js"] + "mapped/*": ["./mapped-*"] + // "map2/*": ["./2-*", "./2a-*"], + // "map2/specific/*": ["./2-specific-*"], + // "static": ["./static.js"] } } } From c5ea9b059e081e069b280080f56d49e759e2fdb9 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:15:58 +0700 Subject: [PATCH 65/74] fix import style --- tests/esm-path-mapping/import-relative.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/esm-path-mapping/import-relative.ts b/tests/esm-path-mapping/import-relative.ts index 2f067314b..529437b94 100644 --- a/tests/esm-path-mapping/import-relative.ts +++ b/tests/esm-path-mapping/import-relative.ts @@ -4,12 +4,9 @@ import aboveBaseJsx from '../cjs-path-mapping/level-1/above-base-jsx'; import aboveBaseTs from '/level-1/above-base-ts'; // Pre-conditions -const assert = require('assert'); +import * as assert from 'assert'; // Assertions assert.strictEqual(aboveBaseJs, 'above-base-js'); assert.strictEqual(aboveBaseJsx, 'above-base-jsx'); assert.strictEqual(aboveBaseTs, 'above-base-ts'); - -// Force this to be a module -export {}; From 7bfe31a2618a622897a351a0a3aa226e73d10884 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:55:13 +0700 Subject: [PATCH 66/74] tests: map using first available candidate --- src/test/path-mapping.spec.ts | 11 ++++------- .../level-1/level-2/candidate-1-foo.ts | 1 + .../level-1/level-2/candidate-2-bar.ts | 1 + .../level-1/level-2/candidate-2-foo.ts | 1 + .../map-to-first-available-candidate.ts | 13 +++++++++++++ .../tsconfig-baseurl-some-paths.json | 4 ++-- .../level-1/level-2/candidate-1-foo.ts | 1 + .../level-1/level-2/candidate-2-bar.ts | 1 + .../level-1/level-2/candidate-2-foo.ts | 1 + .../map-to-first-available-candidate.ts | 10 ++++++++++ .../tsconfig-baseurl-some-paths.json | 4 ++-- 11 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 tests/cjs-path-mapping/level-1/level-2/candidate-1-foo.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/candidate-2-bar.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/candidate-2-foo.ts create mode 100644 tests/cjs-path-mapping/map-to-first-available-candidate.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/candidate-1-foo.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/candidate-2-bar.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/candidate-2-foo.ts create mode 100644 tests/esm-path-mapping/map-to-first-available-candidate.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 33148a5f8..16c511ce8 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -145,13 +145,10 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test('map to first candidate', async (t) => { - // // TODO - // }); - - // test('map to second candidate when first not available', async (t) => { - // // TODO - // }); + test('map to first available candidate', async (t) => { + const { err } = await exec('map-to-first-available-candidate.ts'); + expect(err).toBeNull(); + }); // test('map to more specific candidate', async (t) => { // // TODO diff --git a/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo.ts b/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo.ts new file mode 100644 index 000000000..9fa19cea4 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo.ts @@ -0,0 +1 @@ +export default 'candidate-1-foo'; diff --git a/tests/cjs-path-mapping/level-1/level-2/candidate-2-bar.ts b/tests/cjs-path-mapping/level-1/level-2/candidate-2-bar.ts new file mode 100644 index 000000000..6580a49f4 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/candidate-2-bar.ts @@ -0,0 +1 @@ +export default 'candidate-2-bar'; diff --git a/tests/cjs-path-mapping/level-1/level-2/candidate-2-foo.ts b/tests/cjs-path-mapping/level-1/level-2/candidate-2-foo.ts new file mode 100644 index 000000000..d8728d603 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/candidate-2-foo.ts @@ -0,0 +1 @@ +export default 'candidate-2-foo'; diff --git a/tests/cjs-path-mapping/map-to-first-available-candidate.ts b/tests/cjs-path-mapping/map-to-first-available-candidate.ts new file mode 100644 index 000000000..9a2f7baba --- /dev/null +++ b/tests/cjs-path-mapping/map-to-first-available-candidate.ts @@ -0,0 +1,13 @@ +// Should map to the first path pattern that exists +const foo = require('candidate/foo'); +const bar = require('candidate/bar'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json index 711c57c87..5f7bf5e58 100644 --- a/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/cjs-path-mapping/tsconfig-baseurl-some-paths.json @@ -4,8 +4,8 @@ "compilerOptions": { "baseUrl": "./level-1/level-2", "paths": { - "mapped/*": ["./mapped-*"] - // "map2/*": ["./2-*", "./2a-*"], + "mapped/*": ["./mapped-*"], + "candidate/*": ["./candidate-1-*", "./candidate-2-*"] // "map2/specific/*": ["./2-specific-*"], // "static": ["./static.js"] } diff --git a/tests/esm-path-mapping/level-1/level-2/candidate-1-foo.ts b/tests/esm-path-mapping/level-1/level-2/candidate-1-foo.ts new file mode 100644 index 000000000..9fa19cea4 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/candidate-1-foo.ts @@ -0,0 +1 @@ +export default 'candidate-1-foo'; diff --git a/tests/esm-path-mapping/level-1/level-2/candidate-2-bar.ts b/tests/esm-path-mapping/level-1/level-2/candidate-2-bar.ts new file mode 100644 index 000000000..6580a49f4 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/candidate-2-bar.ts @@ -0,0 +1 @@ +export default 'candidate-2-bar'; diff --git a/tests/esm-path-mapping/level-1/level-2/candidate-2-foo.ts b/tests/esm-path-mapping/level-1/level-2/candidate-2-foo.ts new file mode 100644 index 000000000..d8728d603 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/candidate-2-foo.ts @@ -0,0 +1 @@ +export default 'candidate-2-foo'; diff --git a/tests/esm-path-mapping/map-to-first-available-candidate.ts b/tests/esm-path-mapping/map-to-first-available-candidate.ts new file mode 100644 index 000000000..4ba26d71e --- /dev/null +++ b/tests/esm-path-mapping/map-to-first-available-candidate.ts @@ -0,0 +1,10 @@ +// Should map to the first path pattern that exists +import foo from 'candidate/foo'; +import bar from 'candidate/bar'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json index 711c57c87..5f7bf5e58 100644 --- a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json @@ -4,8 +4,8 @@ "compilerOptions": { "baseUrl": "./level-1/level-2", "paths": { - "mapped/*": ["./mapped-*"] - // "map2/*": ["./2-*", "./2a-*"], + "mapped/*": ["./mapped-*"], + "candidate/*": ["./candidate-1-*", "./candidate-2-*"] // "map2/specific/*": ["./2-specific-*"], // "static": ["./static.js"] } From c8c35caed96c4679d9293704faf58a02760b894b Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:56:44 +0700 Subject: [PATCH 67/74] tests: more specific path; static path --- src/test/path-mapping.spec.ts | 14 ++++++++------ .../level-1/level-2/candidate-1-foo/bar.ts | 1 + .../level-1/level-2/candidate-foo-bar.ts | 1 + tests/cjs-path-mapping/level-1/level-2/immobile.ts | 1 + .../map-using-more-specific-path.ts | 13 +++++++++++++ tests/cjs-path-mapping/map-using-static-path.ts | 11 +++++++++++ .../level-1/level-2/candidate-1-foo/bar.ts | 1 + .../level-1/level-2/candidate-foo-bar.ts | 1 + tests/esm-path-mapping/level-1/level-2/immobile.ts | 1 + .../map-using-more-specific-path.ts | 10 ++++++++++ tests/esm-path-mapping/map-using-static-path.ts | 8 ++++++++ .../tsconfig-baseurl-some-paths.json | 6 +++--- 12 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 tests/cjs-path-mapping/level-1/level-2/candidate-1-foo/bar.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/candidate-foo-bar.ts create mode 100644 tests/cjs-path-mapping/level-1/level-2/immobile.ts create mode 100644 tests/cjs-path-mapping/map-using-more-specific-path.ts create mode 100644 tests/cjs-path-mapping/map-using-static-path.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/candidate-1-foo/bar.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/candidate-foo-bar.ts create mode 100644 tests/esm-path-mapping/level-1/level-2/immobile.ts create mode 100644 tests/esm-path-mapping/map-using-more-specific-path.ts create mode 100644 tests/esm-path-mapping/map-using-static-path.ts diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 16c511ce8..1f44f045d 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -150,13 +150,15 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test('map to more specific candidate', async (t) => { - // // TODO - // }); + test('map using more specific candidate', async (t) => { + const { err } = await exec('map-using-more-specific-path.ts'); + expect(err).toBeNull(); + }); - // test('map to static (no wildcard)', async (t) => { - // // TODO - // }); + test('map to static (no wildcard)', async (t) => { + const { err } = await exec('map-using-static-path.ts'); + expect(err).toBeNull(); + }); // test('map from js, jsx, tsx', async (t) => { // // TODO diff --git a/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo/bar.ts b/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo/bar.ts new file mode 100644 index 000000000..67f84813a --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/candidate-1-foo/bar.ts @@ -0,0 +1 @@ +export default 'nested-bar'; // not the same as ../candidate-foo-bar diff --git a/tests/cjs-path-mapping/level-1/level-2/candidate-foo-bar.ts b/tests/cjs-path-mapping/level-1/level-2/candidate-foo-bar.ts new file mode 100644 index 000000000..fcc393269 --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/candidate-foo-bar.ts @@ -0,0 +1 @@ +export default 'candidate-foo-bar'; diff --git a/tests/cjs-path-mapping/level-1/level-2/immobile.ts b/tests/cjs-path-mapping/level-1/level-2/immobile.ts new file mode 100644 index 000000000..d54b5651d --- /dev/null +++ b/tests/cjs-path-mapping/level-1/level-2/immobile.ts @@ -0,0 +1 @@ +export default 'immobile'; diff --git a/tests/cjs-path-mapping/map-using-more-specific-path.ts b/tests/cjs-path-mapping/map-using-more-specific-path.ts new file mode 100644 index 000000000..23aa65809 --- /dev/null +++ b/tests/cjs-path-mapping/map-using-more-specific-path.ts @@ -0,0 +1,13 @@ +// Should map using the more specific path +// ❌ "candidate/*": ["./candidate-1-*", "./candidate-2-*"] => ./candidate-1-foo/bar +// ✅ "candidate/foo/*": ["./candidate-foo-*"] => ./candidate-foo-bar +const fooBar = require('candidate/foo/bar'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(fooBar, 'candidate-foo-bar'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/map-using-static-path.ts b/tests/cjs-path-mapping/map-using-static-path.ts new file mode 100644 index 000000000..6358d1e9d --- /dev/null +++ b/tests/cjs-path-mapping/map-using-static-path.ts @@ -0,0 +1,11 @@ +// Should map to static path (no wildcard) +const immobile = require('static'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(immobile, 'immobile'); + +// Force this to be a module +export {}; diff --git a/tests/esm-path-mapping/level-1/level-2/candidate-1-foo/bar.ts b/tests/esm-path-mapping/level-1/level-2/candidate-1-foo/bar.ts new file mode 100644 index 000000000..67f84813a --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/candidate-1-foo/bar.ts @@ -0,0 +1 @@ +export default 'nested-bar'; // not the same as ../candidate-foo-bar diff --git a/tests/esm-path-mapping/level-1/level-2/candidate-foo-bar.ts b/tests/esm-path-mapping/level-1/level-2/candidate-foo-bar.ts new file mode 100644 index 000000000..fcc393269 --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/candidate-foo-bar.ts @@ -0,0 +1 @@ +export default 'candidate-foo-bar'; diff --git a/tests/esm-path-mapping/level-1/level-2/immobile.ts b/tests/esm-path-mapping/level-1/level-2/immobile.ts new file mode 100644 index 000000000..d54b5651d --- /dev/null +++ b/tests/esm-path-mapping/level-1/level-2/immobile.ts @@ -0,0 +1 @@ +export default 'immobile'; diff --git a/tests/esm-path-mapping/map-using-more-specific-path.ts b/tests/esm-path-mapping/map-using-more-specific-path.ts new file mode 100644 index 000000000..10b14683f --- /dev/null +++ b/tests/esm-path-mapping/map-using-more-specific-path.ts @@ -0,0 +1,10 @@ +// Should map using the more specific path +// ❌ "candidate/*": ["./candidate-1-*", "./candidate-2-*"] => ./candidate-1-foo/bar +// ✅ "candidate/foo/*": ["./candidate-foo-*"] => ./candidate-foo-bar +import fooBar from 'candidate/foo/bar'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(fooBar, 'candidate-foo-bar'); diff --git a/tests/esm-path-mapping/map-using-static-path.ts b/tests/esm-path-mapping/map-using-static-path.ts new file mode 100644 index 000000000..47241c528 --- /dev/null +++ b/tests/esm-path-mapping/map-using-static-path.ts @@ -0,0 +1,8 @@ +// Should map to static path (no wildcard) +import immobile from 'static'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(immobile, 'immobile'); diff --git a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json index 5f7bf5e58..8d37b3b5c 100644 --- a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json @@ -5,9 +5,9 @@ "baseUrl": "./level-1/level-2", "paths": { "mapped/*": ["./mapped-*"], - "candidate/*": ["./candidate-1-*", "./candidate-2-*"] - // "map2/specific/*": ["./2-specific-*"], - // "static": ["./static.js"] + "candidate/*": ["./candidate-1-*", "./candidate-2-*"], + "candidate/foo/*": ["./candidate-foo-*"], + "static": ["./immobile"] } } } From 99ca516aed1813d36a09e9cc44149b21a6a4dc03 Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 02:57:10 +0700 Subject: [PATCH 68/74] comment out file-system-base-relative import --- tests/cjs-path-mapping/import-relative.ts | 4 ++-- tests/esm-path-mapping/import-relative.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/cjs-path-mapping/import-relative.ts b/tests/cjs-path-mapping/import-relative.ts index 3e30246f8..36780f91e 100644 --- a/tests/cjs-path-mapping/import-relative.ts +++ b/tests/cjs-path-mapping/import-relative.ts @@ -1,7 +1,7 @@ // Should be able to use relative imports const aboveBaseJs = require('./level-1/above-base-js'); const aboveBaseJsx = require('../cjs-path-mapping/level-1/above-base-jsx'); -const aboveBaseTs = require('/level-1/above-base-ts'); +// const aboveBaseTs = require('/level-1/above-base-ts'); // Pre-conditions const assert = require('assert'); @@ -9,7 +9,7 @@ const assert = require('assert'); // Assertions assert.strictEqual(aboveBaseJs, 'above-base-js'); assert.strictEqual(aboveBaseJsx, 'above-base-jsx'); -assert.strictEqual(aboveBaseTs, 'above-base-ts'); +// assert.strictEqual(aboveBaseTs, 'above-base-ts'); // Force this to be a module export {}; diff --git a/tests/esm-path-mapping/import-relative.ts b/tests/esm-path-mapping/import-relative.ts index 529437b94..185b98e72 100644 --- a/tests/esm-path-mapping/import-relative.ts +++ b/tests/esm-path-mapping/import-relative.ts @@ -1,7 +1,7 @@ // Should be able to use relative imports import aboveBaseJs from './level-1/above-base-js'; import aboveBaseJsx from '../cjs-path-mapping/level-1/above-base-jsx'; -import aboveBaseTs from '/level-1/above-base-ts'; +// import aboveBaseTs from '/level-1/above-base-ts'; // Pre-conditions import * as assert from 'assert'; @@ -9,4 +9,4 @@ import * as assert from 'assert'; // Assertions assert.strictEqual(aboveBaseJs, 'above-base-js'); assert.strictEqual(aboveBaseJsx, 'above-base-jsx'); -assert.strictEqual(aboveBaseTs, 'above-base-ts'); +// assert.strictEqual(aboveBaseTs, 'above-base-ts'); From 4fefc57ea59c3813c71816e6491262a26b401e7e Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 03:05:20 +0700 Subject: [PATCH 69/74] tests: mapping from js, jsx, tsx files --- src/test/path-mapping.spec.ts | 7 +++--- tests/cjs-path-mapping/map-from-js-jsx-tsx.ts | 3 +++ tests/cjs-path-mapping/map-from-js.js | 25 +++++++++++++++++++ tests/cjs-path-mapping/map-from-jsx.jsx | 25 +++++++++++++++++++ tests/cjs-path-mapping/map-from-tsx.tsx | 25 +++++++++++++++++++ tests/esm-path-mapping/map-from-js-jsx-tsx.ts | 3 +++ tests/esm-path-mapping/map-from-js.js | 22 ++++++++++++++++ tests/esm-path-mapping/map-from-jsx.jsx | 22 ++++++++++++++++ tests/esm-path-mapping/map-from-tsx.tsx | 22 ++++++++++++++++ 9 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 tests/cjs-path-mapping/map-from-js-jsx-tsx.ts create mode 100644 tests/cjs-path-mapping/map-from-js.js create mode 100644 tests/cjs-path-mapping/map-from-jsx.jsx create mode 100644 tests/cjs-path-mapping/map-from-tsx.tsx create mode 100644 tests/esm-path-mapping/map-from-js-jsx-tsx.ts create mode 100644 tests/esm-path-mapping/map-from-js.js create mode 100644 tests/esm-path-mapping/map-from-jsx.jsx create mode 100644 tests/esm-path-mapping/map-from-tsx.tsx diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 1f44f045d..1eb1fe86d 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -160,9 +160,10 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); - // test('map from js, jsx, tsx', async (t) => { - // // TODO - // }); + test('map from js, jsx, tsx', async (t) => { + const { err } = await exec('map-from-js-jsx-tsx.ts'); + expect(err).toBeNull(); + }); }); }); } diff --git a/tests/cjs-path-mapping/map-from-js-jsx-tsx.ts b/tests/cjs-path-mapping/map-from-js-jsx-tsx.ts new file mode 100644 index 000000000..8d46cd4c5 --- /dev/null +++ b/tests/cjs-path-mapping/map-from-js-jsx-tsx.ts @@ -0,0 +1,3 @@ +require('./map-from-js'); +require('./map-from-jsx'); +require('./map-from-tsx'); diff --git a/tests/cjs-path-mapping/map-from-js.js b/tests/cjs-path-mapping/map-from-js.js new file mode 100644 index 000000000..3f39a8ae1 --- /dev/null +++ b/tests/cjs-path-mapping/map-from-js.js @@ -0,0 +1,25 @@ +// All mapped imports +const mappedJs = require('mapped/js'); +const mappedJsx = require('mapped/jsx'); +const mappedTs = require('mapped/ts'); +const mappedTsx = require('mapped/tsx'); +const foo = require('candidate/foo'); +const bar = require('candidate/bar'); +const fooBar = require('candidate/foo/bar'); +const immobile = require('static'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/map-from-jsx.jsx b/tests/cjs-path-mapping/map-from-jsx.jsx new file mode 100644 index 000000000..3f39a8ae1 --- /dev/null +++ b/tests/cjs-path-mapping/map-from-jsx.jsx @@ -0,0 +1,25 @@ +// All mapped imports +const mappedJs = require('mapped/js'); +const mappedJsx = require('mapped/jsx'); +const mappedTs = require('mapped/ts'); +const mappedTsx = require('mapped/tsx'); +const foo = require('candidate/foo'); +const bar = require('candidate/bar'); +const fooBar = require('candidate/foo/bar'); +const immobile = require('static'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); + +// Force this to be a module +export {}; diff --git a/tests/cjs-path-mapping/map-from-tsx.tsx b/tests/cjs-path-mapping/map-from-tsx.tsx new file mode 100644 index 000000000..3f39a8ae1 --- /dev/null +++ b/tests/cjs-path-mapping/map-from-tsx.tsx @@ -0,0 +1,25 @@ +// All mapped imports +const mappedJs = require('mapped/js'); +const mappedJsx = require('mapped/jsx'); +const mappedTs = require('mapped/ts'); +const mappedTsx = require('mapped/tsx'); +const foo = require('candidate/foo'); +const bar = require('candidate/bar'); +const fooBar = require('candidate/foo/bar'); +const immobile = require('static'); + +// Pre-conditions +const assert = require('assert'); + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); + +// Force this to be a module +export {}; diff --git a/tests/esm-path-mapping/map-from-js-jsx-tsx.ts b/tests/esm-path-mapping/map-from-js-jsx-tsx.ts new file mode 100644 index 000000000..c0287d4bb --- /dev/null +++ b/tests/esm-path-mapping/map-from-js-jsx-tsx.ts @@ -0,0 +1,3 @@ +import './map-from-js'; +import './map-from-jsx'; +import './map-from-tsx'; diff --git a/tests/esm-path-mapping/map-from-js.js b/tests/esm-path-mapping/map-from-js.js new file mode 100644 index 000000000..e8aeb930c --- /dev/null +++ b/tests/esm-path-mapping/map-from-js.js @@ -0,0 +1,22 @@ +// All mapped imports +import mappedJs from 'mapped/js'; +import mappedJsx from 'mapped/jsx'; +import mappedTs from 'mapped/ts'; +import mappedTsx from 'mapped/tsx'; +import foo from 'candidate/foo'; +import bar from 'candidate/bar'; +import fooBar from 'candidate/foo/bar'; +import immobile from 'static'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); diff --git a/tests/esm-path-mapping/map-from-jsx.jsx b/tests/esm-path-mapping/map-from-jsx.jsx new file mode 100644 index 000000000..e8aeb930c --- /dev/null +++ b/tests/esm-path-mapping/map-from-jsx.jsx @@ -0,0 +1,22 @@ +// All mapped imports +import mappedJs from 'mapped/js'; +import mappedJsx from 'mapped/jsx'; +import mappedTs from 'mapped/ts'; +import mappedTsx from 'mapped/tsx'; +import foo from 'candidate/foo'; +import bar from 'candidate/bar'; +import fooBar from 'candidate/foo/bar'; +import immobile from 'static'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); diff --git a/tests/esm-path-mapping/map-from-tsx.tsx b/tests/esm-path-mapping/map-from-tsx.tsx new file mode 100644 index 000000000..e8aeb930c --- /dev/null +++ b/tests/esm-path-mapping/map-from-tsx.tsx @@ -0,0 +1,22 @@ +// All mapped imports +import mappedJs from 'mapped/js'; +import mappedJsx from 'mapped/jsx'; +import mappedTs from 'mapped/ts'; +import mappedTsx from 'mapped/tsx'; +import foo from 'candidate/foo'; +import bar from 'candidate/bar'; +import fooBar from 'candidate/foo/bar'; +import immobile from 'static'; + +// Pre-conditions +import * as assert from 'assert'; + +// Assertions +assert.strictEqual(mappedTs, 'mapped-ts'); +assert.strictEqual(mappedTsx, 'mapped-tsx'); +assert.strictEqual(mappedJs, 'mapped-js'); +assert.strictEqual(mappedJsx, 'mapped-jsx'); +assert.strictEqual(foo, 'candidate-1-foo'); +assert.strictEqual(bar, 'candidate-2-bar'); +assert.strictEqual(fooBar, 'candidate-foo-bar'); +assert.strictEqual(immobile, 'immobile'); From 3a0067e6c6ccba7af82582be3e5edb14c65ff01f Mon Sep 17 00:00:00 2001 From: Charles Allen <31621095+charles-allen@users.noreply.github.com> Date: Tue, 29 Mar 2022 03:06:21 +0700 Subject: [PATCH 70/74] clean up (delete all old tests) --- tests/cjs-path-mapping-todo/index-js.js | 4 --- tests/cjs-path-mapping-todo/index-tsx.tsx | 4 --- tests/cjs-path-mapping-todo/index.ts | 36 ------------------- .../cjs-path-mapping-todo/mapped-not-found.ts | 1 - tests/cjs-path-mapping-todo/mapped/1-foo.ts | 1 - tests/cjs-path-mapping-todo/mapped/1-jsx.jsx | 6 ---- tests/cjs-path-mapping-todo/mapped/2-foo.ts | 1 - .../mapped/2-specific-foo.ts | 1 - tests/cjs-path-mapping-todo/mapped/2a-bar.ts | 1 - tests/cjs-path-mapping-todo/mapped/2a-foo.ts | 1 - tests/cjs-path-mapping-todo/mapped/2a-js.js | 1 - tests/cjs-path-mapping-todo/mapped/static.ts | 1 - tests/cjs-path-mapping-todo/package.json | 1 - tests/cjs-path-mapping-todo/tsconfig.json | 19 ---------- .../baseurl-star-path.ts | 10 ------ .../built-in-star-path.ts | 6 ---- tests/esm-path-mapping-todo1/index-js.js | 4 --- tests/esm-path-mapping-todo1/index-tsx.tsx | 4 --- tests/esm-path-mapping-todo1/index.ts | 36 ------------------- .../level-1/level-2/1-foo.ts | 1 - .../level-1/level-2/1-jsx.jsx | 6 ---- .../level-1/level-2/2-foo.ts | 1 - .../level-1/level-2/2-specific-foo.ts | 1 - .../level-1/level-2/2a-bar.ts | 1 - .../level-1/level-2/2a-foo.ts | 1 - .../level-1/level-2/2a-js.js | 1 - .../level-1/level-2/static.ts | 1 - .../mapped-not-found.ts | 1 - .../node-modules-import.ts | 6 ---- .../node-modules-star-path.ts | 6 ---- .../path-base-relative.ts | 2 -- tests/esm-path-mapping-todo1/path-relative.ts | 2 -- .../tsconfig-baseurl-star-path.json | 9 ----- .../tsconfig-lodash-path.json | 9 ----- tests/esm-path-mapping-todo1/tsconfig.json | 12 ------- tests/esm-path-mapping-todo2/base/child/js.js | 1 - tests/esm-path-mapping-todo2/base/child/ts.ts | 1 - tests/esm-path-mapping-todo2/base/js.js | 1 - tests/esm-path-mapping-todo2/base/ts.ts | 1 - .../import-from-base.ts | 22 ------------ tests/esm-path-mapping-todo2/test-js.js | 19 ---------- tests/esm-path-mapping-todo2/test-jsx.jsx | 19 ---------- tests/esm-path-mapping-todo2/test-ts.ts | 19 ---------- tests/esm-path-mapping-todo2/test-tsx.tsx | 19 ---------- 44 files changed, 300 deletions(-) delete mode 100644 tests/cjs-path-mapping-todo/index-js.js delete mode 100644 tests/cjs-path-mapping-todo/index-tsx.tsx delete mode 100644 tests/cjs-path-mapping-todo/index.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped-not-found.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/1-foo.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/1-jsx.jsx delete mode 100644 tests/cjs-path-mapping-todo/mapped/2-foo.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/2a-bar.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/2a-foo.ts delete mode 100644 tests/cjs-path-mapping-todo/mapped/2a-js.js delete mode 100644 tests/cjs-path-mapping-todo/mapped/static.ts delete mode 100644 tests/cjs-path-mapping-todo/package.json delete mode 100644 tests/cjs-path-mapping-todo/tsconfig.json delete mode 100644 tests/esm-path-mapping-todo1/baseurl-star-path.ts delete mode 100644 tests/esm-path-mapping-todo1/built-in-star-path.ts delete mode 100644 tests/esm-path-mapping-todo1/index-js.js delete mode 100644 tests/esm-path-mapping-todo1/index-tsx.tsx delete mode 100644 tests/esm-path-mapping-todo1/index.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js delete mode 100644 tests/esm-path-mapping-todo1/level-1/level-2/static.ts delete mode 100644 tests/esm-path-mapping-todo1/mapped-not-found.ts delete mode 100644 tests/esm-path-mapping-todo1/node-modules-import.ts delete mode 100644 tests/esm-path-mapping-todo1/node-modules-star-path.ts delete mode 100644 tests/esm-path-mapping-todo1/path-base-relative.ts delete mode 100644 tests/esm-path-mapping-todo1/path-relative.ts delete mode 100644 tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json delete mode 100644 tests/esm-path-mapping-todo1/tsconfig-lodash-path.json delete mode 100644 tests/esm-path-mapping-todo1/tsconfig.json delete mode 100644 tests/esm-path-mapping-todo2/base/child/js.js delete mode 100644 tests/esm-path-mapping-todo2/base/child/ts.ts delete mode 100644 tests/esm-path-mapping-todo2/base/js.js delete mode 100644 tests/esm-path-mapping-todo2/base/ts.ts delete mode 100644 tests/esm-path-mapping-todo2/import-from-base.ts delete mode 100644 tests/esm-path-mapping-todo2/test-js.js delete mode 100644 tests/esm-path-mapping-todo2/test-jsx.jsx delete mode 100644 tests/esm-path-mapping-todo2/test-ts.ts delete mode 100644 tests/esm-path-mapping-todo2/test-tsx.tsx diff --git a/tests/cjs-path-mapping-todo/index-js.js b/tests/cjs-path-mapping-todo/index-js.js deleted file mode 100644 index 18905ca3b..000000000 --- a/tests/cjs-path-mapping-todo/index-js.js +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; - -import map1foo from 'map1/foo'; -assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/cjs-path-mapping-todo/index-tsx.tsx b/tests/cjs-path-mapping-todo/index-tsx.tsx deleted file mode 100644 index 18905ca3b..000000000 --- a/tests/cjs-path-mapping-todo/index-tsx.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; - -import map1foo from 'map1/foo'; -assert.equal(map1foo, 'mapped/1-foo'); diff --git a/tests/cjs-path-mapping-todo/index.ts b/tests/cjs-path-mapping-todo/index.ts deleted file mode 100644 index b1b07da8a..000000000 --- a/tests/cjs-path-mapping-todo/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as assert from 'assert'; - -// Path is mapped -import map1foo from 'map1/foo'; - -// Path is mapped using `.jsx` extension -import map1jsx from 'map1/jsx'; - -// Path is mapped using the first candidate `mapped/2-foo` and not `mapped/2a-foo` -import map2foo from 'map2/foo'; - -// Path is mapped using the second candidate because the first `mapped/2-bar.ts` -// does not exist -import map2bar from 'map2/bar'; - -// Path is mapped using `.js` extension -import map2js from 'map2/js'; - -// Path is mapped using the more specific pattern instead of -// `mapped/2-specific/foo -import map2specific from 'map2/specific/foo'; - -// Path is mapped when using no wildcard -import mapStatic from 'static'; - -// Test path mapping in `.tsx` and `.js` files. -import './index-tsx.tsx'; -import './index-js.js'; - -assert.equal(map1foo, 'mapped/1-foo'); -assert.equal(map1jsx, 'mapped/1-jsx'); -assert.equal(map2foo, 'mapped/2-foo'); -assert.equal(map2bar, 'mapped/2a-bar'); -assert.equal(map2js, 'mapped/2a-js'); -assert.equal(map2specific, 'mapped/2-specific-foo'); -assert.equal(mapStatic, 'mapped/static'); diff --git a/tests/cjs-path-mapping-todo/mapped-not-found.ts b/tests/cjs-path-mapping-todo/mapped-not-found.ts deleted file mode 100644 index adbcc018c..000000000 --- a/tests/cjs-path-mapping-todo/mapped-not-found.ts +++ /dev/null @@ -1 +0,0 @@ -import 'map2/does-not-exist.ts'; diff --git a/tests/cjs-path-mapping-todo/mapped/1-foo.ts b/tests/cjs-path-mapping-todo/mapped/1-foo.ts deleted file mode 100644 index 4e7948707..000000000 --- a/tests/cjs-path-mapping-todo/mapped/1-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/1-foo'; diff --git a/tests/cjs-path-mapping-todo/mapped/1-jsx.jsx b/tests/cjs-path-mapping-todo/mapped/1-jsx.jsx deleted file mode 100644 index 94b8b9dc9..000000000 --- a/tests/cjs-path-mapping-todo/mapped/1-jsx.jsx +++ /dev/null @@ -1,6 +0,0 @@ -export default 'mapped/1-jsx'; - -const React = { - createElement() {}, -}; -const div =
; diff --git a/tests/cjs-path-mapping-todo/mapped/2-foo.ts b/tests/cjs-path-mapping-todo/mapped/2-foo.ts deleted file mode 100644 index b45568563..000000000 --- a/tests/cjs-path-mapping-todo/mapped/2-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2-foo'; diff --git a/tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts b/tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts deleted file mode 100644 index 8d0855780..000000000 --- a/tests/cjs-path-mapping-todo/mapped/2-specific-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2-specific-foo'; diff --git a/tests/cjs-path-mapping-todo/mapped/2a-bar.ts b/tests/cjs-path-mapping-todo/mapped/2a-bar.ts deleted file mode 100644 index 8fb8c8334..000000000 --- a/tests/cjs-path-mapping-todo/mapped/2a-bar.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a-bar'; diff --git a/tests/cjs-path-mapping-todo/mapped/2a-foo.ts b/tests/cjs-path-mapping-todo/mapped/2a-foo.ts deleted file mode 100644 index 271b1a87f..000000000 --- a/tests/cjs-path-mapping-todo/mapped/2a-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a/foo'; diff --git a/tests/cjs-path-mapping-todo/mapped/2a-js.js b/tests/cjs-path-mapping-todo/mapped/2a-js.js deleted file mode 100644 index 19b657c80..000000000 --- a/tests/cjs-path-mapping-todo/mapped/2a-js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a-js'; diff --git a/tests/cjs-path-mapping-todo/mapped/static.ts b/tests/cjs-path-mapping-todo/mapped/static.ts deleted file mode 100644 index d1ce0b1c8..000000000 --- a/tests/cjs-path-mapping-todo/mapped/static.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/static'; diff --git a/tests/cjs-path-mapping-todo/package.json b/tests/cjs-path-mapping-todo/package.json deleted file mode 100644 index 0967ef424..000000000 --- a/tests/cjs-path-mapping-todo/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/tests/cjs-path-mapping-todo/tsconfig.json b/tests/cjs-path-mapping-todo/tsconfig.json deleted file mode 100644 index 04e1a95b0..000000000 --- a/tests/cjs-path-mapping-todo/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "include": ["**/*.ts", "**/*.mts", "**/*.tsx", "**/*.js", "**/*.jsx"], - "compilerOptions": { - "module": "CommonJS", - "allowJs": true, - "jsx": "react", - "baseUrl": "./mapped", - "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.ts"] - }, - "moduleResolution": "node" - }, - "ts-node": { - "experimentalPathMapping": "both" - } -} diff --git a/tests/esm-path-mapping-todo1/baseurl-star-path.ts b/tests/esm-path-mapping-todo1/baseurl-star-path.ts deleted file mode 100644 index eaa1f6aba..000000000 --- a/tests/esm-path-mapping-todo1/baseurl-star-path.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as assert from 'assert'; - -// Import js using baseUrl (level-1) and star-path (level-2) -import map1foo from '1-foo.js'; - -// Import jsx using baseUrl (level-1), star-path (level-2), and jsx extension -import map1jsx from '1-jsx.js'; - -assert.strictEqual(map1foo, 'mapped/1-foo'); -assert.strictEqual(map1jsx, 'mapped/1-jsx'); diff --git a/tests/esm-path-mapping-todo1/built-in-star-path.ts b/tests/esm-path-mapping-todo1/built-in-star-path.ts deleted file mode 100644 index 45d31c7aa..000000000 --- a/tests/esm-path-mapping-todo1/built-in-star-path.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as assert from 'assert'; - -// Fallback to built-in -import { stat } from 'fs'; - -assert.strictEqual(typeof stat, 'function'); diff --git a/tests/esm-path-mapping-todo1/index-js.js b/tests/esm-path-mapping-todo1/index-js.js deleted file mode 100644 index 1bcc820a2..000000000 --- a/tests/esm-path-mapping-todo1/index-js.js +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; - -import map1foo from 'map1/foo.js'; -assert.strictEqual(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping-todo1/index-tsx.tsx b/tests/esm-path-mapping-todo1/index-tsx.tsx deleted file mode 100644 index 1bcc820a2..000000000 --- a/tests/esm-path-mapping-todo1/index-tsx.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import * as assert from 'assert'; - -import map1foo from 'map1/foo.js'; -assert.strictEqual(map1foo, 'mapped/1-foo'); diff --git a/tests/esm-path-mapping-todo1/index.ts b/tests/esm-path-mapping-todo1/index.ts deleted file mode 100644 index d22e0fe06..000000000 --- a/tests/esm-path-mapping-todo1/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as assert from 'assert'; - -// Path is mapped -import map1foo from 'map1/foo.js'; - -// Path is mapped using `.jsx` extension -import map1jsx from 'map1/jsx.js'; - -// Path is mapped using the first candidate `mapped/2-foo` and not `mapped/2a-foo` -import map2foo from 'map2/foo.js'; - -// Path is mapped using the second candidate because the first `mapped/2-bar.ts` -// does not exist -import map2bar from 'map2/bar.js'; - -// Path is mapped using `.js` extension -import map2js from 'map2/js.js'; - -// Path is mapped using the more specific pattern instead of -// `mapped/2-specific/foo -import map2specific from 'map2/specific/foo.js'; - -// Path is mapped when using no wildcard -import mapStatic from 'static'; - -// Test path mapping in `.tsx` and `.js` files. -import './index-tsx.tsx'; -import './index-js.js'; - -assert.strictEqual(map1foo, 'mapped/1-foo'); -assert.strictEqual(map1jsx, 'mapped/1-jsx'); -assert.strictEqual(map2foo, 'mapped/2-foo'); -assert.strictEqual(map2bar, 'mapped/2a-bar'); -assert.strictEqual(map2js, 'mapped/2a-js'); -assert.strictEqual(map2specific, 'mapped/2-specific-foo'); -assert.strictEqual(mapStatic, 'mapped/static'); diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts deleted file mode 100644 index 4e7948707..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/1-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/1-foo'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx b/tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx deleted file mode 100644 index 94b8b9dc9..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/1-jsx.jsx +++ /dev/null @@ -1,6 +0,0 @@ -export default 'mapped/1-jsx'; - -const React = { - createElement() {}, -}; -const div =
; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts deleted file mode 100644 index b45568563..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/2-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2-foo'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts deleted file mode 100644 index 8d0855780..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/2-specific-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2-specific-foo'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts deleted file mode 100644 index 8fb8c8334..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/2a-bar.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a-bar'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts b/tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts deleted file mode 100644 index 271b1a87f..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/2a-foo.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a/foo'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js b/tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js deleted file mode 100644 index 19b657c80..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/2a-js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/2a-js'; diff --git a/tests/esm-path-mapping-todo1/level-1/level-2/static.ts b/tests/esm-path-mapping-todo1/level-1/level-2/static.ts deleted file mode 100644 index d1ce0b1c8..000000000 --- a/tests/esm-path-mapping-todo1/level-1/level-2/static.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'mapped/static'; diff --git a/tests/esm-path-mapping-todo1/mapped-not-found.ts b/tests/esm-path-mapping-todo1/mapped-not-found.ts deleted file mode 100644 index adbcc018c..000000000 --- a/tests/esm-path-mapping-todo1/mapped-not-found.ts +++ /dev/null @@ -1 +0,0 @@ -import 'map2/does-not-exist.ts'; diff --git a/tests/esm-path-mapping-todo1/node-modules-import.ts b/tests/esm-path-mapping-todo1/node-modules-import.ts deleted file mode 100644 index 2772bd5a6..000000000 --- a/tests/esm-path-mapping-todo1/node-modules-import.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as assert from 'assert'; - -// node_modules imports should ignore mapping -import lodash from 'some-lib'; - -assert.strictEqual(lodash, 'lodash'); diff --git a/tests/esm-path-mapping-todo1/node-modules-star-path.ts b/tests/esm-path-mapping-todo1/node-modules-star-path.ts deleted file mode 100644 index 9d05a57b0..000000000 --- a/tests/esm-path-mapping-todo1/node-modules-star-path.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as assert from 'assert'; - -// Fallback to node_modules -import somelib from 'some-lib'; - -assert.strictEqual(somelib, 'some-lib'); diff --git a/tests/esm-path-mapping-todo1/path-base-relative.ts b/tests/esm-path-mapping-todo1/path-base-relative.ts deleted file mode 100644 index d4c6755fb..000000000 --- a/tests/esm-path-mapping-todo1/path-base-relative.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Should fail because path mapping should be ignored -import foo from '/1-foo'; diff --git a/tests/esm-path-mapping-todo1/path-relative.ts b/tests/esm-path-mapping-todo1/path-relative.ts deleted file mode 100644 index f5c3fbdb0..000000000 --- a/tests/esm-path-mapping-todo1/path-relative.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Should fail because path mapping should be ignored -import foo from './1-foo'; diff --git a/tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json b/tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json deleted file mode 100644 index aa935da3d..000000000 --- a/tests/esm-path-mapping-todo1/tsconfig-baseurl-star-path.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig-base.json", - "compilerOptions": { - "baseUrl": "./level-1", - "paths": { - "*": ["./level-2/*"] - } - } -} diff --git a/tests/esm-path-mapping-todo1/tsconfig-lodash-path.json b/tests/esm-path-mapping-todo1/tsconfig-lodash-path.json deleted file mode 100644 index 898940762..000000000 --- a/tests/esm-path-mapping-todo1/tsconfig-lodash-path.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig-base.json", - "compilerOptions": { - "baseUrl": "./level-1/level-2", - "paths": { - "lodash": ["./1-foo.js"] - } - } -} diff --git a/tests/esm-path-mapping-todo1/tsconfig.json b/tests/esm-path-mapping-todo1/tsconfig.json deleted file mode 100644 index 866570525..000000000 --- a/tests/esm-path-mapping-todo1/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig-base.json", - "compilerOptions": { - "baseUrl": "./level-1/level-2", - "paths": { - "map1/*": ["./1-*"], - "map2/*": ["./2-*", "./2a-*"], - "map2/specific/*": ["./2-specific-*"], - "static": ["./static.js"] - } - } -} diff --git a/tests/esm-path-mapping-todo2/base/child/js.js b/tests/esm-path-mapping-todo2/base/child/js.js deleted file mode 100644 index 3641e5424..000000000 --- a/tests/esm-path-mapping-todo2/base/child/js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'base/child/js'; diff --git a/tests/esm-path-mapping-todo2/base/child/ts.ts b/tests/esm-path-mapping-todo2/base/child/ts.ts deleted file mode 100644 index 43d298cb6..000000000 --- a/tests/esm-path-mapping-todo2/base/child/ts.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'base/child/ts'; diff --git a/tests/esm-path-mapping-todo2/base/js.js b/tests/esm-path-mapping-todo2/base/js.js deleted file mode 100644 index 41d1c6995..000000000 --- a/tests/esm-path-mapping-todo2/base/js.js +++ /dev/null @@ -1 +0,0 @@ -export default 'base/js'; diff --git a/tests/esm-path-mapping-todo2/base/ts.ts b/tests/esm-path-mapping-todo2/base/ts.ts deleted file mode 100644 index 4a45411ab..000000000 --- a/tests/esm-path-mapping-todo2/base/ts.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'base/ts'; diff --git a/tests/esm-path-mapping-todo2/import-from-base.ts b/tests/esm-path-mapping-todo2/import-from-base.ts deleted file mode 100644 index 337ef7e2d..000000000 --- a/tests/esm-path-mapping-todo2/import-from-base.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as assert from 'assert'; - -// Import js, jsx, ts at baseUrl -import baseJs from 'js.js'; -import baseJsx from 'jsx.jsx'; -import baseTs from 'ts.js'; - -// Import js, jsx, ts under baseUrl -import childJs from 'child/js.js'; -import childJsx from 'child/jsx.jsx'; -import childTs from 'child/ts.js'; - -if (typeof assert.strictEqual !== 'function') - throw new Error('Pre-condition failed: assert could not be imported'); - -assert.strictEqual(baseJs, 'base/js'); -assert.strictEqual(baseJsx, 'base/jsx'); -assert.strictEqual(baseTs, 'base/ts'); - -assert.strictEqual(childJs, 'base/child/js'); -assert.strictEqual(childJsx, 'base/child/jsx'); -assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping-todo2/test-js.js b/tests/esm-path-mapping-todo2/test-js.js deleted file mode 100644 index f557d8dfd..000000000 --- a/tests/esm-path-mapping-todo2/test-js.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as assert from 'assert'; - -// Import js, jsx, ts at baseUrl -import baseJs from 'js.js'; -import baseJsx from 'jsx.jsx'; -import baseTs from 'ts.js'; - -// Import js, jsx, ts under baseUrl -import childJs from 'child/js.js'; -import childJsx from 'child/jsx.jsx'; -import childTs from 'child/ts.js'; - -assert.strictEqual(baseJs, 'base/js'); -assert.strictEqual(baseJsx, 'base/jsx'); -assert.strictEqual(baseTs, 'base/ts'); - -assert.strictEqual(childJs, 'base/child/js'); -assert.strictEqual(childJsx, 'base/child/jsx'); -assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping-todo2/test-jsx.jsx b/tests/esm-path-mapping-todo2/test-jsx.jsx deleted file mode 100644 index f557d8dfd..000000000 --- a/tests/esm-path-mapping-todo2/test-jsx.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import * as assert from 'assert'; - -// Import js, jsx, ts at baseUrl -import baseJs from 'js.js'; -import baseJsx from 'jsx.jsx'; -import baseTs from 'ts.js'; - -// Import js, jsx, ts under baseUrl -import childJs from 'child/js.js'; -import childJsx from 'child/jsx.jsx'; -import childTs from 'child/ts.js'; - -assert.strictEqual(baseJs, 'base/js'); -assert.strictEqual(baseJsx, 'base/jsx'); -assert.strictEqual(baseTs, 'base/ts'); - -assert.strictEqual(childJs, 'base/child/js'); -assert.strictEqual(childJsx, 'base/child/jsx'); -assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping-todo2/test-ts.ts b/tests/esm-path-mapping-todo2/test-ts.ts deleted file mode 100644 index f557d8dfd..000000000 --- a/tests/esm-path-mapping-todo2/test-ts.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as assert from 'assert'; - -// Import js, jsx, ts at baseUrl -import baseJs from 'js.js'; -import baseJsx from 'jsx.jsx'; -import baseTs from 'ts.js'; - -// Import js, jsx, ts under baseUrl -import childJs from 'child/js.js'; -import childJsx from 'child/jsx.jsx'; -import childTs from 'child/ts.js'; - -assert.strictEqual(baseJs, 'base/js'); -assert.strictEqual(baseJsx, 'base/jsx'); -assert.strictEqual(baseTs, 'base/ts'); - -assert.strictEqual(childJs, 'base/child/js'); -assert.strictEqual(childJsx, 'base/child/jsx'); -assert.strictEqual(childTs, 'base/child/ts'); diff --git a/tests/esm-path-mapping-todo2/test-tsx.tsx b/tests/esm-path-mapping-todo2/test-tsx.tsx deleted file mode 100644 index f557d8dfd..000000000 --- a/tests/esm-path-mapping-todo2/test-tsx.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import * as assert from 'assert'; - -// Import js, jsx, ts at baseUrl -import baseJs from 'js.js'; -import baseJsx from 'jsx.jsx'; -import baseTs from 'ts.js'; - -// Import js, jsx, ts under baseUrl -import childJs from 'child/js.js'; -import childJsx from 'child/jsx.jsx'; -import childTs from 'child/ts.js'; - -assert.strictEqual(baseJs, 'base/js'); -assert.strictEqual(baseJsx, 'base/jsx'); -assert.strictEqual(baseTs, 'base/ts'); - -assert.strictEqual(childJs, 'base/child/js'); -assert.strictEqual(childJsx, 'base/child/jsx'); -assert.strictEqual(childTs, 'base/child/ts'); From 78e3edadd9f61aac1ec8e16345dc4184fe3c9df2 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Wed, 18 May 2022 15:51:53 -0400 Subject: [PATCH 71/74] tweaks before pulling in the latest main branch --- src/test/path-mapping.spec.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 1eb1fe86d..1f4001bf4 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -1,4 +1,3 @@ -import * as expect from 'expect'; import { join } from 'path'; import { createExec } from './exec-helpers'; @@ -9,7 +8,7 @@ import { TEST_DIR, installTsNode, } from './helpers'; -import { test } from './testlib'; +import { test, expect } from './testlib'; test.beforeAll(installTsNode); @@ -26,7 +25,7 @@ function execBuilder( return (file = 'index.ts') => partialExec(`${command} ${file}`); } -const MODULE_TYPES = { +const MODULE_TYPES = { CJS: { name: 'cjs', baseDir: 'cjs-path-mapping', @@ -37,7 +36,7 @@ const MODULE_TYPES = { baseDir: 'esm-path-mapping', command: CMD_ESM_LOADER_WITHOUT_PROJECT, }, -}; +} as const; const PROJECT_CONFIGS = { BASE_URL_NO_PATHS: 'tsconfig-baseurl-no-paths.json', @@ -61,6 +60,11 @@ for (const moduleType of Object.values(MODULE_TYPES)) { expect(err).toBeNull(); }); + test(`fallback to node built-in`, async (t) => { + const {err} = await exec('import-node-built-in.ts'); + expect(err).toBe(null); + }); + test(`import at baseUrl`, async () => { const { err } = await exec('import-at-base.ts'); expect(err).toBeNull(); From ef926b94a4d74545ca9b8f38f86e69f5f707930e Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Wed, 18 May 2022 17:29:13 -0400 Subject: [PATCH 72/74] fix --- src/configuration.ts | 2 ++ src/test/path-mapping.spec.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/configuration.ts b/src/configuration.ts index 5142a3584..36d9f441e 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -381,6 +381,7 @@ function filterRecognizedTsConfigTsNodeOptions(jsonObject: any): { experimentalReplAwait, swc, experimentalResolver, + experimentalPathMapping, esm, experimentalSpecifierResolution, ...unrecognized @@ -407,6 +408,7 @@ function filterRecognizedTsConfigTsNodeOptions(jsonObject: any): { moduleTypes, swc, experimentalResolver, + experimentalPathMapping, esm, experimentalSpecifierResolution, }; diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 1f4001bf4..85846bdc9 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -61,7 +61,7 @@ for (const moduleType of Object.values(MODULE_TYPES)) { }); test(`fallback to node built-in`, async (t) => { - const {err} = await exec('import-node-built-in.ts'); + const { err } = await exec('import-node-built-in.ts'); expect(err).toBe(null); }); From 7552fc4dbe5f5acc95f4c25b911ce11b93d0ab68 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Wed, 18 May 2022 23:31:24 -0400 Subject: [PATCH 73/74] style tweak --- src/test/path-mapping.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/path-mapping.spec.ts b/src/test/path-mapping.spec.ts index 85846bdc9..ecf3ec513 100644 --- a/src/test/path-mapping.spec.ts +++ b/src/test/path-mapping.spec.ts @@ -38,11 +38,11 @@ const MODULE_TYPES = { }, } as const; -const PROJECT_CONFIGS = { +const PROJECT_CONFIGS = { BASE_URL_NO_PATHS: 'tsconfig-baseurl-no-paths.json', BASE_URL_SOME_PATHS: 'tsconfig-baseurl-some-paths.json', BASE_URL_STAR_PATH: 'tsconfig-baseurl-star-path.json', -}; +} as const; for (const moduleType of Object.values(MODULE_TYPES)) { test.suite(`path mapping ${moduleType.name}`, (test) => { From 6632481ebc4ac974d6e59e583251c199deeaa4b8 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Wed, 18 May 2022 23:49:43 -0400 Subject: [PATCH 74/74] turn on experimental resolver; add required file extensions to esm tests --- tests/cjs-path-mapping/tsconfig.base.json | 1 + .../import-relative-ignores-star.ts | 2 +- tests/esm-path-mapping/import-relative.ts | 4 ++-- tests/esm-path-mapping/map-from-js-jsx-tsx.ts | 6 +++--- tests/esm-path-mapping/map-from-js.js | 15 ++++++++------- tests/esm-path-mapping/map-from-jsx.jsx | 14 +++++++------- tests/esm-path-mapping/map-from-tsx.tsx | 14 +++++++------- .../map-to-first-available-candidate.ts | 4 ++-- tests/esm-path-mapping/map-to-js-jsx-tsx.ts | 6 +++--- .../map-using-more-specific-path.ts | 2 +- tests/esm-path-mapping/map-using-prefix.ts | 2 +- .../tsconfig-baseurl-some-paths.json | 2 +- tests/esm-path-mapping/tsconfig.base.json | 1 + 13 files changed, 38 insertions(+), 35 deletions(-) diff --git a/tests/cjs-path-mapping/tsconfig.base.json b/tests/cjs-path-mapping/tsconfig.base.json index afb259923..b143eec9b 100644 --- a/tests/cjs-path-mapping/tsconfig.base.json +++ b/tests/cjs-path-mapping/tsconfig.base.json @@ -8,6 +8,7 @@ }, "ts-node": { "experimentalPathMapping": "both", + "experimentalResolver": true, "transpileOnly": true } } diff --git a/tests/esm-path-mapping/import-relative-ignores-star.ts b/tests/esm-path-mapping/import-relative-ignores-star.ts index 9aab33183..fdb3def8f 100644 --- a/tests/esm-path-mapping/import-relative-ignores-star.ts +++ b/tests/esm-path-mapping/import-relative-ignores-star.ts @@ -1,5 +1,5 @@ // Should fail to import relative import that would need to apply a path -import shouldNotResolve from './should-not-resolve'; +import shouldNotResolve from './should-not-resolve.js'; // Pretend we want to use it console.log(shouldNotResolve); diff --git a/tests/esm-path-mapping/import-relative.ts b/tests/esm-path-mapping/import-relative.ts index 185b98e72..a4e5db46f 100644 --- a/tests/esm-path-mapping/import-relative.ts +++ b/tests/esm-path-mapping/import-relative.ts @@ -1,6 +1,6 @@ // Should be able to use relative imports -import aboveBaseJs from './level-1/above-base-js'; -import aboveBaseJsx from '../cjs-path-mapping/level-1/above-base-jsx'; +import aboveBaseJs from './level-1/above-base-js.js'; +import aboveBaseJsx from '../cjs-path-mapping/level-1/above-base-jsx.js'; // import aboveBaseTs from '/level-1/above-base-ts'; // Pre-conditions diff --git a/tests/esm-path-mapping/map-from-js-jsx-tsx.ts b/tests/esm-path-mapping/map-from-js-jsx-tsx.ts index c0287d4bb..187069410 100644 --- a/tests/esm-path-mapping/map-from-js-jsx-tsx.ts +++ b/tests/esm-path-mapping/map-from-js-jsx-tsx.ts @@ -1,3 +1,3 @@ -import './map-from-js'; -import './map-from-jsx'; -import './map-from-tsx'; +import './map-from-js.js'; +import './map-from-jsx.jsx'; +import './map-from-tsx.tsx'; diff --git a/tests/esm-path-mapping/map-from-js.js b/tests/esm-path-mapping/map-from-js.js index e8aeb930c..1d007d0b3 100644 --- a/tests/esm-path-mapping/map-from-js.js +++ b/tests/esm-path-mapping/map-from-js.js @@ -1,11 +1,12 @@ // All mapped imports -import mappedJs from 'mapped/js'; -import mappedJsx from 'mapped/jsx'; -import mappedTs from 'mapped/ts'; -import mappedTsx from 'mapped/tsx'; -import foo from 'candidate/foo'; -import bar from 'candidate/bar'; -import fooBar from 'candidate/foo/bar'; +import mappedJs from 'mapped/js.js'; +import mappedJsx from 'mapped/jsx.js'; +import mappedTs from 'mapped/ts.js'; +import mappedTsx from './level-1/level-2/mapped-tsx.js'; +import mappedTsx from 'mapped/tsx.js'; +import foo from 'candidate/foo.js'; +import bar from 'candidate/bar.js'; +import fooBar from 'candidate/foo/bar.js'; import immobile from 'static'; // Pre-conditions diff --git a/tests/esm-path-mapping/map-from-jsx.jsx b/tests/esm-path-mapping/map-from-jsx.jsx index e8aeb930c..bb0e6a113 100644 --- a/tests/esm-path-mapping/map-from-jsx.jsx +++ b/tests/esm-path-mapping/map-from-jsx.jsx @@ -1,11 +1,11 @@ // All mapped imports -import mappedJs from 'mapped/js'; -import mappedJsx from 'mapped/jsx'; -import mappedTs from 'mapped/ts'; -import mappedTsx from 'mapped/tsx'; -import foo from 'candidate/foo'; -import bar from 'candidate/bar'; -import fooBar from 'candidate/foo/bar'; +import mappedJs from 'mapped/js.js'; +import mappedJsx from 'mapped/jsx.js'; +import mappedTs from 'mapped/ts.js'; +import mappedTsx from 'mapped/tsx.js'; +import foo from 'candidate/foo.js'; +import bar from 'candidate/bar.js'; +import fooBar from 'candidate/foo/bar.js'; import immobile from 'static'; // Pre-conditions diff --git a/tests/esm-path-mapping/map-from-tsx.tsx b/tests/esm-path-mapping/map-from-tsx.tsx index e8aeb930c..bb0e6a113 100644 --- a/tests/esm-path-mapping/map-from-tsx.tsx +++ b/tests/esm-path-mapping/map-from-tsx.tsx @@ -1,11 +1,11 @@ // All mapped imports -import mappedJs from 'mapped/js'; -import mappedJsx from 'mapped/jsx'; -import mappedTs from 'mapped/ts'; -import mappedTsx from 'mapped/tsx'; -import foo from 'candidate/foo'; -import bar from 'candidate/bar'; -import fooBar from 'candidate/foo/bar'; +import mappedJs from 'mapped/js.js'; +import mappedJsx from 'mapped/jsx.js'; +import mappedTs from 'mapped/ts.js'; +import mappedTsx from 'mapped/tsx.js'; +import foo from 'candidate/foo.js'; +import bar from 'candidate/bar.js'; +import fooBar from 'candidate/foo/bar.js'; import immobile from 'static'; // Pre-conditions diff --git a/tests/esm-path-mapping/map-to-first-available-candidate.ts b/tests/esm-path-mapping/map-to-first-available-candidate.ts index 4ba26d71e..7be0150d5 100644 --- a/tests/esm-path-mapping/map-to-first-available-candidate.ts +++ b/tests/esm-path-mapping/map-to-first-available-candidate.ts @@ -1,6 +1,6 @@ // Should map to the first path pattern that exists -import foo from 'candidate/foo'; -import bar from 'candidate/bar'; +import foo from 'candidate/foo.js'; +import bar from 'candidate/bar.js'; // Pre-conditions import * as assert from 'assert'; diff --git a/tests/esm-path-mapping/map-to-js-jsx-tsx.ts b/tests/esm-path-mapping/map-to-js-jsx-tsx.ts index c2bd52d48..286f20314 100644 --- a/tests/esm-path-mapping/map-to-js-jsx-tsx.ts +++ b/tests/esm-path-mapping/map-to-js-jsx-tsx.ts @@ -1,7 +1,7 @@ // Should be able to use path to map to js, jsx, tsx -import mappedJs from 'mapped/js'; -import mappedJsx from 'mapped/jsx'; -import mappedTsx from 'mapped/tsx'; +import mappedJs from 'mapped/js.js'; +import mappedJsx from 'mapped/jsx.js'; +import mappedTsx from 'mapped/tsx.js'; // Pre-conditions import * as assert from 'assert'; diff --git a/tests/esm-path-mapping/map-using-more-specific-path.ts b/tests/esm-path-mapping/map-using-more-specific-path.ts index 10b14683f..da9cbb912 100644 --- a/tests/esm-path-mapping/map-using-more-specific-path.ts +++ b/tests/esm-path-mapping/map-using-more-specific-path.ts @@ -1,7 +1,7 @@ // Should map using the more specific path // ❌ "candidate/*": ["./candidate-1-*", "./candidate-2-*"] => ./candidate-1-foo/bar // ✅ "candidate/foo/*": ["./candidate-foo-*"] => ./candidate-foo-bar -import fooBar from 'candidate/foo/bar'; +import fooBar from 'candidate/foo/bar.js'; // Pre-conditions import * as assert from 'assert'; diff --git a/tests/esm-path-mapping/map-using-prefix.ts b/tests/esm-path-mapping/map-using-prefix.ts index fc4e2819f..c9e89c331 100644 --- a/tests/esm-path-mapping/map-using-prefix.ts +++ b/tests/esm-path-mapping/map-using-prefix.ts @@ -1,5 +1,5 @@ // Should be able to use path to map import -import mappedTs from 'mapped/ts'; +import mappedTs from 'mapped/ts.js'; // Pre-conditions import * as assert from 'assert'; diff --git a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json index 8d37b3b5c..e8f8e4a40 100644 --- a/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json +++ b/tests/esm-path-mapping/tsconfig-baseurl-some-paths.json @@ -7,7 +7,7 @@ "mapped/*": ["./mapped-*"], "candidate/*": ["./candidate-1-*", "./candidate-2-*"], "candidate/foo/*": ["./candidate-foo-*"], - "static": ["./immobile"] + "static": ["./immobile.js"] } } } diff --git a/tests/esm-path-mapping/tsconfig.base.json b/tests/esm-path-mapping/tsconfig.base.json index 57e6671e4..547e461fc 100644 --- a/tests/esm-path-mapping/tsconfig.base.json +++ b/tests/esm-path-mapping/tsconfig.base.json @@ -8,6 +8,7 @@ }, "ts-node": { "experimentalPathMapping": "both", + "experimentalResolver": true, "transpileOnly": true } }