156 lines
4.5 KiB
JavaScript
156 lines
4.5 KiB
JavaScript
import { d as defineHeadPlugin } from './unhead.CApf5sj3.mjs';
|
|
import { s as sortTags } from './unhead.DZbvapt-.mjs';
|
|
import { p as processTemplateParams } from './unhead.kVuXtrDW.mjs';
|
|
|
|
const formatKey = (k) => !k.includes(":key") ? k.split(":").join(":key:") : k;
|
|
const AliasSortingPlugin = defineHeadPlugin({
|
|
key: "aliasSorting",
|
|
hooks: {
|
|
"tags:resolve": (ctx) => {
|
|
let m = false;
|
|
for (const t of ctx.tags) {
|
|
const p = t.tagPriority;
|
|
if (!p)
|
|
continue;
|
|
const s = String(p);
|
|
if (s.startsWith("before:")) {
|
|
const k = formatKey(s.slice(7));
|
|
const l = ctx.tagMap.get(k);
|
|
if (l) {
|
|
if (typeof l.tagPriority === "number")
|
|
t.tagPriority = l.tagPriority;
|
|
t._p = l._p - 1;
|
|
m = true;
|
|
}
|
|
} else if (s.startsWith("after:")) {
|
|
const k = formatKey(s.slice(6));
|
|
const l = ctx.tagMap.get(k);
|
|
if (l) {
|
|
if (typeof l.tagPriority === "number")
|
|
t.tagPriority = l.tagPriority;
|
|
t._p = l._p + 1;
|
|
m = true;
|
|
}
|
|
}
|
|
}
|
|
if (m)
|
|
ctx.tags = ctx.tags.sort(sortTags);
|
|
}
|
|
}
|
|
});
|
|
|
|
const DeprecationsPlugin = /* @__PURE__ */ defineHeadPlugin({
|
|
key: "deprecations",
|
|
hooks: {
|
|
"entries:normalize": ({ tags }) => {
|
|
for (const tag of tags) {
|
|
if (tag.props.children) {
|
|
tag.innerHTML = tag.props.children;
|
|
delete tag.props.children;
|
|
}
|
|
if (tag.props.hid) {
|
|
tag.key = tag.props.hid;
|
|
delete tag.props.hid;
|
|
}
|
|
if (tag.props.vmid) {
|
|
tag.key = tag.props.vmid;
|
|
delete tag.props.vmid;
|
|
}
|
|
if (tag.props.body) {
|
|
tag.tagPosition = "bodyClose";
|
|
delete tag.props.body;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
async function walkPromises(v) {
|
|
const type = typeof v;
|
|
if (type === "function") {
|
|
return v;
|
|
}
|
|
if (v instanceof Promise) {
|
|
return await v;
|
|
}
|
|
if (Array.isArray(v)) {
|
|
return await Promise.all(v.map((r) => walkPromises(r)));
|
|
}
|
|
if (v?.constructor === Object) {
|
|
const next = {};
|
|
for (const key of Object.keys(v)) {
|
|
next[key] = await walkPromises(v[key]);
|
|
}
|
|
return next;
|
|
}
|
|
return v;
|
|
}
|
|
const PromisesPlugin = /* @__PURE__ */ defineHeadPlugin({
|
|
key: "promises",
|
|
hooks: {
|
|
"entries:resolve": async (ctx) => {
|
|
const promises = [];
|
|
for (const k in ctx.entries) {
|
|
if (!ctx.entries[k]._promisesProcessed) {
|
|
promises.push(
|
|
walkPromises(ctx.entries[k].input).then((val) => {
|
|
ctx.entries[k].input = val;
|
|
ctx.entries[k]._promisesProcessed = true;
|
|
})
|
|
);
|
|
}
|
|
}
|
|
await Promise.all(promises);
|
|
}
|
|
}
|
|
});
|
|
|
|
const SupportedAttrs = {
|
|
meta: "content",
|
|
link: "href",
|
|
htmlAttrs: "lang"
|
|
};
|
|
const contentAttrs = ["innerHTML", "textContent"];
|
|
const TemplateParamsPlugin = /* @__PURE__ */ defineHeadPlugin((head) => {
|
|
return {
|
|
key: "template-params",
|
|
hooks: {
|
|
"tags:resolve": ({ tagMap, tags }) => {
|
|
const params = tagMap.get("templateParams")?.props || {};
|
|
const sep = params.separator || "|";
|
|
delete params.separator;
|
|
params.pageTitle = processTemplateParams(
|
|
// find templateParams
|
|
params.pageTitle || head._title || "",
|
|
params,
|
|
sep
|
|
);
|
|
for (const tag of tags) {
|
|
if (tag.processTemplateParams === false) {
|
|
continue;
|
|
}
|
|
const v = SupportedAttrs[tag.tag];
|
|
if (v && typeof tag.props[v] === "string") {
|
|
tag.props[v] = processTemplateParams(tag.props[v], params, sep);
|
|
} else if (tag.processTemplateParams || tag.tag === "titleTemplate" || tag.tag === "title") {
|
|
for (const p of contentAttrs) {
|
|
if (typeof tag[p] === "string")
|
|
tag[p] = processTemplateParams(tag[p], params, sep, tag.tag === "script" && tag.props.type.endsWith("json"));
|
|
}
|
|
}
|
|
}
|
|
head._templateParams = params;
|
|
head._separator = sep;
|
|
},
|
|
"tags:afterResolve": ({ tagMap }) => {
|
|
const title = tagMap.get("title");
|
|
if (title?.textContent && title.processTemplateParams !== false) {
|
|
title.textContent = processTemplateParams(title.textContent, head._templateParams, head._separator);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
});
|
|
|
|
export { AliasSortingPlugin as A, DeprecationsPlugin as D, PromisesPlugin as P, TemplateParamsPlugin as T };
|