Skip to content

Commit 016f1aa

Browse files
authored
fix: support compile js files. close #761 (#767)
* feat: update minimal @swc/core to 1.14.13 * feat: support compile js files * Create smooth-ties-count.md
1 parent 9e6c02f commit 016f1aa

19 files changed

+182
-134
lines changed

.changeset/smooth-ties-count.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@fake-scope/fake-pkg': patch
3+
---
4+
5+
fix: support compile js files. close #761
6+
fix: update minimal `@swc/core` to `1.4.13` because of https://github.com/swc-project/swc/pull/8784

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
},
8888
"ava": {
8989
"extensions": [
90+
"js",
9091
"ts",
9192
"tsx"
9293
],
@@ -95,7 +96,7 @@
9596
],
9697
"cache": false,
9798
"files": [
98-
"packages/**/*.spec.{ts,tsx}"
99+
"packages/**/*.spec.{js,ts,tsx}"
99100
],
100101
"environmentVariables": {
101102
"SWC_NODE_PROJECT": "./tsconfig.test.json"

packages/core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@
4141
"url": "https://github.com/swc-project/swc-node/issues"
4242
},
4343
"peerDependencies": {
44-
"@swc/core": ">= 1.3",
44+
"@swc/core": ">= 1.4.13",
4545
"@swc/types": ">= 0.1"
4646
},
4747
"devDependencies": {
48-
"@swc/core": "^1.3.107",
48+
"@swc/core": "^1.4.13",
4949
"@swc/types": "^0.1.5"
5050
},
5151
"funding": {

packages/integrate-module/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"p-timeout": "^6.1.2"
99
},
1010
"devDependencies": {
11-
"@swc/core": "^1.3.107",
11+
"@swc/core": "^1.4.13",
1212
"@swc-node/register": "workspace:*",
1313
"typescript": "^5.3.3"
1414
}

packages/integrate-module/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { supportedExtensions } from 'file-type'
77
import { foo } from './foo.mjs'
88
import { bar } from './subdirectory/bar.mjs'
99
import { baz } from './subdirectory/index.mjs'
10+
import { bar as subBar } from '@subdirectory/bar.mjs'
11+
import './js-module.mjs'
1012

