Skip to content

Commit 502858f

Browse files
committed
feat: Added esm loader
1 parent beee776 commit 502858f

File tree

12 files changed

+117
-16
lines changed

12 files changed

+117
-16
lines changed

esm.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { fileURLToPath } from 'url';
2+
import { createRequire } from 'module';
3+
const require = createRequire(fileURLToPath(import.meta.url));
4+
5+
/** @type {import('./src/compatibility/node-register')} */
6+
const { nodeRegister } = require('./dist/compatibility/node-register');
7+
8+
/** @type {import('ts-node')} */
9+
import tsNode from 'ts-node';
10+
11+
const tsNodeInstance = nodeRegister();
12+
13+
export const { resolve, getFormat, transformSource } = tsNode.createEsmHooks(tsNodeInstance);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"rimraf": "^3.0.2",
6565
"standard-version": "^9.3.1",
6666
"ts-jest": "^27.0.4",
67-
"ts-node": "^10.1.0",
67+
"ts-node": "^10.4.0",
6868
"ts-patch": "^1.4.4",
6969
"ts3": "npm:typescript@3.7.7",
7070
"ts45": "npm:typescript@4.5.0-beta",

register.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ try {
77
);
88
}
99

10-
tsNode.register();
1110
require('./').nodeRegister();

src/compatibility/node-register.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export function mergeTransformers(
6868
// region: TsNode Registration Utility
6969
/* ****************************************************************************************************************** */
7070

71-
export function nodeRegister(): TSNode.RegisterOptions | undefined {
71+
export function nodeRegister(): TSNode.Service | undefined {
7272
const { tsNodeInstance, tsNode } = nodeRegister.initialize();
7373

7474
const transformerConfig = getProjectTransformerConfig(tsNodeInstance.config);
@@ -96,8 +96,7 @@ export function nodeRegister(): TSNode.RegisterOptions | undefined {
9696
}
9797

9898
// Re-register with new transformers
99-
tsNode.register(registerOptions);
100-
return registerOptions;
99+
return tsNode.register(registerOptions);
101100
}
102101

103102
export namespace nodeRegister {

test/projects/esm-loader/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"private": true,
3+
"name": "@tests/esm-loader",
4+
"version": "0.0.0",
5+
"type": "module"
6+
}

test/projects/esm-loader/src/id.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const b = null;

test/projects/esm-loader/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from "#identifier";
2+
import { b } from "#identifier";
3+
4+
console.log(b);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"include": [ "src" ],
3+
4+
"compilerOptions": {
5+
"noEmit": true,
6+
7+
"rootDir": ".",
8+
"module": "ESNext",
9+
"target": "ESNext",
10+
"esModuleInterop": true,
11+
"moduleResolution": "node",
12+
"declaration": true,
13+
14+
"baseUrl": "./src",
15+
"paths": {
16+
"#identifier": [ "./id.ts" ]
17+
},
18+
19+
"plugins": [
20+
{
21+
"transform": "typescript-transform-paths"
22+
},
23+
{
24+
"transform": "typescript-transform-paths",
25+
"afterDeclarations": true
26+
}
27+
]
28+
}
29+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { execSync } from "child_process";
2+
import path from "path";
3+
import ts from 'typescript'
4+
import { projectsPath } from "../../src/config";
5+
6+
/* ****************************************************************************************************************** *
7+
* Tests
8+
* ****************************************************************************************************************** */
9+
10+
describe(`ESM Loader`, () => {
11+
const esmProjectRoot = ts.normalizePath(path.join(projectsPath, "esm-loader"));
12+
13+
// See: https://github.com/LeDDGroup/typescript-transform-paths/issues/134
14+
test(`Transforms ESM project`, () => {
15+
const res = execSync(
16+
`node --no-warnings --loader tstp/esm --es-module-specifier-resolution=node src/index.ts`,
17+
{ cwd: esmProjectRoot }
18+
).toString();
19+
20+
expect(res).toMatch(/^null($|\r?\n)/);
21+
});
22+
});

test/tests/compatibility/node-register.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ describe(`[Compatibility: ts-node] Register script`, () => {
6060
registerSpy?.mockRestore();
6161
}
6262
});
63+
6364
test(`Uses existing ts-node if found`, () => {
6465
const fakeInstance: any = {};
6566

@@ -172,7 +173,7 @@ describe(`[Compatibility: ts-node] Register script`, () => {
172173
});
173174

174175
const originalTsNodeInstance = global.process[instanceSymbol];
175-
registerResult = nodeRegister()!;
176+
registerResult = nodeRegister()!.options;
176177
instanceRegistrationResult = global.process[instanceSymbol]!;
177178
global.process[instanceSymbol] = originalTsNodeInstance;
178179

0 commit comments

Comments
 (0)