@rebuy/rebuy 2.28.0 → 2.29.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +75 -15
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +75 -15
- package/dist/index.mjs.map +2 -2
- package/dist/pricing/amountToCents.d.ts +10 -0
- package/dist/pricing/amountToCents.d.ts.map +1 -0
- package/dist/pricing/computeCompareAtPrice.d.ts +10 -0
- package/dist/pricing/computeCompareAtPrice.d.ts.map +1 -0
- package/dist/pricing/computeDisplayPrice.d.ts +17 -0
- package/dist/pricing/computeDisplayPrice.d.ts.map +1 -0
- package/dist/pricing/currencyDecimals.d.ts +12 -0
- package/dist/pricing/currencyDecimals.d.ts.map +1 -0
- package/dist/pricing/index.d.ts +7 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +109 -0
- package/dist/pricing/index.js.map +7 -0
- package/dist/pricing/index.mjs +86 -0
- package/dist/pricing/index.mjs.map +7 -0
- package/dist/pricing/priceVariant.d.ts +10 -0
- package/dist/pricing/priceVariant.d.ts.map +1 -0
- package/dist/pricing/types.d.ts +30 -0
- package/dist/pricing/types.d.ts.map +1 -0
- package/dist/schema/checkout-and-beyond/constants.js +3 -2
- package/dist/schema/checkout-and-beyond/constants.js.map +2 -2
- package/dist/schema/checkout-and-beyond/constants.mjs +3 -2
- package/dist/schema/checkout-and-beyond/constants.mjs.map +2 -2
- package/dist/schema/checkout-and-beyond/index.js +35 -4
- package/dist/schema/checkout-and-beyond/index.js.map +2 -2
- package/dist/schema/checkout-and-beyond/index.mjs +35 -4
- package/dist/schema/checkout-and-beyond/index.mjs.map +2 -2
- package/dist/schema/widget-data.js +7 -4
- package/dist/schema/widget-data.js.map +2 -2
- package/dist/schema/widget-data.mjs +7 -4
- package/dist/schema/widget-data.mjs.map +2 -2
- package/dist/schema/widgetData.d.ts +6 -3
- package/dist/schema/widgetData.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/banner.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/banner.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/button.d.ts +1 -1
- package/dist/schema/widgets/checkout-and-beyond/carousel.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/carousel.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/cartLine.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/cartLine.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/common.d.ts +5 -4
- package/dist/schema/widgets/checkout-and-beyond/common.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/dataSource.d.ts +1 -0
- package/dist/schema/widgets/checkout-and-beyond/dataSource.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/image.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/image.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/layout.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/layout.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts +28 -0
- package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/offers.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/offers.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/progressBar.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/progressBar.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/regex.d.ts +13 -1
- package/dist/schema/widgets/checkout-and-beyond/regex.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/root.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/root.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/text.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/text.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/utils.d.ts.map +1 -1
- package/dist/schema/widgets/contentBlock.d.ts +2 -1
- package/dist/schema/widgets/contentBlock.d.ts.map +1 -1
- package/dist/schema/widgets/lineItemEditor.d.ts +2 -1
- package/dist/schema/widgets/lineItemEditor.d.ts.map +1 -1
- package/dist/schema/widgets/rebuyButton.d.ts +2 -1
- package/dist/schema/widgets/rebuyButton.d.ts.map +1 -1
- package/dist/server/dataSourceResults.d.ts.map +1 -1
- package/dist/server/index.js +70 -23
- package/dist/server/index.js.map +3 -3
- package/dist/server/index.mjs +70 -23
- package/dist/server/index.mjs.map +3 -3
- package/dist/transforms/index.js +247 -187
- package/dist/transforms/index.js.map +3 -3
- package/dist/transforms/index.mjs +247 -187
- package/dist/transforms/index.mjs.map +3 -3
- package/dist/transforms/offerV1/convertOfferToV2.d.ts.map +1 -1
- package/dist/transforms/offerV1/offerCard.d.ts.map +1 -1
- package/dist/transforms/offerV1/offerTemplateSeed.d.ts +100 -3
- package/dist/transforms/offerV1/offerTemplateSeed.d.ts.map +1 -1
- package/dist/transforms/offerV1/types.d.ts +4 -1
- package/dist/transforms/offerV1/types.d.ts.map +1 -1
- package/package.json +6 -1
package/dist/index.js
CHANGED
|
@@ -1323,7 +1323,7 @@ var buttonActions = [
|
|
|
1323
1323
|
"goToNextPage",
|
|
1324
1324
|
"goToPrevPage",
|
|
1325
1325
|
"goToURL",
|
|
1326
|
-
"
|
|
1326
|
+
"removeFromOrder",
|
|
1327
1327
|
"selectVariant",
|
|
1328
1328
|
"showPagination",
|
|
1329
1329
|
"switchToSubscription",
|
|
@@ -1344,7 +1344,8 @@ var buttonFields = [
|
|
|
1344
1344
|
"payNow",
|
|
1345
1345
|
"progressReached",
|
|
1346
1346
|
"progressRemaining",
|
|
1347
|
-
"
|
|
1347
|
+
"redirectToCheckout",
|
|
1348
|
+
"removeFromOrder",
|
|
1348
1349
|
"showVariant",
|
|
1349
1350
|
"showVariants",
|
|
1350
1351
|
"soldOut",
|
|
@@ -1640,7 +1641,7 @@ var import_v49 = require("zod/v4");
|
|
|
1640
1641
|
var ARRAY_INDEX_STRING = /^(0|[1-9]\d*)$/;
|
|
1641
1642
|
var DYNAMIC_TOKEN_REGEX = /^\{\{\s*[A-Za-z]+\s*\}\}$/;
|
|
1642
1643
|
var HEX_COLOR_REGEX = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
1643
|
-
var HTML_TAGS_REGEX = /<\/?[^>]
|
|
1644
|
+
var HTML_TAGS_REGEX = /<\/?[a-zA-Z][^>]*>/g;
|
|
1644
1645
|
|
|
1645
1646
|
// src/schema/widgets/checkout-and-beyond/utils.ts
|
|
1646
1647
|
var import_es_toolkit2 = require("es-toolkit");
|
|
@@ -1652,7 +1653,7 @@ var isHTML = (html = "") => {
|
|
|
1652
1653
|
const hasHTML = (nodeList) => Array.from(nodeList).some((node) => node.nodeType === 1);
|
|
1653
1654
|
return hasHTML(doc.body.childNodes) || hasHTML(doc.head.childNodes);
|
|
1654
1655
|
}
|
|
1655
|
-
return
|
|
1656
|
+
return html.search(HTML_TAGS_REGEX) !== -1;
|
|
1656
1657
|
};
|
|
1657
1658
|
var hasHTMLInDoc = (doc) => doc.content.some(({ content = [] }) => content.some(({ text }) => isHTML(text)));
|
|
1658
1659
|
var checkForHTML = (input) => !((0, import_compat.isString)(input) && isHTML(input) || (0, import_es_toolkit2.isPlainObject)(input) && hasHTMLInDoc(input));
|
|
@@ -1862,6 +1863,8 @@ var CABDataSourceSection = import_v412.z.object({
|
|
|
1862
1863
|
productType: import_v412.z.enum(productTypes).optional(),
|
|
1863
1864
|
sectionId: import_v412.z.uuid().default(() => (0, import_uuid4.v7)()),
|
|
1864
1865
|
sectionType: import_v412.z.literal(SectionType.dataSource).default(SectionType.dataSource),
|
|
1866
|
+
/** Default subscribe-vs-one-time for `productType: both` (legacy `subscription_is_default`). */
|
|
1867
|
+
subscriptionIsDefault: import_v412.z.boolean().default(false),
|
|
1865
1868
|
treatAsGwp: import_v412.z.boolean().default(false)
|
|
1866
1869
|
});
|
|
1867
1870
|
|
|
@@ -2344,6 +2347,34 @@ var OFFER_LABELS = {
|
|
|
2344
2347
|
vi: "\u0110ang th\xEAm...",
|
|
2345
2348
|
zh: "\u6B63\u5728\u6DFB\u52A0..."
|
|
2346
2349
|
},
|
|
2350
|
+
redirectToCheckout: {
|
|
2351
|
+
ar: "\u0627\u0644\u062F\u0641\u0639",
|
|
2352
|
+
cs: "Pokladna",
|
|
2353
|
+
da: "Til kassen",
|
|
2354
|
+
de: "Zur Kasse",
|
|
2355
|
+
en: "Checkout",
|
|
2356
|
+
es: "Finalizar compra",
|
|
2357
|
+
fi: "Kassalle",
|
|
2358
|
+
fr: "Paiement",
|
|
2359
|
+
ga: "Seice\xE1il amach",
|
|
2360
|
+
he: "\u05DC\u05EA\u05E9\u05DC\u05D5\u05DD",
|
|
2361
|
+
hi: "\u091A\u0947\u0915\u0906\u0909\u091F",
|
|
2362
|
+
id: "Checkout",
|
|
2363
|
+
it: "Cassa",
|
|
2364
|
+
ja: "\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8",
|
|
2365
|
+
ko: "\uACB0\uC81C\uD558\uAE30",
|
|
2366
|
+
nl: "Afrekenen",
|
|
2367
|
+
no: "Til kassen",
|
|
2368
|
+
pl: "Do kasy",
|
|
2369
|
+
pt: "Finalizar compra",
|
|
2370
|
+
ru: "\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u044C \u0437\u0430\u043A\u0430\u0437",
|
|
2371
|
+
sv: "Till kassan",
|
|
2372
|
+
th: "\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19",
|
|
2373
|
+
tr: "\xD6deme",
|
|
2374
|
+
uk: "\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u0438 \u0437\u0430\u043C\u043E\u0432\u043B\u0435\u043D\u043D\u044F",
|
|
2375
|
+
vi: "Thanh to\xE1n",
|
|
2376
|
+
zh: "\u7ED3\u8D26"
|
|
2377
|
+
},
|
|
2347
2378
|
soldOut: {
|
|
2348
2379
|
ar: "\u0646\u0641\u062F\u062A \u0627\u0644\u0643\u0645\u064A\u0629",
|
|
2349
2380
|
cs: "Vyprod\xE1no",
|
|
@@ -3300,6 +3331,21 @@ var OFFER_TEMPLATE_SEED = {
|
|
|
3300
3331
|
zh: "\u52A0\u5165\u8D2D\u7269\u8F66"
|
|
3301
3332
|
},
|
|
3302
3333
|
sectionType: "text"
|
|
3334
|
+
},
|
|
3335
|
+
{
|
|
3336
|
+
buttonField: "addedToCart",
|
|
3337
|
+
content: OFFER_LABELS.addedToCart,
|
|
3338
|
+
sectionType: "text"
|
|
3339
|
+
},
|
|
3340
|
+
{
|
|
3341
|
+
buttonField: "soldOut",
|
|
3342
|
+
content: OFFER_LABELS.soldOut,
|
|
3343
|
+
sectionType: "text"
|
|
3344
|
+
},
|
|
3345
|
+
{
|
|
3346
|
+
buttonField: "redirectToCheckout",
|
|
3347
|
+
content: OFFER_LABELS.redirectToCheckout,
|
|
3348
|
+
sectionType: "text"
|
|
3303
3349
|
}
|
|
3304
3350
|
],
|
|
3305
3351
|
sectionType: "button"
|
|
@@ -3398,7 +3444,7 @@ var buildOfferTemplate = ({ location: location2, name } = {}) => CABRootSection.
|
|
|
3398
3444
|
// src/transforms/offerV1/offerCard.ts
|
|
3399
3445
|
var VARIANT_SELECTOR = { button: "button", radio: "radio", select: "menu" };
|
|
3400
3446
|
var localizedContent = (defaults, override) => {
|
|
3401
|
-
const trimmed = override
|
|
3447
|
+
const trimmed = stripContentBlockHtml(override ?? "").trim();
|
|
3402
3448
|
return trimmed ? { ...defaults, en: trimmed } : defaults;
|
|
3403
3449
|
};
|
|
3404
3450
|
var buildStyledText = (token, style, color = "base") => {
|
|
@@ -3466,6 +3512,7 @@ var buildDescription = (settings) => {
|
|
|
3466
3512
|
return [{ content: { en: buildStyledText("{{productDescription}}", void 0) }, sectionType: "text" }];
|
|
3467
3513
|
};
|
|
3468
3514
|
var buildVariants = (settings) => {
|
|
3515
|
+
if (settings.viewOptions?.displayActions === false) return [];
|
|
3469
3516
|
if (settings.productOptions?.showVariantOptions === "never") return [];
|
|
3470
3517
|
const selector = settings.viewOptions?.variantSelector;
|
|
3471
3518
|
return [
|
|
@@ -3492,12 +3539,14 @@ var buildQuantity = (settings) => {
|
|
|
3492
3539
|
const quantity = settings.quantityInputs;
|
|
3493
3540
|
if (!quantity?.enabled) return [];
|
|
3494
3541
|
const inputType = quantity.type ? QUANTITY_INPUT_TYPE[quantity.type] : void 0;
|
|
3542
|
+
const max = Math.min(Math.max(quantity.maxValue ?? 10, 1), 100);
|
|
3543
|
+
const min = Math.min(Math.max(quantity.minValue ?? 1, 1), max);
|
|
3495
3544
|
return [
|
|
3496
3545
|
{
|
|
3497
3546
|
...buildQuantityErrors(quantity),
|
|
3498
3547
|
...inputType && { inputType },
|
|
3499
|
-
max
|
|
3500
|
-
min
|
|
3548
|
+
max,
|
|
3549
|
+
min,
|
|
3501
3550
|
sectionType: "quantity"
|
|
3502
3551
|
}
|
|
3503
3552
|
];
|
|
@@ -3539,7 +3588,9 @@ var buildAddButton = (settings) => {
|
|
|
3539
3588
|
slot("addToCart", settings.language?.addToCart),
|
|
3540
3589
|
slot("addingToCart", settings.language?.addingToCart),
|
|
3541
3590
|
slot("addedToCart", settings.language?.addedToCart),
|
|
3542
|
-
slot("soldOut", settings.language?.soldOutLabel)
|
|
3591
|
+
slot("soldOut", settings.language?.soldOutLabel),
|
|
3592
|
+
// Off-checkout Buy Now: the label the button shows once it links to the created checkout.
|
|
3593
|
+
slot("redirectToCheckout", settings.language?.redirectToCheckout)
|
|
3543
3594
|
],
|
|
3544
3595
|
sectionType: "button"
|
|
3545
3596
|
};
|
|
@@ -3621,23 +3672,29 @@ var buildDiscountSection = (discount) => {
|
|
|
3621
3672
|
}
|
|
3622
3673
|
];
|
|
3623
3674
|
};
|
|
3675
|
+
var bannerMessageContent = (message) => {
|
|
3676
|
+
const sanitized = typeof message === "string" ? stripContentBlockHtml(message) : message;
|
|
3677
|
+
return sanitized ? { ...OFFER_LABELS.addedToCartMessage, en: sanitized } : OFFER_LABELS.addedToCartMessage;
|
|
3678
|
+
};
|
|
3624
3679
|
var buildBanner = (language) => language?.successBannerEnabled ? [
|
|
3625
3680
|
{
|
|
3626
3681
|
color: "success",
|
|
3627
3682
|
dismissible: true,
|
|
3628
3683
|
sections: [
|
|
3629
3684
|
{
|
|
3630
|
-
|
|
3631
|
-
* A defined v1 message (RTE doc or string) passes through verbatim as `en`;
|
|
3632
|
-
* absent falls back to the localized defaults (P4 language policy).
|
|
3633
|
-
*/
|
|
3634
|
-
content: language.successBannerMessageRte ? { ...OFFER_LABELS.addedToCartMessage, en: language.successBannerMessageRte } : OFFER_LABELS.addedToCartMessage,
|
|
3685
|
+
content: bannerMessageContent(language.successBannerMessageRte),
|
|
3635
3686
|
sectionType: "text"
|
|
3636
3687
|
},
|
|
3637
3688
|
{
|
|
3638
3689
|
action: "undoAddToOrder",
|
|
3639
3690
|
buttonStyle: "plain",
|
|
3640
|
-
|
|
3691
|
+
/**
|
|
3692
|
+
* Tagged `undoAddToOrder`, never `buttonLabel` — the renderers (React CAB and
|
|
3693
|
+
* the Preact extension) and the schema's default offers tree resolve that slot.
|
|
3694
|
+
*/
|
|
3695
|
+
sections: [
|
|
3696
|
+
{ buttonField: "undoAddToOrder", content: OFFER_LABELS.undo, sectionType: "text" }
|
|
3697
|
+
],
|
|
3641
3698
|
sectionType: "button"
|
|
3642
3699
|
}
|
|
3643
3700
|
],
|
|
@@ -3658,6 +3715,7 @@ var convertOfferToV2 = ({ id, name, settings }) => {
|
|
|
3658
3715
|
matchVariantOutOfStock: !!settings.productOptions?.matchVariantOutOfStock,
|
|
3659
3716
|
...settings.productType && { productType: settings.productType },
|
|
3660
3717
|
sectionType: "dataSource",
|
|
3718
|
+
...settings.subscriptionIsDefault && { subscriptionIsDefault: true },
|
|
3661
3719
|
...settings.treatAsGwp && { treatAsGwp: true }
|
|
3662
3720
|
};
|
|
3663
3721
|
const offers = {
|
|
@@ -3671,7 +3729,9 @@ var convertOfferToV2 = ({ id, name, settings }) => {
|
|
|
3671
3729
|
};
|
|
3672
3730
|
const display = {
|
|
3673
3731
|
autoAdvanceInterval: 0,
|
|
3674
|
-
itemsAtOnce
|
|
3732
|
+
// `itemsAtOnce` feeds the carousel schema's `.min(1)`; a legacy `columns`/`limit` of 0 would
|
|
3733
|
+
// otherwise throw at parse, so floor it at 1 (the carousel still shows a product per page).
|
|
3734
|
+
itemsAtOnce: Math.max(layout?.carousel ? columns : settings.limit ?? columns, 1),
|
|
3675
3735
|
...listLayout,
|
|
3676
3736
|
sections: [offers],
|
|
3677
3737
|
sectionType: "carousel"
|