|
const {transform} = require("../dist"); |
|
|
|
|
|
const ModuleKindCommonJS = 1; |
|
|
|
const JsxEmitReactJSX = 4; |
|
const JsxEmitReactJSXDev = 5; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function create(createOptions) { |
|
const {nodeModuleEmitKind} = createOptions; |
|
const { |
|
module, |
|
jsx, |
|
jsxFactory, |
|
jsxFragmentFactory, |
|
jsxImportSource, |
|
esModuleInterop, |
|
verbatimModuleSyntax, |
|
} = createOptions.service.config.options; |
|
|
|
return { |
|
transpile(input, transpileOptions) { |
|
const {fileName} = transpileOptions; |
|
const transforms = []; |
|
|
|
|
|
const isJS = |
|
fileName.endsWith(".js") || |
|
fileName.endsWith(".jsx") || |
|
fileName.endsWith(".mjs") || |
|
fileName.endsWith(".cjs"); |
|
if (!isJS) { |
|
transforms.push("typescript"); |
|
} |
|
if (module === ModuleKindCommonJS || nodeModuleEmitKind === "nodecjs") { |
|
transforms.push("imports"); |
|
} |
|
if (fileName.endsWith(".tsx") || fileName.endsWith(".jsx")) { |
|
transforms.push("jsx"); |
|
} |
|
|
|
const {code, sourceMap} = transform(input, { |
|
transforms, |
|
disableESTransforms: true, |
|
jsxRuntime: jsx === JsxEmitReactJSX || jsx === JsxEmitReactJSXDev ? "automatic" : "classic", |
|
production: jsx === JsxEmitReactJSX, |
|
jsxImportSource, |
|
jsxPragma: jsxFactory, |
|
jsxFragmentPragma: jsxFragmentFactory, |
|
keepUnusedImports: verbatimModuleSyntax, |
|
preserveDynamicImport: nodeModuleEmitKind === "nodecjs", |
|
injectCreateRequireForImportRequire: nodeModuleEmitKind === "nodeesm", |
|
enableLegacyTypeScriptModuleInterop: !esModuleInterop, |
|
sourceMapOptions: {compiledFilename: fileName}, |
|
filePath: fileName, |
|
}); |
|
return { |
|
outputText: code, |
|
sourceMapText: JSON.stringify(sourceMap), |
|
}; |
|
}, |
|
}; |
|
} |
|
|
|
exports.create = create; |
|
|