UNPKG

@unhead/schema-org

Version:

Unhead Schema.org for Simple and Automated Google Rich Results

318 lines (304 loc) 10.2 kB
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 };