UNPKG

@ayonli/jsext

Version:

A JavaScript extension package for building strong and modern applications.

95 lines (91 loc) 3.1 kB
'use strict'; 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