Packages
moon
2.90.1
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
assets/node_modules/sucrase/ts-node-plugin/index.js
const {transform} = require("../dist");
// Enum constants taken from the TypeScript codebase.
const ModuleKindCommonJS = 1;
const JsxEmitReactJSX = 4;
const JsxEmitReactJSXDev = 5;
/**
* ts-node transpiler plugin
*
* This plugin hooks into ts-node so that Sucrase can handle all TS-to-JS
* conversion while ts-node handles the ESM loader, require hook, REPL
* integration, etc. ts-node automatically discovers the relevant tsconfig file,
* so the main logic in this integration is translating tsconfig options to the
* corresponding Sucrase options.
*
* Any tsconfig options relevant to Sucrase are translated, but some config
* options outside the scope of Sucrase are ignored. For example, we assume the
* isolatedModules option, and we ignore target because Sucrase doesn't provide
* JS syntax downleveling (at least not in a way that is useful for Node).
*
* One notable caveat is that importsNotUsedAsValues and preserveValueImports
* are ignored right now, and Sucrase uses TypeScript's default behavior of
* eliding imports only used as types. This usually makes no difference when
* running the code, so for now we ignore these options without a warning.
*/
function create(createOptions) {
const {nodeModuleEmitKind} = createOptions;
const {module, jsx, jsxFactory, jsxFragmentFactory, jsxImportSource, esModuleInterop} =
createOptions.service.config.options;
return {
transpile(input, transpileOptions) {
const {fileName} = transpileOptions;
const transforms = [];
// Detect JS rather than TS so we bias toward including the typescript
// transform, since almost always it doesn't hurt to include.
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,
preserveDynamicImport: nodeModuleEmitKind === "nodecjs",
injectCreateRequireForImportRequire: nodeModuleEmitKind === "nodeesm",
enableLegacyTypeScriptModuleInterop: !esModuleInterop,
sourceMapOptions: {compiledFilename: fileName},
filePath: fileName,
});
return {
outputText: code,
sourceMapText: JSON.stringify(sourceMap),
};
},
};
}
exports.create = create;