@rebuy/rebuy 2.27.0 → 2.28.0
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.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1352 -366
- package/dist/index.js.map +4 -4
- package/dist/index.mjs +1351 -365
- package/dist/index.mjs.map +4 -4
- package/dist/schema/checkout-and-beyond/constants.js +1 -0
- package/dist/schema/checkout-and-beyond/constants.js.map +2 -2
- package/dist/schema/checkout-and-beyond/constants.mjs +1 -0
- package/dist/schema/checkout-and-beyond/constants.mjs.map +2 -2
- package/dist/schema/checkout-and-beyond/index.js +285 -92
- package/dist/schema/checkout-and-beyond/index.js.map +4 -4
- package/dist/schema/checkout-and-beyond/index.mjs +285 -92
- package/dist/schema/checkout-and-beyond/index.mjs.map +4 -4
- package/dist/schema/widget-data.js +165 -148
- package/dist/schema/widget-data.js.map +4 -4
- package/dist/schema/widget-data.mjs +165 -148
- package/dist/schema/widget-data.mjs.map +4 -4
- package/dist/schema/widgets/checkout-and-beyond/common.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/common.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/discount.d.ts +30 -0
- package/dist/schema/widgets/checkout-and-beyond/discount.d.ts.map +1 -0
- package/dist/schema/widgets/checkout-and-beyond/index.d.ts +2 -0
- package/dist/schema/widgets/checkout-and-beyond/index.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts +178 -0
- package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts.map +1 -0
- package/dist/schema/widgets/checkout-and-beyond/shared.d.ts +2 -1
- package/dist/schema/widgets/checkout-and-beyond/shared.d.ts.map +1 -1
- package/dist/schema/widgets/checkout-and-beyond/utils.d.ts +2 -0
- package/dist/schema/widgets/checkout-and-beyond/utils.d.ts.map +1 -1
- package/dist/server/dataSourceResults.d.ts +18 -0
- package/dist/server/dataSourceResults.d.ts.map +1 -0
- package/dist/server/index.d.ts +6 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1162 -435
- package/dist/server/index.js.map +4 -4
- package/dist/server/index.mjs +1161 -434
- package/dist/server/index.mjs.map +4 -4
- package/dist/server/userConfig.d.ts +8 -0
- package/dist/server/userConfig.d.ts.map +1 -0
- package/dist/server/widgetSettings.d.ts.map +1 -1
- package/dist/transforms/index.d.ts +4 -0
- package/dist/transforms/index.d.ts.map +1 -1
- package/dist/transforms/index.js +1004 -81
- package/dist/transforms/index.js.map +4 -4
- package/dist/transforms/index.mjs +1004 -81
- package/dist/transforms/index.mjs.map +4 -4
- package/dist/transforms/offerV1/buildOfferTemplate.d.ts +13 -0
- package/dist/transforms/offerV1/buildOfferTemplate.d.ts.map +1 -0
- package/dist/transforms/offerV1/convertOfferToV2.d.ts +18 -0
- package/dist/transforms/offerV1/convertOfferToV2.d.ts.map +1 -0
- package/dist/transforms/offerV1/offerCard.d.ts +17 -0
- package/dist/transforms/offerV1/offerCard.d.ts.map +1 -0
- package/dist/transforms/offerV1/offerTemplateSeed.d.ts +339 -0
- package/dist/transforms/offerV1/offerTemplateSeed.d.ts.map +1 -0
- package/dist/transforms/offerV1/types.d.ts +145 -0
- package/dist/transforms/offerV1/types.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -23,12 +23,127 @@ __export(server_exports, {
|
|
|
23
23
|
NotFoundError: () => NotFoundError,
|
|
24
24
|
REBUY_ENGINE_HOST: () => REBUY_ENGINE_HOST,
|
|
25
25
|
UpstreamError: () => UpstreamError,
|
|
26
|
-
|
|
26
|
+
buildEngineParams: () => buildEngineParams,
|
|
27
|
+
convertWidgetSettings: () => convertWidgetSettings,
|
|
28
|
+
fetchDataSourceResults: () => fetchDataSourceResults,
|
|
29
|
+
fetchUserConfig: () => fetchUserConfig
|
|
27
30
|
});
|
|
28
31
|
module.exports = __toCommonJS(server_exports);
|
|
29
32
|
|
|
30
|
-
// src/
|
|
31
|
-
var
|
|
33
|
+
// src/server/shared.ts
|
|
34
|
+
var REBUY_ENGINE_HOST = "rebuyengine.com";
|
|
35
|
+
var UpstreamError = class extends Error {
|
|
36
|
+
constructor(status, body, message) {
|
|
37
|
+
super(message ?? `Upstream returned ${status}`);
|
|
38
|
+
this.body = body;
|
|
39
|
+
this.name = "UpstreamError";
|
|
40
|
+
this.status = status;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var NotFoundError = class extends Error {
|
|
44
|
+
constructor(message) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.name = "NotFoundError";
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// src/schema/userConfig.ts
|
|
51
|
+
var import_v42 = require("zod/v4");
|
|
52
|
+
|
|
53
|
+
// src/schema/shopConfig.ts
|
|
54
|
+
var import_v4 = require("zod/v4");
|
|
55
|
+
var ShopConfig = import_v4.z.object({
|
|
56
|
+
activeExperiments: import_v4.z.array(
|
|
57
|
+
import_v4.z.object({
|
|
58
|
+
data: import_v4.z.array(
|
|
59
|
+
import_v4.z.object({
|
|
60
|
+
aliasName: import_v4.z.string(),
|
|
61
|
+
cssInput: import_v4.z.string().nullish(),
|
|
62
|
+
elementId: import_v4.z.coerce.number(),
|
|
63
|
+
id: import_v4.z.coerce.number(),
|
|
64
|
+
javascriptInput: import_v4.z.string().nullish(),
|
|
65
|
+
traffic: import_v4.z.coerce.number()
|
|
66
|
+
})
|
|
67
|
+
),
|
|
68
|
+
id: import_v4.z.coerce.number(),
|
|
69
|
+
name: import_v4.z.string(),
|
|
70
|
+
pageTarget: import_v4.z.string().nullable(),
|
|
71
|
+
pageTargetUrl: import_v4.z.string().nullable(),
|
|
72
|
+
placeholderId: import_v4.z.coerce.number().nullable(),
|
|
73
|
+
type: import_v4.z.string()
|
|
74
|
+
})
|
|
75
|
+
),
|
|
76
|
+
activePackages: import_v4.z.array(
|
|
77
|
+
import_v4.z.object({
|
|
78
|
+
cancelledAt: import_v4.z.string().nullable(),
|
|
79
|
+
id: import_v4.z.number(),
|
|
80
|
+
installedAt: import_v4.z.string().nullable(),
|
|
81
|
+
isActive: import_v4.z.boolean(),
|
|
82
|
+
isBillable: import_v4.z.boolean(),
|
|
83
|
+
packageId: import_v4.z.number(),
|
|
84
|
+
packageName: import_v4.z.string(),
|
|
85
|
+
shortName: import_v4.z.string(),
|
|
86
|
+
trialDays: import_v4.z.number(),
|
|
87
|
+
uninstalledAt: import_v4.z.string().nullable()
|
|
88
|
+
})
|
|
89
|
+
),
|
|
90
|
+
apiKey: import_v4.z.string(),
|
|
91
|
+
billingVersion: import_v4.z.string().nullable(),
|
|
92
|
+
cacheKey: import_v4.z.coerce.number(),
|
|
93
|
+
carousel: import_v4.z.enum(["flickity", "splide"]),
|
|
94
|
+
currency: import_v4.z.string(),
|
|
95
|
+
currencySymbol: import_v4.z.string(),
|
|
96
|
+
domain: import_v4.z.string(),
|
|
97
|
+
enabledJquery: import_v4.z.boolean(),
|
|
98
|
+
enabledPresentmentCurrencies: import_v4.z.array(import_v4.z.string()),
|
|
99
|
+
hasSmartCollectionsEnabled: import_v4.z.boolean(),
|
|
100
|
+
hasSmartSearchEnabled: import_v4.z.boolean(),
|
|
101
|
+
id: import_v4.z.coerce.number(),
|
|
102
|
+
integrations: import_v4.z.record(
|
|
103
|
+
import_v4.z.enum([
|
|
104
|
+
"attentive",
|
|
105
|
+
"judgeme",
|
|
106
|
+
"junip",
|
|
107
|
+
"klaviyo",
|
|
108
|
+
"loox",
|
|
109
|
+
"okendo",
|
|
110
|
+
"opinew",
|
|
111
|
+
"recharge",
|
|
112
|
+
"reviewsio",
|
|
113
|
+
"stamped",
|
|
114
|
+
"yotpo"
|
|
115
|
+
]),
|
|
116
|
+
import_v4.z.union([import_v4.z.boolean(), import_v4.z.unknown()])
|
|
117
|
+
),
|
|
118
|
+
markets: import_v4.z.object({
|
|
119
|
+
enabled: import_v4.z.boolean()
|
|
120
|
+
}),
|
|
121
|
+
monetize: import_v4.z.object({
|
|
122
|
+
publisherKey: import_v4.z.string().nullable()
|
|
123
|
+
}).nullish(),
|
|
124
|
+
moneyFormat: import_v4.z.string(),
|
|
125
|
+
myshopifyDomain: import_v4.z.string(),
|
|
126
|
+
primaryLocale: import_v4.z.string(),
|
|
127
|
+
productGroupsEnabled: import_v4.z.enum(["no", "yes"]).transform((value) => value === "yes"),
|
|
128
|
+
rechargeCustomDomain: import_v4.z.string().nullable(),
|
|
129
|
+
sellingPlansEnabled: import_v4.z.boolean(),
|
|
130
|
+
shopId: import_v4.z.number(),
|
|
131
|
+
shopifySellingPlansEnabled: import_v4.z.boolean(),
|
|
132
|
+
shopName: import_v4.z.string(),
|
|
133
|
+
storefrontAccessToken: import_v4.z.string().nullable(),
|
|
134
|
+
useRebuyIcons: import_v4.z.boolean()
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// src/schema/userConfig.ts
|
|
138
|
+
var UserConfig = import_v42.z.object({
|
|
139
|
+
shop: ShopConfig,
|
|
140
|
+
smartCart: import_v42.z.unknown(),
|
|
141
|
+
smartFlows: import_v42.z.array(import_v42.z.unknown())
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// src/schema/widgets/checkout-and-beyond/image.ts
|
|
145
|
+
var import_uuid13 = require("uuid");
|
|
146
|
+
var import_v421 = require("zod/v4");
|
|
32
147
|
|
|
33
148
|
// src/schema/widgets/checkout-and-beyond/common.ts
|
|
34
149
|
var freezeEnum = (values) => Object.freeze(Object.fromEntries(values.map((v) => [v, v])));
|
|
@@ -148,6 +263,7 @@ var sectionTypes = [
|
|
|
148
263
|
"carousel",
|
|
149
264
|
"cartLine",
|
|
150
265
|
"dataSource",
|
|
266
|
+
"discount",
|
|
151
267
|
"image",
|
|
152
268
|
"layout",
|
|
153
269
|
"monetize",
|
|
@@ -176,12 +292,13 @@ var VariantSelector = freezeEnum(variantSelectors);
|
|
|
176
292
|
var verticalAlignments = ["top", "middle", "bottom"];
|
|
177
293
|
var VerticalAlignment = freezeEnum(verticalAlignments);
|
|
178
294
|
|
|
179
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
180
|
-
var
|
|
181
|
-
var
|
|
295
|
+
// src/schema/widgets/checkout-and-beyond/regex.ts
|
|
296
|
+
var DYNAMIC_TOKEN_REGEX = /^\{\{\s*[A-Za-z]+\s*\}\}$/;
|
|
297
|
+
var HEX_COLOR_REGEX = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
298
|
+
var HTML_TAGS_REGEX = /<\/?[^>]+>/g;
|
|
182
299
|
|
|
183
300
|
// src/schema/widgets/checkout-and-beyond/rule.ts
|
|
184
|
-
var
|
|
301
|
+
var import_v43 = require("zod/v4");
|
|
185
302
|
var ruleTypes = [
|
|
186
303
|
"cart",
|
|
187
304
|
"cart_count",
|
|
@@ -200,7 +317,7 @@ var ruleTypes = [
|
|
|
200
317
|
"product_type",
|
|
201
318
|
"product_vendor"
|
|
202
319
|
];
|
|
203
|
-
var ruleType =
|
|
320
|
+
var ruleType = import_v43.z.enum(ruleTypes);
|
|
204
321
|
var RuleType = ruleType.enum;
|
|
205
322
|
var ruleOperators = [
|
|
206
323
|
"after",
|
|
@@ -215,53 +332,93 @@ var ruleOperators = [
|
|
|
215
332
|
"greater_than",
|
|
216
333
|
"less_than"
|
|
217
334
|
];
|
|
218
|
-
var ruleOperator =
|
|
335
|
+
var ruleOperator = import_v43.z.enum(ruleOperators);
|
|
219
336
|
var RuleOperator = ruleOperator.enum;
|
|
220
|
-
var RuleCondition =
|
|
221
|
-
operator:
|
|
222
|
-
products:
|
|
223
|
-
type:
|
|
224
|
-
value:
|
|
337
|
+
var RuleCondition = import_v43.z.object({
|
|
338
|
+
operator: import_v43.z.enum(ruleOperators).default(RuleOperator.anything),
|
|
339
|
+
products: import_v43.z.union([import_v43.z.array(import_v43.z.unknown()), import_v43.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
340
|
+
type: import_v43.z.enum(ruleTypes).default(RuleType.cart_subtotal),
|
|
341
|
+
value: import_v43.z.coerce.string().default("")
|
|
225
342
|
});
|
|
226
|
-
var RuleLogicBlock =
|
|
227
|
-
rules:
|
|
343
|
+
var RuleLogicBlock = import_v43.z.object({
|
|
344
|
+
rules: import_v43.z.array(RuleCondition).default(() => [])
|
|
228
345
|
});
|
|
229
|
-
var CABRule =
|
|
230
|
-
dataSourceId:
|
|
231
|
-
enabled:
|
|
232
|
-
ruleset:
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
exitIfMatched:
|
|
236
|
-
logic:
|
|
237
|
-
output:
|
|
238
|
-
|
|
239
|
-
key:
|
|
240
|
-
type:
|
|
241
|
-
value:
|
|
346
|
+
var CABRule = import_v43.z.object({
|
|
347
|
+
dataSourceId: import_v43.z.number().nullable().default(null),
|
|
348
|
+
enabled: import_v43.z.boolean().default(false),
|
|
349
|
+
ruleset: import_v43.z.union([
|
|
350
|
+
import_v43.z.array(
|
|
351
|
+
import_v43.z.object({
|
|
352
|
+
exitIfMatched: import_v43.z.boolean().default(true),
|
|
353
|
+
logic: import_v43.z.array(RuleLogicBlock).default(() => []),
|
|
354
|
+
output: import_v43.z.array(
|
|
355
|
+
import_v43.z.object({
|
|
356
|
+
key: import_v43.z.string().default("should_show"),
|
|
357
|
+
type: import_v43.z.literal("data_json").default("data_json"),
|
|
358
|
+
value: import_v43.z.string().default("true")
|
|
242
359
|
})
|
|
243
360
|
).default(() => [{ key: "should_show", type: "data_json", value: "true" }])
|
|
244
361
|
})
|
|
245
362
|
),
|
|
246
|
-
|
|
363
|
+
import_v43.z.strictObject({}).transform(() => [])
|
|
247
364
|
]).default(() => [])
|
|
248
365
|
});
|
|
249
366
|
|
|
250
367
|
// src/schema/widgets/checkout-and-beyond/shared.ts
|
|
251
|
-
var
|
|
368
|
+
var import_v420 = require("zod/v4");
|
|
252
369
|
|
|
253
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
254
|
-
var
|
|
255
|
-
var import_v44 = require("zod/v4");
|
|
370
|
+
// src/schema/widgets/checkout-and-beyond/banner.ts
|
|
371
|
+
var import_v45 = require("zod/v4");
|
|
256
372
|
|
|
257
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
373
|
+
// src/schema/widgets/checkout-and-beyond/layout.ts
|
|
258
374
|
var import_uuid = require("uuid");
|
|
259
|
-
var
|
|
375
|
+
var import_v44 = require("zod/v4");
|
|
376
|
+
var GridItem = import_v44.z.union([import_v44.z.literal("auto"), import_v44.z.literal("fill"), import_v44.z.string().regex(/^\d+%$/), import_v44.z.number()]);
|
|
377
|
+
var CABLayoutSection = import_v44.z.object({
|
|
378
|
+
alignment: import_v44.z.object({
|
|
379
|
+
horizontal: import_v44.z.enum(horizontalAlignments).default(HorizontalAlignment.start),
|
|
380
|
+
vertical: import_v44.z.enum(verticalAlignments).default(VerticalAlignment.top)
|
|
381
|
+
}).default({
|
|
382
|
+
horizontal: HorizontalAlignment.start,
|
|
383
|
+
vertical: VerticalAlignment.top
|
|
384
|
+
}),
|
|
385
|
+
border: import_v44.z.lazy(() => CABBorder),
|
|
386
|
+
buttonField: import_v44.z.enum(buttonFields).optional(),
|
|
387
|
+
direction: import_v44.z.enum(directions).default(Direction.rows),
|
|
388
|
+
grid: import_v44.z.object({
|
|
389
|
+
columns: import_v44.z.union([import_v44.z.array(GridItem), import_v44.z.undefined()]).default(() => ["auto"]),
|
|
390
|
+
rows: import_v44.z.union([import_v44.z.array(GridItem), import_v44.z.undefined()]).default(() => ["auto"])
|
|
391
|
+
}).default({ columns: ["auto"], rows: ["auto"] }).optional(),
|
|
392
|
+
name: import_v44.z.string().optional(),
|
|
393
|
+
padding: import_v44.z.enum(spacings).default(Spacing.none),
|
|
394
|
+
rule: CABRule.optional(),
|
|
395
|
+
sectionId: import_v44.z.uuid().default(() => (0, import_uuid.v7)()),
|
|
396
|
+
sections: import_v44.z.union([import_v44.z.array(import_v44.z.lazy(() => CABSection)), import_v44.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
397
|
+
sectionType: import_v44.z.literal(SectionType.layout).default(SectionType.layout),
|
|
398
|
+
spacing: import_v44.z.enum(spacings).default(Spacing.base),
|
|
399
|
+
/** Fire-and-forget impression pixel POSTed once when the section is shown (e.g. a Monetize offer view). */
|
|
400
|
+
viewUrl: import_v44.z.string().optional(),
|
|
401
|
+
width: import_v44.z.number().default(100)
|
|
402
|
+
});
|
|
260
403
|
|
|
261
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
262
|
-
var
|
|
263
|
-
|
|
264
|
-
|
|
404
|
+
// src/schema/widgets/checkout-and-beyond/banner.ts
|
|
405
|
+
var CABBannerSection = import_v45.z.lazy(
|
|
406
|
+
() => CABLayoutSection.omit({ sectionType: true }).extend({
|
|
407
|
+
buttonField: import_v45.z.enum(buttonFields).optional(),
|
|
408
|
+
color: import_v45.z.enum(bannerColors).default("info"),
|
|
409
|
+
dismissible: import_v45.z.boolean().default(true),
|
|
410
|
+
sectionType: import_v45.z.literal(SectionType.banner).default(SectionType.banner)
|
|
411
|
+
})
|
|
412
|
+
);
|
|
413
|
+
|
|
414
|
+
// src/schema/widgets/checkout-and-beyond/button.ts
|
|
415
|
+
var import_uuid3 = require("uuid");
|
|
416
|
+
var import_v47 = require("zod/v4");
|
|
417
|
+
|
|
418
|
+
// src/schema/widgets/checkout-and-beyond/text.ts
|
|
419
|
+
var import_compat2 = require("es-toolkit/compat");
|
|
420
|
+
var import_uuid2 = require("uuid");
|
|
421
|
+
var import_v46 = require("zod/v4");
|
|
265
422
|
|
|
266
423
|
// src/schema/widgets/checkout-and-beyond/utils.ts
|
|
267
424
|
var import_es_toolkit = require("es-toolkit");
|
|
@@ -279,90 +436,65 @@ var hasHTMLInDoc = (doc) => doc.content.some(({ content = [] }) => content.some(
|
|
|
279
436
|
var checkForHTML = (input) => !((0, import_compat.isString)(input) && isHTML(input) || (0, import_es_toolkit.isPlainObject)(input) && hasHTMLInDoc(input));
|
|
280
437
|
var NO_HTML = { message: "HTML is not supported" };
|
|
281
438
|
|
|
282
|
-
// src/schema/widgets/checkout-and-beyond/image.ts
|
|
283
|
-
var CABImageSection = import_v42.z.object({
|
|
284
|
-
altText: import_v42.z.string().refine(checkForHTML, NO_HTML).default(""),
|
|
285
|
-
aspectRatio: import_v42.z.literal(1).nullable().default(null),
|
|
286
|
-
border: import_v42.z.lazy(() => CABBorder),
|
|
287
|
-
buttonField: import_v42.z.enum(buttonFields).optional(),
|
|
288
|
-
category: import_v42.z.enum(["gallery", "icons", "payment-methods", "secure-checkout"]).nullable().default(null),
|
|
289
|
-
name: import_v42.z.string().optional(),
|
|
290
|
-
naturalHeight: import_v42.z.number().default(0),
|
|
291
|
-
naturalWidth: import_v42.z.number().default(0),
|
|
292
|
-
/**
|
|
293
|
-
* `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and
|
|
294
|
-
* `cover` would crop non-square art (payment badges lost their edges — 15993); `contain` letterboxes.
|
|
295
|
-
*/
|
|
296
|
-
objectFit: import_v42.z.enum(objectFits).default(ObjectFit.contain),
|
|
297
|
-
rule: CABRule.optional(),
|
|
298
|
-
sectionId: import_v42.z.uuid().default(() => (0, import_uuid.v7)()),
|
|
299
|
-
sectionType: import_v42.z.literal(SectionType.image).default(SectionType.image),
|
|
300
|
-
source: import_v42.z.union([import_v42.z.url(), import_v42.z.literal(""), import_v42.z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(""),
|
|
301
|
-
width: import_v42.z.number().default(100)
|
|
302
|
-
});
|
|
303
|
-
|
|
304
439
|
// src/schema/widgets/checkout-and-beyond/text.ts
|
|
305
|
-
var
|
|
306
|
-
var
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
href: import_v43.z.union([import_v43.z.url(), import_v43.z.literal("#"), import_v43.z.string().regex(DYNAMIC_TOKEN_REGEX)]),
|
|
319
|
-
rel: import_v43.z.string().default("noopener noreferrer nofollow"),
|
|
320
|
-
target: import_v43.z.string().default("_blank")
|
|
440
|
+
var enumOrOmit = (...vals) => import_v46.z.string().transform((val) => vals.includes(val) ? val : void 0).optional();
|
|
441
|
+
var TiptapText = import_v46.z.object({
|
|
442
|
+
marks: import_v46.z.union([
|
|
443
|
+
import_v46.z.array(
|
|
444
|
+
import_v46.z.discriminatedUnion("type", [
|
|
445
|
+
import_v46.z.object({ type: import_v46.z.literal("bold") }),
|
|
446
|
+
import_v46.z.object({ type: import_v46.z.literal("italic") }),
|
|
447
|
+
import_v46.z.object({
|
|
448
|
+
attrs: import_v46.z.object({
|
|
449
|
+
class: import_v46.z.string().nullable(),
|
|
450
|
+
href: import_v46.z.union([import_v46.z.url(), import_v46.z.literal("#"), import_v46.z.string().regex(DYNAMIC_TOKEN_REGEX)]),
|
|
451
|
+
rel: import_v46.z.string().default("noopener noreferrer nofollow"),
|
|
452
|
+
target: import_v46.z.string().default("_blank")
|
|
321
453
|
}),
|
|
322
|
-
type:
|
|
454
|
+
type: import_v46.z.literal("link")
|
|
323
455
|
}),
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
attrs:
|
|
456
|
+
import_v46.z.object({ type: import_v46.z.literal("strike") }),
|
|
457
|
+
import_v46.z.object({
|
|
458
|
+
attrs: import_v46.z.object({
|
|
327
459
|
color: enumOrOmit(...textColorNames).default(TextColorName.base),
|
|
328
460
|
fontSize: enumOrOmit(...textSizeNames).default(TextSizeName.base)
|
|
329
461
|
}),
|
|
330
|
-
type:
|
|
462
|
+
type: import_v46.z.literal("textStyle")
|
|
331
463
|
})
|
|
332
464
|
])
|
|
333
465
|
),
|
|
334
|
-
|
|
466
|
+
import_v46.z.strictObject({}).transform(() => [])
|
|
335
467
|
]).optional(),
|
|
336
|
-
text:
|
|
337
|
-
type:
|
|
468
|
+
text: import_v46.z.string().default(""),
|
|
469
|
+
type: import_v46.z.literal("text").default("text")
|
|
338
470
|
});
|
|
339
|
-
var TiptapParagraph =
|
|
340
|
-
attrs:
|
|
471
|
+
var TiptapParagraph = import_v46.z.object({
|
|
472
|
+
attrs: import_v46.z.object({
|
|
341
473
|
textAlign: enumOrOmit(...textAlignments)
|
|
342
474
|
}).default({ textAlign: TextAlignment.start }),
|
|
343
|
-
content:
|
|
344
|
-
type:
|
|
475
|
+
content: import_v46.z.union([import_v46.z.array(TiptapText), import_v46.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
476
|
+
type: import_v46.z.literal("paragraph").default("paragraph")
|
|
345
477
|
});
|
|
346
|
-
var TiptapDocument =
|
|
347
|
-
attrs:
|
|
478
|
+
var TiptapDocument = import_v46.z.object({
|
|
479
|
+
attrs: import_v46.z.object({
|
|
348
480
|
blockSpacing: enumOrOmit(...spacings)
|
|
349
481
|
}).default({ blockSpacing: Spacing.base }),
|
|
350
|
-
content:
|
|
351
|
-
type:
|
|
482
|
+
content: import_v46.z.union([import_v46.z.array(TiptapParagraph), import_v46.z.strictObject({}).transform(() => [])]).default(() => [TiptapParagraph.parse({})]),
|
|
483
|
+
type: import_v46.z.literal("doc").default("doc")
|
|
352
484
|
});
|
|
353
|
-
var CABProgressTier =
|
|
354
|
-
threshold:
|
|
355
|
-
thresholds:
|
|
356
|
-
tierType:
|
|
485
|
+
var CABProgressTier = import_v46.z.object({
|
|
486
|
+
threshold: import_v46.z.number().int().nonnegative(),
|
|
487
|
+
thresholds: import_v46.z.record(import_v46.z.string(), import_v46.z.number().int().nonnegative()).default(() => ({})),
|
|
488
|
+
tierType: import_v46.z.enum(progressTierTypes).default(ProgressTierType.shipping)
|
|
357
489
|
});
|
|
358
|
-
var CABTextSection =
|
|
359
|
-
buttonField:
|
|
360
|
-
content:
|
|
361
|
-
name:
|
|
362
|
-
optionId:
|
|
490
|
+
var CABTextSection = import_v46.z.object({
|
|
491
|
+
buttonField: import_v46.z.enum(buttonFields).optional(),
|
|
492
|
+
content: import_v46.z.record(import_v46.z.string(), import_v46.z.union([import_v46.z.string(), TiptapDocument]).refine(checkForHTML, NO_HTML).optional()).default({ en: TiptapDocument.parse({}) }).optional(),
|
|
493
|
+
name: import_v46.z.string().optional(),
|
|
494
|
+
optionId: import_v46.z.number().optional(),
|
|
363
495
|
rule: CABRule.optional(),
|
|
364
|
-
sectionId:
|
|
365
|
-
sectionType:
|
|
496
|
+
sectionId: import_v46.z.uuid().default(() => (0, import_uuid2.v7)()),
|
|
497
|
+
sectionType: import_v46.z.literal(SectionType.text).default(SectionType.text),
|
|
366
498
|
tier: CABProgressTier.optional()
|
|
367
499
|
}).superRefine(({ buttonField, content }, ctx) => {
|
|
368
500
|
if (buttonField === ButtonField.destinationUrl && content) {
|
|
@@ -384,48 +516,48 @@ var CABTextSection = import_v43.z.object({
|
|
|
384
516
|
});
|
|
385
517
|
|
|
386
518
|
// src/schema/widgets/checkout-and-beyond/button.ts
|
|
387
|
-
var CABButtonContent =
|
|
388
|
-
() =>
|
|
519
|
+
var CABButtonContent = import_v47.z.lazy(
|
|
520
|
+
() => import_v47.z.discriminatedUnion("sectionType", [CABImageSection, CABLayoutSection, CABTextSection])
|
|
389
521
|
);
|
|
390
|
-
var CABButtonSection =
|
|
391
|
-
action:
|
|
392
|
-
buttonStyle:
|
|
393
|
-
custom:
|
|
394
|
-
color:
|
|
395
|
-
height:
|
|
396
|
-
width:
|
|
522
|
+
var CABButtonSection = import_v47.z.object({
|
|
523
|
+
action: import_v47.z.union([import_v47.z.literal(""), import_v47.z.enum(buttonActions)]).default(""),
|
|
524
|
+
buttonStyle: import_v47.z.enum(buttonStyles).default(ButtonStyle.primary),
|
|
525
|
+
custom: import_v47.z.object({
|
|
526
|
+
color: import_v47.z.string().regex(HEX_COLOR_REGEX).default("#005bd3"),
|
|
527
|
+
height: import_v47.z.number().default(52),
|
|
528
|
+
width: import_v47.z.number().default(300)
|
|
397
529
|
}).default({
|
|
398
530
|
color: "#005bd3",
|
|
399
531
|
height: 52,
|
|
400
532
|
width: 300
|
|
401
533
|
}),
|
|
402
|
-
disableDowngrade:
|
|
403
|
-
name:
|
|
404
|
-
optionId:
|
|
405
|
-
popover:
|
|
406
|
-
alignment:
|
|
407
|
-
position:
|
|
534
|
+
disableDowngrade: import_v47.z.boolean().default(false),
|
|
535
|
+
name: import_v47.z.string().optional(),
|
|
536
|
+
optionId: import_v47.z.number().optional(),
|
|
537
|
+
popover: import_v47.z.object({
|
|
538
|
+
alignment: import_v47.z.enum(textAlignments).default(TextAlignment.center),
|
|
539
|
+
position: import_v47.z.enum(popoverPositions).default(PopoverPosition.blockStart)
|
|
408
540
|
}).optional().default(() => ({
|
|
409
541
|
alignment: TextAlignment.center,
|
|
410
542
|
position: PopoverPosition.blockStart
|
|
411
543
|
})),
|
|
412
544
|
rule: CABRule.optional(),
|
|
413
|
-
sectionId:
|
|
414
|
-
sections:
|
|
415
|
-
sectionType:
|
|
545
|
+
sectionId: import_v47.z.uuid().default(() => (0, import_uuid3.v7)()),
|
|
546
|
+
sections: import_v47.z.union([import_v47.z.array(CABButtonContent), import_v47.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
547
|
+
sectionType: import_v47.z.literal(SectionType.button).default(SectionType.button),
|
|
416
548
|
/** Fire-and-forget pixel POSTed when the button is clicked (e.g. a Monetize decline). */
|
|
417
|
-
trackingUrl:
|
|
549
|
+
trackingUrl: import_v47.z.string().optional()
|
|
418
550
|
});
|
|
419
551
|
|
|
420
552
|
// src/schema/widgets/checkout-and-beyond/carousel.ts
|
|
421
|
-
var
|
|
553
|
+
var import_v412 = require("zod/v4");
|
|
422
554
|
|
|
423
555
|
// src/schema/widgets/checkout-and-beyond/offers.ts
|
|
424
|
-
var
|
|
556
|
+
var import_v411 = require("zod/v4");
|
|
425
557
|
|
|
426
558
|
// src/schema/widgets/checkout-and-beyond/dataSource.ts
|
|
427
559
|
var import_uuid4 = require("uuid");
|
|
428
|
-
var
|
|
560
|
+
var import_v48 = require("zod/v4");
|
|
429
561
|
|
|
430
562
|
// src/schema/widgets/checkout-and-beyond/constants.ts
|
|
431
563
|
var import_es_toolkit2 = require("es-toolkit");
|
|
@@ -504,70 +636,70 @@ var widgetTypes = [
|
|
|
504
636
|
var WidgetType = freezeEnum(widgetTypes);
|
|
505
637
|
|
|
506
638
|
// src/schema/widgets/checkout-and-beyond/dataSource.ts
|
|
507
|
-
var CABDiscount =
|
|
508
|
-
amount:
|
|
509
|
-
discountedBy:
|
|
510
|
-
discountedFrom:
|
|
511
|
-
type:
|
|
639
|
+
var CABDiscount = import_v48.z.object({
|
|
640
|
+
amount: import_v48.z.union([import_v48.z.number(), import_v48.z.string()]).catch(0),
|
|
641
|
+
discountedBy: import_v48.z.string().optional(),
|
|
642
|
+
discountedFrom: import_v48.z.enum(discountSources).optional().catch(void 0),
|
|
643
|
+
type: import_v48.z.enum(discountTypes).catch("none")
|
|
512
644
|
});
|
|
513
|
-
var CABIntegrations =
|
|
514
|
-
judgeme:
|
|
515
|
-
junip:
|
|
516
|
-
klaviyo:
|
|
517
|
-
loox:
|
|
518
|
-
okendo:
|
|
519
|
-
opinew:
|
|
520
|
-
reviewsio:
|
|
521
|
-
stamped:
|
|
522
|
-
yotpo:
|
|
645
|
+
var CABIntegrations = import_v48.z.object({
|
|
646
|
+
judgeme: import_v48.z.boolean().default(false),
|
|
647
|
+
junip: import_v48.z.boolean().default(false),
|
|
648
|
+
klaviyo: import_v48.z.boolean().default(false),
|
|
649
|
+
loox: import_v48.z.boolean().default(false),
|
|
650
|
+
okendo: import_v48.z.boolean().default(false),
|
|
651
|
+
opinew: import_v48.z.boolean().default(false),
|
|
652
|
+
reviewsio: import_v48.z.boolean().default(false),
|
|
653
|
+
stamped: import_v48.z.boolean().default(false),
|
|
654
|
+
yotpo: import_v48.z.boolean().default(false)
|
|
523
655
|
});
|
|
524
|
-
var CABDataSourceSection =
|
|
525
|
-
dataSourceId:
|
|
526
|
-
dataSourcePath:
|
|
656
|
+
var CABDataSourceSection = import_v48.z.object({
|
|
657
|
+
dataSourceId: import_v48.z.number().nullable().default(null),
|
|
658
|
+
dataSourcePath: import_v48.z.string().default(DEFAULT_ENDPOINTS[0].value),
|
|
527
659
|
discount: CABDiscount.optional(),
|
|
528
660
|
integrations: CABIntegrations.optional(),
|
|
529
|
-
limit:
|
|
530
|
-
matchVariant:
|
|
531
|
-
matchVariantOutOfStock:
|
|
532
|
-
name:
|
|
533
|
-
productType:
|
|
534
|
-
sectionId:
|
|
535
|
-
sectionType:
|
|
536
|
-
treatAsGwp:
|
|
661
|
+
limit: import_v48.z.number().default(1),
|
|
662
|
+
matchVariant: import_v48.z.boolean().default(false),
|
|
663
|
+
matchVariantOutOfStock: import_v48.z.boolean().default(false),
|
|
664
|
+
name: import_v48.z.string().default(DEFAULT_ENDPOINTS[0].label),
|
|
665
|
+
productType: import_v48.z.enum(productTypes).optional(),
|
|
666
|
+
sectionId: import_v48.z.uuid().default(() => (0, import_uuid4.v7)()),
|
|
667
|
+
sectionType: import_v48.z.literal(SectionType.dataSource).default(SectionType.dataSource),
|
|
668
|
+
treatAsGwp: import_v48.z.boolean().default(false)
|
|
537
669
|
});
|
|
538
670
|
|
|
539
671
|
// src/schema/widgets/checkout-and-beyond/products.ts
|
|
540
672
|
var import_uuid6 = require("uuid");
|
|
541
|
-
var
|
|
673
|
+
var import_v410 = require("zod/v4");
|
|
542
674
|
|
|
543
675
|
// src/schema/widgets/checkout-and-beyond/product.ts
|
|
544
676
|
var import_uuid5 = require("uuid");
|
|
545
|
-
var
|
|
546
|
-
var CABVariantContent =
|
|
547
|
-
() =>
|
|
677
|
+
var import_v49 = require("zod/v4");
|
|
678
|
+
var CABVariantContent = import_v49.z.lazy(
|
|
679
|
+
() => import_v49.z.discriminatedUnion("sectionType", [CABButtonSection, CABTextSection])
|
|
548
680
|
);
|
|
549
|
-
var CABProductSection =
|
|
550
|
-
name:
|
|
551
|
-
productId:
|
|
552
|
-
sectionId:
|
|
553
|
-
sections:
|
|
554
|
-
sectionType:
|
|
555
|
-
selectors:
|
|
556
|
-
variantMode:
|
|
681
|
+
var CABProductSection = import_v49.z.object({
|
|
682
|
+
name: import_v49.z.string().optional(),
|
|
683
|
+
productId: import_v49.z.number().nullable().default(null),
|
|
684
|
+
sectionId: import_v49.z.uuid().default(() => (0, import_uuid5.v7)()),
|
|
685
|
+
sections: import_v49.z.union([import_v49.z.array(CABVariantContent), import_v49.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
686
|
+
sectionType: import_v49.z.literal(SectionType.product).default(SectionType.product),
|
|
687
|
+
selectors: import_v49.z.record(import_v49.z.string(), import_v49.z.enum(variantSelectors).default(VariantSelector.menu)).default(() => ({})),
|
|
688
|
+
variantMode: import_v49.z.enum(variantModes).default(VariantMode.multiple)
|
|
557
689
|
});
|
|
558
690
|
|
|
559
691
|
// src/schema/widgets/checkout-and-beyond/products.ts
|
|
560
|
-
var CABProductsSection =
|
|
561
|
-
name:
|
|
562
|
-
sectionId:
|
|
563
|
-
sections:
|
|
564
|
-
sectionType:
|
|
692
|
+
var CABProductsSection = import_v410.z.object({
|
|
693
|
+
name: import_v410.z.string().optional(),
|
|
694
|
+
sectionId: import_v410.z.uuid().default(() => (0, import_uuid6.v7)()),
|
|
695
|
+
sections: import_v410.z.union([import_v410.z.array(import_v410.z.lazy(() => CABProductSection)), import_v410.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
696
|
+
sectionType: import_v410.z.literal(SectionType.products).default(SectionType.products)
|
|
565
697
|
});
|
|
566
698
|
|
|
567
699
|
// src/schema/widgets/checkout-and-beyond/offers.ts
|
|
568
|
-
var CABOffersSection =
|
|
700
|
+
var CABOffersSection = import_v411.z.lazy(
|
|
569
701
|
() => CABLayoutSection.omit({ sections: true, sectionType: true }).extend({
|
|
570
|
-
sections:
|
|
702
|
+
sections: import_v411.z.union([import_v411.z.array(import_v411.z.lazy(() => CABSection)), import_v411.z.strictObject({}).transform(() => [])]).default(() => [
|
|
571
703
|
CABBannerSection.parse({
|
|
572
704
|
buttonField: "undoAddToOrder",
|
|
573
705
|
color: "success",
|
|
@@ -581,62 +713,77 @@ var CABOffersSection = import_v48.z.lazy(
|
|
|
581
713
|
CABDataSourceSection.parse({}),
|
|
582
714
|
CABProductsSection.parse({})
|
|
583
715
|
]),
|
|
584
|
-
sectionType:
|
|
716
|
+
sectionType: import_v411.z.literal(SectionType.offers).default(SectionType.offers)
|
|
585
717
|
})
|
|
586
718
|
);
|
|
587
719
|
|
|
588
720
|
// src/schema/widgets/checkout-and-beyond/carousel.ts
|
|
589
|
-
var CABCarouselSection =
|
|
721
|
+
var CABCarouselSection = import_v412.z.lazy(
|
|
590
722
|
() => CABLayoutSection.omit({ sections: true, sectionType: true }).extend({
|
|
591
|
-
autoAdvanceInterval:
|
|
592
|
-
itemsAtOnce:
|
|
593
|
-
sections:
|
|
594
|
-
sectionType:
|
|
723
|
+
autoAdvanceInterval: import_v412.z.number().default(0),
|
|
724
|
+
itemsAtOnce: import_v412.z.number().min(1).default(1),
|
|
725
|
+
sections: import_v412.z.union([import_v412.z.array(import_v412.z.lazy(() => CABSection)), import_v412.z.strictObject({}).transform(() => [])]).default(() => [CABOffersSection.parse({})]),
|
|
726
|
+
sectionType: import_v412.z.literal(SectionType.carousel).default(SectionType.carousel)
|
|
595
727
|
})
|
|
596
728
|
);
|
|
597
729
|
|
|
598
730
|
// src/schema/widgets/checkout-and-beyond/cartLine.ts
|
|
599
|
-
var
|
|
600
|
-
var CABCartLineSection =
|
|
731
|
+
var import_v413 = require("zod/v4");
|
|
732
|
+
var CABCartLineSection = import_v413.z.lazy(
|
|
601
733
|
() => CABLayoutSection.omit({ sections: true, sectionType: true }).extend({
|
|
602
|
-
sections:
|
|
603
|
-
sectionType:
|
|
734
|
+
sections: import_v413.z.union([import_v413.z.array(import_v413.z.lazy(() => CABSection)), import_v413.z.strictObject({}).transform(() => [])]).default(() => [CABButtonSection.parse({ action: ButtonAction.switchToSubscription })]),
|
|
735
|
+
sectionType: import_v413.z.literal(SectionType.cartLine).default(SectionType.cartLine)
|
|
604
736
|
})
|
|
605
737
|
);
|
|
606
738
|
|
|
607
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
739
|
+
// src/schema/widgets/checkout-and-beyond/discount.ts
|
|
608
740
|
var import_uuid7 = require("uuid");
|
|
609
|
-
var
|
|
610
|
-
var
|
|
611
|
-
|
|
741
|
+
var import_v414 = require("zod/v4");
|
|
742
|
+
var CABDiscountSection = import_v414.z.object({
|
|
743
|
+
amount: import_v414.z.union([import_v414.z.number(), import_v414.z.string()]).catch(0),
|
|
744
|
+
discountedBy: import_v414.z.string().optional(),
|
|
745
|
+
discountedFrom: import_v414.z.enum(discountSources).optional().catch(void 0),
|
|
746
|
+
message: import_v414.z.string().optional(),
|
|
747
|
+
name: import_v414.z.string().optional(),
|
|
748
|
+
quantity: import_v414.z.number().default(1),
|
|
749
|
+
sectionId: import_v414.z.uuid().default(() => (0, import_uuid7.v7)()),
|
|
750
|
+
sectionType: import_v414.z.literal(SectionType.discount).default(SectionType.discount),
|
|
751
|
+
type: import_v414.z.enum(discountTypes).catch("none")
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
// src/schema/widgets/checkout-and-beyond/monetize.ts
|
|
755
|
+
var import_uuid8 = require("uuid");
|
|
756
|
+
var import_v415 = require("zod/v4");
|
|
757
|
+
var CABMonetizeSection = import_v415.z.object({
|
|
758
|
+
name: import_v415.z.string().optional(),
|
|
612
759
|
rule: CABRule.optional(),
|
|
613
|
-
sectionId:
|
|
614
|
-
sectionType:
|
|
760
|
+
sectionId: import_v415.z.uuid().default(() => (0, import_uuid8.v7)()),
|
|
761
|
+
sectionType: import_v415.z.literal(SectionType.monetize).default(SectionType.monetize)
|
|
615
762
|
});
|
|
616
763
|
|
|
617
764
|
// src/schema/widgets/checkout-and-beyond/progressBar.ts
|
|
618
|
-
var
|
|
619
|
-
var
|
|
620
|
-
var CABProgressBarSection =
|
|
765
|
+
var import_uuid9 = require("uuid");
|
|
766
|
+
var import_v416 = require("zod/v4");
|
|
767
|
+
var CABProgressBarSection = import_v416.z.object({
|
|
621
768
|
/** Empty = shown everywhere; otherwise uppercase ISO country codes. */
|
|
622
|
-
countryCodes:
|
|
623
|
-
name:
|
|
769
|
+
countryCodes: import_v416.z.array(import_v416.z.string()).default(() => []),
|
|
770
|
+
name: import_v416.z.string().optional(),
|
|
624
771
|
rule: CABRule.optional(),
|
|
625
|
-
sectionId:
|
|
626
|
-
sections:
|
|
627
|
-
sectionType:
|
|
772
|
+
sectionId: import_v416.z.uuid().default(() => (0, import_uuid9.v7)()),
|
|
773
|
+
sections: import_v416.z.union([import_v416.z.array(CABTextSection), import_v416.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
774
|
+
sectionType: import_v416.z.literal(SectionType.progressBar).default(SectionType.progressBar)
|
|
628
775
|
});
|
|
629
776
|
|
|
630
777
|
// src/schema/widgets/checkout-and-beyond/quantity.ts
|
|
631
|
-
var
|
|
632
|
-
var
|
|
633
|
-
var CABQuantitySection =
|
|
634
|
-
errorMessages:
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
max:
|
|
638
|
-
min:
|
|
639
|
-
neg:
|
|
778
|
+
var import_uuid10 = require("uuid");
|
|
779
|
+
var import_v417 = require("zod/v4");
|
|
780
|
+
var CABQuantitySection = import_v417.z.object({
|
|
781
|
+
errorMessages: import_v417.z.record(
|
|
782
|
+
import_v417.z.string(),
|
|
783
|
+
import_v417.z.object({
|
|
784
|
+
max: import_v417.z.string().optional(),
|
|
785
|
+
min: import_v417.z.string().optional(),
|
|
786
|
+
neg: import_v417.z.string().optional()
|
|
640
787
|
})
|
|
641
788
|
).default({
|
|
642
789
|
en: {
|
|
@@ -645,58 +792,59 @@ var CABQuantitySection = import_v413.z.object({
|
|
|
645
792
|
neg: "Quantity cannot be negative"
|
|
646
793
|
}
|
|
647
794
|
}),
|
|
648
|
-
inputType:
|
|
649
|
-
max:
|
|
650
|
-
min:
|
|
651
|
-
name:
|
|
795
|
+
inputType: import_v417.z.enum(quantityInputs).default(QuantityInput.select),
|
|
796
|
+
max: import_v417.z.number().min(1).max(100).default(10),
|
|
797
|
+
min: import_v417.z.number().min(1).default(1),
|
|
798
|
+
name: import_v417.z.string().optional(),
|
|
652
799
|
rule: CABRule.optional(),
|
|
653
|
-
sectionId:
|
|
654
|
-
sectionType:
|
|
800
|
+
sectionId: import_v417.z.uuid().default(() => (0, import_uuid10.v7)()),
|
|
801
|
+
sectionType: import_v417.z.literal(SectionType.quantity).default(SectionType.quantity)
|
|
655
802
|
});
|
|
656
803
|
|
|
657
804
|
// src/schema/widgets/checkout-and-beyond/reviews.ts
|
|
658
|
-
var
|
|
659
|
-
var
|
|
660
|
-
var CABReviewsSection =
|
|
661
|
-
color:
|
|
662
|
-
name:
|
|
805
|
+
var import_uuid11 = require("uuid");
|
|
806
|
+
var import_v418 = require("zod/v4");
|
|
807
|
+
var CABReviewsSection = import_v418.z.object({
|
|
808
|
+
color: import_v418.z.string().default("#fadb14"),
|
|
809
|
+
name: import_v418.z.string().optional(),
|
|
663
810
|
rule: CABRule.optional(),
|
|
664
|
-
sectionId:
|
|
665
|
-
sectionType:
|
|
666
|
-
size:
|
|
811
|
+
sectionId: import_v418.z.uuid().default(() => (0, import_uuid11.v7)()),
|
|
812
|
+
sectionType: import_v418.z.literal(SectionType.reviews).default(SectionType.reviews),
|
|
813
|
+
size: import_v418.z.enum(reviewsSizes).default(ReviewsSize.default)
|
|
667
814
|
});
|
|
668
815
|
|
|
669
816
|
// src/schema/widgets/checkout-and-beyond/variants.ts
|
|
670
817
|
var import_compat3 = require("es-toolkit/compat");
|
|
671
|
-
var
|
|
672
|
-
var
|
|
673
|
-
var CABVariantsSection =
|
|
674
|
-
hideOutOfStockVariants:
|
|
675
|
-
name:
|
|
818
|
+
var import_uuid12 = require("uuid");
|
|
819
|
+
var import_v419 = require("zod/v4");
|
|
820
|
+
var CABVariantsSection = import_v419.z.object({
|
|
821
|
+
hideOutOfStockVariants: import_v419.z.boolean().default(false),
|
|
822
|
+
name: import_v419.z.string().optional(),
|
|
676
823
|
rule: CABRule.optional(),
|
|
677
|
-
sectionId:
|
|
678
|
-
sectionType:
|
|
679
|
-
selector:
|
|
680
|
-
variantMode:
|
|
824
|
+
sectionId: import_v419.z.uuid().default(() => (0, import_uuid12.v7)()),
|
|
825
|
+
sectionType: import_v419.z.literal(SectionType.variants).default(SectionType.variants),
|
|
826
|
+
selector: import_v419.z.enum((0, import_compat3.slice)(variantSelectors, 0, 3)).default(VariantSelector.menu),
|
|
827
|
+
variantMode: import_v419.z.enum(variantModes).default(VariantMode.multiple)
|
|
681
828
|
});
|
|
682
829
|
|
|
683
830
|
// src/schema/widgets/checkout-and-beyond/shared.ts
|
|
684
|
-
var CABBorder =
|
|
685
|
-
radius:
|
|
686
|
-
style:
|
|
687
|
-
width:
|
|
831
|
+
var CABBorder = import_v420.z.object({
|
|
832
|
+
radius: import_v420.z.enum(borderRadii).default(BorderRadius.base),
|
|
833
|
+
style: import_v420.z.enum(borderStyles).default(BorderStyle.none),
|
|
834
|
+
width: import_v420.z.enum(borderWidths).default(BorderWidth.base)
|
|
688
835
|
}).default({
|
|
689
836
|
radius: BorderRadius.base,
|
|
690
837
|
style: BorderStyle.none,
|
|
691
838
|
width: BorderWidth.base
|
|
692
839
|
});
|
|
693
|
-
var CABSection =
|
|
694
|
-
() =>
|
|
840
|
+
var CABSection = import_v420.z.lazy(
|
|
841
|
+
() => import_v420.z.discriminatedUnion("sectionType", [
|
|
695
842
|
CABBannerSection,
|
|
696
843
|
CABButtonSection,
|
|
697
844
|
CABCarouselSection,
|
|
698
845
|
CABCartLineSection,
|
|
699
846
|
CABDataSourceSection,
|
|
847
|
+
CABDiscountSection,
|
|
700
848
|
CABImageSection,
|
|
701
849
|
CABLayoutSection,
|
|
702
850
|
CABMonetizeSection,
|
|
@@ -708,205 +856,30 @@ var CABSection = import_v416.z.lazy(
|
|
|
708
856
|
CABReviewsSection,
|
|
709
857
|
CABTextSection,
|
|
710
858
|
CABVariantsSection
|
|
711
|
-
])
|
|
712
|
-
);
|
|
713
|
-
|
|
714
|
-
// src/schema/widgets/checkout-and-beyond/
|
|
715
|
-
var
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
sections: import_v417.z.union([import_v417.z.array(import_v417.z.lazy(() => CABSection)), import_v417.z.strictObject({}).transform(() => [])]).default(() => []),
|
|
736
|
-
sectionType: import_v417.z.literal(SectionType.layout).default(SectionType.layout),
|
|
737
|
-
spacing: import_v417.z.enum(spacings).default(Spacing.base),
|
|
738
|
-
/** Fire-and-forget impression pixel POSTed once when the section is shown (e.g. a Monetize offer view). */
|
|
739
|
-
viewUrl: import_v417.z.string().optional(),
|
|
740
|
-
width: import_v417.z.number().default(100)
|
|
741
|
-
});
|
|
742
|
-
|
|
743
|
-
// src/schema/widgets/checkout-and-beyond/banner.ts
|
|
744
|
-
var CABBannerSection = import_v418.z.lazy(
|
|
745
|
-
() => CABLayoutSection.omit({ sectionType: true }).extend({
|
|
746
|
-
buttonField: import_v418.z.enum(buttonFields).optional(),
|
|
747
|
-
color: import_v418.z.enum(bannerColors).default("info"),
|
|
748
|
-
dismissible: import_v418.z.boolean().default(true),
|
|
749
|
-
sectionType: import_v418.z.literal(SectionType.banner).default(SectionType.banner)
|
|
750
|
-
})
|
|
751
|
-
);
|
|
752
|
-
|
|
753
|
-
// src/schema/widgets/checkout-and-beyond/root.ts
|
|
754
|
-
var import_v419 = require("zod/v4");
|
|
755
|
-
var TargetArea = import_v419.z.object({
|
|
756
|
-
fill: import_v419.z.boolean().optional(),
|
|
757
|
-
flip: import_v419.z.enum(["both", "horizontal", "vertical"]).optional(),
|
|
758
|
-
icon: import_v419.z.string(),
|
|
759
|
-
label: import_v419.z.string(),
|
|
760
|
-
width: import_v419.z.string()
|
|
761
|
-
}).default(targetAreas[EditorMode.checkoutExtension][1]);
|
|
762
|
-
var CABTracking = import_v419.z.object({
|
|
763
|
-
enableAttribution: import_v419.z.boolean().default(true),
|
|
764
|
-
enableSource: import_v419.z.boolean().default(true),
|
|
765
|
-
enableWidget: import_v419.z.boolean().default(true)
|
|
766
|
-
}).default({ enableAttribution: true, enableSource: true, enableWidget: true });
|
|
767
|
-
var CABRootSection = CABLayoutSection.extend({
|
|
768
|
-
editorMode: import_v419.z.enum(editorModes).default(EditorMode.checkoutExtension),
|
|
769
|
-
previewMode: import_v419.z.boolean().default(false),
|
|
770
|
-
storeId: import_v419.z.number().nullable().default(null),
|
|
771
|
-
targetArea: TargetArea.nullable(),
|
|
772
|
-
tracking: CABTracking,
|
|
773
|
-
type: import_v419.z.enum(widgetTypes).default(WidgetType.ui_extension_content_block),
|
|
774
|
-
version: import_v419.z.literal(2).default(2),
|
|
775
|
-
widgetId: import_v419.z.number().nullable().default(null)
|
|
776
|
-
});
|
|
777
|
-
|
|
778
|
-
// src/schema/widgets/checkout-and-beyond/switchLabels.ts
|
|
779
|
-
var SWITCH_LABELS = {
|
|
780
|
-
subscriptionOption: {
|
|
781
|
-
ar: "\u064A\u062A\u0645 \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0643\u0644 {{frequency}} {{interval}}",
|
|
782
|
-
cs: "Doru\u010Den\xED ka\u017Ed\xFDch {{frequency}} {{interval}}",
|
|
783
|
-
da: "Leveres hver {{frequency}} {{interval}}",
|
|
784
|
-
de: "Lieferung alle {{frequency}} {{interval}}",
|
|
785
|
-
en: "Delivers every {{frequency}} {{interval}}",
|
|
786
|
-
es: "Entrega cada {{frequency}} {{interval}}",
|
|
787
|
-
fi: "Toimitus {{frequency}} {{interval}} v\xE4lein",
|
|
788
|
-
fr: "Livraison tous les {{frequency}} {{interval}}",
|
|
789
|
-
ga: "Seachadtar gach {{frequency}} {{interval}}",
|
|
790
|
-
he: "\u05DE\u05E9\u05DC\u05D5\u05D7 \u05DB\u05DC {{frequency}} {{interval}}",
|
|
791
|
-
hi: "\u0939\u0930 {{frequency}} {{interval}} \u092E\u0947\u0902 \u0921\u093F\u0932\u0940\u0935\u0930\u0940",
|
|
792
|
-
id: "Dikirim setiap {{frequency}} {{interval}}",
|
|
793
|
-
it: "Consegna ogni {{frequency}} {{interval}}",
|
|
794
|
-
ja: "{{frequency}} {{interval}}\u3054\u3068\u306B\u304A\u5C4A\u3051",
|
|
795
|
-
ko: "{{frequency}} {{interval}}\uB9C8\uB2E4 \uBC30\uC1A1",
|
|
796
|
-
nl: "Wordt elke {{frequency}} {{interval}} geleverd",
|
|
797
|
-
no: "Leveres hver {{frequency}} {{interval}}",
|
|
798
|
-
pl: "Dostawa co {{frequency}} {{interval}}",
|
|
799
|
-
pt: "Entrega a cada {{frequency}} {{interval}}",
|
|
800
|
-
ru: "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u0430\u0436\u0434\u044B\u0435 {{frequency}} {{interval}}",
|
|
801
|
-
sv: "Levereras var {{frequency}} {{interval}}",
|
|
802
|
-
th: "\u0E08\u0E31\u0E14\u0E2A\u0E48\u0E07\u0E17\u0E38\u0E01 {{frequency}} {{interval}}",
|
|
803
|
-
tr: "Her {{frequency}} {{interval}} aral\u0131\u011F\u0131nda teslimat",
|
|
804
|
-
uk: "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u043E\u0436\u043D\u0456 {{frequency}} {{interval}}",
|
|
805
|
-
vi: "Giao h\xE0ng m\u1ED7i {{frequency}} {{interval}}",
|
|
806
|
-
zh: "\u6BCF {{frequency}} {{interval}} \u914D\u9001\u4E00\u6B21"
|
|
807
|
-
},
|
|
808
|
-
switchToOneTimePurchase: {
|
|
809
|
-
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0634\u0631\u0627\u0621 \u0644\u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629",
|
|
810
|
-
cs: "P\u0159epnout na jednor\xE1zov\xFD n\xE1kup",
|
|
811
|
-
da: "Skift til engangsk\xF8b",
|
|
812
|
-
de: "Zu einmaligem Kauf wechseln",
|
|
813
|
-
en: "Switch to One-time Purchase",
|
|
814
|
-
es: "Cambiar a compra \xFAnica",
|
|
815
|
-
fi: "Vaihda kertaluonteiseen ostoon",
|
|
816
|
-
fr: "Passer \xE0 un achat unique",
|
|
817
|
-
ga: "Athraigh go ceannach aonuaire",
|
|
818
|
-
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05E8\u05DB\u05D9\u05E9\u05D4 \u05D7\u05D3-\u05E4\u05E2\u05DE\u05D9\u05EA",
|
|
819
|
-
hi: "\u090F\u0915 \u092C\u093E\u0930 \u0915\u0940 \u0916\u0930\u0940\u0926 \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902",
|
|
820
|
-
id: "Beralih ke pembelian satu kali",
|
|
821
|
-
it: "Passa all\u2019acquisto una tantum",
|
|
822
|
-
ja: "1\u56DE\u9650\u308A\u306E\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B",
|
|
823
|
-
ko: "\uC77C\uD68C\uC131 \uAD6C\uB9E4\uB85C \uC804\uD658",
|
|
824
|
-
nl: "Overschakelen naar eenmalige aankoop",
|
|
825
|
-
no: "Bytt til engangskj\xF8p",
|
|
826
|
-
pl: "Prze\u0142\u0105cz na jednorazowy zakup",
|
|
827
|
-
pt: "Mudar para compra \xFAnica",
|
|
828
|
-
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u0440\u0430\u0437\u043E\u0432\u0443\u044E \u043F\u043E\u043A\u0443\u043F\u043A\u0443",
|
|
829
|
-
sv: "Byt till eng\xE5ngsk\xF6p",
|
|
830
|
-
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27",
|
|
831
|
-
tr: "Tek seferlik sat\u0131n almaya ge\xE7",
|
|
832
|
-
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0443 \u043F\u043E\u043A\u0443\u043F\u043A\u0443",
|
|
833
|
-
vi: "Chuy\u1EC3n sang mua m\u1ED9t l\u1EA7n",
|
|
834
|
-
zh: "\u5207\u6362\u4E3A\u4E00\u6B21\u6027\u8D2D\u4E70"
|
|
835
|
-
},
|
|
836
|
-
switchToSubscriptionNoDiscount: {
|
|
837
|
-
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643",
|
|
838
|
-
cs: "P\u0159epnout na p\u0159edplatn\xE9",
|
|
839
|
-
da: "Skift til abonnement",
|
|
840
|
-
de: "Zu einem Abonnement wechseln",
|
|
841
|
-
en: "Switch to Subscription",
|
|
842
|
-
es: "Cambiar a suscripci\xF3n",
|
|
843
|
-
fi: "Vaihda tilaukseen",
|
|
844
|
-
fr: "Passer \xE0 un abonnement",
|
|
845
|
-
ga: "Athraigh go s\xEDnti\xFAs",
|
|
846
|
-
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9",
|
|
847
|
-
hi: "\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902",
|
|
848
|
-
id: "Beralih ke langganan",
|
|
849
|
-
it: "Passa all\u2019abbonamento",
|
|
850
|
-
ja: "\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B",
|
|
851
|
-
ko: "\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658",
|
|
852
|
-
nl: "Overschakelen naar abonnement",
|
|
853
|
-
no: "Bytt til abonnement",
|
|
854
|
-
pl: "Prze\u0142\u0105cz na subskrypcj\u0119",
|
|
855
|
-
pt: "Mudar para assinatura",
|
|
856
|
-
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443",
|
|
857
|
-
sv: "Byt till prenumeration",
|
|
858
|
-
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01",
|
|
859
|
-
tr: "Aboneli\u011Fe ge\xE7",
|
|
860
|
-
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443",
|
|
861
|
-
vi: "Chuy\u1EC3n sang \u0111\u0103ng k\xFD",
|
|
862
|
-
zh: "\u5207\u6362\u4E3A\u8BA2\u9605"
|
|
863
|
-
},
|
|
864
|
-
switchToSubscriptionWithDiscount: {
|
|
865
|
-
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643 \u0648\u062A\u0648\u0641\u064A\u0631 {{subscriptionDiscount}}%",
|
|
866
|
-
cs: "P\u0159epnout na p\u0159edplatn\xE9 a u\u0161et\u0159it {{subscriptionDiscount}} %",
|
|
867
|
-
da: "Skift til abonnement og spar {{subscriptionDiscount}}%",
|
|
868
|
-
de: "Zu einem Abonnement wechseln und {{subscriptionDiscount}} % sparen",
|
|
869
|
-
en: "Switch to Subscription & Save {{subscriptionDiscount}}%",
|
|
870
|
-
es: "Cambiar a suscripci\xF3n y ahorrar {{subscriptionDiscount}}%",
|
|
871
|
-
fi: "Vaihda tilaukseen ja s\xE4\xE4st\xE4 {{subscriptionDiscount}} %",
|
|
872
|
-
fr: "Passer \xE0 un abonnement et \xE9conomiser {{subscriptionDiscount}} %",
|
|
873
|
-
ga: "Athraigh go s\xEDnti\xFAs agus s\xE1bh\xE1il {{subscriptionDiscount}}%",
|
|
874
|
-
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9 \u05D5\u05D7\u05E1\u05D5\u05DA {{subscriptionDiscount}}%",
|
|
875
|
-
hi: "\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902 \u0914\u0930 {{subscriptionDiscount}}% \u092C\u091A\u093E\u090F\u0902",
|
|
876
|
-
id: "Beralih ke langganan dan hemat {{subscriptionDiscount}}%",
|
|
877
|
-
it: "Passa all\u2019abbonamento e risparmia {{subscriptionDiscount}}%",
|
|
878
|
-
ja: "\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u3066{{subscriptionDiscount}}%\u304A\u5F97",
|
|
879
|
-
ko: "\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658\uD558\uACE0 {{subscriptionDiscount}}% \uC808\uC57D",
|
|
880
|
-
nl: "Overschakelen naar abonnement en {{subscriptionDiscount}}% besparen",
|
|
881
|
-
no: "Bytt til abonnement og spar {{subscriptionDiscount}}%",
|
|
882
|
-
pl: "Prze\u0142\u0105cz na subskrypcj\u0119 i oszcz\u0119d\u017A {{subscriptionDiscount}}%",
|
|
883
|
-
pt: "Mudar para assinatura e economizar {{subscriptionDiscount}}%",
|
|
884
|
-
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443 \u0438 \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0442\u044C {{subscriptionDiscount}}%",
|
|
885
|
-
sv: "Byt till prenumeration och spara {{subscriptionDiscount}}%",
|
|
886
|
-
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E2B\u0E22\u0E31\u0E14 {{subscriptionDiscount}}%",
|
|
887
|
-
tr: "Aboneli\u011Fe ge\xE7 ve {{subscriptionDiscount}}% tasarruf et",
|
|
888
|
-
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443 \u0442\u0430 \u0437\u0430\u043E\u0449\u0430\u0434\u0438\u0442\u0438 {{subscriptionDiscount}}%",
|
|
889
|
-
vi: "Chuy\u1EC3n sang \u0111\u0103ng k\xFD v\xE0 ti\u1EBFt ki\u1EC7m {{subscriptionDiscount}}%",
|
|
890
|
-
zh: "\u5207\u6362\u4E3A\u8BA2\u9605\u5E76\u8282\u7701 {{subscriptionDiscount}}%"
|
|
891
|
-
}
|
|
892
|
-
};
|
|
893
|
-
|
|
894
|
-
// src/server/shared.ts
|
|
895
|
-
var REBUY_ENGINE_HOST = "rebuyengine.com";
|
|
896
|
-
var UpstreamError = class extends Error {
|
|
897
|
-
constructor(status, body, message) {
|
|
898
|
-
super(message ?? `Upstream returned ${status}`);
|
|
899
|
-
this.body = body;
|
|
900
|
-
this.name = "UpstreamError";
|
|
901
|
-
this.status = status;
|
|
902
|
-
}
|
|
903
|
-
};
|
|
904
|
-
var NotFoundError = class extends Error {
|
|
905
|
-
constructor(message) {
|
|
906
|
-
super(message);
|
|
907
|
-
this.name = "NotFoundError";
|
|
908
|
-
}
|
|
909
|
-
};
|
|
859
|
+
])
|
|
860
|
+
);
|
|
861
|
+
|
|
862
|
+
// src/schema/widgets/checkout-and-beyond/image.ts
|
|
863
|
+
var CABImageSection = import_v421.z.object({
|
|
864
|
+
altText: import_v421.z.string().refine(checkForHTML, NO_HTML).default(""),
|
|
865
|
+
aspectRatio: import_v421.z.literal(1).nullable().default(null),
|
|
866
|
+
border: import_v421.z.lazy(() => CABBorder),
|
|
867
|
+
buttonField: import_v421.z.enum(buttonFields).optional(),
|
|
868
|
+
category: import_v421.z.enum(["gallery", "icons", "payment-methods", "secure-checkout"]).nullable().default(null),
|
|
869
|
+
name: import_v421.z.string().optional(),
|
|
870
|
+
naturalHeight: import_v421.z.number().default(0),
|
|
871
|
+
naturalWidth: import_v421.z.number().default(0),
|
|
872
|
+
/**
|
|
873
|
+
* `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and
|
|
874
|
+
* `cover` would crop non-square art (payment badges lost their edges — 15993); `contain` letterboxes.
|
|
875
|
+
*/
|
|
876
|
+
objectFit: import_v421.z.enum(objectFits).default(ObjectFit.contain),
|
|
877
|
+
rule: CABRule.optional(),
|
|
878
|
+
sectionId: import_v421.z.uuid().default(() => (0, import_uuid13.v7)()),
|
|
879
|
+
sectionType: import_v421.z.literal(SectionType.image).default(SectionType.image),
|
|
880
|
+
source: import_v421.z.union([import_v421.z.url(), import_v421.z.literal(""), import_v421.z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(""),
|
|
881
|
+
width: import_v421.z.number().default(100)
|
|
882
|
+
});
|
|
910
883
|
|
|
911
884
|
// src/transforms/contentBlockV1/stripContentBlockHtml.ts
|
|
912
885
|
var HTML_COMMENT_RE = /<!--[\s\S]*?-->/g;
|
|
@@ -1023,6 +996,31 @@ var convertContentBlockTextToV2 = (language) => {
|
|
|
1023
996
|
});
|
|
1024
997
|
};
|
|
1025
998
|
|
|
999
|
+
// src/schema/widgets/checkout-and-beyond/root.ts
|
|
1000
|
+
var import_v422 = require("zod/v4");
|
|
1001
|
+
var TargetArea = import_v422.z.object({
|
|
1002
|
+
fill: import_v422.z.boolean().optional(),
|
|
1003
|
+
flip: import_v422.z.enum(["both", "horizontal", "vertical"]).optional(),
|
|
1004
|
+
icon: import_v422.z.string(),
|
|
1005
|
+
label: import_v422.z.string(),
|
|
1006
|
+
width: import_v422.z.string()
|
|
1007
|
+
}).default(targetAreas[EditorMode.checkoutExtension][1]);
|
|
1008
|
+
var CABTracking = import_v422.z.object({
|
|
1009
|
+
enableAttribution: import_v422.z.boolean().default(true),
|
|
1010
|
+
enableSource: import_v422.z.boolean().default(true),
|
|
1011
|
+
enableWidget: import_v422.z.boolean().default(true)
|
|
1012
|
+
}).default({ enableAttribution: true, enableSource: true, enableWidget: true });
|
|
1013
|
+
var CABRootSection = CABLayoutSection.extend({
|
|
1014
|
+
editorMode: import_v422.z.enum(editorModes).default(EditorMode.checkoutExtension),
|
|
1015
|
+
previewMode: import_v422.z.boolean().default(false),
|
|
1016
|
+
storeId: import_v422.z.number().nullable().default(null),
|
|
1017
|
+
targetArea: TargetArea.nullable(),
|
|
1018
|
+
tracking: CABTracking,
|
|
1019
|
+
type: import_v422.z.enum(widgetTypes).default(WidgetType.ui_extension_content_block),
|
|
1020
|
+
version: import_v422.z.literal(2).default(2),
|
|
1021
|
+
widgetId: import_v422.z.number().nullable().default(null)
|
|
1022
|
+
});
|
|
1023
|
+
|
|
1026
1024
|
// src/transforms/contentBlockV1/convertContentBlockToV2.ts
|
|
1027
1025
|
var LOCATION_TO_EDITOR_MODE = {
|
|
1028
1026
|
checkout: "checkoutExtension",
|
|
@@ -1364,6 +1362,122 @@ var isCABRootSection = (input) => {
|
|
|
1364
1362
|
return input.version === 2;
|
|
1365
1363
|
};
|
|
1366
1364
|
|
|
1365
|
+
// src/schema/widgets/checkout-and-beyond/switchLabels.ts
|
|
1366
|
+
var SWITCH_LABELS = {
|
|
1367
|
+
subscriptionOption: {
|
|
1368
|
+
ar: "\u064A\u062A\u0645 \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0643\u0644 {{frequency}} {{interval}}",
|
|
1369
|
+
cs: "Doru\u010Den\xED ka\u017Ed\xFDch {{frequency}} {{interval}}",
|
|
1370
|
+
da: "Leveres hver {{frequency}} {{interval}}",
|
|
1371
|
+
de: "Lieferung alle {{frequency}} {{interval}}",
|
|
1372
|
+
en: "Delivers every {{frequency}} {{interval}}",
|
|
1373
|
+
es: "Entrega cada {{frequency}} {{interval}}",
|
|
1374
|
+
fi: "Toimitus {{frequency}} {{interval}} v\xE4lein",
|
|
1375
|
+
fr: "Livraison tous les {{frequency}} {{interval}}",
|
|
1376
|
+
ga: "Seachadtar gach {{frequency}} {{interval}}",
|
|
1377
|
+
he: "\u05DE\u05E9\u05DC\u05D5\u05D7 \u05DB\u05DC {{frequency}} {{interval}}",
|
|
1378
|
+
hi: "\u0939\u0930 {{frequency}} {{interval}} \u092E\u0947\u0902 \u0921\u093F\u0932\u0940\u0935\u0930\u0940",
|
|
1379
|
+
id: "Dikirim setiap {{frequency}} {{interval}}",
|
|
1380
|
+
it: "Consegna ogni {{frequency}} {{interval}}",
|
|
1381
|
+
ja: "{{frequency}} {{interval}}\u3054\u3068\u306B\u304A\u5C4A\u3051",
|
|
1382
|
+
ko: "{{frequency}} {{interval}}\uB9C8\uB2E4 \uBC30\uC1A1",
|
|
1383
|
+
nl: "Wordt elke {{frequency}} {{interval}} geleverd",
|
|
1384
|
+
no: "Leveres hver {{frequency}} {{interval}}",
|
|
1385
|
+
pl: "Dostawa co {{frequency}} {{interval}}",
|
|
1386
|
+
pt: "Entrega a cada {{frequency}} {{interval}}",
|
|
1387
|
+
ru: "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u0430\u0436\u0434\u044B\u0435 {{frequency}} {{interval}}",
|
|
1388
|
+
sv: "Levereras var {{frequency}} {{interval}}",
|
|
1389
|
+
th: "\u0E08\u0E31\u0E14\u0E2A\u0E48\u0E07\u0E17\u0E38\u0E01 {{frequency}} {{interval}}",
|
|
1390
|
+
tr: "Her {{frequency}} {{interval}} aral\u0131\u011F\u0131nda teslimat",
|
|
1391
|
+
uk: "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u043E\u0436\u043D\u0456 {{frequency}} {{interval}}",
|
|
1392
|
+
vi: "Giao h\xE0ng m\u1ED7i {{frequency}} {{interval}}",
|
|
1393
|
+
zh: "\u6BCF {{frequency}} {{interval}} \u914D\u9001\u4E00\u6B21"
|
|
1394
|
+
},
|
|
1395
|
+
switchToOneTimePurchase: {
|
|
1396
|
+
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0634\u0631\u0627\u0621 \u0644\u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629",
|
|
1397
|
+
cs: "P\u0159epnout na jednor\xE1zov\xFD n\xE1kup",
|
|
1398
|
+
da: "Skift til engangsk\xF8b",
|
|
1399
|
+
de: "Zu einmaligem Kauf wechseln",
|
|
1400
|
+
en: "Switch to One-time Purchase",
|
|
1401
|
+
es: "Cambiar a compra \xFAnica",
|
|
1402
|
+
fi: "Vaihda kertaluonteiseen ostoon",
|
|
1403
|
+
fr: "Passer \xE0 un achat unique",
|
|
1404
|
+
ga: "Athraigh go ceannach aonuaire",
|
|
1405
|
+
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05E8\u05DB\u05D9\u05E9\u05D4 \u05D7\u05D3-\u05E4\u05E2\u05DE\u05D9\u05EA",
|
|
1406
|
+
hi: "\u090F\u0915 \u092C\u093E\u0930 \u0915\u0940 \u0916\u0930\u0940\u0926 \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902",
|
|
1407
|
+
id: "Beralih ke pembelian satu kali",
|
|
1408
|
+
it: "Passa all\u2019acquisto una tantum",
|
|
1409
|
+
ja: "1\u56DE\u9650\u308A\u306E\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B",
|
|
1410
|
+
ko: "\uC77C\uD68C\uC131 \uAD6C\uB9E4\uB85C \uC804\uD658",
|
|
1411
|
+
nl: "Overschakelen naar eenmalige aankoop",
|
|
1412
|
+
no: "Bytt til engangskj\xF8p",
|
|
1413
|
+
pl: "Prze\u0142\u0105cz na jednorazowy zakup",
|
|
1414
|
+
pt: "Mudar para compra \xFAnica",
|
|
1415
|
+
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u0440\u0430\u0437\u043E\u0432\u0443\u044E \u043F\u043E\u043A\u0443\u043F\u043A\u0443",
|
|
1416
|
+
sv: "Byt till eng\xE5ngsk\xF6p",
|
|
1417
|
+
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27",
|
|
1418
|
+
tr: "Tek seferlik sat\u0131n almaya ge\xE7",
|
|
1419
|
+
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0443 \u043F\u043E\u043A\u0443\u043F\u043A\u0443",
|
|
1420
|
+
vi: "Chuy\u1EC3n sang mua m\u1ED9t l\u1EA7n",
|
|
1421
|
+
zh: "\u5207\u6362\u4E3A\u4E00\u6B21\u6027\u8D2D\u4E70"
|
|
1422
|
+
},
|
|
1423
|
+
switchToSubscriptionNoDiscount: {
|
|
1424
|
+
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643",
|
|
1425
|
+
cs: "P\u0159epnout na p\u0159edplatn\xE9",
|
|
1426
|
+
da: "Skift til abonnement",
|
|
1427
|
+
de: "Zu einem Abonnement wechseln",
|
|
1428
|
+
en: "Switch to Subscription",
|
|
1429
|
+
es: "Cambiar a suscripci\xF3n",
|
|
1430
|
+
fi: "Vaihda tilaukseen",
|
|
1431
|
+
fr: "Passer \xE0 un abonnement",
|
|
1432
|
+
ga: "Athraigh go s\xEDnti\xFAs",
|
|
1433
|
+
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9",
|
|
1434
|
+
hi: "\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902",
|
|
1435
|
+
id: "Beralih ke langganan",
|
|
1436
|
+
it: "Passa all\u2019abbonamento",
|
|
1437
|
+
ja: "\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B",
|
|
1438
|
+
ko: "\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658",
|
|
1439
|
+
nl: "Overschakelen naar abonnement",
|
|
1440
|
+
no: "Bytt til abonnement",
|
|
1441
|
+
pl: "Prze\u0142\u0105cz na subskrypcj\u0119",
|
|
1442
|
+
pt: "Mudar para assinatura",
|
|
1443
|
+
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443",
|
|
1444
|
+
sv: "Byt till prenumeration",
|
|
1445
|
+
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01",
|
|
1446
|
+
tr: "Aboneli\u011Fe ge\xE7",
|
|
1447
|
+
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443",
|
|
1448
|
+
vi: "Chuy\u1EC3n sang \u0111\u0103ng k\xFD",
|
|
1449
|
+
zh: "\u5207\u6362\u4E3A\u8BA2\u9605"
|
|
1450
|
+
},
|
|
1451
|
+
switchToSubscriptionWithDiscount: {
|
|
1452
|
+
ar: "\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643 \u0648\u062A\u0648\u0641\u064A\u0631 {{subscriptionDiscount}}%",
|
|
1453
|
+
cs: "P\u0159epnout na p\u0159edplatn\xE9 a u\u0161et\u0159it {{subscriptionDiscount}} %",
|
|
1454
|
+
da: "Skift til abonnement og spar {{subscriptionDiscount}}%",
|
|
1455
|
+
de: "Zu einem Abonnement wechseln und {{subscriptionDiscount}} % sparen",
|
|
1456
|
+
en: "Switch to Subscription & Save {{subscriptionDiscount}}%",
|
|
1457
|
+
es: "Cambiar a suscripci\xF3n y ahorrar {{subscriptionDiscount}}%",
|
|
1458
|
+
fi: "Vaihda tilaukseen ja s\xE4\xE4st\xE4 {{subscriptionDiscount}} %",
|
|
1459
|
+
fr: "Passer \xE0 un abonnement et \xE9conomiser {{subscriptionDiscount}} %",
|
|
1460
|
+
ga: "Athraigh go s\xEDnti\xFAs agus s\xE1bh\xE1il {{subscriptionDiscount}}%",
|
|
1461
|
+
he: "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9 \u05D5\u05D7\u05E1\u05D5\u05DA {{subscriptionDiscount}}%",
|
|
1462
|
+
hi: "\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902 \u0914\u0930 {{subscriptionDiscount}}% \u092C\u091A\u093E\u090F\u0902",
|
|
1463
|
+
id: "Beralih ke langganan dan hemat {{subscriptionDiscount}}%",
|
|
1464
|
+
it: "Passa all\u2019abbonamento e risparmia {{subscriptionDiscount}}%",
|
|
1465
|
+
ja: "\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u3066{{subscriptionDiscount}}%\u304A\u5F97",
|
|
1466
|
+
ko: "\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658\uD558\uACE0 {{subscriptionDiscount}}% \uC808\uC57D",
|
|
1467
|
+
nl: "Overschakelen naar abonnement en {{subscriptionDiscount}}% besparen",
|
|
1468
|
+
no: "Bytt til abonnement og spar {{subscriptionDiscount}}%",
|
|
1469
|
+
pl: "Prze\u0142\u0105cz na subskrypcj\u0119 i oszcz\u0119d\u017A {{subscriptionDiscount}}%",
|
|
1470
|
+
pt: "Mudar para assinatura e economizar {{subscriptionDiscount}}%",
|
|
1471
|
+
ru: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443 \u0438 \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0442\u044C {{subscriptionDiscount}}%",
|
|
1472
|
+
sv: "Byt till prenumeration och spara {{subscriptionDiscount}}%",
|
|
1473
|
+
th: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E2B\u0E22\u0E31\u0E14 {{subscriptionDiscount}}%",
|
|
1474
|
+
tr: "Aboneli\u011Fe ge\xE7 ve {{subscriptionDiscount}}% tasarruf et",
|
|
1475
|
+
uk: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443 \u0442\u0430 \u0437\u0430\u043E\u0449\u0430\u0434\u0438\u0442\u0438 {{subscriptionDiscount}}%",
|
|
1476
|
+
vi: "Chuy\u1EC3n sang \u0111\u0103ng k\xFD v\xE0 ti\u1EBFt ki\u1EC7m {{subscriptionDiscount}}%",
|
|
1477
|
+
zh: "\u5207\u6362\u4E3A\u8BA2\u9605\u5E76\u8282\u7701 {{subscriptionDiscount}}%"
|
|
1478
|
+
}
|
|
1479
|
+
};
|
|
1480
|
+
|
|
1367
1481
|
// src/transforms/lineItemEditorV1/convertLineItemEditorToV2.ts
|
|
1368
1482
|
var OVERRIDE_KEY = {
|
|
1369
1483
|
subscriptionOption: "subscriptionOptionLabel",
|
|
@@ -1455,13 +1569,626 @@ var normalizeTextContent = (node) => {
|
|
|
1455
1569
|
return node;
|
|
1456
1570
|
};
|
|
1457
1571
|
|
|
1458
|
-
// src/
|
|
1572
|
+
// src/transforms/offerV1/types.ts
|
|
1573
|
+
var SHOPIFY_CHECKOUT_EXTENSION = "shopify_checkout_extension";
|
|
1574
|
+
var isOfferV1 = (data) => {
|
|
1575
|
+
if (!data || typeof data !== "object") return false;
|
|
1576
|
+
return data.type === SHOPIFY_CHECKOUT_EXTENSION;
|
|
1577
|
+
};
|
|
1578
|
+
|
|
1579
|
+
// src/schema/widgets/checkout-and-beyond/offerLabels.ts
|
|
1580
|
+
var OFFER_LABELS = {
|
|
1581
|
+
addToCart: {
|
|
1582
|
+
ar: "\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629",
|
|
1583
|
+
cs: "P\u0159idat do ko\u0161\xEDku",
|
|
1584
|
+
da: "L\xE6g i kurv",
|
|
1585
|
+
de: "In den Warenkorb",
|
|
1586
|
+
en: "Add to cart",
|
|
1587
|
+
es: "A\xF1adir al carrito",
|
|
1588
|
+
fi: "Lis\xE4\xE4 ostoskoriin",
|
|
1589
|
+
fr: "Ajouter au panier",
|
|
1590
|
+
ga: "Cuir sa chairt",
|
|
1591
|
+
he: "\u05D4\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4",
|
|
1592
|
+
hi: "\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902",
|
|
1593
|
+
id: "Tambahkan ke keranjang",
|
|
1594
|
+
it: "Aggiungi al carrello",
|
|
1595
|
+
ja: "\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0",
|
|
1596
|
+
ko: "\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00",
|
|
1597
|
+
nl: "In winkelwagen",
|
|
1598
|
+
no: "Legg i handlekurven",
|
|
1599
|
+
pl: "Dodaj do koszyka",
|
|
1600
|
+
pt: "Adicionar ao carrinho",
|
|
1601
|
+
ru: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443",
|
|
1602
|
+
sv: "L\xE4gg i varukorgen",
|
|
1603
|
+
th: "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32",
|
|
1604
|
+
tr: "Sepete ekle",
|
|
1605
|
+
uk: "\u0414\u043E\u0434\u0430\u0442\u0438 \u0432 \u043A\u043E\u0448\u0438\u043A",
|
|
1606
|
+
vi: "Th\xEAm v\xE0o gi\u1ECF h\xE0ng",
|
|
1607
|
+
zh: "\u52A0\u5165\u8D2D\u7269\u8F66"
|
|
1608
|
+
},
|
|
1609
|
+
addedToCart: {
|
|
1610
|
+
ar: "\u062A\u0645\u062A \u0627\u0644\u0625\u0636\u0627\u0641\u0629!",
|
|
1611
|
+
cs: "P\u0159id\xE1no!",
|
|
1612
|
+
da: "Tilf\xF8jet!",
|
|
1613
|
+
de: "Hinzugef\xFCgt!",
|
|
1614
|
+
en: "Added!",
|
|
1615
|
+
es: "\xA1A\xF1adido!",
|
|
1616
|
+
fi: "Lis\xE4tty!",
|
|
1617
|
+
fr: "Ajout\xE9 !",
|
|
1618
|
+
ga: "Curtha leis!",
|
|
1619
|
+
he: "\u05E0\u05D5\u05E1\u05E3!",
|
|
1620
|
+
hi: "\u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E!",
|
|
1621
|
+
id: "Ditambahkan!",
|
|
1622
|
+
it: "Aggiunto!",
|
|
1623
|
+
ja: "\u8FFD\u52A0\u3057\u307E\u3057\u305F\uFF01",
|
|
1624
|
+
ko: "\uCD94\uAC00\uB428!",
|
|
1625
|
+
nl: "Toegevoegd!",
|
|
1626
|
+
no: "Lagt til!",
|
|
1627
|
+
pl: "Dodano!",
|
|
1628
|
+
pt: "Adicionado!",
|
|
1629
|
+
ru: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E!",
|
|
1630
|
+
sv: "Tillagd!",
|
|
1631
|
+
th: "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E41\u0E25\u0E49\u0E27!",
|
|
1632
|
+
tr: "Eklendi!",
|
|
1633
|
+
uk: "\u0414\u043E\u0434\u0430\u043D\u043E!",
|
|
1634
|
+
vi: "\u0110\xE3 th\xEAm!",
|
|
1635
|
+
zh: "\u5DF2\u6DFB\u52A0\uFF01"
|
|
1636
|
+
},
|
|
1637
|
+
addedToCartMessage: {
|
|
1638
|
+
ar: "\u062A\u0645\u062A \u0625\u0636\u0627\u0641\u0629 {{quantity}} {{productTitle}} \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629.",
|
|
1639
|
+
cs: "{{quantity}} {{productTitle}} p\u0159id\xE1no do ko\u0161\xEDku.",
|
|
1640
|
+
da: "{{quantity}} {{productTitle}} lagt i kurven.",
|
|
1641
|
+
de: "{{quantity}} {{productTitle}} zum Warenkorb hinzugef\xFCgt.",
|
|
1642
|
+
en: "{{quantity}} {{productTitle}} added to cart.",
|
|
1643
|
+
es: "{{quantity}} {{productTitle}} a\xF1adido al carrito.",
|
|
1644
|
+
fi: "{{quantity}} {{productTitle}} lis\xE4tty ostoskoriin.",
|
|
1645
|
+
fr: "{{quantity}} {{productTitle}} ajout\xE9 au panier.",
|
|
1646
|
+
ga: "Cuireadh {{quantity}} {{productTitle}} sa chairt.",
|
|
1647
|
+
he: "{{quantity}} {{productTitle}} \u05E0\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4.",
|
|
1648
|
+
hi: "{{quantity}} {{productTitle}} \u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E\u0964",
|
|
1649
|
+
id: "{{quantity}} {{productTitle}} ditambahkan ke keranjang.",
|
|
1650
|
+
it: "{{quantity}} {{productTitle}} aggiunto al carrello.",
|
|
1651
|
+
ja: "{{quantity}} {{productTitle}}\u3092\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F\u3002",
|
|
1652
|
+
ko: "{{quantity}} {{productTitle}}\uC774(\uAC00) \uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
|
|
1653
|
+
nl: "{{quantity}} {{productTitle}} toegevoegd aan winkelwagen.",
|
|
1654
|
+
no: "{{quantity}} {{productTitle}} lagt i handlekurven.",
|
|
1655
|
+
pl: "{{quantity}} {{productTitle}} dodano do koszyka.",
|
|
1656
|
+
pt: "{{quantity}} {{productTitle}} adicionado ao carrinho.",
|
|
1657
|
+
ru: "{{quantity}} {{productTitle}} \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443.",
|
|
1658
|
+
sv: "{{quantity}} {{productTitle}} har lagts i varukorgen.",
|
|
1659
|
+
th: "\u0E40\u0E1E\u0E34\u0E48\u0E21 {{quantity}} {{productTitle}} \u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32\u0E41\u0E25\u0E49\u0E27",
|
|
1660
|
+
tr: "{{quantity}} {{productTitle}} sepete eklendi.",
|
|
1661
|
+
uk: "{{quantity}} {{productTitle}} \u0434\u043E\u0434\u0430\u043D\u043E \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430.",
|
|
1662
|
+
vi: "\u0110\xE3 th\xEAm {{quantity}} {{productTitle}} v\xE0o gi\u1ECF h\xE0ng.",
|
|
1663
|
+
zh: "{{quantity}} {{productTitle}} \u5DF2\u52A0\u5165\u8D2D\u7269\u8F66\u3002"
|
|
1664
|
+
},
|
|
1665
|
+
addingToCart: {
|
|
1666
|
+
ar: "\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0636\u0627\u0641\u0629...",
|
|
1667
|
+
cs: "P\u0159id\xE1v\xE1n\xED...",
|
|
1668
|
+
da: "Tilf\xF8jer...",
|
|
1669
|
+
de: "Wird hinzugef\xFCgt...",
|
|
1670
|
+
en: "Adding...",
|
|
1671
|
+
es: "A\xF1adiendo...",
|
|
1672
|
+
fi: "Lis\xE4t\xE4\xE4n...",
|
|
1673
|
+
fr: "Ajout en cours...",
|
|
1674
|
+
ga: "\xC1 chur leis...",
|
|
1675
|
+
he: "\u05DE\u05D5\u05E1\u05D9\u05E3...",
|
|
1676
|
+
hi: "\u091C\u094B\u0921\u093C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948...",
|
|
1677
|
+
id: "Menambahkan...",
|
|
1678
|
+
it: "Aggiunta in corso...",
|
|
1679
|
+
ja: "\u8FFD\u52A0\u4E2D...",
|
|
1680
|
+
ko: "\uCD94\uAC00 \uC911...",
|
|
1681
|
+
nl: "Toevoegen...",
|
|
1682
|
+
no: "Legger til...",
|
|
1683
|
+
pl: "Dodawanie...",
|
|
1684
|
+
pt: "Adicionando...",
|
|
1685
|
+
ru: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435...",
|
|
1686
|
+
sv: "L\xE4gger till...",
|
|
1687
|
+
th: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21...",
|
|
1688
|
+
tr: "Ekleniyor...",
|
|
1689
|
+
uk: "\u0414\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F...",
|
|
1690
|
+
vi: "\u0110ang th\xEAm...",
|
|
1691
|
+
zh: "\u6B63\u5728\u6DFB\u52A0..."
|
|
1692
|
+
},
|
|
1693
|
+
soldOut: {
|
|
1694
|
+
ar: "\u0646\u0641\u062F\u062A \u0627\u0644\u0643\u0645\u064A\u0629",
|
|
1695
|
+
cs: "Vyprod\xE1no",
|
|
1696
|
+
da: "Udsolgt",
|
|
1697
|
+
de: "Ausverkauft",
|
|
1698
|
+
en: "Sold out",
|
|
1699
|
+
es: "Agotado",
|
|
1700
|
+
fi: "Loppuunmyyty",
|
|
1701
|
+
fr: "\xC9puis\xE9",
|
|
1702
|
+
ga: "D\xEDolta amach",
|
|
1703
|
+
he: "\u05D0\u05D6\u05DC \u05DE\u05D4\u05DE\u05DC\u05D0\u05D9",
|
|
1704
|
+
hi: "\u0938\u094D\u091F\u0949\u0915 \u0916\u093C\u0924\u094D\u092E",
|
|
1705
|
+
id: "Habis terjual",
|
|
1706
|
+
it: "Esaurito",
|
|
1707
|
+
ja: "\u58F2\u308A\u5207\u308C",
|
|
1708
|
+
ko: "\uD488\uC808",
|
|
1709
|
+
nl: "Uitverkocht",
|
|
1710
|
+
no: "Utsolgt",
|
|
1711
|
+
pl: "Wyprzedane",
|
|
1712
|
+
pt: "Esgotado",
|
|
1713
|
+
ru: "\u0420\u0430\u0441\u043F\u0440\u043E\u0434\u0430\u043D\u043E",
|
|
1714
|
+
sv: "Sluts\xE5ld",
|
|
1715
|
+
th: "\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E2B\u0E21\u0E14",
|
|
1716
|
+
tr: "T\xFCkendi",
|
|
1717
|
+
uk: "\u0420\u043E\u0437\u043F\u0440\u043E\u0434\u0430\u043D\u043E",
|
|
1718
|
+
vi: "H\u1EBFt h\xE0ng",
|
|
1719
|
+
zh: "\u5DF2\u552E\u7F44"
|
|
1720
|
+
},
|
|
1721
|
+
undo: {
|
|
1722
|
+
ar: "\u062A\u0631\u0627\u062C\u0639",
|
|
1723
|
+
cs: "Zp\u011Bt",
|
|
1724
|
+
da: "Fortryd",
|
|
1725
|
+
de: "R\xFCckg\xE4ngig",
|
|
1726
|
+
en: "Undo",
|
|
1727
|
+
es: "Deshacer",
|
|
1728
|
+
fi: "Kumoa",
|
|
1729
|
+
fr: "Annuler",
|
|
1730
|
+
ga: "Cealaigh",
|
|
1731
|
+
he: "\u05D1\u05D8\u05DC",
|
|
1732
|
+
hi: "\u092A\u0942\u0930\u094D\u0935\u0935\u0924 \u0915\u0930\u0947\u0902",
|
|
1733
|
+
id: "Urungkan",
|
|
1734
|
+
it: "Annulla",
|
|
1735
|
+
ja: "\u5143\u306B\u623B\u3059",
|
|
1736
|
+
ko: "\uC2E4\uD589 \uCDE8\uC18C",
|
|
1737
|
+
nl: "Ongedaan maken",
|
|
1738
|
+
no: "Angre",
|
|
1739
|
+
pl: "Cofnij",
|
|
1740
|
+
pt: "Desfazer",
|
|
1741
|
+
ru: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C",
|
|
1742
|
+
sv: "\xC5ngra",
|
|
1743
|
+
th: "\u0E40\u0E25\u0E34\u0E01\u0E17\u0E33",
|
|
1744
|
+
tr: "Geri al",
|
|
1745
|
+
uk: "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
|
|
1746
|
+
vi: "Ho\xE0n t\xE1c",
|
|
1747
|
+
zh: "\u64A4\u9500"
|
|
1748
|
+
}
|
|
1749
|
+
};
|
|
1750
|
+
|
|
1751
|
+
// src/transforms/offerV1/offerCard.ts
|
|
1752
|
+
var VARIANT_SELECTOR = { button: "button", radio: "radio", select: "menu" };
|
|
1753
|
+
var localizedContent = (defaults, override) => {
|
|
1754
|
+
const trimmed = override?.trim();
|
|
1755
|
+
return trimmed ? { ...defaults, en: trimmed } : defaults;
|
|
1756
|
+
};
|
|
1757
|
+
var buildStyledText = (token, style, color = "base") => {
|
|
1758
|
+
const marks = [
|
|
1759
|
+
{ attrs: { color, fontSize: style?.textSize ?? "base" }, type: "textStyle" }
|
|
1760
|
+
];
|
|
1761
|
+
if (style?.textEmphasis === "bold") marks.push({ type: "bold" });
|
|
1762
|
+
if (style?.textEmphasis === "italic") marks.push({ type: "italic" });
|
|
1763
|
+
return { content: [{ content: [{ marks, text: token, type: "text" }], type: "paragraph" }], type: "doc" };
|
|
1764
|
+
};
|
|
1765
|
+
var buildPriceContent = (settings) => {
|
|
1766
|
+
const content = [{ text: "{{variantPrice}}", type: "text" }];
|
|
1767
|
+
if (settings.discount?.showSavingAmount !== false) {
|
|
1768
|
+
content.push(
|
|
1769
|
+
{ text: " ", type: "text" },
|
|
1770
|
+
{
|
|
1771
|
+
marks: [{ type: "strike" }, { attrs: { color: "subdued" }, type: "textStyle" }],
|
|
1772
|
+
text: "{{variantCompareAtPrice}}",
|
|
1773
|
+
type: "text"
|
|
1774
|
+
}
|
|
1775
|
+
);
|
|
1776
|
+
}
|
|
1777
|
+
return { content: [{ content, type: "paragraph" }], type: "doc" };
|
|
1778
|
+
};
|
|
1779
|
+
var buildReviews = (settings) => {
|
|
1780
|
+
if (!settings.integrations || !Object.values(settings.integrations).some(Boolean)) return [];
|
|
1781
|
+
const reviews = settings.displaySettings?.reviews;
|
|
1782
|
+
return [
|
|
1783
|
+
{
|
|
1784
|
+
...reviews?.color && { color: reviews.color },
|
|
1785
|
+
sectionType: "reviews",
|
|
1786
|
+
...reviews?.size && { size: reviews.size }
|
|
1787
|
+
}
|
|
1788
|
+
];
|
|
1789
|
+
};
|
|
1790
|
+
var buildImage = (settings) => ({
|
|
1791
|
+
...settings.displaySettings?.image?.imageFit && {
|
|
1792
|
+
objectFit: settings.displaySettings.image.imageFit
|
|
1793
|
+
},
|
|
1794
|
+
sectionType: "image",
|
|
1795
|
+
source: settings.images?.source === "product" ? "{{productImage}}" : "{{variantImage}}",
|
|
1796
|
+
width: 100
|
|
1797
|
+
});
|
|
1798
|
+
var buildTitle = (settings) => ({
|
|
1799
|
+
content: { en: buildStyledText("{{productTitle}}", settings.displaySettings?.product) },
|
|
1800
|
+
sectionType: "text"
|
|
1801
|
+
});
|
|
1802
|
+
var buildPrice = (settings) => ({
|
|
1803
|
+
content: { en: buildPriceContent(settings) },
|
|
1804
|
+
sectionType: "text"
|
|
1805
|
+
});
|
|
1806
|
+
var buildVariantTitle = (settings) => {
|
|
1807
|
+
const show = settings.productOptions?.showVariantTitle;
|
|
1808
|
+
if (!show || show === "hide") return [];
|
|
1809
|
+
return [
|
|
1810
|
+
{
|
|
1811
|
+
content: { en: buildStyledText("{{variantTitle}}", settings.displaySettings?.variant) },
|
|
1812
|
+
sectionType: "text"
|
|
1813
|
+
}
|
|
1814
|
+
];
|
|
1815
|
+
};
|
|
1816
|
+
var buildDescription = (settings) => {
|
|
1817
|
+
const show = settings.productOptions?.showProductDescription;
|
|
1818
|
+
if (!show || show === "hide") return [];
|
|
1819
|
+
return [{ content: { en: buildStyledText("{{productDescription}}", void 0) }, sectionType: "text" }];
|
|
1820
|
+
};
|
|
1821
|
+
var buildVariants = (settings) => {
|
|
1822
|
+
if (settings.productOptions?.showVariantOptions === "never") return [];
|
|
1823
|
+
const selector = settings.viewOptions?.variantSelector;
|
|
1824
|
+
return [
|
|
1825
|
+
{
|
|
1826
|
+
hideOutOfStockVariants: !!settings.productOptions?.hideOutOfStockVariants,
|
|
1827
|
+
...selector && { selector: VARIANT_SELECTOR[selector] },
|
|
1828
|
+
sectionType: "variants"
|
|
1829
|
+
}
|
|
1830
|
+
];
|
|
1831
|
+
};
|
|
1832
|
+
var QUANTITY_INPUT_TYPE = {
|
|
1833
|
+
"buttons-manual-input": "number",
|
|
1834
|
+
"dropdown-select": "select"
|
|
1835
|
+
};
|
|
1836
|
+
var buildQuantityErrors = (quantity) => {
|
|
1837
|
+
const en = {
|
|
1838
|
+
...quantity.maxError && { max: quantity.maxError },
|
|
1839
|
+
...quantity.minError && { min: quantity.minError },
|
|
1840
|
+
...quantity.negativeError && { neg: quantity.negativeError }
|
|
1841
|
+
};
|
|
1842
|
+
return Object.keys(en).length ? { errorMessages: { en } } : {};
|
|
1843
|
+
};
|
|
1844
|
+
var buildQuantity = (settings) => {
|
|
1845
|
+
const quantity = settings.quantityInputs;
|
|
1846
|
+
if (!quantity?.enabled) return [];
|
|
1847
|
+
const inputType = quantity.type ? QUANTITY_INPUT_TYPE[quantity.type] : void 0;
|
|
1848
|
+
return [
|
|
1849
|
+
{
|
|
1850
|
+
...buildQuantityErrors(quantity),
|
|
1851
|
+
...inputType && { inputType },
|
|
1852
|
+
max: quantity.maxValue ?? 10,
|
|
1853
|
+
min: quantity.minValue ?? 1,
|
|
1854
|
+
sectionType: "quantity"
|
|
1855
|
+
}
|
|
1856
|
+
];
|
|
1857
|
+
};
|
|
1858
|
+
var buildSubscriptionButton = (settings) => {
|
|
1859
|
+
if (settings.productType !== "both" && settings.productType !== "subscription") return [];
|
|
1860
|
+
const language = settings.language;
|
|
1861
|
+
const slot = (buttonField, override) => ({
|
|
1862
|
+
buttonField,
|
|
1863
|
+
content: localizedContent(SWITCH_LABELS[buttonField], override),
|
|
1864
|
+
sectionType: "text"
|
|
1865
|
+
});
|
|
1866
|
+
return [
|
|
1867
|
+
{
|
|
1868
|
+
action: "switchToSubscription",
|
|
1869
|
+
buttonStyle: "plain",
|
|
1870
|
+
sections: [
|
|
1871
|
+
slot("subscriptionOption", void 0),
|
|
1872
|
+
slot("switchToOneTimePurchase", language?.cartSwitchToOnetime),
|
|
1873
|
+
slot("switchToSubscriptionNoDiscount", language?.cartSwitchToSubscription),
|
|
1874
|
+
slot("switchToSubscriptionWithDiscount", language?.upgradeToSubscription)
|
|
1875
|
+
],
|
|
1876
|
+
sectionType: "button"
|
|
1877
|
+
}
|
|
1878
|
+
];
|
|
1879
|
+
};
|
|
1880
|
+
var BUTTON_KINDS2 = ["plain", "primary", "secondary"];
|
|
1881
|
+
var buildAddButton = (settings) => {
|
|
1882
|
+
const kind = settings.button?.kind;
|
|
1883
|
+
const slot = (buttonField, override) => ({
|
|
1884
|
+
buttonField,
|
|
1885
|
+
content: localizedContent(OFFER_LABELS[buttonField], override),
|
|
1886
|
+
sectionType: "text"
|
|
1887
|
+
});
|
|
1888
|
+
return {
|
|
1889
|
+
action: "addToOrder",
|
|
1890
|
+
buttonStyle: BUTTON_KINDS2.includes(kind) ? kind : "primary",
|
|
1891
|
+
sections: [
|
|
1892
|
+
slot("addToCart", settings.language?.addToCart),
|
|
1893
|
+
slot("addingToCart", settings.language?.addingToCart),
|
|
1894
|
+
slot("addedToCart", settings.language?.addedToCart),
|
|
1895
|
+
slot("soldOut", settings.language?.soldOutLabel)
|
|
1896
|
+
],
|
|
1897
|
+
sectionType: "button"
|
|
1898
|
+
};
|
|
1899
|
+
};
|
|
1900
|
+
var rowsLayout = (sections) => ({
|
|
1901
|
+
direction: "rows",
|
|
1902
|
+
sections,
|
|
1903
|
+
sectionType: "layout"
|
|
1904
|
+
});
|
|
1905
|
+
var buildOfferCard = (settings, horizontal) => {
|
|
1906
|
+
const image = buildImage(settings);
|
|
1907
|
+
const title = buildTitle(settings);
|
|
1908
|
+
const variantTitle = buildVariantTitle(settings);
|
|
1909
|
+
const price = buildPrice(settings);
|
|
1910
|
+
const description = buildDescription(settings);
|
|
1911
|
+
const reviews = buildReviews(settings);
|
|
1912
|
+
const variants = buildVariants(settings);
|
|
1913
|
+
const quantity = buildQuantity(settings);
|
|
1914
|
+
const subscription = buildSubscriptionButton(settings);
|
|
1915
|
+
const addButton = buildAddButton(settings);
|
|
1916
|
+
if (!horizontal) {
|
|
1917
|
+
return [
|
|
1918
|
+
image,
|
|
1919
|
+
title,
|
|
1920
|
+
...variantTitle,
|
|
1921
|
+
price,
|
|
1922
|
+
...description,
|
|
1923
|
+
...reviews,
|
|
1924
|
+
...variants,
|
|
1925
|
+
...quantity,
|
|
1926
|
+
...subscription,
|
|
1927
|
+
addButton
|
|
1928
|
+
];
|
|
1929
|
+
}
|
|
1930
|
+
const info = rowsLayout([title, ...variantTitle, price, ...description, ...reviews, ...variants]);
|
|
1931
|
+
const actions = [...subscription, addButton];
|
|
1932
|
+
const actionsCell = actions.length === 1 ? actions[0] : rowsLayout(actions);
|
|
1933
|
+
const card = {
|
|
1934
|
+
direction: "grid",
|
|
1935
|
+
grid: { columns: ["15%", "fill", "auto"], rows: ["auto"] },
|
|
1936
|
+
sections: [image, info, actionsCell],
|
|
1937
|
+
sectionType: "layout"
|
|
1938
|
+
};
|
|
1939
|
+
return [card, ...quantity];
|
|
1940
|
+
};
|
|
1941
|
+
|
|
1942
|
+
// src/transforms/offerV1/convertOfferToV2.ts
|
|
1943
|
+
var LOCATION_TO_EDITOR_MODE2 = {
|
|
1944
|
+
checkout: "checkoutExtension",
|
|
1945
|
+
"order-status": "orderStatusPage",
|
|
1946
|
+
"thank-you": "thankYouPage"
|
|
1947
|
+
};
|
|
1948
|
+
var STYLE_TO_DIRECTION = {
|
|
1949
|
+
grid: "grid",
|
|
1950
|
+
line: "columns",
|
|
1951
|
+
list: "rows",
|
|
1952
|
+
none: "rows"
|
|
1953
|
+
};
|
|
1954
|
+
var directionForStyle = (style) => style ? STYLE_TO_DIRECTION[style] : "rows";
|
|
1955
|
+
var buildProductListLayout = (direction, columns) => direction === "grid" ? { direction, grid: { columns: Array.from({ length: Math.max(columns, 1) }, () => "fill"), rows: ["auto"] } } : { direction };
|
|
1956
|
+
var hasHeaderText = (language) => !!(language?.title || language?.superTitle || language?.description);
|
|
1957
|
+
var DISCOUNTED_FROM = {
|
|
1958
|
+
compare_at_price: "compare_at_price",
|
|
1959
|
+
original_price: "price",
|
|
1960
|
+
price: "price"
|
|
1961
|
+
};
|
|
1962
|
+
var buildDiscountSection = (discount) => {
|
|
1963
|
+
if (!discount?.type || discount.type === "none") return [];
|
|
1964
|
+
const discountedFrom = discount.discountedFrom ? DISCOUNTED_FROM[discount.discountedFrom] : void 0;
|
|
1965
|
+
return [
|
|
1966
|
+
{
|
|
1967
|
+
amount: discount.amount ?? 0,
|
|
1968
|
+
...discount.discountedBy && { discountedBy: discount.discountedBy },
|
|
1969
|
+
...discountedFrom && { discountedFrom },
|
|
1970
|
+
...discount.message && { message: discount.message },
|
|
1971
|
+
...discount.quantity != null && { quantity: discount.quantity },
|
|
1972
|
+
sectionType: "discount",
|
|
1973
|
+
type: discount.type
|
|
1974
|
+
}
|
|
1975
|
+
];
|
|
1976
|
+
};
|
|
1977
|
+
var buildBanner = (language) => language?.successBannerEnabled ? [
|
|
1978
|
+
{
|
|
1979
|
+
color: "success",
|
|
1980
|
+
dismissible: true,
|
|
1981
|
+
sections: [
|
|
1982
|
+
{
|
|
1983
|
+
/**
|
|
1984
|
+
* A defined v1 message (RTE doc or string) passes through verbatim as `en`;
|
|
1985
|
+
* absent falls back to the localized defaults (P4 language policy).
|
|
1986
|
+
*/
|
|
1987
|
+
content: language.successBannerMessageRte ? { ...OFFER_LABELS.addedToCartMessage, en: language.successBannerMessageRte } : OFFER_LABELS.addedToCartMessage,
|
|
1988
|
+
sectionType: "text"
|
|
1989
|
+
},
|
|
1990
|
+
{
|
|
1991
|
+
action: "undoAddToOrder",
|
|
1992
|
+
buttonStyle: "plain",
|
|
1993
|
+
sections: [{ buttonField: "buttonLabel", content: OFFER_LABELS.undo, sectionType: "text" }],
|
|
1994
|
+
sectionType: "button"
|
|
1995
|
+
}
|
|
1996
|
+
],
|
|
1997
|
+
sectionType: "banner"
|
|
1998
|
+
}
|
|
1999
|
+
] : [];
|
|
2000
|
+
var convertOfferToV2 = ({ id, name, settings }) => {
|
|
2001
|
+
const layout = settings.layout?.large ?? settings.layout?.medium ?? settings.layout?.small;
|
|
2002
|
+
const columns = layout?.columns ?? 1;
|
|
2003
|
+
const direction = directionForStyle(layout?.style);
|
|
2004
|
+
const listLayout = buildProductListLayout(direction, columns);
|
|
2005
|
+
const horizontalCard = direction === "rows";
|
|
2006
|
+
const dataSource = {
|
|
2007
|
+
...settings.endpoint && { dataSourcePath: settings.endpoint },
|
|
2008
|
+
...settings.integrations && { integrations: settings.integrations },
|
|
2009
|
+
...settings.limit !== void 0 && { limit: settings.limit },
|
|
2010
|
+
matchVariant: !!settings.productOptions?.matchVariant,
|
|
2011
|
+
matchVariantOutOfStock: !!settings.productOptions?.matchVariantOutOfStock,
|
|
2012
|
+
...settings.productType && { productType: settings.productType },
|
|
2013
|
+
sectionType: "dataSource",
|
|
2014
|
+
...settings.treatAsGwp && { treatAsGwp: true }
|
|
2015
|
+
};
|
|
2016
|
+
const offers = {
|
|
2017
|
+
sections: [
|
|
2018
|
+
...buildOfferCard(settings, horizontalCard),
|
|
2019
|
+
dataSource,
|
|
2020
|
+
...buildDiscountSection(settings.discount),
|
|
2021
|
+
...buildBanner(settings.language)
|
|
2022
|
+
],
|
|
2023
|
+
sectionType: "offers"
|
|
2024
|
+
};
|
|
2025
|
+
const display = {
|
|
2026
|
+
autoAdvanceInterval: 0,
|
|
2027
|
+
itemsAtOnce: layout?.carousel ? columns : settings.limit ?? columns,
|
|
2028
|
+
...listLayout,
|
|
2029
|
+
sections: [offers],
|
|
2030
|
+
sectionType: "carousel"
|
|
2031
|
+
};
|
|
2032
|
+
return CABRootSection.parse({
|
|
2033
|
+
direction: "rows",
|
|
2034
|
+
editorMode: LOCATION_TO_EDITOR_MODE2[settings.location ?? "checkout"],
|
|
2035
|
+
// The widget name is required by the admin save schema; carry the legacy widget's name through.
|
|
2036
|
+
...name && { name },
|
|
2037
|
+
previewMode: settings.previewMode,
|
|
2038
|
+
sections: [
|
|
2039
|
+
...hasHeaderText(settings.language) ? [{ content: { en: convertContentBlockTextToV2(settings.language) }, sectionType: "text" }] : [],
|
|
2040
|
+
display
|
|
2041
|
+
],
|
|
2042
|
+
tracking: {
|
|
2043
|
+
enableAttribution: settings.tracking?.enableAttribution ?? true,
|
|
2044
|
+
enableSource: settings.tracking?.enableSource ?? true,
|
|
2045
|
+
enableWidget: settings.tracking?.enableWidget ?? true
|
|
2046
|
+
},
|
|
2047
|
+
type: SHOPIFY_CHECKOUT_EXTENSION,
|
|
2048
|
+
version: 2,
|
|
2049
|
+
widgetId: id
|
|
2050
|
+
});
|
|
2051
|
+
};
|
|
2052
|
+
|
|
2053
|
+
// src/transforms/parseShielded.ts
|
|
2054
|
+
var parseShielded = (schema, raw, transform = (input) => input) => schema.parse(transform(convertNumericObjects(deepCamelCase(raw))));
|
|
2055
|
+
|
|
2056
|
+
// src/server/userConfig.ts
|
|
1459
2057
|
var unwrapData = (body) => body && typeof body === "object" && "data" in body ? body.data : body;
|
|
2058
|
+
var isEmptyObject = (x) => x == null || typeof x === "object" && !Array.isArray(x) && Object.keys(x).length === 0;
|
|
2059
|
+
var isMissingShopPayload = (data) => {
|
|
2060
|
+
if (data == null || typeof data !== "object" || Array.isArray(data)) return true;
|
|
2061
|
+
return isEmptyObject(data.shop);
|
|
2062
|
+
};
|
|
2063
|
+
var fetchUserConfig = async (input, ctx) => {
|
|
2064
|
+
let upstream;
|
|
2065
|
+
try {
|
|
2066
|
+
upstream = await ctx.fetchUpstream("/api/v1/user/config", { shop: input.shop }, { host: ctx.host });
|
|
2067
|
+
} catch (err) {
|
|
2068
|
+
if (err instanceof UpstreamError && (err.status === 404 || err.status === 410)) {
|
|
2069
|
+
throw new NotFoundError(`Shop config not found: ${input.shop}`);
|
|
2070
|
+
}
|
|
2071
|
+
throw err;
|
|
2072
|
+
}
|
|
2073
|
+
const data = unwrapData(upstream);
|
|
2074
|
+
if (isMissingShopPayload(data)) throw new NotFoundError(`Shop config not found: ${input.shop}`);
|
|
2075
|
+
return parseShielded(UserConfig, data);
|
|
2076
|
+
};
|
|
2077
|
+
|
|
2078
|
+
// src/utilities.ts
|
|
2079
|
+
function serialize(obj) {
|
|
2080
|
+
const serialized = [];
|
|
2081
|
+
const add = (key, value) => {
|
|
2082
|
+
value = typeof value === "function" ? value() : value;
|
|
2083
|
+
value = value === null ? "" : value === void 0 ? "" : value;
|
|
2084
|
+
serialized[serialized.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
|
2085
|
+
};
|
|
2086
|
+
const buildParameters = (prefix, obj2) => {
|
|
2087
|
+
let i, key, len;
|
|
2088
|
+
if (prefix) {
|
|
2089
|
+
if (Array.isArray(obj2)) {
|
|
2090
|
+
for (i = 0, len = obj2.length; i < len; i++) {
|
|
2091
|
+
buildParameters(prefix + "[" + (typeof obj2[i] === "object" && obj2[i] ? i : "") + "]", obj2[i]);
|
|
2092
|
+
}
|
|
2093
|
+
} else if (Object.prototype.toString.call(obj2) === "[object Object]") {
|
|
2094
|
+
for (key in obj2) {
|
|
2095
|
+
buildParameters(prefix + "[" + key + "]", obj2[key]);
|
|
2096
|
+
}
|
|
2097
|
+
} else {
|
|
2098
|
+
add(prefix, obj2);
|
|
2099
|
+
}
|
|
2100
|
+
} else if (Array.isArray(obj2)) {
|
|
2101
|
+
for (i = 0, len = obj2.length; i < len; i++) {
|
|
2102
|
+
add(obj2[i].name, obj2[i].value);
|
|
2103
|
+
}
|
|
2104
|
+
} else {
|
|
2105
|
+
for (key in obj2) {
|
|
2106
|
+
buildParameters(key, obj2[key]);
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
return serialized;
|
|
2110
|
+
};
|
|
2111
|
+
return buildParameters("", obj).join("&");
|
|
2112
|
+
}
|
|
2113
|
+
|
|
2114
|
+
// src/server/dataSourceResults.ts
|
|
2115
|
+
var encodeAttributes = (pairs = []) => encodeURIComponent(JSON.stringify(Object.fromEntries(pairs.map(({ key, value }) => [key, value ?? ""]))));
|
|
2116
|
+
var buildEngineParams = (input, key) => {
|
|
2117
|
+
const { cart, customerId, integrations, limit, productType, shop, visitorId } = input;
|
|
2118
|
+
const items = cart.items.map(({ productId, properties, quantity, subscriptionId, variantId }) => ({
|
|
2119
|
+
product_id: productId,
|
|
2120
|
+
properties: encodeAttributes(properties),
|
|
2121
|
+
quantity,
|
|
2122
|
+
...subscriptionId && { subscription_id: subscriptionId },
|
|
2123
|
+
variant_id: variantId
|
|
2124
|
+
}));
|
|
2125
|
+
const itemCount = cart.items.reduce((total, { quantity }) => total + quantity, 0);
|
|
2126
|
+
const subtotal = cart.subtotal - (cart.discountTotal ?? 0);
|
|
2127
|
+
return {
|
|
2128
|
+
cart: {
|
|
2129
|
+
attributes: encodeAttributes(cart.attributes),
|
|
2130
|
+
/** `discount_code` rules match against this; React sends raw `useDiscountCodes()` as `[{code}]`. */
|
|
2131
|
+
...cart.discountCodes?.length && { discount_codes: cart.discountCodes.map((code) => ({ code })) },
|
|
2132
|
+
item_count: itemCount,
|
|
2133
|
+
items,
|
|
2134
|
+
line_count: items.length,
|
|
2135
|
+
subtotal
|
|
2136
|
+
},
|
|
2137
|
+
cart_count: items.length,
|
|
2138
|
+
cart_item_count: itemCount,
|
|
2139
|
+
cart_line_count: items.length,
|
|
2140
|
+
cart_subtotal: subtotal,
|
|
2141
|
+
key,
|
|
2142
|
+
limit,
|
|
2143
|
+
metafields: Object.values(integrations ?? {}).some(Boolean) ? "yes" : "no",
|
|
2144
|
+
selling_plans: productType === "one-time" ? "no" : "yes",
|
|
2145
|
+
shop,
|
|
2146
|
+
...customerId && { shopify_customer_id: customerId },
|
|
2147
|
+
shopify_product_ids: items.map(({ product_id: id }) => id).join(","),
|
|
2148
|
+
shopify_variant_ids: items.map(({ variant_id: id }) => id).join(","),
|
|
2149
|
+
...visitorId && { uuid: visitorId }
|
|
2150
|
+
};
|
|
2151
|
+
};
|
|
2152
|
+
var dedupeById = (products) => {
|
|
2153
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2154
|
+
return products.filter((product) => {
|
|
2155
|
+
const id = product.id;
|
|
2156
|
+
if (seen.has(id)) return false;
|
|
2157
|
+
seen.add(id);
|
|
2158
|
+
return true;
|
|
2159
|
+
});
|
|
2160
|
+
};
|
|
2161
|
+
var fetchDataSourceResults = async (input, ctx) => {
|
|
2162
|
+
const { shop } = await fetchUserConfig({ shop: input.shop }, ctx);
|
|
2163
|
+
let upstream;
|
|
2164
|
+
try {
|
|
2165
|
+
upstream = await ctx.fetchUpstream(
|
|
2166
|
+
`/api/v1${input.dataSourcePath}`,
|
|
2167
|
+
{},
|
|
2168
|
+
{ host: ctx.host, search: serialize(buildEngineParams(input, shop.apiKey)) }
|
|
2169
|
+
);
|
|
2170
|
+
} catch (err) {
|
|
2171
|
+
if (err instanceof UpstreamError && (err.status === 404 || err.status === 410)) {
|
|
2172
|
+
throw new NotFoundError(`Data source not found: ${input.dataSourcePath}`);
|
|
2173
|
+
}
|
|
2174
|
+
throw err;
|
|
2175
|
+
}
|
|
2176
|
+
const raw = upstream && typeof upstream === "object" ? upstream : {};
|
|
2177
|
+
const products = Array.isArray(raw.data) ? deepCamelCase(raw.data) : [];
|
|
2178
|
+
return {
|
|
2179
|
+
metadata: raw.metadata == null ? null : deepCamelCase(raw.metadata),
|
|
2180
|
+
products: dedupeById(products)
|
|
2181
|
+
};
|
|
2182
|
+
};
|
|
2183
|
+
|
|
2184
|
+
// src/server/widgetSettings.ts
|
|
2185
|
+
var unwrapData2 = (body) => body && typeof body === "object" && "data" in body ? body.data : body;
|
|
1460
2186
|
var isMissingUpstreamPayload = (data) => data == null || typeof data === "object" && !Array.isArray(data) && Object.keys(data).length === 0;
|
|
1461
2187
|
var dispatchWidgetTransform = (id, normalized) => {
|
|
1462
2188
|
if (isCABRootSection(normalized)) return CABRootSection.parse(normalizeTextContent(normalized));
|
|
1463
2189
|
if (isContentBlockV1(normalized)) return convertContentBlockToV2({ id, settings: normalized });
|
|
1464
2190
|
if (isLineItemEditorV1(normalized)) return convertLineItemEditorToV2({ id, settings: normalized });
|
|
2191
|
+
if (isOfferV1(normalized)) return convertOfferToV2({ id, name: normalized.name, settings: normalized });
|
|
1465
2192
|
return normalized;
|
|
1466
2193
|
};
|
|
1467
2194
|
var convertWidgetSettings = async (input, ctx) => {
|
|
@@ -1477,7 +2204,7 @@ var convertWidgetSettings = async (input, ctx) => {
|
|
|
1477
2204
|
}
|
|
1478
2205
|
throw err;
|
|
1479
2206
|
}
|
|
1480
|
-
const data =
|
|
2207
|
+
const data = unwrapData2(upstream);
|
|
1481
2208
|
if (isMissingUpstreamPayload(data)) throw new NotFoundError(`Widget not found: ${input.id}`);
|
|
1482
2209
|
return dispatchWidgetTransform(input.id, convertNumericObjects(deepCamelCase(data)));
|
|
1483
2210
|
};
|