diff --git a/esm.mjs b/esm.mjs new file mode 100755 index 0000000..7cea217 --- /dev/null +++ b/esm.mjs @@ -0,0 +1,17 @@ +import { fileURLToPath } from 'url'; +import { createRequire } from 'module'; +const require = createRequire(fileURLToPath(import.meta.url)); + +/** @type {import('./dist/register')} */ +const { register } = require('./dist/register'); + +/** @type {import('ts-node/dist/esm')} */ +import esm from 'ts-node/dist/esm'; + +const options = register(); + +export const { + resolve, + getFormat, + transformSource, +} = esm.registerAndCreateEsmHooks(options); diff --git a/package.json b/package.json index 6d66d68..d183ff7 100755 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "types", "README.md", "CHANGELOG.md", - "register.js" + "register.js", + "esm.mjs" ], "devDependencies": { "@types/jest": "^26.0.24", diff --git a/test/projects/esm/package.json b/test/projects/esm/package.json new file mode 100755 index 0000000..bb3e19d --- /dev/null +++ b/test/projects/esm/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "name": "@tests/extras-esm", + "version": "0.0.0", + "dependencies": { + "typescript-transform-paths": "link:../../../" + }, + "type": "module" +} diff --git a/test/projects/esm/src/id.ts b/test/projects/esm/src/id.ts new file mode 100755 index 0000000..01b2dc8 --- /dev/null +++ b/test/projects/esm/src/id.ts @@ -0,0 +1 @@ +export const b = null; diff --git a/test/projects/esm/src/index.ts b/test/projects/esm/src/index.ts new file mode 100755 index 0000000..c0bb14c --- /dev/null +++ b/test/projects/esm/src/index.ts @@ -0,0 +1,4 @@ +export * from "#identifier"; +import { b } from "#identifier"; + +console.log(b); diff --git a/test/projects/esm/tsconfig.json b/test/projects/esm/tsconfig.json new file mode 100755 index 0000000..7741be6 --- /dev/null +++ b/test/projects/esm/tsconfig.json @@ -0,0 +1,34 @@ +{ + "include": [ "src" ], + + "ts-node": { + "transpileOnly": true, + "require": [ "typescript-transform-paths/register" ], + }, + + "compilerOptions": { + "noEmit": true, + + "rootDir": ".", + "module": "ESNext", + "target": "ESNext", + "esModuleInterop": true, + "moduleResolution": "node", + "declaration": true, + + "baseUrl": "./src", + "paths": { + "#identifier": [ "./id.ts" ] + }, + + "plugins": [ + { + "transform": "typescript-transform-paths" + }, + { + "transform": "typescript-transform-paths", + "afterDeclarations": true + } + ] + } +} diff --git a/test/tests/extras.test.ts b/test/tests/extras.test.ts index 18a5d1b..d563efc 100755 --- a/test/tests/extras.test.ts +++ b/test/tests/extras.test.ts @@ -10,6 +10,7 @@ import { execSync } from "child_process"; * ****************************************************************************************************************** */ describe(`Extra Tests`, () => { + const esmProjectRoot = ts.normalizePath(path.join(projectsPaths, "esm")); const projectRoot = ts.normalizePath(path.join(projectsPaths, "extras")); const indexFile = ts.normalizePath(path.join(projectRoot, "src/index.ts")); const tsConfigFile = ts.normalizePath(path.join(projectRoot, "tsconfig.json")); @@ -33,9 +34,20 @@ describe(`Extra Tests`, () => { } }); - test(`Register script transforms with ts-node`, () => { - const res = execSync("ts-node src/index.ts", { cwd: projectRoot }).toString(); - expect(res).toMatch(/^null($|\r?\n)/); + describe(`Register script transforms with ts-node`, () => { + test(`CommonJS`, () => { + const res = execSync("ts-node src/index.ts", { cwd: projectRoot }).toString(); + expect(res).toMatch(/^null($|\r?\n)/); + }); + + // See: https://github.com/LeDDGroup/typescript-transform-paths/issues/134 + test(`ESM`, () => { + const res = execSync( + `node --no-warnings --loader typescript-transform-paths/esm --es-module-specifier-resolution=node src/index.ts`, + { cwd: esmProjectRoot } + ).toString(); + expect(res).toMatch(/^null($|\r?\n)/); + }); }); }); }); diff --git a/tsconfig.json b/tsconfig.json index a971774..1dca4d8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,5 @@ "compilerOptions": { "rootDir": "src", "outDir": "dist", - "declaration": true } }