rolldown-require
Version:
bundle and require a file using rolldown!
1,117 lines (1,084 loc) • 39.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
}) : x)(function(x) {
if (typeof require !== "undefined") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
// ../../node_modules/.pnpm/tsup@8.5.0_@swc+core@1.13.4_jiti@2.5.1_postcss@8.5.6_tsx@4.20.5_typescript@5.9.2_yaml@2.8.1/node_modules/tsup/assets/cjs_shims.js
var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
// src/index.ts
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
var _promises = require('fs/promises'); var _promises2 = _interopRequireDefault(_promises);
var _module = require('module');
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
var _process = require('process'); var _process2 = _interopRequireDefault(_process);
var _url = require('url');
var _util = require('util');
var _gettsconfig = require('get-tsconfig');
var _rolldown = require('rolldown');
// src/packages.ts
// src/utils.ts
var _child_process = require('child_process');
var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto);
var _pluginutils = require('@rollup/pluginutils');
// src/constants.ts
var { version } = JSON.parse(
_fs.readFileSync.call(void 0, new URL("../package.json", importMetaUrl)).toString()
);
var DEV_PROD_CONDITION = `development|production`;
var OPTIMIZABLE_ENTRY_RE = /\.[cm]?[jt]s$/;
var SPECIAL_QUERY_RE = /[?&](?:worker|sharedworker|raw|url)\b/;
// src/sharedUtils.ts
var isWindows = typeof _process2.default !== "undefined" && _process2.default.platform === "win32";
var windowsSlashRE = /\\/g;
function slash(p) {
return p.replace(windowsSlashRE, "/");
}
var postfixRE = /[?#].*$/;
function cleanUrl(url) {
return url.replace(postfixRE, "");
}
function splitFileAndPostfix(path6) {
const file = cleanUrl(path6);
return { file, postfix: path6.slice(file.length) };
}
var AsyncFunction = async function() {
}.constructor;
// src/utils.ts
var _filter = require('rolldown/filter');
var createFilter = _pluginutils.createFilter;
var NODE_BUILTIN_NAMESPACE = "node:";
var NPM_BUILTIN_NAMESPACE = "npm:";
var BUN_BUILTIN_NAMESPACE = "bun:";
var nodeBuiltins = _module.builtinModules.filter((id) => !id.includes(":"));
var isBuiltinCache = /* @__PURE__ */ new WeakMap();
function isBuiltin(builtins, id) {
let isBuiltin2 = isBuiltinCache.get(builtins);
if (!isBuiltin2) {
isBuiltin2 = createIsBuiltin(builtins);
isBuiltinCache.set(builtins, isBuiltin2);
}
return isBuiltin2(id);
}
function createIsBuiltin(builtins) {
const plainBuiltinsSet = new Set(
builtins.filter((builtin) => typeof builtin === "string")
);
const regexBuiltins = builtins.filter(
(builtin) => typeof builtin !== "string"
);
return (id) => plainBuiltinsSet.has(id) || regexBuiltins.some((regexp) => regexp.test(id));
}
var nodeLikeBuiltins = [
...nodeBuiltins,
new RegExp(`^${NODE_BUILTIN_NAMESPACE}`),
new RegExp(`^${NPM_BUILTIN_NAMESPACE}`),
new RegExp(`^${BUN_BUILTIN_NAMESPACE}`)
];
function isNodeLikeBuiltin(id) {
return isBuiltin(nodeLikeBuiltins, id);
}
function isNodeBuiltin(id) {
if (id.startsWith(NODE_BUILTIN_NAMESPACE)) {
return true;
}
return nodeBuiltins.includes(id);
}
function isInNodeModules(id) {
return id.includes("node_modules");
}
function isOptimizable(id, optimizeDeps) {
const { extensions } = optimizeDeps;
return OPTIMIZABLE_ENTRY_RE.test(id) || (_nullishCoalesce(_optionalChain([extensions, 'optionalAccess', _ => _.some, 'call', _2 => _2((ext) => id.endsWith(ext))]), () => ( false)));
}
var bareImportRE = /^(?![a-z]:)[\w@](?!.*:\/\/)/i;
var deepImportRE = /^([^@][^/]*)\/|^(@[^/]+\/[^/]+)\//;
var _require = _module.createRequire.call(void 0, importMetaUrl);
var _dirname = _path2.default.dirname(_url.fileURLToPath.call(void 0, importMetaUrl));
var urlCanParse = _nullishCoalesce(_url.URL.canParse, () => ( ((path6, base) => {
try {
new (0, _url.URL)(path6, base);
return true;
} catch (e2) {
return false;
}
})));
function normalizePath(id) {
return _path2.default.posix.normalize(isWindows ? slash(id) : id);
}
function injectQuery(url, queryToInject) {
const { file, postfix } = splitFileAndPostfix(url);
const normalizedFile = isWindows ? slash(file) : file;
return `${normalizedFile}?${queryToInject}${postfix[0] === "?" ? `&${postfix.slice(1)}` : (
/* hash only */
postfix
)}`;
}
function isObject(value) {
return Object.prototype.toString.call(value) === "[object Object]";
}
function tryStatSync(file) {
try {
return _fs2.default.statSync(file, { throwIfNoEntry: false });
} catch (e3) {
}
}
function isFilePathESM(filePath, packageCache) {
if (/\.m[jt]s$/.test(filePath)) {
return true;
} else if (/\.c[jt]s$/.test(filePath)) {
return false;
} else {
try {
const pkg = findNearestPackageData(_path2.default.dirname(filePath), packageCache);
return _optionalChain([pkg, 'optionalAccess', _3 => _3.data, 'access', _4 => _4.type]) === "module";
} catch (e4) {
return false;
}
}
}
var safeRealpathSync = isWindows ? windowsSafeRealPathSync : _fs2.default.realpathSync.native;
var windowsNetworkMap = /* @__PURE__ */ new Map();
function windowsMappedRealpathSync(path6) {
const realPath = _fs2.default.realpathSync.native(path6);
if (realPath.startsWith("\\\\")) {
for (const [network, volume] of windowsNetworkMap) {
if (realPath.startsWith(network)) {
return realPath.replace(network, volume);
}
}
}
return realPath;
}
var parseNetUseRE = /^\w* +(\w:) +([^ ]+)\s/;
var firstSafeRealPathSyncRun = false;
function windowsSafeRealPathSync(path6) {
if (!firstSafeRealPathSyncRun) {
optimizeSafeRealPathSync();
firstSafeRealPathSyncRun = true;
}
return _fs2.default.realpathSync(path6);
}
function optimizeSafeRealPathSync() {
const nodeVersion = _process2.default.versions.node.split(".").map(Number);
if (nodeVersion[0] < 18 || nodeVersion[0] === 18 && nodeVersion[1] < 10) {
safeRealpathSync = _fs2.default.realpathSync;
return;
}
try {
_fs2.default.realpathSync.native(_path2.default.resolve("./"));
} catch (error) {
if (error.message.includes("EISDIR: illegal operation on a directory")) {
safeRealpathSync = _fs2.default.realpathSync;
return;
}
}
_child_process.exec.call(void 0, "net use", (error, stdout) => {
if (error) {
return;
}
const lines = stdout.split("\n");
for (const line of lines) {
const m = parseNetUseRE.exec(line);
if (m) {
windowsNetworkMap.set(m[2], m[1]);
}
}
if (windowsNetworkMap.size === 0) {
safeRealpathSync = _fs2.default.realpathSync.native;
} else {
safeRealpathSync = windowsMappedRealpathSync;
}
});
}
var hash = _nullishCoalesce(_crypto2.default.hash, () => ( ((algorithm, data, outputEncoding) => _crypto2.default.createHash(algorithm).update(data).digest(outputEncoding))));
function stripBomTag(content) {
if (content.charCodeAt(0) === 65279) {
return content.slice(1);
}
return content;
}
function getNpmPackageName(importPath) {
const parts = importPath.split("/");
if (parts[0][0] === "@") {
if (!parts[1]) {
return null;
}
return `${parts[0]}/${parts[1]}`;
} else {
return parts[0];
}
}
var dynamicImport = async (id, { format }) => {
const fn = format === "esm" ? (file) => Promise.resolve().then(() => _interopRequireWildcard(require(file))) : false ? _module.createRequire.call(void 0, importMetaUrl) : __require;
return fn(id);
};
// src/packages.ts
var pnp;
if (_process2.default.versions.pnp) {
try {
pnp = _module.createRequire.call(void 0, importMetaUrl)("pnpapi");
} catch (e5) {
}
}
function resolvePackageData(pkgName, basedir, preserveSymlinks = false, packageCache) {
if (pnp) {
const cacheKey = getRpdCacheKey(pkgName, basedir, preserveSymlinks);
if (_optionalChain([packageCache, 'optionalAccess', _5 => _5.has, 'call', _6 => _6(cacheKey)])) {
return packageCache.get(cacheKey);
}
try {
const pkg = pnp.resolveToUnqualified(pkgName, basedir, {
considerBuiltins: false
});
if (!pkg) {
return null;
}
const pkgData = loadPackageData(_path2.default.join(pkg, "package.json"));
_optionalChain([packageCache, 'optionalAccess', _7 => _7.set, 'call', _8 => _8(cacheKey, pkgData)]);
return pkgData;
} catch (e6) {
return null;
}
}
const originalBasedir = basedir;
while (basedir) {
if (packageCache) {
const cached = getRpdCache(
packageCache,
pkgName,
basedir,
originalBasedir,
preserveSymlinks
);
if (cached) {
return cached;
}
}
const pkg = _path2.default.join(basedir, "node_modules", pkgName, "package.json");
try {
if (_fs2.default.existsSync(pkg)) {
const pkgPath = preserveSymlinks ? pkg : safeRealpathSync(pkg);
const pkgData = loadPackageData(pkgPath);
if (packageCache) {
setRpdCache(
packageCache,
pkgData,
pkgName,
basedir,
originalBasedir,
preserveSymlinks
);
}
return pkgData;
}
} catch (e7) {
}
const nextBasedir = _path2.default.dirname(basedir);
if (nextBasedir === basedir) {
break;
}
basedir = nextBasedir;
}
return null;
}
function findNearestPackageData(basedir, packageCache) {
const originalBasedir = basedir;
while (basedir) {
if (packageCache) {
const cached = getFnpdCache(packageCache, basedir, originalBasedir);
if (cached) {
return cached;
}
}
const pkgPath = _path2.default.join(basedir, "package.json");
if (_optionalChain([tryStatSync, 'call', _9 => _9(pkgPath), 'optionalAccess', _10 => _10.isFile, 'call', _11 => _11()])) {
try {
const pkgData = loadPackageData(pkgPath);
if (packageCache) {
setFnpdCache(packageCache, pkgData, basedir, originalBasedir);
}
return pkgData;
} catch (e8) {
}
}
const nextBasedir = _path2.default.dirname(basedir);
if (nextBasedir === basedir) {
break;
}
basedir = nextBasedir;
}
return null;
}
function findNearestMainPackageData(basedir, packageCache) {
const nearestPackage = findNearestPackageData(basedir, packageCache);
return nearestPackage && (nearestPackage.data.name ? nearestPackage : findNearestMainPackageData(
_path2.default.dirname(nearestPackage.dir),
packageCache
));
}
function loadPackageData(pkgPath) {
const data = JSON.parse(stripBomTag(_fs2.default.readFileSync(pkgPath, "utf-8")));
const pkgDir = normalizePath(_path2.default.dirname(pkgPath));
const { sideEffects } = data;
let hasSideEffects;
if (typeof sideEffects === "boolean") {
hasSideEffects = () => sideEffects;
} else if (Array.isArray(sideEffects)) {
if (sideEffects.length <= 0) {
hasSideEffects = () => false;
} else {
const finalPackageSideEffects = sideEffects.map((sideEffect) => {
if (sideEffect.includes("/")) {
return sideEffect;
}
return `**/${sideEffect}`;
});
hasSideEffects = createFilter(finalPackageSideEffects, null, {
resolve: pkgDir
});
}
} else {
hasSideEffects = () => null;
}
const resolvedCache = {};
const pkg = {
dir: pkgDir,
data,
hasSideEffects,
setResolvedCache(key, entry, options) {
resolvedCache[getResolveCacheKey(key, options)] = entry;
},
getResolvedCache(key, options) {
return resolvedCache[getResolveCacheKey(key, options)];
}
};
return pkg;
}
function getResolveCacheKey(key, options) {
return [
key,
options.isRequire ? "1" : "0",
options.conditions.join("_"),
options.extensions.join("_"),
options.mainFields.join("_")
].join("|");
}
function findNearestNodeModules(basedir) {
while (basedir) {
const pkgPath = _path2.default.join(basedir, "node_modules");
if (_optionalChain([tryStatSync, 'call', _12 => _12(pkgPath), 'optionalAccess', _13 => _13.isDirectory, 'call', _14 => _14()])) {
return pkgPath;
}
const nextBasedir = _path2.default.dirname(basedir);
if (nextBasedir === basedir) {
break;
}
basedir = nextBasedir;
}
return null;
}
function getRpdCache(packageCache, pkgName, basedir, originalBasedir, preserveSymlinks) {
const cacheKey = getRpdCacheKey(pkgName, basedir, preserveSymlinks);
const pkgData = packageCache.get(cacheKey);
if (pkgData) {
traverseBetweenDirs(originalBasedir, basedir, (dir) => {
packageCache.set(getRpdCacheKey(pkgName, dir, preserveSymlinks), pkgData);
});
return pkgData;
}
}
function setRpdCache(packageCache, pkgData, pkgName, basedir, originalBasedir, preserveSymlinks) {
packageCache.set(getRpdCacheKey(pkgName, basedir, preserveSymlinks), pkgData);
traverseBetweenDirs(originalBasedir, basedir, (dir) => {
packageCache.set(getRpdCacheKey(pkgName, dir, preserveSymlinks), pkgData);
});
}
function getRpdCacheKey(pkgName, basedir, preserveSymlinks) {
return `rpd_${pkgName}_${basedir}_${preserveSymlinks}`;
}
function getFnpdCache(packageCache, basedir, originalBasedir) {
const cacheKey = getFnpdCacheKey(basedir);
const pkgData = packageCache.get(cacheKey);
if (pkgData) {
traverseBetweenDirs(originalBasedir, basedir, (dir) => {
packageCache.set(getFnpdCacheKey(dir), pkgData);
});
return pkgData;
}
}
function setFnpdCache(packageCache, pkgData, basedir, originalBasedir) {
packageCache.set(getFnpdCacheKey(basedir), pkgData);
traverseBetweenDirs(originalBasedir, basedir, (dir) => {
packageCache.set(getFnpdCacheKey(dir), pkgData);
});
}
function getFnpdCacheKey(basedir) {
return `fnpd_${basedir}`;
}
function traverseBetweenDirs(longerDir, shorterDir, cb) {
while (longerDir !== shorterDir) {
cb(longerDir);
longerDir = _path2.default.dirname(longerDir);
}
}
// src/plugins/resolve.ts
var _mlly = require('mlly');
var _resolveexports = require('resolve.exports');
// src/external.ts
function canExternalizeFile(filePath) {
const ext = _path2.default.extname(filePath);
return !ext || ext === ".js" || ext === ".mjs" || ext === ".cjs";
}
// src/plugins/resolve.ts
var ERR_RESOLVE_PACKAGE_ENTRY_FAIL = "ERR_RESOLVE_PACKAGE_ENTRY_FAIL";
var browserExternalId = "__vite-browser-external";
var optionalPeerDepId = "__vite-optional-peer-dep";
function tryFsResolve(fsPath, options, tryIndex = true, skipPackageJson = false) {
const hashIndex = fsPath.indexOf("#");
if (hashIndex >= 0 && isInNodeModules(fsPath)) {
const queryIndex = fsPath.indexOf("?");
if (queryIndex < 0 || queryIndex > hashIndex) {
const file2 = queryIndex > hashIndex ? fsPath.slice(0, queryIndex) : fsPath;
const res2 = tryCleanFsResolve(file2, options, tryIndex, skipPackageJson);
if (res2) {
return res2 + fsPath.slice(file2.length);
}
}
}
const { file, postfix } = splitFileAndPostfix(fsPath);
const res = tryCleanFsResolve(file, options, tryIndex, skipPackageJson);
if (res) {
return res + postfix;
}
}
var knownTsOutputRE = /\.(?:js|mjs|cjs|jsx)$/;
var isPossibleTsOutput = (url) => knownTsOutputRE.test(url);
function tryCleanFsResolve(file, options, tryIndex = true, skipPackageJson = false) {
const { tryPrefix, extensions, preserveSymlinks } = options;
const fileResult = tryResolveRealFileOrType(file, options.preserveSymlinks);
if (_optionalChain([fileResult, 'optionalAccess', _15 => _15.path])) {
return fileResult.path;
}
let res;
const possibleJsToTs = isPossibleTsOutput(file);
if (possibleJsToTs || options.extensions.length || tryPrefix) {
const dirPath = _path2.default.dirname(file);
if (isDirectory(dirPath)) {
if (possibleJsToTs) {
const fileExt = _path2.default.extname(file);
const fileName = file.slice(0, -fileExt.length);
if (res = tryResolveRealFile(
fileName + fileExt.replace("js", "ts"),
preserveSymlinks
)) {
return res;
}
if (fileExt === ".js" && (res = tryResolveRealFile(`${fileName}.tsx`, preserveSymlinks))) {
return res;
}
}
if (res = tryResolveRealFileWithExtensions(
file,
extensions,
preserveSymlinks
)) {
return res;
}
if (tryPrefix) {
const prefixed = `${dirPath}/${options.tryPrefix}${_path2.default.basename(file)}`;
if (res = tryResolveRealFile(prefixed, preserveSymlinks)) {
return res;
}
if (res = tryResolveRealFileWithExtensions(
prefixed,
extensions,
preserveSymlinks
)) {
return res;
}
}
}
}
if (tryIndex && _optionalChain([fileResult, 'optionalAccess', _16 => _16.type]) === "directory") {
const dirPath = file;
if (!skipPackageJson) {
let pkgPath = `${dirPath}/package.json`;
try {
if (_fs2.default.existsSync(pkgPath)) {
if (!options.preserveSymlinks) {
pkgPath = safeRealpathSync(pkgPath);
}
const pkg = loadPackageData(pkgPath);
return resolvePackageEntry(dirPath, pkg, options);
}
} catch (e) {
if (e.code !== ERR_RESOLVE_PACKAGE_ENTRY_FAIL && e.code !== "ENOENT") {
throw e;
}
}
}
if (res = tryResolveRealFileWithExtensions(
`${dirPath}/index`,
extensions,
preserveSymlinks
)) {
return res;
}
if (tryPrefix) {
if (res = tryResolveRealFileWithExtensions(
`${dirPath}/${options.tryPrefix}index`,
extensions,
preserveSymlinks
)) {
return res;
}
}
}
}
function tryNodeResolve(id, importer, options, depsOptimizer, externalize) {
const { root, dedupe, isBuild, preserveSymlinks, packageCache } = options;
const deepMatch = deepImportRE.exec(id);
const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : cleanUrl(id);
let basedir;
if (dedupe.includes(pkgId)) {
basedir = root;
} else if (importer && _path2.default.isAbsolute(importer) && (importer.endsWith("*") || _fs2.default.existsSync(cleanUrl(importer)))) {
basedir = _path2.default.dirname(importer);
} else {
basedir = root;
}
const isModuleBuiltin = (id2) => isBuiltin(options.builtins, id2);
let selfPkg = null;
if (!isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
const selfPackageData = findNearestPackageData(basedir, packageCache);
selfPkg = _optionalChain([selfPackageData, 'optionalAccess', _17 => _17.data, 'access', _18 => _18.exports]) && selfPackageData.data.name === pkgId ? selfPackageData : null;
}
const pkg = selfPkg || resolvePackageData(pkgId, basedir, preserveSymlinks, packageCache);
if (!pkg) {
if (basedir !== root && !isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
const mainPkg = _optionalChain([findNearestMainPackageData, 'call', _19 => _19(basedir, packageCache), 'optionalAccess', _20 => _20.data]);
if (mainPkg) {
const pkgName = getNpmPackageName(id);
if (pkgName != null && _optionalChain([mainPkg, 'access', _21 => _21.peerDependencies, 'optionalAccess', _22 => _22[pkgName]]) && _optionalChain([mainPkg, 'access', _23 => _23.peerDependenciesMeta, 'optionalAccess', _24 => _24[pkgName], 'optionalAccess', _25 => _25.optional])) {
return {
id: `${optionalPeerDepId}:${id}:${mainPkg.name}`
};
}
}
}
return;
}
const resolveId = deepMatch ? resolveDeepImport : resolvePackageEntry;
const unresolvedId = deepMatch ? `.${id.slice(pkgId.length)}` : id;
let resolved = resolveId(unresolvedId, pkg, options);
if (!resolved) {
return;
}
const processResult = (resolved2) => {
if (!externalize) {
return resolved2;
}
if (!canExternalizeFile(resolved2.id)) {
return resolved2;
}
let resolvedId = id;
if (deepMatch && !pkg.data.exports && _path2.default.extname(id) !== _path2.default.extname(resolved2.id)) {
const index = resolved2.id.indexOf(id);
if (index > -1) {
resolvedId = resolved2.id.slice(index);
}
}
return { ...resolved2, id: resolvedId, external: true };
};
if (!options.idOnly && (!options.scan && isBuild || externalize)) {
return processResult({
id: resolved,
moduleSideEffects: pkg.hasSideEffects(resolved)
});
}
if (!isInNodeModules(resolved) || !depsOptimizer || options.scan) {
return { id: resolved };
}
const isJsType = isOptimizable(resolved, depsOptimizer.options);
const exclude = depsOptimizer.options.exclude;
const skipOptimization = depsOptimizer.options.noDiscovery || !isJsType || importer && isInNodeModules(importer) || _optionalChain([exclude, 'optionalAccess', _26 => _26.includes, 'call', _27 => _27(pkgId)]) || _optionalChain([exclude, 'optionalAccess', _28 => _28.includes, 'call', _29 => _29(id)]) || SPECIAL_QUERY_RE.test(resolved);
if (skipOptimization) {
const versionHash = depsOptimizer.metadata.browserHash;
if (versionHash && isJsType) {
resolved = injectQuery(resolved, `v=${versionHash}`);
}
} else {
const optimizedInfo = depsOptimizer.registerMissingImport(id, resolved);
resolved = depsOptimizer.getOptimizedDepId(optimizedInfo);
}
return { id: resolved };
}
function resolvePackageEntry(id, { dir, data, setResolvedCache, getResolvedCache }, options) {
const { postfix } = splitFileAndPostfix(id);
const cached = getResolvedCache(".", options);
if (cached) {
return cached + postfix;
}
try {
let entryPoint;
if (data.exports) {
entryPoint = resolveExportsOrImports(data, ".", options, "exports");
}
if (!entryPoint) {
for (const field of options.mainFields) {
if (field === "browser") {
entryPoint = tryResolveBrowserEntry(dir, data, options);
if (entryPoint) {
break;
}
} else if (typeof data[field] === "string") {
entryPoint = data[field];
break;
}
}
}
entryPoint ||= data.main;
const entryPoints = entryPoint ? [entryPoint] : ["index.js", "index.json", "index.node"];
for (let entry of entryPoints) {
let skipPackageJson = false;
if (options.mainFields[0] === "sass" && !options.extensions.includes(_path2.default.extname(entry))) {
entry = "";
skipPackageJson = true;
} else {
const { browser: browserField } = data;
if (options.mainFields.includes("browser") && isObject(browserField)) {
entry = mapWithBrowserField(entry, browserField) || entry;
}
}
const entryPointPath = _path2.default.join(dir, entry);
const resolvedEntryPoint = tryFsResolve(
entryPointPath,
options,
true,
skipPackageJson
);
if (resolvedEntryPoint) {
setResolvedCache(".", resolvedEntryPoint, options);
return resolvedEntryPoint + postfix;
}
}
} catch (e) {
packageEntryFailure(
id,
// @ts-ignore
e.message
);
}
packageEntryFailure(id);
}
function packageEntryFailure(id, details) {
const err = new Error(
`Failed to resolve entry for package "${id}". The package may have incorrect main/module/exports specified in its package.json${details ? `: ${details}` : "."}`
);
err.code = ERR_RESOLVE_PACKAGE_ENTRY_FAIL;
throw err;
}
function getConditions(conditions, isProduction, isRequire) {
const resolvedConditions = conditions.map((condition) => {
if (condition === DEV_PROD_CONDITION) {
return isProduction ? "production" : "development";
}
return condition;
});
if (isRequire) {
resolvedConditions.push("require");
} else {
resolvedConditions.push("import");
}
return resolvedConditions;
}
function resolveExportsOrImports(pkg, key, options, type) {
const conditions = getConditions(
options.conditions,
options.isProduction,
options.isRequire
);
const fn = type === "imports" ? _resolveexports.imports : _resolveexports.exports;
const result = fn(pkg, key, { conditions, unsafe: true });
return result ? result[0] : void 0;
}
function resolveDeepImport(id, { setResolvedCache, getResolvedCache, dir, data }, options) {
const cache = getResolvedCache(id, options);
if (cache) {
return cache;
}
let relativeId = id;
const { exports: exportsField, browser: browserField } = data;
if (exportsField) {
if (isObject(exportsField) && !Array.isArray(exportsField)) {
const { file, postfix } = splitFileAndPostfix(relativeId);
const exportsId = resolveExportsOrImports(data, file, options, "exports");
if (exportsId !== void 0) {
relativeId = exportsId + postfix;
} else {
relativeId = void 0;
}
} else {
relativeId = void 0;
}
if (!relativeId) {
throw new Error(
`Package subpath '${relativeId}' is not defined by "exports" in ${_path2.default.join(dir, "package.json")}.`
);
}
} else if (options.mainFields.includes("browser") && isObject(browserField)) {
const { file, postfix } = splitFileAndPostfix(relativeId);
const mapped = mapWithBrowserField(file, browserField);
if (mapped) {
relativeId = mapped + postfix;
} else if (mapped === false) {
setResolvedCache(id, browserExternalId, options);
return browserExternalId;
}
}
if (relativeId) {
const resolved = tryFsResolve(
_path2.default.join(dir, relativeId),
options,
!exportsField
// try index only if no exports field
);
if (resolved) {
setResolvedCache(id, resolved, options);
return resolved;
}
}
}
function tryResolveBrowserEntry(dir, data, options) {
const browserEntry = typeof data.browser === "string" ? data.browser : isObject(data.browser) && data.browser["."];
if (browserEntry) {
if (!options.isRequire && options.mainFields.includes("module") && typeof data.module === "string" && data.module !== browserEntry) {
const resolvedBrowserEntry = tryFsResolve(
_path2.default.join(dir, browserEntry),
options
);
if (resolvedBrowserEntry) {
const content = _fs2.default.readFileSync(resolvedBrowserEntry, "utf-8");
if (_mlly.hasESMSyntax.call(void 0, content)) {
return browserEntry;
} else {
return data.module;
}
}
} else {
return browserEntry;
}
}
}
function mapWithBrowserField(relativePathInPkgDir, map) {
const normalizedPath = _path2.default.posix.normalize(relativePathInPkgDir);
for (const key in map) {
const normalizedKey = _path2.default.posix.normalize(key);
if (normalizedPath === normalizedKey || equalWithoutSuffix(normalizedPath, normalizedKey, ".js") || equalWithoutSuffix(normalizedPath, normalizedKey, "/index.js")) {
return map[key];
}
}
}
function equalWithoutSuffix(path6, key, suffix) {
return key.endsWith(suffix) && key.slice(0, -suffix.length) === path6;
}
function tryResolveRealFile(file, preserveSymlinks) {
const stat = tryStatSync(file);
if (_optionalChain([stat, 'optionalAccess', _30 => _30.isFile, 'call', _31 => _31()])) {
return getRealPath(file, preserveSymlinks);
}
}
function tryResolveRealFileWithExtensions(filePath, extensions, preserveSymlinks) {
for (const ext of extensions) {
const res = tryResolveRealFile(filePath + ext, preserveSymlinks);
if (res) {
return res;
}
}
}
function tryResolveRealFileOrType(file, preserveSymlinks) {
const fileStat = tryStatSync(file);
if (_optionalChain([fileStat, 'optionalAccess', _32 => _32.isFile, 'call', _33 => _33()])) {
return { path: getRealPath(file, preserveSymlinks), type: "file" };
}
if (_optionalChain([fileStat, 'optionalAccess', _34 => _34.isDirectory, 'call', _35 => _35()])) {
return { type: "directory" };
}
}
function getRealPath(resolved, preserveSymlinks) {
if (!preserveSymlinks) {
resolved = safeRealpathSync(resolved);
}
return normalizePath(resolved);
}
function isDirectory(path6) {
const stat = tryStatSync(path6);
return _nullishCoalesce(_optionalChain([stat, 'optionalAccess', _36 => _36.isDirectory, 'call', _37 => _37()]), () => ( false));
}
// src/index.ts
var promisifiedRealpath = _util.promisify.call(void 0, _fs2.default.realpath);
var configDefaults = Object.freeze({
resolve: {
extensions: [".mjs", ".js", ".mts", ".ts", ".jsx", ".tsx", ".json"]
}
});
var defaultGetOutputFile = (filepath, _format) => {
return filepath;
};
function collectAllModules(bundle, fileName, allModules, analyzedModules = /* @__PURE__ */ new Set()) {
if (analyzedModules.has(fileName)) {
return;
}
analyzedModules.add(fileName);
const chunk = bundle[fileName];
for (const mod of chunk.moduleIds) {
allModules.add(mod);
}
for (const i of chunk.imports) {
analyzedModules.add(i);
collectAllModules(bundle, i, allModules, analyzedModules);
}
for (const i of chunk.dynamicImports) {
analyzedModules.add(i);
collectAllModules(bundle, i, allModules, analyzedModules);
}
}
async function bundleFile(fileName, options) {
const { isESM } = options;
const isModuleSyncConditionEnabled = (await Promise.resolve().then(() => _interopRequireWildcard(require(
// @ts-ignore
"#module-sync-enabled"
)))).default;
const dirnameVarName = "__vite_injected_original_dirname";
const filenameVarName = "__vite_injected_original_filename";
const importMetaUrlVarName = "__vite_injected_original_import_meta_url";
const rolldownInputOptions = _optionalChain([options, 'optionalAccess', _38 => _38.rolldownOptions, 'optionalAccess', _39 => _39.input]) || {};
const bundle = await _rolldown.rolldown.call(void 0, {
...rolldownInputOptions,
input: fileName,
// target: [`node${process.versions.node}`],
platform: "node",
resolve: {
mainFields: ["main"],
tsconfigFilename: options.tsconfig
},
define: {
"__dirname": dirnameVarName,
"__filename": filenameVarName,
"import.meta.url": importMetaUrlVarName,
"import.meta.dirname": dirnameVarName,
"import.meta.filename": filenameVarName
},
// disable treeshake to include files that is not sideeffectful to `moduleIds`
treeshake: false,
plugins: [
/* @__PURE__ */ (() => {
const packageCache = /* @__PURE__ */ new Map();
const resolveByViteResolver = (id, importer, isRequire) => {
return _optionalChain([tryNodeResolve, 'call', _40 => _40(id, importer, {
root: _path2.default.dirname(fileName),
isBuild: true,
isProduction: true,
preferRelative: false,
tryIndex: true,
mainFields: [],
conditions: [
"node",
...isModuleSyncConditionEnabled ? ["module-sync"] : []
],
externalConditions: [],
external: [],
noExternal: [],
dedupe: [],
extensions: configDefaults.resolve.extensions,
preserveSymlinks: false,
packageCache,
isRequire,
builtins: nodeLikeBuiltins
}), 'optionalAccess', _41 => _41.id]);
};
return {
name: "externalize-deps",
resolveId: {
filter: { id: /^[^.#].*/ },
async handler(id, importer, { kind }) {
if (!importer || _path2.default.isAbsolute(id) || isNodeBuiltin(id)) {
return;
}
if (isNodeLikeBuiltin(id)) {
return { id, external: true };
}
const isImport = isESM || kind === "dynamic-import";
let idFsPath;
try {
idFsPath = resolveByViteResolver(id, importer, !isImport);
} catch (e) {
if (!isImport) {
let canResolveWithImport = false;
try {
canResolveWithImport = !!resolveByViteResolver(
id,
importer,
false
);
} catch (e9) {
}
if (canResolveWithImport) {
throw new Error(
`Failed to resolve ${JSON.stringify(
id
)}. This package is ESM only but it was tried to load by \`require\`. See https://vite.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`
);
}
}
throw e;
}
if (!idFsPath) {
return;
}
if (idFsPath.endsWith(".json")) {
return idFsPath;
}
if (idFsPath && isImport) {
idFsPath = _url.pathToFileURL.call(void 0, idFsPath).href;
}
return { id: idFsPath, external: true };
}
}
};
})(),
{
name: "inject-file-scope-variables",
transform: {
filter: { id: /\.[cm]?[jt]s$/ },
async handler(code, id) {
const injectValues = `const ${dirnameVarName} = ${JSON.stringify(_path2.default.dirname(id))};const ${filenameVarName} = ${JSON.stringify(id)};const ${importMetaUrlVarName} = ${JSON.stringify(
_url.pathToFileURL.call(void 0, id).href
)};`;
return { code: injectValues + code, map: null };
}
}
}
],
external: options.external
// preserveEntrySignatures: 'exports-only'
});
const rolldownOutputOptions = _optionalChain([options, 'optionalAccess', _42 => _42.rolldownOptions, 'optionalAccess', _43 => _43.output]) || {};
const result = await bundle.generate({
...rolldownOutputOptions,
format: options.format,
sourcemap: false,
// sourcemapPathTransform(relative) {
// return path.resolve(fileName, relative)
// },
// we want to generate a single chunk like esbuild does with `splitting: false`
inlineDynamicImports: true
});
await bundle.close();
const entryChunk = result.output.find(
(chunk) => chunk.type === "chunk" && chunk.isEntry
);
const bundleChunks = Object.fromEntries(
result.output.flatMap((c) => c.type === "chunk" ? [[c.fileName, c]] : [])
);
const allModules = /* @__PURE__ */ new Set();
collectAllModules(bundleChunks, entryChunk.fileName, allModules);
allModules.delete(fileName);
return {
code: entryChunk.code,
dependencies: [...allModules]
};
}
var _require2 = _module.createRequire.call(void 0, importMetaUrl);
async function loadFromBundledFile(fileName, bundledCode, options) {
const { isESM } = options;
if (isESM) {
let nodeModulesDir = typeof _process2.default.versions.deno === "string" ? void 0 : findNearestNodeModules(_path2.default.dirname(fileName));
if (nodeModulesDir) {
try {
await _promises2.default.mkdir(_path2.default.resolve(nodeModulesDir, ".vite-temp/"), {
recursive: true
});
} catch (e) {
if (e.code === "EACCES") {
nodeModulesDir = void 0;
} else {
throw e;
}
}
}
const hash2 = `timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`;
const tempFileName = nodeModulesDir ? _path2.default.resolve(
nodeModulesDir,
`.vite-temp/${_path2.default.basename(fileName)}.${hash2}.${isESM ? "mjs" : "cjs"}`
) : `${fileName}.${hash2}.mjs`;
const getOutputFile = options.getOutputFile || defaultGetOutputFile;
const outfile = getOutputFile(tempFileName, options.format);
await _promises2.default.writeFile(outfile, bundledCode);
let mod;
const req = options.require || dynamicImport;
try {
mod = await req(
options.format === "esm" ? _url.pathToFileURL.call(void 0, outfile).href : outfile,
{ format: options.format }
);
return mod;
} finally {
if (!_optionalChain([options, 'optionalAccess', _44 => _44.preserveTemporaryFile])) {
_fs2.default.unlink(outfile, () => {
});
}
}
} else {
const extension = _path2.default.extname(fileName);
const realFileName = await promisifiedRealpath(fileName);
const loaderExt = extension in _require2.extensions ? extension : ".js";
const defaultLoader = _require2.extensions[loaderExt];
_require2.extensions[loaderExt] = (module, filename) => {
if (filename === realFileName) {
;
module._compile(bundledCode, filename);
} else {
defaultLoader(module, filename);
}
};
delete _require2.cache[_require2.resolve(fileName)];
const raw = _require2(fileName);
_require2.extensions[loaderExt] = defaultLoader;
return raw.__esModule ? raw.default : raw;
}
}
async function bundleRequire(options) {
const resolvedPath = _path2.default.isAbsolute(options.filepath) ? options.filepath : _path2.default.resolve(options.cwd || _process2.default.cwd(), options.filepath);
const isESM = typeof _process2.default.versions.deno === "string" || isFilePathESM(resolvedPath);
if (options.tsconfig !== false) {
options.tsconfig = _nullishCoalesce(_nullishCoalesce(options.tsconfig, () => ( _optionalChain([_gettsconfig.getTsconfig.call(void 0, options.cwd, "tsconfig.json"), 'optionalAccess', _45 => _45.path]))), () => ( void 0));
} else {
options.tsconfig = void 0;
}
if (!options.format) {
options.format = isESM ? "esm" : "cjs";
}
const internalOptions = {
...options,
isESM,
format: options.format,
tsconfig: options.tsconfig
};
const bundled = await bundleFile(
resolvedPath,
internalOptions
);
const mod = await loadFromBundledFile(
resolvedPath,
bundled.code,
internalOptions
);
return {
mod,
dependencies: bundled.dependencies
};
}
exports.bundleFile = bundleFile; exports.bundleRequire = bundleRequire; exports.configDefaults = configDefaults; exports.loadFromBundledFile = loadFromBundledFile;
;