@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
171 lines (166 loc) • 7.31 kB
JavaScript
;
var chunk23BVYW67_cjs = require('./chunk-23BVYW67.cjs');
var chunkEG72EGDV_cjs = require('./chunk-EG72EGDV.cjs');
var chunk3ONWID2V_cjs = require('./chunk-3ONWID2V.cjs');
var core = require('@babel/core');
var types = require('@storm-software/config-tools/types');
var isParentPath = require('@stryke/path/is-parent-path');
var joinPaths = require('@stryke/path/join-paths');
var resolve = require('@stryke/path/resolve');
var isFunction = require('@stryke/type-checks/is-function');
var isSetString = require('@stryke/type-checks/is-set-string');
var chalk = require('chalk');
var defu = require('defu');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
async function transform(log, context, source, options = {}) {
try {
const corePath = process.env.STORM_STACK_LOCAL ? joinPaths.joinPaths(context.options.workspaceRoot, "packages/core") : await resolve.resolvePackage("@storm-stack/core");
if (!corePath) {
throw new Error("Could not resolve @storm-stack/core package location.");
}
let sourceFile = source;
if (process.env.STORM_STACK_LOCAL && isParentPath.isParentPath(sourceFile.id, corePath) || options.skipAllTransforms || chunkEG72EGDV_cjs.getString(sourceFile.code).includes("/* @storm-ignore */") || chunkEG72EGDV_cjs.getString(sourceFile.code).includes("/* @storm-disable */")) {
return sourceFile;
}
const babelOptions = {
...context.options.babel,
...options.babel
};
if (!babelOptions || !babelOptions.plugins && !babelOptions.presets || Array.isArray(babelOptions.plugins) && babelOptions.plugins.length === 0 && Array.isArray(babelOptions.presets) && babelOptions.presets.length === 0) {
log(types.LogLevelLabel.WARN, `No Babel plugins or presets configured for ${sourceFile.id}. Skipping Babel transformation.`);
return sourceFile;
}
const plugins = babelOptions.plugins.reduce((ret, plugin) => {
if (!chunk23BVYW67_cjs.isDuplicatePlugin(ret, plugin)) {
if (Array.isArray(plugin) && plugin.length > 0 && plugin[0]) {
if (plugin.length > 2 && plugin[2] && isFunction.isFunction(plugin[2].filter) && // eslint-disable-next-line ts/no-unsafe-call
!plugin[2].filter(sourceFile)) {
log(types.LogLevelLabel.DEBUG, `Skipping filtered Babel plugin ${chalk__default.default.bold.cyanBright(chunk23BVYW67_cjs.getPluginName(plugin) || "unnamed")} for ${sourceFile.id}`);
return ret;
}
ret.push([
isFunction.isFunction(plugin[0]) ? plugin[0](context) : plugin[0],
{
...plugin.length > 1 && plugin[1] ? plugin[1] : {},
options
},
plugin.length > 2 ? plugin[2] : void 0
]);
} else {
ret.push([
isFunction.isFunction(plugin) ? plugin(context) : plugin,
{
options
},
void 0
]);
}
} else {
log(types.LogLevelLabel.INFO, `Skipping duplicate Babel plugin ${chunk23BVYW67_cjs.getPluginName(plugin)} for ${sourceFile.id}`);
}
return ret;
}, []);
const presets = babelOptions.presets.reduce((ret, preset) => {
if (!chunk23BVYW67_cjs.isDuplicatePlugin(ret, preset)) {
if (Array.isArray(preset) && preset.length > 0 && preset[0]) {
if (preset.length > 2 && preset[2] && isFunction.isFunction(preset[2].filter) && // eslint-disable-next-line ts/no-unsafe-call
!preset[2].filter(sourceFile)) {
log(types.LogLevelLabel.INFO, `Skipping filtered Babel preset ${chunk23BVYW67_cjs.getPluginName(preset)} for ${sourceFile.id}`);
return ret;
}
ret.push([
isFunction.isFunction(preset[0]) ? preset[0](context) : preset[0],
{
...preset.length > 1 && preset[1] ? preset[1] : {},
options
},
preset.length > 2 ? preset[2] : void 0
]);
} else {
ret.push([
isFunction.isFunction(preset) ? preset(context) : preset,
{
options
},
void 0
]);
}
} else {
log(types.LogLevelLabel.INFO, `Skipping duplicate Babel preset ${chunk23BVYW67_cjs.getPluginName(preset)} for ${sourceFile.id}`);
}
return ret;
}, []);
for (const plugin of plugins.filter((plugin2) => isFunction.isFunction(plugin2[2]?.onPreTransform))) {
sourceFile = await Promise.resolve(plugin[2].onPreTransform(context, sourceFile));
}
for (const preset of presets.filter((preset2) => isFunction.isFunction(preset2[2]?.onPreTransform))) {
sourceFile = await Promise.resolve(preset[2].onPreTransform(context, sourceFile));
}
log(types.LogLevelLabel.TRACE, `Transforming ${sourceFile.id} with Babel`);
const result = await core.transformAsync(chunkEG72EGDV_cjs.getString(sourceFile.code), defu.defu({
filename: sourceFile.id,
plugins: [
"@babel/plugin-syntax-typescript",
...plugins.map((plugin) => {
return [
plugin[0],
defu.defu(plugin.length > 1 && plugin[1] ? plugin[1] : {}, {
options
}),
plugin[0]?.name
];
})
],
presets: presets.map((preset) => {
return [
preset[0],
defu.defu(preset.length > 1 && preset[1] ? preset[1] : {}, {
options
}),
preset[0]?.name
];
})
}, babelOptions ? {
...babelOptions,
plugins: [],
presets: []
} : {}, {
highlightCode: true,
code: true,
ast: false,
cloneInputAst: false,
comments: true,
sourceType: "module",
configFile: false,
babelrc: false,
envName: context.options.mode,
caller: {
name: "storm-stack"
}
}));
if (!result?.code) {
throw new Error(`BabelPluginStormStack failed to compile ${sourceFile.id}`);
}
log(types.LogLevelLabel.TRACE, `Completed Babel transformations of ${sourceFile.id}`);
sourceFile.code = chunkEG72EGDV_cjs.getMagicString(result.code);
for (const plugin of plugins.filter((plugin2) => isFunction.isFunction(plugin2[2]?.onPostTransform))) {
sourceFile = await Promise.resolve(plugin[2].onPostTransform(context, sourceFile));
}
for (const preset of presets.filter((preset2) => isFunction.isFunction(preset2[2]?.onPostTransform))) {
sourceFile = await Promise.resolve(preset[2].onPostTransform(context, sourceFile));
}
return sourceFile;
} catch (error) {
context.log(types.LogLevelLabel.ERROR, `Error during Babel transformation: ${error?.message ? isSetString.isSetString(error.message) ? error.message.length > 5e3 ? `${error.message.slice(0, 5e3)}... ${error.message.slice(-100)}` : error.message : error.message : "Unknown error"}
${error?.stack ? `
Stack trace:
${error.stack}
` : ""}`);
throw new Error(`Babel transformation failed for ${source.id}`);
}
}
chunk3ONWID2V_cjs.__name(transform, "transform");
exports.transform = transform;
//# sourceMappingURL=chunk-YJTZDESI.cjs.map
//# sourceMappingURL=chunk-YJTZDESI.cjs.map