iles
Version:
Vite & Vue powered static site generator with partial hydration
51 lines (49 loc) • 1.58 kB
JavaScript
// src/node/build/chunks.ts
function extendManualChunks(config) {
const userChunks = config.ssg.manualChunks;
const cache = /* @__PURE__ */ new Map();
const chunkForExtension = {
jsx: `vendor-${config.jsx}`,
tsx: `vendor-${config.jsx}`,
svelte: "vendor-svelte",
vue: "vendor-vue"
};
return (id, api) => {
const name = userChunks?.(id, api);
if (name) return name;
if (id.includes("vite/") || id.includes("plugin-vue")) return "vite";
if (id.includes("hydration/dist")) return "iles";
if (id.includes("node_modules")) return vendorPerFramework(chunkForExtension, id, api, cache);
};
}
function vendorPerFramework(chunkForExtension, id, api, cache, importStack = []) {
if (cache.has(id)) return cache.get(id);
if (importStack.includes(id)) {
cache.set(id, void 0);
return;
}
const mod = api.getModuleInfo(id);
if (!mod) {
cache.set(id, void 0);
return;
}
if (mod.isEntry) {
const queryIndex = id.lastIndexOf("?");
const idWithoutQuery = queryIndex > -1 ? id.slice(0, queryIndex) : id;
const extension = idWithoutQuery.slice(idWithoutQuery.lastIndexOf(".") + 1);
const name2 = chunkForExtension[extension];
cache.set(id, name2);
return name2;
}
let name;
for (const importer of mod.importers) {
const importerChunk = vendorPerFramework(chunkForExtension, importer, api, cache, importStack.concat(id));
if (!name) name = importerChunk;
if (importerChunk && importerChunk !== name) break;
}
cache.set(id, name);
return name;
}
export {
extendManualChunks
};