@ayonli/jsext
Version:
A JavaScript extension package for building strong and modern applications.
95 lines (91 loc) • 3.1 kB
JavaScript
;
var env = require('../env.js');
var path = require('../path.js');
var string = require('../string.js');
var module$1 = require('../module.js');
var module_util = require('../module/util.js');
var path_util = require('../path/util.js');
const moduleCache = new Map();
function sanitizeModuleId(id, strict = false) {
let _id = "";
if (typeof id === "function") {
let str = id.toString();
let offset = "import(".length;
let start = str.lastIndexOf("import(");
if (start === -1) {
offset = "require(".length;
start = str.lastIndexOf("require(");
}
if (start === -1) {
throw new TypeError("the given script is not a dynamic import expression");
}
else {
start += offset;
const end = str.indexOf(")", start);
_id = string.trim(str.slice(start, end), ` '"\'`);
}
}
else {
_id = id;
}
if ((env.isNode || env.isBun) && path_util.isFsPath(_id)) {
if (!/\.[cm]?(js|ts|)x?$/.test(_id)) { // if omitted suffix, add suffix
_id += env.isBun ? ".ts" : ".js";
}
else if (env.isNode) { // replace .ts/.mts/.cts to .js/.mjs/.cjs in Node.js
if (_id.endsWith(".ts")) {
_id = _id.slice(0, -3) + ".js";
}
else if (_id.endsWith(".mts")) {
_id = _id.slice(0, -4) + ".mjs";
}
else if (_id.endsWith(".cts")) { // rare, but should support
_id = _id.slice(0, -4) + ".cjs";
}
else if (_id.endsWith(".tsx") || _id.endsWith(".jsx")) { // rare, but should support
_id = _id.slice(0, -4) + ".js";
}
}
}
if (!path_util.isFsPath(_id) && !strict) {
_id = "./" + _id;
}
return _id;
}
async function resolveModule(modId, baseUrl = undefined) {
let module;
if (env.isNode || env.isBun) {
const path$1 = baseUrl ? path.toFsPath(new URL(modId, baseUrl).href) : modId;
module = await import(path$1);
}
else {
const url = new URL(modId, baseUrl).href;
module = moduleCache.get(url);
if (!module) {
if (env.isDeno) {
module = await import(url);
moduleCache.set(url, module);
}
else {
try {
module = await import(url);
moduleCache.set(url, module);
}
catch (err) {
if (String(err).includes("Failed")) {
const _url = await module_util.getObjectURL(url);
module = await import(_url);
moduleCache.set(url, module);
}
else {
throw err;
}
}
}
}
}
return module$1.interop(module);
}
exports.resolveModule = resolveModule;
exports.sanitizeModuleId = sanitizeModuleId;
//# sourceMappingURL=module.js.map