@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
81 lines (78 loc) • 3.6 kB
JavaScript
import { parseAst } from './chunk-TYQJVA5F.js';
import { __name } from './chunk-IRPJW6HH.js';
import { isFunction } from '@stryke/type-checks/is-function';
import { isObject } from '@stryke/type-checks/is-object';
import { isSetString } from '@stryke/type-checks/is-set-string';
import { isString } from '@stryke/type-checks/is-string';
function findExport(ast, key) {
const type = key === "default" ? "ExportDefaultDeclaration" : "ExportNamedDeclaration";
for (const node of ast.program.body) {
if (node.type === type) {
if (key === "default") {
return node.declaration;
}
if (node.declaration && "declarations" in node.declaration) {
const declaration = node.declaration.declarations[0];
if (declaration && "name" in declaration.id && declaration.id.name === key) {
return declaration.init;
}
}
}
}
}
__name(findExport, "findExport");
function listExports(codeOrAst) {
const ast = isString(codeOrAst) ? parseAst(codeOrAst) : codeOrAst;
return ast.program.body.flatMap((i) => {
if (i.type === "ExportDefaultDeclaration") {
return [
"default"
];
}
if (i.type === "ExportNamedDeclaration" && i.declaration && "declarations" in i.declaration) {
return i.declaration.declarations.map((d) => "name" in d.id ? d.id.name : "");
}
return [];
}).filter(Boolean);
}
__name(listExports, "listExports");
function getPluginName(plugin) {
return isSetString(plugin) ? plugin : Array.isArray(plugin) && plugin.length > 0 ? getPluginName(plugin[0]) : plugin._name || plugin.name ? plugin._name || plugin.name : void 0;
}
__name(getPluginName, "getPluginName");
function isDuplicatePlugin(plugins, plugin) {
return !!(getPluginName(plugin) && plugins.some((existing) => Array.isArray(existing) && getPluginName(existing[0]) === getPluginName(plugin)));
}
__name(isDuplicatePlugin, "isDuplicatePlugin");
function filterPluginByRuntimeId(context, runtimeId) {
return (sourceFile) => !context.vfs.isMatchingRuntimeId(runtimeId, sourceFile.id);
}
__name(filterPluginByRuntimeId, "filterPluginByRuntimeId");
function addPluginFilter(context, pluginOrPlugins, filter, name) {
if (!Array.isArray(pluginOrPlugins) || !pluginOrPlugins.some((plugin) => Array.isArray(plugin)) && pluginOrPlugins.length < 4 && pluginOrPlugins.length > 0 && (isSetString(pluginOrPlugins[0]) || isFunction(pluginOrPlugins[0]) || pluginOrPlugins.length > 1 && isObject(pluginOrPlugins[1]) || pluginOrPlugins.length > 2 && isObject(pluginOrPlugins[2]))) {
return Array.isArray(pluginOrPlugins) ? [
pluginOrPlugins[0],
pluginOrPlugins.length > 1 ? pluginOrPlugins[1] : {},
{
filter: /* @__PURE__ */ __name((sourceFile) => filter(sourceFile) && (pluginOrPlugins.length < 2 || !isFunction(pluginOrPlugins[2]?.filter) || // eslint-disable-next-line ts/no-unsafe-call
pluginOrPlugins[2]?.filter?.(sourceFile)), "filter")
}
] : [
pluginOrPlugins,
{},
{
filter
}
];
}
if (!name) {
throw new Error("No name was provided to `addPluginFilter`, could not find babel plugin without it.");
}
const foundIndex = pluginOrPlugins.findIndex((plugin) => getPluginName(plugin)?.toLowerCase() === name.toLowerCase());
if (foundIndex > -1) {
pluginOrPlugins[foundIndex] = addPluginFilter(context, pluginOrPlugins[foundIndex], filter, name);
}
return pluginOrPlugins;
}
__name(addPluginFilter, "addPluginFilter");
export { addPluginFilter, filterPluginByRuntimeId, findExport, getPluginName, isDuplicatePlugin, listExports };