solid-register
Version:
integrated package to run solid browser code in node
62 lines (61 loc) • 2.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = exports.solidAliasing = exports.filenameAliasing = void 0;
const read_config_1 = require("./read-config");
const path_1 = require("path");
const s = path_1.sep === "/" ? path_1.sep : `${path_1.sep}${path_1.sep}`;
const solidConditionAliases = {
server: {
[`solid-js${s}dist${s}(solid|dev)`]: `solid-js${s}dist${s}server`,
[`solid-js${s}web${s}dist${s}(web|dev)`]: `solid-js${s}web${s}dist${s}server`,
[`solid-js${s}store${s}dist${s}(store|dev)`]: `solid-js${s}store${s}dist${s}server`,
},
dev: {
[`solid-js${s}dist${s}(server|solid)`]: `solid-js${s}dist${s}dev`,
[`solid-js${s}web${s}dist${s}(server|web)`]: `solid-js${s}web${s}dist${s}dev`,
[`solid-js${s}store${s}dist${s}(server|store)`]: `solid-js${s}store${s}dist${s}dev`,
},
browser: {
[`solid-js${s}dist${s}(server|dev)`]: `solid-js${s}dist${s}solid`,
[`solid-js${s}web${s}dist${s}(server|dev)`]: `solid-js${s}web${s}dist${s}web`,
[`solid-js${s}store${s}dist${s}(server|dev)`]: `solid-js${s}store${s}dist${s}store`,
},
};
const createFilenameAliasing = (aliases) => {
const regexes = Object.keys(aliases).reduce((regexes, match) => {
regexes[match] = new RegExp(match);
return regexes;
}, {});
return (filename) => Object.entries(aliases).reduce((name, [match, replace]) => !name && regexes[match].test(filename)
? filename.replace(regexes[match], replace)
: name, "") || filename;
};
const aliases = read_config_1.config.aliases?.filenames || {};
const solidAliases = (!read_config_1.usesConditions && solidConditionAliases[read_config_1.config.aliases?.solid ?? "dev"]) ||
{};
exports.filenameAliasing = createFilenameAliasing(aliases);
exports.solidAliasing = solidAliases
? createFilenameAliasing(solidAliases)
: (filename) => filename;
const extensions = read_config_1.config.aliases?.extensions || [".js", ".jsx", ".ts", ".tsx"];
const init = () => {
if (!Object.keys(aliases).length) {
return;
}
const Module = (module.constructor.length > 1 && module.constructor) ||
require("module");
const originalResolver = Module._resolveFilename.bind(Module);
Module._resolveFilename = (filename, parentModule, isMain, options) => {
if (extensions.some((extension) => parentModule.id.endsWith(extension))) {
let alias = (0, exports.filenameAliasing)(filename);
if (alias !== filename) {
if (alias.startsWith(path_1.sep) && !alias.startsWith(read_config_1.projectPath)) {
alias = (0, path_1.join)(read_config_1.projectPath, alias);
}
return originalResolver(alias, parentModule, isMain, options);
}
}
return originalResolver(filename, parentModule, isMain, options);
};
};
exports.init = init;