astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
65 lines (64 loc) • 1.77 kB
JavaScript
import { getAssetsPrefix } from "../../assets/utils/getAssetsPrefix.js";
import { fileExtension, joinPaths, prependForwardSlash, slash } from "../../core/path.js";
function createAssetLink(href, base, assetsPrefix, queryParams) {
let url = "";
if (assetsPrefix) {
const pf = getAssetsPrefix(fileExtension(href), assetsPrefix);
url = joinPaths(pf, slash(href));
} else if (base) {
url = prependForwardSlash(joinPaths(base, slash(href)));
} else {
url = href;
}
if (queryParams) {
url += "?" + queryParams.toString();
}
return url;
}
function createStylesheetElement(stylesheet, base, assetsPrefix, queryParams) {
if (stylesheet.type === "inline") {
return {
props: {},
children: stylesheet.content
};
} else {
return {
props: {
rel: "stylesheet",
href: createAssetLink(stylesheet.src, base, assetsPrefix, queryParams)
},
children: ""
};
}
}
function createStylesheetElementSet(stylesheets, base, assetsPrefix, queryParams) {
return new Set(
stylesheets.map((s) => createStylesheetElement(s, base, assetsPrefix, queryParams))
);
}
function createModuleScriptElement(script, base, assetsPrefix, queryParams) {
if (script.type === "external") {
return createModuleScriptElementWithSrc(script.value, base, assetsPrefix, queryParams);
} else {
return {
props: {
type: "module"
},
children: script.value
};
}
}
function createModuleScriptElementWithSrc(src, base, assetsPrefix, queryParams) {
return {
props: {
type: "module",
src: createAssetLink(src, base, assetsPrefix, queryParams)
},
children: ""
};
}
export {
createAssetLink,
createModuleScriptElement,
createStylesheetElementSet
};