@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
133 lines (128 loc) • 4.12 kB
JavaScript
;
var chunkSQHGN4CZ_cjs = require('./chunk-SQHGN4CZ.cjs');
var chunk3ONWID2V_cjs = require('./chunk-3ONWID2V.cjs');
var helperPluginUtils = require('@babel/helper-plugin-utils');
var t = require('@babel/types');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var t__namespace = /*#__PURE__*/_interopNamespace(t);
function resolveModulePath(nodePath, state) {
if (!t__namespace.isStringLiteral(nodePath.node)) {
return;
}
const sourcePath = nodePath.node.value;
const resolvedPath = state.context?.vfs.resolvePath(sourcePath);
if (resolvedPath) {
nodePath.replaceWith(t__namespace.stringLiteral(
// Remove the file extension if it exists
resolvedPath.replace(/\.(?:ts|mts|cts)x?$/, "")
));
}
}
chunk3ONWID2V_cjs.__name(resolveModulePath, "resolveModulePath");
var TRANSFORM_FUNCTIONS = [
"require",
"require.resolve",
"System.import",
// Jest methods
"jest.genMockFromModule",
"jest.mock",
"jest.unmock",
"jest.doMock",
// eslint-disable-next-line @cspell/spellchecker
"jest.dontMock",
"jest.setMock",
"jest.requireActual",
"jest.requireMock",
// Older Jest methods
"require.requireActual",
"require.requireMock"
];
function matchesPattern(state, calleePath, pattern) {
const { node } = calleePath;
if (t__namespace.isMemberExpression(node)) {
return calleePath.matchesPattern(pattern);
}
if (!t__namespace.isIdentifier(node) || pattern.includes(".")) {
return false;
}
const name = pattern.split(".")[0];
return node.name === name;
}
chunk3ONWID2V_cjs.__name(matchesPattern, "matchesPattern");
var importVisitors = {
CallExpression: /* @__PURE__ */ chunk3ONWID2V_cjs.__name((nodePath, state) => {
if (state.moduleResolverVisited.has(nodePath)) {
return;
}
const calleePath = nodePath.get("callee");
if (TRANSFORM_FUNCTIONS.some((pattern) => matchesPattern(state, calleePath, pattern)) || chunkSQHGN4CZ_cjs.isImportCall(nodePath)) {
state.moduleResolverVisited.add(nodePath);
resolveModulePath(nodePath.get("arguments.0"), state);
}
}, "CallExpression"),
// eslint-disable-next-line ts/naming-convention
"ImportDeclaration|ExportDeclaration|ExportAllDeclaration": /* @__PURE__ */ chunk3ONWID2V_cjs.__name((nodePath, state) => {
if (state.moduleResolverVisited.has(nodePath)) {
return;
}
state.moduleResolverVisited.add(nodePath);
resolveModulePath(nodePath.get("source"), state);
}, "ImportDeclaration|ExportDeclaration|ExportAllDeclaration")
};
function ModuleResolverPlugin(context) {
return helperPluginUtils.declare(/* @__PURE__ */ chunk3ONWID2V_cjs.__name(function builder(api) {
let moduleResolverVisited = /* @__PURE__ */ new Set();
return {
name: "storm-stack:module-resolver",
manipulateOptions(opts) {
opts.filename ??= "unknown";
},
pre() {
moduleResolverVisited = /* @__PURE__ */ new Set();
},
visitor: {
Program: {
enter(programPath, state) {
programPath.traverse(importVisitors, {
...state,
context,
moduleResolverVisited,
api
});
},
exit(programPath, state) {
programPath.traverse(importVisitors, {
...state,
context,
moduleResolverVisited,
api
});
}
}
},
post() {
moduleResolverVisited.clear();
}
};
}, "builder"));
}
chunk3ONWID2V_cjs.__name(ModuleResolverPlugin, "ModuleResolverPlugin");
exports.ModuleResolverPlugin = ModuleResolverPlugin;
//# sourceMappingURL=chunk-ZC2JNV4B.cjs.map
//# sourceMappingURL=chunk-ZC2JNV4B.cjs.map