astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
69 lines (68 loc) • 2.24 kB
JavaScript
import { extname } from "node:path";
function extendManualChunks(outputOptions, hooks) {
const manualChunks = outputOptions.manualChunks;
outputOptions.manualChunks = function(id, meta) {
if (hooks.before) {
let value = hooks.before(id, meta);
if (value) {
return value;
}
}
if (typeof manualChunks == "object") {
if (id in manualChunks) {
let value = manualChunks[id];
return value[0];
}
} else if (typeof manualChunks === "function") {
const outid = manualChunks.call(this, id, meta);
if (outid) {
return outid;
}
}
if (hooks.after) {
return hooks.after(id, meta) || null;
}
return null;
};
}
const ASTRO_PAGE_EXTENSION_POST_PATTERN = "@_@";
const ASTRO_PAGE_KEY_SEPARATOR = "&";
function makePageDataKey(route, componentPath) {
return route + ASTRO_PAGE_KEY_SEPARATOR + componentPath;
}
function getVirtualModulePageName(virtualModulePrefix, path) {
const extension = extname(path);
return virtualModulePrefix + (extension.startsWith(".") ? path.slice(0, -extension.length) + extension.replace(".", ASTRO_PAGE_EXTENSION_POST_PATTERN) : path);
}
function getPagesFromVirtualModulePageName(internals, virtualModulePrefix, id) {
const path = getComponentFromVirtualModulePageName(virtualModulePrefix, id);
const pages = [];
internals.pagesByKeys.forEach((pageData) => {
if (pageData.component === path) {
pages.push(pageData);
}
});
return pages;
}
function getComponentFromVirtualModulePageName(virtualModulePrefix, id) {
return id.slice(virtualModulePrefix.length).replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, ".");
}
function shouldInlineAsset(assetContent, assetPath, assetsInlineLimit) {
if (typeof assetsInlineLimit === "function") {
const result = assetsInlineLimit(assetPath, Buffer.from(assetContent));
if (result != null) {
return result;
} else {
return Buffer.byteLength(assetContent) < 4096;
}
}
return Buffer.byteLength(assetContent) < Number(assetsInlineLimit);
}
export {
ASTRO_PAGE_EXTENSION_POST_PATTERN,
extendManualChunks,
getPagesFromVirtualModulePageName,
getVirtualModulePageName,
makePageDataKey,
shouldInlineAsset
};