@rechargeapps/storefront-client 2.6.0 → 2.7.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/cjs/api/address.js.map +1 -1
- package/dist/cjs/api/auth.js +1 -1
- package/dist/cjs/api/auth.js.map +1 -1
- package/dist/cjs/api/bundle.js +0 -1
- package/dist/cjs/api/bundle.js.map +1 -1
- package/dist/cjs/api/bundleData.js +1 -1
- package/dist/cjs/api/bundleData.js.map +1 -1
- package/dist/cjs/api/cdn.js.map +1 -1
- package/dist/cjs/api/charge.js.map +1 -1
- package/dist/cjs/api/collection.js.map +1 -1
- package/dist/cjs/api/credit.js.map +1 -1
- package/dist/cjs/api/customer.js +8 -7
- package/dist/cjs/api/customer.js.map +1 -1
- package/dist/cjs/api/customerSurveys.js.map +1 -1
- package/dist/cjs/api/flow.js.map +1 -1
- package/dist/cjs/api/gift.js.map +1 -1
- package/dist/cjs/api/membership.js.map +1 -1
- package/dist/cjs/api/membershipProgram.js.map +1 -1
- package/dist/cjs/api/metafield.js.map +1 -1
- package/dist/cjs/api/onetime.js.map +1 -1
- package/dist/cjs/api/order.js.map +1 -1
- package/dist/cjs/api/paymentMethod.js.map +1 -1
- package/dist/cjs/api/plan.js.map +1 -1
- package/dist/cjs/api/product.js.map +1 -1
- package/dist/cjs/api/store.js.map +1 -1
- package/dist/cjs/api/subscription.js.map +1 -1
- package/dist/cjs/api/tieredDiscount.js +0 -6
- package/dist/cjs/api/tieredDiscount.js.map +1 -1
- package/dist/cjs/constants/api.js.map +1 -1
- package/dist/cjs/mappers/cdn.js.map +1 -1
- package/dist/cjs/mappers/subscription.js.map +1 -1
- package/dist/cjs/mappers/utils.js.map +1 -1
- package/dist/cjs/utils/bundle.js +28 -51
- package/dist/cjs/utils/bundle.js.map +1 -1
- package/dist/cjs/utils/bundleData.js +4 -8
- package/dist/cjs/utils/bundleData.js.map +1 -1
- package/dist/cjs/utils/error.js.map +1 -1
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/init.js.map +1 -1
- package/dist/cjs/utils/loadSpreedlyScript.js +34 -20
- package/dist/cjs/utils/loadSpreedlyScript.js.map +1 -1
- package/dist/cjs/utils/options.js.map +1 -1
- package/dist/cjs/utils/request.js +1 -1
- package/dist/cjs/utils/request.js.map +1 -1
- package/dist/cjs/utils/url.js.map +1 -1
- package/dist/esm/api/address.js +1 -1
- package/dist/esm/api/address.js.map +1 -1
- package/dist/esm/api/auth.js +1 -1
- package/dist/esm/api/auth.js.map +1 -1
- package/dist/esm/api/bundle.js +1 -2
- package/dist/esm/api/bundle.js.map +1 -1
- package/dist/esm/api/bundleData.js +1 -1
- package/dist/esm/api/bundleData.js.map +1 -1
- package/dist/esm/api/cdn.js.map +1 -1
- package/dist/esm/api/charge.js.map +1 -1
- package/dist/esm/api/collection.js.map +1 -1
- package/dist/esm/api/credit.js.map +1 -1
- package/dist/esm/api/customer.js +9 -8
- package/dist/esm/api/customer.js.map +1 -1
- package/dist/esm/api/customerSurveys.js.map +1 -1
- package/dist/esm/api/flow.js.map +1 -1
- package/dist/esm/api/gift.js.map +1 -1
- package/dist/esm/api/membership.js.map +1 -1
- package/dist/esm/api/membershipProgram.js.map +1 -1
- package/dist/esm/api/metafield.js.map +1 -1
- package/dist/esm/api/onetime.js.map +1 -1
- package/dist/esm/api/order.js.map +1 -1
- package/dist/esm/api/paymentMethod.js.map +1 -1
- package/dist/esm/api/plan.js.map +1 -1
- package/dist/esm/api/product.js.map +1 -1
- package/dist/esm/api/store.js.map +1 -1
- package/dist/esm/api/subscription.js.map +1 -1
- package/dist/esm/api/tieredDiscount.js +0 -6
- package/dist/esm/api/tieredDiscount.js.map +1 -1
- package/dist/esm/constants/api.js.map +1 -1
- package/dist/esm/mappers/cdn.js.map +1 -1
- package/dist/esm/mappers/subscription.js.map +1 -1
- package/dist/esm/mappers/utils.js.map +1 -1
- package/dist/esm/utils/bundle.js +29 -52
- package/dist/esm/utils/bundle.js.map +1 -1
- package/dist/esm/utils/bundleData.js +4 -8
- package/dist/esm/utils/bundleData.js.map +1 -1
- package/dist/esm/utils/error.js.map +1 -1
- package/dist/esm/utils/id.js.map +1 -1
- package/dist/esm/utils/init.js.map +1 -1
- package/dist/esm/utils/loadSpreedlyScript.js +34 -20
- package/dist/esm/utils/loadSpreedlyScript.js.map +1 -1
- package/dist/esm/utils/options.js.map +1 -1
- package/dist/esm/utils/request.js +2 -2
- package/dist/esm/utils/request.js.map +1 -1
- package/dist/esm/utils/url.js.map +1 -1
- package/dist/index.d.ts +3 -7
- package/dist/umd/recharge-client.min.js +2 -2
- package/package.json +11 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.js","sources":["../../../src/mappers/subscription.ts"],"sourcesContent":["import {\n CreateSubscriptionRequest,\n Subscription,\n SubscriptionStatus,\n Subscription_2021_01,\n UpdateSubscriptionsRequest,\n} from '../types';\nimport { convertToBool, omit } from './utils';\n\nexport function bulkSubscriptionCreateMapper(customer_id: string, createRequest: CreateSubscriptionRequest) {\n return {\n ...omit(createRequest, [\n 'address_id',\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'status',\n ]),\n customer_id: parseInt(customer_id, 10),\n shopify_variant_id: createRequest.external_variant_id.ecommerce\n ? parseInt(createRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(createRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${createRequest.charge_interval_frequency}` }\n : {}),\n ...(createRequest.order_interval_frequency\n ? { order_interval_frequency: `${createRequest.order_interval_frequency}` }\n : {}),\n status: createRequest.status ? createRequest.status.toUpperCase() : undefined,\n };\n}\n\nexport function bulkSubscriptionUpdateMapper(force_update: boolean, updateRequest: UpdateSubscriptionsRequest) {\n return {\n ...omit(updateRequest, [\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'use_external_variant_defaults',\n ]),\n shopify_variant_id: updateRequest.external_variant_id?.ecommerce\n ? parseInt(updateRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(updateRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${updateRequest.charge_interval_frequency}` }\n : undefined),\n ...(updateRequest.order_interval_frequency\n ? { order_interval_frequency: `${updateRequest.order_interval_frequency}` }\n : undefined),\n force_update,\n };\n}\n\nexport function subscriptionMapperOldToNew(old: Subscription_2021_01): Subscription {\n const {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency,\n created_at,\n expire_after_specific_number_of_charges,\n shopify_product_id,\n shopify_variant_id,\n has_queued_charges,\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached,\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency,\n order_interval_unit,\n presentment_currency,\n price,\n product_title,\n properties,\n quantity,\n sku,\n sku_override,\n status,\n updated_at,\n variant_title,\n } = old;\n return {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency: parseInt(charge_interval_frequency, 10),\n created_at,\n expire_after_specific_number_of_charges,\n external_product_id: { ecommerce: `${shopify_product_id}` },\n external_variant_id: { ecommerce: `${shopify_variant_id}` },\n has_queued_charges: convertToBool(has_queued_charges),\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached: convertToBool(max_retries_reached),\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency: parseInt(order_interval_frequency, 10),\n order_interval_unit,\n presentment_currency,\n price: `${price}`,\n product_title: product_title ?? '',\n properties,\n quantity,\n sku,\n sku_override,\n status: status.toLowerCase() as SubscriptionStatus,\n updated_at,\n variant_title,\n } as Subscription;\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"subscription.js","sources":["../../../src/mappers/subscription.ts"],"sourcesContent":["import {\n CreateSubscriptionRequest,\n Subscription,\n SubscriptionStatus,\n Subscription_2021_01,\n UpdateSubscriptionsRequest,\n} from '../types';\nimport { convertToBool, omit } from './utils';\n\nexport function bulkSubscriptionCreateMapper(customer_id: string, createRequest: CreateSubscriptionRequest) {\n return {\n ...omit(createRequest, [\n 'address_id',\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'status',\n ]),\n customer_id: parseInt(customer_id, 10),\n shopify_variant_id: createRequest.external_variant_id.ecommerce\n ? parseInt(createRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(createRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${createRequest.charge_interval_frequency}` }\n : {}),\n ...(createRequest.order_interval_frequency\n ? { order_interval_frequency: `${createRequest.order_interval_frequency}` }\n : {}),\n status: createRequest.status ? createRequest.status.toUpperCase() : undefined,\n };\n}\n\nexport function bulkSubscriptionUpdateMapper(force_update: boolean, updateRequest: UpdateSubscriptionsRequest) {\n return {\n ...omit(updateRequest, [\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'use_external_variant_defaults',\n ]),\n shopify_variant_id: updateRequest.external_variant_id?.ecommerce\n ? parseInt(updateRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(updateRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${updateRequest.charge_interval_frequency}` }\n : undefined),\n ...(updateRequest.order_interval_frequency\n ? { order_interval_frequency: `${updateRequest.order_interval_frequency}` }\n : undefined),\n force_update,\n };\n}\n\nexport function subscriptionMapperOldToNew(old: Subscription_2021_01): Subscription {\n const {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency,\n created_at,\n expire_after_specific_number_of_charges,\n shopify_product_id,\n shopify_variant_id,\n has_queued_charges,\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached,\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency,\n order_interval_unit,\n presentment_currency,\n price,\n product_title,\n properties,\n quantity,\n sku,\n sku_override,\n status,\n updated_at,\n variant_title,\n } = old;\n return {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency: parseInt(charge_interval_frequency, 10),\n created_at,\n expire_after_specific_number_of_charges,\n external_product_id: { ecommerce: `${shopify_product_id}` },\n external_variant_id: { ecommerce: `${shopify_variant_id}` },\n has_queued_charges: convertToBool(has_queued_charges),\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached: convertToBool(max_retries_reached),\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency: parseInt(order_interval_frequency, 10),\n order_interval_unit,\n presentment_currency,\n price: `${price}`,\n product_title: product_title ?? '',\n properties,\n quantity,\n sku,\n sku_override,\n status: status.toLowerCase() as SubscriptionStatus,\n updated_at,\n variant_title,\n } as Subscription;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/mappers/utils.ts"],"sourcesContent":["import { BooleanLike } from '../types';\n\n/** Trys to parse passed in value. If it doesn't work returns the same passed in value */\nfunction parseValue(value: unknown): any {\n try {\n return JSON.parse(value as string);\n } catch {\n return value;\n }\n}\n\n/** Returns a new object that updates \"string\" values into their correct data type. */\nexport function parseValues<T = any>(json: Record<string, unknown>): T {\n return Object.entries(json).reduce((memo, [key, value]) => {\n return { ...memo, [key]: parseValue(value) };\n }, {}) as T;\n}\n\nexport const convertToBool = (val: BooleanLike) => {\n if (typeof val === 'string') {\n return val !== '0' && val !== 'false';\n }\n\n return !!val;\n};\n\n/**\n * Returns a shallow copy of `obj` with the given keys removed.\n *\n * Reference: lodash.omit\n */\nexport function omit<T extends object, K extends PropertyKey>(obj: T, keys: K[]): Omit<T, Extract<keyof T, K>> {\n const excluded = new Set<PropertyKey>(keys);\n const clone = {} as Record<PropertyKey, unknown>;\n for (const key of Object.keys(obj)) {\n if (!excluded.has(key)) {\n clone[key] = (obj as Record<PropertyKey, unknown>)[key];\n }\n }\n return clone as Omit<T, Extract<keyof T, K>>;\n}\n"],"names":[],"mappings":"AAGA,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/mappers/utils.ts"],"sourcesContent":["import { BooleanLike } from '../types';\n\n/** Trys to parse passed in value. If it doesn't work returns the same passed in value */\nfunction parseValue(value: unknown): any {\n try {\n return JSON.parse(value as string);\n } catch {\n return value;\n }\n}\n\n/** Returns a new object that updates \"string\" values into their correct data type. */\nexport function parseValues<T = any>(json: Record<string, unknown>): T {\n return Object.entries(json).reduce((memo, [key, value]) => {\n return { ...memo, [key]: parseValue(value) };\n }, {}) as T;\n}\n\nexport const convertToBool = (val: BooleanLike) => {\n if (typeof val === 'string') {\n return val !== '0' && val !== 'false';\n }\n\n return !!val;\n};\n\n/**\n * Returns a shallow copy of `obj` with the given keys removed.\n *\n * Reference: lodash.omit\n */\nexport function omit<T extends object, K extends PropertyKey>(obj: T, keys: K[]): Omit<T, Extract<keyof T, K>> {\n const excluded = new Set<PropertyKey>(keys);\n const clone = {} as Record<PropertyKey, unknown>;\n for (const key of Object.keys(obj)) {\n if (!excluded.has(key)) {\n clone[key] = (obj as Record<PropertyKey, unknown>)[key];\n }\n }\n return clone as Omit<T, Extract<keyof T, K>>;\n}\n"],"names":[],"mappings":"AAGA,SAAS,WAAW,KAAA,EAAqB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAe,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,YAAqB,IAAA,EAAkC;AACrE,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,EAAM,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACzD,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,UAAA,CAAW,KAAK,CAAA,EAAE;AAAA,EAC7C,CAAA,EAAG,EAAE,CAAA;AACP;AAEO,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAqB;AACjD,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA,KAAQ,OAAO,GAAA,KAAQ,OAAA;AAAA,EAChC;AAEA,EAAA,OAAO,CAAC,CAAC,GAAA;AACX;AAOO,SAAS,IAAA,CAA8C,KAAQ,IAAA,EAAyC;AAC7G,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAiB,IAAI,CAAA;AAC1C,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AAClC,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,MAAA,KAAA,CAAM,GAAG,CAAA,GAAK,GAAA,CAAqC,GAAG,CAAA;AAAA,IACxD;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;;"}
|
package/dist/esm/utils/bundle.js
CHANGED
|
@@ -1,28 +1,14 @@
|
|
|
1
|
-
import { enumType, union,
|
|
1
|
+
import { enumType, union, unionCase, voidType, int32, struct, uint32, string, UNBOUNDED_MAX_LENGTH, uint64, array, field } from '@stellar/js-xdr';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
throw TypeError("Cannot " + msg);
|
|
3
|
+
var __typeError = (msg) => {
|
|
4
|
+
throw TypeError(msg);
|
|
6
5
|
};
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
14
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
15
|
-
};
|
|
16
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
17
|
-
__accessCheck(obj, member, "write to private field");
|
|
18
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
19
|
-
return value;
|
|
20
|
-
};
|
|
21
|
-
var __privateMethod = (obj, member, method) => {
|
|
22
|
-
__accessCheck(obj, member, "access private method");
|
|
23
|
-
return method;
|
|
24
|
-
};
|
|
25
|
-
var _bundleSettings, _items, _bundleData, _formatBundleSettings, formatBundleSettings_fn, _formatBundleData, formatBundleData_fn, _isValueInRange, isValueInRange_fn, _unique, unique_fn, _hasOwn, hasOwn_fn;
|
|
6
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
7
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
8
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
9
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
10
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
11
|
+
var _bundleSettings, _items, _bundleData, _BundleSelectionValidator_instances, formatBundleSettings_fn, formatBundleData_fn, isValueInRange_fn, unique_fn, hasOwn_fn;
|
|
26
12
|
const textEncoder = new TextEncoder();
|
|
27
13
|
const emptyExt = { v: 0 };
|
|
28
14
|
function toBase64(bytes) {
|
|
@@ -77,7 +63,7 @@ function toLineItemProperty(bundle) {
|
|
|
77
63
|
quantity: item.quantity,
|
|
78
64
|
ext: emptyExt
|
|
79
65
|
})),
|
|
80
|
-
version:
|
|
66
|
+
version: Math.floor(Date.now() / 1e3),
|
|
81
67
|
ext: emptyExt
|
|
82
68
|
}
|
|
83
69
|
};
|
|
@@ -85,18 +71,12 @@ function toLineItemProperty(bundle) {
|
|
|
85
71
|
}
|
|
86
72
|
class BundleSelectionValidator {
|
|
87
73
|
constructor(selectionItems, bundleData) {
|
|
88
|
-
__privateAdd(this,
|
|
89
|
-
__privateAdd(this,
|
|
90
|
-
__privateAdd(this,
|
|
91
|
-
__privateAdd(this,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
__privateAdd(this, _hasOwn);
|
|
95
|
-
__privateAdd(this, _bundleSettings, void 0);
|
|
96
|
-
__privateAdd(this, _items, void 0);
|
|
97
|
-
__privateAdd(this, _bundleData, void 0);
|
|
98
|
-
__privateSet(this, _bundleSettings, __privateMethod(this, _formatBundleSettings, formatBundleSettings_fn).call(this, bundleData));
|
|
99
|
-
__privateSet(this, _bundleData, __privateMethod(this, _formatBundleData, formatBundleData_fn).call(this, bundleData));
|
|
74
|
+
__privateAdd(this, _BundleSelectionValidator_instances);
|
|
75
|
+
__privateAdd(this, _bundleSettings);
|
|
76
|
+
__privateAdd(this, _items);
|
|
77
|
+
__privateAdd(this, _bundleData);
|
|
78
|
+
__privateSet(this, _bundleSettings, __privateMethod(this, _BundleSelectionValidator_instances, formatBundleSettings_fn).call(this, bundleData));
|
|
79
|
+
__privateSet(this, _bundleData, __privateMethod(this, _BundleSelectionValidator_instances, formatBundleData_fn).call(this, bundleData));
|
|
100
80
|
__privateSet(this, _items, selectionItems);
|
|
101
81
|
}
|
|
102
82
|
isInitialDataValid() {
|
|
@@ -120,7 +100,7 @@ class BundleSelectionValidator {
|
|
|
120
100
|
isSelectionInVariantRange(externalVariantId) {
|
|
121
101
|
const total = __privateGet(this, _items).reduce((acc, current) => acc + current.quantity, 0);
|
|
122
102
|
const ranges = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId].ranges || [];
|
|
123
|
-
if (!__privateMethod(this,
|
|
103
|
+
if (!__privateMethod(this, _BundleSelectionValidator_instances, isValueInRange_fn).call(this, ranges, total)) {
|
|
124
104
|
throw "The total number of products does not fall within the required variant range.";
|
|
125
105
|
}
|
|
126
106
|
return true;
|
|
@@ -129,7 +109,7 @@ class BundleSelectionValidator {
|
|
|
129
109
|
const maxPerItem = __privateGet(this, _bundleSettings)?.bundleSettings.maxPerItem || 0;
|
|
130
110
|
const invalidProducts = __privateGet(this, _items).filter(({ quantity }) => quantity > maxPerItem);
|
|
131
111
|
if (maxPerItem && invalidProducts.length) {
|
|
132
|
-
const invalidIds = __privateMethod(this,
|
|
112
|
+
const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidProducts.map(({ externalProductId }) => externalProductId)).join(", ");
|
|
133
113
|
throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;
|
|
134
114
|
}
|
|
135
115
|
return true;
|
|
@@ -138,10 +118,10 @@ class BundleSelectionValidator {
|
|
|
138
118
|
const variantSettings = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId];
|
|
139
119
|
const optionSources = variantSettings?.optionSources;
|
|
140
120
|
const invalidCollections = __privateGet(this, _items).filter(
|
|
141
|
-
({ collectionId }) => !optionSources || !__privateMethod(this,
|
|
121
|
+
({ collectionId }) => !optionSources || !__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, optionSources, collectionId)
|
|
142
122
|
);
|
|
143
123
|
if (invalidCollections.length) {
|
|
144
|
-
const invalidIds = __privateMethod(this,
|
|
124
|
+
const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidCollections.map(({ collectionId }) => collectionId)).join(", ");
|
|
145
125
|
throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;
|
|
146
126
|
}
|
|
147
127
|
return true;
|
|
@@ -154,10 +134,10 @@ class BundleSelectionValidator {
|
|
|
154
134
|
const variantSettings = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId];
|
|
155
135
|
const invalidItems = Object.values(variantSettings?.optionSources || {}).filter((collection) => {
|
|
156
136
|
const quantity = totalSelectedByCollection[collection.collectionId] || 0;
|
|
157
|
-
return !__privateMethod(this,
|
|
137
|
+
return !__privateMethod(this, _BundleSelectionValidator_instances, isValueInRange_fn).call(this, [collection], quantity);
|
|
158
138
|
});
|
|
159
139
|
if (!variantSettings || invalidItems.length) {
|
|
160
|
-
const invalidIds = __privateMethod(this,
|
|
140
|
+
const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidItems.map(({ collectionId }) => collectionId)).join(", ");
|
|
161
141
|
throw `The selection exceeds the limits for the collections (${invalidIds}).`;
|
|
162
142
|
}
|
|
163
143
|
return true;
|
|
@@ -178,13 +158,13 @@ class BundleSelectionValidator {
|
|
|
178
158
|
throw `No collections found for the bundle variant (${externalVariantId}).`;
|
|
179
159
|
}
|
|
180
160
|
const missingProducts = __privateGet(this, _items).filter(({ externalProductId, collectionId }) => {
|
|
181
|
-
if (!__privateMethod(this,
|
|
161
|
+
if (!__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, variantCollections, collectionId)) {
|
|
182
162
|
return true;
|
|
183
163
|
}
|
|
184
|
-
return !__privateMethod(this,
|
|
164
|
+
return !__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, variantCollections[collectionId].products, externalProductId);
|
|
185
165
|
});
|
|
186
166
|
if (missingProducts.length) {
|
|
187
|
-
const invalidIds = __privateMethod(this,
|
|
167
|
+
const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, missingProducts.map(({ externalProductId }) => externalProductId)).join(", ");
|
|
188
168
|
throw `The products (${invalidIds}) are no longer valid for the bundle product.`;
|
|
189
169
|
}
|
|
190
170
|
return true;
|
|
@@ -203,7 +183,7 @@ class BundleSelectionValidator {
|
|
|
203
183
|
_bundleSettings = new WeakMap();
|
|
204
184
|
_items = new WeakMap();
|
|
205
185
|
_bundleData = new WeakMap();
|
|
206
|
-
|
|
186
|
+
_BundleSelectionValidator_instances = new WeakSet();
|
|
207
187
|
formatBundleSettings_fn = function(bundleData) {
|
|
208
188
|
try {
|
|
209
189
|
const bundleSettings = bundleData.bundle_settings;
|
|
@@ -214,8 +194,7 @@ formatBundleSettings_fn = function(bundleData) {
|
|
|
214
194
|
},
|
|
215
195
|
// null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution
|
|
216
196
|
variantsSettings: bundleSettings.variants.reduce((acc, variant) => {
|
|
217
|
-
if (!variant.enabled)
|
|
218
|
-
return acc;
|
|
197
|
+
if (!variant.enabled) return acc;
|
|
219
198
|
let ranges = [{ min: variant.items_count, max: variant.items_count }];
|
|
220
199
|
if (!variant.items_count) {
|
|
221
200
|
ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({
|
|
@@ -242,7 +221,6 @@ formatBundleSettings_fn = function(bundleData) {
|
|
|
242
221
|
return null;
|
|
243
222
|
}
|
|
244
223
|
};
|
|
245
|
-
_formatBundleData = new WeakSet();
|
|
246
224
|
formatBundleData_fn = function(bundleData) {
|
|
247
225
|
try {
|
|
248
226
|
const collections = Object.values(bundleData.collections).reduce((acc, current) => {
|
|
@@ -260,7 +238,6 @@ formatBundleData_fn = function(bundleData) {
|
|
|
260
238
|
return null;
|
|
261
239
|
}
|
|
262
240
|
};
|
|
263
|
-
_isValueInRange = new WeakSet();
|
|
264
241
|
isValueInRange_fn = function(ranges, value) {
|
|
265
242
|
const matchedRanges = ranges.filter(({ min, max }) => {
|
|
266
243
|
const minValue = min ?? value;
|
|
@@ -269,11 +246,11 @@ isValueInRange_fn = function(ranges, value) {
|
|
|
269
246
|
});
|
|
270
247
|
return !!matchedRanges.length;
|
|
271
248
|
};
|
|
272
|
-
_unique = new WeakSet();
|
|
273
249
|
unique_fn = function(ids) {
|
|
274
250
|
return Array.from(new Set(ids));
|
|
275
251
|
};
|
|
276
|
-
|
|
252
|
+
// Own-property membership check. Guards against inherited keys (e.g. `__proto__`,
|
|
253
|
+
// `constructor`, `toString`) resolving to truthy values on plain-object maps.
|
|
277
254
|
hasOwn_fn = function(target, key) {
|
|
278
255
|
return Object.prototype.hasOwnProperty.call(target, key);
|
|
279
256
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sources":["../../../src/utils/bundle.ts"],"sourcesContent":["import {\n array,\n enumType,\n field,\n int32,\n string as xdrString,\n struct,\n uint32,\n uint64,\n union,\n unionCase,\n voidType,\n UNBOUNDED_MAX_LENGTH,\n} from '@stellar/js-xdr';\nimport { BundleData as StorefrontBundleData, CDNBundleSettings } from '../types';\n\nconst textEncoder = new TextEncoder();\n\nconst emptyExt = { v: 0 } as const;\n\nfunction toBase64(bytes: Uint8Array) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nconst EnvelopeType = enumType('EnvelopeType', {\n envelopeTypeBundle: 0,\n});\n\nconst BundleItemExt = union('BundleItemExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst BundleItem = struct('BundleItem', {\n collectionId: uint64(),\n productId: uint64(),\n variantId: uint64(),\n sku: xdrString(UNBOUNDED_MAX_LENGTH),\n quantity: uint32(),\n ext: BundleItemExt,\n});\n\nconst BundleExt = union('BundleExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst Bundle = struct('Bundle', {\n variantId: uint64(),\n items: array(BundleItem, 500),\n version: uint32(),\n ext: BundleExt,\n});\n\nconst BundleEnvelope = union('BundleEnvelope', {\n switchOn: EnvelopeType,\n switchKey: 'type',\n cases: [unionCase('envelopeTypeBundle', EnvelopeType.envelopeTypeBundle, field('v1', Bundle))],\n});\n\nexport function toLineItemProperty(bundle: { variantId: string; version: number; items: any[] }) {\n const value = {\n type: EnvelopeType.envelopeTypeBundle,\n v1: {\n variantId: BigInt(bundle.variantId.toString()),\n items: bundle.items.map(item => ({\n collectionId: BigInt(item.collectionId.toString()),\n productId: BigInt(item.productId.toString()),\n variantId: BigInt(item.variantId.toString()),\n sku: textEncoder.encode(item.sku || ''),\n quantity: item.quantity as number,\n ext: emptyExt,\n })),\n version: bundle.version || Math.floor(Date.now() / 1000),\n ext: emptyExt,\n },\n };\n\n return toBase64(BundleEnvelope.encode(value));\n}\n\nexport interface BundleSelectionItems {\n collectionId: string;\n externalProductId: string;\n externalVariantId: string;\n quantity: number;\n}\n\ninterface VariantSettings {\n externalVariantId: string;\n optionSources: Record<string, { collectionId: string; min: number | null; max: number | null }>;\n ranges: { min: number; max: number | null }[];\n}\n\ninterface BundleSettings {\n bundleSettings: { maxPerItem: number | null; isCustomizable: boolean };\n variantsSettings: Record<string, VariantSettings>;\n}\n\ntype BundleDataCollection = StorefrontBundleData['collections'][string];\n\ninterface BundleData extends Omit<StorefrontBundleData, 'collections'> {\n collections: Record<\n string,\n Omit<BundleDataCollection, 'products'> & {\n products: Record<string, BundleDataCollection['products'][number]>;\n }\n >;\n}\n\nexport class BundleSelectionValidator {\n #bundleSettings: BundleSettings | null;\n #items: BundleSelectionItems[];\n #bundleData: BundleData | null;\n\n constructor(selectionItems: BundleSelectionItems[], bundleData: StorefrontBundleData) {\n this.#bundleSettings = this.#formatBundleSettings(bundleData);\n this.#bundleData = this.#formatBundleData(bundleData);\n this.#items = selectionItems;\n }\n\n #formatBundleSettings(bundleData: StorefrontBundleData) {\n try {\n const bundleSettings = bundleData.bundle_settings;\n return {\n bundleSettings: {\n maxPerItem: bundleSettings.max_quantity_per_variant,\n isCustomizable: bundleSettings.is_customizable,\n },\n // null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution\n variantsSettings: bundleSettings.variants.reduce<BundleSettings['variantsSettings']>((acc, variant) => {\n if (!variant.enabled) return acc;\n\n let ranges: VariantSettings['ranges'] = [{ min: variant.items_count, max: variant.items_count }];\n if (!variant.items_count) {\n ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({\n min: quantity_min,\n max: quantity_max,\n }));\n }\n\n acc[variant.external_variant_id] = {\n externalVariantId: variant.external_variant_id,\n optionSources: variant.option_sources.reduce<VariantSettings['optionSources']>((acc, optionSource) => {\n acc[optionSource.option_source_id] = {\n min: optionSource.quantity_min,\n max: optionSource.quantity_max,\n collectionId: optionSource.option_source_id,\n };\n return acc;\n }, Object.create(null)),\n ranges,\n };\n return acc;\n }, Object.create(null)),\n };\n } catch (error) {\n return null;\n }\n }\n\n #formatBundleData(bundleData: StorefrontBundleData) {\n try {\n // null-proto seeds so external collection/product ids become real own keys, not prototype pollution\n const collections = Object.values(bundleData.collections).reduce<BundleData['collections']>((acc, current) => {\n acc[current.id] = {\n ...current,\n products: current.products.reduce<BundleData['collections'][string]['products']>((productAcc, product) => {\n productAcc[product.id] = product;\n return productAcc;\n }, Object.create(null)),\n };\n\n return acc;\n }, Object.create(null));\n\n return { ...bundleData, collections };\n } catch (error) {\n return null;\n }\n }\n\n #isValueInRange(ranges: { min: number | null; max: number | null }[], value: number) {\n const matchedRanges = ranges.filter(({ min, max }) => {\n const minValue = min ?? value;\n const maxValue = max ?? value;\n\n return minValue <= value && value <= maxValue;\n });\n\n return !!matchedRanges.length;\n }\n\n #unique(ids: string[]) {\n return Array.from(new Set(ids));\n }\n\n // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,\n // `constructor`, `toString`) resolving to truthy values on plain-object maps.\n #hasOwn(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key);\n }\n\n isInitialDataValid() {\n if (!this.#bundleData) {\n throw 'Bundle data does not exist for the given product.';\n }\n\n if (!this.#bundleSettings) {\n throw 'Bundle settings do not exist for the given product.';\n }\n\n if (!Array.isArray(this.#items) || !this.#items.length) {\n throw 'No bundle selection items provided.';\n }\n\n return true;\n }\n\n isValidVariant(externalVariantId: string) {\n if (!this.#bundleSettings?.variantsSettings[externalVariantId]) {\n throw `The ${externalVariantId} bundle variant is invalid.`;\n }\n\n return true;\n }\n\n isSelectionInVariantRange(externalVariantId: string) {\n const total = this.#items.reduce((acc, current) => acc + current.quantity, 0);\n const ranges = this.#bundleSettings?.variantsSettings[externalVariantId].ranges || [];\n\n if (!this.#isValueInRange(ranges, total)) {\n throw 'The total number of products does not fall within the required variant range.';\n }\n\n return true;\n }\n\n areItemsInMaxPerItemBound() {\n const maxPerItem = this.#bundleSettings?.bundleSettings.maxPerItem || 0;\n const invalidProducts = this.#items.filter(({ quantity }) => quantity > maxPerItem);\n\n if (maxPerItem && invalidProducts.length) {\n const invalidIds = this.#unique(invalidProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;\n }\n\n return true;\n }\n\n areSelectedCollectionsValid(externalVariantId: string) {\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const optionSources = variantSettings?.optionSources;\n const invalidCollections = this.#items.filter(\n ({ collectionId }) => !optionSources || !this.#hasOwn(optionSources, collectionId)\n );\n if (invalidCollections.length) {\n const invalidIds = this.#unique(invalidCollections.map(({ collectionId }) => collectionId)).join(', ');\n throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;\n }\n\n return true;\n }\n\n areItemsQuantitiesValidForTheCollection(externalVariantId: string) {\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const totalSelectedByCollection = this.#items.reduce<Record<string, number>>((acc, current) => {\n acc[current.collectionId] = current.quantity + (acc[current.collectionId] || 0);\n return acc;\n }, Object.create(null));\n\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const invalidItems = Object.values(variantSettings?.optionSources || {}).filter(collection => {\n const quantity = totalSelectedByCollection[collection.collectionId] || 0;\n return !this.#isValueInRange([collection], quantity);\n });\n\n if (!variantSettings || invalidItems.length) {\n const invalidIds = this.#unique(invalidItems.map(({ collectionId }) => collectionId)).join(', ');\n throw `The selection exceeds the limits for the collections (${invalidIds}).`;\n }\n\n return true;\n }\n\n areSelectedProductsValid(externalVariantId: string) {\n const bundleVariantCollections = this.#bundleSettings?.variantsSettings[externalVariantId]?.optionSources || {};\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const variantCollections = Object.values(bundleVariantCollections).reduce<BundleData['collections']>(\n (acc, optionSource) => {\n const collection = this.#bundleData?.collections[optionSource.collectionId];\n if (collection) {\n acc[optionSource.collectionId] = collection;\n }\n return acc;\n },\n Object.create(null)\n );\n\n if (!Object.values(variantCollections).length) {\n throw `No collections found for the bundle variant (${externalVariantId}).`;\n }\n\n const missingProducts = this.#items.filter(({ externalProductId, collectionId }) => {\n if (!this.#hasOwn(variantCollections, collectionId)) {\n return true;\n }\n return !this.#hasOwn(variantCollections[collectionId].products, externalProductId);\n });\n\n if (missingProducts.length) {\n const invalidIds = this.#unique(missingProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The products (${invalidIds}) are no longer valid for the bundle product.`;\n }\n\n return true;\n }\n\n isBundleSelectionValid(externalVariantId: string) {\n this.isInitialDataValid();\n this.isValidVariant(externalVariantId);\n this.isSelectionInVariantRange(externalVariantId);\n this.areItemsInMaxPerItemBound();\n this.areSelectedCollectionsValid(externalVariantId);\n this.areItemsQuantitiesValidForTheCollection(externalVariantId);\n this.areSelectedProductsValid(externalVariantId);\n\n return true;\n }\n}\n"],"names":["xdrString","acc"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundle.js","sources":["../../../src/utils/bundle.ts"],"sourcesContent":["import {\n array,\n enumType,\n field,\n int32,\n string as xdrString,\n struct,\n uint32,\n uint64,\n union,\n unionCase,\n voidType,\n UNBOUNDED_MAX_LENGTH,\n} from '@stellar/js-xdr';\nimport { BundleData as StorefrontBundleData, CDNBundleSettings } from '../types';\n\nconst textEncoder = new TextEncoder();\n\nconst emptyExt = { v: 0 } as const;\n\nfunction toBase64(bytes: Uint8Array) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nconst EnvelopeType = enumType('EnvelopeType', {\n envelopeTypeBundle: 0,\n});\n\nconst BundleItemExt = union('BundleItemExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst BundleItem = struct('BundleItem', {\n collectionId: uint64(),\n productId: uint64(),\n variantId: uint64(),\n sku: xdrString(UNBOUNDED_MAX_LENGTH),\n quantity: uint32(),\n ext: BundleItemExt,\n});\n\nconst BundleExt = union('BundleExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst Bundle = struct('Bundle', {\n variantId: uint64(),\n items: array(BundleItem, 500),\n version: uint32(),\n ext: BundleExt,\n});\n\nconst BundleEnvelope = union('BundleEnvelope', {\n switchOn: EnvelopeType,\n switchKey: 'type',\n cases: [unionCase('envelopeTypeBundle', EnvelopeType.envelopeTypeBundle, field('v1', Bundle))],\n});\n\nexport function toLineItemProperty(bundle: { variantId: string; version: number; items: any[] }) {\n const value = {\n type: EnvelopeType.envelopeTypeBundle,\n v1: {\n variantId: BigInt(bundle.variantId.toString()),\n items: bundle.items.map(item => ({\n collectionId: BigInt(item.collectionId.toString()),\n productId: BigInt(item.productId.toString()),\n variantId: BigInt(item.variantId.toString()),\n sku: textEncoder.encode(item.sku || ''),\n quantity: item.quantity as number,\n ext: emptyExt,\n })),\n version: bundle.version || Math.floor(Date.now() / 1000),\n ext: emptyExt,\n },\n };\n\n return toBase64(BundleEnvelope.encode(value));\n}\n\nexport interface BundleSelectionItems {\n collectionId: string;\n externalProductId: string;\n externalVariantId: string;\n quantity: number;\n}\n\ninterface VariantSettings {\n externalVariantId: string;\n optionSources: Record<string, { collectionId: string; min: number | null; max: number | null }>;\n ranges: { min: number; max: number | null }[];\n}\n\ninterface BundleSettings {\n bundleSettings: { maxPerItem: number | null; isCustomizable: boolean };\n variantsSettings: Record<string, VariantSettings>;\n}\n\ntype BundleDataCollection = StorefrontBundleData['collections'][string];\n\ninterface BundleData extends Omit<StorefrontBundleData, 'collections'> {\n collections: Record<\n string,\n Omit<BundleDataCollection, 'products'> & {\n products: Record<string, BundleDataCollection['products'][number]>;\n }\n >;\n}\n\nexport class BundleSelectionValidator {\n #bundleSettings: BundleSettings | null;\n #items: BundleSelectionItems[];\n #bundleData: BundleData | null;\n\n constructor(selectionItems: BundleSelectionItems[], bundleData: StorefrontBundleData) {\n this.#bundleSettings = this.#formatBundleSettings(bundleData);\n this.#bundleData = this.#formatBundleData(bundleData);\n this.#items = selectionItems;\n }\n\n #formatBundleSettings(bundleData: StorefrontBundleData) {\n try {\n const bundleSettings = bundleData.bundle_settings;\n return {\n bundleSettings: {\n maxPerItem: bundleSettings.max_quantity_per_variant,\n isCustomizable: bundleSettings.is_customizable,\n },\n // null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution\n variantsSettings: bundleSettings.variants.reduce<BundleSettings['variantsSettings']>((acc, variant) => {\n if (!variant.enabled) return acc;\n\n let ranges: VariantSettings['ranges'] = [{ min: variant.items_count, max: variant.items_count }];\n if (!variant.items_count) {\n ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({\n min: quantity_min,\n max: quantity_max,\n }));\n }\n\n acc[variant.external_variant_id] = {\n externalVariantId: variant.external_variant_id,\n optionSources: variant.option_sources.reduce<VariantSettings['optionSources']>((acc, optionSource) => {\n acc[optionSource.option_source_id] = {\n min: optionSource.quantity_min,\n max: optionSource.quantity_max,\n collectionId: optionSource.option_source_id,\n };\n return acc;\n }, Object.create(null)),\n ranges,\n };\n return acc;\n }, Object.create(null)),\n };\n } catch (error) {\n return null;\n }\n }\n\n #formatBundleData(bundleData: StorefrontBundleData) {\n try {\n // null-proto seeds so external collection/product ids become real own keys, not prototype pollution\n const collections = Object.values(bundleData.collections).reduce<BundleData['collections']>((acc, current) => {\n acc[current.id] = {\n ...current,\n products: current.products.reduce<BundleData['collections'][string]['products']>((productAcc, product) => {\n productAcc[product.id] = product;\n return productAcc;\n }, Object.create(null)),\n };\n\n return acc;\n }, Object.create(null));\n\n return { ...bundleData, collections };\n } catch (error) {\n return null;\n }\n }\n\n #isValueInRange(ranges: { min: number | null; max: number | null }[], value: number) {\n const matchedRanges = ranges.filter(({ min, max }) => {\n const minValue = min ?? value;\n const maxValue = max ?? value;\n\n return minValue <= value && value <= maxValue;\n });\n\n return !!matchedRanges.length;\n }\n\n #unique(ids: string[]) {\n return Array.from(new Set(ids));\n }\n\n // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,\n // `constructor`, `toString`) resolving to truthy values on plain-object maps.\n #hasOwn(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key);\n }\n\n isInitialDataValid() {\n if (!this.#bundleData) {\n throw 'Bundle data does not exist for the given product.';\n }\n\n if (!this.#bundleSettings) {\n throw 'Bundle settings do not exist for the given product.';\n }\n\n if (!Array.isArray(this.#items) || !this.#items.length) {\n throw 'No bundle selection items provided.';\n }\n\n return true;\n }\n\n isValidVariant(externalVariantId: string) {\n if (!this.#bundleSettings?.variantsSettings[externalVariantId]) {\n throw `The ${externalVariantId} bundle variant is invalid.`;\n }\n\n return true;\n }\n\n isSelectionInVariantRange(externalVariantId: string) {\n const total = this.#items.reduce((acc, current) => acc + current.quantity, 0);\n const ranges = this.#bundleSettings?.variantsSettings[externalVariantId].ranges || [];\n\n if (!this.#isValueInRange(ranges, total)) {\n throw 'The total number of products does not fall within the required variant range.';\n }\n\n return true;\n }\n\n areItemsInMaxPerItemBound() {\n const maxPerItem = this.#bundleSettings?.bundleSettings.maxPerItem || 0;\n const invalidProducts = this.#items.filter(({ quantity }) => quantity > maxPerItem);\n\n if (maxPerItem && invalidProducts.length) {\n const invalidIds = this.#unique(invalidProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;\n }\n\n return true;\n }\n\n areSelectedCollectionsValid(externalVariantId: string) {\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const optionSources = variantSettings?.optionSources;\n const invalidCollections = this.#items.filter(\n ({ collectionId }) => !optionSources || !this.#hasOwn(optionSources, collectionId)\n );\n if (invalidCollections.length) {\n const invalidIds = this.#unique(invalidCollections.map(({ collectionId }) => collectionId)).join(', ');\n throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;\n }\n\n return true;\n }\n\n areItemsQuantitiesValidForTheCollection(externalVariantId: string) {\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const totalSelectedByCollection = this.#items.reduce<Record<string, number>>((acc, current) => {\n acc[current.collectionId] = current.quantity + (acc[current.collectionId] || 0);\n return acc;\n }, Object.create(null));\n\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const invalidItems = Object.values(variantSettings?.optionSources || {}).filter(collection => {\n const quantity = totalSelectedByCollection[collection.collectionId] || 0;\n return !this.#isValueInRange([collection], quantity);\n });\n\n if (!variantSettings || invalidItems.length) {\n const invalidIds = this.#unique(invalidItems.map(({ collectionId }) => collectionId)).join(', ');\n throw `The selection exceeds the limits for the collections (${invalidIds}).`;\n }\n\n return true;\n }\n\n areSelectedProductsValid(externalVariantId: string) {\n const bundleVariantCollections = this.#bundleSettings?.variantsSettings[externalVariantId]?.optionSources || {};\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const variantCollections = Object.values(bundleVariantCollections).reduce<BundleData['collections']>(\n (acc, optionSource) => {\n const collection = this.#bundleData?.collections[optionSource.collectionId];\n if (collection) {\n acc[optionSource.collectionId] = collection;\n }\n return acc;\n },\n Object.create(null)\n );\n\n if (!Object.values(variantCollections).length) {\n throw `No collections found for the bundle variant (${externalVariantId}).`;\n }\n\n const missingProducts = this.#items.filter(({ externalProductId, collectionId }) => {\n if (!this.#hasOwn(variantCollections, collectionId)) {\n return true;\n }\n return !this.#hasOwn(variantCollections[collectionId].products, externalProductId);\n });\n\n if (missingProducts.length) {\n const invalidIds = this.#unique(missingProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The products (${invalidIds}) are no longer valid for the bundle product.`;\n }\n\n return true;\n }\n\n isBundleSelectionValid(externalVariantId: string) {\n this.isInitialDataValid();\n this.isValidVariant(externalVariantId);\n this.isSelectionInVariantRange(externalVariantId);\n this.areItemsInMaxPerItemBound();\n this.areSelectedCollectionsValid(externalVariantId);\n this.areItemsQuantitiesValidForTheCollection(externalVariantId);\n this.areSelectedProductsValid(externalVariantId);\n\n return true;\n }\n}\n"],"names":["xdrString","acc"],"mappings":"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"}
|
|
@@ -27,8 +27,7 @@ const mapBundleSettings = (bundleSettings) => {
|
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
const mapIncentives = (incentives) => {
|
|
30
|
-
if (incentives.tiered_discounts.length === 0)
|
|
31
|
-
return null;
|
|
30
|
+
if (incentives.tiered_discounts.length === 0) return null;
|
|
32
31
|
return {
|
|
33
32
|
tiered_discounts: incentives.tiered_discounts
|
|
34
33
|
};
|
|
@@ -57,10 +56,8 @@ const mapBasicVariant = (variant) => ({
|
|
|
57
56
|
available_for_sale: variant.available
|
|
58
57
|
});
|
|
59
58
|
const formatFeaturedImage = (featuredImage) => {
|
|
60
|
-
if (featuredImage == null || typeof featuredImage === "string")
|
|
61
|
-
|
|
62
|
-
if ("src" in featuredImage)
|
|
63
|
-
return featuredImage["src"];
|
|
59
|
+
if (featuredImage == null || typeof featuredImage === "string") return featuredImage;
|
|
60
|
+
if ("src" in featuredImage) return featuredImage["src"];
|
|
64
61
|
return null;
|
|
65
62
|
};
|
|
66
63
|
const mapBasicProduct = (product) => {
|
|
@@ -122,8 +119,7 @@ const productSellingPlansGroupLookup = (sellingPlanGroups) => sellingPlanGroups.
|
|
|
122
119
|
return acc;
|
|
123
120
|
}, {});
|
|
124
121
|
const mapFilters = (filters) => {
|
|
125
|
-
if (!Array.isArray(filters))
|
|
126
|
-
return [];
|
|
122
|
+
if (!Array.isArray(filters)) return [];
|
|
127
123
|
return filters;
|
|
128
124
|
};
|
|
129
125
|
function mapOnlineStoreToPublicBundleData(bundleData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sources":["../../../src/utils/error.ts"],"sourcesContent":["export class RechargeRequestError implements Error {\n name = 'RechargeRequestError';\n message: string;\n status?: number;\n\n constructor(message: string, status?: number) {\n this.message = message;\n this.status = status;\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"error.js","sources":["../../../src/utils/error.ts"],"sourcesContent":["export class RechargeRequestError implements Error {\n name = 'RechargeRequestError';\n message: string;\n status?: number;\n\n constructor(message: string, status?: number) {\n this.message = message;\n this.status = status;\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAA,CAAsC;AAAA,EAKjD,WAAA,CAAY,SAAiB,MAAA,EAAiB;AAJ9C,IAAA,IAAA,CAAA,IAAA,GAAO,sBAAA;AAKL,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;;"}
|
package/dist/esm/utils/id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.js","sources":["../../../src/utils/id.ts"],"sourcesContent":["const ALPHABET = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n\n/**\n * Generates a random URL-safe id.\n *\n * Uses `Math.random`, so it is NOT cryptographically secure. Only used for\n * internal request/telemetry ids where uniqueness matters.\n *\n * Reference: nanoid/non-secure\n */\nexport function nanoid(size = 21): string {\n let id = '';\n for (let i = 0; i < size; i++) {\n id += ALPHABET[(Math.random() * 64) | 0];\n }\n return id;\n}\n"],"names":[],"mappings":"AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"id.js","sources":["../../../src/utils/id.ts"],"sourcesContent":["const ALPHABET = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n\n/**\n * Generates a random URL-safe id.\n *\n * Uses `Math.random`, so it is NOT cryptographically secure. Only used for\n * internal request/telemetry ids where uniqueness matters.\n *\n * Reference: nanoid/non-secure\n */\nexport function nanoid(size = 21): string {\n let id = '';\n for (let i = 0; i < size; i++) {\n id += ALPHABET[(Math.random() * 64) | 0];\n }\n return id;\n}\n"],"names":[],"mappings":"AAAA,MAAM,QAAA,GAAW,kEAAA;AAUV,SAAS,MAAA,CAAO,OAAO,EAAA,EAAY;AACxC,EAAA,IAAI,EAAA,GAAK,EAAA;AACT,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,IAAA,EAAA,IAAM,QAAA,CAAU,IAAA,CAAK,MAAA,EAAO,GAAI,KAAM,CAAC,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,EAAA;AACT;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sources":["../../../src/utils/init.ts"],"sourcesContent":["import { resetCDNCache } from '../api/cdn';\nimport { StorefrontOptions, CRUDRequestOptions, GetRequestOptions, InitOptions } from '../types';\nimport { setOptions } from './options';\nimport { request } from './request';\n\n/**\n * @internal\n * @deprecated will be removed in next version\n */\nexport const api = {\n get<T>(url: string, requestOptions?: GetRequestOptions): Promise<T> {\n return request<T>('get', url, requestOptions);\n },\n post<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('post', url, requestOptions);\n },\n put<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('put', url, requestOptions);\n },\n delete<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('delete', url, requestOptions);\n },\n};\n\n/**\n * Uses passed in storeIdentifier, but if it's not passed in will try to infer it.\n * Currently it will only infer if we are in the context of a Shopify store. This will not infer headless or hosted yet.\n */\nfunction getStoreIdentifier(storeIdentifier?: string): string {\n if (storeIdentifier) {\n return storeIdentifier;\n }\n\n // Infer's when on Shopify store (non headless)\n if (window?.Shopify?.shop) {\n return window.Shopify.shop;\n }\n\n // Domain exists on hosted themes. If it doesn't for some reason, get the subdomain and create the identifier\n let domain = window?.domain;\n if (!domain) {\n const subdomain = location?.href\n .match(/(?:http[s]*:\\/\\/)*(.*?)\\.(?=admin\\.rechargeapps\\.com)/i)?.[1]\n .replace(/-sp$/, '');\n if (subdomain) {\n domain = `${subdomain}.myshopify.com`;\n }\n }\n\n // Infer's when on Recharge hosted\n if (domain) {\n return domain;\n }\n\n throw new Error(`No storeIdentifier was passed into init.`);\n}\n\nexport function initRecharge(opt: InitOptions = {}) {\n const hiddenOpts = opt as StorefrontOptions;\n const { storefrontAccessToken } = opt;\n if (storefrontAccessToken && !storefrontAccessToken.startsWith('strfnt')) {\n throw new Error(\n 'Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.'\n );\n }\n setOptions({\n storeIdentifier: getStoreIdentifier(opt.storeIdentifier),\n loginRetryFn: opt.loginRetryFn,\n __unstable_twoFactorRetryFn: opt.__unstable_twoFactorRetryFn,\n storefrontAccessToken,\n appName: opt.appName,\n appVersion: opt.appVersion,\n environment: hiddenOpts.environment ? hiddenOpts.environment : 'prod',\n environmentUri: hiddenOpts.environmentUri,\n customerHash: hiddenOpts.customerHash,\n });\n\n // When init is called again, reset the cache to make sure we don't have the old cache around\n resetCDNCache();\n}\n"],"names":[],"mappings":";;;;AASO,MAAM,GAAM
|
|
1
|
+
{"version":3,"file":"init.js","sources":["../../../src/utils/init.ts"],"sourcesContent":["import { resetCDNCache } from '../api/cdn';\nimport { StorefrontOptions, CRUDRequestOptions, GetRequestOptions, InitOptions } from '../types';\nimport { setOptions } from './options';\nimport { request } from './request';\n\n/**\n * @internal\n * @deprecated will be removed in next version\n */\nexport const api = {\n get<T>(url: string, requestOptions?: GetRequestOptions): Promise<T> {\n return request<T>('get', url, requestOptions);\n },\n post<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('post', url, requestOptions);\n },\n put<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('put', url, requestOptions);\n },\n delete<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('delete', url, requestOptions);\n },\n};\n\n/**\n * Uses passed in storeIdentifier, but if it's not passed in will try to infer it.\n * Currently it will only infer if we are in the context of a Shopify store. This will not infer headless or hosted yet.\n */\nfunction getStoreIdentifier(storeIdentifier?: string): string {\n if (storeIdentifier) {\n return storeIdentifier;\n }\n\n // Infer's when on Shopify store (non headless)\n if (window?.Shopify?.shop) {\n return window.Shopify.shop;\n }\n\n // Domain exists on hosted themes. If it doesn't for some reason, get the subdomain and create the identifier\n let domain = window?.domain;\n if (!domain) {\n const subdomain = location?.href\n .match(/(?:http[s]*:\\/\\/)*(.*?)\\.(?=admin\\.rechargeapps\\.com)/i)?.[1]\n .replace(/-sp$/, '');\n if (subdomain) {\n domain = `${subdomain}.myshopify.com`;\n }\n }\n\n // Infer's when on Recharge hosted\n if (domain) {\n return domain;\n }\n\n throw new Error(`No storeIdentifier was passed into init.`);\n}\n\nexport function initRecharge(opt: InitOptions = {}) {\n const hiddenOpts = opt as StorefrontOptions;\n const { storefrontAccessToken } = opt;\n if (storefrontAccessToken && !storefrontAccessToken.startsWith('strfnt')) {\n throw new Error(\n 'Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.'\n );\n }\n setOptions({\n storeIdentifier: getStoreIdentifier(opt.storeIdentifier),\n loginRetryFn: opt.loginRetryFn,\n __unstable_twoFactorRetryFn: opt.__unstable_twoFactorRetryFn,\n storefrontAccessToken,\n appName: opt.appName,\n appVersion: opt.appVersion,\n environment: hiddenOpts.environment ? hiddenOpts.environment : 'prod',\n environmentUri: hiddenOpts.environmentUri,\n customerHash: hiddenOpts.customerHash,\n });\n\n // When init is called again, reset the cache to make sure we don't have the old cache around\n resetCDNCache();\n}\n"],"names":[],"mappings":";;;;AASO,MAAM,GAAA,GAAM;AAAA,EACjB,GAAA,CAAO,KAAa,cAAA,EAAgD;AAClE,IAAA,OAAO,OAAA,CAAW,KAAA,EAAO,GAAA,EAAK,cAAc,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,IAAA,CAAQ,KAAa,cAAA,EAAiD;AACpE,IAAA,OAAO,OAAA,CAAW,MAAA,EAAQ,GAAA,EAAK,cAAc,CAAA;AAAA,EAC/C,CAAA;AAAA,EACA,GAAA,CAAO,KAAa,cAAA,EAAiD;AACnE,IAAA,OAAO,OAAA,CAAW,KAAA,EAAO,GAAA,EAAK,cAAc,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,MAAA,CAAU,KAAa,cAAA,EAAiD;AACtE,IAAA,OAAO,OAAA,CAAW,QAAA,EAAU,GAAA,EAAK,cAAc,CAAA;AAAA,EACjD;AACF;AAMA,SAAS,mBAAmB,eAAA,EAAkC;AAC5D,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAA,EAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,OAAO,OAAO,OAAA,CAAQ,IAAA;AAAA,EACxB;AAGA,EAAA,IAAI,SAAS,MAAA,EAAQ,MAAA;AACrB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,SAAA,GAAY,QAAA,EAAU,IAAA,CACzB,KAAA,CAAM,wDAAwD,IAAI,CAAC,CAAA,CACnE,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACrB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAA,GAAS,GAAG,SAAS,CAAA,cAAA,CAAA;AAAA,IACvB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,MAAM,CAAA,wCAAA,CAA0C,CAAA;AAC5D;AAEO,SAAS,YAAA,CAAa,GAAA,GAAmB,EAAC,EAAG;AAClD,EAAA,MAAM,UAAA,GAAa,GAAA;AACnB,EAAA,MAAM,EAAE,uBAAsB,GAAI,GAAA;AAClC,EAAA,IAAI,qBAAA,IAAyB,CAAC,qBAAA,CAAsB,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,UAAA,CAAW;AAAA,IACT,eAAA,EAAiB,kBAAA,CAAmB,GAAA,CAAI,eAAe,CAAA;AAAA,IACvD,cAAc,GAAA,CAAI,YAAA;AAAA,IAClB,6BAA6B,GAAA,CAAI,2BAAA;AAAA,IACjC,qBAAA;AAAA,IACA,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,WAAA,EAAa,UAAA,CAAW,WAAA,GAAc,UAAA,CAAW,WAAA,GAAc,MAAA;AAAA,IAC/D,gBAAgB,UAAA,CAAW,cAAA;AAAA,IAC3B,cAAc,UAAA,CAAW;AAAA,GAC1B,CAAA;AAGD,EAAA,aAAA,EAAc;AAChB;;"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
const LOAD_TIMEOUT_MS = 3e4;
|
|
2
|
+
const POLL_INTERVAL_MS = 50;
|
|
3
|
+
function parseSpreedlyUrl(scriptSrc) {
|
|
4
|
+
try {
|
|
5
|
+
const url = new URL(scriptSrc);
|
|
6
|
+
const isSpreedlyHost = url.hostname === "spreedly.com" || url.hostname.endsWith(".spreedly.com");
|
|
7
|
+
return url.protocol === "https:" && isSpreedlyHost ? url : null;
|
|
8
|
+
} catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
1
12
|
async function loadSpreedlyScript(scriptSrc, integrity) {
|
|
2
13
|
if (typeof window !== "undefined" && window.Spreedly) {
|
|
3
14
|
return Promise.resolve();
|
|
@@ -7,36 +18,39 @@ async function loadSpreedlyScript(scriptSrc, integrity) {
|
|
|
7
18
|
reject(new Error("Document is not available. This function must be called in a browser environment."));
|
|
8
19
|
return;
|
|
9
20
|
}
|
|
10
|
-
const
|
|
21
|
+
const url = parseSpreedlyUrl(scriptSrc);
|
|
22
|
+
if (!url) {
|
|
23
|
+
reject(new Error("Payment iFrame script must be served over https from spreedly.com"));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const deadline = Date.now() + LOAD_TIMEOUT_MS;
|
|
27
|
+
let pollTimer;
|
|
28
|
+
const waitForSpreedly = () => {
|
|
29
|
+
if (window.Spreedly) {
|
|
30
|
+
resolve();
|
|
31
|
+
} else if (Date.now() >= deadline) {
|
|
32
|
+
reject(new Error("Timed out loading payment iFrame script"));
|
|
33
|
+
} else {
|
|
34
|
+
pollTimer = setTimeout(waitForSpreedly, POLL_INTERVAL_MS);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const existingScript = Array.from(document.scripts).find(
|
|
38
|
+
(script2) => script2.src === url.href && script2.integrity === integrity
|
|
39
|
+
);
|
|
11
40
|
if (existingScript) {
|
|
12
|
-
|
|
13
|
-
if (window.Spreedly) {
|
|
14
|
-
resolve();
|
|
15
|
-
} else {
|
|
16
|
-
setTimeout(checkLoaded, 50);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
checkLoaded();
|
|
41
|
+
waitForSpreedly();
|
|
20
42
|
return;
|
|
21
43
|
}
|
|
22
44
|
const script = document.createElement("script");
|
|
23
|
-
script.src =
|
|
45
|
+
script.src = url.href;
|
|
24
46
|
script.integrity = integrity;
|
|
25
47
|
script.crossOrigin = "anonymous";
|
|
26
|
-
script.addEventListener("load", () => {
|
|
27
|
-
const checkLoaded = () => {
|
|
28
|
-
if (window.Spreedly) {
|
|
29
|
-
resolve();
|
|
30
|
-
} else {
|
|
31
|
-
setTimeout(checkLoaded, 50);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
checkLoaded();
|
|
35
|
-
});
|
|
36
48
|
script.addEventListener("error", () => {
|
|
49
|
+
clearTimeout(pollTimer);
|
|
37
50
|
reject(new Error("Failed to load payment iFrame script"));
|
|
38
51
|
});
|
|
39
52
|
document.head.appendChild(script);
|
|
53
|
+
waitForSpreedly();
|
|
40
54
|
});
|
|
41
55
|
}
|
|
42
56
|
|