@squarespace/template-engine
Advanced tools
| [17, 1, [ | ||
| [6, "@originalPriceText", [["localizedStrings", "originalPriceText"]], 0], | ||
| [0, "\n"], | ||
| [6, "@salePriceText", [["localizedStrings", "salePriceText"]], 0], | ||
| [0, "\n\n<div class=\"product-price\">\n"], | ||
| [8, [], [["formattedFromPrice"]], [ | ||
| [1, [["fromText"]], [["message", [["fromPrice:formattedFromPrice", "price:formattedFromPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| [0, "\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedSalePrice"]], [ | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@salePriceText"]], [ | ||
| [1, [["@salePriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Sale Price:"] | ||
| ], 3]], | ||
| [0, "</span>"], | ||
| [1, [["formattedSalePriceText"]], [["message", [["price:formattedSalePrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| 15, | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@originalPriceText"]], [ | ||
| [1, [["@originalPriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Original Price:"] | ||
| ], 3]], | ||
| [0, "</span><span class=\"original-price\">"], | ||
| [1, [["formattedNormalPriceText"]], [["message", [["price:formattedNormalPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| [0, "</span>\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedNormalPrice"]], [ | ||
| [1, [["formattedNormalPriceText"]], [["message", [["price:formattedNormalPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]] | ||
| ], 3] | ||
| ], 3]] | ||
| ], 3]], | ||
| [0, "\n</div>"] | ||
| ], 18] |
| [17, 1, [ | ||
| [6, "@originalPriceText", [["localizedStrings", "originalPriceText"]], 0], | ||
| [0, "\n"], | ||
| [6, "@salePriceText", [["localizedStrings", "salePriceText"]], 0], | ||
| [0, "\n"], | ||
| [11, "\n CommerceFormatter will provide from-price, sale-price and normal-price.\n The below will render from-price first if it exists (> 1 variants),\n sale-price next if from price doesn't exists,\n normal-price if both from-price and sale-price doesn't exists.\n", 1], | ||
| [0, "\n<div class=\"subscription-price\">\n"], | ||
| [8, [], [["formattedFromPrice"]], [ | ||
| [1, [["fromText"]], [["message", [["fromPrice:formattedFromPrice"], " "]]]], | ||
| [0, "\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedSubscriptionSalePrice"]], [ | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@salePriceText"]], [ | ||
| [1, [["@salePriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Sale Price:"] | ||
| ], 3]], | ||
| [0, "</span>"], | ||
| [1, [["formattedSubscriptionSalePriceText"]], [["message", [["price:formattedSubscriptionSalePrice"], " "]]]], | ||
| 15, | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@originalPriceText"]], [ | ||
| [1, [["@originalPriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Original Price:"] | ||
| ], 3]], | ||
| [0, "</span><span class=\"original-price\">"], | ||
| [1, [["formattedNormalSubscriptionPriceText"]], [["message", [["price:formattedNormalSubscriptionPrice"], " "]]]], | ||
| [0, "</span>\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedNormalSubscriptionPrice"]], [ | ||
| [1, [["formattedNormalSubscriptionPriceText"]], [["message", [["price:formattedNormalSubscriptionPrice"], " "]]]] | ||
| ], 3] | ||
| ], 3]] | ||
| ], 3]], | ||
| [0, "\n</div>"] | ||
| ], 18] |
| [17, 1, [ | ||
| [6, "@originalPriceText", [["localizedStrings", "originalPriceText"]], 0], | ||
| [0, "\n"], | ||
| [6, "@salePriceText", [["localizedStrings", "salePriceText"]], 0], | ||
| [0, "\n\n<div class=\"product-price\">\n"], | ||
| [8, [], [["formattedFromPrice"]], [ | ||
| [1, [["fromText"]], [["message", [["fromPrice:formattedFromPrice", "price:formattedFromPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| [0, "\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedSalePrice"]], [ | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@salePriceText"]], [ | ||
| [1, [["@salePriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Sale Price:"] | ||
| ], 3]], | ||
| [0, "</span>"], | ||
| [1, [["formattedSalePriceText"]], [["message", [["price:formattedSalePrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| 15, | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@originalPriceText"]], [ | ||
| [1, [["@originalPriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Original Price:"] | ||
| ], 3]], | ||
| [0, "</span><span class=\"original-price\">"], | ||
| [1, [["formattedNormalPriceText"]], [["message", [["price:formattedNormalPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]], | ||
| [0, "</span>\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedNormalPrice"]], [ | ||
| [1, [["formattedNormalPriceText"]], [["message", [["price:formattedNormalPrice", "billingPeriodValue:billingPeriodValue", "duration:duration"], " "]]]] | ||
| ], 3] | ||
| ], 3]] | ||
| ], 3]], | ||
| [0, "\n</div>"] | ||
| ], 18] |
| [17, 1, [ | ||
| [6, "@originalPriceText", [["localizedStrings", "originalPriceText"]], 0], | ||
| [0, "\n"], | ||
| [6, "@salePriceText", [["localizedStrings", "salePriceText"]], 0], | ||
| [0, "\n"], | ||
| [11, "\n CommerceFormatter will provide from-price, sale-price and normal-price.\n The below will render from-price first if it exists (> 1 variants),\n sale-price next if from price doesn't exists,\n normal-price if both from-price and sale-price doesn't exists.\n", 1], | ||
| [0, "\n<div class=\"subscription-price\">\n"], | ||
| [8, [], [["formattedFromPrice"]], [ | ||
| [1, [["fromText"]], [["message", [["fromPrice:formattedFromPrice"], " "]]]], | ||
| [0, "\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedSubscriptionSalePrice"]], [ | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@salePriceText"]], [ | ||
| [1, [["@salePriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Sale Price:"] | ||
| ], 3]], | ||
| [0, "</span>"], | ||
| [1, [["formattedSubscriptionSalePriceText"]], [["message", [["price:formattedSubscriptionSalePrice"], " "]]]], | ||
| 15, | ||
| [0, "<span class=\"visually-hidden v6-visually-hidden\">"], | ||
| [8, [], [["@originalPriceText"]], [ | ||
| [1, [["@originalPriceText"]], [["htmltag"]]] | ||
| ], [7, 0, 0, [ | ||
| [0, "Original Price:"] | ||
| ], 3]], | ||
| [0, "</span><span class=\"original-price\">"], | ||
| [1, [["formattedNormalSubscriptionPriceText"]], [["message", [["price:formattedNormalSubscriptionPrice"], " "]]]], | ||
| [0, "</span>\n"] | ||
| ], [7, 0, 0, [ | ||
| [8, [], [["formattedNormalSubscriptionPrice"]], [ | ||
| [1, [["formattedNormalSubscriptionPriceText"]], [["message", [["price:formattedNormalSubscriptionPrice"], " "]]]] | ||
| ], 3] | ||
| ], 3]] | ||
| ], 3]], | ||
| [0, "\n</div>"] | ||
| ], 18] |
| import { Context } from '../context'; | ||
| import { Node } from '../node'; | ||
| import { Variable } from '../variable'; | ||
@@ -31,7 +32,30 @@ import { Formatter, FormatterTable } from '../plugin'; | ||
| } | ||
| type ProductPriceTemplateData = { | ||
| fromText?: string; | ||
| formattedFromPrice?: string; | ||
| formattedSalePriceText?: string; | ||
| formattedSalePrice?: string; | ||
| formattedNormalPriceText?: string; | ||
| formattedNormalPrice?: string; | ||
| billingPeriodValue?: number; | ||
| duration?: number; | ||
| }; | ||
| export declare class ProductPriceFormatter extends Formatter { | ||
| private static BILLING_PERIOD_MONTHLY; | ||
| private static BILLING_PERIOD_WEEKLY; | ||
| private static BILLING_PERIOD_YEARLY; | ||
| private static PER_YEAR; | ||
| apply(args: string[], vars: Variable[], ctx: Context): void; | ||
| resolveTemplateVariablesForOTPProduct(args: string[], ctx: Context, productNode: Node, templateData: ProductPriceTemplateData): void; | ||
| resolveTemplateVariablesForSubscriptionProduct(args: string[], ctx: Context, productNode: Node, templateData: ProductPriceTemplateData): void; | ||
| defaultSubscriptionPriceString(productNode: Node): string; | ||
| getSubscriptionPlanBillingPeriodNode(item: Node): Node; | ||
| getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node): string; | ||
| getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node): number; | ||
| getNumBillingCyclesFromSubscriptionPlanNode(item: Node): number; | ||
| } | ||
| export declare class SubscriptionPriceFormatter extends Formatter { | ||
| apply(args: string[], vars: Variable[], ctx: Context): void; | ||
| getSalePriceMoney(pricingOption: Node, args: string[], ctx: Context): string; | ||
| getPriceMoney(pricingOption: Node, args: string[], ctx: Context): string; | ||
| } | ||
@@ -68,1 +92,2 @@ export declare class ProductQuickViewFormatter extends Formatter { | ||
| export declare const COMMERCE_FORMATTERS: FormatterTable; | ||
| export {}; |
@@ -16,2 +16,3 @@ var __extends = (this && this.__extends) || (function () { | ||
| })(); | ||
| var _a; | ||
| import { ProductType } from './enums'; | ||
@@ -29,5 +30,7 @@ import { Node } from '../node'; | ||
| import productCheckoutTemplate from './templates/product-checkout.json'; | ||
| import productPriceTemplate from './templates/product-price.json'; | ||
| import productRestockNotificationTemplate from './templates/product-restock-notification.json'; | ||
| import productScarcityTemplate from './templates/product-scarcity.json'; | ||
| import quantityInputTemplate from './templates/quantity-input.json'; | ||
| import subscriptionPriceTemplate from './templates/subscription-price.json'; | ||
| import summaryFormFieldAddressTemplate from './templates/summary-form-field-address.json'; | ||
@@ -42,2 +45,3 @@ import summaryFormFieldCheckboxTemplate from './templates/summary-form-field-checkbox.json'; | ||
| var ZERO = parseDecimal('0'); | ||
| var PRODUCT_PRICE_FROM_TEXT_PATH = ['localizedStrings', 'productPriceFromText']; | ||
| var AddToCartButtonFormatter = /** @class */ (function (_super) { | ||
@@ -201,5 +205,132 @@ __extends(AddToCartButtonFormatter, _super); | ||
| ProductPriceFormatter.prototype.apply = function (args, vars, ctx) { | ||
| // TODO: product-price impl | ||
| vars[0].set('not yet implemented'); | ||
| var first = vars[0]; | ||
| var node = first.node; | ||
| var templateData = {}; | ||
| if (commerceutil.isSubscribable(node)) { | ||
| this.resolveTemplateVariablesForSubscriptionProduct(args, ctx, node, templateData); | ||
| } | ||
| else if (commerceutil.getProductType(node) !== ProductType.UNDEFINED) { | ||
| this.resolveTemplateVariablesForOTPProduct(args, ctx, node, templateData); | ||
| } | ||
| var priceInfo = executeTemplate(ctx, productPriceTemplate, new Node(templateData), true); | ||
| first.set(priceInfo); | ||
| }; | ||
| ProductPriceFormatter.prototype.resolveTemplateVariablesForOTPProduct = function (args, ctx, productNode, templateData) { | ||
| if (commerceutil.hasVariedPrices(productNode)) { | ||
| var productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH); | ||
| templateData.fromText = !productPriceFromTextNode.isMissing() ? | ||
| productPriceFromTextNode.asString() : | ||
| 'from {fromPrice}'; | ||
| templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx); | ||
| } | ||
| if (commerceutil.isOnSale(productNode)) { | ||
| templateData.formattedSalePriceText = '{price}'; | ||
| templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx); | ||
| } | ||
| templateData.formattedNormalPriceText = '{price}'; | ||
| templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx); | ||
| }; | ||
| ProductPriceFormatter.prototype.resolveTemplateVariablesForSubscriptionProduct = function (args, ctx, productNode, templateData) { | ||
| var billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode); | ||
| if (billingPeriodNode.isMissing()) { | ||
| var productPriceUnavailableTextNode = ctx.resolve(['localizedStrings', 'productPriceUnavailable']); | ||
| templateData.fromText = !productPriceUnavailableTextNode.isMissing() ? | ||
| productPriceUnavailableTextNode.asString() : | ||
| 'Unavailable'; | ||
| templateData.formattedFromPrice = 'true'; | ||
| return; | ||
| } | ||
| var hasMultiplePrices = commerceutil.hasVariedPrices(productNode); | ||
| var billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var durationValue = billingPeriodValue * this.getNumBillingCyclesFromSubscriptionPlanNode(productNode); | ||
| var durationUnit = billingPeriodUnit; | ||
| var PER_YEAR = _b.PER_YEAR; | ||
| // If the duration is a multiple of 52 weeks or 12 months, convert to years. | ||
| // Otherwise, use the billing period unit for the duration unit. | ||
| if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) { | ||
| durationValue /= PER_YEAR[durationUnit]; | ||
| durationUnit = _b.BILLING_PERIOD_YEARLY; | ||
| } | ||
| templateData.billingPeriodValue = billingPeriodValue; | ||
| templateData.duration = durationValue; | ||
| // This string needs to match the correct translation template in v6 products-2.0-en-US.json. | ||
| var localizedStringKey = 'productPrice__' + | ||
| "".concat(hasMultiplePrices ? 'multiplePrices' : 'singlePrice', "__") + | ||
| "".concat(billingPeriodValue === 1 ? '1' : 'n').concat(stringutil.capitalizeFirst(billingPeriodUnit), "ly__"); | ||
| if (durationValue == 0) { | ||
| localizedStringKey += 'indefinite'; | ||
| } | ||
| else { | ||
| localizedStringKey += "limited__".concat(durationValue === 1 ? '1' : 'n').concat(stringutil.capitalizeFirst(durationUnit), "s"); | ||
| } | ||
| var localizedStringNode = ctx.resolve(['localizedStrings', localizedStringKey]); | ||
| var templateForPrice = !localizedStringNode.isMissing() ? | ||
| localizedStringNode.asString() : | ||
| this.defaultSubscriptionPriceString(productNode); | ||
| if (hasMultiplePrices) { | ||
| templateData.fromText = templateForPrice; | ||
| templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx); | ||
| } | ||
| if (commerceutil.isOnSale(productNode)) { | ||
| templateData.formattedSalePriceText = templateForPrice; | ||
| templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx); | ||
| } | ||
| templateData.formattedNormalPriceText = templateForPrice; | ||
| templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx); | ||
| }; | ||
| // TODO: This is shitty. The formatter should, if necessary, look up the English string and use it. | ||
| // NOTE: ^ This TODO was taken from the corresponding function in CommerceFormatters in template-compiler: | ||
| // https://github.com/Squarespace/template-compiler/blob/main/core/src/main/java/com/squarespace/template/plugins/platform/CommerceFormatters.java/#L438 | ||
| ProductPriceFormatter.prototype.defaultSubscriptionPriceString = function (productNode) { | ||
| var billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode); | ||
| var hasMultiplePrices = commerceutil.hasVariedPrices(productNode); | ||
| var billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var billingPeriodPlural = billingPeriodValue > 1; | ||
| var billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var numBillingCycles = this.getNumBillingCyclesFromSubscriptionPlanNode(productNode); | ||
| var durationValue = billingPeriodValue * numBillingCycles; | ||
| var durationUnit = billingPeriodUnit; | ||
| var PER_YEAR = _b.PER_YEAR; | ||
| // If the duration is a multiple of 52 weeks or 12 months, convert to years. | ||
| // Otherwise, use the billing period unit for the duration unit. | ||
| if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) { | ||
| durationValue /= PER_YEAR[durationUnit]; | ||
| durationUnit = _b.BILLING_PERIOD_YEARLY; | ||
| } | ||
| var subPriceString = (hasMultiplePrices ? 'from ' : '') + | ||
| '{price} every ' + | ||
| (billingPeriodPlural ? '{billingPeriodValue} ' : '') + | ||
| billingPeriodUnit.toLowerCase() + | ||
| (billingPeriodPlural ? 's' : ''); | ||
| if (numBillingCycles > 0) { | ||
| subPriceString += ' for {duration} ' + | ||
| durationUnit.toLowerCase() + | ||
| (durationValue === 1 ? '' : 's'); | ||
| } | ||
| return subPriceString; | ||
| }; | ||
| ProductPriceFormatter.prototype.getSubscriptionPlanBillingPeriodNode = function (item) { | ||
| // BillingPeriod is represented as {value, unit} and is the period of time in between recurring billings | ||
| // e.g. {2, MONTH} means a subscriber is billed once every 2 months | ||
| return item.path(['structuredContent', 'subscriptionPlan', 'billingPeriod']); | ||
| }; | ||
| ProductPriceFormatter.prototype.getUnitFromSubscriptionPlanBillingPeriod = function (billingPeriodNode) { | ||
| return billingPeriodNode.path(['unit']).asString(); | ||
| }; | ||
| ProductPriceFormatter.prototype.getValueFromSubscriptionPlanBillingPeriod = function (billingPeriodNode) { | ||
| return billingPeriodNode.path(['value']).asNumber(); | ||
| }; | ||
| ProductPriceFormatter.prototype.getNumBillingCyclesFromSubscriptionPlanNode = function (item) { | ||
| return item.path(['structuredContent', 'subscriptionPlan', 'numBillingCycles']).asNumber(); | ||
| }; | ||
| var _b; | ||
| _b = ProductPriceFormatter; | ||
| ProductPriceFormatter.BILLING_PERIOD_MONTHLY = 'MONTH'; | ||
| ProductPriceFormatter.BILLING_PERIOD_WEEKLY = 'WEEK'; | ||
| ProductPriceFormatter.BILLING_PERIOD_YEARLY = 'YEAR'; | ||
| ProductPriceFormatter.PER_YEAR = (_a = {}, | ||
| _a[_b.BILLING_PERIOD_WEEKLY] = 52, | ||
| _a[_b.BILLING_PERIOD_MONTHLY] = 12, | ||
| _a); | ||
| return ProductPriceFormatter; | ||
@@ -214,9 +345,36 @@ }(Formatter)); | ||
| SubscriptionPriceFormatter.prototype.apply = function (args, vars, ctx) { | ||
| // Because ProductPriceFormatter has been missing impl for a while now | ||
| // I think it's ok if we don't implement SubscriptionPriceFormatter | ||
| // because both formatters would be used together and I don't see | ||
| // when these formatters would ever be rendered client. | ||
| // TODO: subscription-price impl if ProductPriceFormatter (above) is also implemented. | ||
| vars[0].set('not yet implemented'); | ||
| var first = vars[0]; | ||
| var node = first.node; | ||
| var subscriptionResults = {}; | ||
| var pricingOptions = commerceutil.getPricingOptionsAmongLowestVariant(node); | ||
| if (pricingOptions != null && pricingOptions.size() > 0) { | ||
| if (commerceutil.hasVariedPrices(node)) { | ||
| // This will return either salePriceMoney or priceMoney depending on whether the onSale is true or false. | ||
| // That's because this block here is the from {price} so the from price needs to be the lowest possible price | ||
| // taking into if a variant is onSale. | ||
| var subscriptionFromPricingNode = commerceutil.getSubscriptionMoneyFromFirstPricingOptions(pricingOptions); | ||
| var productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH); | ||
| subscriptionResults.fromText = !productPriceFromTextNode.isMissing() ? | ||
| productPriceFromTextNode.asString() : | ||
| 'from {fromPrice}'; | ||
| subscriptionResults.formattedFromPrice = commerceutil.getMoneyString(subscriptionFromPricingNode, args, ctx); | ||
| } | ||
| var firstPricingOption = pricingOptions.get(0); | ||
| var isFirstPricingOptionOnSale = isTruthy(firstPricingOption.path(['onSale'])); | ||
| if (isFirstPricingOptionOnSale) { | ||
| subscriptionResults.formattedSubscriptionSalePriceText = '{price}'; | ||
| subscriptionResults.formattedSubscriptionSalePrice = this.getSalePriceMoney(firstPricingOption, args, ctx); | ||
| } | ||
| subscriptionResults.formattedNormalSubscriptionPriceText = '{price}'; | ||
| subscriptionResults.formattedNormalSubscriptionPrice = this.getPriceMoney(firstPricingOption, args, ctx); | ||
| } | ||
| var subscriptionPriceInfo = executeTemplate(ctx, subscriptionPriceTemplate, new Node(subscriptionResults), true); | ||
| first.set(subscriptionPriceInfo); | ||
| }; | ||
| SubscriptionPriceFormatter.prototype.getSalePriceMoney = function (pricingOption, args, ctx) { | ||
| return commerceutil.getMoneyString(pricingOption.path(['salePriceMoney']), args, ctx); | ||
| }; | ||
| SubscriptionPriceFormatter.prototype.getPriceMoney = function (pricingOption, args, ctx) { | ||
| return commerceutil.getMoneyString(pricingOption.path(['priceMoney']), args, ctx); | ||
| }; | ||
| return SubscriptionPriceFormatter; | ||
@@ -223,0 +381,0 @@ }(Formatter)); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"formatters.commerce.js","sourceRoot":"","sources":["../../src/plugins/formatters.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context } from '../context';\nimport { ProductType } from './enums';\nimport { Node } from '../node';\nimport { Variable } from '../variable';\nimport { RootCode } from '../instructions';\nimport { Formatter, FormatterTable } from '../plugin';\nimport { isTruthy, MISSING_NODE } from '../node';\nimport { executeTemplate } from '../exec';\nimport * as commerceutil from './util.commerce';\nimport * as stringutil from './util.string';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\n// Template imports\nimport addToCartBtnTemplate from './templates/add-to-cart-btn.json';\nimport productCheckoutTemplate from './templates/product-checkout.json';\nimport productRestockNotificationTemplate from './templates/product-restock-notification.json';\nimport productScarcityTemplate from './templates/product-scarcity.json';\nimport quantityInputTemplate from './templates/quantity-input.json';\nimport summaryFormFieldAddressTemplate from './templates/summary-form-field-address.json';\nimport summaryFormFieldCheckboxTemplate from './templates/summary-form-field-checkbox.json';\nimport summaryFormFieldDateTemplate from './templates/summary-form-field-date.json';\nimport summaryFormFieldLikertTemplate from './templates/summary-form-field-likert.json';\nimport summaryFormFieldNameTemplate from './templates/summary-form-field-name.json';\nimport summaryFormFieldPhoneTemplate from './templates/summary-form-field-phone.json';\nimport summaryFormFieldTimeTemplate from './templates/summary-form-field-time.json';\nimport variantsSelectTemplate from './templates/variants-select.json';\n\nconst ZERO = parseDecimal('0');\n\nexport class AddToCartButtonFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, addToCartBtnTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class BookkeeperMoneyFormat extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const region = cldr.General.locale().tag.region();\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n n = n.divide(100);\n const currency = cldr.Numbers.getCurrencyForRegion(region);\n const s = cldr.Numbers.formatCurrency(n, currency);\n first.set(s);\n }\n}\n\nexport class CartQuantityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n let count = 0;\n const entries = first.node.get('entries');\n if (entries.type === Type.ARRAY) {\n for (let i = 0; i < entries.value.length; i++) {\n count += entries.get(i).get('quantity').asNumber();\n }\n }\n const text = `<span class=\"sqs-cart-quantity\">${count}</span>`;\n first.set(text);\n }\n}\n\nexport class CartSubtotalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('deprecated, do not use');\n }\n}\n\nexport class CartUrlFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('/cart');\n }\n}\n\nexport class FromPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getFromPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class PercentageFormatFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const trim = args.filter((a) => a === 'trim').length > 0;\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n const minimumFractionDigits = trim ? 0 : 2;\n const r = cldr?.Numbers.formatDecimal(n, {\n minimumFractionDigits,\n maximumFractionDigits: 3,\n });\n first.set(r);\n }\n}\n\nexport class NormalPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getNormalPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class ProductCheckoutFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, productCheckoutTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class ProductPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n // TODO: product-price impl\n vars[0].set('not yet implemented');\n }\n}\n\nexport class SubscriptionPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n // Because ProductPriceFormatter has been missing impl for a while now\n // I think it's ok if we don't implement SubscriptionPriceFormatter\n // because both formatters would be used together and I don't see\n // when these formatters would ever be rendered client.\n // TODO: subscription-price impl if ProductPriceFormatter (above) is also implemented.\n vars[0].set('not yet implemented');\n }}\n\nexport class ProductQuickViewFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const id = node.get('id').asString();\n let group = args[0] || '';\n let groupNode = node.get(group);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n } else {\n groupNode = ctx.resolve([group]);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n }\n }\n\n let buf = '';\n buf += `<span class=\"sqs-product-quick-view-button\" role=\"button\" tabindex=\"0\" data-id=\"${id}\"`;\n buf += ` data-group=\"${group}\">`;\n\n const text = ctx.resolve(['localizedStrings', 'productQuickViewText']);\n buf += text.isMissing() ? 'Quick View' : text.asString();\n buf += '</span>';\n first.set(buf);\n }\n}\n\nexport class ProductRestockNotificationFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const websiteCtx = ctx.resolve(['website']);\n const productCtx = ctx.resolve(['productMerchandisingContext']);\n const first = vars[0];\n const node = first.node;\n\n const productId = [node.get('id').asString()];\n const product = productCtx.path(productId);\n const obj = {\n product: node.value,\n views: product.path(['restockNotificationViews']).value,\n messages: product.path(['restockNotificationMessages']).value,\n mailingListSignUpEnabled: product.path(['mailingListSignUpEnabled']).value,\n mailingListOptInByDefault: product.path(['mailingListOptInByDefault']).value,\n captchaSiteKey: websiteCtx.path(['captchaSettings', 'siteKey']).value,\n };\n\n const res = executeTemplate(ctx, productRestockNotificationTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n}\n\nexport class ProductScarcityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n if (merchCtx.isMissing()) {\n return;\n }\n\n const first = vars[0];\n const product = first.node;\n const id = product.get('id').asString();\n const productCtx = merchCtx.get(id);\n\n if (!productCtx.isMissing() && productCtx.get('scarcityEnabled').asBoolean()) {\n const obj: any = {\n scarcityTemplateViews: productCtx.get('scarcityTemplateViews').value,\n scarcityText: productCtx.get('scarcityText').value,\n scarcityShownByDefault: productCtx.get('scarcityShownByDefault').value,\n };\n const res = executeTemplate(ctx, productScarcityTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n }\n}\n\nexport class ProductStatusFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n\n const id = node.get('id').asString();\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n let customSoldOutMessage: string = '';\n if (id && !merchCtx.isMissing()) {\n customSoldOutMessage = merchCtx.path([id, 'customSoldOutText']).asString();\n }\n\n if (commerceutil.isSoldOut(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSoldOutText']).asString();\n let buf = `<div class=\"product-mark sold-out\">`;\n buf += stringutil.escapeHtmlAttributes(customSoldOutMessage || text || 'sold out');\n buf += '</div>';\n first.set(buf);\n } else if (commerceutil.isOnSale(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSaleText']).asString();\n let buf = `<div class=\"product-mark sale\">`;\n buf += text || 'sale';\n buf += '</div>';\n first.set(buf);\n } else {\n first.set(MISSING_NODE);\n }\n }\n}\n\nexport class QuantityInputFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const type = commerceutil.getProductType(node);\n const settings = ctx.resolve(['websiteSettings']);\n const multipleQuantityAllowed =\n (type === ProductType.PHYSICAL ||\n (type === ProductType.SERVICE && commerceutil.isMultipleQuantityAllowedForServices(settings))) &&\n !commerceutil.isSubscribable(node);\n const hide = !multipleQuantityAllowed || commerceutil.getTotalStockRemaining(node) <= 1;\n if (hide) {\n first.set(MISSING_NODE);\n return;\n }\n const res = executeTemplate(ctx, quantityInputTemplate as unknown as RootCode, node, false);\n first.set(res);\n }\n}\n\nexport class SalePriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getSalePrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class VariantDescriptorFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const text = commerceutil.getVariantFormat(first.node);\n first.set(text);\n }\n}\n\nexport class VariantsSelectFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n\n const options = commerceutil.getItemVariantOptions(first.node);\n if (options.length === 0) {\n first.set(MISSING_NODE);\n return;\n }\n\n const selectText = this.getSelectText(ctx, first.node);\n const displayText = this.getDisplayText(ctx, first.node);\n const node = ctx.newNode({\n item: first.node.value,\n options,\n selectText,\n displayText,\n });\n\n const text = executeTemplate(ctx, variantsSelectTemplate as unknown as RootCode, node, false);\n first.set(text);\n }\n\n private getDisplayText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated directly before being displayed to the front-end.\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardValueDisplayText']).asString();\n } else {\n fallback = '{name}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n\n private getSelectText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated differently than other products. See COM-4912 for more details\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Select Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardVariantSelectText']).asString();\n } else {\n text = ctx.resolve(['localizedStrings', 'productVariantSelectText']).asString();\n fallback = 'Select {variantName}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n}\n\nconst KEY_PREFIX = 'productAnswerMap';\nconst KEY_STRONGLY_DISAGREE = KEY_PREFIX + 'StronglyDisagree';\nconst KEY_DISAGREE = KEY_PREFIX + 'Disagree';\nconst KEY_NEUTRAL = KEY_PREFIX + 'Neutral';\nconst KEY_AGREE = KEY_PREFIX + 'Agree';\nconst KEY_STRONGLY_AGREE = KEY_PREFIX + 'StronglyAgree';\n\nconst localizeOrDefault = (strings: Node, key: string, defaultValue: string) => {\n const node = strings.get(key);\n return node.type === Type.STRING ? node.value : defaultValue;\n};\n\nconst buildAnswerMap = (strings: Node) => {\n return {\n '-2': localizeOrDefault(strings, KEY_STRONGLY_DISAGREE, 'Strongly Disagree'),\n '-1': localizeOrDefault(strings, KEY_DISAGREE, 'Disagree'),\n '0': localizeOrDefault(strings, KEY_NEUTRAL, 'Neutral'),\n '1': localizeOrDefault(strings, KEY_AGREE, 'Agree'),\n '2': localizeOrDefault(strings, KEY_STRONGLY_AGREE, 'Strongly Agree'),\n };\n};\n\nconst convertLikert = (values: any, answerMap: any) => {\n const result = [];\n const keys = Object.keys(values);\n const defaultValue = answerMap['0'];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const answerKey = values[key];\n const value = answerMap[answerKey];\n result.push({ question: key, answer: value || defaultValue });\n }\n return result;\n};\n\nconst SUMMARY_FORM_FIELD_TEMPLATE_MAP: { [x: string]: RootCode } = {\n address: summaryFormFieldAddressTemplate as unknown as RootCode,\n checkbox: summaryFormFieldCheckboxTemplate as unknown as RootCode,\n date: summaryFormFieldDateTemplate as unknown as RootCode,\n likert: summaryFormFieldLikertTemplate as unknown as RootCode,\n name: summaryFormFieldNameTemplate as unknown as RootCode,\n phone: summaryFormFieldPhoneTemplate as unknown as RootCode,\n time: summaryFormFieldTimeTemplate as unknown as RootCode,\n};\n\nexport class SummaryFormFieldFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const field = first.node;\n\n const localizedStrings = ctx.resolve(['localizedStrings']);\n const type = field.get('type').asString();\n const code = SUMMARY_FORM_FIELD_TEMPLATE_MAP[type];\n\n let value: string | null = null;\n if (code === undefined) {\n value = field.get('value').asString();\n } else {\n let node = field;\n if (type === 'likert') {\n const answerMap = buildAnswerMap(localizedStrings);\n const likert = convertLikert(field.get('values').value, answerMap);\n node = ctx.newNode(likert);\n }\n value = executeTemplate(ctx, code, node, true);\n }\n\n let buf = '<div style=\"font-size:11px; margin-top:3px\">\\n';\n\n buf += ' <span style=\"font-weight:bold;\">';\n buf += field.get('rawTitle').asString();\n buf += ':</span> ';\n if (isTruthy(value)) {\n buf += value;\n } else {\n const text = localizedStrings.get('productSummaryFormNoAnswerText').asString().trim();\n buf += text === '' ? 'N/A' : text;\n }\n buf += '\\n</div>';\n first.set(buf);\n }\n}\n\nexport const COMMERCE_FORMATTERS: FormatterTable = {\n 'add-to-cart-btn': new AddToCartButtonFormatter(),\n 'bookkeeper-money-format': new BookkeeperMoneyFormat(),\n 'cart-quantity': new CartQuantityFormatter(),\n 'cart-subtotal': new CartSubtotalFormatter(),\n 'cart-url': new CartUrlFormatter(),\n 'from-price': new FromPriceFormatter(),\n 'normal-price': new NormalPriceFormatter(),\n 'percentage-format': new PercentageFormatFormatter(),\n 'product-checkout': new ProductCheckoutFormatter(),\n 'product-price': new ProductPriceFormatter(),\n 'subscription-price': new SubscriptionPriceFormatter(),\n 'product-quick-view': new ProductQuickViewFormatter(),\n 'product-restock-notification': new ProductRestockNotificationFormatter(),\n 'product-scarcity': new ProductScarcityFormatter(),\n 'product-status': new ProductStatusFormatter(),\n 'quantity-input': new QuantityInputFormatter(),\n 'sale-price': new SalePriceFormatter(),\n 'summary-form-field': new SummaryFormFieldFormatter(),\n 'variant-descriptor': new VariantDescriptorFormatter(),\n 'variants-select': new VariantsSelectFormatter(),\n};\n"]} | ||
| {"version":3,"file":"formatters.commerce.js","sourceRoot":"","sources":["../../src/plugins/formatters.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context } from '../context';\nimport { ProductType } from './enums';\nimport { Node } from '../node';\nimport { Variable } from '../variable';\nimport { RootCode } from '../instructions';\nimport { Formatter, FormatterTable } from '../plugin';\nimport { isTruthy, MISSING_NODE } from '../node';\nimport { executeTemplate } from '../exec';\nimport * as commerceutil from './util.commerce';\nimport * as stringutil from './util.string';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\n// Template imports\nimport addToCartBtnTemplate from './templates/add-to-cart-btn.json';\nimport productCheckoutTemplate from './templates/product-checkout.json';\nimport productPriceTemplate from './templates/product-price.json';\nimport productRestockNotificationTemplate from './templates/product-restock-notification.json';\nimport productScarcityTemplate from './templates/product-scarcity.json';\nimport quantityInputTemplate from './templates/quantity-input.json';\nimport subscriptionPriceTemplate from './templates/subscription-price.json';\nimport summaryFormFieldAddressTemplate from './templates/summary-form-field-address.json';\nimport summaryFormFieldCheckboxTemplate from './templates/summary-form-field-checkbox.json';\nimport summaryFormFieldDateTemplate from './templates/summary-form-field-date.json';\nimport summaryFormFieldLikertTemplate from './templates/summary-form-field-likert.json';\nimport summaryFormFieldNameTemplate from './templates/summary-form-field-name.json';\nimport summaryFormFieldPhoneTemplate from './templates/summary-form-field-phone.json';\nimport summaryFormFieldTimeTemplate from './templates/summary-form-field-time.json';\nimport variantsSelectTemplate from './templates/variants-select.json';\n\nconst ZERO = parseDecimal('0');\nconst PRODUCT_PRICE_FROM_TEXT_PATH = ['localizedStrings', 'productPriceFromText'];\n\nexport class AddToCartButtonFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, addToCartBtnTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class BookkeeperMoneyFormat extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const region = cldr.General.locale().tag.region();\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n n = n.divide(100);\n const currency = cldr.Numbers.getCurrencyForRegion(region);\n const s = cldr.Numbers.formatCurrency(n, currency);\n first.set(s);\n }\n}\n\nexport class CartQuantityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n let count = 0;\n const entries = first.node.get('entries');\n if (entries.type === Type.ARRAY) {\n for (let i = 0; i < entries.value.length; i++) {\n count += entries.get(i).get('quantity').asNumber();\n }\n }\n const text = `<span class=\"sqs-cart-quantity\">${count}</span>`;\n first.set(text);\n }\n}\n\nexport class CartSubtotalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('deprecated, do not use');\n }\n}\n\nexport class CartUrlFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('/cart');\n }\n}\n\nexport class FromPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getFromPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class PercentageFormatFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const trim = args.filter((a) => a === 'trim').length > 0;\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n const minimumFractionDigits = trim ? 0 : 2;\n const r = cldr?.Numbers.formatDecimal(n, {\n minimumFractionDigits,\n maximumFractionDigits: 3,\n });\n first.set(r);\n }\n}\n\nexport class NormalPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getNormalPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class ProductCheckoutFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, productCheckoutTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\ntype ProductPriceTemplateData = {\n fromText?: string;\n formattedFromPrice?: string;\n formattedSalePriceText?: string;\n formattedSalePrice?: string;\n formattedNormalPriceText?: string;\n formattedNormalPrice?: string;\n billingPeriodValue?: number;\n duration?: number;\n};\n\nexport class ProductPriceFormatter extends Formatter {\n private static BILLING_PERIOD_MONTHLY = 'MONTH';\n private static BILLING_PERIOD_WEEKLY = 'WEEK';\n private static BILLING_PERIOD_YEARLY = 'YEAR';\n private static PER_YEAR = {\n [this.BILLING_PERIOD_WEEKLY]: 52,\n [this.BILLING_PERIOD_MONTHLY]: 12,\n };\n\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { node } = first;\n const templateData: ProductPriceTemplateData = {};\n\n if (commerceutil.isSubscribable(node)) {\n this.resolveTemplateVariablesForSubscriptionProduct(args, ctx, node, templateData);\n } else if (commerceutil.getProductType(node) !== ProductType.UNDEFINED) {\n this.resolveTemplateVariablesForOTPProduct(args, ctx, node, templateData);\n }\n\n const priceInfo = executeTemplate(\n ctx,\n productPriceTemplate as unknown as RootCode,\n new Node(templateData),\n true,\n );\n first.set(priceInfo);\n }\n\n resolveTemplateVariablesForOTPProduct(\n args: string[],\n ctx: Context,\n productNode: Node,\n templateData: ProductPriceTemplateData,\n ) {\n if (commerceutil.hasVariedPrices(productNode)) {\n const productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH);\n\n templateData.fromText = !productPriceFromTextNode.isMissing() ?\n productPriceFromTextNode.asString() :\n 'from {fromPrice}';\n templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx);\n }\n\n if (commerceutil.isOnSale(productNode)) {\n templateData.formattedSalePriceText = '{price}';\n templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx);\n }\n\n templateData.formattedNormalPriceText = '{price}';\n templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx);\n }\n\n resolveTemplateVariablesForSubscriptionProduct(\n args: string[],\n ctx: Context,\n productNode: Node,\n templateData: ProductPriceTemplateData,\n ) {\n const billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode);\n\n if (billingPeriodNode.isMissing()) {\n const productPriceUnavailableTextNode = ctx.resolve(['localizedStrings', 'productPriceUnavailable']);\n \n templateData.fromText = !productPriceUnavailableTextNode.isMissing() ?\n productPriceUnavailableTextNode.asString() :\n 'Unavailable';\n templateData.formattedFromPrice = 'true';\n return;\n }\n\n const hasMultiplePrices = commerceutil.hasVariedPrices(productNode);\n const billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n\n let durationValue = billingPeriodValue * this.getNumBillingCyclesFromSubscriptionPlanNode(productNode);\n let durationUnit = billingPeriodUnit;\n\n const { PER_YEAR } = ProductPriceFormatter;\n\n // If the duration is a multiple of 52 weeks or 12 months, convert to years.\n // Otherwise, use the billing period unit for the duration unit.\n if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) {\n durationValue /= PER_YEAR[durationUnit];\n durationUnit = ProductPriceFormatter.BILLING_PERIOD_YEARLY;\n }\n\n templateData.billingPeriodValue = billingPeriodValue;\n templateData.duration = durationValue;\n\n // This string needs to match the correct translation template in v6 products-2.0-en-US.json.\n let localizedStringKey = 'productPrice__' +\n `${hasMultiplePrices ? 'multiplePrices' : 'singlePrice'}__` +\n `${billingPeriodValue === 1 ? '1' : 'n'}${stringutil.capitalizeFirst(billingPeriodUnit)}ly__`;\n\n if (durationValue == 0) {\n localizedStringKey += 'indefinite';\n } else {\n localizedStringKey += `limited__${durationValue === 1 ? '1' : 'n'}${stringutil.capitalizeFirst(durationUnit)}s`;\n }\n\n const localizedStringNode = ctx.resolve(['localizedStrings', localizedStringKey]);\n const templateForPrice = !localizedStringNode.isMissing() ?\n localizedStringNode.asString() :\n this.defaultSubscriptionPriceString(productNode);\n\n if (hasMultiplePrices) {\n templateData.fromText = templateForPrice;\n templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx);\n }\n\n if (commerceutil.isOnSale(productNode)) {\n templateData.formattedSalePriceText = templateForPrice;\n templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx);\n }\n\n templateData.formattedNormalPriceText = templateForPrice;\n templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx);\n }\n\n // TODO: This is shitty. The formatter should, if necessary, look up the English string and use it.\n // NOTE: ^ This TODO was taken from the corresponding function in CommerceFormatters in template-compiler:\n // https://github.com/Squarespace/template-compiler/blob/main/core/src/main/java/com/squarespace/template/plugins/platform/CommerceFormatters.java/#L438\n defaultSubscriptionPriceString(productNode: Node) {\n const billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode);\n\n const hasMultiplePrices = commerceutil.hasVariedPrices(productNode);\n const billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const billingPeriodPlural = billingPeriodValue > 1;\n const billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const numBillingCycles = this.getNumBillingCyclesFromSubscriptionPlanNode(productNode);\n let durationValue = billingPeriodValue * numBillingCycles;\n let durationUnit = billingPeriodUnit;\n\n const { PER_YEAR } = ProductPriceFormatter;\n\n // If the duration is a multiple of 52 weeks or 12 months, convert to years.\n // Otherwise, use the billing period unit for the duration unit.\n if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) {\n durationValue /= PER_YEAR[durationUnit];\n durationUnit = ProductPriceFormatter.BILLING_PERIOD_YEARLY;\n }\n\n let subPriceString = (hasMultiplePrices ? 'from ' : '') +\n '{price} every ' +\n (billingPeriodPlural ? '{billingPeriodValue} ' : '') +\n billingPeriodUnit.toLowerCase() +\n (billingPeriodPlural ? 's' : '');\n\n if (numBillingCycles > 0) {\n subPriceString += ' for {duration} ' +\n durationUnit.toLowerCase() +\n (durationValue === 1 ? '' : 's');\n }\n\n return subPriceString;\n }\n\n getSubscriptionPlanBillingPeriodNode(item: Node) {\n // BillingPeriod is represented as {value, unit} and is the period of time in between recurring billings\n // e.g. {2, MONTH} means a subscriber is billed once every 2 months\n return item.path(['structuredContent', 'subscriptionPlan', 'billingPeriod']);\n }\n\n getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node) {\n return billingPeriodNode.path(['unit']).asString();\n }\n\n getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node) {\n return billingPeriodNode.path(['value']).asNumber();\n }\n\n getNumBillingCyclesFromSubscriptionPlanNode(item: Node) {\n return item.path(['structuredContent', 'subscriptionPlan', 'numBillingCycles']).asNumber();\n }\n}\n\nexport class SubscriptionPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { node } = first;\n const subscriptionResults: {\n fromText?: string;\n formattedFromPrice?: string;\n formattedSubscriptionSalePriceText?: string;\n formattedSubscriptionSalePrice?: string;\n formattedNormalSubscriptionPriceText?: string;\n formattedNormalSubscriptionPrice?: string;\n } = {};\n\n const pricingOptions = commerceutil.getPricingOptionsAmongLowestVariant(node);\n\n if (pricingOptions != null && pricingOptions.size() > 0) {\n if (commerceutil.hasVariedPrices(node)) {\n // This will return either salePriceMoney or priceMoney depending on whether the onSale is true or false.\n // That's because this block here is the from {price} so the from price needs to be the lowest possible price\n // taking into if a variant is onSale.\n const subscriptionFromPricingNode = commerceutil.getSubscriptionMoneyFromFirstPricingOptions(pricingOptions);\n const productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH);\n\n subscriptionResults.fromText = !productPriceFromTextNode.isMissing() ?\n productPriceFromTextNode.asString() :\n 'from {fromPrice}';\n subscriptionResults.formattedFromPrice = commerceutil.getMoneyString(subscriptionFromPricingNode, args, ctx);\n }\n\n const firstPricingOption = pricingOptions.get(0);\n const isFirstPricingOptionOnSale = isTruthy(firstPricingOption.path(['onSale']));\n\n if (isFirstPricingOptionOnSale) {\n subscriptionResults.formattedSubscriptionSalePriceText = '{price}';\n subscriptionResults.formattedSubscriptionSalePrice = this.getSalePriceMoney(firstPricingOption, args, ctx);\n }\n\n subscriptionResults.formattedNormalSubscriptionPriceText = '{price}';\n subscriptionResults.formattedNormalSubscriptionPrice = this.getPriceMoney(firstPricingOption, args, ctx);\n }\n\n const subscriptionPriceInfo = executeTemplate(\n ctx,\n subscriptionPriceTemplate as unknown as RootCode,\n new Node(subscriptionResults),\n true,\n );\n first.set(subscriptionPriceInfo);\n }\n\n getSalePriceMoney(pricingOption: Node, args: string[], ctx: Context) {\n return commerceutil.getMoneyString(pricingOption.path(['salePriceMoney']), args, ctx);\n }\n\n getPriceMoney(pricingOption: Node, args: string[], ctx: Context) {\n return commerceutil.getMoneyString(pricingOption.path(['priceMoney']), args, ctx);\n }\n}\n\nexport class ProductQuickViewFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const id = node.get('id').asString();\n let group = args[0] || '';\n let groupNode = node.get(group);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n } else {\n groupNode = ctx.resolve([group]);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n }\n }\n\n let buf = '';\n buf += `<span class=\"sqs-product-quick-view-button\" role=\"button\" tabindex=\"0\" data-id=\"${id}\"`;\n buf += ` data-group=\"${group}\">`;\n\n const text = ctx.resolve(['localizedStrings', 'productQuickViewText']);\n buf += text.isMissing() ? 'Quick View' : text.asString();\n buf += '</span>';\n first.set(buf);\n }\n}\n\nexport class ProductRestockNotificationFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const websiteCtx = ctx.resolve(['website']);\n const productCtx = ctx.resolve(['productMerchandisingContext']);\n const first = vars[0];\n const node = first.node;\n\n const productId = [node.get('id').asString()];\n const product = productCtx.path(productId);\n const obj = {\n product: node.value,\n views: product.path(['restockNotificationViews']).value,\n messages: product.path(['restockNotificationMessages']).value,\n mailingListSignUpEnabled: product.path(['mailingListSignUpEnabled']).value,\n mailingListOptInByDefault: product.path(['mailingListOptInByDefault']).value,\n captchaSiteKey: websiteCtx.path(['captchaSettings', 'siteKey']).value,\n };\n\n const res = executeTemplate(ctx, productRestockNotificationTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n}\n\nexport class ProductScarcityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n if (merchCtx.isMissing()) {\n return;\n }\n\n const first = vars[0];\n const product = first.node;\n const id = product.get('id').asString();\n const productCtx = merchCtx.get(id);\n\n if (!productCtx.isMissing() && productCtx.get('scarcityEnabled').asBoolean()) {\n const obj: any = {\n scarcityTemplateViews: productCtx.get('scarcityTemplateViews').value,\n scarcityText: productCtx.get('scarcityText').value,\n scarcityShownByDefault: productCtx.get('scarcityShownByDefault').value,\n };\n const res = executeTemplate(ctx, productScarcityTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n }\n}\n\nexport class ProductStatusFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n\n const id = node.get('id').asString();\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n let customSoldOutMessage: string = '';\n if (id && !merchCtx.isMissing()) {\n customSoldOutMessage = merchCtx.path([id, 'customSoldOutText']).asString();\n }\n\n if (commerceutil.isSoldOut(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSoldOutText']).asString();\n let buf = `<div class=\"product-mark sold-out\">`;\n buf += stringutil.escapeHtmlAttributes(customSoldOutMessage || text || 'sold out');\n buf += '</div>';\n first.set(buf);\n } else if (commerceutil.isOnSale(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSaleText']).asString();\n let buf = `<div class=\"product-mark sale\">`;\n buf += text || 'sale';\n buf += '</div>';\n first.set(buf);\n } else {\n first.set(MISSING_NODE);\n }\n }\n}\n\nexport class QuantityInputFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const type = commerceutil.getProductType(node);\n const settings = ctx.resolve(['websiteSettings']);\n const multipleQuantityAllowed =\n (type === ProductType.PHYSICAL ||\n (type === ProductType.SERVICE && commerceutil.isMultipleQuantityAllowedForServices(settings))) &&\n !commerceutil.isSubscribable(node);\n const hide = !multipleQuantityAllowed || commerceutil.getTotalStockRemaining(node) <= 1;\n if (hide) {\n first.set(MISSING_NODE);\n return;\n }\n const res = executeTemplate(ctx, quantityInputTemplate as unknown as RootCode, node, false);\n first.set(res);\n }\n}\n\nexport class SalePriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getSalePrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class VariantDescriptorFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const text = commerceutil.getVariantFormat(first.node);\n first.set(text);\n }\n}\n\nexport class VariantsSelectFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n\n const options = commerceutil.getItemVariantOptions(first.node);\n if (options.length === 0) {\n first.set(MISSING_NODE);\n return;\n }\n\n const selectText = this.getSelectText(ctx, first.node);\n const displayText = this.getDisplayText(ctx, first.node);\n const node = ctx.newNode({\n item: first.node.value,\n options,\n selectText,\n displayText,\n });\n\n const text = executeTemplate(ctx, variantsSelectTemplate as unknown as RootCode, node, false);\n first.set(text);\n }\n\n private getDisplayText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated directly before being displayed to the front-end.\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardValueDisplayText']).asString();\n } else {\n fallback = '{name}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n\n private getSelectText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated differently than other products. See COM-4912 for more details\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Select Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardVariantSelectText']).asString();\n } else {\n text = ctx.resolve(['localizedStrings', 'productVariantSelectText']).asString();\n fallback = 'Select {variantName}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n}\n\nconst KEY_PREFIX = 'productAnswerMap';\nconst KEY_STRONGLY_DISAGREE = KEY_PREFIX + 'StronglyDisagree';\nconst KEY_DISAGREE = KEY_PREFIX + 'Disagree';\nconst KEY_NEUTRAL = KEY_PREFIX + 'Neutral';\nconst KEY_AGREE = KEY_PREFIX + 'Agree';\nconst KEY_STRONGLY_AGREE = KEY_PREFIX + 'StronglyAgree';\n\nconst localizeOrDefault = (strings: Node, key: string, defaultValue: string) => {\n const node = strings.get(key);\n return node.type === Type.STRING ? node.value : defaultValue;\n};\n\nconst buildAnswerMap = (strings: Node) => {\n return {\n '-2': localizeOrDefault(strings, KEY_STRONGLY_DISAGREE, 'Strongly Disagree'),\n '-1': localizeOrDefault(strings, KEY_DISAGREE, 'Disagree'),\n '0': localizeOrDefault(strings, KEY_NEUTRAL, 'Neutral'),\n '1': localizeOrDefault(strings, KEY_AGREE, 'Agree'),\n '2': localizeOrDefault(strings, KEY_STRONGLY_AGREE, 'Strongly Agree'),\n };\n};\n\nconst convertLikert = (values: any, answerMap: any) => {\n const result = [];\n const keys = Object.keys(values);\n const defaultValue = answerMap['0'];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const answerKey = values[key];\n const value = answerMap[answerKey];\n result.push({ question: key, answer: value || defaultValue });\n }\n return result;\n};\n\nconst SUMMARY_FORM_FIELD_TEMPLATE_MAP: { [x: string]: RootCode } = {\n address: summaryFormFieldAddressTemplate as unknown as RootCode,\n checkbox: summaryFormFieldCheckboxTemplate as unknown as RootCode,\n date: summaryFormFieldDateTemplate as unknown as RootCode,\n likert: summaryFormFieldLikertTemplate as unknown as RootCode,\n name: summaryFormFieldNameTemplate as unknown as RootCode,\n phone: summaryFormFieldPhoneTemplate as unknown as RootCode,\n time: summaryFormFieldTimeTemplate as unknown as RootCode,\n};\n\nexport class SummaryFormFieldFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const field = first.node;\n\n const localizedStrings = ctx.resolve(['localizedStrings']);\n const type = field.get('type').asString();\n const code = SUMMARY_FORM_FIELD_TEMPLATE_MAP[type];\n\n let value: string | null = null;\n if (code === undefined) {\n value = field.get('value').asString();\n } else {\n let node = field;\n if (type === 'likert') {\n const answerMap = buildAnswerMap(localizedStrings);\n const likert = convertLikert(field.get('values').value, answerMap);\n node = ctx.newNode(likert);\n }\n value = executeTemplate(ctx, code, node, true);\n }\n\n let buf = '<div style=\"font-size:11px; margin-top:3px\">\\n';\n\n buf += ' <span style=\"font-weight:bold;\">';\n buf += field.get('rawTitle').asString();\n buf += ':</span> ';\n if (isTruthy(value)) {\n buf += value;\n } else {\n const text = localizedStrings.get('productSummaryFormNoAnswerText').asString().trim();\n buf += text === '' ? 'N/A' : text;\n }\n buf += '\\n</div>';\n first.set(buf);\n }\n}\n\nexport const COMMERCE_FORMATTERS: FormatterTable = {\n 'add-to-cart-btn': new AddToCartButtonFormatter(),\n 'bookkeeper-money-format': new BookkeeperMoneyFormat(),\n 'cart-quantity': new CartQuantityFormatter(),\n 'cart-subtotal': new CartSubtotalFormatter(),\n 'cart-url': new CartUrlFormatter(),\n 'from-price': new FromPriceFormatter(),\n 'normal-price': new NormalPriceFormatter(),\n 'percentage-format': new PercentageFormatFormatter(),\n 'product-checkout': new ProductCheckoutFormatter(),\n 'product-price': new ProductPriceFormatter(),\n 'subscription-price': new SubscriptionPriceFormatter(),\n 'product-quick-view': new ProductQuickViewFormatter(),\n 'product-restock-notification': new ProductRestockNotificationFormatter(),\n 'product-scarcity': new ProductScarcityFormatter(),\n 'product-status': new ProductStatusFormatter(),\n 'quantity-input': new QuantityInputFormatter(),\n 'sale-price': new SalePriceFormatter(),\n 'summary-form-field': new SummaryFormFieldFormatter(),\n 'variant-descriptor': new VariantDescriptorFormatter(),\n 'variants-select': new VariantsSelectFormatter(),\n};\n"]} |
@@ -16,3 +16,2 @@ var __extends = (this && this.__extends) || (function () { | ||
| })(); | ||
| import { isTruthy } from '../node'; | ||
| import { Formatter } from '../plugin'; | ||
@@ -155,3 +154,2 @@ import { getTimeZone } from './util.timezone'; | ||
| export { MessageFormatterImpl }; | ||
| var useCLDRMode = function (ctx) { return isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat'])); }; | ||
| var MoneyFormatter = /** @class */ (function (_super) { | ||
@@ -168,6 +166,4 @@ __extends(MoneyFormatter, _super); | ||
| if (decimalValue.isMissing() || currencyNode.isMissing()) { | ||
| if (useCLDRMode(ctx)) { | ||
| decimalValue = node.path(['value']); | ||
| currencyNode = node.path(['currency']); | ||
| } | ||
| decimalValue = node.path(['value']); | ||
| currencyNode = node.path(['currency']); | ||
| // No valid money node found. | ||
@@ -174,0 +170,0 @@ if (decimalValue.isMissing() || currencyNode.isMissing()) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"formatters.i18n.js","sourceRoot":"","sources":["../../src/plugins/formatters.i18n.ts"],"names":[],"mappings":"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","sourcesContent":["import { CurrencyType } from '@phensley/cldr-core';\n\nimport { Context } from '../context';\nimport { Variable } from '../variable';\nimport { FormatterTable } from '../plugin';\nimport { isTruthy } from '../node';\nimport { Formatter } from '../plugin';\nimport { getTimeZone } from './util.timezone';\nimport { parseDecimal } from './util.i18n';\nimport { currencyOptions, datetimeOptions, decimalOptions, intervalOptions, relativetimeOptions } from './options';\nimport { splitVariable } from '../util';\nimport { humanizeDate } from './util.content';\n\nexport class DatetimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const date = first.node.asNumber();\n if (isNaN(date)) {\n first.set('');\n return;\n }\n\n const opts = datetimeOptions(args);\n const zoneId = getTimeZone(ctx);\n const res = cldr.Calendars.formatDate({ date, zoneId }, opts);\n first.set(res);\n }\n}\n\nexport class DatetimeIntervalformatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const cldr = ctx.cldr;\n if (!cldr || vars.length < 2) {\n vars[0].set('');\n return;\n }\n\n const n0 = vars[0].node.asNumber();\n const n1 = vars[1].node.asNumber();\n if (!isFinite(n0) || !isFinite(n1)) {\n vars[0].set('');\n return;\n }\n\n const zoneId = getTimeZone(ctx);\n const start = { date: n0, zoneId };\n const end = { date: n1, zoneId };\n const opts = intervalOptions(args);\n const res = cldr.Calendars.formatDateInterval(start, end, opts);\n vars[0].set(res);\n }\n}\n\n// TODO: datetimefield DEPRECATED\n\nexport class DecimalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const node = first.node.asString();\n const opts = decimalOptions(args);\n const num = parseDecimal(node);\n if (num !== undefined) {\n const res = cldr.Numbers.formatDecimal(num, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\n// TODO: i18n-money-format (Legacy)\n\n// Find the key/value delimiter in a string.\nconst delimiter = (s: string): number => {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n // Either ':' or '=' can delimit arguments\n if (c === ':' || c === '=') {\n return i;\n }\n }\n return -1;\n};\n\nexport class MessageFormatterImpl extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const positional: any[] = [];\n const keyword: { [name: string]: any } = {};\n args.forEach((arg) => {\n const parent = ctx.frame().parent;\n const i = delimiter(arg);\n if (i === -1) {\n const _arg = ctx.resolveFrom(splitVariable(arg), parent ? parent : ctx.frame());\n positional.push(_arg);\n } else {\n const key = arg.slice(0, i);\n const val = arg.slice(i + 1);\n const _val = ctx.resolveFrom(splitVariable(val), parent ? parent : ctx.frame());\n // Index the argument both as a keyword and positional\n keyword[key] = _val;\n positional.push(_val);\n }\n });\n\n const { formatter } = ctx;\n const zoneId = getTimeZone(ctx);\n formatter!.setTimeZone(zoneId);\n\n const msg = first.node.asString();\n const result = formatter!.formatter.format(msg, positional, keyword);\n first.set(result);\n }\n}\n\nconst useCLDRMode = (ctx: Context) => isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat']));\n\nexport class MoneyFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n let decimalValue = node.path(['decimalValue']);\n let currencyNode = node.path(['currencyCode']);\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n if (useCLDRMode(ctx)) {\n decimalValue = node.path(['value']);\n currencyNode = node.path(['currency']);\n }\n\n // No valid money node found.\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n first.set('');\n return;\n }\n }\n\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const code = currencyNode.asString();\n const decimal = parseDecimal(decimalValue.asString());\n if (decimal !== undefined) {\n const opts = currencyOptions(args);\n const res = cldr.Numbers.formatCurrency(decimal, code as CurrencyType, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\nexport class RelativeTimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n let s = ctx.now === undefined ? new Date().getTime() : ctx.now;\n let e = first.node.asNumber();\n if (vars.length > 1) {\n s = e;\n e = vars[1].node.asNumber();\n }\n if (!isFinite(s) || !isFinite(e)) {\n first.set('');\n return;\n }\n const start = cldr.Calendars.toGregorianDate({ date: s });\n const end = cldr.Calendars.toGregorianDate({ date: e });\n\n const opts = relativetimeOptions(args);\n const res = cldr.Calendars.formatRelativeTime(start, end, opts);\n first.set(res);\n }\n}\n\nexport class TimeSinceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const n = first.node.asNumber();\n const { cldr } = ctx;\n if (!cldr || !isFinite(n)) {\n first.set('Invalid date.');\n return;\n }\n const now = ctx.now === undefined ? new Date().getTime() : ctx.now;\n const base = cldr.Calendars.toGregorianDate({ date: now });\n const date = cldr.Calendars.toGregorianDate({ date: n });\n\n const delta = base.unixEpoch() - date.unixEpoch();\n const res = humanizeDate(delta, false);\n const html = `<span class=\"timesince\" data-date=\"${n}\">${res}</span>`;\n first.set(html);\n }\n}\n\n// TODO: unit\n\nexport const I18N_FORMATTERS: FormatterTable = {\n datetime: new DatetimeFormatter(),\n 'datetime-interval': new DatetimeIntervalformatter(),\n decimal: new DecimalFormatter(),\n message: new MessageFormatterImpl(),\n money: new MoneyFormatter(),\n plural: new MessageFormatterImpl(),\n 'relative-time': new RelativeTimeFormatter(),\n timesince: new TimeSinceFormatter(),\n};\n"]} | ||
| {"version":3,"file":"formatters.i18n.js","sourceRoot":"","sources":["../../src/plugins/formatters.i18n.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;IAAuC,qCAAS;IAAhD;;IAoBA,CAAC;IAnBC,iCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACH,wBAAC;AAAD,CAAC,AApBD,CAAuC,SAAS,GAoB/C;;AAED;IAA+C,6CAAS;IAAxD;;IAsBA,CAAC;IArBC,yCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAM,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAA,EAAE,CAAC;QACnC,IAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAA,EAAE,CAAC;QACjC,IAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACH,gCAAC;AAAD,CAAC,AAtBD,CAA+C,SAAS,GAsBvD;;AAED,iCAAiC;AAEjC;IAAsC,oCAAS;IAA/C;;IAmBA,CAAC;IAlBC,gCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,IAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,AAnBD,CAAsC,SAAS,GAmB9C;;AAED,oCAAoC;AAEpC,4CAA4C;AAC5C,IAAM,SAAS,GAAG,UAAC,CAAS;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,0CAA0C;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF;IAA0C,wCAAS;IAAnD;;IAmCA,CAAC;IAlCC,oCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAM,UAAU,GAAU,EAAE,CAAC;QAC7B,IAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG;YACf,IAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;YAClC,IAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACb,IAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,IAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,IAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChF,sDAAsD;gBACtD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACpB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEK,IAAA,SAAS,GAAK,GAAG,UAAR,CAAS;QAC1B,IAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,SAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAM,MAAM,GAAG,SAAU,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IACH,2BAAC;AAAD,CAAC,AAnCD,CAA0C,SAAS,GAmClD;;AAED;IAAoC,kCAAS;IAA7C;;IAiCA,CAAC;IAhCC,8BAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/C,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/C,IAAI,YAAY,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;YACzD,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,IAAI,YAAY,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;gBACzD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAoB,EAAE,IAAI,CAAC,CAAC;YAC7E,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AAjCD,CAAoC,SAAS,GAiC5C;;AAED;IAA2C,yCAAS;IAApD;;IAyBA,CAAC;IAxBC,qCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,IAAA,IAAI,GAAK,GAAG,KAAR,CAAS;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/D,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAExD,IAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACH,4BAAC;AAAD,CAAC,AAzBD,CAA2C,SAAS,GAyBnD;;AAED;IAAwC,sCAAS;IAAjD;;IAkBA,CAAC;IAjBC,kCAAK,GAAL,UAAM,IAAc,EAAE,IAAgB,EAAE,GAAY;QAClD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAA,IAAI,GAAK,GAAG,KAAR,CAAS;QACrB,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAM,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACnE,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzD,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD,IAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,IAAM,IAAI,GAAG,gDAAsC,CAAC,gBAAK,GAAG,YAAS,CAAC;QACtE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACH,yBAAC;AAAD,CAAC,AAlBD,CAAwC,SAAS,GAkBhD;;AAED,aAAa;AAEb,MAAM,CAAC,IAAM,eAAe,GAAmB;IAC7C,QAAQ,EAAE,IAAI,iBAAiB,EAAE;IACjC,mBAAmB,EAAE,IAAI,yBAAyB,EAAE;IACpD,OAAO,EAAE,IAAI,gBAAgB,EAAE;IAC/B,OAAO,EAAE,IAAI,oBAAoB,EAAE;IACnC,KAAK,EAAE,IAAI,cAAc,EAAE;IAC3B,MAAM,EAAE,IAAI,oBAAoB,EAAE;IAClC,eAAe,EAAE,IAAI,qBAAqB,EAAE;IAC5C,SAAS,EAAE,IAAI,kBAAkB,EAAE;CACpC,CAAC","sourcesContent":["import { CurrencyType } from '@phensley/cldr-core';\n\nimport { Context } from '../context';\nimport { Variable } from '../variable';\nimport { FormatterTable } from '../plugin';\nimport { Formatter } from '../plugin';\nimport { getTimeZone } from './util.timezone';\nimport { parseDecimal } from './util.i18n';\nimport { currencyOptions, datetimeOptions, decimalOptions, intervalOptions, relativetimeOptions } from './options';\nimport { splitVariable } from '../util';\nimport { humanizeDate } from './util.content';\n\nexport class DatetimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const date = first.node.asNumber();\n if (isNaN(date)) {\n first.set('');\n return;\n }\n\n const opts = datetimeOptions(args);\n const zoneId = getTimeZone(ctx);\n const res = cldr.Calendars.formatDate({ date, zoneId }, opts);\n first.set(res);\n }\n}\n\nexport class DatetimeIntervalformatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const cldr = ctx.cldr;\n if (!cldr || vars.length < 2) {\n vars[0].set('');\n return;\n }\n\n const n0 = vars[0].node.asNumber();\n const n1 = vars[1].node.asNumber();\n if (!isFinite(n0) || !isFinite(n1)) {\n vars[0].set('');\n return;\n }\n\n const zoneId = getTimeZone(ctx);\n const start = { date: n0, zoneId };\n const end = { date: n1, zoneId };\n const opts = intervalOptions(args);\n const res = cldr.Calendars.formatDateInterval(start, end, opts);\n vars[0].set(res);\n }\n}\n\n// TODO: datetimefield DEPRECATED\n\nexport class DecimalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const node = first.node.asString();\n const opts = decimalOptions(args);\n const num = parseDecimal(node);\n if (num !== undefined) {\n const res = cldr.Numbers.formatDecimal(num, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\n// TODO: i18n-money-format (Legacy)\n\n// Find the key/value delimiter in a string.\nconst delimiter = (s: string): number => {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n // Either ':' or '=' can delimit arguments\n if (c === ':' || c === '=') {\n return i;\n }\n }\n return -1;\n};\n\nexport class MessageFormatterImpl extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const positional: any[] = [];\n const keyword: { [name: string]: any } = {};\n args.forEach((arg) => {\n const parent = ctx.frame().parent;\n const i = delimiter(arg);\n if (i === -1) {\n const _arg = ctx.resolveFrom(splitVariable(arg), parent ? parent : ctx.frame());\n positional.push(_arg);\n } else {\n const key = arg.slice(0, i);\n const val = arg.slice(i + 1);\n const _val = ctx.resolveFrom(splitVariable(val), parent ? parent : ctx.frame());\n // Index the argument both as a keyword and positional\n keyword[key] = _val;\n positional.push(_val);\n }\n });\n\n const { formatter } = ctx;\n const zoneId = getTimeZone(ctx);\n formatter!.setTimeZone(zoneId);\n\n const msg = first.node.asString();\n const result = formatter!.formatter.format(msg, positional, keyword);\n first.set(result);\n }\n}\n\nexport class MoneyFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n let decimalValue = node.path(['decimalValue']);\n let currencyNode = node.path(['currencyCode']);\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n decimalValue = node.path(['value']);\n currencyNode = node.path(['currency']);\n\n // No valid money node found.\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n first.set('');\n return;\n }\n }\n\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const code = currencyNode.asString();\n const decimal = parseDecimal(decimalValue.asString());\n if (decimal !== undefined) {\n const opts = currencyOptions(args);\n const res = cldr.Numbers.formatCurrency(decimal, code as CurrencyType, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\nexport class RelativeTimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n let s = ctx.now === undefined ? new Date().getTime() : ctx.now;\n let e = first.node.asNumber();\n if (vars.length > 1) {\n s = e;\n e = vars[1].node.asNumber();\n }\n if (!isFinite(s) || !isFinite(e)) {\n first.set('');\n return;\n }\n const start = cldr.Calendars.toGregorianDate({ date: s });\n const end = cldr.Calendars.toGregorianDate({ date: e });\n\n const opts = relativetimeOptions(args);\n const res = cldr.Calendars.formatRelativeTime(start, end, opts);\n first.set(res);\n }\n}\n\nexport class TimeSinceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const n = first.node.asNumber();\n const { cldr } = ctx;\n if (!cldr || !isFinite(n)) {\n first.set('Invalid date.');\n return;\n }\n const now = ctx.now === undefined ? new Date().getTime() : ctx.now;\n const base = cldr.Calendars.toGregorianDate({ date: now });\n const date = cldr.Calendars.toGregorianDate({ date: n });\n\n const delta = base.unixEpoch() - date.unixEpoch();\n const res = humanizeDate(delta, false);\n const html = `<span class=\"timesince\" data-date=\"${n}\">${res}</span>`;\n first.set(html);\n }\n}\n\n// TODO: unit\n\nexport const I18N_FORMATTERS: FormatterTable = {\n datetime: new DatetimeFormatter(),\n 'datetime-interval': new DatetimeIntervalformatter(),\n decimal: new DecimalFormatter(),\n message: new MessageFormatterImpl(),\n money: new MoneyFormatter(),\n plural: new MessageFormatterImpl(),\n 'relative-time': new RelativeTimeFormatter(),\n timesince: new TimeSinceFormatter(),\n};\n"]} |
@@ -1,3 +0,4 @@ | ||
| import { Decimal } from '@phensley/cldr-core'; | ||
| import { CurrencyType, Decimal } from '@phensley/cldr-core'; | ||
| import { Node } from '../node'; | ||
| import { Context } from 'src/context'; | ||
| export declare const getProductType: (item: Node) => import("..").EnumValue<"ProductType"> | undefined; | ||
@@ -7,6 +8,10 @@ export declare const getVariants: (item: Node) => Node; | ||
| export declare const getAmountFromMoneyNode: (moneyNode?: Node) => Decimal; | ||
| export declare const getCurrencyFromMoneyNode: (moneyNode: Node) => CurrencyType; | ||
| export declare const getLegacyPriceFromMoneyNode: (moneyNode: Node) => Decimal; | ||
| export declare const getFromPrice: (item: Node) => Node | undefined; | ||
| export declare const getNormalPrice: (item: Node) => Node | undefined; | ||
| export declare const getSalePrice: (item: Node) => Node | undefined; | ||
| export declare const getMoneyString: (moneyNode: Node, args: string[], ctx: Context) => string; | ||
| export declare const getSubscriptionMoneyFromFirstPricingOptions: (pricingOptions: Node) => Node; | ||
| export declare const getPricingOptionsAmongLowestVariant: (item: Node) => Node | null; | ||
| export declare const getFromPrice: (item: Node) => Node; | ||
| export declare const getNormalPrice: (item: Node) => Node; | ||
| export declare const getSalePrice: (item: Node) => Node; | ||
| export declare const getTotalStockRemaining: (item: Node) => number; | ||
@@ -13,0 +18,0 @@ export declare const hasVariedPrices: (item: Node) => boolean; |
| import { isTruthy, Node } from '../node'; | ||
| import { ProductType } from './enums'; | ||
| import { Type } from '../types'; | ||
| import { parseDecimal } from './util.i18n'; | ||
| import { parseDecimal, useCLDRMode } from './util.i18n'; | ||
| import { currencyOptions } from './options'; | ||
| var productTypePath = ['structuredContent', 'productType']; | ||
@@ -33,2 +34,7 @@ var variantsPath = ['structuredContent', 'variants']; | ||
| }; | ||
| export var getCurrencyFromMoneyNode = function (moneyNode) { | ||
| var currencyNode = moneyNode.path(['currency']); | ||
| var currency = !currencyNode.isMissing() ? currencyNode.asString().trim() : DEFAULT_MONEY_NODE.path(['currency']).asString(); | ||
| return currency; | ||
| }; | ||
| export var getLegacyPriceFromMoneyNode = function (moneyNode) { | ||
@@ -38,2 +44,54 @@ var price = getAmountFromMoneyNode(moneyNode); | ||
| }; | ||
| export var getMoneyString = function (moneyNode, args, ctx) { | ||
| var _a, _b; | ||
| if (useCLDRMode(ctx)) { | ||
| var amount = getAmountFromMoneyNode(moneyNode); | ||
| var currencyCode = getCurrencyFromMoneyNode(moneyNode); | ||
| return (_b = (_a = ctx.cldr) === null || _a === void 0 ? void 0 : _a.Numbers.formatCurrency(amount, currencyCode, currencyOptions(args))) !== null && _b !== void 0 ? _b : ''; | ||
| } | ||
| else { | ||
| var legacyAmount = getLegacyPriceFromMoneyNode(moneyNode); | ||
| var numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); | ||
| var formattedAmount = numberFormatter.format(parseFloat(legacyAmount.toString()) / 100); | ||
| return "<span class=\"sqs-money-native\">".concat(formattedAmount, "</span>"); | ||
| } | ||
| }; | ||
| export var getSubscriptionMoneyFromFirstPricingOptions = function (pricingOptions) { | ||
| if (pricingOptions == null || pricingOptions.size() == 0) { | ||
| return DEFAULT_MONEY_NODE; | ||
| } | ||
| var node = pricingOptions.get(0); | ||
| return isTruthy(node.path(['onSale'])) ? node.path(['salePriceMoney']) : node.path(['priceMoney']); | ||
| }; | ||
| export var getPricingOptionsAmongLowestVariant = function (item) { | ||
| var productType = getProductType(item); | ||
| var structuredContent = item.path(['structuredContent']); | ||
| switch (productType) { | ||
| case ProductType.PHYSICAL: | ||
| case ProductType.SERVICE: | ||
| var variants = structuredContent.path(['variants']); | ||
| if (variants.type !== Type.ARRAY || variants.size() === 0) { | ||
| return null; | ||
| } | ||
| var first = variants.get(0); | ||
| var moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']); | ||
| var pricingOptions = first.path(['pricingOptions']); | ||
| var price = getAmountFromMoneyNode(moneyNode); | ||
| for (var i = 1; i < variants.size(); i++) { | ||
| var variant = variants.get(i); | ||
| var variantMoneyNode = isTruthy(variant.path(['onSale'])) | ||
| ? variant.path(['salePriceMoney']) | ||
| : variant.path(['priceMoney']); | ||
| var variantPrice = getAmountFromMoneyNode(variantMoneyNode); | ||
| if (variantPrice.compare(price) < 0) { | ||
| pricingOptions = variant.path(['pricingOptions']); | ||
| price = variantPrice; | ||
| } | ||
| } | ||
| return pricingOptions; | ||
| default: | ||
| return null; | ||
| } | ||
| }; | ||
| // NOTE: This is a port of getLowestPriceAmongVariants from template-compiler | ||
| export var getFromPrice = function (item) { | ||
@@ -54,5 +112,2 @@ var type = getProductType(item); | ||
| var price = getAmountFromMoneyNode(moneyNode); | ||
| if (price === undefined) { | ||
| return undefined; | ||
| } | ||
| for (var i = 1; i < variants.size(); i++) { | ||
@@ -77,2 +132,3 @@ var v = variants.get(i); | ||
| }; | ||
| // NOTE: This is a port of getHighestPriceAmongVariants from template-compiler | ||
| export var getNormalPrice = function (item) { | ||
@@ -90,11 +146,8 @@ var type = getProductType(item); | ||
| } | ||
| var moneyNode = variants.get(0); | ||
| var moneyNode = variants.get(0).path(['priceMoney']); | ||
| var price = getAmountFromMoneyNode(moneyNode); | ||
| if (price === undefined) { | ||
| return undefined; | ||
| } | ||
| for (var i = 1; i < variants.size(); i++) { | ||
| var currentNode = variants.get(i).path(['priceMoney']); | ||
| var curr = getAmountFromMoneyNode(currentNode); | ||
| if (curr && curr.compare(price) > 0) { | ||
| if (curr.compare(price) > 0) { | ||
| price = curr; | ||
@@ -114,2 +167,3 @@ moneyNode = currentNode; | ||
| }; | ||
| // NOTE: This is a port of getSalePriceMoneyNode from template-compiler | ||
| export var getSalePrice = function (item) { | ||
@@ -143,3 +197,3 @@ var type = getProductType(item); | ||
| } | ||
| return salePrice ? saleNode : DEFAULT_MONEY_NODE; | ||
| return saleNode !== null && saleNode !== void 0 ? saleNode : DEFAULT_MONEY_NODE; | ||
| } | ||
@@ -146,0 +200,0 @@ case ProductType.DIGITAL: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.commerce.js","sourceRoot":"","sources":["../../src/plugins/util.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\nimport { isTruthy, Node } from '../node';\nimport { ProductType } from './enums';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\nconst productTypePath = ['structuredContent', 'productType'];\nconst variantsPath = ['structuredContent', 'variants'];\n\nconst ZERO: Decimal = parseDecimal('0')!;\n\nconst DEFAULT_MONEY_NODE = new Node({\n value: '0',\n currency: 'USD',\n});\n\nexport const getProductType = (item: Node) => {\n const type = item.path(productTypePath);\n return ProductType.fromCode(type.asNumber());\n};\n\n// const getPrice = (v: Node) => isTruthy(v.get('onSale')) ? v.get('salePrice') : v.get('price');\n\nexport const getVariants = (item: Node) => {\n return item.path(variantsPath);\n};\n\nexport const hasVariants = (item: Node) => {\n const type = getProductType(item);\n const variants = getVariants(item);\n const populated = variants.type === Type.ARRAY && variants.value.length > 1;\n return type === ProductType.DIGITAL ? false : populated;\n};\n\nexport const getAmountFromMoneyNode = (moneyNode?: Node) => {\n if (!moneyNode) {\n return ZERO;\n }\n const value = moneyNode.path(['value']).asString();\n return !value ? ZERO : parseDecimal(value) || ZERO;\n};\n\nexport const getLegacyPriceFromMoneyNode = (moneyNode: Node): Decimal => {\n const price = getAmountFromMoneyNode(moneyNode);\n return price ? price.movePoint(2) : ZERO;\n};\n\nexport const getFromPrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n const first = variants.get(0);\n let moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n if (price === undefined) {\n return undefined;\n }\n\n for (let i = 1; i < variants.size(); i++) {\n const v = variants.get(i);\n const currentNode = isTruthy(v.path(['onSale'])) ? v.path(['salePriceMoney']) : v.path(['priceMoney']);\n const current = getAmountFromMoneyNode(currentNode)!;\n if (current && current.compare(price) < 0) {\n price = current;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getNormalPrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n case ProductType.GIFT_CARD: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let moneyNode = variants.get(0);\n let price = getAmountFromMoneyNode(moneyNode);\n if (price === undefined) {\n return undefined;\n }\n\n for (let i = 1; i < variants.size(); i++) {\n const currentNode = variants.get(i).path(['priceMoney']);\n const curr = getAmountFromMoneyNode(currentNode)!;\n if (curr && curr.compare(price) > 0) {\n price = curr;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getSalePrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let saleNode: Node | undefined;\n let salePrice: Decimal | undefined;\n for (let i = 0; i < size; i++) {\n const v = variants.get(i);\n const priceMoney = v.path(['salePriceMoney']);\n const price = getAmountFromMoneyNode(priceMoney);\n if (isTruthy(v.path(['onSale']))) {\n if (!saleNode) {\n saleNode = priceMoney;\n salePrice = price;\n } else if (price && salePrice && price.compare(salePrice) < 0) {\n saleNode = priceMoney;\n salePrice = price;\n }\n }\n }\n return salePrice ? saleNode : DEFAULT_MONEY_NODE;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['salePriceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n case ProductType.GIFT_CARD:\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getTotalStockRemaining = (item: Node) => {\n const type = getProductType(item);\n if (type === ProductType.DIGITAL || type === ProductType.GIFT_CARD) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n let total = 0;\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited'))) {\n return Number.MAX_SAFE_INTEGER;\n }\n total += variant.get('qtyInStock').asNumber();\n }\n }\n return total;\n};\n\nexport const hasVariedPrices = (item: Node) => {\n const type = getProductType(item);\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n const first = variants.get(0);\n const onSale = first.get('onSale');\n const salePrice = first.get('salePrice');\n const price = first.get('price');\n\n for (let i = 1; i < size; i++) {\n const v = variants.get(i);\n const flag1 = !v.get('onSale').equals(onSale);\n const flag2 = isTruthy(onSale) && !v.get('salePrice').equals(salePrice);\n const flag3 = !v.get('price').equals(price);\n if (flag1 || flag2 || flag3) {\n return true;\n }\n }\n }\n return false;\n }\n\n case ProductType.DIGITAL:\n default:\n return false;\n }\n};\n\nexport const isOnSale = (item: Node) => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('onSale'))) {\n return true;\n }\n }\n }\n break;\n }\n\n case ProductType.DIGITAL:\n return isTruthy(content.get('onSale'));\n\n case ProductType.GIFT_CARD:\n default:\n break;\n }\n return false;\n};\n\nexport const isSoldOut = (item: Node) => {\n const type = getProductType(item);\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n if (variants.type === Type.ARRAY) {\n for (let i = 0; i < variants.size(); i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited')) || variant.get('qtyInStock').asNumber() > 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n case ProductType.DIGITAL:\n case ProductType.GIFT_CARD:\n return false;\n\n default:\n return true;\n }\n};\n\nexport const isSubscribable = (item: Node): boolean => item.path(['structuredContent', 'isSubscribable']).asBoolean();\n\n// TODO: writeMoneyString\n\n// TODO: writePriceString\n\n// TODO: writeVariantFormat\n\nconst getUserDefinedOptions = (content: Node) => {\n const ordering = content.get('variantOptionOrdering');\n const options = [];\n const size = ordering.size();\n for (let i = 0; i < size; i++) {\n const name = ordering.get(i).asString();\n options.push({ name, values: [] });\n }\n return options;\n};\n\nexport const getItemVariantOptions = (item: Node) => {\n const content = item.get('structuredContent');\n const variants = content.get('variants');\n const variantsSize = variants.size();\n if (variantsSize <= 1) {\n return [];\n }\n\n const userDefinedOptions = getUserDefinedOptions(content);\n\n for (let i = 0; i < variantsSize; i++) {\n const variant = variants.get(i);\n const attrs: Node = variant.get('attributes');\n if (attrs.type !== Type.OBJECT) {\n continue;\n }\n\n const fields = Object.keys(attrs.value);\n for (let j = 0; j < fields.length; j++) {\n const field = fields[j];\n const variantOptionValue: string = attrs.get(field).asString();\n\n let option = null;\n for (let k = 0; k < userDefinedOptions.length; k++) {\n const current = userDefinedOptions[k];\n if (current.name === field) {\n option = current;\n break;\n }\n }\n\n if (option === null) {\n continue;\n }\n\n let hasValue = false;\n const optionValues: string[] = option.values;\n for (let k = 0; k < optionValues.length; k++) {\n const value = optionValues[k];\n if (value === variantOptionValue) {\n hasValue = true;\n break;\n }\n }\n\n if (!hasValue) {\n optionValues.push(variantOptionValue);\n }\n }\n }\n return userDefinedOptions;\n};\n\nconst MULTIPLE_QTY_ALLOWED_FIELD = 'multipleQuantityAllowedForServices';\n\nexport const isMultipleQuantityAllowedForServices = (websiteSettings: Node) => {\n const storeSettings = websiteSettings.get('storeSettings');\n if (storeSettings.type === Type.OBJECT) {\n const value = storeSettings.get(MULTIPLE_QTY_ALLOWED_FIELD);\n if (value.type !== Type.NULL && value.type !== Type.MISSING) {\n return value.asBoolean();\n }\n }\n return true;\n};\n\nexport const getVariantFormat = (variant: Node) => {\n const options = variant.get('optionValues');\n const size = options.size();\n let res = '';\n for (let i = 0; i < size; i++) {\n if (i > 0) {\n res += ' / ';\n }\n const value = options.get(i).get('value').asString();\n res += value;\n }\n return res;\n};\n"]} | ||
| {"version":3,"file":"util.commerce.js","sourceRoot":"","sources":["../../src/plugins/util.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { CurrencyType, Decimal } from '@phensley/cldr-core';\nimport { isTruthy, Node } from '../node';\nimport { ProductType } from './enums';\nimport { Type } from '../types';\nimport { parseDecimal, useCLDRMode } from './util.i18n';\nimport { Context } from 'src/context';\nimport { currencyOptions } from './options';\n\nconst productTypePath = ['structuredContent', 'productType'];\nconst variantsPath = ['structuredContent', 'variants'];\n\nconst ZERO: Decimal = parseDecimal('0')!;\n\nconst DEFAULT_MONEY_NODE = new Node({\n value: '0',\n currency: 'USD',\n});\n\nexport const getProductType = (item: Node) => {\n const type = item.path(productTypePath);\n return ProductType.fromCode(type.asNumber());\n};\n\n// const getPrice = (v: Node) => isTruthy(v.get('onSale')) ? v.get('salePrice') : v.get('price');\n\nexport const getVariants = (item: Node) => {\n return item.path(variantsPath);\n};\n\nexport const hasVariants = (item: Node) => {\n const type = getProductType(item);\n const variants = getVariants(item);\n const populated = variants.type === Type.ARRAY && variants.value.length > 1;\n return type === ProductType.DIGITAL ? false : populated;\n};\n\nexport const getAmountFromMoneyNode = (moneyNode?: Node) => {\n if (!moneyNode) {\n return ZERO;\n }\n const value = moneyNode.path(['value']).asString();\n return !value ? ZERO : parseDecimal(value) || ZERO;\n};\n\nexport const getCurrencyFromMoneyNode = (moneyNode: Node): CurrencyType => {\n const currencyNode = moneyNode.path(['currency']);\n const currency = !currencyNode.isMissing() ? currencyNode.asString().trim() : DEFAULT_MONEY_NODE.path(['currency']).asString();\n\n return currency as CurrencyType;\n};\n\nexport const getLegacyPriceFromMoneyNode = (moneyNode: Node): Decimal => {\n const price = getAmountFromMoneyNode(moneyNode);\n return price ? price.movePoint(2) : ZERO;\n};\n\nexport const getMoneyString = (moneyNode: Node, args: string[], ctx: Context): string => {\n if (useCLDRMode(ctx)) {\n const amount = getAmountFromMoneyNode(moneyNode);\n const currencyCode = getCurrencyFromMoneyNode(moneyNode);\n\n return ctx.cldr?.Numbers.formatCurrency(amount, currencyCode, currencyOptions(args)) ?? '';\n } else {\n const legacyAmount = getLegacyPriceFromMoneyNode(moneyNode);\n const numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n const formattedAmount = numberFormatter.format(parseFloat(legacyAmount.toString()) / 100);\n\n return `<span class=\"sqs-money-native\">${formattedAmount}</span>`;\n }\n};\n\nexport const getSubscriptionMoneyFromFirstPricingOptions = (pricingOptions: Node): Node => {\n if (pricingOptions == null || pricingOptions.size() == 0) {\n return DEFAULT_MONEY_NODE;\n }\n\n const node = pricingOptions.get(0);\n\n return isTruthy(node.path(['onSale'])) ? node.path(['salePriceMoney']) : node.path(['priceMoney']);\n};\n\nexport const getPricingOptionsAmongLowestVariant = (item: Node): Node | null => {\n const productType = getProductType(item);\n const structuredContent = item.path(['structuredContent']);\n\n switch (productType) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n const variants = structuredContent.path(['variants']);\n if (variants.type !== Type.ARRAY || variants.size() === 0) {\n return null;\n }\n\n const first = variants.get(0);\n const moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n\n let pricingOptions = first.path(['pricingOptions']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const variant = variants.get(i);\n const variantMoneyNode = isTruthy(variant.path(['onSale']))\n ? variant.path(['salePriceMoney'])\n : variant.path(['priceMoney']);\n const variantPrice = getAmountFromMoneyNode(variantMoneyNode);\n\n if (variantPrice.compare(price) < 0) {\n pricingOptions = variant.path(['pricingOptions']);\n price = variantPrice;\n }\n }\n\n return pricingOptions;\n default:\n return null;\n }\n};\n\n// NOTE: This is a port of getLowestPriceAmongVariants from template-compiler\nexport const getFromPrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n const first = variants.get(0);\n let moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const v = variants.get(i);\n const currentNode = isTruthy(v.path(['onSale'])) ? v.path(['salePriceMoney']) : v.path(['priceMoney']);\n const current = getAmountFromMoneyNode(currentNode)!;\n if (current && current.compare(price) < 0) {\n price = current;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\n// NOTE: This is a port of getHighestPriceAmongVariants from template-compiler\nexport const getNormalPrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n case ProductType.GIFT_CARD: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let moneyNode = variants.get(0).path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const currentNode = variants.get(i).path(['priceMoney']);\n const curr = getAmountFromMoneyNode(currentNode)!;\n if (curr.compare(price) > 0) {\n price = curr;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\n// NOTE: This is a port of getSalePriceMoneyNode from template-compiler\nexport const getSalePrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let saleNode: Node | undefined;\n let salePrice: Decimal | undefined;\n for (let i = 0; i < size; i++) {\n const v = variants.get(i);\n const priceMoney = v.path(['salePriceMoney']);\n const price = getAmountFromMoneyNode(priceMoney);\n if (isTruthy(v.path(['onSale']))) {\n if (!saleNode) {\n saleNode = priceMoney;\n salePrice = price;\n } else if (price && salePrice && price.compare(salePrice) < 0) {\n saleNode = priceMoney;\n salePrice = price;\n }\n }\n }\n return saleNode ?? DEFAULT_MONEY_NODE;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['salePriceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n case ProductType.GIFT_CARD:\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getTotalStockRemaining = (item: Node) => {\n const type = getProductType(item);\n if (type === ProductType.DIGITAL || type === ProductType.GIFT_CARD) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n let total = 0;\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited'))) {\n return Number.MAX_SAFE_INTEGER;\n }\n total += variant.get('qtyInStock').asNumber();\n }\n }\n return total;\n};\n\nexport const hasVariedPrices = (item: Node) => {\n const type = getProductType(item);\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n const first = variants.get(0);\n const onSale = first.get('onSale');\n const salePrice = first.get('salePrice');\n const price = first.get('price');\n\n for (let i = 1; i < size; i++) {\n const v = variants.get(i);\n const flag1 = !v.get('onSale').equals(onSale);\n const flag2 = isTruthy(onSale) && !v.get('salePrice').equals(salePrice);\n const flag3 = !v.get('price').equals(price);\n if (flag1 || flag2 || flag3) {\n return true;\n }\n }\n }\n return false;\n }\n\n case ProductType.DIGITAL:\n default:\n return false;\n }\n};\n\nexport const isOnSale = (item: Node) => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('onSale'))) {\n return true;\n }\n }\n }\n break;\n }\n\n case ProductType.DIGITAL:\n return isTruthy(content.get('onSale'));\n\n case ProductType.GIFT_CARD:\n default:\n break;\n }\n return false;\n};\n\nexport const isSoldOut = (item: Node) => {\n const type = getProductType(item);\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n if (variants.type === Type.ARRAY) {\n for (let i = 0; i < variants.size(); i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited')) || variant.get('qtyInStock').asNumber() > 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n case ProductType.DIGITAL:\n case ProductType.GIFT_CARD:\n return false;\n\n default:\n return true;\n }\n};\n\nexport const isSubscribable = (item: Node): boolean => item.path(['structuredContent', 'isSubscribable']).asBoolean();\n\n// TODO: writeMoneyString\n\n// TODO: writePriceString\n\n// TODO: writeVariantFormat\n\nconst getUserDefinedOptions = (content: Node) => {\n const ordering = content.get('variantOptionOrdering');\n const options = [];\n const size = ordering.size();\n for (let i = 0; i < size; i++) {\n const name = ordering.get(i).asString();\n options.push({ name, values: [] });\n }\n return options;\n};\n\nexport const getItemVariantOptions = (item: Node) => {\n const content = item.get('structuredContent');\n const variants = content.get('variants');\n const variantsSize = variants.size();\n if (variantsSize <= 1) {\n return [];\n }\n\n const userDefinedOptions = getUserDefinedOptions(content);\n\n for (let i = 0; i < variantsSize; i++) {\n const variant = variants.get(i);\n const attrs: Node = variant.get('attributes');\n if (attrs.type !== Type.OBJECT) {\n continue;\n }\n\n const fields = Object.keys(attrs.value);\n for (let j = 0; j < fields.length; j++) {\n const field = fields[j];\n const variantOptionValue: string = attrs.get(field).asString();\n\n let option = null;\n for (let k = 0; k < userDefinedOptions.length; k++) {\n const current = userDefinedOptions[k];\n if (current.name === field) {\n option = current;\n break;\n }\n }\n\n if (option === null) {\n continue;\n }\n\n let hasValue = false;\n const optionValues: string[] = option.values;\n for (let k = 0; k < optionValues.length; k++) {\n const value = optionValues[k];\n if (value === variantOptionValue) {\n hasValue = true;\n break;\n }\n }\n\n if (!hasValue) {\n optionValues.push(variantOptionValue);\n }\n }\n }\n return userDefinedOptions;\n};\n\nconst MULTIPLE_QTY_ALLOWED_FIELD = 'multipleQuantityAllowedForServices';\n\nexport const isMultipleQuantityAllowedForServices = (websiteSettings: Node) => {\n const storeSettings = websiteSettings.get('storeSettings');\n if (storeSettings.type === Type.OBJECT) {\n const value = storeSettings.get(MULTIPLE_QTY_ALLOWED_FIELD);\n if (value.type !== Type.NULL && value.type !== Type.MISSING) {\n return value.asBoolean();\n }\n }\n return true;\n};\n\nexport const getVariantFormat = (variant: Node) => {\n const options = variant.get('optionValues');\n const size = options.size();\n let res = '';\n for (let i = 0; i < size; i++) {\n if (i > 0) {\n res += ' / ';\n }\n const value = options.get(i).get('value').asString();\n res += value;\n }\n return res;\n};\n"]} |
| import { Decimal } from '@phensley/cldr-core'; | ||
| import { Context } from '../context'; | ||
| export declare const parseDecimal: (s: string | number) => Decimal | undefined; | ||
| export declare const useCLDRMode: (ctx: Context) => any; |
| import { Decimal } from '@phensley/cldr-core'; | ||
| import { isTruthy } from '../node'; | ||
| export var parseDecimal = function (s) { | ||
@@ -10,2 +11,3 @@ try { | ||
| }; | ||
| export var useCLDRMode = function (ctx) { return isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat'])); }; | ||
| //# sourceMappingURL=util.i18n.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.i18n.js","sourceRoot":"","sources":["../../src/plugins/util.i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,CAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\n\nexport const parseDecimal = (s: string | number): Decimal | undefined => {\n try {\n return new Decimal(s);\n } catch (e) {\n return undefined;\n }\n};\n"]} | ||
| {"version":3,"file":"util.i18n.js","sourceRoot":"","sources":["../../src/plugins/util.i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,CAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,GAAY,IAAK,OAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAA7D,CAA6D,CAAC","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\nimport { Context } from '../context';\nimport { isTruthy } from '../node';\n\nexport const parseDecimal = (s: string | number): Decimal | undefined => {\n try {\n return new Decimal(s);\n } catch (e) {\n return undefined;\n }\n};\n\nexport const useCLDRMode = (ctx: Context) => isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat']));\n"]} |
| /** | ||
| * Capitalize first letter of a string and lowercase the rest. | ||
| */ | ||
| export declare const capitalizeFirst: (str: string) => string; | ||
| /** | ||
| * Strip text between '<' and '>' from string. | ||
@@ -3,0 +7,0 @@ */ |
| import { replaceMappedChars } from '../util'; | ||
| /** | ||
| * Capitalize first letter of a string and lowercase the rest. | ||
| */ | ||
| export var capitalizeFirst = function (str) { return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); }; | ||
| /** | ||
| * Strip text between '<' and '>' from string. | ||
@@ -4,0 +8,0 @@ */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.string.js","sourceRoot":"","sources":["../../src/plugins/util.string.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceMappedChars } from '../util';\n\n/**\n * Strip text between '<' and '>' from string.\n */\nexport const removeTags = (str: string) => {\n let res = '';\n let intag = false;\n const len = str.length;\n for (let i = 0; i < len; i++) {\n const ch = str[i];\n switch (ch) {\n case '<':\n intag = true;\n break;\n case '>':\n intag = false;\n res += ' ';\n break;\n default:\n if (!intag) {\n res += ch;\n }\n }\n }\n return res;\n};\n\nconst HTML_ATTRIBUTE_CHARS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\nexport const escapeHtmlAttributes = (str: string) => {\n return replaceMappedChars(str, HTML_ATTRIBUTE_CHARS);\n};\n\nconst SLUG_KILLCHARS = /[^a-zA-Z0-9\\s-]+/g;\nconst WHITESPACE_RE = /\\s+/g;\n\nexport const slugify = (str: string) => {\n str = str.replace(SLUG_KILLCHARS, '');\n str = str.replace(WHITESPACE_RE, '-');\n return str.toLowerCase();\n};\n\nconst SCRIPT_TAG = /<\\//g;\n\nexport const escapeScriptTags = (str: string) => {\n return str.replace(SCRIPT_TAG, '<\\\\/');\n};\n\nconst ELLIPSIS = '...';\n\nexport const truncate = (str: string, maxLen: number, ellipsis: string = ELLIPSIS) => {\n if (str.length <= maxLen) {\n return str;\n }\n\n let end = maxLen;\n for (let i = maxLen - 1; i >= 0; i--) {\n const ch = str[i];\n if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\u000b' || ch === '\\r' || ch === '\\f') {\n end = i + 1;\n break;\n }\n }\n return str.substring(0, end) + ellipsis;\n};\n\nexport const defaultIfEmpty = (str: string, fallback: string) => (str === null || !str ? fallback : str);\n"]} | ||
| {"version":3,"file":"util.string.js","sourceRoot":"","sources":["../../src/plugins/util.string.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceMappedChars } from '../util';\n\n/**\n * Capitalize first letter of a string and lowercase the rest.\n */\nexport const capitalizeFirst = (str: string) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n\n/**\n * Strip text between '<' and '>' from string.\n */\nexport const removeTags = (str: string) => {\n let res = '';\n let intag = false;\n const len = str.length;\n for (let i = 0; i < len; i++) {\n const ch = str[i];\n switch (ch) {\n case '<':\n intag = true;\n break;\n case '>':\n intag = false;\n res += ' ';\n break;\n default:\n if (!intag) {\n res += ch;\n }\n }\n }\n return res;\n};\n\nconst HTML_ATTRIBUTE_CHARS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\nexport const escapeHtmlAttributes = (str: string) => {\n return replaceMappedChars(str, HTML_ATTRIBUTE_CHARS);\n};\n\nconst SLUG_KILLCHARS = /[^a-zA-Z0-9\\s-]+/g;\nconst WHITESPACE_RE = /\\s+/g;\n\nexport const slugify = (str: string) => {\n str = str.replace(SLUG_KILLCHARS, '');\n str = str.replace(WHITESPACE_RE, '-');\n return str.toLowerCase();\n};\n\nconst SCRIPT_TAG = /<\\//g;\n\nexport const escapeScriptTags = (str: string) => {\n return str.replace(SCRIPT_TAG, '<\\\\/');\n};\n\nconst ELLIPSIS = '...';\n\nexport const truncate = (str: string, maxLen: number, ellipsis: string = ELLIPSIS) => {\n if (str.length <= maxLen) {\n return str;\n }\n\n let end = maxLen;\n for (let i = maxLen - 1; i >= 0; i--) {\n const ch = str[i];\n if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\u000b' || ch === '\\r' || ch === '\\f') {\n end = i + 1;\n break;\n }\n }\n return str.substring(0, end) + ellipsis;\n};\n\nexport const defaultIfEmpty = (str: string, fallback: string) => (str === null || !str ? fallback : str);\n"]} |
+17
-7
@@ -33,9 +33,19 @@ "use strict"; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| var __importStar = (this && this.__importStar) || (function () { | ||
| var ownKeys = function(o) { | ||
| ownKeys = Object.getOwnPropertyNames || function (o) { | ||
| var ar = []; | ||
| for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; | ||
| return ar; | ||
| }; | ||
| return ownKeys(o); | ||
| }; | ||
| return function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| })(); | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -42,0 +52,0 @@ exports.MatcherImpl = exports.StickyMatcher = exports.GlobalMatcher = exports.Matcher = void 0; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { Opcode } from './opcodes';\n\nimport * as patterns from './patterns';\nimport { Arguments, FormatterCall, Operator } from './instructions';\nimport { splitVariable } from './util';\nimport { hasStickyRegexp, MatcherProps, GlobalMatcherMixin, StickyMatcherMixin } from './matchers';\n\n// Table for fast mapping of instructions to their opcodes.\nconst INSTRUCTIONS: { [x: string]: (string | Opcode)[] } = {\n a: ['lternates with', Opcode.ALTERNATES_WITH],\n c: ['tx', Opcode.CTXVAR],\n e: ['nd', Opcode.END, 'of', Opcode.EOF, 'val', Opcode.EVAL],\n i: ['f', Opcode.IF, 'nclude', Opcode.INCLUDE, 'nject', Opcode.INJECT],\n m: ['acro', Opcode.MACRO, 'eta-left', Opcode.META_LEFT, 'eta-right', Opcode.META_RIGHT],\n n: ['ewline', Opcode.NEWLINE],\n o: ['r', Opcode.OR_PREDICATE],\n r: ['epeated section', Opcode.REPEATED],\n s: ['ection', Opcode.SECTION, 'pace', Opcode.SPACE],\n t: ['ab', Opcode.TAB],\n v: ['ar', Opcode.BINDVAR],\n};\n\nexport type RegExpCompiler = (s: string) => RegExp;\n\n/**\n * Helper for low-level pattern matching over a range of characters.\n */\nexport class Matcher implements MatcherProps {\n start: number = 0;\n end: number = 0;\n matchEnd: number = 0;\n\n private filePath: RegExp;\n private formatterArgs: RegExp;\n private instructionArgs: RegExp;\n private operator: RegExp;\n private predicate: RegExp;\n private variableDefinition: RegExp;\n private variableReference: RegExp;\n private variableSeparator: RegExp;\n private whitespace: RegExp;\n private word: RegExp;\n\n constructor(public str: string) {\n // Private copies of patterns, since we set RegExp.lastIndex to match\n // at string offsets.\n this.filePath = this.compile(patterns.filePath);\n this.formatterArgs = this.compile(patterns.formatterArgs);\n this.instructionArgs = this.compile(patterns.instructionArgs);\n this.operator = this.compile(patterns.operator);\n this.predicate = this.compile(patterns.predicate);\n this.variableDefinition = this.compile(patterns.variableDefinition);\n this.variableReference = this.compile(patterns.variableReference);\n this.variableSeparator = this.compile(patterns.variableSeparator);\n this.whitespace = this.compile(patterns.whitespace);\n this.word = this.compile(patterns.word);\n }\n\n /**\n * Overridden by mixin.\n */\n compile(str: string): RegExp {\n /* istanbul ignore next */\n return undefined as unknown as RegExp;\n }\n /**\n * Overridden by mixin.\n */\n match(pattern: RegExp, start: number): string | null {\n /* istanbul ignore next */\n return null;\n }\n /**\n * Overridden by mixin.\n */\n test(pattern: RegExp, start: number): boolean {\n /* istanbul ignore next */\n return false;\n }\n\n init(str: string): void {\n this.str = str;\n }\n\n /**\n * Position of the match pointer.\n */\n pos(): number {\n return this.start;\n }\n\n /**\n * Set the range to match over.\n */\n set(start: number, end: number): void {\n this.start = start;\n this.end = end;\n }\n\n /**\n * Seek forward until we find the matched character.\n */\n seekTo(ch: string): string | null {\n let i = this.start;\n const j = this.end;\n while (i <= j) {\n if (this.str[i] === ch) {\n this.end = i;\n return this.str.substr(this.start, i - this.start);\n }\n i++;\n }\n return null;\n }\n\n /**\n * Consume / skip over the last match.\n */\n consume(): void {\n this.start = this.matchEnd;\n }\n\n /**\n * Return true if entire input has been matched.\n */\n complete(): boolean {\n return this.start === this.end;\n }\n\n /**\n * This instruction matching scheme lets us do a few things simultaneously\n * with speed versus a regular expression:\n *\n * 1. check if a sequence of characters at a certain offset is an instruction\n * 2. identify the end position of the instruction\n * 3. mapping the instruction characters to its opcode, e.g. '.end' -> END\n *\n * A regular expression can do 1 and 2 using lastIndex, but for 3 it must copy\n * the substring and do a further lookup to get the opcode.\n *\n * A hand-written switch() is even faster than this method, but far less\n * maintainable. Code generation could help with maintainability, but the\n * performance improvement is not enough to be worth it right now.\n */\n matchInstruction(): Opcode {\n let start = this.start;\n const str = this.str;\n const m = INSTRUCTIONS[str[start++]];\n if (typeof m !== 'undefined') {\n const len = m.length;\n for (let i = 0; i < len; i += 2) {\n const val = m[i] as string;\n if (str.startsWith(val, start)) {\n this.matchEnd = start + val.length;\n return m[i + 1] as Opcode;\n }\n }\n }\n return Opcode.NOOP;\n }\n\n /**\n * Match arguments to a predicate.\n */\n matchArguments(): Arguments | null {\n const rawArgs = this.match(this.instructionArgs, this.start);\n if (rawArgs !== null) {\n // Parse and append formatter with arguments.\n const delim = rawArgs[0];\n const args = rawArgs.slice(1).split(delim);\n return args.length === 1 && !args[0] ? [[], delim] : [args, delim];\n }\n return null;\n }\n\n /**\n * Match one or more variable bindings.\n */\n matchBindings(): any {\n const bindings = [];\n let start = this.start;\n for (;;) {\n const key = this.match(this.word, start);\n if (key === null) {\n break;\n }\n start = this.matchEnd;\n if (this.str[start++] !== '=') {\n break;\n }\n const ref = this.match(this.variableReference, start);\n if (ref === null) {\n break;\n }\n\n bindings.push([key, splitVariable(ref)]);\n start = this.matchEnd;\n this.test(this.whitespace, start);\n start = this.matchEnd;\n }\n return bindings.length ? bindings : null;\n }\n\n /**\n * Match a variable definition.\n */\n matchDefinition(): string | null {\n return this.match(this.variableDefinition, this.start);\n }\n\n /**\n * Match a path for an INJECT or MACRO instruction.\n */\n matchFilePath(): string | null {\n return this.match(this.filePath, this.start);\n }\n\n /**\n * Match an IF expression, variables separated by && and ||.\n */\n matchIfExpression(): [Operator[], (string | number)[][]] | null {\n const variables: (string | number)[][] = [];\n const operators: Operator[] = [];\n let haveOp = false;\n let start = this.start;\n for (;;) {\n const variable = this.match(this.variableReference, start);\n if (variable === null) {\n if (haveOp) {\n return null;\n }\n break;\n }\n\n variables.push(splitVariable(variable));\n\n // Skip any optional whitespace.\n start = this.matchEnd;\n\n this.test(this.whitespace, start);\n start = this.matchEnd;\n\n const op = this.match(this.operator, start);\n if (op === null) {\n break;\n }\n\n operators.push(op === '&&' ? 1 : 0);\n haveOp = true;\n\n // Skip any optional whitespace.\n start = this.matchEnd;\n this.test(this.whitespace, start);\n start = this.matchEnd;\n }\n return [operators, variables];\n }\n\n /**\n * Match a predicate.\n */\n matchPredicate(): string | null {\n return this.match(this.predicate, this.start);\n }\n\n /**\n * Match a chain of pipe-separated formatters and optional arguments.\n */\n matchFormatters(): FormatterCall[] | null {\n let start = this.start;\n if (this.str[start++] !== '|') {\n return null;\n }\n\n // Bail if we see a 2nd pipe. This is a sniff for inline minified\n // JavaScript which can create false positives. For example: {a||b?1:0};\n if (this.str[start] === '|') {\n return null;\n }\n\n let haveSep = false;\n let result: FormatterCall[] | null = null;\n for (;;) {\n const formatter = this.match(this.word, start);\n if (formatter === null) {\n // Fail if we matched a pipe but did not find another formatter.\n if (haveSep) {\n return null;\n }\n break;\n }\n\n // Initialize the list on demand.\n if (result === null) {\n result = [];\n }\n\n // Check if this formatter has arguments.\n start = this.matchEnd;\n const rawArgs = this.match(this.formatterArgs, start);\n if (rawArgs !== null) {\n // Parse and append formatter with arguments.\n const delim = rawArgs[0];\n const args: Arguments = [rawArgs.slice(1).split(delim), delim];\n result.push([formatter, args]);\n start = this.matchEnd;\n } else {\n // Append formatter with no arguments.\n result.push([formatter]);\n }\n\n // Check if there are more formatters in the chain.\n if (this.str[start++] !== '|') {\n break;\n }\n haveSep = true;\n }\n return result;\n }\n\n /**\n * Match a single variable reference.\n */\n matchVariable(): (string | number)[] | null {\n const raw = this.match(this.variableReference, this.start);\n return raw === null ? null : splitVariable(raw);\n }\n\n /**\n * Match a list of variable references.\n */\n matchVariables(): (string | number)[][] | null {\n let start = this.start;\n let result: (string | number)[][] | null = null;\n for (;;) {\n // Attempt to match a single variable reference.\n const raw = this.match(this.variableReference, start);\n if (raw === null) {\n // If we've seen a separator but failed to match another variable\n // reference, return an error.\n if (start !== this.start) {\n return null;\n }\n break;\n }\n\n // Initialize the list on demand.\n if (result === null) {\n result = [];\n }\n result.push(splitVariable(raw));\n\n // See if there are any remaining separators.\n start = this.matchEnd;\n if (!this.test(this.variableSeparator, start)) {\n break;\n }\n\n start = this.matchEnd;\n }\n\n return result;\n }\n\n /**\n * Match a single space.\n */\n matchSpace(): boolean {\n if (this.str[this.start] === ' ') {\n this.matchEnd = this.start + 1;\n return true;\n }\n return false;\n }\n\n /**\n * Match one or more whitespace characters.\n */\n matchWhitespace(): boolean {\n return this.test(this.whitespace, this.start);\n }\n}\n\nexport class GlobalMatcher extends GlobalMatcherMixin(Matcher) {}\nexport class StickyMatcher extends StickyMatcherMixin(Matcher) {}\n\n/* istanbul ignore next */\nexport const MatcherImpl = hasStickyRegexp ? StickyMatcher : GlobalMatcher;\n"]} | ||
| {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { Opcode } from './opcodes';\n\nimport * as patterns from './patterns';\nimport { Arguments, FormatterCall, Operator } from './instructions';\nimport { splitVariable } from './util';\nimport { hasStickyRegexp, MatcherProps, GlobalMatcherMixin, StickyMatcherMixin } from './matchers';\n\n// Table for fast mapping of instructions to their opcodes.\nconst INSTRUCTIONS: { [x: string]: (string | Opcode)[] } = {\n a: ['lternates with', Opcode.ALTERNATES_WITH],\n c: ['tx', Opcode.CTXVAR],\n e: ['nd', Opcode.END, 'of', Opcode.EOF, 'val', Opcode.EVAL],\n i: ['f', Opcode.IF, 'nclude', Opcode.INCLUDE, 'nject', Opcode.INJECT],\n m: ['acro', Opcode.MACRO, 'eta-left', Opcode.META_LEFT, 'eta-right', Opcode.META_RIGHT],\n n: ['ewline', Opcode.NEWLINE],\n o: ['r', Opcode.OR_PREDICATE],\n r: ['epeated section', Opcode.REPEATED],\n s: ['ection', Opcode.SECTION, 'pace', Opcode.SPACE],\n t: ['ab', Opcode.TAB],\n v: ['ar', Opcode.BINDVAR],\n};\n\nexport type RegExpCompiler = (s: string) => RegExp;\n\n/**\n * Helper for low-level pattern matching over a range of characters.\n */\nexport class Matcher implements MatcherProps {\n start: number = 0;\n end: number = 0;\n matchEnd: number = 0;\n\n private filePath: RegExp;\n private formatterArgs: RegExp;\n private instructionArgs: RegExp;\n private operator: RegExp;\n private predicate: RegExp;\n private variableDefinition: RegExp;\n private variableReference: RegExp;\n private variableSeparator: RegExp;\n private whitespace: RegExp;\n private word: RegExp;\n\n constructor(public str: string) {\n // Private copies of patterns, since we set RegExp.lastIndex to match\n // at string offsets.\n this.filePath = this.compile(patterns.filePath);\n this.formatterArgs = this.compile(patterns.formatterArgs);\n this.instructionArgs = this.compile(patterns.instructionArgs);\n this.operator = this.compile(patterns.operator);\n this.predicate = this.compile(patterns.predicate);\n this.variableDefinition = this.compile(patterns.variableDefinition);\n this.variableReference = this.compile(patterns.variableReference);\n this.variableSeparator = this.compile(patterns.variableSeparator);\n this.whitespace = this.compile(patterns.whitespace);\n this.word = this.compile(patterns.word);\n }\n\n /**\n * Overridden by mixin.\n */\n compile(str: string): RegExp {\n /* istanbul ignore next */\n return undefined as unknown as RegExp;\n }\n /**\n * Overridden by mixin.\n */\n match(pattern: RegExp, start: number): string | null {\n /* istanbul ignore next */\n return null;\n }\n /**\n * Overridden by mixin.\n */\n test(pattern: RegExp, start: number): boolean {\n /* istanbul ignore next */\n return false;\n }\n\n init(str: string): void {\n this.str = str;\n }\n\n /**\n * Position of the match pointer.\n */\n pos(): number {\n return this.start;\n }\n\n /**\n * Set the range to match over.\n */\n set(start: number, end: number): void {\n this.start = start;\n this.end = end;\n }\n\n /**\n * Seek forward until we find the matched character.\n */\n seekTo(ch: string): string | null {\n let i = this.start;\n const j = this.end;\n while (i <= j) {\n if (this.str[i] === ch) {\n this.end = i;\n return this.str.substr(this.start, i - this.start);\n }\n i++;\n }\n return null;\n }\n\n /**\n * Consume / skip over the last match.\n */\n consume(): void {\n this.start = this.matchEnd;\n }\n\n /**\n * Return true if entire input has been matched.\n */\n complete(): boolean {\n return this.start === this.end;\n }\n\n /**\n * This instruction matching scheme lets us do a few things simultaneously\n * with speed versus a regular expression:\n *\n * 1. check if a sequence of characters at a certain offset is an instruction\n * 2. identify the end position of the instruction\n * 3. mapping the instruction characters to its opcode, e.g. '.end' -> END\n *\n * A regular expression can do 1 and 2 using lastIndex, but for 3 it must copy\n * the substring and do a further lookup to get the opcode.\n *\n * A hand-written switch() is even faster than this method, but far less\n * maintainable. Code generation could help with maintainability, but the\n * performance improvement is not enough to be worth it right now.\n */\n matchInstruction(): Opcode {\n let start = this.start;\n const str = this.str;\n const m = INSTRUCTIONS[str[start++]];\n if (typeof m !== 'undefined') {\n const len = m.length;\n for (let i = 0; i < len; i += 2) {\n const val = m[i] as string;\n if (str.startsWith(val, start)) {\n this.matchEnd = start + val.length;\n return m[i + 1] as Opcode;\n }\n }\n }\n return Opcode.NOOP;\n }\n\n /**\n * Match arguments to a predicate.\n */\n matchArguments(): Arguments | null {\n const rawArgs = this.match(this.instructionArgs, this.start);\n if (rawArgs !== null) {\n // Parse and append formatter with arguments.\n const delim = rawArgs[0];\n const args = rawArgs.slice(1).split(delim);\n return args.length === 1 && !args[0] ? [[], delim] : [args, delim];\n }\n return null;\n }\n\n /**\n * Match one or more variable bindings.\n */\n matchBindings(): any {\n const bindings = [];\n let start = this.start;\n for (;;) {\n const key = this.match(this.word, start);\n if (key === null) {\n break;\n }\n start = this.matchEnd;\n if (this.str[start++] !== '=') {\n break;\n }\n const ref = this.match(this.variableReference, start);\n if (ref === null) {\n break;\n }\n\n bindings.push([key, splitVariable(ref)]);\n start = this.matchEnd;\n this.test(this.whitespace, start);\n start = this.matchEnd;\n }\n return bindings.length ? bindings : null;\n }\n\n /**\n * Match a variable definition.\n */\n matchDefinition(): string | null {\n return this.match(this.variableDefinition, this.start);\n }\n\n /**\n * Match a path for an INJECT or MACRO instruction.\n */\n matchFilePath(): string | null {\n return this.match(this.filePath, this.start);\n }\n\n /**\n * Match an IF expression, variables separated by && and ||.\n */\n matchIfExpression(): [Operator[], (string | number)[][]] | null {\n const variables: (string | number)[][] = [];\n const operators: Operator[] = [];\n let haveOp = false;\n let start = this.start;\n for (;;) {\n const variable = this.match(this.variableReference, start);\n if (variable === null) {\n if (haveOp) {\n return null;\n }\n break;\n }\n\n variables.push(splitVariable(variable));\n\n // Skip any optional whitespace.\n start = this.matchEnd;\n\n this.test(this.whitespace, start);\n start = this.matchEnd;\n\n const op = this.match(this.operator, start);\n if (op === null) {\n break;\n }\n\n operators.push(op === '&&' ? 1 : 0);\n haveOp = true;\n\n // Skip any optional whitespace.\n start = this.matchEnd;\n this.test(this.whitespace, start);\n start = this.matchEnd;\n }\n return [operators, variables];\n }\n\n /**\n * Match a predicate.\n */\n matchPredicate(): string | null {\n return this.match(this.predicate, this.start);\n }\n\n /**\n * Match a chain of pipe-separated formatters and optional arguments.\n */\n matchFormatters(): FormatterCall[] | null {\n let start = this.start;\n if (this.str[start++] !== '|') {\n return null;\n }\n\n // Bail if we see a 2nd pipe. This is a sniff for inline minified\n // JavaScript which can create false positives. For example: {a||b?1:0};\n if (this.str[start] === '|') {\n return null;\n }\n\n let haveSep = false;\n let result: FormatterCall[] | null = null;\n for (;;) {\n const formatter = this.match(this.word, start);\n if (formatter === null) {\n // Fail if we matched a pipe but did not find another formatter.\n if (haveSep) {\n return null;\n }\n break;\n }\n\n // Initialize the list on demand.\n if (result === null) {\n result = [];\n }\n\n // Check if this formatter has arguments.\n start = this.matchEnd;\n const rawArgs = this.match(this.formatterArgs, start);\n if (rawArgs !== null) {\n // Parse and append formatter with arguments.\n const delim = rawArgs[0];\n const args: Arguments = [rawArgs.slice(1).split(delim), delim];\n result.push([formatter, args]);\n start = this.matchEnd;\n } else {\n // Append formatter with no arguments.\n result.push([formatter]);\n }\n\n // Check if there are more formatters in the chain.\n if (this.str[start++] !== '|') {\n break;\n }\n haveSep = true;\n }\n return result;\n }\n\n /**\n * Match a single variable reference.\n */\n matchVariable(): (string | number)[] | null {\n const raw = this.match(this.variableReference, this.start);\n return raw === null ? null : splitVariable(raw);\n }\n\n /**\n * Match a list of variable references.\n */\n matchVariables(): (string | number)[][] | null {\n let start = this.start;\n let result: (string | number)[][] | null = null;\n for (;;) {\n // Attempt to match a single variable reference.\n const raw = this.match(this.variableReference, start);\n if (raw === null) {\n // If we've seen a separator but failed to match another variable\n // reference, return an error.\n if (start !== this.start) {\n return null;\n }\n break;\n }\n\n // Initialize the list on demand.\n if (result === null) {\n result = [];\n }\n result.push(splitVariable(raw));\n\n // See if there are any remaining separators.\n start = this.matchEnd;\n if (!this.test(this.variableSeparator, start)) {\n break;\n }\n\n start = this.matchEnd;\n }\n\n return result;\n }\n\n /**\n * Match a single space.\n */\n matchSpace(): boolean {\n if (this.str[this.start] === ' ') {\n this.matchEnd = this.start + 1;\n return true;\n }\n return false;\n }\n\n /**\n * Match one or more whitespace characters.\n */\n matchWhitespace(): boolean {\n return this.test(this.whitespace, this.start);\n }\n}\n\nexport class GlobalMatcher extends GlobalMatcherMixin(Matcher) {}\nexport class StickyMatcher extends StickyMatcherMixin(Matcher) {}\n\n/* istanbul ignore next */\nexport const MatcherImpl = hasStickyRegexp ? StickyMatcher : GlobalMatcher;\n"]} |
| import { Context } from '../context'; | ||
| import { Node } from '../node'; | ||
| import { Variable } from '../variable'; | ||
@@ -31,7 +32,30 @@ import { Formatter, FormatterTable } from '../plugin'; | ||
| } | ||
| type ProductPriceTemplateData = { | ||
| fromText?: string; | ||
| formattedFromPrice?: string; | ||
| formattedSalePriceText?: string; | ||
| formattedSalePrice?: string; | ||
| formattedNormalPriceText?: string; | ||
| formattedNormalPrice?: string; | ||
| billingPeriodValue?: number; | ||
| duration?: number; | ||
| }; | ||
| export declare class ProductPriceFormatter extends Formatter { | ||
| private static BILLING_PERIOD_MONTHLY; | ||
| private static BILLING_PERIOD_WEEKLY; | ||
| private static BILLING_PERIOD_YEARLY; | ||
| private static PER_YEAR; | ||
| apply(args: string[], vars: Variable[], ctx: Context): void; | ||
| resolveTemplateVariablesForOTPProduct(args: string[], ctx: Context, productNode: Node, templateData: ProductPriceTemplateData): void; | ||
| resolveTemplateVariablesForSubscriptionProduct(args: string[], ctx: Context, productNode: Node, templateData: ProductPriceTemplateData): void; | ||
| defaultSubscriptionPriceString(productNode: Node): string; | ||
| getSubscriptionPlanBillingPeriodNode(item: Node): Node; | ||
| getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node): string; | ||
| getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node): number; | ||
| getNumBillingCyclesFromSubscriptionPlanNode(item: Node): number; | ||
| } | ||
| export declare class SubscriptionPriceFormatter extends Formatter { | ||
| apply(args: string[], vars: Variable[], ctx: Context): void; | ||
| getSalePriceMoney(pricingOption: Node, args: string[], ctx: Context): string; | ||
| getPriceMoney(pricingOption: Node, args: string[], ctx: Context): string; | ||
| } | ||
@@ -68,1 +92,2 @@ export declare class ProductQuickViewFormatter extends Formatter { | ||
| export declare const COMMERCE_FORMATTERS: FormatterTable; | ||
| export {}; |
@@ -33,12 +33,23 @@ "use strict"; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| var __importStar = (this && this.__importStar) || (function () { | ||
| var ownKeys = function(o) { | ||
| ownKeys = Object.getOwnPropertyNames || function (o) { | ||
| var ar = []; | ||
| for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; | ||
| return ar; | ||
| }; | ||
| return ownKeys(o); | ||
| }; | ||
| return function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| })(); | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| var _a; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -58,5 +69,7 @@ exports.COMMERCE_FORMATTERS = exports.SummaryFormFieldFormatter = exports.VariantsSelectFormatter = exports.VariantDescriptorFormatter = exports.SalePriceFormatter = exports.QuantityInputFormatter = exports.ProductStatusFormatter = exports.ProductScarcityFormatter = exports.ProductRestockNotificationFormatter = exports.ProductQuickViewFormatter = exports.SubscriptionPriceFormatter = exports.ProductPriceFormatter = exports.ProductCheckoutFormatter = exports.NormalPriceFormatter = exports.PercentageFormatFormatter = exports.FromPriceFormatter = exports.CartUrlFormatter = exports.CartSubtotalFormatter = exports.CartQuantityFormatter = exports.BookkeeperMoneyFormat = exports.AddToCartButtonFormatter = void 0; | ||
| var product_checkout_json_1 = __importDefault(require("./templates/product-checkout.json")); | ||
| var product_price_json_1 = __importDefault(require("./templates/product-price.json")); | ||
| var product_restock_notification_json_1 = __importDefault(require("./templates/product-restock-notification.json")); | ||
| var product_scarcity_json_1 = __importDefault(require("./templates/product-scarcity.json")); | ||
| var quantity_input_json_1 = __importDefault(require("./templates/quantity-input.json")); | ||
| var subscription_price_json_1 = __importDefault(require("./templates/subscription-price.json")); | ||
| var summary_form_field_address_json_1 = __importDefault(require("./templates/summary-form-field-address.json")); | ||
@@ -71,2 +84,3 @@ var summary_form_field_checkbox_json_1 = __importDefault(require("./templates/summary-form-field-checkbox.json")); | ||
| var ZERO = (0, util_i18n_1.parseDecimal)('0'); | ||
| var PRODUCT_PRICE_FROM_TEXT_PATH = ['localizedStrings', 'productPriceFromText']; | ||
| var AddToCartButtonFormatter = /** @class */ (function (_super) { | ||
@@ -230,5 +244,132 @@ __extends(AddToCartButtonFormatter, _super); | ||
| ProductPriceFormatter.prototype.apply = function (args, vars, ctx) { | ||
| // TODO: product-price impl | ||
| vars[0].set('not yet implemented'); | ||
| var first = vars[0]; | ||
| var node = first.node; | ||
| var templateData = {}; | ||
| if (commerceutil.isSubscribable(node)) { | ||
| this.resolveTemplateVariablesForSubscriptionProduct(args, ctx, node, templateData); | ||
| } | ||
| else if (commerceutil.getProductType(node) !== enums_1.ProductType.UNDEFINED) { | ||
| this.resolveTemplateVariablesForOTPProduct(args, ctx, node, templateData); | ||
| } | ||
| var priceInfo = (0, exec_1.executeTemplate)(ctx, product_price_json_1.default, new node_1.Node(templateData), true); | ||
| first.set(priceInfo); | ||
| }; | ||
| ProductPriceFormatter.prototype.resolveTemplateVariablesForOTPProduct = function (args, ctx, productNode, templateData) { | ||
| if (commerceutil.hasVariedPrices(productNode)) { | ||
| var productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH); | ||
| templateData.fromText = !productPriceFromTextNode.isMissing() ? | ||
| productPriceFromTextNode.asString() : | ||
| 'from {fromPrice}'; | ||
| templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx); | ||
| } | ||
| if (commerceutil.isOnSale(productNode)) { | ||
| templateData.formattedSalePriceText = '{price}'; | ||
| templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx); | ||
| } | ||
| templateData.formattedNormalPriceText = '{price}'; | ||
| templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx); | ||
| }; | ||
| ProductPriceFormatter.prototype.resolveTemplateVariablesForSubscriptionProduct = function (args, ctx, productNode, templateData) { | ||
| var billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode); | ||
| if (billingPeriodNode.isMissing()) { | ||
| var productPriceUnavailableTextNode = ctx.resolve(['localizedStrings', 'productPriceUnavailable']); | ||
| templateData.fromText = !productPriceUnavailableTextNode.isMissing() ? | ||
| productPriceUnavailableTextNode.asString() : | ||
| 'Unavailable'; | ||
| templateData.formattedFromPrice = 'true'; | ||
| return; | ||
| } | ||
| var hasMultiplePrices = commerceutil.hasVariedPrices(productNode); | ||
| var billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var durationValue = billingPeriodValue * this.getNumBillingCyclesFromSubscriptionPlanNode(productNode); | ||
| var durationUnit = billingPeriodUnit; | ||
| var PER_YEAR = _b.PER_YEAR; | ||
| // If the duration is a multiple of 52 weeks or 12 months, convert to years. | ||
| // Otherwise, use the billing period unit for the duration unit. | ||
| if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) { | ||
| durationValue /= PER_YEAR[durationUnit]; | ||
| durationUnit = _b.BILLING_PERIOD_YEARLY; | ||
| } | ||
| templateData.billingPeriodValue = billingPeriodValue; | ||
| templateData.duration = durationValue; | ||
| // This string needs to match the correct translation template in v6 products-2.0-en-US.json. | ||
| var localizedStringKey = 'productPrice__' + | ||
| "".concat(hasMultiplePrices ? 'multiplePrices' : 'singlePrice', "__") + | ||
| "".concat(billingPeriodValue === 1 ? '1' : 'n').concat(stringutil.capitalizeFirst(billingPeriodUnit), "ly__"); | ||
| if (durationValue == 0) { | ||
| localizedStringKey += 'indefinite'; | ||
| } | ||
| else { | ||
| localizedStringKey += "limited__".concat(durationValue === 1 ? '1' : 'n').concat(stringutil.capitalizeFirst(durationUnit), "s"); | ||
| } | ||
| var localizedStringNode = ctx.resolve(['localizedStrings', localizedStringKey]); | ||
| var templateForPrice = !localizedStringNode.isMissing() ? | ||
| localizedStringNode.asString() : | ||
| this.defaultSubscriptionPriceString(productNode); | ||
| if (hasMultiplePrices) { | ||
| templateData.fromText = templateForPrice; | ||
| templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx); | ||
| } | ||
| if (commerceutil.isOnSale(productNode)) { | ||
| templateData.formattedSalePriceText = templateForPrice; | ||
| templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx); | ||
| } | ||
| templateData.formattedNormalPriceText = templateForPrice; | ||
| templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx); | ||
| }; | ||
| // TODO: This is shitty. The formatter should, if necessary, look up the English string and use it. | ||
| // NOTE: ^ This TODO was taken from the corresponding function in CommerceFormatters in template-compiler: | ||
| // https://github.com/Squarespace/template-compiler/blob/main/core/src/main/java/com/squarespace/template/plugins/platform/CommerceFormatters.java/#L438 | ||
| ProductPriceFormatter.prototype.defaultSubscriptionPriceString = function (productNode) { | ||
| var billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode); | ||
| var hasMultiplePrices = commerceutil.hasVariedPrices(productNode); | ||
| var billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var billingPeriodPlural = billingPeriodValue > 1; | ||
| var billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode); | ||
| var numBillingCycles = this.getNumBillingCyclesFromSubscriptionPlanNode(productNode); | ||
| var durationValue = billingPeriodValue * numBillingCycles; | ||
| var durationUnit = billingPeriodUnit; | ||
| var PER_YEAR = _b.PER_YEAR; | ||
| // If the duration is a multiple of 52 weeks or 12 months, convert to years. | ||
| // Otherwise, use the billing period unit for the duration unit. | ||
| if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) { | ||
| durationValue /= PER_YEAR[durationUnit]; | ||
| durationUnit = _b.BILLING_PERIOD_YEARLY; | ||
| } | ||
| var subPriceString = (hasMultiplePrices ? 'from ' : '') + | ||
| '{price} every ' + | ||
| (billingPeriodPlural ? '{billingPeriodValue} ' : '') + | ||
| billingPeriodUnit.toLowerCase() + | ||
| (billingPeriodPlural ? 's' : ''); | ||
| if (numBillingCycles > 0) { | ||
| subPriceString += ' for {duration} ' + | ||
| durationUnit.toLowerCase() + | ||
| (durationValue === 1 ? '' : 's'); | ||
| } | ||
| return subPriceString; | ||
| }; | ||
| ProductPriceFormatter.prototype.getSubscriptionPlanBillingPeriodNode = function (item) { | ||
| // BillingPeriod is represented as {value, unit} and is the period of time in between recurring billings | ||
| // e.g. {2, MONTH} means a subscriber is billed once every 2 months | ||
| return item.path(['structuredContent', 'subscriptionPlan', 'billingPeriod']); | ||
| }; | ||
| ProductPriceFormatter.prototype.getUnitFromSubscriptionPlanBillingPeriod = function (billingPeriodNode) { | ||
| return billingPeriodNode.path(['unit']).asString(); | ||
| }; | ||
| ProductPriceFormatter.prototype.getValueFromSubscriptionPlanBillingPeriod = function (billingPeriodNode) { | ||
| return billingPeriodNode.path(['value']).asNumber(); | ||
| }; | ||
| ProductPriceFormatter.prototype.getNumBillingCyclesFromSubscriptionPlanNode = function (item) { | ||
| return item.path(['structuredContent', 'subscriptionPlan', 'numBillingCycles']).asNumber(); | ||
| }; | ||
| var _b; | ||
| _b = ProductPriceFormatter; | ||
| ProductPriceFormatter.BILLING_PERIOD_MONTHLY = 'MONTH'; | ||
| ProductPriceFormatter.BILLING_PERIOD_WEEKLY = 'WEEK'; | ||
| ProductPriceFormatter.BILLING_PERIOD_YEARLY = 'YEAR'; | ||
| ProductPriceFormatter.PER_YEAR = (_a = {}, | ||
| _a[_b.BILLING_PERIOD_WEEKLY] = 52, | ||
| _a[_b.BILLING_PERIOD_MONTHLY] = 12, | ||
| _a); | ||
| return ProductPriceFormatter; | ||
@@ -243,9 +384,36 @@ }(plugin_1.Formatter)); | ||
| SubscriptionPriceFormatter.prototype.apply = function (args, vars, ctx) { | ||
| // Because ProductPriceFormatter has been missing impl for a while now | ||
| // I think it's ok if we don't implement SubscriptionPriceFormatter | ||
| // because both formatters would be used together and I don't see | ||
| // when these formatters would ever be rendered client. | ||
| // TODO: subscription-price impl if ProductPriceFormatter (above) is also implemented. | ||
| vars[0].set('not yet implemented'); | ||
| var first = vars[0]; | ||
| var node = first.node; | ||
| var subscriptionResults = {}; | ||
| var pricingOptions = commerceutil.getPricingOptionsAmongLowestVariant(node); | ||
| if (pricingOptions != null && pricingOptions.size() > 0) { | ||
| if (commerceutil.hasVariedPrices(node)) { | ||
| // This will return either salePriceMoney or priceMoney depending on whether the onSale is true or false. | ||
| // That's because this block here is the from {price} so the from price needs to be the lowest possible price | ||
| // taking into if a variant is onSale. | ||
| var subscriptionFromPricingNode = commerceutil.getSubscriptionMoneyFromFirstPricingOptions(pricingOptions); | ||
| var productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH); | ||
| subscriptionResults.fromText = !productPriceFromTextNode.isMissing() ? | ||
| productPriceFromTextNode.asString() : | ||
| 'from {fromPrice}'; | ||
| subscriptionResults.formattedFromPrice = commerceutil.getMoneyString(subscriptionFromPricingNode, args, ctx); | ||
| } | ||
| var firstPricingOption = pricingOptions.get(0); | ||
| var isFirstPricingOptionOnSale = (0, node_2.isTruthy)(firstPricingOption.path(['onSale'])); | ||
| if (isFirstPricingOptionOnSale) { | ||
| subscriptionResults.formattedSubscriptionSalePriceText = '{price}'; | ||
| subscriptionResults.formattedSubscriptionSalePrice = this.getSalePriceMoney(firstPricingOption, args, ctx); | ||
| } | ||
| subscriptionResults.formattedNormalSubscriptionPriceText = '{price}'; | ||
| subscriptionResults.formattedNormalSubscriptionPrice = this.getPriceMoney(firstPricingOption, args, ctx); | ||
| } | ||
| var subscriptionPriceInfo = (0, exec_1.executeTemplate)(ctx, subscription_price_json_1.default, new node_1.Node(subscriptionResults), true); | ||
| first.set(subscriptionPriceInfo); | ||
| }; | ||
| SubscriptionPriceFormatter.prototype.getSalePriceMoney = function (pricingOption, args, ctx) { | ||
| return commerceutil.getMoneyString(pricingOption.path(['salePriceMoney']), args, ctx); | ||
| }; | ||
| SubscriptionPriceFormatter.prototype.getPriceMoney = function (pricingOption, args, ctx) { | ||
| return commerceutil.getMoneyString(pricingOption.path(['priceMoney']), args, ctx); | ||
| }; | ||
| return SubscriptionPriceFormatter; | ||
@@ -252,0 +420,0 @@ }(plugin_1.Formatter)); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"formatters.commerce.js","sourceRoot":"","sources":["../../src/plugins/formatters.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context } from '../context';\nimport { ProductType } from './enums';\nimport { Node } from '../node';\nimport { Variable } from '../variable';\nimport { RootCode } from '../instructions';\nimport { Formatter, FormatterTable } from '../plugin';\nimport { isTruthy, MISSING_NODE } from '../node';\nimport { executeTemplate } from '../exec';\nimport * as commerceutil from './util.commerce';\nimport * as stringutil from './util.string';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\n// Template imports\nimport addToCartBtnTemplate from './templates/add-to-cart-btn.json';\nimport productCheckoutTemplate from './templates/product-checkout.json';\nimport productRestockNotificationTemplate from './templates/product-restock-notification.json';\nimport productScarcityTemplate from './templates/product-scarcity.json';\nimport quantityInputTemplate from './templates/quantity-input.json';\nimport summaryFormFieldAddressTemplate from './templates/summary-form-field-address.json';\nimport summaryFormFieldCheckboxTemplate from './templates/summary-form-field-checkbox.json';\nimport summaryFormFieldDateTemplate from './templates/summary-form-field-date.json';\nimport summaryFormFieldLikertTemplate from './templates/summary-form-field-likert.json';\nimport summaryFormFieldNameTemplate from './templates/summary-form-field-name.json';\nimport summaryFormFieldPhoneTemplate from './templates/summary-form-field-phone.json';\nimport summaryFormFieldTimeTemplate from './templates/summary-form-field-time.json';\nimport variantsSelectTemplate from './templates/variants-select.json';\n\nconst ZERO = parseDecimal('0');\n\nexport class AddToCartButtonFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, addToCartBtnTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class BookkeeperMoneyFormat extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const region = cldr.General.locale().tag.region();\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n n = n.divide(100);\n const currency = cldr.Numbers.getCurrencyForRegion(region);\n const s = cldr.Numbers.formatCurrency(n, currency);\n first.set(s);\n }\n}\n\nexport class CartQuantityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n let count = 0;\n const entries = first.node.get('entries');\n if (entries.type === Type.ARRAY) {\n for (let i = 0; i < entries.value.length; i++) {\n count += entries.get(i).get('quantity').asNumber();\n }\n }\n const text = `<span class=\"sqs-cart-quantity\">${count}</span>`;\n first.set(text);\n }\n}\n\nexport class CartSubtotalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('deprecated, do not use');\n }\n}\n\nexport class CartUrlFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('/cart');\n }\n}\n\nexport class FromPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getFromPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class PercentageFormatFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const trim = args.filter((a) => a === 'trim').length > 0;\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n const minimumFractionDigits = trim ? 0 : 2;\n const r = cldr?.Numbers.formatDecimal(n, {\n minimumFractionDigits,\n maximumFractionDigits: 3,\n });\n first.set(r);\n }\n}\n\nexport class NormalPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getNormalPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class ProductCheckoutFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, productCheckoutTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class ProductPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n // TODO: product-price impl\n vars[0].set('not yet implemented');\n }\n}\n\nexport class SubscriptionPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n // Because ProductPriceFormatter has been missing impl for a while now\n // I think it's ok if we don't implement SubscriptionPriceFormatter\n // because both formatters would be used together and I don't see\n // when these formatters would ever be rendered client.\n // TODO: subscription-price impl if ProductPriceFormatter (above) is also implemented.\n vars[0].set('not yet implemented');\n }}\n\nexport class ProductQuickViewFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const id = node.get('id').asString();\n let group = args[0] || '';\n let groupNode = node.get(group);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n } else {\n groupNode = ctx.resolve([group]);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n }\n }\n\n let buf = '';\n buf += `<span class=\"sqs-product-quick-view-button\" role=\"button\" tabindex=\"0\" data-id=\"${id}\"`;\n buf += ` data-group=\"${group}\">`;\n\n const text = ctx.resolve(['localizedStrings', 'productQuickViewText']);\n buf += text.isMissing() ? 'Quick View' : text.asString();\n buf += '</span>';\n first.set(buf);\n }\n}\n\nexport class ProductRestockNotificationFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const websiteCtx = ctx.resolve(['website']);\n const productCtx = ctx.resolve(['productMerchandisingContext']);\n const first = vars[0];\n const node = first.node;\n\n const productId = [node.get('id').asString()];\n const product = productCtx.path(productId);\n const obj = {\n product: node.value,\n views: product.path(['restockNotificationViews']).value,\n messages: product.path(['restockNotificationMessages']).value,\n mailingListSignUpEnabled: product.path(['mailingListSignUpEnabled']).value,\n mailingListOptInByDefault: product.path(['mailingListOptInByDefault']).value,\n captchaSiteKey: websiteCtx.path(['captchaSettings', 'siteKey']).value,\n };\n\n const res = executeTemplate(ctx, productRestockNotificationTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n}\n\nexport class ProductScarcityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n if (merchCtx.isMissing()) {\n return;\n }\n\n const first = vars[0];\n const product = first.node;\n const id = product.get('id').asString();\n const productCtx = merchCtx.get(id);\n\n if (!productCtx.isMissing() && productCtx.get('scarcityEnabled').asBoolean()) {\n const obj: any = {\n scarcityTemplateViews: productCtx.get('scarcityTemplateViews').value,\n scarcityText: productCtx.get('scarcityText').value,\n scarcityShownByDefault: productCtx.get('scarcityShownByDefault').value,\n };\n const res = executeTemplate(ctx, productScarcityTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n }\n}\n\nexport class ProductStatusFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n\n const id = node.get('id').asString();\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n let customSoldOutMessage: string = '';\n if (id && !merchCtx.isMissing()) {\n customSoldOutMessage = merchCtx.path([id, 'customSoldOutText']).asString();\n }\n\n if (commerceutil.isSoldOut(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSoldOutText']).asString();\n let buf = `<div class=\"product-mark sold-out\">`;\n buf += stringutil.escapeHtmlAttributes(customSoldOutMessage || text || 'sold out');\n buf += '</div>';\n first.set(buf);\n } else if (commerceutil.isOnSale(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSaleText']).asString();\n let buf = `<div class=\"product-mark sale\">`;\n buf += text || 'sale';\n buf += '</div>';\n first.set(buf);\n } else {\n first.set(MISSING_NODE);\n }\n }\n}\n\nexport class QuantityInputFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const type = commerceutil.getProductType(node);\n const settings = ctx.resolve(['websiteSettings']);\n const multipleQuantityAllowed =\n (type === ProductType.PHYSICAL ||\n (type === ProductType.SERVICE && commerceutil.isMultipleQuantityAllowedForServices(settings))) &&\n !commerceutil.isSubscribable(node);\n const hide = !multipleQuantityAllowed || commerceutil.getTotalStockRemaining(node) <= 1;\n if (hide) {\n first.set(MISSING_NODE);\n return;\n }\n const res = executeTemplate(ctx, quantityInputTemplate as unknown as RootCode, node, false);\n first.set(res);\n }\n}\n\nexport class SalePriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getSalePrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class VariantDescriptorFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const text = commerceutil.getVariantFormat(first.node);\n first.set(text);\n }\n}\n\nexport class VariantsSelectFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n\n const options = commerceutil.getItemVariantOptions(first.node);\n if (options.length === 0) {\n first.set(MISSING_NODE);\n return;\n }\n\n const selectText = this.getSelectText(ctx, first.node);\n const displayText = this.getDisplayText(ctx, first.node);\n const node = ctx.newNode({\n item: first.node.value,\n options,\n selectText,\n displayText,\n });\n\n const text = executeTemplate(ctx, variantsSelectTemplate as unknown as RootCode, node, false);\n first.set(text);\n }\n\n private getDisplayText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated directly before being displayed to the front-end.\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardValueDisplayText']).asString();\n } else {\n fallback = '{name}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n\n private getSelectText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated differently than other products. See COM-4912 for more details\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Select Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardVariantSelectText']).asString();\n } else {\n text = ctx.resolve(['localizedStrings', 'productVariantSelectText']).asString();\n fallback = 'Select {variantName}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n}\n\nconst KEY_PREFIX = 'productAnswerMap';\nconst KEY_STRONGLY_DISAGREE = KEY_PREFIX + 'StronglyDisagree';\nconst KEY_DISAGREE = KEY_PREFIX + 'Disagree';\nconst KEY_NEUTRAL = KEY_PREFIX + 'Neutral';\nconst KEY_AGREE = KEY_PREFIX + 'Agree';\nconst KEY_STRONGLY_AGREE = KEY_PREFIX + 'StronglyAgree';\n\nconst localizeOrDefault = (strings: Node, key: string, defaultValue: string) => {\n const node = strings.get(key);\n return node.type === Type.STRING ? node.value : defaultValue;\n};\n\nconst buildAnswerMap = (strings: Node) => {\n return {\n '-2': localizeOrDefault(strings, KEY_STRONGLY_DISAGREE, 'Strongly Disagree'),\n '-1': localizeOrDefault(strings, KEY_DISAGREE, 'Disagree'),\n '0': localizeOrDefault(strings, KEY_NEUTRAL, 'Neutral'),\n '1': localizeOrDefault(strings, KEY_AGREE, 'Agree'),\n '2': localizeOrDefault(strings, KEY_STRONGLY_AGREE, 'Strongly Agree'),\n };\n};\n\nconst convertLikert = (values: any, answerMap: any) => {\n const result = [];\n const keys = Object.keys(values);\n const defaultValue = answerMap['0'];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const answerKey = values[key];\n const value = answerMap[answerKey];\n result.push({ question: key, answer: value || defaultValue });\n }\n return result;\n};\n\nconst SUMMARY_FORM_FIELD_TEMPLATE_MAP: { [x: string]: RootCode } = {\n address: summaryFormFieldAddressTemplate as unknown as RootCode,\n checkbox: summaryFormFieldCheckboxTemplate as unknown as RootCode,\n date: summaryFormFieldDateTemplate as unknown as RootCode,\n likert: summaryFormFieldLikertTemplate as unknown as RootCode,\n name: summaryFormFieldNameTemplate as unknown as RootCode,\n phone: summaryFormFieldPhoneTemplate as unknown as RootCode,\n time: summaryFormFieldTimeTemplate as unknown as RootCode,\n};\n\nexport class SummaryFormFieldFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const field = first.node;\n\n const localizedStrings = ctx.resolve(['localizedStrings']);\n const type = field.get('type').asString();\n const code = SUMMARY_FORM_FIELD_TEMPLATE_MAP[type];\n\n let value: string | null = null;\n if (code === undefined) {\n value = field.get('value').asString();\n } else {\n let node = field;\n if (type === 'likert') {\n const answerMap = buildAnswerMap(localizedStrings);\n const likert = convertLikert(field.get('values').value, answerMap);\n node = ctx.newNode(likert);\n }\n value = executeTemplate(ctx, code, node, true);\n }\n\n let buf = '<div style=\"font-size:11px; margin-top:3px\">\\n';\n\n buf += ' <span style=\"font-weight:bold;\">';\n buf += field.get('rawTitle').asString();\n buf += ':</span> ';\n if (isTruthy(value)) {\n buf += value;\n } else {\n const text = localizedStrings.get('productSummaryFormNoAnswerText').asString().trim();\n buf += text === '' ? 'N/A' : text;\n }\n buf += '\\n</div>';\n first.set(buf);\n }\n}\n\nexport const COMMERCE_FORMATTERS: FormatterTable = {\n 'add-to-cart-btn': new AddToCartButtonFormatter(),\n 'bookkeeper-money-format': new BookkeeperMoneyFormat(),\n 'cart-quantity': new CartQuantityFormatter(),\n 'cart-subtotal': new CartSubtotalFormatter(),\n 'cart-url': new CartUrlFormatter(),\n 'from-price': new FromPriceFormatter(),\n 'normal-price': new NormalPriceFormatter(),\n 'percentage-format': new PercentageFormatFormatter(),\n 'product-checkout': new ProductCheckoutFormatter(),\n 'product-price': new ProductPriceFormatter(),\n 'subscription-price': new SubscriptionPriceFormatter(),\n 'product-quick-view': new ProductQuickViewFormatter(),\n 'product-restock-notification': new ProductRestockNotificationFormatter(),\n 'product-scarcity': new ProductScarcityFormatter(),\n 'product-status': new ProductStatusFormatter(),\n 'quantity-input': new QuantityInputFormatter(),\n 'sale-price': new SalePriceFormatter(),\n 'summary-form-field': new SummaryFormFieldFormatter(),\n 'variant-descriptor': new VariantDescriptorFormatter(),\n 'variants-select': new VariantsSelectFormatter(),\n};\n"]} | ||
| {"version":3,"file":"formatters.commerce.js","sourceRoot":"","sources":["../../src/plugins/formatters.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context } from '../context';\nimport { ProductType } from './enums';\nimport { Node } from '../node';\nimport { Variable } from '../variable';\nimport { RootCode } from '../instructions';\nimport { Formatter, FormatterTable } from '../plugin';\nimport { isTruthy, MISSING_NODE } from '../node';\nimport { executeTemplate } from '../exec';\nimport * as commerceutil from './util.commerce';\nimport * as stringutil from './util.string';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\n// Template imports\nimport addToCartBtnTemplate from './templates/add-to-cart-btn.json';\nimport productCheckoutTemplate from './templates/product-checkout.json';\nimport productPriceTemplate from './templates/product-price.json';\nimport productRestockNotificationTemplate from './templates/product-restock-notification.json';\nimport productScarcityTemplate from './templates/product-scarcity.json';\nimport quantityInputTemplate from './templates/quantity-input.json';\nimport subscriptionPriceTemplate from './templates/subscription-price.json';\nimport summaryFormFieldAddressTemplate from './templates/summary-form-field-address.json';\nimport summaryFormFieldCheckboxTemplate from './templates/summary-form-field-checkbox.json';\nimport summaryFormFieldDateTemplate from './templates/summary-form-field-date.json';\nimport summaryFormFieldLikertTemplate from './templates/summary-form-field-likert.json';\nimport summaryFormFieldNameTemplate from './templates/summary-form-field-name.json';\nimport summaryFormFieldPhoneTemplate from './templates/summary-form-field-phone.json';\nimport summaryFormFieldTimeTemplate from './templates/summary-form-field-time.json';\nimport variantsSelectTemplate from './templates/variants-select.json';\n\nconst ZERO = parseDecimal('0');\nconst PRODUCT_PRICE_FROM_TEXT_PATH = ['localizedStrings', 'productPriceFromText'];\n\nexport class AddToCartButtonFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, addToCartBtnTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\nexport class BookkeeperMoneyFormat extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const region = cldr.General.locale().tag.region();\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n n = n.divide(100);\n const currency = cldr.Numbers.getCurrencyForRegion(region);\n const s = cldr.Numbers.formatCurrency(n, currency);\n first.set(s);\n }\n}\n\nexport class CartQuantityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n let count = 0;\n const entries = first.node.get('entries');\n if (entries.type === Type.ARRAY) {\n for (let i = 0; i < entries.value.length; i++) {\n count += entries.get(i).get('quantity').asNumber();\n }\n }\n const text = `<span class=\"sqs-cart-quantity\">${count}</span>`;\n first.set(text);\n }\n}\n\nexport class CartSubtotalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('deprecated, do not use');\n }\n}\n\nexport class CartUrlFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n vars[0].set('/cart');\n }\n}\n\nexport class FromPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getFromPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class PercentageFormatFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const trim = args.filter((a) => a === 'trim').length > 0;\n let n = parseDecimal(first.node.asString());\n if (n === undefined) {\n n = ZERO!;\n }\n const minimumFractionDigits = trim ? 0 : 2;\n const r = cldr?.Numbers.formatDecimal(n, {\n minimumFractionDigits,\n maximumFractionDigits: 3,\n });\n first.set(r);\n }\n}\n\nexport class NormalPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getNormalPrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class ProductCheckoutFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const text = executeTemplate(ctx, productCheckoutTemplate as unknown as RootCode, first.node, false);\n first.set(text);\n }\n}\n\ntype ProductPriceTemplateData = {\n fromText?: string;\n formattedFromPrice?: string;\n formattedSalePriceText?: string;\n formattedSalePrice?: string;\n formattedNormalPriceText?: string;\n formattedNormalPrice?: string;\n billingPeriodValue?: number;\n duration?: number;\n};\n\nexport class ProductPriceFormatter extends Formatter {\n private static BILLING_PERIOD_MONTHLY = 'MONTH';\n private static BILLING_PERIOD_WEEKLY = 'WEEK';\n private static BILLING_PERIOD_YEARLY = 'YEAR';\n private static PER_YEAR = {\n [this.BILLING_PERIOD_WEEKLY]: 52,\n [this.BILLING_PERIOD_MONTHLY]: 12,\n };\n\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { node } = first;\n const templateData: ProductPriceTemplateData = {};\n\n if (commerceutil.isSubscribable(node)) {\n this.resolveTemplateVariablesForSubscriptionProduct(args, ctx, node, templateData);\n } else if (commerceutil.getProductType(node) !== ProductType.UNDEFINED) {\n this.resolveTemplateVariablesForOTPProduct(args, ctx, node, templateData);\n }\n\n const priceInfo = executeTemplate(\n ctx,\n productPriceTemplate as unknown as RootCode,\n new Node(templateData),\n true,\n );\n first.set(priceInfo);\n }\n\n resolveTemplateVariablesForOTPProduct(\n args: string[],\n ctx: Context,\n productNode: Node,\n templateData: ProductPriceTemplateData,\n ) {\n if (commerceutil.hasVariedPrices(productNode)) {\n const productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH);\n\n templateData.fromText = !productPriceFromTextNode.isMissing() ?\n productPriceFromTextNode.asString() :\n 'from {fromPrice}';\n templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx);\n }\n\n if (commerceutil.isOnSale(productNode)) {\n templateData.formattedSalePriceText = '{price}';\n templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx);\n }\n\n templateData.formattedNormalPriceText = '{price}';\n templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx);\n }\n\n resolveTemplateVariablesForSubscriptionProduct(\n args: string[],\n ctx: Context,\n productNode: Node,\n templateData: ProductPriceTemplateData,\n ) {\n const billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode);\n\n if (billingPeriodNode.isMissing()) {\n const productPriceUnavailableTextNode = ctx.resolve(['localizedStrings', 'productPriceUnavailable']);\n \n templateData.fromText = !productPriceUnavailableTextNode.isMissing() ?\n productPriceUnavailableTextNode.asString() :\n 'Unavailable';\n templateData.formattedFromPrice = 'true';\n return;\n }\n\n const hasMultiplePrices = commerceutil.hasVariedPrices(productNode);\n const billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n\n let durationValue = billingPeriodValue * this.getNumBillingCyclesFromSubscriptionPlanNode(productNode);\n let durationUnit = billingPeriodUnit;\n\n const { PER_YEAR } = ProductPriceFormatter;\n\n // If the duration is a multiple of 52 weeks or 12 months, convert to years.\n // Otherwise, use the billing period unit for the duration unit.\n if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) {\n durationValue /= PER_YEAR[durationUnit];\n durationUnit = ProductPriceFormatter.BILLING_PERIOD_YEARLY;\n }\n\n templateData.billingPeriodValue = billingPeriodValue;\n templateData.duration = durationValue;\n\n // This string needs to match the correct translation template in v6 products-2.0-en-US.json.\n let localizedStringKey = 'productPrice__' +\n `${hasMultiplePrices ? 'multiplePrices' : 'singlePrice'}__` +\n `${billingPeriodValue === 1 ? '1' : 'n'}${stringutil.capitalizeFirst(billingPeriodUnit)}ly__`;\n\n if (durationValue == 0) {\n localizedStringKey += 'indefinite';\n } else {\n localizedStringKey += `limited__${durationValue === 1 ? '1' : 'n'}${stringutil.capitalizeFirst(durationUnit)}s`;\n }\n\n const localizedStringNode = ctx.resolve(['localizedStrings', localizedStringKey]);\n const templateForPrice = !localizedStringNode.isMissing() ?\n localizedStringNode.asString() :\n this.defaultSubscriptionPriceString(productNode);\n\n if (hasMultiplePrices) {\n templateData.fromText = templateForPrice;\n templateData.formattedFromPrice = commerceutil.getMoneyString(commerceutil.getFromPrice(productNode), args, ctx);\n }\n\n if (commerceutil.isOnSale(productNode)) {\n templateData.formattedSalePriceText = templateForPrice;\n templateData.formattedSalePrice = commerceutil.getMoneyString(commerceutil.getSalePrice(productNode), args, ctx);\n }\n\n templateData.formattedNormalPriceText = templateForPrice;\n templateData.formattedNormalPrice = commerceutil.getMoneyString(commerceutil.getNormalPrice(productNode), args, ctx);\n }\n\n // TODO: This is shitty. The formatter should, if necessary, look up the English string and use it.\n // NOTE: ^ This TODO was taken from the corresponding function in CommerceFormatters in template-compiler:\n // https://github.com/Squarespace/template-compiler/blob/main/core/src/main/java/com/squarespace/template/plugins/platform/CommerceFormatters.java/#L438\n defaultSubscriptionPriceString(productNode: Node) {\n const billingPeriodNode = this.getSubscriptionPlanBillingPeriodNode(productNode);\n\n const hasMultiplePrices = commerceutil.hasVariedPrices(productNode);\n const billingPeriodValue = this.getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const billingPeriodPlural = billingPeriodValue > 1;\n const billingPeriodUnit = this.getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode);\n const numBillingCycles = this.getNumBillingCyclesFromSubscriptionPlanNode(productNode);\n let durationValue = billingPeriodValue * numBillingCycles;\n let durationUnit = billingPeriodUnit;\n\n const { PER_YEAR } = ProductPriceFormatter;\n\n // If the duration is a multiple of 52 weeks or 12 months, convert to years.\n // Otherwise, use the billing period unit for the duration unit.\n if (durationValue > 0 && PER_YEAR[durationUnit] && durationValue % PER_YEAR[durationUnit] === 0) {\n durationValue /= PER_YEAR[durationUnit];\n durationUnit = ProductPriceFormatter.BILLING_PERIOD_YEARLY;\n }\n\n let subPriceString = (hasMultiplePrices ? 'from ' : '') +\n '{price} every ' +\n (billingPeriodPlural ? '{billingPeriodValue} ' : '') +\n billingPeriodUnit.toLowerCase() +\n (billingPeriodPlural ? 's' : '');\n\n if (numBillingCycles > 0) {\n subPriceString += ' for {duration} ' +\n durationUnit.toLowerCase() +\n (durationValue === 1 ? '' : 's');\n }\n\n return subPriceString;\n }\n\n getSubscriptionPlanBillingPeriodNode(item: Node) {\n // BillingPeriod is represented as {value, unit} and is the period of time in between recurring billings\n // e.g. {2, MONTH} means a subscriber is billed once every 2 months\n return item.path(['structuredContent', 'subscriptionPlan', 'billingPeriod']);\n }\n\n getUnitFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node) {\n return billingPeriodNode.path(['unit']).asString();\n }\n\n getValueFromSubscriptionPlanBillingPeriod(billingPeriodNode: Node) {\n return billingPeriodNode.path(['value']).asNumber();\n }\n\n getNumBillingCyclesFromSubscriptionPlanNode(item: Node) {\n return item.path(['structuredContent', 'subscriptionPlan', 'numBillingCycles']).asNumber();\n }\n}\n\nexport class SubscriptionPriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { node } = first;\n const subscriptionResults: {\n fromText?: string;\n formattedFromPrice?: string;\n formattedSubscriptionSalePriceText?: string;\n formattedSubscriptionSalePrice?: string;\n formattedNormalSubscriptionPriceText?: string;\n formattedNormalSubscriptionPrice?: string;\n } = {};\n\n const pricingOptions = commerceutil.getPricingOptionsAmongLowestVariant(node);\n\n if (pricingOptions != null && pricingOptions.size() > 0) {\n if (commerceutil.hasVariedPrices(node)) {\n // This will return either salePriceMoney or priceMoney depending on whether the onSale is true or false.\n // That's because this block here is the from {price} so the from price needs to be the lowest possible price\n // taking into if a variant is onSale.\n const subscriptionFromPricingNode = commerceutil.getSubscriptionMoneyFromFirstPricingOptions(pricingOptions);\n const productPriceFromTextNode = ctx.resolve(PRODUCT_PRICE_FROM_TEXT_PATH);\n\n subscriptionResults.fromText = !productPriceFromTextNode.isMissing() ?\n productPriceFromTextNode.asString() :\n 'from {fromPrice}';\n subscriptionResults.formattedFromPrice = commerceutil.getMoneyString(subscriptionFromPricingNode, args, ctx);\n }\n\n const firstPricingOption = pricingOptions.get(0);\n const isFirstPricingOptionOnSale = isTruthy(firstPricingOption.path(['onSale']));\n\n if (isFirstPricingOptionOnSale) {\n subscriptionResults.formattedSubscriptionSalePriceText = '{price}';\n subscriptionResults.formattedSubscriptionSalePrice = this.getSalePriceMoney(firstPricingOption, args, ctx);\n }\n\n subscriptionResults.formattedNormalSubscriptionPriceText = '{price}';\n subscriptionResults.formattedNormalSubscriptionPrice = this.getPriceMoney(firstPricingOption, args, ctx);\n }\n\n const subscriptionPriceInfo = executeTemplate(\n ctx,\n subscriptionPriceTemplate as unknown as RootCode,\n new Node(subscriptionResults),\n true,\n );\n first.set(subscriptionPriceInfo);\n }\n\n getSalePriceMoney(pricingOption: Node, args: string[], ctx: Context) {\n return commerceutil.getMoneyString(pricingOption.path(['salePriceMoney']), args, ctx);\n }\n\n getPriceMoney(pricingOption: Node, args: string[], ctx: Context) {\n return commerceutil.getMoneyString(pricingOption.path(['priceMoney']), args, ctx);\n }\n}\n\nexport class ProductQuickViewFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const id = node.get('id').asString();\n let group = args[0] || '';\n let groupNode = node.get(group);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n } else {\n groupNode = ctx.resolve([group]);\n if (!groupNode.isMissing()) {\n group = groupNode.asString();\n }\n }\n\n let buf = '';\n buf += `<span class=\"sqs-product-quick-view-button\" role=\"button\" tabindex=\"0\" data-id=\"${id}\"`;\n buf += ` data-group=\"${group}\">`;\n\n const text = ctx.resolve(['localizedStrings', 'productQuickViewText']);\n buf += text.isMissing() ? 'Quick View' : text.asString();\n buf += '</span>';\n first.set(buf);\n }\n}\n\nexport class ProductRestockNotificationFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const websiteCtx = ctx.resolve(['website']);\n const productCtx = ctx.resolve(['productMerchandisingContext']);\n const first = vars[0];\n const node = first.node;\n\n const productId = [node.get('id').asString()];\n const product = productCtx.path(productId);\n const obj = {\n product: node.value,\n views: product.path(['restockNotificationViews']).value,\n messages: product.path(['restockNotificationMessages']).value,\n mailingListSignUpEnabled: product.path(['mailingListSignUpEnabled']).value,\n mailingListOptInByDefault: product.path(['mailingListOptInByDefault']).value,\n captchaSiteKey: websiteCtx.path(['captchaSettings', 'siteKey']).value,\n };\n\n const res = executeTemplate(ctx, productRestockNotificationTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n}\n\nexport class ProductScarcityFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n if (merchCtx.isMissing()) {\n return;\n }\n\n const first = vars[0];\n const product = first.node;\n const id = product.get('id').asString();\n const productCtx = merchCtx.get(id);\n\n if (!productCtx.isMissing() && productCtx.get('scarcityEnabled').asBoolean()) {\n const obj: any = {\n scarcityTemplateViews: productCtx.get('scarcityTemplateViews').value,\n scarcityText: productCtx.get('scarcityText').value,\n scarcityShownByDefault: productCtx.get('scarcityShownByDefault').value,\n };\n const res = executeTemplate(ctx, productScarcityTemplate as unknown as RootCode, new Node(obj), false);\n first.set(res);\n }\n }\n}\n\nexport class ProductStatusFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n\n const id = node.get('id').asString();\n const merchCtx = ctx.resolve(['productMerchandisingContext']);\n let customSoldOutMessage: string = '';\n if (id && !merchCtx.isMissing()) {\n customSoldOutMessage = merchCtx.path([id, 'customSoldOutText']).asString();\n }\n\n if (commerceutil.isSoldOut(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSoldOutText']).asString();\n let buf = `<div class=\"product-mark sold-out\">`;\n buf += stringutil.escapeHtmlAttributes(customSoldOutMessage || text || 'sold out');\n buf += '</div>';\n first.set(buf);\n } else if (commerceutil.isOnSale(node)) {\n const text = ctx.resolve(['localizedStrings', 'productSaleText']).asString();\n let buf = `<div class=\"product-mark sale\">`;\n buf += text || 'sale';\n buf += '</div>';\n first.set(buf);\n } else {\n first.set(MISSING_NODE);\n }\n }\n}\n\nexport class QuantityInputFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n const type = commerceutil.getProductType(node);\n const settings = ctx.resolve(['websiteSettings']);\n const multipleQuantityAllowed =\n (type === ProductType.PHYSICAL ||\n (type === ProductType.SERVICE && commerceutil.isMultipleQuantityAllowedForServices(settings))) &&\n !commerceutil.isSubscribable(node);\n const hide = !multipleQuantityAllowed || commerceutil.getTotalStockRemaining(node) <= 1;\n if (hide) {\n first.set(MISSING_NODE);\n return;\n }\n const res = executeTemplate(ctx, quantityInputTemplate as unknown as RootCode, node, false);\n first.set(res);\n }\n}\n\nexport class SalePriceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const price = commerceutil.getSalePrice(first.node);\n if (price) {\n const res = commerceutil.getLegacyPriceFromMoneyNode(price);\n first.set(res.toString());\n }\n }\n}\n\nexport class VariantDescriptorFormatter extends Formatter {\n apply(args: string[], vars: Variable[], _ctx: Context): void {\n const first = vars[0];\n const text = commerceutil.getVariantFormat(first.node);\n first.set(text);\n }\n}\n\nexport class VariantsSelectFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n\n const options = commerceutil.getItemVariantOptions(first.node);\n if (options.length === 0) {\n first.set(MISSING_NODE);\n return;\n }\n\n const selectText = this.getSelectText(ctx, first.node);\n const displayText = this.getDisplayText(ctx, first.node);\n const node = ctx.newNode({\n item: first.node.value,\n options,\n selectText,\n displayText,\n });\n\n const text = executeTemplate(ctx, variantsSelectTemplate as unknown as RootCode, node, false);\n first.set(text);\n }\n\n private getDisplayText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated directly before being displayed to the front-end.\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardValueDisplayText']).asString();\n } else {\n fallback = '{name}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n\n private getSelectText(ctx: Context, node: Node): string {\n const productType = commerceutil.getProductType(node);\n // Gift Cards have variants forcibly named \"Value\" by default (as opposed to a merchant-defined variant name) and\n // thus must be translated differently than other products. See COM-4912 for more details\n let text = '';\n\n // TODO: still need to implement message formatting in typescript compiler\n let fallback = 'Select Value';\n if (productType === ProductType.GIFT_CARD) {\n text = ctx.resolve(['localizedStrings', 'giftCardVariantSelectText']).asString();\n } else {\n text = ctx.resolve(['localizedStrings', 'productVariantSelectText']).asString();\n fallback = 'Select {variantName}';\n }\n return stringutil.defaultIfEmpty(text, fallback);\n }\n}\n\nconst KEY_PREFIX = 'productAnswerMap';\nconst KEY_STRONGLY_DISAGREE = KEY_PREFIX + 'StronglyDisagree';\nconst KEY_DISAGREE = KEY_PREFIX + 'Disagree';\nconst KEY_NEUTRAL = KEY_PREFIX + 'Neutral';\nconst KEY_AGREE = KEY_PREFIX + 'Agree';\nconst KEY_STRONGLY_AGREE = KEY_PREFIX + 'StronglyAgree';\n\nconst localizeOrDefault = (strings: Node, key: string, defaultValue: string) => {\n const node = strings.get(key);\n return node.type === Type.STRING ? node.value : defaultValue;\n};\n\nconst buildAnswerMap = (strings: Node) => {\n return {\n '-2': localizeOrDefault(strings, KEY_STRONGLY_DISAGREE, 'Strongly Disagree'),\n '-1': localizeOrDefault(strings, KEY_DISAGREE, 'Disagree'),\n '0': localizeOrDefault(strings, KEY_NEUTRAL, 'Neutral'),\n '1': localizeOrDefault(strings, KEY_AGREE, 'Agree'),\n '2': localizeOrDefault(strings, KEY_STRONGLY_AGREE, 'Strongly Agree'),\n };\n};\n\nconst convertLikert = (values: any, answerMap: any) => {\n const result = [];\n const keys = Object.keys(values);\n const defaultValue = answerMap['0'];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const answerKey = values[key];\n const value = answerMap[answerKey];\n result.push({ question: key, answer: value || defaultValue });\n }\n return result;\n};\n\nconst SUMMARY_FORM_FIELD_TEMPLATE_MAP: { [x: string]: RootCode } = {\n address: summaryFormFieldAddressTemplate as unknown as RootCode,\n checkbox: summaryFormFieldCheckboxTemplate as unknown as RootCode,\n date: summaryFormFieldDateTemplate as unknown as RootCode,\n likert: summaryFormFieldLikertTemplate as unknown as RootCode,\n name: summaryFormFieldNameTemplate as unknown as RootCode,\n phone: summaryFormFieldPhoneTemplate as unknown as RootCode,\n time: summaryFormFieldTimeTemplate as unknown as RootCode,\n};\n\nexport class SummaryFormFieldFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const field = first.node;\n\n const localizedStrings = ctx.resolve(['localizedStrings']);\n const type = field.get('type').asString();\n const code = SUMMARY_FORM_FIELD_TEMPLATE_MAP[type];\n\n let value: string | null = null;\n if (code === undefined) {\n value = field.get('value').asString();\n } else {\n let node = field;\n if (type === 'likert') {\n const answerMap = buildAnswerMap(localizedStrings);\n const likert = convertLikert(field.get('values').value, answerMap);\n node = ctx.newNode(likert);\n }\n value = executeTemplate(ctx, code, node, true);\n }\n\n let buf = '<div style=\"font-size:11px; margin-top:3px\">\\n';\n\n buf += ' <span style=\"font-weight:bold;\">';\n buf += field.get('rawTitle').asString();\n buf += ':</span> ';\n if (isTruthy(value)) {\n buf += value;\n } else {\n const text = localizedStrings.get('productSummaryFormNoAnswerText').asString().trim();\n buf += text === '' ? 'N/A' : text;\n }\n buf += '\\n</div>';\n first.set(buf);\n }\n}\n\nexport const COMMERCE_FORMATTERS: FormatterTable = {\n 'add-to-cart-btn': new AddToCartButtonFormatter(),\n 'bookkeeper-money-format': new BookkeeperMoneyFormat(),\n 'cart-quantity': new CartQuantityFormatter(),\n 'cart-subtotal': new CartSubtotalFormatter(),\n 'cart-url': new CartUrlFormatter(),\n 'from-price': new FromPriceFormatter(),\n 'normal-price': new NormalPriceFormatter(),\n 'percentage-format': new PercentageFormatFormatter(),\n 'product-checkout': new ProductCheckoutFormatter(),\n 'product-price': new ProductPriceFormatter(),\n 'subscription-price': new SubscriptionPriceFormatter(),\n 'product-quick-view': new ProductQuickViewFormatter(),\n 'product-restock-notification': new ProductRestockNotificationFormatter(),\n 'product-scarcity': new ProductScarcityFormatter(),\n 'product-status': new ProductStatusFormatter(),\n 'quantity-input': new QuantityInputFormatter(),\n 'sale-price': new SalePriceFormatter(),\n 'summary-form-field': new SummaryFormFieldFormatter(),\n 'variant-descriptor': new VariantDescriptorFormatter(),\n 'variants-select': new VariantsSelectFormatter(),\n};\n"]} |
@@ -19,3 +19,2 @@ "use strict"; | ||
| exports.I18N_FORMATTERS = exports.TimeSinceFormatter = exports.RelativeTimeFormatter = exports.MoneyFormatter = exports.MessageFormatterImpl = exports.DecimalFormatter = exports.DatetimeIntervalformatter = exports.DatetimeFormatter = void 0; | ||
| var node_1 = require("../node"); | ||
| var plugin_1 = require("../plugin"); | ||
@@ -158,3 +157,2 @@ var util_timezone_1 = require("./util.timezone"); | ||
| exports.MessageFormatterImpl = MessageFormatterImpl; | ||
| var useCLDRMode = function (ctx) { return (0, node_1.isTruthy)(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat'])); }; | ||
| var MoneyFormatter = /** @class */ (function (_super) { | ||
@@ -171,6 +169,4 @@ __extends(MoneyFormatter, _super); | ||
| if (decimalValue.isMissing() || currencyNode.isMissing()) { | ||
| if (useCLDRMode(ctx)) { | ||
| decimalValue = node.path(['value']); | ||
| currencyNode = node.path(['currency']); | ||
| } | ||
| decimalValue = node.path(['value']); | ||
| currencyNode = node.path(['currency']); | ||
| // No valid money node found. | ||
@@ -177,0 +173,0 @@ if (decimalValue.isMissing() || currencyNode.isMissing()) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"formatters.i18n.js","sourceRoot":"","sources":["../../src/plugins/formatters.i18n.ts"],"names":[],"mappings":"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","sourcesContent":["import { CurrencyType } from '@phensley/cldr-core';\n\nimport { Context } from '../context';\nimport { Variable } from '../variable';\nimport { FormatterTable } from '../plugin';\nimport { isTruthy } from '../node';\nimport { Formatter } from '../plugin';\nimport { getTimeZone } from './util.timezone';\nimport { parseDecimal } from './util.i18n';\nimport { currencyOptions, datetimeOptions, decimalOptions, intervalOptions, relativetimeOptions } from './options';\nimport { splitVariable } from '../util';\nimport { humanizeDate } from './util.content';\n\nexport class DatetimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const date = first.node.asNumber();\n if (isNaN(date)) {\n first.set('');\n return;\n }\n\n const opts = datetimeOptions(args);\n const zoneId = getTimeZone(ctx);\n const res = cldr.Calendars.formatDate({ date, zoneId }, opts);\n first.set(res);\n }\n}\n\nexport class DatetimeIntervalformatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const cldr = ctx.cldr;\n if (!cldr || vars.length < 2) {\n vars[0].set('');\n return;\n }\n\n const n0 = vars[0].node.asNumber();\n const n1 = vars[1].node.asNumber();\n if (!isFinite(n0) || !isFinite(n1)) {\n vars[0].set('');\n return;\n }\n\n const zoneId = getTimeZone(ctx);\n const start = { date: n0, zoneId };\n const end = { date: n1, zoneId };\n const opts = intervalOptions(args);\n const res = cldr.Calendars.formatDateInterval(start, end, opts);\n vars[0].set(res);\n }\n}\n\n// TODO: datetimefield DEPRECATED\n\nexport class DecimalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const node = first.node.asString();\n const opts = decimalOptions(args);\n const num = parseDecimal(node);\n if (num !== undefined) {\n const res = cldr.Numbers.formatDecimal(num, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\n// TODO: i18n-money-format (Legacy)\n\n// Find the key/value delimiter in a string.\nconst delimiter = (s: string): number => {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n // Either ':' or '=' can delimit arguments\n if (c === ':' || c === '=') {\n return i;\n }\n }\n return -1;\n};\n\nexport class MessageFormatterImpl extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const positional: any[] = [];\n const keyword: { [name: string]: any } = {};\n args.forEach((arg) => {\n const parent = ctx.frame().parent;\n const i = delimiter(arg);\n if (i === -1) {\n const _arg = ctx.resolveFrom(splitVariable(arg), parent ? parent : ctx.frame());\n positional.push(_arg);\n } else {\n const key = arg.slice(0, i);\n const val = arg.slice(i + 1);\n const _val = ctx.resolveFrom(splitVariable(val), parent ? parent : ctx.frame());\n // Index the argument both as a keyword and positional\n keyword[key] = _val;\n positional.push(_val);\n }\n });\n\n const { formatter } = ctx;\n const zoneId = getTimeZone(ctx);\n formatter!.setTimeZone(zoneId);\n\n const msg = first.node.asString();\n const result = formatter!.formatter.format(msg, positional, keyword);\n first.set(result);\n }\n}\n\nconst useCLDRMode = (ctx: Context) => isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat']));\n\nexport class MoneyFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n let decimalValue = node.path(['decimalValue']);\n let currencyNode = node.path(['currencyCode']);\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n if (useCLDRMode(ctx)) {\n decimalValue = node.path(['value']);\n currencyNode = node.path(['currency']);\n }\n\n // No valid money node found.\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n first.set('');\n return;\n }\n }\n\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const code = currencyNode.asString();\n const decimal = parseDecimal(decimalValue.asString());\n if (decimal !== undefined) {\n const opts = currencyOptions(args);\n const res = cldr.Numbers.formatCurrency(decimal, code as CurrencyType, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\nexport class RelativeTimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n let s = ctx.now === undefined ? new Date().getTime() : ctx.now;\n let e = first.node.asNumber();\n if (vars.length > 1) {\n s = e;\n e = vars[1].node.asNumber();\n }\n if (!isFinite(s) || !isFinite(e)) {\n first.set('');\n return;\n }\n const start = cldr.Calendars.toGregorianDate({ date: s });\n const end = cldr.Calendars.toGregorianDate({ date: e });\n\n const opts = relativetimeOptions(args);\n const res = cldr.Calendars.formatRelativeTime(start, end, opts);\n first.set(res);\n }\n}\n\nexport class TimeSinceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const n = first.node.asNumber();\n const { cldr } = ctx;\n if (!cldr || !isFinite(n)) {\n first.set('Invalid date.');\n return;\n }\n const now = ctx.now === undefined ? new Date().getTime() : ctx.now;\n const base = cldr.Calendars.toGregorianDate({ date: now });\n const date = cldr.Calendars.toGregorianDate({ date: n });\n\n const delta = base.unixEpoch() - date.unixEpoch();\n const res = humanizeDate(delta, false);\n const html = `<span class=\"timesince\" data-date=\"${n}\">${res}</span>`;\n first.set(html);\n }\n}\n\n// TODO: unit\n\nexport const I18N_FORMATTERS: FormatterTable = {\n datetime: new DatetimeFormatter(),\n 'datetime-interval': new DatetimeIntervalformatter(),\n decimal: new DecimalFormatter(),\n message: new MessageFormatterImpl(),\n money: new MoneyFormatter(),\n plural: new MessageFormatterImpl(),\n 'relative-time': new RelativeTimeFormatter(),\n timesince: new TimeSinceFormatter(),\n};\n"]} | ||
| {"version":3,"file":"formatters.i18n.js","sourceRoot":"","sources":["../../src/plugins/formatters.i18n.ts"],"names":[],"mappings":"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","sourcesContent":["import { CurrencyType } from '@phensley/cldr-core';\n\nimport { Context } from '../context';\nimport { Variable } from '../variable';\nimport { FormatterTable } from '../plugin';\nimport { Formatter } from '../plugin';\nimport { getTimeZone } from './util.timezone';\nimport { parseDecimal } from './util.i18n';\nimport { currencyOptions, datetimeOptions, decimalOptions, intervalOptions, relativetimeOptions } from './options';\nimport { splitVariable } from '../util';\nimport { humanizeDate } from './util.content';\n\nexport class DatetimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const date = first.node.asNumber();\n if (isNaN(date)) {\n first.set('');\n return;\n }\n\n const opts = datetimeOptions(args);\n const zoneId = getTimeZone(ctx);\n const res = cldr.Calendars.formatDate({ date, zoneId }, opts);\n first.set(res);\n }\n}\n\nexport class DatetimeIntervalformatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const cldr = ctx.cldr;\n if (!cldr || vars.length < 2) {\n vars[0].set('');\n return;\n }\n\n const n0 = vars[0].node.asNumber();\n const n1 = vars[1].node.asNumber();\n if (!isFinite(n0) || !isFinite(n1)) {\n vars[0].set('');\n return;\n }\n\n const zoneId = getTimeZone(ctx);\n const start = { date: n0, zoneId };\n const end = { date: n1, zoneId };\n const opts = intervalOptions(args);\n const res = cldr.Calendars.formatDateInterval(start, end, opts);\n vars[0].set(res);\n }\n}\n\n// TODO: datetimefield DEPRECATED\n\nexport class DecimalFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const node = first.node.asString();\n const opts = decimalOptions(args);\n const num = parseDecimal(node);\n if (num !== undefined) {\n const res = cldr.Numbers.formatDecimal(num, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\n// TODO: i18n-money-format (Legacy)\n\n// Find the key/value delimiter in a string.\nconst delimiter = (s: string): number => {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n // Either ':' or '=' can delimit arguments\n if (c === ':' || c === '=') {\n return i;\n }\n }\n return -1;\n};\n\nexport class MessageFormatterImpl extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const positional: any[] = [];\n const keyword: { [name: string]: any } = {};\n args.forEach((arg) => {\n const parent = ctx.frame().parent;\n const i = delimiter(arg);\n if (i === -1) {\n const _arg = ctx.resolveFrom(splitVariable(arg), parent ? parent : ctx.frame());\n positional.push(_arg);\n } else {\n const key = arg.slice(0, i);\n const val = arg.slice(i + 1);\n const _val = ctx.resolveFrom(splitVariable(val), parent ? parent : ctx.frame());\n // Index the argument both as a keyword and positional\n keyword[key] = _val;\n positional.push(_val);\n }\n });\n\n const { formatter } = ctx;\n const zoneId = getTimeZone(ctx);\n formatter!.setTimeZone(zoneId);\n\n const msg = first.node.asString();\n const result = formatter!.formatter.format(msg, positional, keyword);\n first.set(result);\n }\n}\n\nexport class MoneyFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const node = first.node;\n let decimalValue = node.path(['decimalValue']);\n let currencyNode = node.path(['currencyCode']);\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n decimalValue = node.path(['value']);\n currencyNode = node.path(['currency']);\n\n // No valid money node found.\n if (decimalValue.isMissing() || currencyNode.isMissing()) {\n first.set('');\n return;\n }\n }\n\n const cldr = ctx.cldr;\n if (!cldr) {\n first.set('');\n return;\n }\n\n const code = currencyNode.asString();\n const decimal = parseDecimal(decimalValue.asString());\n if (decimal !== undefined) {\n const opts = currencyOptions(args);\n const res = cldr.Numbers.formatCurrency(decimal, code as CurrencyType, opts);\n first.set(res);\n } else {\n first.set('');\n }\n }\n}\n\nexport class RelativeTimeFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const { cldr } = ctx;\n if (!cldr) {\n first.set('');\n return;\n }\n let s = ctx.now === undefined ? new Date().getTime() : ctx.now;\n let e = first.node.asNumber();\n if (vars.length > 1) {\n s = e;\n e = vars[1].node.asNumber();\n }\n if (!isFinite(s) || !isFinite(e)) {\n first.set('');\n return;\n }\n const start = cldr.Calendars.toGregorianDate({ date: s });\n const end = cldr.Calendars.toGregorianDate({ date: e });\n\n const opts = relativetimeOptions(args);\n const res = cldr.Calendars.formatRelativeTime(start, end, opts);\n first.set(res);\n }\n}\n\nexport class TimeSinceFormatter extends Formatter {\n apply(args: string[], vars: Variable[], ctx: Context): void {\n const first = vars[0];\n const n = first.node.asNumber();\n const { cldr } = ctx;\n if (!cldr || !isFinite(n)) {\n first.set('Invalid date.');\n return;\n }\n const now = ctx.now === undefined ? new Date().getTime() : ctx.now;\n const base = cldr.Calendars.toGregorianDate({ date: now });\n const date = cldr.Calendars.toGregorianDate({ date: n });\n\n const delta = base.unixEpoch() - date.unixEpoch();\n const res = humanizeDate(delta, false);\n const html = `<span class=\"timesince\" data-date=\"${n}\">${res}</span>`;\n first.set(html);\n }\n}\n\n// TODO: unit\n\nexport const I18N_FORMATTERS: FormatterTable = {\n datetime: new DatetimeFormatter(),\n 'datetime-interval': new DatetimeIntervalformatter(),\n decimal: new DecimalFormatter(),\n message: new MessageFormatterImpl(),\n money: new MoneyFormatter(),\n plural: new MessageFormatterImpl(),\n 'relative-time': new RelativeTimeFormatter(),\n timesince: new TimeSinceFormatter(),\n};\n"]} |
@@ -1,3 +0,4 @@ | ||
| import { Decimal } from '@phensley/cldr-core'; | ||
| import { CurrencyType, Decimal } from '@phensley/cldr-core'; | ||
| import { Node } from '../node'; | ||
| import { Context } from 'src/context'; | ||
| export declare const getProductType: (item: Node) => import("..").EnumValue<"ProductType"> | undefined; | ||
@@ -7,6 +8,10 @@ export declare const getVariants: (item: Node) => Node; | ||
| export declare const getAmountFromMoneyNode: (moneyNode?: Node) => Decimal; | ||
| export declare const getCurrencyFromMoneyNode: (moneyNode: Node) => CurrencyType; | ||
| export declare const getLegacyPriceFromMoneyNode: (moneyNode: Node) => Decimal; | ||
| export declare const getFromPrice: (item: Node) => Node | undefined; | ||
| export declare const getNormalPrice: (item: Node) => Node | undefined; | ||
| export declare const getSalePrice: (item: Node) => Node | undefined; | ||
| export declare const getMoneyString: (moneyNode: Node, args: string[], ctx: Context) => string; | ||
| export declare const getSubscriptionMoneyFromFirstPricingOptions: (pricingOptions: Node) => Node; | ||
| export declare const getPricingOptionsAmongLowestVariant: (item: Node) => Node | null; | ||
| export declare const getFromPrice: (item: Node) => Node; | ||
| export declare const getNormalPrice: (item: Node) => Node; | ||
| export declare const getSalePrice: (item: Node) => Node; | ||
| export declare const getTotalStockRemaining: (item: Node) => number; | ||
@@ -13,0 +18,0 @@ export declare const hasVariedPrices: (item: Node) => boolean; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.getVariantFormat = exports.isMultipleQuantityAllowedForServices = exports.getItemVariantOptions = exports.isSubscribable = exports.isSoldOut = exports.isOnSale = exports.hasVariedPrices = exports.getTotalStockRemaining = exports.getSalePrice = exports.getNormalPrice = exports.getFromPrice = exports.getLegacyPriceFromMoneyNode = exports.getAmountFromMoneyNode = exports.hasVariants = exports.getVariants = exports.getProductType = void 0; | ||
| exports.getVariantFormat = exports.isMultipleQuantityAllowedForServices = exports.getItemVariantOptions = exports.isSubscribable = exports.isSoldOut = exports.isOnSale = exports.hasVariedPrices = exports.getTotalStockRemaining = exports.getSalePrice = exports.getNormalPrice = exports.getFromPrice = exports.getPricingOptionsAmongLowestVariant = exports.getSubscriptionMoneyFromFirstPricingOptions = exports.getMoneyString = exports.getLegacyPriceFromMoneyNode = exports.getCurrencyFromMoneyNode = exports.getAmountFromMoneyNode = exports.hasVariants = exports.getVariants = exports.getProductType = void 0; | ||
| var node_1 = require("../node"); | ||
@@ -8,2 +8,3 @@ var enums_1 = require("./enums"); | ||
| var util_i18n_1 = require("./util.i18n"); | ||
| var options_1 = require("./options"); | ||
| var productTypePath = ['structuredContent', 'productType']; | ||
@@ -41,2 +42,8 @@ var variantsPath = ['structuredContent', 'variants']; | ||
| exports.getAmountFromMoneyNode = getAmountFromMoneyNode; | ||
| var getCurrencyFromMoneyNode = function (moneyNode) { | ||
| var currencyNode = moneyNode.path(['currency']); | ||
| var currency = !currencyNode.isMissing() ? currencyNode.asString().trim() : DEFAULT_MONEY_NODE.path(['currency']).asString(); | ||
| return currency; | ||
| }; | ||
| exports.getCurrencyFromMoneyNode = getCurrencyFromMoneyNode; | ||
| var getLegacyPriceFromMoneyNode = function (moneyNode) { | ||
@@ -47,2 +54,57 @@ var price = (0, exports.getAmountFromMoneyNode)(moneyNode); | ||
| exports.getLegacyPriceFromMoneyNode = getLegacyPriceFromMoneyNode; | ||
| var getMoneyString = function (moneyNode, args, ctx) { | ||
| var _a, _b; | ||
| if ((0, util_i18n_1.useCLDRMode)(ctx)) { | ||
| var amount = (0, exports.getAmountFromMoneyNode)(moneyNode); | ||
| var currencyCode = (0, exports.getCurrencyFromMoneyNode)(moneyNode); | ||
| return (_b = (_a = ctx.cldr) === null || _a === void 0 ? void 0 : _a.Numbers.formatCurrency(amount, currencyCode, (0, options_1.currencyOptions)(args))) !== null && _b !== void 0 ? _b : ''; | ||
| } | ||
| else { | ||
| var legacyAmount = (0, exports.getLegacyPriceFromMoneyNode)(moneyNode); | ||
| var numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); | ||
| var formattedAmount = numberFormatter.format(parseFloat(legacyAmount.toString()) / 100); | ||
| return "<span class=\"sqs-money-native\">".concat(formattedAmount, "</span>"); | ||
| } | ||
| }; | ||
| exports.getMoneyString = getMoneyString; | ||
| var getSubscriptionMoneyFromFirstPricingOptions = function (pricingOptions) { | ||
| if (pricingOptions == null || pricingOptions.size() == 0) { | ||
| return DEFAULT_MONEY_NODE; | ||
| } | ||
| var node = pricingOptions.get(0); | ||
| return (0, node_1.isTruthy)(node.path(['onSale'])) ? node.path(['salePriceMoney']) : node.path(['priceMoney']); | ||
| }; | ||
| exports.getSubscriptionMoneyFromFirstPricingOptions = getSubscriptionMoneyFromFirstPricingOptions; | ||
| var getPricingOptionsAmongLowestVariant = function (item) { | ||
| var productType = (0, exports.getProductType)(item); | ||
| var structuredContent = item.path(['structuredContent']); | ||
| switch (productType) { | ||
| case enums_1.ProductType.PHYSICAL: | ||
| case enums_1.ProductType.SERVICE: | ||
| var variants = structuredContent.path(['variants']); | ||
| if (variants.type !== types_1.Type.ARRAY || variants.size() === 0) { | ||
| return null; | ||
| } | ||
| var first = variants.get(0); | ||
| var moneyNode = (0, node_1.isTruthy)(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']); | ||
| var pricingOptions = first.path(['pricingOptions']); | ||
| var price = (0, exports.getAmountFromMoneyNode)(moneyNode); | ||
| for (var i = 1; i < variants.size(); i++) { | ||
| var variant = variants.get(i); | ||
| var variantMoneyNode = (0, node_1.isTruthy)(variant.path(['onSale'])) | ||
| ? variant.path(['salePriceMoney']) | ||
| : variant.path(['priceMoney']); | ||
| var variantPrice = (0, exports.getAmountFromMoneyNode)(variantMoneyNode); | ||
| if (variantPrice.compare(price) < 0) { | ||
| pricingOptions = variant.path(['pricingOptions']); | ||
| price = variantPrice; | ||
| } | ||
| } | ||
| return pricingOptions; | ||
| default: | ||
| return null; | ||
| } | ||
| }; | ||
| exports.getPricingOptionsAmongLowestVariant = getPricingOptionsAmongLowestVariant; | ||
| // NOTE: This is a port of getLowestPriceAmongVariants from template-compiler | ||
| var getFromPrice = function (item) { | ||
@@ -63,5 +125,2 @@ var type = (0, exports.getProductType)(item); | ||
| var price = (0, exports.getAmountFromMoneyNode)(moneyNode); | ||
| if (price === undefined) { | ||
| return undefined; | ||
| } | ||
| for (var i = 1; i < variants.size(); i++) { | ||
@@ -87,2 +146,3 @@ var v = variants.get(i); | ||
| exports.getFromPrice = getFromPrice; | ||
| // NOTE: This is a port of getHighestPriceAmongVariants from template-compiler | ||
| var getNormalPrice = function (item) { | ||
@@ -100,11 +160,8 @@ var type = (0, exports.getProductType)(item); | ||
| } | ||
| var moneyNode = variants.get(0); | ||
| var moneyNode = variants.get(0).path(['priceMoney']); | ||
| var price = (0, exports.getAmountFromMoneyNode)(moneyNode); | ||
| if (price === undefined) { | ||
| return undefined; | ||
| } | ||
| for (var i = 1; i < variants.size(); i++) { | ||
| var currentNode = variants.get(i).path(['priceMoney']); | ||
| var curr = (0, exports.getAmountFromMoneyNode)(currentNode); | ||
| if (curr && curr.compare(price) > 0) { | ||
| if (curr.compare(price) > 0) { | ||
| price = curr; | ||
@@ -125,2 +182,3 @@ moneyNode = currentNode; | ||
| exports.getNormalPrice = getNormalPrice; | ||
| // NOTE: This is a port of getSalePriceMoneyNode from template-compiler | ||
| var getSalePrice = function (item) { | ||
@@ -154,3 +212,3 @@ var type = (0, exports.getProductType)(item); | ||
| } | ||
| return salePrice ? saleNode : DEFAULT_MONEY_NODE; | ||
| return saleNode !== null && saleNode !== void 0 ? saleNode : DEFAULT_MONEY_NODE; | ||
| } | ||
@@ -157,0 +215,0 @@ case enums_1.ProductType.DIGITAL: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.commerce.js","sourceRoot":"","sources":["../../src/plugins/util.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\nimport { isTruthy, Node } from '../node';\nimport { ProductType } from './enums';\nimport { Type } from '../types';\nimport { parseDecimal } from './util.i18n';\n\nconst productTypePath = ['structuredContent', 'productType'];\nconst variantsPath = ['structuredContent', 'variants'];\n\nconst ZERO: Decimal = parseDecimal('0')!;\n\nconst DEFAULT_MONEY_NODE = new Node({\n value: '0',\n currency: 'USD',\n});\n\nexport const getProductType = (item: Node) => {\n const type = item.path(productTypePath);\n return ProductType.fromCode(type.asNumber());\n};\n\n// const getPrice = (v: Node) => isTruthy(v.get('onSale')) ? v.get('salePrice') : v.get('price');\n\nexport const getVariants = (item: Node) => {\n return item.path(variantsPath);\n};\n\nexport const hasVariants = (item: Node) => {\n const type = getProductType(item);\n const variants = getVariants(item);\n const populated = variants.type === Type.ARRAY && variants.value.length > 1;\n return type === ProductType.DIGITAL ? false : populated;\n};\n\nexport const getAmountFromMoneyNode = (moneyNode?: Node) => {\n if (!moneyNode) {\n return ZERO;\n }\n const value = moneyNode.path(['value']).asString();\n return !value ? ZERO : parseDecimal(value) || ZERO;\n};\n\nexport const getLegacyPriceFromMoneyNode = (moneyNode: Node): Decimal => {\n const price = getAmountFromMoneyNode(moneyNode);\n return price ? price.movePoint(2) : ZERO;\n};\n\nexport const getFromPrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n const first = variants.get(0);\n let moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n if (price === undefined) {\n return undefined;\n }\n\n for (let i = 1; i < variants.size(); i++) {\n const v = variants.get(i);\n const currentNode = isTruthy(v.path(['onSale'])) ? v.path(['salePriceMoney']) : v.path(['priceMoney']);\n const current = getAmountFromMoneyNode(currentNode)!;\n if (current && current.compare(price) < 0) {\n price = current;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getNormalPrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n case ProductType.GIFT_CARD: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let moneyNode = variants.get(0);\n let price = getAmountFromMoneyNode(moneyNode);\n if (price === undefined) {\n return undefined;\n }\n\n for (let i = 1; i < variants.size(); i++) {\n const currentNode = variants.get(i).path(['priceMoney']);\n const curr = getAmountFromMoneyNode(currentNode)!;\n if (curr && curr.compare(price) > 0) {\n price = curr;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getSalePrice = (item: Node): Node | undefined => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let saleNode: Node | undefined;\n let salePrice: Decimal | undefined;\n for (let i = 0; i < size; i++) {\n const v = variants.get(i);\n const priceMoney = v.path(['salePriceMoney']);\n const price = getAmountFromMoneyNode(priceMoney);\n if (isTruthy(v.path(['onSale']))) {\n if (!saleNode) {\n saleNode = priceMoney;\n salePrice = price;\n } else if (price && salePrice && price.compare(salePrice) < 0) {\n saleNode = priceMoney;\n salePrice = price;\n }\n }\n }\n return salePrice ? saleNode : DEFAULT_MONEY_NODE;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['salePriceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n case ProductType.GIFT_CARD:\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getTotalStockRemaining = (item: Node) => {\n const type = getProductType(item);\n if (type === ProductType.DIGITAL || type === ProductType.GIFT_CARD) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n let total = 0;\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited'))) {\n return Number.MAX_SAFE_INTEGER;\n }\n total += variant.get('qtyInStock').asNumber();\n }\n }\n return total;\n};\n\nexport const hasVariedPrices = (item: Node) => {\n const type = getProductType(item);\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n const first = variants.get(0);\n const onSale = first.get('onSale');\n const salePrice = first.get('salePrice');\n const price = first.get('price');\n\n for (let i = 1; i < size; i++) {\n const v = variants.get(i);\n const flag1 = !v.get('onSale').equals(onSale);\n const flag2 = isTruthy(onSale) && !v.get('salePrice').equals(salePrice);\n const flag3 = !v.get('price').equals(price);\n if (flag1 || flag2 || flag3) {\n return true;\n }\n }\n }\n return false;\n }\n\n case ProductType.DIGITAL:\n default:\n return false;\n }\n};\n\nexport const isOnSale = (item: Node) => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('onSale'))) {\n return true;\n }\n }\n }\n break;\n }\n\n case ProductType.DIGITAL:\n return isTruthy(content.get('onSale'));\n\n case ProductType.GIFT_CARD:\n default:\n break;\n }\n return false;\n};\n\nexport const isSoldOut = (item: Node) => {\n const type = getProductType(item);\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n if (variants.type === Type.ARRAY) {\n for (let i = 0; i < variants.size(); i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited')) || variant.get('qtyInStock').asNumber() > 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n case ProductType.DIGITAL:\n case ProductType.GIFT_CARD:\n return false;\n\n default:\n return true;\n }\n};\n\nexport const isSubscribable = (item: Node): boolean => item.path(['structuredContent', 'isSubscribable']).asBoolean();\n\n// TODO: writeMoneyString\n\n// TODO: writePriceString\n\n// TODO: writeVariantFormat\n\nconst getUserDefinedOptions = (content: Node) => {\n const ordering = content.get('variantOptionOrdering');\n const options = [];\n const size = ordering.size();\n for (let i = 0; i < size; i++) {\n const name = ordering.get(i).asString();\n options.push({ name, values: [] });\n }\n return options;\n};\n\nexport const getItemVariantOptions = (item: Node) => {\n const content = item.get('structuredContent');\n const variants = content.get('variants');\n const variantsSize = variants.size();\n if (variantsSize <= 1) {\n return [];\n }\n\n const userDefinedOptions = getUserDefinedOptions(content);\n\n for (let i = 0; i < variantsSize; i++) {\n const variant = variants.get(i);\n const attrs: Node = variant.get('attributes');\n if (attrs.type !== Type.OBJECT) {\n continue;\n }\n\n const fields = Object.keys(attrs.value);\n for (let j = 0; j < fields.length; j++) {\n const field = fields[j];\n const variantOptionValue: string = attrs.get(field).asString();\n\n let option = null;\n for (let k = 0; k < userDefinedOptions.length; k++) {\n const current = userDefinedOptions[k];\n if (current.name === field) {\n option = current;\n break;\n }\n }\n\n if (option === null) {\n continue;\n }\n\n let hasValue = false;\n const optionValues: string[] = option.values;\n for (let k = 0; k < optionValues.length; k++) {\n const value = optionValues[k];\n if (value === variantOptionValue) {\n hasValue = true;\n break;\n }\n }\n\n if (!hasValue) {\n optionValues.push(variantOptionValue);\n }\n }\n }\n return userDefinedOptions;\n};\n\nconst MULTIPLE_QTY_ALLOWED_FIELD = 'multipleQuantityAllowedForServices';\n\nexport const isMultipleQuantityAllowedForServices = (websiteSettings: Node) => {\n const storeSettings = websiteSettings.get('storeSettings');\n if (storeSettings.type === Type.OBJECT) {\n const value = storeSettings.get(MULTIPLE_QTY_ALLOWED_FIELD);\n if (value.type !== Type.NULL && value.type !== Type.MISSING) {\n return value.asBoolean();\n }\n }\n return true;\n};\n\nexport const getVariantFormat = (variant: Node) => {\n const options = variant.get('optionValues');\n const size = options.size();\n let res = '';\n for (let i = 0; i < size; i++) {\n if (i > 0) {\n res += ' / ';\n }\n const value = options.get(i).get('value').asString();\n res += value;\n }\n return res;\n};\n"]} | ||
| {"version":3,"file":"util.commerce.js","sourceRoot":"","sources":["../../src/plugins/util.commerce.ts"],"names":[],"mappings":"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","sourcesContent":["import { CurrencyType, Decimal } from '@phensley/cldr-core';\nimport { isTruthy, Node } from '../node';\nimport { ProductType } from './enums';\nimport { Type } from '../types';\nimport { parseDecimal, useCLDRMode } from './util.i18n';\nimport { Context } from 'src/context';\nimport { currencyOptions } from './options';\n\nconst productTypePath = ['structuredContent', 'productType'];\nconst variantsPath = ['structuredContent', 'variants'];\n\nconst ZERO: Decimal = parseDecimal('0')!;\n\nconst DEFAULT_MONEY_NODE = new Node({\n value: '0',\n currency: 'USD',\n});\n\nexport const getProductType = (item: Node) => {\n const type = item.path(productTypePath);\n return ProductType.fromCode(type.asNumber());\n};\n\n// const getPrice = (v: Node) => isTruthy(v.get('onSale')) ? v.get('salePrice') : v.get('price');\n\nexport const getVariants = (item: Node) => {\n return item.path(variantsPath);\n};\n\nexport const hasVariants = (item: Node) => {\n const type = getProductType(item);\n const variants = getVariants(item);\n const populated = variants.type === Type.ARRAY && variants.value.length > 1;\n return type === ProductType.DIGITAL ? false : populated;\n};\n\nexport const getAmountFromMoneyNode = (moneyNode?: Node) => {\n if (!moneyNode) {\n return ZERO;\n }\n const value = moneyNode.path(['value']).asString();\n return !value ? ZERO : parseDecimal(value) || ZERO;\n};\n\nexport const getCurrencyFromMoneyNode = (moneyNode: Node): CurrencyType => {\n const currencyNode = moneyNode.path(['currency']);\n const currency = !currencyNode.isMissing() ? currencyNode.asString().trim() : DEFAULT_MONEY_NODE.path(['currency']).asString();\n\n return currency as CurrencyType;\n};\n\nexport const getLegacyPriceFromMoneyNode = (moneyNode: Node): Decimal => {\n const price = getAmountFromMoneyNode(moneyNode);\n return price ? price.movePoint(2) : ZERO;\n};\n\nexport const getMoneyString = (moneyNode: Node, args: string[], ctx: Context): string => {\n if (useCLDRMode(ctx)) {\n const amount = getAmountFromMoneyNode(moneyNode);\n const currencyCode = getCurrencyFromMoneyNode(moneyNode);\n\n return ctx.cldr?.Numbers.formatCurrency(amount, currencyCode, currencyOptions(args)) ?? '';\n } else {\n const legacyAmount = getLegacyPriceFromMoneyNode(moneyNode);\n const numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n const formattedAmount = numberFormatter.format(parseFloat(legacyAmount.toString()) / 100);\n\n return `<span class=\"sqs-money-native\">${formattedAmount}</span>`;\n }\n};\n\nexport const getSubscriptionMoneyFromFirstPricingOptions = (pricingOptions: Node): Node => {\n if (pricingOptions == null || pricingOptions.size() == 0) {\n return DEFAULT_MONEY_NODE;\n }\n\n const node = pricingOptions.get(0);\n\n return isTruthy(node.path(['onSale'])) ? node.path(['salePriceMoney']) : node.path(['priceMoney']);\n};\n\nexport const getPricingOptionsAmongLowestVariant = (item: Node): Node | null => {\n const productType = getProductType(item);\n const structuredContent = item.path(['structuredContent']);\n\n switch (productType) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n const variants = structuredContent.path(['variants']);\n if (variants.type !== Type.ARRAY || variants.size() === 0) {\n return null;\n }\n\n const first = variants.get(0);\n const moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n\n let pricingOptions = first.path(['pricingOptions']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const variant = variants.get(i);\n const variantMoneyNode = isTruthy(variant.path(['onSale']))\n ? variant.path(['salePriceMoney'])\n : variant.path(['priceMoney']);\n const variantPrice = getAmountFromMoneyNode(variantMoneyNode);\n\n if (variantPrice.compare(price) < 0) {\n pricingOptions = variant.path(['pricingOptions']);\n price = variantPrice;\n }\n }\n\n return pricingOptions;\n default:\n return null;\n }\n};\n\n// NOTE: This is a port of getLowestPriceAmongVariants from template-compiler\nexport const getFromPrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n const first = variants.get(0);\n let moneyNode = isTruthy(first.path(['onSale'])) ? first.path(['salePriceMoney']) : first.path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const v = variants.get(i);\n const currentNode = isTruthy(v.path(['onSale'])) ? v.path(['salePriceMoney']) : v.path(['priceMoney']);\n const current = getAmountFromMoneyNode(currentNode)!;\n if (current && current.compare(price) < 0) {\n price = current;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\n// NOTE: This is a port of getHighestPriceAmongVariants from template-compiler\nexport const getNormalPrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE:\n case ProductType.GIFT_CARD: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let moneyNode = variants.get(0).path(['priceMoney']);\n let price = getAmountFromMoneyNode(moneyNode);\n\n for (let i = 1; i < variants.size(); i++) {\n const currentNode = variants.get(i).path(['priceMoney']);\n const curr = getAmountFromMoneyNode(currentNode)!;\n if (curr.compare(price) > 0) {\n price = curr;\n moneyNode = currentNode;\n }\n }\n return moneyNode;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['priceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\n// NOTE: This is a port of getSalePriceMoneyNode from template-compiler\nexport const getSalePrice = (item: Node): Node => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type !== Type.ARRAY || size === 0) {\n return DEFAULT_MONEY_NODE;\n }\n let saleNode: Node | undefined;\n let salePrice: Decimal | undefined;\n for (let i = 0; i < size; i++) {\n const v = variants.get(i);\n const priceMoney = v.path(['salePriceMoney']);\n const price = getAmountFromMoneyNode(priceMoney);\n if (isTruthy(v.path(['onSale']))) {\n if (!saleNode) {\n saleNode = priceMoney;\n salePrice = price;\n } else if (price && salePrice && price.compare(salePrice) < 0) {\n saleNode = priceMoney;\n salePrice = price;\n }\n }\n }\n return saleNode ?? DEFAULT_MONEY_NODE;\n }\n\n case ProductType.DIGITAL: {\n const money = content.path(['salePriceMoney']);\n return money.isMissing() ? DEFAULT_MONEY_NODE : money;\n }\n\n case ProductType.GIFT_CARD:\n default:\n return DEFAULT_MONEY_NODE;\n }\n};\n\nexport const getTotalStockRemaining = (item: Node) => {\n const type = getProductType(item);\n if (type === ProductType.DIGITAL || type === ProductType.GIFT_CARD) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n let total = 0;\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited'))) {\n return Number.MAX_SAFE_INTEGER;\n }\n total += variant.get('qtyInStock').asNumber();\n }\n }\n return total;\n};\n\nexport const hasVariedPrices = (item: Node) => {\n const type = getProductType(item);\n\n switch (type) {\n case ProductType.GIFT_CARD:\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n const first = variants.get(0);\n const onSale = first.get('onSale');\n const salePrice = first.get('salePrice');\n const price = first.get('price');\n\n for (let i = 1; i < size; i++) {\n const v = variants.get(i);\n const flag1 = !v.get('onSale').equals(onSale);\n const flag2 = isTruthy(onSale) && !v.get('salePrice').equals(salePrice);\n const flag3 = !v.get('price').equals(price);\n if (flag1 || flag2 || flag3) {\n return true;\n }\n }\n }\n return false;\n }\n\n case ProductType.DIGITAL:\n default:\n return false;\n }\n};\n\nexport const isOnSale = (item: Node) => {\n const type = getProductType(item);\n const content = item.get('structuredContent');\n\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = content.get('variants');\n const size = variants.size();\n if (variants.type === Type.ARRAY && size > 0) {\n for (let i = 0; i < size; i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('onSale'))) {\n return true;\n }\n }\n }\n break;\n }\n\n case ProductType.DIGITAL:\n return isTruthy(content.get('onSale'));\n\n case ProductType.GIFT_CARD:\n default:\n break;\n }\n return false;\n};\n\nexport const isSoldOut = (item: Node) => {\n const type = getProductType(item);\n switch (type) {\n case ProductType.PHYSICAL:\n case ProductType.SERVICE: {\n const variants = getVariants(item);\n if (variants.type === Type.ARRAY) {\n for (let i = 0; i < variants.size(); i++) {\n const variant = variants.get(i);\n if (isTruthy(variant.get('unlimited')) || variant.get('qtyInStock').asNumber() > 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n case ProductType.DIGITAL:\n case ProductType.GIFT_CARD:\n return false;\n\n default:\n return true;\n }\n};\n\nexport const isSubscribable = (item: Node): boolean => item.path(['structuredContent', 'isSubscribable']).asBoolean();\n\n// TODO: writeMoneyString\n\n// TODO: writePriceString\n\n// TODO: writeVariantFormat\n\nconst getUserDefinedOptions = (content: Node) => {\n const ordering = content.get('variantOptionOrdering');\n const options = [];\n const size = ordering.size();\n for (let i = 0; i < size; i++) {\n const name = ordering.get(i).asString();\n options.push({ name, values: [] });\n }\n return options;\n};\n\nexport const getItemVariantOptions = (item: Node) => {\n const content = item.get('structuredContent');\n const variants = content.get('variants');\n const variantsSize = variants.size();\n if (variantsSize <= 1) {\n return [];\n }\n\n const userDefinedOptions = getUserDefinedOptions(content);\n\n for (let i = 0; i < variantsSize; i++) {\n const variant = variants.get(i);\n const attrs: Node = variant.get('attributes');\n if (attrs.type !== Type.OBJECT) {\n continue;\n }\n\n const fields = Object.keys(attrs.value);\n for (let j = 0; j < fields.length; j++) {\n const field = fields[j];\n const variantOptionValue: string = attrs.get(field).asString();\n\n let option = null;\n for (let k = 0; k < userDefinedOptions.length; k++) {\n const current = userDefinedOptions[k];\n if (current.name === field) {\n option = current;\n break;\n }\n }\n\n if (option === null) {\n continue;\n }\n\n let hasValue = false;\n const optionValues: string[] = option.values;\n for (let k = 0; k < optionValues.length; k++) {\n const value = optionValues[k];\n if (value === variantOptionValue) {\n hasValue = true;\n break;\n }\n }\n\n if (!hasValue) {\n optionValues.push(variantOptionValue);\n }\n }\n }\n return userDefinedOptions;\n};\n\nconst MULTIPLE_QTY_ALLOWED_FIELD = 'multipleQuantityAllowedForServices';\n\nexport const isMultipleQuantityAllowedForServices = (websiteSettings: Node) => {\n const storeSettings = websiteSettings.get('storeSettings');\n if (storeSettings.type === Type.OBJECT) {\n const value = storeSettings.get(MULTIPLE_QTY_ALLOWED_FIELD);\n if (value.type !== Type.NULL && value.type !== Type.MISSING) {\n return value.asBoolean();\n }\n }\n return true;\n};\n\nexport const getVariantFormat = (variant: Node) => {\n const options = variant.get('optionValues');\n const size = options.size();\n let res = '';\n for (let i = 0; i < size; i++) {\n if (i > 0) {\n res += ' / ';\n }\n const value = options.get(i).get('value').asString();\n res += value;\n }\n return res;\n};\n"]} |
| import { Decimal } from '@phensley/cldr-core'; | ||
| import { Context } from '../context'; | ||
| export declare const parseDecimal: (s: string | number) => Decimal | undefined; | ||
| export declare const useCLDRMode: (ctx: Context) => any; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.parseDecimal = void 0; | ||
| exports.useCLDRMode = exports.parseDecimal = void 0; | ||
| var cldr_core_1 = require("@phensley/cldr-core"); | ||
| var node_1 = require("../node"); | ||
| var parseDecimal = function (s) { | ||
@@ -14,2 +15,4 @@ try { | ||
| exports.parseDecimal = parseDecimal; | ||
| var useCLDRMode = function (ctx) { return (0, node_1.isTruthy)(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat'])); }; | ||
| exports.useCLDRMode = useCLDRMode; | ||
| //# sourceMappingURL=util.i18n.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.i18n.js","sourceRoot":"","sources":["../../src/plugins/util.i18n.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAEvC,IAAM,YAAY,GAAG,UAAC,CAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,mBAAO,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AANW,QAAA,YAAY,gBAMvB","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\n\nexport const parseDecimal = (s: string | number): Decimal | undefined => {\n try {\n return new Decimal(s);\n } catch (e) {\n return undefined;\n }\n};\n"]} | ||
| {"version":3,"file":"util.i18n.js","sourceRoot":"","sources":["../../src/plugins/util.i18n.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C,gCAAmC;AAE5B,IAAM,YAAY,GAAG,UAAC,CAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,mBAAO,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AANW,QAAA,YAAY,gBAMvB;AAEK,IAAM,WAAW,GAAG,UAAC,GAAY,IAAK,OAAA,IAAA,eAAQ,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAA7D,CAA6D,CAAC;AAA9F,QAAA,WAAW,eAAmF","sourcesContent":["import { Decimal } from '@phensley/cldr-core';\nimport { Context } from '../context';\nimport { isTruthy } from '../node';\n\nexport const parseDecimal = (s: string | number): Decimal | undefined => {\n try {\n return new Decimal(s);\n } catch (e) {\n return undefined;\n }\n};\n\nexport const useCLDRMode = (ctx: Context) => isTruthy(ctx.resolve(['featureFlags', 'useCLDRMoneyFormat']));\n"]} |
| /** | ||
| * Capitalize first letter of a string and lowercase the rest. | ||
| */ | ||
| export declare const capitalizeFirst: (str: string) => string; | ||
| /** | ||
| * Strip text between '<' and '>' from string. | ||
@@ -3,0 +7,0 @@ */ |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.defaultIfEmpty = exports.truncate = exports.escapeScriptTags = exports.slugify = exports.escapeHtmlAttributes = exports.removeTags = void 0; | ||
| exports.defaultIfEmpty = exports.truncate = exports.escapeScriptTags = exports.slugify = exports.escapeHtmlAttributes = exports.removeTags = exports.capitalizeFirst = void 0; | ||
| var util_1 = require("../util"); | ||
| /** | ||
| * Capitalize first letter of a string and lowercase the rest. | ||
| */ | ||
| var capitalizeFirst = function (str) { return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); }; | ||
| exports.capitalizeFirst = capitalizeFirst; | ||
| /** | ||
| * Strip text between '<' and '>' from string. | ||
@@ -7,0 +12,0 @@ */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"util.string.js","sourceRoot":"","sources":["../../src/plugins/util.string.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceMappedChars } from '../util';\n\n/**\n * Strip text between '<' and '>' from string.\n */\nexport const removeTags = (str: string) => {\n let res = '';\n let intag = false;\n const len = str.length;\n for (let i = 0; i < len; i++) {\n const ch = str[i];\n switch (ch) {\n case '<':\n intag = true;\n break;\n case '>':\n intag = false;\n res += ' ';\n break;\n default:\n if (!intag) {\n res += ch;\n }\n }\n }\n return res;\n};\n\nconst HTML_ATTRIBUTE_CHARS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\nexport const escapeHtmlAttributes = (str: string) => {\n return replaceMappedChars(str, HTML_ATTRIBUTE_CHARS);\n};\n\nconst SLUG_KILLCHARS = /[^a-zA-Z0-9\\s-]+/g;\nconst WHITESPACE_RE = /\\s+/g;\n\nexport const slugify = (str: string) => {\n str = str.replace(SLUG_KILLCHARS, '');\n str = str.replace(WHITESPACE_RE, '-');\n return str.toLowerCase();\n};\n\nconst SCRIPT_TAG = /<\\//g;\n\nexport const escapeScriptTags = (str: string) => {\n return str.replace(SCRIPT_TAG, '<\\\\/');\n};\n\nconst ELLIPSIS = '...';\n\nexport const truncate = (str: string, maxLen: number, ellipsis: string = ELLIPSIS) => {\n if (str.length <= maxLen) {\n return str;\n }\n\n let end = maxLen;\n for (let i = maxLen - 1; i >= 0; i--) {\n const ch = str[i];\n if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\u000b' || ch === '\\r' || ch === '\\f') {\n end = i + 1;\n break;\n }\n }\n return str.substring(0, end) + ellipsis;\n};\n\nexport const defaultIfEmpty = (str: string, fallback: string) => (str === null || !str ? fallback : str);\n"]} | ||
| {"version":3,"file":"util.string.js","sourceRoot":"","sources":["../../src/plugins/util.string.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceMappedChars } from '../util';\n\n/**\n * Capitalize first letter of a string and lowercase the rest.\n */\nexport const capitalizeFirst = (str: string) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n\n/**\n * Strip text between '<' and '>' from string.\n */\nexport const removeTags = (str: string) => {\n let res = '';\n let intag = false;\n const len = str.length;\n for (let i = 0; i < len; i++) {\n const ch = str[i];\n switch (ch) {\n case '<':\n intag = true;\n break;\n case '>':\n intag = false;\n res += ' ';\n break;\n default:\n if (!intag) {\n res += ch;\n }\n }\n }\n return res;\n};\n\nconst HTML_ATTRIBUTE_CHARS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\nexport const escapeHtmlAttributes = (str: string) => {\n return replaceMappedChars(str, HTML_ATTRIBUTE_CHARS);\n};\n\nconst SLUG_KILLCHARS = /[^a-zA-Z0-9\\s-]+/g;\nconst WHITESPACE_RE = /\\s+/g;\n\nexport const slugify = (str: string) => {\n str = str.replace(SLUG_KILLCHARS, '');\n str = str.replace(WHITESPACE_RE, '-');\n return str.toLowerCase();\n};\n\nconst SCRIPT_TAG = /<\\//g;\n\nexport const escapeScriptTags = (str: string) => {\n return str.replace(SCRIPT_TAG, '<\\\\/');\n};\n\nconst ELLIPSIS = '...';\n\nexport const truncate = (str: string, maxLen: number, ellipsis: string = ELLIPSIS) => {\n if (str.length <= maxLen) {\n return str;\n }\n\n let end = maxLen;\n for (let i = maxLen - 1; i >= 0; i--) {\n const ch = str[i];\n if (ch === ' ' || ch === '\\n' || ch === '\\t' || ch === '\\u000b' || ch === '\\r' || ch === '\\f') {\n end = i + 1;\n break;\n }\n }\n return str.substring(0, end) + ellipsis;\n};\n\nexport const defaultIfEmpty = (str: string, fallback: string) => (str === null || !str ? fallback : str);\n"]} |
+1
-1
| { | ||
| "name": "@squarespace/template-engine", | ||
| "version": "2.10.6", | ||
| "version": "2.10.7", | ||
| "description": "Squarespace template engine", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
2347907
3.87%390
1.04%27857
2.48%