UNPKG

@unhead/schema-org

Version:

Unhead Schema.org for Simple and Automated Google Rich Results

83 lines (76 loc) 3.02 kB
import { withBase } from 'ufo'; import { d as defineSchemaOrgResolver, e as resolveRelation, a6 as setIfEmpty, ad as resolveWithBase, a8 as resolvableDateToIso } from '../shared/schema-org.Cp6bpwL2.mjs'; import { m as monetaryAmountResolver, q as quantitativeValueResolver } from '../shared/schema-org.Dg61qWpa.mjs'; import 'unhead/plugins'; import 'unhead/utils'; const merchantReturnPolicyResolver = defineSchemaOrgResolver({ defaults: { "@type": "MerchantReturnPolicy" }, resolve(node, ctx) { if (node.returnPolicyCategory) node.returnPolicyCategory = withBase(node.returnPolicyCategory, "https://schema.org/"); if (node.returnFees) node.returnFees = withBase(node.returnFees, "https://schema.org/"); if (node.returnMethod) node.returnMethod = withBase(node.returnMethod, "https://schema.org/"); node.returnShippingFeesAmount = resolveRelation(node.returnShippingFeesAmount, ctx, monetaryAmountResolver); return node; } }); const definedRegionResolver = defineSchemaOrgResolver({ defaults: { "@type": "DefinedRegion" } }); const shippingDeliveryTimeResolver = defineSchemaOrgResolver({ defaults: { "@type": "ShippingDeliveryTime" }, resolve(node, ctx) { node.handlingTime = resolveRelation(node.handlingTime, ctx, quantitativeValueResolver); node.transitTime = resolveRelation(node.transitTime, ctx, quantitativeValueResolver); return node; } }); const offerShippingDetailsResolver = defineSchemaOrgResolver({ defaults: { "@type": "OfferShippingDetails" }, resolve(node, ctx) { node.deliveryTime = resolveRelation(node.deliveryTime, ctx, shippingDeliveryTimeResolver); node.shippingDestination = resolveRelation(node.shippingDestination, ctx, definedRegionResolver); node.shippingRate = resolveRelation(node.shippingRate, ctx, monetaryAmountResolver); return node; } }); const offerResolver = defineSchemaOrgResolver({ cast(node) { if (typeof node === "number" || typeof node === "string") { return { price: node }; } return node; }, defaults: { "@type": "Offer", "availability": "InStock" }, resolve(node, ctx) { setIfEmpty(node, "priceCurrency", ctx.meta.currency); setIfEmpty(node, "priceValidUntil", new Date(Date.UTC((/* @__PURE__ */ new Date()).getFullYear() + 1, 12, -1, 0, 0, 0))); if (node.url) resolveWithBase(ctx.meta.host, node.url); if (node.availability) node.availability = withBase(node.availability, "https://schema.org/"); if (node.itemCondition) node.itemCondition = withBase(node.itemCondition, "https://schema.org/"); if (node.priceValidUntil) node.priceValidUntil = resolvableDateToIso(node.priceValidUntil); node.hasMerchantReturnPolicy = resolveRelation(node.hasMerchantReturnPolicy, ctx, merchantReturnPolicyResolver); node.shippingDetails = resolveRelation(node.shippingDetails, ctx, offerShippingDetailsResolver); return node; } }); export { offerResolver };