@unhead/schema-org
Version:
Unhead Schema.org for Simple and Automated Google Rich Results
318 lines (304 loc) • 10.2 kB
JavaScript
import { d as defineSchemaOrgResolver, a6 as setIfEmpty, a7 as idReference, e as resolveRelation, af as resolveAsGraphKey, a9 as IdentityId, a8 as resolvableDateToIso, ag as prefixId, a5 as imageResolver, aa as resolveDefaultType, ad as resolveWithBase, ac as asArray, ah as trimLength } from '../shared/schema-org.Cp6bpwL2.mjs';
import { withoutTrailingSlash } from 'ufo';
import { listItemResolver } from './index16.mjs';
import { addressResolver } from './index28.mjs';
import { searchActionResolver } from './index40.mjs';
import { readActionResolver } from './index39.mjs';
const PrimaryBreadcrumbId = "#breadcrumb";
const breadcrumbResolver = defineSchemaOrgResolver({
defaults: {
"@type": "BreadcrumbList"
},
idPrefix: ["url", PrimaryBreadcrumbId],
resolve(breadcrumb, ctx) {
if (breadcrumb.itemListElement) {
let index = 1;
breadcrumb.itemListElement = resolveRelation(breadcrumb.itemListElement, ctx, listItemResolver, {
array: true,
afterResolve(node) {
setIfEmpty(node, "position", index++);
}
});
}
return breadcrumb;
},
resolveRootNode(node, { find }) {
const webPage = find(PrimaryWebPageId);
if (webPage)
setIfEmpty(webPage, "breadcrumb", idReference(node));
}
});
const index$5 = {
__proto__: null,
PrimaryBreadcrumbId: PrimaryBreadcrumbId,
breadcrumbResolver: breadcrumbResolver
};
const PrimaryWebSiteId = "#website";
const webSiteResolver = defineSchemaOrgResolver({
defaults: {
"@type": "WebSite"
},
inheritMeta: [
"inLanguage",
{ meta: "host", key: "url" }
],
idPrefix: ["host", PrimaryWebSiteId],
resolve(node, ctx) {
node.potentialAction = resolveRelation(node.potentialAction, ctx, searchActionResolver, {
array: true
});
node.publisher = resolveRelation(node.publisher, ctx);
node.dateModified = resolvableDateToIso(node.dateModified);
node.datePublished = resolvableDateToIso(node.datePublished);
return node;
},
resolveRootNode(node, { find }) {
if (resolveAsGraphKey(node["@id"]) === PrimaryWebSiteId) {
const identity = find(IdentityId);
if (identity)
setIfEmpty(node, "publisher", idReference(identity));
const webPage = find(PrimaryWebPageId);
if (webPage)
setIfEmpty(webPage, "isPartOf", idReference(node));
}
return node;
}
});
const index$4 = {
__proto__: null,
PrimaryWebSiteId: PrimaryWebSiteId,
searchActionResolver: searchActionResolver,
webSiteResolver: webSiteResolver
};
const organizationResolver = defineSchemaOrgResolver({
defaults: {
"@type": "Organization"
},
idPrefix: ["host", IdentityId],
inheritMeta: [
{ meta: "host", key: "url" }
],
resolve(node, ctx) {
resolveDefaultType(node, "Organization");
node.address = resolveRelation(node.address, ctx, addressResolver);
return node;
},
resolveRootNode(node, ctx) {
const isIdentity = resolveAsGraphKey(node["@id"]) === IdentityId;
const webPage = ctx.find(PrimaryWebPageId);
if (node.logo && isIdentity) {
if (!ctx.find("#organization")) {
const logoNode = resolveRelation(node.logo, ctx, imageResolver, {
root: true,
afterResolve(logo) {
logo["@id"] = prefixId(ctx.meta.host, "#logo");
setIfEmpty(logo, "caption", node.name);
}
});
if (webPage && logoNode)
setIfEmpty(webPage, "primaryImageOfPage", idReference(logoNode));
ctx.nodes.push({
// we want to make a simple node that has the essentials, this will allow parent nodes to inject
// as well without inserting invalid data (i.e LocalBusiness operatingHours)
"@type": "Organization",
"name": node.name,
"url": node.url,
"sameAs": node.sameAs,
// 'image': idReference(logoNode),
"address": node.address,
// needs to be a URL
"logo": resolveRelation(node.logo, ctx, imageResolver, { root: false }).url,
"_priority": -1,
"@id": prefixId(ctx.meta.host, "#organization")
// avoid the id so nothing can link to it
});
}
delete node.logo;
}
if (isIdentity && webPage)
setIfEmpty(webPage, "about", idReference(node));
const webSite = ctx.find(PrimaryWebSiteId);
if (webSite)
setIfEmpty(webSite, "publisher", idReference(node));
}
});
const index$3 = {
__proto__: null,
organizationResolver: organizationResolver
};
const PrimaryWebPageId = "#webpage";
const webPageResolver = defineSchemaOrgResolver({
defaults({ meta }) {
const endPath = withoutTrailingSlash(meta.url.substring(meta.url.lastIndexOf("/") + 1));
let type = "WebPage";
switch (endPath) {
case "about":
case "about-us":
type = "AboutPage";
break;
case "search":
type = "SearchResultsPage";
break;
case "checkout":
type = "CheckoutPage";
break;
case "contact":
case "get-in-touch":
case "contact-us":
type = "ContactPage";
break;
case "faq":
type = "FAQPage";
break;
}
const defaults = {
"@type": type
};
return defaults;
},
idPrefix: ["url", PrimaryWebPageId],
inheritMeta: [
{ meta: "title", key: "name" },
"description",
"datePublished",
"dateModified",
"url"
],
resolve(node, ctx) {
node.dateModified = resolvableDateToIso(node.dateModified);
node.datePublished = resolvableDateToIso(node.datePublished);
resolveDefaultType(node, "WebPage");
node.about = resolveRelation(node.about, ctx, organizationResolver);
node.breadcrumb = resolveRelation(node.breadcrumb, ctx, breadcrumbResolver);
node.author = resolveRelation(node.author, ctx, personResolver);
node.primaryImageOfPage = resolveRelation(node.primaryImageOfPage, ctx, imageResolver);
node.potentialAction = resolveRelation(node.potentialAction, ctx, readActionResolver);
if (node["@type"] === "WebPage" && ctx.meta.url) {
setIfEmpty(node, "potentialAction", [
{
"@type": "ReadAction",
"target": [ctx.meta.url]
}
]);
}
return node;
},
resolveRootNode(webPage, { find, meta }) {
const identity = find(IdentityId);
const webSite = find(PrimaryWebSiteId);
const logo = find("#logo");
if (identity && meta.url === meta.host)
setIfEmpty(webPage, "about", idReference(identity));
if (logo)
setIfEmpty(webPage, "primaryImageOfPage", idReference(logo));
if (webSite)
setIfEmpty(webPage, "isPartOf", idReference(webSite));
const breadcrumb = find(PrimaryBreadcrumbId);
if (breadcrumb)
setIfEmpty(webPage, "breadcrumb", idReference(breadcrumb));
return webPage;
}
});
const index$2 = {
__proto__: null,
PrimaryWebPageId: PrimaryWebPageId,
readActionResolver: readActionResolver,
webPageResolver: webPageResolver
};
const personResolver = defineSchemaOrgResolver({
cast(node) {
if (typeof node === "string") {
return {
name: node
};
}
return node;
},
defaults: {
"@type": "Person"
},
idPrefix: ["host", IdentityId],
resolve(node, ctx) {
if (node.url)
node.url = resolveWithBase(ctx.meta.host, node.url);
return node;
},
resolveRootNode(node, { find, meta }) {
if (resolveAsGraphKey(node["@id"]) === IdentityId) {
setIfEmpty(node, "url", meta.host);
const webPage = find(PrimaryWebPageId);
if (webPage)
setIfEmpty(webPage, "about", idReference(node));
const webSite = find(PrimaryWebSiteId);
if (webSite)
setIfEmpty(webSite, "publisher", idReference(node));
}
const article = find(PrimaryArticleId);
if (article)
setIfEmpty(article, "author", idReference(node));
}
});
const index$1 = {
__proto__: null,
personResolver: personResolver
};
const PrimaryArticleId = "#article";
const articleResolver = defineSchemaOrgResolver({
defaults: {
"@type": "Article"
},
inheritMeta: [
"inLanguage",
"description",
"image",
"dateModified",
"datePublished",
{ meta: "title", key: "headline" }
],
idPrefix: ["url", PrimaryArticleId],
resolve(node, ctx) {
node.author = resolveRelation(node.author, ctx, personResolver, {
root: true
});
node.publisher = resolveRelation(node.publisher, ctx);
node.dateModified = resolvableDateToIso(node.dateModified);
node.datePublished = resolvableDateToIso(node.datePublished);
resolveDefaultType(node, "Article");
node.headline = trimLength(node.headline, 110);
return node;
},
resolveRootNode(node, { find, meta }) {
const webPage = find(PrimaryWebPageId);
const identity = find(IdentityId);
if (node.image && !node.thumbnailUrl) {
const firstImage = asArray(node.image)[0];
if (typeof firstImage === "string")
setIfEmpty(node, "thumbnailUrl", resolveWithBase(meta.host, firstImage));
else if (firstImage?.["@id"])
setIfEmpty(node, "thumbnailUrl", find(firstImage["@id"])?.url);
}
if (identity) {
setIfEmpty(node, "publisher", idReference(identity));
setIfEmpty(node, "author", idReference(identity));
}
if (webPage) {
setIfEmpty(node, "isPartOf", idReference(webPage));
setIfEmpty(node, "mainEntityOfPage", idReference(webPage));
setIfEmpty(webPage, "potentialAction", [
{
"@type": "ReadAction",
"target": [meta.url]
}
]);
setIfEmpty(webPage, "dateModified", node.dateModified);
setIfEmpty(webPage, "datePublished", node.datePublished);
}
return node;
}
});
const index = {
__proto__: null,
PrimaryArticleId: PrimaryArticleId,
articleResolver: articleResolver
};
export { PrimaryArticleId as P, articleResolver as a, PrimaryBreadcrumbId as b, breadcrumbResolver as c, PrimaryWebPageId as d, PrimaryWebSiteId as e, webSiteResolver as f, index$4 as g, index$3 as h, index$5 as i, index$2 as j, index$1 as k, index as l, organizationResolver as o, personResolver as p, webPageResolver as w };