@unhead/schema-org
Version:
Unhead Schema.org for Simple and Automated Google Rich Results
83 lines (76 loc) • 3.02 kB
JavaScript
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 };