@swc-node/register 1.11.1 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -0
- package/esm/esm.mjs +54 -1
- package/esm/esm.mjs.map +1 -1
- package/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/esm.mjs +54 -1
- package/lib/esm.mjs.map +1 -1
- package/lib/read-default-tsconfig.d.ts +4 -0
- package/lib/read-default-tsconfig.js +48 -15
- package/lib/read-default-tsconfig.js.map +1 -1
- package/lib/register.js +57 -6
- package/lib/register.js.map +1 -1
- package/lib/transform-cache.d.ts +22 -0
- package/lib/transform-cache.js +258 -0
- package/lib/transform-cache.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -5
|
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.getSourceMapMode = getSourceMapMode;
|
|
39
40
|
exports.readDefaultTsConfig = readDefaultTsConfig;
|
|
40
41
|
exports.tsCompilerOptionsToSwcConfig = tsCompilerOptionsToSwcConfig;
|
|
41
42
|
const fs_1 = require("fs");
|
|
@@ -45,6 +46,35 @@ const debug_1 = __importDefault(require("debug"));
|
|
|
45
46
|
const ts = __importStar(require("typescript"));
|
|
46
47
|
const debug = (0, debug_1.default)('@swc-node');
|
|
47
48
|
const configCache = {};
|
|
49
|
+
// Keep compatibility with the legacy SWC_NODE_INLINE_SOURCE_MAP env by
|
|
50
|
+
// mapping it to SWC_NODE_SOURCE_MAP_MODE=inline.
|
|
51
|
+
if (typeof process.env.SWC_NODE_INLINE_SOURCE_MAP === 'string') {
|
|
52
|
+
process.env.SWC_NODE_SOURCE_MAP_MODE = 'inline';
|
|
53
|
+
}
|
|
54
|
+
function getSourceMapMode() {
|
|
55
|
+
var _a;
|
|
56
|
+
switch ((_a = process.env.SWC_NODE_SOURCE_MAP_MODE) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()) {
|
|
57
|
+
case 'both':
|
|
58
|
+
return { inline: true, store: true };
|
|
59
|
+
case 'inline':
|
|
60
|
+
return { inline: true, store: false };
|
|
61
|
+
case 'store':
|
|
62
|
+
return { inline: false, store: true };
|
|
63
|
+
case 'none':
|
|
64
|
+
return { inline: false, store: false };
|
|
65
|
+
}
|
|
66
|
+
// In auto mode, always inline the map: the V8 inspector reads the inline
|
|
67
|
+
// sourceMappingURL off the running code to bind breakpoints, and it does so
|
|
68
|
+
// regardless of `process.sourceMapsEnabled` (which only governs how Node
|
|
69
|
+
// rewrites Error.stack). Gating inline emission on that flag broke debuggers
|
|
70
|
+
// in 1.12.0 (https://github.com/swc-project/swc-node/issues/1059).
|
|
71
|
+
//
|
|
72
|
+
// Additionally store the map when native source maps are off so
|
|
73
|
+
// @swc-node/sourcemap-support keeps Error.stack line numbers correct; when
|
|
74
|
+
// native maps are on, Node handles stack traces and storing would just retain
|
|
75
|
+
// a duplicate map.
|
|
76
|
+
return process.sourceMapsEnabled ? { inline: true, store: false } : { inline: true, store: true };
|
|
77
|
+
}
|
|
48
78
|
function readDefaultTsConfig(tsConfigPath) {
|
|
49
79
|
var _a, _b;
|
|
50
80
|
if (tsConfigPath === void 0) { tsConfigPath = (_b = (_a = process.env.SWC_NODE_PROJECT) !== null && _a !== void 0 ? _a : process.env.TS_NODE_PROJECT) !== null && _b !== void 0 ? _b : (0, path_1.join)(process.cwd(), 'tsconfig.json'); }
|
|
@@ -108,9 +138,13 @@ function toTsTarget(target) {
|
|
|
108
138
|
case ts.ScriptTarget.ES2021:
|
|
109
139
|
return 'es2021';
|
|
110
140
|
case ts.ScriptTarget.ES2022:
|
|
141
|
+
return 'es2022';
|
|
142
|
+
case ts.ScriptTarget.ES2023:
|
|
143
|
+
return 'es2023';
|
|
144
|
+
case ts.ScriptTarget.ES2024:
|
|
111
145
|
case ts.ScriptTarget.ESNext:
|
|
112
146
|
case ts.ScriptTarget.Latest:
|
|
113
|
-
return '
|
|
147
|
+
return 'es2024';
|
|
114
148
|
case ts.ScriptTarget.JSON:
|
|
115
149
|
return 'es5';
|
|
116
150
|
}
|
|
@@ -144,36 +178,35 @@ function getUseDefineForClassFields(compilerOptions, target) {
|
|
|
144
178
|
return (_a = compilerOptions.useDefineForClassFields) !== null && _a !== void 0 ? _a : target >= ts.ScriptTarget.ES2022;
|
|
145
179
|
}
|
|
146
180
|
function tsCompilerOptionsToSwcConfig(options, filename) {
|
|
147
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
181
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
148
182
|
const isJsx = filename.endsWith('.tsx') || filename.endsWith('.jsx') || Boolean(options.jsx);
|
|
149
183
|
const target = (_a = options.target) !== null && _a !== void 0 ? _a : ts.ScriptTarget.ES2018;
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
184
|
+
const sourceMapModeName = (_b = process.env.SWC_NODE_SOURCE_MAP_MODE) === null || _b === void 0 ? void 0 : _b.trim().toLowerCase();
|
|
185
|
+
const enableInlineSourceMap = (_c = options.inlineSourceMap) !== null && _c !== void 0 ? _c : (sourceMapModeName === 'inline' ? true : undefined);
|
|
186
|
+
const shouldEmitSourceMap = Boolean(options.sourceMap || enableInlineSourceMap);
|
|
153
187
|
return {
|
|
154
|
-
module: toModule((
|
|
188
|
+
module: toModule((_d = options.module) !== null && _d !== void 0 ? _d : ts.ModuleKind.ES2015),
|
|
155
189
|
target: toTsTarget(target),
|
|
156
190
|
jsx: isJsx,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
emitDecoratorMetadata: (_e = options.emitDecoratorMetadata) !== null && _e !== void 0 ? _e : false,
|
|
191
|
+
sourcemap: enableInlineSourceMap ? 'inline' : shouldEmitSourceMap,
|
|
192
|
+
experimentalDecorators: (_e = options.experimentalDecorators) !== null && _e !== void 0 ? _e : false,
|
|
193
|
+
emitDecoratorMetadata: (_f = options.emitDecoratorMetadata) !== null && _f !== void 0 ? _f : false,
|
|
161
194
|
useDefineForClassFields: getUseDefineForClassFields(options, target),
|
|
162
|
-
esModuleInterop: (
|
|
195
|
+
esModuleInterop: (_g = options.esModuleInterop) !== null && _g !== void 0 ? _g : false,
|
|
163
196
|
dynamicImport: true,
|
|
164
197
|
keepClassNames: true,
|
|
165
198
|
externalHelpers: Boolean(options.importHelpers),
|
|
166
|
-
react: ((
|
|
199
|
+
react: ((_k = (_j = (_h = options.jsxFactory) !== null && _h !== void 0 ? _h : options.jsxFragmentFactory) !== null && _j !== void 0 ? _j : options.jsx) !== null && _k !== void 0 ? _k : options.jsxImportSource)
|
|
167
200
|
? {
|
|
168
201
|
pragma: options.jsxFactory,
|
|
169
202
|
pragmaFrag: options.jsxFragmentFactory,
|
|
170
|
-
importSource: (
|
|
171
|
-
runtime: ((
|
|
203
|
+
importSource: (_l = options.jsxImportSource) !== null && _l !== void 0 ? _l : 'react',
|
|
204
|
+
runtime: ((_m = options.jsx) !== null && _m !== void 0 ? _m : 0) >= ts.JsxEmit.ReactJSX ? 'automatic' : 'classic',
|
|
172
205
|
useBuiltins: true,
|
|
173
206
|
}
|
|
174
207
|
: undefined,
|
|
175
208
|
baseUrl: options.baseUrl ? (0, path_1.resolve)(options.baseUrl) : undefined,
|
|
176
|
-
paths: Object.fromEntries(Object.entries((
|
|
209
|
+
paths: Object.fromEntries(Object.entries((_o = options.paths) !== null && _o !== void 0 ? _o : {}).map(([aliasKey, aliasPaths]) => {
|
|
177
210
|
var _a;
|
|
178
211
|
return [
|
|
179
212
|
aliasKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-default-tsconfig.js","sourceRoot":"","sources":["../read-default-tsconfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"read-default-tsconfig.js","sourceRoot":"","sources":["../read-default-tsconfig.ts"],"names":[],"mappings":"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"}
|
package/lib/register.js
CHANGED
|
@@ -32,6 +32,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var _a, _b;
|
|
35
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
37
|
exports.compile = compile;
|
|
37
38
|
exports.register = register;
|
|
@@ -40,6 +41,7 @@ const sourcemap_support_1 = require("@swc-node/sourcemap-support");
|
|
|
40
41
|
const pirates_1 = require("pirates");
|
|
41
42
|
const ts = __importStar(require("typescript"));
|
|
42
43
|
const read_default_tsconfig_1 = require("./read-default-tsconfig");
|
|
44
|
+
const transform_cache_1 = require("./transform-cache");
|
|
43
45
|
const DEFAULT_EXTENSIONS = new Set([
|
|
44
46
|
ts.Extension.Js,
|
|
45
47
|
ts.Extension.Ts,
|
|
@@ -52,9 +54,28 @@ const DEFAULT_EXTENSIONS = new Set([
|
|
|
52
54
|
'.es6',
|
|
53
55
|
'.es',
|
|
54
56
|
]);
|
|
57
|
+
// Runtime knobs here are process-scoped and comparatively cheap to read, so
|
|
58
|
+
// they gate cache safety without paying per-module deep serialization costs.
|
|
59
|
+
// Every env var that changes transform output must appear here, otherwise a
|
|
60
|
+
// warm cache would serve output produced under a different configuration.
|
|
61
|
+
const CacheRuntimeSalt = [
|
|
62
|
+
process.env.SWCRC ? 'swcrc=1' : 'swcrc=0',
|
|
63
|
+
`swcConfig=${(_a = process.env.SWC_CONFIG_FILE) !== null && _a !== void 0 ? _a : ''}`,
|
|
64
|
+
`sourceMapMode=${(_b = process.env.SWC_NODE_SOURCE_MAP_MODE) !== null && _b !== void 0 ? _b : 'auto'}`,
|
|
65
|
+
// Toggles import()/import.meta rewriting, so it changes emitted code.
|
|
66
|
+
`ignoreDynamic=${process.env.SWC_NODE_IGNORE_DYNAMIC ? '1' : '0'}`,
|
|
67
|
+
].join(';');
|
|
55
68
|
const injectInlineSourceMap = ({ filename, code, map, }) => {
|
|
56
|
-
if (map) {
|
|
69
|
+
if (!map) {
|
|
70
|
+
return code;
|
|
71
|
+
}
|
|
72
|
+
// Choose map storage strategy at emit time so one process can tune behavior
|
|
73
|
+
// per runtime profile (debuggability vs memory) without rebuilds.
|
|
74
|
+
const sourceMapMode = (0, read_default_tsconfig_1.getSourceMapMode)();
|
|
75
|
+
if (sourceMapMode.store) {
|
|
57
76
|
sourcemap_support_1.SourcemapMap.set(filename, map);
|
|
77
|
+
}
|
|
78
|
+
if (sourceMapMode.inline) {
|
|
58
79
|
const base64Map = Buffer.from(map, 'utf8').toString('base64');
|
|
59
80
|
const sourceMapContent = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}`;
|
|
60
81
|
return `${code}\n${sourceMapContent}`;
|
|
@@ -65,13 +86,37 @@ function compile(sourcecode, filename, options, async = false) {
|
|
|
65
86
|
if (sourcecode == null) {
|
|
66
87
|
return;
|
|
67
88
|
}
|
|
68
|
-
|
|
69
|
-
|
|
89
|
+
const fallbackToTs = Boolean(options && typeof options.fallbackToTs === 'function' && options.fallbackToTs(filename));
|
|
90
|
+
delete options.fallbackToTs;
|
|
91
|
+
// Preserve the overloaded return contract: an async caller may `.then()` the
|
|
92
|
+
// result, so every synchronous return below must be wrapped when async.
|
|
93
|
+
const finalize = (result) => (async ? Promise.resolve(result) : result);
|
|
94
|
+
// Fast-path before cache work for files intentionally left as runtime JS.
|
|
95
|
+
// This keeps cache logs meaningful and avoids unnecessary key generation.
|
|
96
|
+
if (!fallbackToTs && (0, transform_cache_1.shouldSkipTransformForRuntimeJs)(filename, sourcecode, options.module, Boolean(options.jsx))) {
|
|
97
|
+
return finalize(sourcecode);
|
|
98
|
+
}
|
|
99
|
+
const cacheInput = {
|
|
100
|
+
sourcecode,
|
|
101
|
+
filename,
|
|
102
|
+
options,
|
|
103
|
+
fallbackToTs,
|
|
104
|
+
runSalt: CacheRuntimeSalt,
|
|
105
|
+
};
|
|
106
|
+
const cacheKey = (0, transform_cache_1.createCacheKey)(cacheInput);
|
|
107
|
+
const cacheEntry = (0, transform_cache_1.getCachedTransform)(cacheKey);
|
|
108
|
+
if (cacheEntry) {
|
|
109
|
+
// Keep source-map behavior consistent for cache hits, otherwise stack trace
|
|
110
|
+
// semantics would differ between warm and cold compiles.
|
|
111
|
+
return finalize(injectInlineSourceMap({ filename, code: cacheEntry.code, map: cacheEntry.map }));
|
|
112
|
+
}
|
|
113
|
+
if (fallbackToTs) {
|
|
70
114
|
const { outputText, sourceMapText } = ts.transpileModule(sourcecode, {
|
|
71
115
|
fileName: filename,
|
|
72
116
|
compilerOptions: options,
|
|
73
117
|
});
|
|
74
|
-
|
|
118
|
+
(0, transform_cache_1.setCachedTransform)(cacheKey, { code: outputText, map: sourceMapText });
|
|
119
|
+
return finalize(injectInlineSourceMap({ filename, code: outputText, map: sourceMapText }));
|
|
75
120
|
}
|
|
76
121
|
let swcRegisterConfig;
|
|
77
122
|
if (process.env.SWCRC) {
|
|
@@ -79,7 +124,7 @@ function compile(sourcecode, filename, options, async = false) {
|
|
|
79
124
|
swcRegisterConfig = {
|
|
80
125
|
swc: {
|
|
81
126
|
swcrc: true,
|
|
82
|
-
configFile: process.env.SWC_CONFIG_FILE
|
|
127
|
+
configFile: process.env.SWC_CONFIG_FILE,
|
|
83
128
|
},
|
|
84
129
|
};
|
|
85
130
|
}
|
|
@@ -88,11 +133,13 @@ function compile(sourcecode, filename, options, async = false) {
|
|
|
88
133
|
}
|
|
89
134
|
if (async) {
|
|
90
135
|
return (0, core_1.transform)(sourcecode, filename, swcRegisterConfig).then(({ code, map }) => {
|
|
136
|
+
(0, transform_cache_1.setCachedTransform)(cacheKey, { code, map });
|
|
91
137
|
return injectInlineSourceMap({ filename, code, map });
|
|
92
138
|
});
|
|
93
139
|
}
|
|
94
140
|
else {
|
|
95
141
|
const { code, map } = (0, core_1.transformSync)(sourcecode, filename, swcRegisterConfig);
|
|
142
|
+
(0, transform_cache_1.setCachedTransform)(cacheKey, { code, map });
|
|
96
143
|
return injectInlineSourceMap({ filename, code, map });
|
|
97
144
|
}
|
|
98
145
|
}
|
|
@@ -101,7 +148,11 @@ function register(options = {}, hookOpts = {}) {
|
|
|
101
148
|
options = Object.keys(options).length ? options : (0, read_default_tsconfig_1.readDefaultTsConfig)();
|
|
102
149
|
}
|
|
103
150
|
options.module = ts.ModuleKind.CommonJS;
|
|
104
|
-
|
|
151
|
+
// Install source-map-support only when map-store mode is active; with inline
|
|
152
|
+
// mode and native source maps, this avoids duplicate map retention.
|
|
153
|
+
if ((0, read_default_tsconfig_1.getSourceMapMode)().store) {
|
|
154
|
+
(0, sourcemap_support_1.installSourceMapSupport)();
|
|
155
|
+
}
|
|
105
156
|
return (0, pirates_1.addHook)((code, filename) => compile(code, filename, options), {
|
|
106
157
|
exts: Array.from(DEFAULT_EXTENSIONS),
|
|
107
158
|
...hookOpts,
|
package/lib/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
interface TransformCacheEntry {
|
|
3
|
+
code: string;
|
|
4
|
+
map?: string;
|
|
5
|
+
}
|
|
6
|
+
interface TransformCacheKeyInput {
|
|
7
|
+
sourcecode: string;
|
|
8
|
+
filename: string;
|
|
9
|
+
options: Record<string, unknown>;
|
|
10
|
+
fallbackToTs: boolean;
|
|
11
|
+
runSalt: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function getCachedTransform(cacheKey: string): TransformCacheEntry | undefined;
|
|
14
|
+
export declare function setCachedTransform(cacheKey: string, value: TransformCacheEntry): void;
|
|
15
|
+
export declare function createCacheKey(input: TransformCacheKeyInput): string;
|
|
16
|
+
export declare function clearTransformCache(options?: {
|
|
17
|
+
memory?: boolean;
|
|
18
|
+
disk?: boolean;
|
|
19
|
+
}): void;
|
|
20
|
+
export declare function getTransformCacheDirectory(): string;
|
|
21
|
+
export declare function shouldSkipTransformForRuntimeJs(filename: string, sourcecode: string, moduleKind?: ts.ModuleKind, jsxEnabled?: boolean, swcrcEnabled?: boolean): boolean;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
var _a;
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.getCachedTransform = getCachedTransform;
|
|
41
|
+
exports.setCachedTransform = setCachedTransform;
|
|
42
|
+
exports.createCacheKey = createCacheKey;
|
|
43
|
+
exports.clearTransformCache = clearTransformCache;
|
|
44
|
+
exports.getTransformCacheDirectory = getTransformCacheDirectory;
|
|
45
|
+
exports.shouldSkipTransformForRuntimeJs = shouldSkipTransformForRuntimeJs;
|
|
46
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
47
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
48
|
+
const ts = __importStar(require("typescript"));
|
|
49
|
+
const node_os_1 = require("node:os");
|
|
50
|
+
const node_path_2 = require("node:path");
|
|
51
|
+
const xxhash_1 = require("@node-rs/xxhash");
|
|
52
|
+
const debug_1 = __importDefault(require("debug"));
|
|
53
|
+
const fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-stringify"));
|
|
54
|
+
const LOOKS_LIKE_ESM_SYNTAX_REGEX = /(?:^|\n)\s*import\s|(?:^|\n)\s*export\s|\bimport\.meta\b/;
|
|
55
|
+
// Strong JSX signals: a closing element `</Tag`, a self-closing element
|
|
56
|
+
// `<Tag ... />`, or a fragment `<>`. These are rare in plain JS (a `<`/`>`
|
|
57
|
+
// comparison matches none of them), so a hit reliably means the file needs the
|
|
58
|
+
// JSX transform and must not be skipped.
|
|
59
|
+
const LOOKS_LIKE_JSX_REGEX = /<\/[A-Za-z]|<[A-Za-z][^>]*\/>|<>/;
|
|
60
|
+
const JS_RUNTIME_EXTENSIONS = new Set([ts.Extension.Js, ts.Extension.Mjs, ts.Extension.Cjs, '.es6', '.es']);
|
|
61
|
+
const debug = (0, debug_1.default)('@swc-node');
|
|
62
|
+
const CACHE_ENABLED = isEnabled(process.env.SWC_NODE_CACHE, true);
|
|
63
|
+
const MEMORY_CACHE_LIMIT = Number((_a = process.env.SWC_NODE_CACHE_MEMORY_LIMIT) !== null && _a !== void 0 ? _a : '2000');
|
|
64
|
+
// A stable per-user segment so the on-disk cache is shared across runs by the
|
|
65
|
+
// same user. Windows has no getuid(); falling back to the pid there would give
|
|
66
|
+
// every process a throwaway directory and defeat the disk cache entirely.
|
|
67
|
+
function cacheUserSegment() {
|
|
68
|
+
if (typeof process.getuid === 'function') {
|
|
69
|
+
return String(process.getuid());
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const name = (0, node_os_1.userInfo)().username;
|
|
73
|
+
if (name) {
|
|
74
|
+
return name.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (_a) {
|
|
78
|
+
// userInfo() can throw when there is no backing passwd entry.
|
|
79
|
+
}
|
|
80
|
+
return 'default';
|
|
81
|
+
}
|
|
82
|
+
// Resolved lazily rather than frozen at import time so SWC_NODE_CACHE_DIR is
|
|
83
|
+
// honored whenever it is set (including by tests) and getTransformCacheDirectory
|
|
84
|
+
// always reflects the current value.
|
|
85
|
+
function getCacheDirectory() {
|
|
86
|
+
var _a;
|
|
87
|
+
return (_a = process.env.SWC_NODE_CACHE_DIR) !== null && _a !== void 0 ? _a : (0, node_path_2.join)((0, node_os_1.tmpdir)(), `swc-node-${cacheUserSegment()}`);
|
|
88
|
+
}
|
|
89
|
+
if (!Number.isFinite(MEMORY_CACHE_LIMIT) || MEMORY_CACHE_LIMIT < 0) {
|
|
90
|
+
throw new Error(`Invalid value for SWC_NODE_CACHE_MEMORY_LIMIT: ${process.env.SWC_NODE_CACHE_MEMORY_LIMIT}`);
|
|
91
|
+
}
|
|
92
|
+
const REGISTER_VERSION = readPackageVersion('../package.json');
|
|
93
|
+
const SWC_VERSION = readPackageVersion('@swc/core/package.json');
|
|
94
|
+
const memoryCache = new Map();
|
|
95
|
+
let optionsSignatureCache = new WeakMap();
|
|
96
|
+
let ensuredCacheDirectory;
|
|
97
|
+
let diskWriteCounter = 0;
|
|
98
|
+
function getCachedTransform(cacheKey) {
|
|
99
|
+
if (!CACHE_ENABLED) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const memoryValue = memoryCache.get(cacheKey);
|
|
103
|
+
if (memoryValue) {
|
|
104
|
+
return memoryValue;
|
|
105
|
+
}
|
|
106
|
+
const diskValue = readDiskCache(cacheKey);
|
|
107
|
+
if (diskValue) {
|
|
108
|
+
setMemoryCache(cacheKey, diskValue);
|
|
109
|
+
}
|
|
110
|
+
return diskValue;
|
|
111
|
+
}
|
|
112
|
+
function setCachedTransform(cacheKey, value) {
|
|
113
|
+
if (!CACHE_ENABLED) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
setMemoryCache(cacheKey, value);
|
|
117
|
+
writeDiskCache(cacheKey, value);
|
|
118
|
+
}
|
|
119
|
+
function createCacheKey(input) {
|
|
120
|
+
// Keep cache reuse scoped to both source intent and toolchain version so
|
|
121
|
+
// stale compiled output is not reused across upgrades/config changes. NUL
|
|
122
|
+
// separators keep field boundaries unambiguous.
|
|
123
|
+
const payload = [
|
|
124
|
+
input.sourcecode,
|
|
125
|
+
input.filename,
|
|
126
|
+
input.fallbackToTs ? 'ts' : 'swc',
|
|
127
|
+
getOptionsSignature(input.options),
|
|
128
|
+
input.runSalt,
|
|
129
|
+
`register:${REGISTER_VERSION};swc:${SWC_VERSION}`,
|
|
130
|
+
].join('\0');
|
|
131
|
+
// xxh64 over a byte Buffer: faster than a crypto hash over strings on this
|
|
132
|
+
// per-file hot path, and 64-bit collision odds are negligible for a transform
|
|
133
|
+
// cache. Matches @swc-node/jest's hashing and standard build-cache practice.
|
|
134
|
+
return (0, xxhash_1.xxh64)(Buffer.from(payload)).toString(16);
|
|
135
|
+
}
|
|
136
|
+
function getOptionsSignature(options) {
|
|
137
|
+
const cached = optionsSignatureCache.get(options);
|
|
138
|
+
if (cached) {
|
|
139
|
+
return cached;
|
|
140
|
+
}
|
|
141
|
+
// Options are usually reused for most compiles in one process; cache the
|
|
142
|
+
// normalized signature so hash generation stays near O(source length).
|
|
143
|
+
const signature = (0, fast_json_stable_stringify_1.default)(options);
|
|
144
|
+
optionsSignatureCache.set(options, signature);
|
|
145
|
+
return signature;
|
|
146
|
+
}
|
|
147
|
+
function setMemoryCache(key, value) {
|
|
148
|
+
memoryCache.set(key, value);
|
|
149
|
+
// Bound in-process retention for long-lived services where many modules
|
|
150
|
+
// may be touched once and never needed again.
|
|
151
|
+
while (memoryCache.size > MEMORY_CACHE_LIMIT) {
|
|
152
|
+
const oldestKey = memoryCache.keys().next().value;
|
|
153
|
+
if (!oldestKey) {
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
memoryCache.delete(oldestKey);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function readDiskCache(key) {
|
|
160
|
+
try {
|
|
161
|
+
const directory = ensureCacheDirectory();
|
|
162
|
+
const file = node_fs_1.default.readFileSync((0, node_path_2.join)(directory, `${key}.json`), 'utf8');
|
|
163
|
+
return JSON.parse(file);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
debug('Failed to read cache file', error);
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function writeDiskCache(key, value) {
|
|
171
|
+
const directory = ensureCacheDirectory();
|
|
172
|
+
const target = (0, node_path_2.join)(directory, `${key}.json`);
|
|
173
|
+
// Write to a unique temp file then atomically rename into place. A crash or
|
|
174
|
+
// concurrent writer can then only leave a stray .tmp file, never a
|
|
175
|
+
// partial/zero-byte entry that a reader could observe at the final path.
|
|
176
|
+
// Writes stay non-blocking (fire-and-forget).
|
|
177
|
+
const tmp = `${target}.${process.pid}.${diskWriteCounter++}.tmp`;
|
|
178
|
+
void node_fs_1.default.promises
|
|
179
|
+
.writeFile(tmp, JSON.stringify(value), 'utf8')
|
|
180
|
+
.then(() => node_fs_1.default.promises.rename(tmp, target))
|
|
181
|
+
.catch((error) => {
|
|
182
|
+
debug('Failed to write cache file', error);
|
|
183
|
+
void node_fs_1.default.promises.rm(tmp, { force: true }).catch(() => { });
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function ensureCacheDirectory() {
|
|
187
|
+
const directory = getCacheDirectory();
|
|
188
|
+
if (ensuredCacheDirectory !== directory) {
|
|
189
|
+
node_fs_1.default.mkdirSync(directory, { recursive: true });
|
|
190
|
+
ensuredCacheDirectory = directory;
|
|
191
|
+
}
|
|
192
|
+
// Note that we do not attempt to clean up old cache files since we store it
|
|
193
|
+
// on tmpdir and we assume the OS take care of that.
|
|
194
|
+
return directory;
|
|
195
|
+
}
|
|
196
|
+
function readPackageVersion(path) {
|
|
197
|
+
var _a;
|
|
198
|
+
try {
|
|
199
|
+
return (_a = require(path).version) !== null && _a !== void 0 ? _a : 'unknown';
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
debug(`Failed to read package ${path} version`, error);
|
|
203
|
+
return 'unknown';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function isEnabled(value, fallback) {
|
|
207
|
+
if (!value) {
|
|
208
|
+
return fallback;
|
|
209
|
+
}
|
|
210
|
+
const normalized = value.trim().toLowerCase();
|
|
211
|
+
return normalized !== '0' && normalized !== 'false' && normalized !== 'off' && normalized !== 'no';
|
|
212
|
+
}
|
|
213
|
+
function clearTransformCache(options = {}) {
|
|
214
|
+
const { memory = true, disk = true } = options;
|
|
215
|
+
if (memory) {
|
|
216
|
+
memoryCache.clear();
|
|
217
|
+
optionsSignatureCache = new WeakMap();
|
|
218
|
+
}
|
|
219
|
+
if (disk) {
|
|
220
|
+
try {
|
|
221
|
+
node_fs_1.default.rmSync(getCacheDirectory(), { recursive: true, force: true });
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
debug('Failed to clear cache directory', error);
|
|
225
|
+
}
|
|
226
|
+
ensuredCacheDirectory = undefined;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function getTransformCacheDirectory() {
|
|
230
|
+
return getCacheDirectory();
|
|
231
|
+
}
|
|
232
|
+
function shouldSkipTransformForRuntimeJs(filename, sourcecode, moduleKind = ts.ModuleKind.ES2015, jsxEnabled = false, swcrcEnabled = Boolean(process.env.SWCRC)) {
|
|
233
|
+
// Respect SWCRC workflows first. When users opt into external SWC config,
|
|
234
|
+
// consistency with that config takes priority over local fast-path heuristics.
|
|
235
|
+
if (swcrcEnabled) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
const extension = node_path_1.default.extname(filename).toLowerCase();
|
|
239
|
+
if (!JS_RUNTIME_EXTENSIONS.has(extension)) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
// JSX in a .js file must be transformed; skipping would ship raw JSX to the
|
|
243
|
+
// runtime and throw a SyntaxError. Never skip when JSX is configured or the
|
|
244
|
+
// source looks like JSX. This guard runs before the module-kind branch so it
|
|
245
|
+
// also protects ESM mode, which would otherwise skip every .js unconditionally.
|
|
246
|
+
if (jsxEnabled || LOOKS_LIKE_JSX_REGEX.test(sourcecode)) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
// In non-CommonJS output modes, runtime JS files are already executable for
|
|
250
|
+
// Node, so compiling them again mostly adds overhead.
|
|
251
|
+
if (moduleKind !== ts.ModuleKind.CommonJS) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
// CommonJS mode is where accidental ESM-in-JS files usually break at runtime,
|
|
255
|
+
// so we keep the transform path only when file content indicates that risk.
|
|
256
|
+
return !LOOKS_LIKE_ESM_SYNTAX_REGEX.test(sourcecode);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=transform-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-cache.js","sourceRoot":"","sources":["../transform-cache.ts"],"names":[],"mappings":"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"}
|