ts-swc-transform 1.4.0 → 1.4.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/dist/cjs/lib/installBindings.js +2 -2
- package/dist/cjs/lib/installBindings.js.map +1 -1
- package/dist/cjs/transformFile.js +2 -2
- package/dist/cjs/transformFile.js.map +1 -1
- package/dist/esm/lib/installBindings.mjs +1 -1
- package/dist/esm/lib/installBindings.mjs.map +1 -1
- package/dist/esm/transformFile.mjs +1 -1
- package/dist/esm/transformFile.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -13,7 +13,7 @@ var _os = /*#__PURE__*/ _interop_require_default(require("os"));
|
|
|
13
13
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
14
|
var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn"));
|
|
15
15
|
var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb"));
|
|
16
|
-
var
|
|
16
|
+
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
17
17
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
18
18
|
var _resolve = /*#__PURE__*/ _interop_require_default(require("resolve"));
|
|
19
19
|
var _rimraf2 = /*#__PURE__*/ _interop_require_default(require("rimraf2"));
|
|
@@ -110,7 +110,7 @@ function installBindings(callback) {
|
|
|
110
110
|
_path.default.dirname(_path.default.dirname(_path.default.dirname(require.resolve('@swc/core/package.json'))))
|
|
111
111
|
].concat(_to_consumable_array(installParts)));
|
|
112
112
|
var queue = new _queuecb.default(1);
|
|
113
|
-
queue.defer(
|
|
113
|
+
queue.defer(_mkdirpclassic.default.bind(null, tmp));
|
|
114
114
|
queue.defer(_fs.default.writeFile.bind(null, _path.default.join(tmp, 'package.json'), '{}', 'utf8'));
|
|
115
115
|
queue.defer(_crossspawncb.default.bind(null, 'npm', [
|
|
116
116
|
'install',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["installBindings.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport spawn from 'cross-spawn-cb';\nimport mkdirp from 'mkdirp';\nimport Queue from 'queue-cb';\nimport resolve from 'resolve';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\nimport existsSync from './existsSync.js';\n// @ts-ignore\nimport process from './process.cjs';\n\nconst swcDir = path.dirname(path.dirname(resolve.sync('@swc/core/package.json')));\nconst { optionalDependencies } = JSON.parse(fs.readFileSync(path.join(swcDir, 'core', 'package.json'), 'utf8'));\nconst installDir = path.dirname(swcDir);\n\nexport default function installBindings(callback) {\n const depKey = `${process.platform}-${process.arch}`;\n\n const queue = new Queue();\n Object.keys(optionalDependencies)\n .filter((key) => key.indexOf(depKey) >= 0)\n .filter((key) => !existsSync(path.join(installDir, key)))\n .map((name) => {\n queue.defer((callback) => {\n const install = { name, version: optionalDependencies[name] };\n const { NODE_OPTIONS, ...env } = process.env;\n const installString = `${install.name}${install.version ? `@${install.version}` : ''}`;\n const installParts = install.name.split('/');\n callback = once(callback);\n try {\n const tmp = path.join(os.tmpdir(), 'ts-swc-transform', tempSuffix());\n const source = path.join(tmp, 'node_modules', ...installParts);\n const dest = path.join(path.dirname(path.dirname(path.dirname(require.resolve('@swc/core/package.json')))), ...installParts);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, tmp));\n queue.defer(fs.writeFile.bind(null, path.join(tmp, 'package.json'), '{}', 'utf8'));\n queue.defer(spawn.bind(null, 'npm', ['install', installString], { cwd: tmp, env }));\n queue.defer(fs.rename.bind(null, source, dest));\n queue.await((err) => {\n rimraf2(tmp, { disableGlob: true }, () => callback(err));\n });\n } catch (err) {\n return callback(err);\n }\n });\n });\n queue.await(callback);\n}\n"],"names":["installBindings","swcDir","path","dirname","resolve","sync","optionalDependencies","JSON","parse","fs","readFileSync","join","installDir","callback","depKey","process","platform","arch","queue","Queue","Object","keys","filter","key","indexOf","existsSync","map","name","defer","install","version","env","NODE_OPTIONS","installString","installParts","split","once","tmp","os","tmpdir","tempSuffix","source","dest","require","mkdirp","bind","writeFile","spawn","cwd","rename","await","err","rimraf2","disableGlob"],"mappings":";;;;+BAkBA;;;eAAwBA;;;yDAlBT;yDACA;2DACE;iEACA;mEACC;
|
|
1
|
+
{"version":3,"sources":["installBindings.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport spawn from 'cross-spawn-cb';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\nimport resolve from 'resolve';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\nimport existsSync from './existsSync.js';\n// @ts-ignore\nimport process from './process.cjs';\n\nconst swcDir = path.dirname(path.dirname(resolve.sync('@swc/core/package.json')));\nconst { optionalDependencies } = JSON.parse(fs.readFileSync(path.join(swcDir, 'core', 'package.json'), 'utf8'));\nconst installDir = path.dirname(swcDir);\n\nexport default function installBindings(callback) {\n const depKey = `${process.platform}-${process.arch}`;\n\n const queue = new Queue();\n Object.keys(optionalDependencies)\n .filter((key) => key.indexOf(depKey) >= 0)\n .filter((key) => !existsSync(path.join(installDir, key)))\n .map((name) => {\n queue.defer((callback) => {\n const install = { name, version: optionalDependencies[name] };\n const { NODE_OPTIONS, ...env } = process.env;\n const installString = `${install.name}${install.version ? `@${install.version}` : ''}`;\n const installParts = install.name.split('/');\n callback = once(callback);\n try {\n const tmp = path.join(os.tmpdir(), 'ts-swc-transform', tempSuffix());\n const source = path.join(tmp, 'node_modules', ...installParts);\n const dest = path.join(path.dirname(path.dirname(path.dirname(require.resolve('@swc/core/package.json')))), ...installParts);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, tmp));\n queue.defer(fs.writeFile.bind(null, path.join(tmp, 'package.json'), '{}', 'utf8'));\n queue.defer(spawn.bind(null, 'npm', ['install', installString], { cwd: tmp, env }));\n queue.defer(fs.rename.bind(null, source, dest));\n queue.await((err) => {\n rimraf2(tmp, { disableGlob: true }, () => callback(err));\n });\n } catch (err) {\n return callback(err);\n }\n });\n });\n queue.await(callback);\n}\n"],"names":["installBindings","swcDir","path","dirname","resolve","sync","optionalDependencies","JSON","parse","fs","readFileSync","join","installDir","callback","depKey","process","platform","arch","queue","Queue","Object","keys","filter","key","indexOf","existsSync","map","name","defer","install","version","env","NODE_OPTIONS","installString","installParts","split","once","tmp","os","tmpdir","tempSuffix","source","dest","require","mkdirp","bind","writeFile","spawn","cwd","rename","await","err","rimraf2","disableGlob"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
|
19
19
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
20
20
|
var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn"));
|
|
21
21
|
var _gettsconfigcompat = /*#__PURE__*/ _interop_require_default(require("get-tsconfig-compat"));
|
|
22
|
-
var
|
|
22
|
+
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
23
23
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
24
24
|
var _transformSync = /*#__PURE__*/ _interop_require_default(require("./transformSync.js"));
|
|
25
25
|
function _define_property(obj, key, value) {
|
|
@@ -140,7 +140,7 @@ function transformFileCallback(src, dest, type, options, callback) {
|
|
|
140
140
|
output.code += interopClientDefaultExport;
|
|
141
141
|
}
|
|
142
142
|
var destFilePath = _path.default.join(dest, basename.replace(/\.[^/.]+$/, '') + ext);
|
|
143
|
-
(0,
|
|
143
|
+
(0, _mkdirpclassic.default)(_path.default.dirname(destFilePath), function() {
|
|
144
144
|
var queue = new _queuecb.default();
|
|
145
145
|
queue.defer(_fs.default.writeFile.bind(null, destFilePath, output.code, 'utf8'));
|
|
146
146
|
!options.sourceMaps || queue.defer(_fs.default.writeFile.bind(null, "".concat(destFilePath, ".map"), output.map, 'utf8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["transformFile.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport getTS from 'get-tsconfig-compat';\nimport mkdirp from 'mkdirp';\nimport Queue from 'queue-cb';\n\nimport transformSync from './transformSync.js';\n\nconst matchingDeps = '\\\\s*[\\'\"`]([^\\'\"`]+)[\\'\"`]\\\\s*';\nconst matchingName = '\\\\s*(?:[\\\\w${},\\\\s*]+)\\\\s*';\nconst regexCJS = new RegExp(`(?:(?:var|const|let)${matchingName}=\\\\s*)?require\\\\(${matchingDeps}\\\\);?`, 'g');\nconst regexESM = new RegExp(`${regexCJS}|import(?:${matchingName}from\\\\s*)?${matchingDeps};?|export(?:${matchingName}from\\\\s*)?${matchingDeps};?`, 'g');\n\nconst importReplaceMJS = ['.js', '.ts', '.tsx', '.mts', '.mjs'];\nconst importReplaceCJS = ['.cts'];\nconst requireReplaceJS = ['.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'];\n\nfunction makeReplacements(code, regex, extensions, extension) {\n let matches = [];\n let match = regex.exec(code);\n while (match) {\n const dependency = match[1] || match[2] || match[3] || match[4];\n const ext = extensions.find((x) => dependency.slice(-x.length) === x);\n if (ext) matches.push({ ext, match, dependency });\n match = regex.exec(code);\n }\n\n matches = matches.reverse();\n for (const index in matches) {\n const match = matches[index];\n const start = match.match.index + match.match[0].indexOf(match.dependency) + match.dependency.indexOf(match.ext);\n code = code.substring(0, start) + extension + code.substring(start + match.ext.length);\n }\n return code;\n}\n\n// https://github.com/vercel/next.js/blob/20b63e13ab2631d6043277895d373aa31a1b327c/packages/next/taskfile-swc.js#L118-L125\nconst interopClientDefaultExport = \"/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }\";\n\nfunction transformFileCallback(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n if (typeof src !== 'string') throw new Error('transformFile: unexpected source');\n if (typeof dest !== 'string') throw new Error('transformFile: unexpected destination directory');\n if (typeof type !== 'string') throw new Error('transformFile: unexpected type');\n\n fs.readFile(src, 'utf8', (err, contents) => {\n if (err) return callback(err);\n callback = once(callback);\n\n try {\n let tsconfig = options.tsconfig ? options.tsconfig : getTS.getTsconfig(src);\n\n // overrides for cjs\n if (type === 'cjs') {\n tsconfig = { ...tsconfig };\n tsconfig.tsconfig = { ...(tsconfig.config || {}) };\n tsconfig.config.compilerOptions = { ...(tsconfig.config.compilerOptions || {}) };\n tsconfig.config.compilerOptions.module = 'CommonJS';\n tsconfig.config.compilerOptions.target = 'ES5';\n }\n\n const basename = path.basename(src);\n const output = transformSync(contents, basename, tsconfig);\n\n // infer extension and patch .mjs imports\n let ext = path.extname(basename);\n if (type === 'esm') {\n ext = importReplaceMJS.indexOf(ext) >= 0 ? '.mjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceMJS, '.mjs');\n ext = importReplaceCJS.indexOf(ext) >= 0 ? '.cjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceCJS, '.cjs');\n } else {\n ext = requireReplaceJS.indexOf(ext) >= 0 ? '.js' : ext;\n output.code = makeReplacements(output.code, regexCJS, requireReplaceJS, '.js');\n output.code += interopClientDefaultExport;\n }\n const destFilePath = path.join(dest, basename.replace(/\\.[^/.]+$/, '') + ext);\n\n mkdirp(path.dirname(destFilePath), () => {\n const queue = new Queue();\n queue.defer(fs.writeFile.bind(null, destFilePath, output.code, 'utf8'));\n !options.sourceMaps || queue.defer(fs.writeFile.bind(null, `${destFilePath}.map`, output.map, 'utf8'));\n queue.await(() => (err ? callback(err) : callback(null, destFilePath)));\n });\n } catch (err) {\n callback(err);\n }\n });\n}\n\n/**\n * @param {string} src The source directory to traverse.\n * @param {string} dest The output directory to write the file to.\n * @param {string} type The type of transform ('esm' or 'cjs').\n * @param {{sourceMaps: boolean}} options Options to pass to swc.\n * @param {(err: Error | null, destFilePath: string) =>} [callback] Optional callback returing the path to the transformed file. Uses promise if callback not provided.\n * @returns {void | Promise<string>} Optional promise returing the path to the transformed file if callback not provided.\n */\nexport default function transformFile(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return transformFileCallback(src, dest, type, options, callback);\n return new Promise((resolve, reject) => {\n transformFileCallback(src, dest, type, options, function compileCallback(err, result) {\n err ? reject(err) : resolve(result);\n });\n });\n}\n"],"names":["transformFile","matchingDeps","matchingName","regexCJS","RegExp","regexESM","importReplaceMJS","importReplaceCJS","requireReplaceJS","makeReplacements","code","regex","extensions","extension","dependency","match","ext","find","x","slice","length","matches","push","exec","reverse","index","start","indexOf","substring","interopClientDefaultExport","transformFileCallback","src","dest","type","options","callback","Error","fs","readFile","err","contents","once","tsconfig","getTS","getTsconfig","config","compilerOptions","module","target","basename","path","output","transformSync","extname","destFilePath","join","replace","mkdirp","dirname","queue","Queue","defer","writeFile","bind","sourceMaps","map","await","Promise","resolve","reject","compileCallback","result"],"mappings":";;;;+BAgGA;;;;;;;CAOC,GACD;;;eAAwBA;;;yDAxGT;2DACE;iEACA;wEACC;
|
|
1
|
+
{"version":3,"sources":["transformFile.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport getTS from 'get-tsconfig-compat';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\n\nimport transformSync from './transformSync.js';\n\nconst matchingDeps = '\\\\s*[\\'\"`]([^\\'\"`]+)[\\'\"`]\\\\s*';\nconst matchingName = '\\\\s*(?:[\\\\w${},\\\\s*]+)\\\\s*';\nconst regexCJS = new RegExp(`(?:(?:var|const|let)${matchingName}=\\\\s*)?require\\\\(${matchingDeps}\\\\);?`, 'g');\nconst regexESM = new RegExp(`${regexCJS}|import(?:${matchingName}from\\\\s*)?${matchingDeps};?|export(?:${matchingName}from\\\\s*)?${matchingDeps};?`, 'g');\n\nconst importReplaceMJS = ['.js', '.ts', '.tsx', '.mts', '.mjs'];\nconst importReplaceCJS = ['.cts'];\nconst requireReplaceJS = ['.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'];\n\nfunction makeReplacements(code, regex, extensions, extension) {\n let matches = [];\n let match = regex.exec(code);\n while (match) {\n const dependency = match[1] || match[2] || match[3] || match[4];\n const ext = extensions.find((x) => dependency.slice(-x.length) === x);\n if (ext) matches.push({ ext, match, dependency });\n match = regex.exec(code);\n }\n\n matches = matches.reverse();\n for (const index in matches) {\n const match = matches[index];\n const start = match.match.index + match.match[0].indexOf(match.dependency) + match.dependency.indexOf(match.ext);\n code = code.substring(0, start) + extension + code.substring(start + match.ext.length);\n }\n return code;\n}\n\n// https://github.com/vercel/next.js/blob/20b63e13ab2631d6043277895d373aa31a1b327c/packages/next/taskfile-swc.js#L118-L125\nconst interopClientDefaultExport = \"/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }\";\n\nfunction transformFileCallback(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n if (typeof src !== 'string') throw new Error('transformFile: unexpected source');\n if (typeof dest !== 'string') throw new Error('transformFile: unexpected destination directory');\n if (typeof type !== 'string') throw new Error('transformFile: unexpected type');\n\n fs.readFile(src, 'utf8', (err, contents) => {\n if (err) return callback(err);\n callback = once(callback);\n\n try {\n let tsconfig = options.tsconfig ? options.tsconfig : getTS.getTsconfig(src);\n\n // overrides for cjs\n if (type === 'cjs') {\n tsconfig = { ...tsconfig };\n tsconfig.tsconfig = { ...(tsconfig.config || {}) };\n tsconfig.config.compilerOptions = { ...(tsconfig.config.compilerOptions || {}) };\n tsconfig.config.compilerOptions.module = 'CommonJS';\n tsconfig.config.compilerOptions.target = 'ES5';\n }\n\n const basename = path.basename(src);\n const output = transformSync(contents, basename, tsconfig);\n\n // infer extension and patch .mjs imports\n let ext = path.extname(basename);\n if (type === 'esm') {\n ext = importReplaceMJS.indexOf(ext) >= 0 ? '.mjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceMJS, '.mjs');\n ext = importReplaceCJS.indexOf(ext) >= 0 ? '.cjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceCJS, '.cjs');\n } else {\n ext = requireReplaceJS.indexOf(ext) >= 0 ? '.js' : ext;\n output.code = makeReplacements(output.code, regexCJS, requireReplaceJS, '.js');\n output.code += interopClientDefaultExport;\n }\n const destFilePath = path.join(dest, basename.replace(/\\.[^/.]+$/, '') + ext);\n\n mkdirp(path.dirname(destFilePath), () => {\n const queue = new Queue();\n queue.defer(fs.writeFile.bind(null, destFilePath, output.code, 'utf8'));\n !options.sourceMaps || queue.defer(fs.writeFile.bind(null, `${destFilePath}.map`, output.map, 'utf8'));\n queue.await(() => (err ? callback(err) : callback(null, destFilePath)));\n });\n } catch (err) {\n callback(err);\n }\n });\n}\n\n/**\n * @param {string} src The source directory to traverse.\n * @param {string} dest The output directory to write the file to.\n * @param {string} type The type of transform ('esm' or 'cjs').\n * @param {{sourceMaps: boolean}} options Options to pass to swc.\n * @param {(err: Error | null, destFilePath: string) =>} [callback] Optional callback returing the path to the transformed file. Uses promise if callback not provided.\n * @returns {void | Promise<string>} Optional promise returing the path to the transformed file if callback not provided.\n */\nexport default function transformFile(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return transformFileCallback(src, dest, type, options, callback);\n return new Promise((resolve, reject) => {\n transformFileCallback(src, dest, type, options, function compileCallback(err, result) {\n err ? reject(err) : resolve(result);\n });\n });\n}\n"],"names":["transformFile","matchingDeps","matchingName","regexCJS","RegExp","regexESM","importReplaceMJS","importReplaceCJS","requireReplaceJS","makeReplacements","code","regex","extensions","extension","dependency","match","ext","find","x","slice","length","matches","push","exec","reverse","index","start","indexOf","substring","interopClientDefaultExport","transformFileCallback","src","dest","type","options","callback","Error","fs","readFile","err","contents","once","tsconfig","getTS","getTsconfig","config","compilerOptions","module","target","basename","path","output","transformSync","extname","destFilePath","join","replace","mkdirp","dirname","queue","Queue","defer","writeFile","bind","sourceMaps","map","await","Promise","resolve","reject","compileCallback","result"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import os from 'os';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import once from 'call-once-fn';
|
|
5
5
|
import spawn from 'cross-spawn-cb';
|
|
6
|
-
import mkdirp from 'mkdirp';
|
|
6
|
+
import mkdirp from 'mkdirp-classic';
|
|
7
7
|
import Queue from 'queue-cb';
|
|
8
8
|
import resolve from 'resolve';
|
|
9
9
|
import rimraf2 from 'rimraf2';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["installBindings.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport spawn from 'cross-spawn-cb';\nimport mkdirp from 'mkdirp';\nimport Queue from 'queue-cb';\nimport resolve from 'resolve';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\nimport existsSync from './existsSync.js';\n// @ts-ignore\nimport process from './process.cjs';\n\nconst swcDir = path.dirname(path.dirname(resolve.sync('@swc/core/package.json')));\nconst { optionalDependencies } = JSON.parse(fs.readFileSync(path.join(swcDir, 'core', 'package.json'), 'utf8'));\nconst installDir = path.dirname(swcDir);\n\nexport default function installBindings(callback) {\n const depKey = `${process.platform}-${process.arch}`;\n\n const queue = new Queue();\n Object.keys(optionalDependencies)\n .filter((key) => key.indexOf(depKey) >= 0)\n .filter((key) => !existsSync(path.join(installDir, key)))\n .map((name) => {\n queue.defer((callback) => {\n const install = { name, version: optionalDependencies[name] };\n const { NODE_OPTIONS, ...env } = process.env;\n const installString = `${install.name}${install.version ? `@${install.version}` : ''}`;\n const installParts = install.name.split('/');\n callback = once(callback);\n try {\n const tmp = path.join(os.tmpdir(), 'ts-swc-transform', tempSuffix());\n const source = path.join(tmp, 'node_modules', ...installParts);\n const dest = path.join(path.dirname(path.dirname(path.dirname(require.resolve('@swc/core/package.json')))), ...installParts);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, tmp));\n queue.defer(fs.writeFile.bind(null, path.join(tmp, 'package.json'), '{}', 'utf8'));\n queue.defer(spawn.bind(null, 'npm', ['install', installString], { cwd: tmp, env }));\n queue.defer(fs.rename.bind(null, source, dest));\n queue.await((err) => {\n rimraf2(tmp, { disableGlob: true }, () => callback(err));\n });\n } catch (err) {\n return callback(err);\n }\n });\n });\n queue.await(callback);\n}\n"],"names":["fs","os","path","once","spawn","mkdirp","Queue","resolve","rimraf2","tempSuffix","existsSync","process","swcDir","dirname","sync","optionalDependencies","JSON","parse","readFileSync","join","installDir","installBindings","callback","depKey","platform","arch","queue","Object","keys","filter","key","indexOf","map","name","defer","install","version","NODE_OPTIONS","env","installString","installParts","split","tmp","tmpdir","source","dest","require","bind","writeFile","cwd","rename","await","err","disableGlob"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,UAAU,eAAe;AAChC,OAAOC,WAAW,iBAAiB;AACnC,OAAOC,YAAY,
|
|
1
|
+
{"version":3,"sources":["installBindings.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport spawn from 'cross-spawn-cb';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\nimport resolve from 'resolve';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\nimport existsSync from './existsSync.js';\n// @ts-ignore\nimport process from './process.cjs';\n\nconst swcDir = path.dirname(path.dirname(resolve.sync('@swc/core/package.json')));\nconst { optionalDependencies } = JSON.parse(fs.readFileSync(path.join(swcDir, 'core', 'package.json'), 'utf8'));\nconst installDir = path.dirname(swcDir);\n\nexport default function installBindings(callback) {\n const depKey = `${process.platform}-${process.arch}`;\n\n const queue = new Queue();\n Object.keys(optionalDependencies)\n .filter((key) => key.indexOf(depKey) >= 0)\n .filter((key) => !existsSync(path.join(installDir, key)))\n .map((name) => {\n queue.defer((callback) => {\n const install = { name, version: optionalDependencies[name] };\n const { NODE_OPTIONS, ...env } = process.env;\n const installString = `${install.name}${install.version ? `@${install.version}` : ''}`;\n const installParts = install.name.split('/');\n callback = once(callback);\n try {\n const tmp = path.join(os.tmpdir(), 'ts-swc-transform', tempSuffix());\n const source = path.join(tmp, 'node_modules', ...installParts);\n const dest = path.join(path.dirname(path.dirname(path.dirname(require.resolve('@swc/core/package.json')))), ...installParts);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, tmp));\n queue.defer(fs.writeFile.bind(null, path.join(tmp, 'package.json'), '{}', 'utf8'));\n queue.defer(spawn.bind(null, 'npm', ['install', installString], { cwd: tmp, env }));\n queue.defer(fs.rename.bind(null, source, dest));\n queue.await((err) => {\n rimraf2(tmp, { disableGlob: true }, () => callback(err));\n });\n } catch (err) {\n return callback(err);\n }\n });\n });\n queue.await(callback);\n}\n"],"names":["fs","os","path","once","spawn","mkdirp","Queue","resolve","rimraf2","tempSuffix","existsSync","process","swcDir","dirname","sync","optionalDependencies","JSON","parse","readFileSync","join","installDir","installBindings","callback","depKey","platform","arch","queue","Object","keys","filter","key","indexOf","map","name","defer","install","version","NODE_OPTIONS","env","installString","installParts","split","tmp","tmpdir","source","dest","require","bind","writeFile","cwd","rename","await","err","disableGlob"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,UAAU,eAAe;AAChC,OAAOC,WAAW,iBAAiB;AACnC,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,WAAW,WAAW;AAC7B,OAAOC,aAAa,UAAU;AAC9B,OAAOC,aAAa,UAAU;AAC9B,OAAOC,gBAAgB,cAAc;AACrC,OAAOC,gBAAgB,kBAAkB;AACzC,aAAa;AACb,OAAOC,aAAa,gBAAgB;AAEpC,MAAMC,SAASV,KAAKW,OAAO,CAACX,KAAKW,OAAO,CAACN,QAAQO,IAAI,CAAC;AACtD,MAAM,EAAEC,oBAAoB,EAAE,GAAGC,KAAKC,KAAK,CAACjB,GAAGkB,YAAY,CAAChB,KAAKiB,IAAI,CAACP,QAAQ,QAAQ,iBAAiB;AACvG,MAAMQ,aAAalB,KAAKW,OAAO,CAACD;AAEhC,eAAe,SAASS,gBAAgBC,QAAQ;IAC9C,MAAMC,SAAS,GAAGZ,QAAQa,QAAQ,CAAC,CAAC,EAAEb,QAAQc,IAAI,EAAE;IAEpD,MAAMC,QAAQ,IAAIpB;IAClBqB,OAAOC,IAAI,CAACb,sBACTc,MAAM,CAAC,CAACC,MAAQA,IAAIC,OAAO,CAACR,WAAW,GACvCM,MAAM,CAAC,CAACC,MAAQ,CAACpB,WAAWR,KAAKiB,IAAI,CAACC,YAAYU,OAClDE,GAAG,CAAC,CAACC;QACJP,MAAMQ,KAAK,CAAC,CAACZ;YACX,MAAMa,UAAU;gBAAEF;gBAAMG,SAASrB,oBAAoB,CAACkB,KAAK;YAAC;YAC5D,MAAM,EAAEI,YAAY,EAAE,GAAGC,KAAK,GAAG3B,QAAQ2B,GAAG;YAC5C,MAAMC,gBAAgB,GAAGJ,QAAQF,IAAI,GAAGE,QAAQC,OAAO,GAAG,CAAC,CAAC,EAAED,QAAQC,OAAO,EAAE,GAAG,IAAI;YACtF,MAAMI,eAAeL,QAAQF,IAAI,CAACQ,KAAK,CAAC;YACxCnB,WAAWnB,KAAKmB;YAChB,IAAI;gBACF,MAAMoB,MAAMxC,KAAKiB,IAAI,CAAClB,GAAG0C,MAAM,IAAI,oBAAoBlC;gBACvD,MAAMmC,SAAS1C,KAAKiB,IAAI,CAACuB,KAAK,mBAAmBF;gBACjD,MAAMK,OAAO3C,KAAKiB,IAAI,CAACjB,KAAKW,OAAO,CAACX,KAAKW,OAAO,CAACX,KAAKW,OAAO,CAACiC,QAAQvC,OAAO,CAAC,iCAAiCiC;gBAE/G,MAAMd,QAAQ,IAAIpB,MAAM;gBACxBoB,MAAMQ,KAAK,CAAC7B,OAAO0C,IAAI,CAAC,MAAML;gBAC9BhB,MAAMQ,KAAK,CAAClC,GAAGgD,SAAS,CAACD,IAAI,CAAC,MAAM7C,KAAKiB,IAAI,CAACuB,KAAK,iBAAiB,MAAM;gBAC1EhB,MAAMQ,KAAK,CAAC9B,MAAM2C,IAAI,CAAC,MAAM,OAAO;oBAAC;oBAAWR;iBAAc,EAAE;oBAAEU,KAAKP;oBAAKJ;gBAAI;gBAChFZ,MAAMQ,KAAK,CAAClC,GAAGkD,MAAM,CAACH,IAAI,CAAC,MAAMH,QAAQC;gBACzCnB,MAAMyB,KAAK,CAAC,CAACC;oBACX5C,QAAQkC,KAAK;wBAAEW,aAAa;oBAAK,GAAG,IAAM/B,SAAS8B;gBACrD;YACF,EAAE,OAAOA,KAAK;gBACZ,OAAO9B,SAAS8B;YAClB;QACF;IACF;IACF1B,MAAMyB,KAAK,CAAC7B;AACd"}
|
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import once from 'call-once-fn';
|
|
4
4
|
import getTS from 'get-tsconfig-compat';
|
|
5
|
-
import mkdirp from 'mkdirp';
|
|
5
|
+
import mkdirp from 'mkdirp-classic';
|
|
6
6
|
import Queue from 'queue-cb';
|
|
7
7
|
import transformSync from './transformSync.mjs';
|
|
8
8
|
const matchingDeps = '\\s*[\'"`]([^\'"`]+)[\'"`]\\s*';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["transformFile.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport getTS from 'get-tsconfig-compat';\nimport mkdirp from 'mkdirp';\nimport Queue from 'queue-cb';\n\nimport transformSync from './transformSync.js';\n\nconst matchingDeps = '\\\\s*[\\'\"`]([^\\'\"`]+)[\\'\"`]\\\\s*';\nconst matchingName = '\\\\s*(?:[\\\\w${},\\\\s*]+)\\\\s*';\nconst regexCJS = new RegExp(`(?:(?:var|const|let)${matchingName}=\\\\s*)?require\\\\(${matchingDeps}\\\\);?`, 'g');\nconst regexESM = new RegExp(`${regexCJS}|import(?:${matchingName}from\\\\s*)?${matchingDeps};?|export(?:${matchingName}from\\\\s*)?${matchingDeps};?`, 'g');\n\nconst importReplaceMJS = ['.js', '.ts', '.tsx', '.mts', '.mjs'];\nconst importReplaceCJS = ['.cts'];\nconst requireReplaceJS = ['.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'];\n\nfunction makeReplacements(code, regex, extensions, extension) {\n let matches = [];\n let match = regex.exec(code);\n while (match) {\n const dependency = match[1] || match[2] || match[3] || match[4];\n const ext = extensions.find((x) => dependency.slice(-x.length) === x);\n if (ext) matches.push({ ext, match, dependency });\n match = regex.exec(code);\n }\n\n matches = matches.reverse();\n for (const index in matches) {\n const match = matches[index];\n const start = match.match.index + match.match[0].indexOf(match.dependency) + match.dependency.indexOf(match.ext);\n code = code.substring(0, start) + extension + code.substring(start + match.ext.length);\n }\n return code;\n}\n\n// https://github.com/vercel/next.js/blob/20b63e13ab2631d6043277895d373aa31a1b327c/packages/next/taskfile-swc.js#L118-L125\nconst interopClientDefaultExport = \"/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }\";\n\nfunction transformFileCallback(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n if (typeof src !== 'string') throw new Error('transformFile: unexpected source');\n if (typeof dest !== 'string') throw new Error('transformFile: unexpected destination directory');\n if (typeof type !== 'string') throw new Error('transformFile: unexpected type');\n\n fs.readFile(src, 'utf8', (err, contents) => {\n if (err) return callback(err);\n callback = once(callback);\n\n try {\n let tsconfig = options.tsconfig ? options.tsconfig : getTS.getTsconfig(src);\n\n // overrides for cjs\n if (type === 'cjs') {\n tsconfig = { ...tsconfig };\n tsconfig.tsconfig = { ...(tsconfig.config || {}) };\n tsconfig.config.compilerOptions = { ...(tsconfig.config.compilerOptions || {}) };\n tsconfig.config.compilerOptions.module = 'CommonJS';\n tsconfig.config.compilerOptions.target = 'ES5';\n }\n\n const basename = path.basename(src);\n const output = transformSync(contents, basename, tsconfig);\n\n // infer extension and patch .mjs imports\n let ext = path.extname(basename);\n if (type === 'esm') {\n ext = importReplaceMJS.indexOf(ext) >= 0 ? '.mjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceMJS, '.mjs');\n ext = importReplaceCJS.indexOf(ext) >= 0 ? '.cjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceCJS, '.cjs');\n } else {\n ext = requireReplaceJS.indexOf(ext) >= 0 ? '.js' : ext;\n output.code = makeReplacements(output.code, regexCJS, requireReplaceJS, '.js');\n output.code += interopClientDefaultExport;\n }\n const destFilePath = path.join(dest, basename.replace(/\\.[^/.]+$/, '') + ext);\n\n mkdirp(path.dirname(destFilePath), () => {\n const queue = new Queue();\n queue.defer(fs.writeFile.bind(null, destFilePath, output.code, 'utf8'));\n !options.sourceMaps || queue.defer(fs.writeFile.bind(null, `${destFilePath}.map`, output.map, 'utf8'));\n queue.await(() => (err ? callback(err) : callback(null, destFilePath)));\n });\n } catch (err) {\n callback(err);\n }\n });\n}\n\n/**\n * @param {string} src The source directory to traverse.\n * @param {string} dest The output directory to write the file to.\n * @param {string} type The type of transform ('esm' or 'cjs').\n * @param {{sourceMaps: boolean}} options Options to pass to swc.\n * @param {(err: Error | null, destFilePath: string) =>} [callback] Optional callback returing the path to the transformed file. Uses promise if callback not provided.\n * @returns {void | Promise<string>} Optional promise returing the path to the transformed file if callback not provided.\n */\nexport default function transformFile(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return transformFileCallback(src, dest, type, options, callback);\n return new Promise((resolve, reject) => {\n transformFileCallback(src, dest, type, options, function compileCallback(err, result) {\n err ? reject(err) : resolve(result);\n });\n });\n}\n"],"names":["fs","path","once","getTS","mkdirp","Queue","transformSync","matchingDeps","matchingName","regexCJS","RegExp","regexESM","importReplaceMJS","importReplaceCJS","requireReplaceJS","makeReplacements","code","regex","extensions","extension","matches","match","exec","dependency","ext","find","x","slice","length","push","reverse","index","start","indexOf","substring","interopClientDefaultExport","transformFileCallback","src","dest","type","options","callback","Error","readFile","err","contents","tsconfig","getTsconfig","config","compilerOptions","module","target","basename","output","extname","destFilePath","join","replace","dirname","queue","defer","writeFile","bind","sourceMaps","map","await","transformFile","Promise","resolve","reject","compileCallback","result"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,UAAU,eAAe;AAChC,OAAOC,WAAW,sBAAsB;AACxC,OAAOC,YAAY,
|
|
1
|
+
{"version":3,"sources":["transformFile.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport once from 'call-once-fn';\nimport getTS from 'get-tsconfig-compat';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\n\nimport transformSync from './transformSync.js';\n\nconst matchingDeps = '\\\\s*[\\'\"`]([^\\'\"`]+)[\\'\"`]\\\\s*';\nconst matchingName = '\\\\s*(?:[\\\\w${},\\\\s*]+)\\\\s*';\nconst regexCJS = new RegExp(`(?:(?:var|const|let)${matchingName}=\\\\s*)?require\\\\(${matchingDeps}\\\\);?`, 'g');\nconst regexESM = new RegExp(`${regexCJS}|import(?:${matchingName}from\\\\s*)?${matchingDeps};?|export(?:${matchingName}from\\\\s*)?${matchingDeps};?`, 'g');\n\nconst importReplaceMJS = ['.js', '.ts', '.tsx', '.mts', '.mjs'];\nconst importReplaceCJS = ['.cts'];\nconst requireReplaceJS = ['.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'];\n\nfunction makeReplacements(code, regex, extensions, extension) {\n let matches = [];\n let match = regex.exec(code);\n while (match) {\n const dependency = match[1] || match[2] || match[3] || match[4];\n const ext = extensions.find((x) => dependency.slice(-x.length) === x);\n if (ext) matches.push({ ext, match, dependency });\n match = regex.exec(code);\n }\n\n matches = matches.reverse();\n for (const index in matches) {\n const match = matches[index];\n const start = match.match.index + match.match[0].indexOf(match.dependency) + match.dependency.indexOf(match.ext);\n code = code.substring(0, start) + extension + code.substring(start + match.ext.length);\n }\n return code;\n}\n\n// https://github.com/vercel/next.js/blob/20b63e13ab2631d6043277895d373aa31a1b327c/packages/next/taskfile-swc.js#L118-L125\nconst interopClientDefaultExport = \"/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }\";\n\nfunction transformFileCallback(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n if (typeof src !== 'string') throw new Error('transformFile: unexpected source');\n if (typeof dest !== 'string') throw new Error('transformFile: unexpected destination directory');\n if (typeof type !== 'string') throw new Error('transformFile: unexpected type');\n\n fs.readFile(src, 'utf8', (err, contents) => {\n if (err) return callback(err);\n callback = once(callback);\n\n try {\n let tsconfig = options.tsconfig ? options.tsconfig : getTS.getTsconfig(src);\n\n // overrides for cjs\n if (type === 'cjs') {\n tsconfig = { ...tsconfig };\n tsconfig.tsconfig = { ...(tsconfig.config || {}) };\n tsconfig.config.compilerOptions = { ...(tsconfig.config.compilerOptions || {}) };\n tsconfig.config.compilerOptions.module = 'CommonJS';\n tsconfig.config.compilerOptions.target = 'ES5';\n }\n\n const basename = path.basename(src);\n const output = transformSync(contents, basename, tsconfig);\n\n // infer extension and patch .mjs imports\n let ext = path.extname(basename);\n if (type === 'esm') {\n ext = importReplaceMJS.indexOf(ext) >= 0 ? '.mjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceMJS, '.mjs');\n ext = importReplaceCJS.indexOf(ext) >= 0 ? '.cjs' : ext;\n output.code = makeReplacements(output.code, regexESM, importReplaceCJS, '.cjs');\n } else {\n ext = requireReplaceJS.indexOf(ext) >= 0 ? '.js' : ext;\n output.code = makeReplacements(output.code, regexCJS, requireReplaceJS, '.js');\n output.code += interopClientDefaultExport;\n }\n const destFilePath = path.join(dest, basename.replace(/\\.[^/.]+$/, '') + ext);\n\n mkdirp(path.dirname(destFilePath), () => {\n const queue = new Queue();\n queue.defer(fs.writeFile.bind(null, destFilePath, output.code, 'utf8'));\n !options.sourceMaps || queue.defer(fs.writeFile.bind(null, `${destFilePath}.map`, output.map, 'utf8'));\n queue.await(() => (err ? callback(err) : callback(null, destFilePath)));\n });\n } catch (err) {\n callback(err);\n }\n });\n}\n\n/**\n * @param {string} src The source directory to traverse.\n * @param {string} dest The output directory to write the file to.\n * @param {string} type The type of transform ('esm' or 'cjs').\n * @param {{sourceMaps: boolean}} options Options to pass to swc.\n * @param {(err: Error | null, destFilePath: string) =>} [callback] Optional callback returing the path to the transformed file. Uses promise if callback not provided.\n * @returns {void | Promise<string>} Optional promise returing the path to the transformed file if callback not provided.\n */\nexport default function transformFile(src, dest, type, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return transformFileCallback(src, dest, type, options, callback);\n return new Promise((resolve, reject) => {\n transformFileCallback(src, dest, type, options, function compileCallback(err, result) {\n err ? reject(err) : resolve(result);\n });\n });\n}\n"],"names":["fs","path","once","getTS","mkdirp","Queue","transformSync","matchingDeps","matchingName","regexCJS","RegExp","regexESM","importReplaceMJS","importReplaceCJS","requireReplaceJS","makeReplacements","code","regex","extensions","extension","matches","match","exec","dependency","ext","find","x","slice","length","push","reverse","index","start","indexOf","substring","interopClientDefaultExport","transformFileCallback","src","dest","type","options","callback","Error","readFile","err","contents","tsconfig","getTsconfig","config","compilerOptions","module","target","basename","output","extname","destFilePath","join","replace","dirname","queue","defer","writeFile","bind","sourceMaps","map","await","transformFile","Promise","resolve","reject","compileCallback","result"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-swc-transform",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Typescript transformers for swc. Supports Node >= 0.8",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"matcher",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"is-absolute": "^1.0.0",
|
|
59
59
|
"lazy-cache": "^2.0.2",
|
|
60
60
|
"minimatch": "^3.1.2",
|
|
61
|
-
"mkdirp": "^0.5.
|
|
62
|
-
"node-version-call": "^1.
|
|
61
|
+
"mkdirp-classic": "^0.5.3",
|
|
62
|
+
"node-version-call": "^1.2.0",
|
|
63
63
|
"path-posix": "^1.0.0",
|
|
64
64
|
"queue-cb": "^1.4.4",
|
|
65
65
|
"resolve": "^1.22.10",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@biomejs/biome": "^1.9.4",
|
|
74
74
|
"@swc/core": "^1.9.3",
|
|
75
75
|
"@types/mocha": "^10.0.10",
|
|
76
|
-
"@types/node": "^
|
|
76
|
+
"@types/node": "^14.18.63",
|
|
77
77
|
"core-js": "^3.39.0",
|
|
78
78
|
"cr": "^0.1.0",
|
|
79
79
|
"react": "^19.0.0",
|