1113
await test('file-type should work', () => {
1214
assert.ok(supportedExtensions.has('jpg'))
@@ -23,3 +25,7 @@ await test('resolve nested file path', () => {
2325
await test('resolve nested entry point', () => {
2426
assert.equal(baz(), 'baz')
2527
})
28+
29+
await test('resolve paths', () => {
30+
assert.equal(subBar(), 'bar')
31+
})
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/* eslint import/order: off */
2+
import assert from 'node:assert'
3+
import test from 'node:test'
4+
5+
import { supportedExtensions } from 'file-type'
6+
7+
import { foo } from './foo.mts'
8+
import { bar } from './subdirectory/bar.mts'
9+
import { baz } from './subdirectory/index.mts'
10+
import { bar as subBar } from '@subdirectory/bar.mts'
11+
12+
await test('js:file-type should work', () => {
13+
assert.ok(supportedExtensions.has('jpg'))
14+
})
15+
16+
await test('js:resolve adjacent file path', () => {
17+
assert.equal(foo(), 'foo')
18+
})
19+
20+
await test('js:resolve nested file path', () => {
21+
assert.equal(bar(), 'bar')
22+
})
23+
24+
await test('js:resolve nested entry point', () => {
25+
assert.equal(baz(), 'baz')
26+
})
27+
28+
await test('js:resolve paths', () => {
29+
assert.equal(subBar(), 'bar')
30+
})

packages/integrate-module/tsconfig.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
"target": "ESNext",
55
"module": "ESNext",
66
"composite": true,
7-
"outDir": "dist"
7+
"outDir": "dist",
8+
"baseUrl": "./",
9+
"paths": {
10+
"@subdirectory/*": ["./src/subdirectory/*"],
11+
},
812
},
9-
"include": ["src"]
13+
"include": ["src"],
1014
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { FIXTURE } from '@integrate/fixture'
2+
import test from 'ava'
3+
4+
test('js should transpile paths', (t) => {
5+
t.is(FIXTURE, 'fixture')
6+
})

packages/integrate/__tests__/react-pragma/__snapshots__/react-pragma.spec.ts.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev).
1111
`"use strict";␊
1212
const Button = ({ text })=>/*#__PURE__*/ h("div", null, text);␊
1313
14-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICBjb25zdCBCdXR0b24gPSAoeyB0ZXh0IH0pID0+IChcbiAgICA8ZGl2PlxuICAgICAge3RleHR9XG4gICAgPC9kaXY+XG4gIClcbiJdLCJuYW1lcyI6WyJCdXR0b24iLCJ0ZXh0IiwiZGl2Il0sIm1hcHBpbmdzIjoiO0FBQ0UsTUFBTUEsU0FBUyxDQUFDLEVBQUVDLElBQUksRUFBRSxpQkFDdEIsRUFBQ0MsYUFDRUQifQ==`
14+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICBjb25zdCBCdXR0b24gPSAoeyB0ZXh0IH0pID0+IChcbiAgICA8ZGl2PlxuICAgICAge3RleHR9XG4gICAgPC9kaXY+XG4gIClcbiJdLCJuYW1lcyI6WyJCdXR0b24iLCJ0ZXh0IiwiZGl2Il0sInJhbmdlTWFwcGluZ3MiOiI7IiwibWFwcGluZ3MiOiI7QUFDRSxNQUFNQSxTQUFTLENBQUMsRUFBRUMsSUFBSSxFQUFFLGlCQUN0QixFQUFDQyxhQUNFRCJ9`
1515

1616
## should transform jsx into new jsx runtime
1717

@@ -26,4 +26,4 @@ Generated by [AVA](https://avajs.dev).
2626
children: text␊
2727
});␊
2828
29-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICBjb25zdCBCdXR0b24gPSAoeyB0ZXh0IH0pID0+IChcbiAgICA8ZGl2PlxuICAgICAge3RleHR9XG4gICAgPC9kaXY+XG4gIClcbiJdLCJuYW1lcyI6WyJCdXR0b24iLCJ0ZXh0IiwiZGl2Il0sIm1hcHBpbmdzIjoiOzs7OztBQUNFLE1BQU1BLFNBQVMsQ0FBQyxFQUFFQyxJQUFJLEVBQUUsaUJBQ3RCLHFCQUFDQztrQkFDRUQifQ==`
29+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICBjb25zdCBCdXR0b24gPSAoeyB0ZXh0IH0pID0+IChcbiAgICA8ZGl2PlxuICAgICAge3RleHR9XG4gICAgPC9kaXY+XG4gIClcbiJdLCJuYW1lcyI6WyJCdXR0b24iLCJ0ZXh0IiwiZGl2Il0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDRSxNQUFNQSxTQUFTLENBQUMsRUFBRUMsSUFBSSxFQUFFLGlCQUN0QixxQkFBQ0M7a0JBQ0VEIn0=`
Binary file not shown.
Binary file not shown.

packages/jest/__test__/hoist-top-level.spec.ts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ Generated by [AVA](https://avajs.dev).
4141
jest.unmock('./bar/foo').dontMock('./bar/bar');␊
4242
};␊
4343
44-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImplc3Quc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmNvbnN0IGZvbyA9ICdmb28nXG5jb25zb2xlLmxvZyhmb28pXG5qZXN0LmVuYWJsZUF1dG9tb2NrKClcbmplc3QuZGlzYWJsZUF1dG9tb2NrKClcbmplc3QubW9jaygnLi9mb28nKVxuamVzdC5tb2NrKCcuL2Zvby9iYXInLCAoKSA9PiAnYmFyJylcbmplc3QudW5tb2NrKCcuL2Jhci9mb28nKS5kb250TW9jaygnLi9iYXIvYmFyJylcbmplc3QuZGVlcFVubW9jaygnLi9mb28nKVxuamVzdC5tb2NrKCcuL2ZvbycpLm1vY2soJy4vYmFyJylcbmNvbnN0IGZ1bmMgPSAoKSA9PiB7XG4gIGNvbnN0IGJhciA9ICdiYXInXG4gIGNvbnNvbGUubG9nKGJhcilcbiAgamVzdC51bm1vY2soJy4vZm9vJylcbiAgamVzdC5tb2NrKCcuL2JhcicpXG4gIGplc3QubW9jaygnLi9iYXIvZm9vJywgKCkgPT4gJ2ZvbycpXG4gIGplc3QudW5tb2NrKCcuL2Zvby9iYXInKVxuICBqZXN0LnVubW9jaygnLi9iYXIvZm9vJykuZG9udE1vY2soJy4vYmFyL2JhcicpXG4gIGplc3QuZGVlcFVubW9jaygnLi9iYXInKVxuICBqZXN0Lm1vY2soJy4vZm9vJykubW9jaygnLi9iYXInKVxufVxuY29uc3QgZnVuYzIgPSAoKSA9PiB7XG4gIGNvbnN0IGJhciA9ICdiYXInXG4gIGNvbnNvbGUubG9nKGJhcilcbiAgamVzdC5tb2NrKCcuL2JhcicpXG4gIGplc3QudW5tb2NrKCcuL2Zvby9iYXInKVxuICBqZXN0Lm1vY2soJy4vYmFyL2ZvbycsICgpID0+ICdmb28nKVxuICBqZXN0LnVubW9jaygnLi9mb28nKVxuICBqZXN0LnVubW9jaygnLi9iYXIvZm9vJykuZG9udE1vY2soJy4vYmFyL2JhcicpXG4gIGplc3QuZGVlcFVubW9jaygnLi9iYXInKVxuICBqZXN0Lm1vY2soJy4vZm9vJykubW9jaygnLi9iYXInKVxufVxuIl0sIm5hbWVzIjpbImplc3QiLCJlbmFibGVBdXRvbW9jayIsImRpc2FibGVBdXRvbW9jayIsIm1vY2siLCJkZWVwVW5tb2NrIiwiZm9vIiwiY29uc29sZSIsImxvZyIsInVubW9jayIsImRvbnRNb2NrIiwiZnVuYyIsImJhciIsImZ1bmMyIl0sIm1hcHBpbmdzIjoiO0FBR0FBLEtBQUtDLGNBQWM7QUFDbkJELEtBQUtFLGVBQWU7QUFDcEJGLEtBQUtHLElBQUksQ0FBQztBQUNWSCxLQUFLRyxJQUFJLENBQUMsYUFBYSxJQUFNO0FBRTdCSCxLQUFLSSxVQUFVLENBQUM7QUFDaEJKLEtBQUtHLElBQUksQ0FBQyxTQUFTQSxJQUFJLENBQUM7QUFSeEIsTUFBTUUsTUFBTTtBQUNaQyxRQUFRQyxHQUFHLENBQUNGO0FBS1pMLEtBQUtRLE1BQU0sQ0FBQyxhQUFhQyxRQUFRLENBQUM7QUFHbEMsTUFBTUMsT0FBTztJQUdYVixLQUFLUSxNQUFNLENBQUM7SUFDWlIsS0FBS0csSUFBSSxDQUFDO0lBQ1ZILEtBQUtHLElBQUksQ0FBQyxhQUFhLElBQU07SUFDN0JILEtBQUtRLE1BQU0sQ0FBQztJQUVaUixLQUFLSSxVQUFVLENBQUM7SUFDaEJKLEtBQUtHLElBQUksQ0FBQyxTQUFTQSxJQUFJLENBQUM7SUFSeEIsTUFBTVEsTUFBTTtJQUNaTCxRQUFRQyxHQUFHLENBQUNJO0lBS1pYLEtBQUtRLE1BQU0sQ0FBQyxhQUFhQyxRQUFRLENBQUM7QUFHcEM7QUFDQSxNQUFNRyxRQUFRO0lBR1paLEtBQUtHLElBQUksQ0FBQztJQUNWSCxLQUFLUSxNQUFNLENBQUM7SUFDWlIsS0FBS0csSUFBSSxDQUFDLGFBQWEsSUFBTTtJQUM3QkgsS0FBS1EsTUFBTSxDQUFDO0lBRVpSLEtBQUtJLFVBQVUsQ0FBQztJQUNoQkosS0FBS0csSUFBSSxDQUFDLFNBQVNBLElBQUksQ0FBQztJQVJ4QixNQUFNUSxNQUFNO0lBQ1pMLFFBQVFDLEdBQUcsQ0FBQ0k7SUFLWlgsS0FBS1EsTUFBTSxDQUFDLGFBQWFDLFFBQVEsQ0FBQztBQUdwQyJ9`
44+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImplc3Quc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmNvbnN0IGZvbyA9ICdmb28nXG5jb25zb2xlLmxvZyhmb28pXG5qZXN0LmVuYWJsZUF1dG9tb2NrKClcbmplc3QuZGlzYWJsZUF1dG9tb2NrKClcbmplc3QubW9jaygnLi9mb28nKVxuamVzdC5tb2NrKCcuL2Zvby9iYXInLCAoKSA9PiAnYmFyJylcbmplc3QudW5tb2NrKCcuL2Jhci9mb28nKS5kb250TW9jaygnLi9iYXIvYmFyJylcbmplc3QuZGVlcFVubW9jaygnLi9mb28nKVxuamVzdC5tb2NrKCcuL2ZvbycpLm1vY2soJy4vYmFyJylcbmNvbnN0IGZ1bmMgPSAoKSA9PiB7XG4gIGNvbnN0IGJhciA9ICdiYXInXG4gIGNvbnNvbGUubG9nKGJhcilcbiAgamVzdC51bm1vY2soJy4vZm9vJylcbiAgamVzdC5tb2NrKCcuL2JhcicpXG4gIGplc3QubW9jaygnLi9iYXIvZm9vJywgKCkgPT4gJ2ZvbycpXG4gIGplc3QudW5tb2NrKCcuL2Zvby9iYXInKVxuICBqZXN0LnVubW9jaygnLi9iYXIvZm9vJykuZG9udE1vY2soJy4vYmFyL2JhcicpXG4gIGplc3QuZGVlcFVubW9jaygnLi9iYXInKVxuICBqZXN0Lm1vY2soJy4vZm9vJykubW9jaygnLi9iYXInKVxufVxuY29uc3QgZnVuYzIgPSAoKSA9PiB7XG4gIGNvbnN0IGJhciA9ICdiYXInXG4gIGNvbnNvbGUubG9nKGJhcilcbiAgamVzdC5tb2NrKCcuL2JhcicpXG4gIGplc3QudW5tb2NrKCcuL2Zvby9iYXInKVxuICBqZXN0Lm1vY2soJy4vYmFyL2ZvbycsICgpID0+ICdmb28nKVxuICBqZXN0LnVubW9jaygnLi9mb28nKVxuICBqZXN0LnVubW9jaygnLi9iYXIvZm9vJykuZG9udE1vY2soJy4vYmFyL2JhcicpXG4gIGplc3QuZGVlcFVubW9jaygnLi9iYXInKVxuICBqZXN0Lm1vY2soJy4vZm9vJykubW9jaygnLi9iYXInKVxufVxuIl0sIm5hbWVzIjpbImplc3QiLCJlbmFibGVBdXRvbW9jayIsImRpc2FibGVBdXRvbW9jayIsIm1vY2siLCJkZWVwVW5tb2NrIiwiZm9vIiwiY29uc29sZSIsImxvZyIsInVubW9jayIsImRvbnRNb2NrIiwiZnVuYyIsImJhciIsImZ1bmMyIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7QUFHQUEsS0FBS0MsY0FBYztBQUNuQkQsS0FBS0UsZUFBZTtBQUNwQkYsS0FBS0csSUFBSSxDQUFDO0FBQ1ZILEtBQUtHLElBQUksQ0FBQyxhQUFhLElBQU07QUFFN0JILEtBQUtJLFVBQVUsQ0FBQztBQUNoQkosS0FBS0csSUFBSSxDQUFDLFNBQVNBLElBQUksQ0FBQztBQVJ4QixNQUFNRSxNQUFNO0FBQ1pDLFFBQVFDLEdBQUcsQ0FBQ0Y7QUFLWkwsS0FBS1EsTUFBTSxDQUFDLGFBQWFDLFFBQVEsQ0FBQztBQUdsQyxNQUFNQyxPQUFPO0lBR1hWLEtBQUtRLE1BQU0sQ0FBQztJQUNaUixLQUFLRyxJQUFJLENBQUM7SUFDVkgsS0FBS0csSUFBSSxDQUFDLGFBQWEsSUFBTTtJQUM3QkgsS0FBS1EsTUFBTSxDQUFDO0lBRVpSLEtBQUtJLFVBQVUsQ0FBQztJQUNoQkosS0FBS0csSUFBSSxDQUFDLFNBQVNBLElBQUksQ0FBQztJQVJ4QixNQUFNUSxNQUFNO0lBQ1pMLFFBQVFDLEdBQUcsQ0FBQ0k7SUFLWlgsS0FBS1EsTUFBTSxDQUFDLGFBQWFDLFFBQVEsQ0FBQztBQUdwQztBQUNBLE1BQU1HLFFBQVE7SUFHWlosS0FBS0csSUFBSSxDQUFDO0lBQ1ZILEtBQUtRLE1BQU0sQ0FBQztJQUNaUixLQUFLRyxJQUFJLENBQUMsYUFBYSxJQUFNO0lBQzdCSCxLQUFLUSxNQUFNLENBQUM7SUFFWlIsS0FBS0ksVUFBVSxDQUFDO0lBQ2hCSixLQUFLRyxJQUFJLENBQUMsU0FBU0EsSUFBSSxDQUFDO0lBUnhCLE1BQU1RLE1BQU07SUFDWkwsUUFBUUMsR0FBRyxDQUFDSTtJQUtaWCxLQUFLUSxNQUFNLENBQUMsYUFBYUMsUUFBUSxDQUFDO0FBR3BDIn0=`
Binary file not shown.

packages/jest/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232
"@swc-node/register": "^1.9.0"
3333
},
3434
"peerDependencies": {
35-
"@swc/core": ">= 1.3",
35+
"@swc/core": ">= 1.4.13",
3636
"@swc/types": ">= 0.1",
3737
"typescript": ">= 5.0"
3838
},
3939
"devDependencies": {
40-
"@swc/core": "^1.3.107",
40+
"@swc/core": "^1.4.13",
4141
"@swc/types": "^0.1.5"
4242
},
4343
"repository": {

packages/register/esm.mts

Lines changed: 30 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,12 @@
1+
import type { LoadHook, ResolveHook } from 'node:module'
12
import { fileURLToPath, pathToFileURL } from 'url'
23

34
import ts from 'typescript'
45

56
// @ts-expect-error
67
import { readDefaultTsConfig } from '../lib/read-default-tsconfig.js'
78
// @ts-expect-error
8-
import { compile } from '../lib/register.js'
9-
10-
interface ResolveContext {
11-
conditions: string[]
12-
parentURL: string | undefined
13-
}
14-
15-
interface ResolveResult {
16-
format?: string
17-
shortCircuit?: boolean
18-
url: string
19-
}
20-
21-
type ResolveArgs = [
22-
specifier: string,
23-
context?: ResolveContext,
24-
nextResolve?: (...args: ResolveArgs) => Promise<ResolveResult>,
25-
]
26-
type ResolveFn = (...args: Required<ResolveArgs>) => Promise<ResolveResult>
9+
import { AVAILABLE_EXTENSION_PATTERN, AVAILABLE_TS_EXTENSION_PATTERN, compile } from '../lib/register.js'
2710

2811
const tsconfig: ts.CompilerOptions = readDefaultTsConfig()
2912
tsconfig.module = ts.ModuleKind.ESNext
@@ -33,25 +16,24 @@ const host: ts.ModuleResolutionHost = {
3316
fileExists: ts.sys.fileExists,
3417
readFile: ts.sys.readFile,
3518
}
36-
const EXTENSIONS: string[] = [ts.Extension.Ts, ts.Extension.Tsx, ts.Extension.Mts]
3719

38-
export const resolve: ResolveFn = async (specifier, context, nextResolve) => {
39-
const isTS = EXTENSIONS.some((ext) => specifier.endsWith(ext))
20+
export const resolve: ResolveHook = async (specifier, context, nextResolve) => {
21+
if (!AVAILABLE_EXTENSION_PATTERN.test(specifier)) {
22+
return nextResolve(specifier)
23+
}
4024

4125
// entrypoint
4226
if (!context.parentURL) {
4327
return {
44-
format: isTS ? 'ts' : undefined,
28+
importAttributes: {
29+
...context.importAttributes,
30+
swc: 'entrypoint',
31+
},
4532
url: specifier,
4633
shortCircuit: true,
4734
}
4835
}
4936

50-
// import/require from external library
51-
if (context.parentURL.includes('/node_modules/') && !isTS) {
52-
return nextResolve(specifier)
53-
}
54-
5537
const { resolvedModule } = ts.resolveModuleName(
5638
specifier.startsWith('file:') ? fileURLToPath(specifier) : specifier,
5739
fileURLToPath(context.parentURL),
@@ -60,50 +42,44 @@ export const resolve: ResolveFn = async (specifier, context, nextResolve) => {
6042
moduleResolutionCache,
6143
)
6244

63-
// import from local project to local project TS file
45+
// local project file
6446
if (
6547
resolvedModule &&
66-
!resolvedModule.resolvedFileName.includes('/node_modules/') &&
67-
EXTENSIONS.includes(resolvedModule.extension)
48+
(!resolvedModule.resolvedFileName.includes('/node_modules/') ||
49+
AVAILABLE_TS_EXTENSION_PATTERN.test(resolvedModule.resolvedFileName))
6850
) {
6951
return {
70-
format: 'ts',
7152
url: pathToFileURL(resolvedModule.resolvedFileName).href,
7253
shortCircuit: true,
54+
importAttributes: {
55+
...context.importAttributes,
56+
swc: resolvedModule.resolvedFileName,
57+
},
7358
}
7459
}
7560

76-
// import from local project to either:
77-
// - something TS couldn't resolve
78-
// - external library
79-
// - local project non-TS file
61+
// files could not resolved by typescript
8062
return nextResolve(specifier)
8163
}
8264

83-
interface LoadContext {
84-
conditions: string[]
85-
format: string | null | undefined
86-
}
87-
88-
interface LoadResult {
89-
format: string
90-
shortCircuit?: boolean
91-
source: string | ArrayBuffer | SharedArrayBuffer | Uint8Array
92-
}
93-
94-
type LoadArgs = [url: string, context: LoadContext, nextLoad?: (...args: LoadArgs) => Promise<LoadResult>]
95-
type LoadFn = (...args: Required<LoadArgs>) => Promise<LoadResult>
96-
9765
const tsconfigForSWCNode = {
9866
...tsconfig,
9967
paths: undefined,
10068
baseUrl: undefined,
10169
}
10270

103-
export const load: LoadFn = async (url, context, nextLoad) => {
104-
if (context.format === 'ts') {
105-
const { source } = await nextLoad(url, context)
106-
const code = typeof source === 'string' ? source : Buffer.from(source).toString()
71+
export const load: LoadHook = async (url, context, nextLoad) => {
72+
const swcAttribute = context.importAttributes.swc
73+
74+
if (swcAttribute) {
75+
delete context.importAttributes.swc
76+
77+
const { source } = await nextLoad(url, {
78+
...context,
79+
format: 'ts' as any,
80+
})
81+
82+
const code = !source || typeof source === 'string' ? source : Buffer.from(source).toString()
10783
const compiled = await compile(code, fileURLToPath(url), tsconfigForSWCNode, true)
10884
return {
10985
format: 'module',

packages/register/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@
4848
"tslib": "^2.6.2"
4949
},
5050
"peerDependencies": {
51-
"@swc/core": ">= 1.3",
51+
"@swc/core": ">= 1.4.13",
5252
"typescript": ">= 4.3"
5353
},
5454
"devDependencies": {
55-
"@swc/core": "^1.3.107",
55+
"@swc/core": "^1.4.13",
5656
"@swc/helpers": "^0.5.3",
5757
"@types/debug": "^4.1.12",
5858
"lodash": "^4.17.21",

0 commit comments

Comments
 (0)