ts-swc-transform 2.11.3 → 2.11.4

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.
@@ -8,15 +8,25 @@ Object.defineProperty(exports, "default", {
8
8
  return transformTypesWorker;
9
9
  }
10
10
  });
11
+ var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb"));
11
12
  var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
12
13
  var _fsiterator = /*#__PURE__*/ _interop_require_default(require("fs-iterator"));
13
- var _module = /*#__PURE__*/ _interop_require_default(require("module"));
14
+ var _fsremovecompat = require("fs-remove-compat");
14
15
  var _os = /*#__PURE__*/ _interop_require_default(require("os"));
16
+ var _path = /*#__PURE__*/ _interop_require_default(require("path"));
15
17
  var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
16
- var _compatts = require("../compat.js");
18
+ var _resolvebinsync = /*#__PURE__*/ _interop_require_default(require("resolve-bin-sync"));
17
19
  var _constantsts = require("../constants.js");
18
20
  var _createMatcherts = /*#__PURE__*/ _interop_require_default(require("../createMatcher.js"));
19
21
  var _rewriteExtensionsts = require("../lib/rewriteExtensions.js");
22
+ function _array_like_to_array(arr, len) {
23
+ if (len == null || len > arr.length) len = arr.length;
24
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
25
+ return arr2;
26
+ }
27
+ function _array_without_holes(arr) {
28
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
29
+ }
20
30
  function _define_property(obj, key, value) {
21
31
  if (key in obj) {
22
32
  Object.defineProperty(obj, key, {
@@ -35,6 +45,12 @@ function _interop_require_default(obj) {
35
45
  default: obj
36
46
  };
37
47
  }
48
+ function _iterable_to_array(iter) {
49
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
50
+ }
51
+ function _non_iterable_spread() {
52
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
53
+ }
38
54
  function _object_spread(target) {
39
55
  for(var i = 1; i < arguments.length; i++){
40
56
  var source = arguments[i] != null ? arguments[i] : {};
@@ -74,81 +90,205 @@ function _object_spread_props(target, source) {
74
90
  }
75
91
  return target;
76
92
  }
93
+ function _to_consumable_array(arr) {
94
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
95
+ }
96
+ function _unsupported_iterable_to_array(o, minLen) {
97
+ if (!o) return;
98
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
99
+ var n = Object.prototype.toString.call(o).slice(8, -1);
100
+ if (n === "Object" && o.constructor) n = o.constructor.name;
101
+ if (n === "Map" || n === "Set") return Array.from(n);
102
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
103
+ }
77
104
  var _ref;
78
105
  var _os_cpus;
79
106
  var concurrency = Math.min(64, Math.max(8, ((_ref = (_os_cpus = _os.default.cpus()) === null || _os_cpus === void 0 ? void 0 : _os_cpus.length) !== null && _ref !== void 0 ? _ref : 4) * 8));
80
- var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
107
+ var tscPath = (0, _resolvebinsync.default)('typescript', 'tsc');
108
+ var tsgoPath = null;
109
+ try {
110
+ tsgoPath = (0, _resolvebinsync.default)('@typescript/native-preview', 'tsgo');
111
+ } catch (unused) {
112
+ tsgoPath = null;
113
+ }
114
+ /* ---------------- root file filtering ---------------- */ function isAllowedRootFile(basename) {
115
+ return basename.endsWith('.d.ts') || basename.endsWith('.d.mts') || basename.endsWith('.d.cts') || basename.endsWith('.ts') || basename.endsWith('.tsx') || basename.endsWith('.mts') || basename.endsWith('.cts') || basename.endsWith('.js') || basename.endsWith('.jsx') || basename.endsWith('.mjs') || basename.endsWith('.cjs');
116
+ }
117
+ /* ---------------- compiler execution ---------------- */ function runCompiler(cmdPath, args, cb) {
118
+ (0, _crossspawncb.default)(process.execPath, [
119
+ cmdPath
120
+ ].concat(_to_consumable_array(args)), {
121
+ encoding: 'utf8'
122
+ }, cb);
123
+ }
124
+ function runTsgoThenTsc(args, cb) {
125
+ if (tsgoPath) {
126
+ runCompiler(tsgoPath, args, function(err, res) {
127
+ // Prefer status code over "err" for deciding success/fallback
128
+ if (!err && res.status === 0) return cb(null, res);
129
+ runCompiler(tscPath, args, cb);
130
+ });
131
+ } else {
132
+ runCompiler(tscPath, args, cb);
133
+ }
134
+ }
135
+ /* ---------------- emitted file parsing ---------------- */ function parseEmittedFiles(res, dest) {
136
+ var out = [];
137
+ var seen = new Set();
138
+ var lines = "".concat(res.stdout, "\n").concat(res.stderr).split(/\r?\n/);
139
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
140
+ try {
141
+ for(var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
142
+ var line = _step.value;
143
+ line = line.trim();
144
+ if (!line) continue;
145
+ if (/^TSFILE:\s+/i.test(line)) line = line.replace(/^TSFILE:\s+/i, '').trim();
146
+ if (!_path.default.isAbsolute(line)) continue;
147
+ if (!(line.endsWith('.d.ts') || line.endsWith('.d.mts') || line.endsWith('.d.cts'))) continue;
148
+ // Optional safety: only accept outputs under dest
149
+ var rel = _path.default.relative(dest, line);
150
+ if (rel.startsWith('..') || _path.default.isAbsolute(rel)) continue;
151
+ if (!seen.has(line)) {
152
+ seen.add(line);
153
+ out.push(line);
154
+ }
155
+ }
156
+ } catch (err) {
157
+ _didIteratorError = true;
158
+ _iteratorError = err;
159
+ } finally{
160
+ try {
161
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
162
+ _iterator.return();
163
+ }
164
+ } finally{
165
+ if (_didIteratorError) {
166
+ throw _iteratorError;
167
+ }
168
+ }
169
+ }
170
+ return out;
171
+ }
81
172
  function transformTypesWorker(src, dest, options, callback) {
82
173
  var tsconfig = options.tsconfig;
83
174
  var matcher = (0, _createMatcherts.default)(tsconfig);
84
- var ts = _require('typescript');
85
- var entries = [];
175
+ var rootFiles = [];
86
176
  var iterator = new _fsiterator.default(src);
87
177
  iterator.forEach(function(entry) {
88
178
  if (!entry.stats.isFile()) return;
89
179
  if (entry.basename[0] === '.') return;
90
180
  if (_constantsts.typeFileRegEx.test(entry.basename)) return;
181
+ if (!isAllowedRootFile(entry.basename)) return;
91
182
  if (!matcher(entry.fullPath)) return;
92
- entries.push(entry);
183
+ rootFiles.push(entry.fullPath);
93
184
  }, {
94
185
  concurrency: concurrency
95
- }, function(err) {
96
- if (err) return callback(err);
97
- // Step 2: TypeScript emit (inherently sync - cannot change)
98
- var compilerOptions = ts.convertCompilerOptionsFromJson(tsconfig.config.compilerOptions, '');
99
- var config = {
100
- fileNames: entries.map(function(entry) {
101
- return entry.fullPath;
102
- }),
103
- options: _object_spread_props(_object_spread({}, compilerOptions.options), {
104
- outDir: dest,
105
- noEmit: false,
106
- allowJs: true,
107
- declaration: true,
108
- emitDeclarationOnly: true,
109
- listEmittedFiles: true
110
- }),
111
- projectReferences: tsconfig.config.references
112
- };
113
- var fileNames = config.fileNames, _$options = config.options, projectReferences = config.projectReferences;
114
- var host = ts.createCompilerHostWorker(_$options, /*setParentNodes*/ undefined, ts.sys);
115
- var programOptions = {
116
- rootNames: fileNames,
117
- options: _$options,
118
- projectReferences: projectReferences,
119
- host: host,
120
- configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics({
121
- fileNames: fileNames,
122
- options: _$options
123
- })
124
- };
125
- var program = ts.createProgram(programOptions);
126
- var res = program.emit();
127
- // Step 3: Post-process emitted files (async)
128
- var postQueue = new _queuecb.default();
129
- if (res.emittedFiles) {
130
- res.emittedFiles.forEach(function(file) {
131
- if (compilerOptions.options.rewriteRelativeImportExtensions) {
132
- if ((0, _compatts.stringEndsWith)(file, '.d.ts') || (0, _compatts.stringEndsWith)(file, '.d.cts') || (0, _compatts.stringEndsWith)(file, '.d.mts')) {
133
- postQueue.defer(function(cb) {
134
- _fs.default.readFile(file, 'utf8', function(readErr, content) {
135
- if (readErr) return cb();
136
- var updated = (0, _rewriteExtensionsts.rewriteExtensions)(content);
137
- if (updated !== content) {
138
- _fs.default.writeFile(file, updated, 'utf8', function() {
139
- return cb();
186
+ }, function(err1) {
187
+ var _tsconfig_config_compilerOptions;
188
+ if (err1) return callback(err1);
189
+ if (rootFiles.length === 0) return callback(null, []);
190
+ var compilerOptions = _object_spread_props(_object_spread({}, tsconfig.config.compilerOptions), {
191
+ outDir: dest,
192
+ noEmit: false,
193
+ allowJs: true,
194
+ declaration: true,
195
+ emitDeclarationOnly: true
196
+ });
197
+ var rewrite = ((_tsconfig_config_compilerOptions = tsconfig.config.compilerOptions) === null || _tsconfig_config_compilerOptions === void 0 ? void 0 : _tsconfig_config_compilerOptions.rewriteRelativeImportExtensions) === true;
198
+ // Avoid collisions across concurrent runs.
199
+ var tempDir = _path.default.join(dest, '.ts-swc-transform-temp', String(process.pid), String(Date.now()));
200
+ var tempConfigPath = _path.default.join(tempDir, 'tsconfig.json');
201
+ var tempConfig = _object_spread({
202
+ compilerOptions: compilerOptions,
203
+ files: rootFiles,
204
+ include: [],
205
+ exclude: []
206
+ }, tsconfig.config.references && {
207
+ references: tsconfig.config.references
208
+ });
209
+ _fs.default.mkdir(tempDir, {
210
+ recursive: true
211
+ }, function(mkdirErr) {
212
+ if (mkdirErr) return callback(mkdirErr);
213
+ _fs.default.writeFile(tempConfigPath, JSON.stringify(tempConfig, null, 2), 'utf8', function(writeErr) {
214
+ if (writeErr) {
215
+ (0, _fsremovecompat.safeRm)(tempDir, {
216
+ recursive: true,
217
+ force: true
218
+ }, function() {
219
+ return callback(writeErr);
220
+ });
221
+ return;
222
+ }
223
+ var args = [
224
+ '--project',
225
+ tempConfigPath,
226
+ '--listEmittedFiles',
227
+ '--pretty',
228
+ 'false'
229
+ ];
230
+ runTsgoThenTsc(args, function(runErr, res) {
231
+ if (runErr || res.status !== 0) {
232
+ var _ref;
233
+ var msg = "TypeScript compiler failed (status=".concat(res === null || res === void 0 ? void 0 : res.status, ").\n").concat("stderr:\n".concat(String((_ref = res === null || res === void 0 ? void 0 : res.stderr) !== null && _ref !== void 0 ? _ref : '')).slice(0, 20000));
234
+ (0, _fsremovecompat.safeRm)(tempDir, {
235
+ recursive: true,
236
+ force: true
237
+ }, function() {
238
+ return callback(runErr !== null && runErr !== void 0 ? runErr : new Error(msg));
239
+ });
240
+ return;
241
+ }
242
+ var emittedFiles = parseEmittedFiles(res, dest);
243
+ if (emittedFiles.length === 0) {
244
+ (0, _fsremovecompat.safeRm)(tempDir, {
245
+ recursive: true,
246
+ force: true
247
+ }, function() {
248
+ return callback(new Error('TypeScript compiler produced no emitted declaration files'));
249
+ });
250
+ return;
251
+ }
252
+ var postQueue = new _queuecb.default();
253
+ if (rewrite) {
254
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
255
+ try {
256
+ var _loop = function() {
257
+ var file = _step.value;
258
+ postQueue.defer(function(cb) {
259
+ _fs.default.readFile(file, 'utf8', function(readErr, content) {
260
+ if (readErr) return cb();
261
+ var updated = (0, _rewriteExtensionsts.rewriteExtensions)(content);
262
+ updated === content ? cb() : _fs.default.writeFile(file, updated, 'utf8', cb);
140
263
  });
141
- } else {
142
- cb();
264
+ });
265
+ };
266
+ for(var _iterator = emittedFiles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
267
+ } catch (err) {
268
+ _didIteratorError = true;
269
+ _iteratorError = err;
270
+ } finally{
271
+ try {
272
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
273
+ _iterator.return();
143
274
  }
144
- });
145
- });
275
+ } finally{
276
+ if (_didIteratorError) {
277
+ throw _iteratorError;
278
+ }
279
+ }
280
+ }
146
281
  }
147
- }
282
+ postQueue.await(function() {
283
+ (0, _fsremovecompat.safeRm)(tempDir, {
284
+ recursive: true,
285
+ force: true
286
+ }, function(rmErr) {
287
+ return callback(rmErr || null, emittedFiles);
288
+ });
289
+ });
290
+ });
148
291
  });
149
- }
150
- postQueue.await(function() {
151
- return callback(null, res.emittedFiles);
152
292
  });
153
293
  });
154
294
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/workers/transformTypes.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport Module from 'module';\nimport os from 'os';\nimport Queue from 'queue-cb';\n\nconst concurrency = Math.min(64, Math.max(8, (os.cpus()?.length ?? 4) * 8));\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nimport { stringEndsWith } from '../compat.ts';\nimport { typeFileRegEx } from '../constants.ts';\nimport createMatcher from '../createMatcher.ts';\nimport { rewriteExtensions } from '../lib/rewriteExtensions.ts';\n\nimport type { ConfigOptions, TransformTypesCallback } from '../types.ts';\n\nexport default function transformTypesWorker(src: string, dest: string, options: ConfigOptions, callback: TransformTypesCallback) {\n const tsconfig = options.tsconfig;\n const matcher = createMatcher(tsconfig);\n const ts = _require('typescript');\n\n const entries = [];\n const iterator = new Iterator(src);\n iterator.forEach(\n (entry: Entry): void => {\n if (!entry.stats.isFile()) return;\n if (entry.basename[0] === '.') return;\n if (typeFileRegEx.test(entry.basename)) return;\n if (!matcher(entry.fullPath)) return;\n entries.push(entry);\n },\n { concurrency },\n (err) => {\n if (err) return callback(err);\n\n // Step 2: TypeScript emit (inherently sync - cannot change)\n const compilerOptions = ts.convertCompilerOptionsFromJson(tsconfig.config.compilerOptions, '');\n const config = {\n fileNames: entries.map((entry) => entry.fullPath),\n options: {\n ...compilerOptions.options,\n outDir: dest,\n noEmit: false,\n allowJs: true,\n declaration: true,\n emitDeclarationOnly: true,\n listEmittedFiles: true,\n },\n projectReferences: tsconfig.config.references,\n };\n const { fileNames, options, projectReferences } = config;\n const host = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, ts.sys);\n const programOptions = {\n rootNames: fileNames,\n options,\n projectReferences,\n host,\n configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics({ fileNames, options }),\n };\n const program = ts.createProgram(programOptions);\n const res = program.emit();\n\n // Step 3: Post-process emitted files (async)\n const postQueue = new Queue();\n\n if (res.emittedFiles) {\n res.emittedFiles.forEach((file) => {\n if (compilerOptions.options.rewriteRelativeImportExtensions) {\n if (stringEndsWith(file, '.d.ts') || stringEndsWith(file, '.d.cts') || stringEndsWith(file, '.d.mts')) {\n postQueue.defer((cb) => {\n fs.readFile(file, 'utf8', (readErr, content) => {\n if (readErr) return cb();\n const updated = rewriteExtensions(content);\n if (updated !== content) {\n fs.writeFile(file, updated, 'utf8', () => cb());\n } else {\n cb();\n }\n });\n });\n }\n }\n });\n }\n\n postQueue.await(() => callback(null, res.emittedFiles));\n }\n );\n}\n"],"names":["transformTypesWorker","os","concurrency","Math","min","max","cpus","length","_require","require","Module","createRequire","src","dest","options","callback","tsconfig","matcher","createMatcher","ts","entries","iterator","Iterator","forEach","entry","stats","isFile","basename","typeFileRegEx","test","fullPath","push","err","compilerOptions","convertCompilerOptionsFromJson","config","fileNames","map","outDir","noEmit","allowJs","declaration","emitDeclarationOnly","listEmittedFiles","projectReferences","references","host","createCompilerHostWorker","undefined","sys","programOptions","rootNames","configFileParsingDiagnostics","getConfigFileParsingDiagnostics","program","createProgram","res","emit","postQueue","Queue","emittedFiles","file","rewriteRelativeImportExtensions","stringEndsWith","defer","cb","fs","readFile","readErr","content","updated","rewriteExtensions","writeFile","await"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/workers/transformTypes.ts"],"sourcesContent":["import spawn, { type SpawnCallback, type SpawnResult } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport { safeRm } from 'fs-remove-compat';\nimport os from 'os';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\n\nconst concurrency = Math.min(64, Math.max(8, (os.cpus()?.length ?? 4) * 8));\n\nconst tscPath = resolveBin('typescript', 'tsc');\nlet tsgoPath: string | null = null;\ntry {\n tsgoPath = resolveBin('@typescript/native-preview', 'tsgo');\n} catch {\n tsgoPath = null;\n}\n\nimport { typeFileRegEx } from '../constants.ts';\nimport createMatcher from '../createMatcher.ts';\nimport { rewriteExtensions } from '../lib/rewriteExtensions.ts';\n\nimport type { ConfigOptions, TransformTypesCallback } from '../types.ts';\n\n/* ---------------- root file filtering ---------------- */\n\nfunction isAllowedRootFile(basename: string): boolean {\n return (\n basename.endsWith('.d.ts') ||\n basename.endsWith('.d.mts') ||\n basename.endsWith('.d.cts') ||\n basename.endsWith('.ts') ||\n basename.endsWith('.tsx') ||\n basename.endsWith('.mts') ||\n basename.endsWith('.cts') ||\n basename.endsWith('.js') ||\n basename.endsWith('.jsx') ||\n basename.endsWith('.mjs') ||\n basename.endsWith('.cjs')\n );\n}\n\n/* ---------------- compiler execution ---------------- */\n\nfunction runCompiler(cmdPath: string, args: string[], cb: SpawnCallback): void {\n spawn(process.execPath, [cmdPath, ...args], { encoding: 'utf8' }, cb);\n}\n\nfunction runTsgoThenTsc(args: string[], cb: SpawnCallback): void {\n if (tsgoPath) {\n runCompiler(tsgoPath, args, (err, res) => {\n // Prefer status code over \"err\" for deciding success/fallback\n if (!err && res.status === 0) return cb(null, res);\n runCompiler(tscPath, args, cb);\n });\n } else {\n runCompiler(tscPath, args, cb);\n }\n}\n\n/* ---------------- emitted file parsing ---------------- */\n\nfunction parseEmittedFiles(res: SpawnResult, dest: string): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const lines = `${res.stdout}\\n${res.stderr}`.split(/\\r?\\n/);\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n\n if (/^TSFILE:\\s+/i.test(line)) line = line.replace(/^TSFILE:\\s+/i, '').trim();\n\n if (!path.isAbsolute(line)) continue;\n if (!(line.endsWith('.d.ts') || line.endsWith('.d.mts') || line.endsWith('.d.cts'))) continue;\n\n // Optional safety: only accept outputs under dest\n const rel = path.relative(dest, line);\n if (rel.startsWith('..') || path.isAbsolute(rel)) continue;\n\n if (!seen.has(line)) {\n seen.add(line);\n out.push(line);\n }\n }\n\n return out;\n}\n\nexport default function transformTypesWorker(src: string, dest: string, options: ConfigOptions, callback: TransformTypesCallback) {\n const tsconfig = options.tsconfig;\n const matcher = createMatcher(tsconfig);\n\n const rootFiles: string[] = [];\n const iterator = new Iterator(src);\n\n iterator.forEach(\n (entry: Entry): void => {\n if (!entry.stats.isFile()) return;\n if (entry.basename[0] === '.') return;\n if (typeFileRegEx.test(entry.basename)) return;\n if (!isAllowedRootFile(entry.basename)) return;\n if (!matcher(entry.fullPath)) return;\n\n rootFiles.push(entry.fullPath);\n },\n { concurrency },\n (err) => {\n if (err) return callback(err);\n if (rootFiles.length === 0) return callback(null, []);\n\n const compilerOptions = {\n ...tsconfig.config.compilerOptions,\n outDir: dest,\n noEmit: false,\n allowJs: true,\n declaration: true,\n emitDeclarationOnly: true,\n };\n\n const rewrite = tsconfig.config.compilerOptions?.rewriteRelativeImportExtensions === true;\n\n // Avoid collisions across concurrent runs.\n const tempDir = path.join(dest, '.ts-swc-transform-temp', String(process.pid), String(Date.now()));\n const tempConfigPath = path.join(tempDir, 'tsconfig.json');\n\n const tempConfig = {\n compilerOptions,\n files: rootFiles,\n include: [],\n exclude: [],\n ...(tsconfig.config.references && { references: tsconfig.config.references }),\n };\n\n fs.mkdir(tempDir, { recursive: true }, (mkdirErr) => {\n if (mkdirErr) return callback(mkdirErr);\n\n fs.writeFile(tempConfigPath, JSON.stringify(tempConfig, null, 2), 'utf8', (writeErr) => {\n if (writeErr) {\n safeRm(tempDir, { recursive: true, force: true }, () => callback(writeErr));\n return;\n }\n\n const args = ['--project', tempConfigPath, '--listEmittedFiles', '--pretty', 'false'];\n\n runTsgoThenTsc(args, (runErr, res) => {\n if (runErr || res.status !== 0) {\n const msg = `TypeScript compiler failed (status=${res?.status}).\\n${`stderr:\\n${String(res?.stderr ?? '')}`.slice(0, 20_000)}`;\n safeRm(tempDir, { recursive: true, force: true }, () => callback(runErr ?? new Error(msg)));\n return;\n }\n\n const emittedFiles = parseEmittedFiles(res, dest);\n if (emittedFiles.length === 0) {\n safeRm(tempDir, { recursive: true, force: true }, () => callback(new Error('TypeScript compiler produced no emitted declaration files')));\n return;\n }\n\n const postQueue = new Queue();\n\n if (rewrite) {\n for (const file of emittedFiles) {\n postQueue.defer((cb) => {\n fs.readFile(file, 'utf8', (readErr, content) => {\n if (readErr) return cb();\n const updated = rewriteExtensions(content);\n updated === content ? cb() : fs.writeFile(file, updated, 'utf8', cb);\n });\n });\n }\n }\n\n postQueue.await(() => {\n safeRm(tempDir, { recursive: true, force: true }, (rmErr) => callback(rmErr || null, emittedFiles));\n });\n });\n });\n });\n }\n );\n}\n"],"names":["transformTypesWorker","os","concurrency","Math","min","max","cpus","length","tscPath","resolveBin","tsgoPath","isAllowedRootFile","basename","endsWith","runCompiler","cmdPath","args","cb","spawn","process","execPath","encoding","runTsgoThenTsc","err","res","status","parseEmittedFiles","dest","out","seen","Set","lines","stdout","stderr","split","line","trim","test","replace","path","isAbsolute","rel","relative","startsWith","has","add","push","src","options","callback","tsconfig","matcher","createMatcher","rootFiles","iterator","Iterator","forEach","entry","stats","isFile","typeFileRegEx","fullPath","compilerOptions","config","outDir","noEmit","allowJs","declaration","emitDeclarationOnly","rewrite","rewriteRelativeImportExtensions","tempDir","join","String","pid","Date","now","tempConfigPath","tempConfig","files","include","exclude","references","fs","mkdir","recursive","mkdirErr","writeFile","JSON","stringify","writeErr","safeRm","force","runErr","msg","slice","Error","emittedFiles","postQueue","Queue","file","defer","readFile","readErr","content","updated","rewriteExtensions","await","rmErr"],"mappings":"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"}
@@ -1,82 +1,162 @@
1
1
  var _ref;
2
2
  var _os_cpus;
3
+ import spawn from 'cross-spawn-cb';
3
4
  import fs from 'fs';
4
5
  import Iterator from 'fs-iterator';
5
- import Module from 'module';
6
+ import { safeRm } from 'fs-remove-compat';
6
7
  import os from 'os';
8
+ import path from 'path';
7
9
  import Queue from 'queue-cb';
10
+ import resolveBin from 'resolve-bin-sync';
8
11
  const concurrency = Math.min(64, Math.max(8, ((_ref = (_os_cpus = os.cpus()) === null || _os_cpus === void 0 ? void 0 : _os_cpus.length) !== null && _ref !== void 0 ? _ref : 4) * 8));
9
- const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
10
- import { stringEndsWith } from '../compat.js';
12
+ const tscPath = resolveBin('typescript', 'tsc');
13
+ let tsgoPath = null;
14
+ try {
15
+ tsgoPath = resolveBin('@typescript/native-preview', 'tsgo');
16
+ } catch {
17
+ tsgoPath = null;
18
+ }
11
19
  import { typeFileRegEx } from '../constants.js';
12
20
  import createMatcher from '../createMatcher.js';
13
21
  import { rewriteExtensions } from '../lib/rewriteExtensions.js';
22
+ /* ---------------- root file filtering ---------------- */ function isAllowedRootFile(basename) {
23
+ return basename.endsWith('.d.ts') || basename.endsWith('.d.mts') || basename.endsWith('.d.cts') || basename.endsWith('.ts') || basename.endsWith('.tsx') || basename.endsWith('.mts') || basename.endsWith('.cts') || basename.endsWith('.js') || basename.endsWith('.jsx') || basename.endsWith('.mjs') || basename.endsWith('.cjs');
24
+ }
25
+ /* ---------------- compiler execution ---------------- */ function runCompiler(cmdPath, args, cb) {
26
+ spawn(process.execPath, [
27
+ cmdPath,
28
+ ...args
29
+ ], {
30
+ encoding: 'utf8'
31
+ }, cb);
32
+ }
33
+ function runTsgoThenTsc(args, cb) {
34
+ if (tsgoPath) {
35
+ runCompiler(tsgoPath, args, (err, res)=>{
36
+ // Prefer status code over "err" for deciding success/fallback
37
+ if (!err && res.status === 0) return cb(null, res);
38
+ runCompiler(tscPath, args, cb);
39
+ });
40
+ } else {
41
+ runCompiler(tscPath, args, cb);
42
+ }
43
+ }
44
+ /* ---------------- emitted file parsing ---------------- */ function parseEmittedFiles(res, dest) {
45
+ const out = [];
46
+ const seen = new Set();
47
+ const lines = `${res.stdout}\n${res.stderr}`.split(/\r?\n/);
48
+ for (let line of lines){
49
+ line = line.trim();
50
+ if (!line) continue;
51
+ if (/^TSFILE:\s+/i.test(line)) line = line.replace(/^TSFILE:\s+/i, '').trim();
52
+ if (!path.isAbsolute(line)) continue;
53
+ if (!(line.endsWith('.d.ts') || line.endsWith('.d.mts') || line.endsWith('.d.cts'))) continue;
54
+ // Optional safety: only accept outputs under dest
55
+ const rel = path.relative(dest, line);
56
+ if (rel.startsWith('..') || path.isAbsolute(rel)) continue;
57
+ if (!seen.has(line)) {
58
+ seen.add(line);
59
+ out.push(line);
60
+ }
61
+ }
62
+ return out;
63
+ }
14
64
  export default function transformTypesWorker(src, dest, options, callback) {
15
65
  const tsconfig = options.tsconfig;
16
66
  const matcher = createMatcher(tsconfig);
17
- const ts = _require('typescript');
18
- const entries = [];
67
+ const rootFiles = [];
19
68
  const iterator = new Iterator(src);
20
69
  iterator.forEach((entry)=>{
21
70
  if (!entry.stats.isFile()) return;
22
71
  if (entry.basename[0] === '.') return;
23
72
  if (typeFileRegEx.test(entry.basename)) return;
73
+ if (!isAllowedRootFile(entry.basename)) return;
24
74
  if (!matcher(entry.fullPath)) return;
25
- entries.push(entry);
75
+ rootFiles.push(entry.fullPath);
26
76
  }, {
27
77
  concurrency
28
78
  }, (err)=>{
79
+ var _tsconfig_config_compilerOptions;
29
80
  if (err) return callback(err);
30
- // Step 2: TypeScript emit (inherently sync - cannot change)
31
- const compilerOptions = ts.convertCompilerOptionsFromJson(tsconfig.config.compilerOptions, '');
32
- const config = {
33
- fileNames: entries.map((entry)=>entry.fullPath),
34
- options: {
35
- ...compilerOptions.options,
36
- outDir: dest,
37
- noEmit: false,
38
- allowJs: true,
39
- declaration: true,
40
- emitDeclarationOnly: true,
41
- listEmittedFiles: true
42
- },
43
- projectReferences: tsconfig.config.references
81
+ if (rootFiles.length === 0) return callback(null, []);
82
+ const compilerOptions = {
83
+ ...tsconfig.config.compilerOptions,
84
+ outDir: dest,
85
+ noEmit: false,
86
+ allowJs: true,
87
+ declaration: true,
88
+ emitDeclarationOnly: true
44
89
  };
45
- const { fileNames, options, projectReferences } = config;
46
- const host = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, ts.sys);
47
- const programOptions = {
48
- rootNames: fileNames,
49
- options,
50
- projectReferences,
51
- host,
52
- configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics({
53
- fileNames,
54
- options
55
- })
90
+ const rewrite = ((_tsconfig_config_compilerOptions = tsconfig.config.compilerOptions) === null || _tsconfig_config_compilerOptions === void 0 ? void 0 : _tsconfig_config_compilerOptions.rewriteRelativeImportExtensions) === true;
91
+ // Avoid collisions across concurrent runs.
92
+ const tempDir = path.join(dest, '.ts-swc-transform-temp', String(process.pid), String(Date.now()));
93
+ const tempConfigPath = path.join(tempDir, 'tsconfig.json');
94
+ const tempConfig = {
95
+ compilerOptions,
96
+ files: rootFiles,
97
+ include: [],
98
+ exclude: [],
99
+ ...tsconfig.config.references && {
100
+ references: tsconfig.config.references
101
+ }
56
102
  };
57
- const program = ts.createProgram(programOptions);
58
- const res = program.emit();
59
- // Step 3: Post-process emitted files (async)
60
- const postQueue = new Queue();
61
- if (res.emittedFiles) {
62
- res.emittedFiles.forEach((file)=>{
63
- if (compilerOptions.options.rewriteRelativeImportExtensions) {
64
- if (stringEndsWith(file, '.d.ts') || stringEndsWith(file, '.d.cts') || stringEndsWith(file, '.d.mts')) {
65
- postQueue.defer((cb)=>{
66
- fs.readFile(file, 'utf8', (readErr, content)=>{
67
- if (readErr) return cb();
68
- const updated = rewriteExtensions(content);
69
- if (updated !== content) {
70
- fs.writeFile(file, updated, 'utf8', ()=>cb());
71
- } else {
72
- cb();
73
- }
103
+ fs.mkdir(tempDir, {
104
+ recursive: true
105
+ }, (mkdirErr)=>{
106
+ if (mkdirErr) return callback(mkdirErr);
107
+ fs.writeFile(tempConfigPath, JSON.stringify(tempConfig, null, 2), 'utf8', (writeErr)=>{
108
+ if (writeErr) {
109
+ safeRm(tempDir, {
110
+ recursive: true,
111
+ force: true
112
+ }, ()=>callback(writeErr));
113
+ return;
114
+ }
115
+ const args = [
116
+ '--project',
117
+ tempConfigPath,
118
+ '--listEmittedFiles',
119
+ '--pretty',
120
+ 'false'
121
+ ];
122
+ runTsgoThenTsc(args, (runErr, res)=>{
123
+ if (runErr || res.status !== 0) {
124
+ var _ref;
125
+ const msg = `TypeScript compiler failed (status=${res === null || res === void 0 ? void 0 : res.status}).\n${`stderr:\n${String((_ref = res === null || res === void 0 ? void 0 : res.stderr) !== null && _ref !== void 0 ? _ref : '')}`.slice(0, 20000)}`;
126
+ safeRm(tempDir, {
127
+ recursive: true,
128
+ force: true
129
+ }, ()=>callback(runErr !== null && runErr !== void 0 ? runErr : new Error(msg)));
130
+ return;
131
+ }
132
+ const emittedFiles = parseEmittedFiles(res, dest);
133
+ if (emittedFiles.length === 0) {
134
+ safeRm(tempDir, {
135
+ recursive: true,
136
+ force: true
137
+ }, ()=>callback(new Error('TypeScript compiler produced no emitted declaration files')));
138
+ return;
139
+ }
140
+ const postQueue = new Queue();
141
+ if (rewrite) {
142
+ for (const file of emittedFiles){
143
+ postQueue.defer((cb)=>{
144
+ fs.readFile(file, 'utf8', (readErr, content)=>{
145
+ if (readErr) return cb();
146
+ const updated = rewriteExtensions(content);
147
+ updated === content ? cb() : fs.writeFile(file, updated, 'utf8', cb);
148
+ });
74
149
  });
75
- });
150
+ }
76
151
  }
77
- }
152
+ postQueue.await(()=>{
153
+ safeRm(tempDir, {
154
+ recursive: true,
155
+ force: true
156
+ }, (rmErr)=>callback(rmErr || null, emittedFiles));
157
+ });
158
+ });
78
159
  });
79
- }
80
- postQueue.await(()=>callback(null, res.emittedFiles));
160
+ });
81
161
  });
82
162
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/workers/transformTypes.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport Module from 'module';\nimport os from 'os';\nimport Queue from 'queue-cb';\n\nconst concurrency = Math.min(64, Math.max(8, (os.cpus()?.length ?? 4) * 8));\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nimport { stringEndsWith } from '../compat.ts';\nimport { typeFileRegEx } from '../constants.ts';\nimport createMatcher from '../createMatcher.ts';\nimport { rewriteExtensions } from '../lib/rewriteExtensions.ts';\n\nimport type { ConfigOptions, TransformTypesCallback } from '../types.ts';\n\nexport default function transformTypesWorker(src: string, dest: string, options: ConfigOptions, callback: TransformTypesCallback) {\n const tsconfig = options.tsconfig;\n const matcher = createMatcher(tsconfig);\n const ts = _require('typescript');\n\n const entries = [];\n const iterator = new Iterator(src);\n iterator.forEach(\n (entry: Entry): void => {\n if (!entry.stats.isFile()) return;\n if (entry.basename[0] === '.') return;\n if (typeFileRegEx.test(entry.basename)) return;\n if (!matcher(entry.fullPath)) return;\n entries.push(entry);\n },\n { concurrency },\n (err) => {\n if (err) return callback(err);\n\n // Step 2: TypeScript emit (inherently sync - cannot change)\n const compilerOptions = ts.convertCompilerOptionsFromJson(tsconfig.config.compilerOptions, '');\n const config = {\n fileNames: entries.map((entry) => entry.fullPath),\n options: {\n ...compilerOptions.options,\n outDir: dest,\n noEmit: false,\n allowJs: true,\n declaration: true,\n emitDeclarationOnly: true,\n listEmittedFiles: true,\n },\n projectReferences: tsconfig.config.references,\n };\n const { fileNames, options, projectReferences } = config;\n const host = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, ts.sys);\n const programOptions = {\n rootNames: fileNames,\n options,\n projectReferences,\n host,\n configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics({ fileNames, options }),\n };\n const program = ts.createProgram(programOptions);\n const res = program.emit();\n\n // Step 3: Post-process emitted files (async)\n const postQueue = new Queue();\n\n if (res.emittedFiles) {\n res.emittedFiles.forEach((file) => {\n if (compilerOptions.options.rewriteRelativeImportExtensions) {\n if (stringEndsWith(file, '.d.ts') || stringEndsWith(file, '.d.cts') || stringEndsWith(file, '.d.mts')) {\n postQueue.defer((cb) => {\n fs.readFile(file, 'utf8', (readErr, content) => {\n if (readErr) return cb();\n const updated = rewriteExtensions(content);\n if (updated !== content) {\n fs.writeFile(file, updated, 'utf8', () => cb());\n } else {\n cb();\n }\n });\n });\n }\n }\n });\n }\n\n postQueue.await(() => callback(null, res.emittedFiles));\n }\n );\n}\n"],"names":["os","fs","Iterator","Module","Queue","concurrency","Math","min","max","cpus","length","_require","require","createRequire","url","stringEndsWith","typeFileRegEx","createMatcher","rewriteExtensions","transformTypesWorker","src","dest","options","callback","tsconfig","matcher","ts","entries","iterator","forEach","entry","stats","isFile","basename","test","fullPath","push","err","compilerOptions","convertCompilerOptionsFromJson","config","fileNames","map","outDir","noEmit","allowJs","declaration","emitDeclarationOnly","listEmittedFiles","projectReferences","references","host","createCompilerHostWorker","undefined","sys","programOptions","rootNames","configFileParsingDiagnostics","getConfigFileParsingDiagnostics","program","createProgram","res","emit","postQueue","emittedFiles","file","rewriteRelativeImportExtensions","defer","cb","readFile","readErr","content","updated","writeFile","await"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/typescript/ts-swc-transform/src/workers/transformTypes.ts"],"sourcesContent":["import spawn, { type SpawnCallback, type SpawnResult } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport { safeRm } from 'fs-remove-compat';\nimport os from 'os';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\n\nconst concurrency = Math.min(64, Math.max(8, (os.cpus()?.length ?? 4) * 8));\n\nconst tscPath = resolveBin('typescript', 'tsc');\nlet tsgoPath: string | null = null;\ntry {\n tsgoPath = resolveBin('@typescript/native-preview', 'tsgo');\n} catch {\n tsgoPath = null;\n}\n\nimport { typeFileRegEx } from '../constants.ts';\nimport createMatcher from '../createMatcher.ts';\nimport { rewriteExtensions } from '../lib/rewriteExtensions.ts';\n\nimport type { ConfigOptions, TransformTypesCallback } from '../types.ts';\n\n/* ---------------- root file filtering ---------------- */\n\nfunction isAllowedRootFile(basename: string): boolean {\n return (\n basename.endsWith('.d.ts') ||\n basename.endsWith('.d.mts') ||\n basename.endsWith('.d.cts') ||\n basename.endsWith('.ts') ||\n basename.endsWith('.tsx') ||\n basename.endsWith('.mts') ||\n basename.endsWith('.cts') ||\n basename.endsWith('.js') ||\n basename.endsWith('.jsx') ||\n basename.endsWith('.mjs') ||\n basename.endsWith('.cjs')\n );\n}\n\n/* ---------------- compiler execution ---------------- */\n\nfunction runCompiler(cmdPath: string, args: string[], cb: SpawnCallback): void {\n spawn(process.execPath, [cmdPath, ...args], { encoding: 'utf8' }, cb);\n}\n\nfunction runTsgoThenTsc(args: string[], cb: SpawnCallback): void {\n if (tsgoPath) {\n runCompiler(tsgoPath, args, (err, res) => {\n // Prefer status code over \"err\" for deciding success/fallback\n if (!err && res.status === 0) return cb(null, res);\n runCompiler(tscPath, args, cb);\n });\n } else {\n runCompiler(tscPath, args, cb);\n }\n}\n\n/* ---------------- emitted file parsing ---------------- */\n\nfunction parseEmittedFiles(res: SpawnResult, dest: string): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const lines = `${res.stdout}\\n${res.stderr}`.split(/\\r?\\n/);\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n\n if (/^TSFILE:\\s+/i.test(line)) line = line.replace(/^TSFILE:\\s+/i, '').trim();\n\n if (!path.isAbsolute(line)) continue;\n if (!(line.endsWith('.d.ts') || line.endsWith('.d.mts') || line.endsWith('.d.cts'))) continue;\n\n // Optional safety: only accept outputs under dest\n const rel = path.relative(dest, line);\n if (rel.startsWith('..') || path.isAbsolute(rel)) continue;\n\n if (!seen.has(line)) {\n seen.add(line);\n out.push(line);\n }\n }\n\n return out;\n}\n\nexport default function transformTypesWorker(src: string, dest: string, options: ConfigOptions, callback: TransformTypesCallback) {\n const tsconfig = options.tsconfig;\n const matcher = createMatcher(tsconfig);\n\n const rootFiles: string[] = [];\n const iterator = new Iterator(src);\n\n iterator.forEach(\n (entry: Entry): void => {\n if (!entry.stats.isFile()) return;\n if (entry.basename[0] === '.') return;\n if (typeFileRegEx.test(entry.basename)) return;\n if (!isAllowedRootFile(entry.basename)) return;\n if (!matcher(entry.fullPath)) return;\n\n rootFiles.push(entry.fullPath);\n },\n { concurrency },\n (err) => {\n if (err) return callback(err);\n if (rootFiles.length === 0) return callback(null, []);\n\n const compilerOptions = {\n ...tsconfig.config.compilerOptions,\n outDir: dest,\n noEmit: false,\n allowJs: true,\n declaration: true,\n emitDeclarationOnly: true,\n };\n\n const rewrite = tsconfig.config.compilerOptions?.rewriteRelativeImportExtensions === true;\n\n // Avoid collisions across concurrent runs.\n const tempDir = path.join(dest, '.ts-swc-transform-temp', String(process.pid), String(Date.now()));\n const tempConfigPath = path.join(tempDir, 'tsconfig.json');\n\n const tempConfig = {\n compilerOptions,\n files: rootFiles,\n include: [],\n exclude: [],\n ...(tsconfig.config.references && { references: tsconfig.config.references }),\n };\n\n fs.mkdir(tempDir, { recursive: true }, (mkdirErr) => {\n if (mkdirErr) return callback(mkdirErr);\n\n fs.writeFile(tempConfigPath, JSON.stringify(tempConfig, null, 2), 'utf8', (writeErr) => {\n if (writeErr) {\n safeRm(tempDir, { recursive: true, force: true }, () => callback(writeErr));\n return;\n }\n\n const args = ['--project', tempConfigPath, '--listEmittedFiles', '--pretty', 'false'];\n\n runTsgoThenTsc(args, (runErr, res) => {\n if (runErr || res.status !== 0) {\n const msg = `TypeScript compiler failed (status=${res?.status}).\\n${`stderr:\\n${String(res?.stderr ?? '')}`.slice(0, 20_000)}`;\n safeRm(tempDir, { recursive: true, force: true }, () => callback(runErr ?? new Error(msg)));\n return;\n }\n\n const emittedFiles = parseEmittedFiles(res, dest);\n if (emittedFiles.length === 0) {\n safeRm(tempDir, { recursive: true, force: true }, () => callback(new Error('TypeScript compiler produced no emitted declaration files')));\n return;\n }\n\n const postQueue = new Queue();\n\n if (rewrite) {\n for (const file of emittedFiles) {\n postQueue.defer((cb) => {\n fs.readFile(file, 'utf8', (readErr, content) => {\n if (readErr) return cb();\n const updated = rewriteExtensions(content);\n updated === content ? cb() : fs.writeFile(file, updated, 'utf8', cb);\n });\n });\n }\n }\n\n postQueue.await(() => {\n safeRm(tempDir, { recursive: true, force: true }, (rmErr) => callback(rmErr || null, emittedFiles));\n });\n });\n });\n });\n }\n );\n}\n"],"names":["os","spawn","fs","Iterator","safeRm","path","Queue","resolveBin","concurrency","Math","min","max","cpus","length","tscPath","tsgoPath","typeFileRegEx","createMatcher","rewriteExtensions","isAllowedRootFile","basename","endsWith","runCompiler","cmdPath","args","cb","process","execPath","encoding","runTsgoThenTsc","err","res","status","parseEmittedFiles","dest","out","seen","Set","lines","stdout","stderr","split","line","trim","test","replace","isAbsolute","rel","relative","startsWith","has","add","push","transformTypesWorker","src","options","callback","tsconfig","matcher","rootFiles","iterator","forEach","entry","stats","isFile","fullPath","compilerOptions","config","outDir","noEmit","allowJs","declaration","emitDeclarationOnly","rewrite","rewriteRelativeImportExtensions","tempDir","join","String","pid","Date","now","tempConfigPath","tempConfig","files","include","exclude","references","mkdir","recursive","mkdirErr","writeFile","JSON","stringify","writeErr","force","runErr","msg","slice","Error","emittedFiles","postQueue","file","defer","readFile","readErr","content","updated","await","rmErr"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-swc-transform",
3
- "version": "2.11.3",
3
+ "version": "2.11.4",
4
4
  "description": "Typescript transformers for swc. Supports Node >= 0.8",
5
5
  "keywords": [
6
6
  "matcher",
@@ -45,6 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@swc/core": "^1.15.5",
48
+ "@typescript/native-preview": "^7.0.0-dev.20260108.1",
48
49
  "core-js-pure": "^3.20.0",
49
50
  "exit-compat": "^1.0.0",
50
51
  "fs-iterator": "^7.0.0",
@@ -57,6 +58,7 @@
57
58
  "queue-cb": "^1.0.0",
58
59
  "read-tsconfig-sync": "^1.1.0",
59
60
  "resolve": "^1.3.1",
61
+ "resolve-bin-sync": "^1.0.13",
60
62
  "resolve.exports": "^2.0.3",
61
63
  "test-match": "^1.0.0",
62
64
  "ts-node": "^10.9.0",