@zoxllc/shopify-checkout-extensions 0.0.7 → 0.1.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/CLAUDE.md +136 -0
- package/EXAMPLES.md +384 -0
- package/INTEGRATION.md +482 -0
- package/README.md +5 -1
- package/dist/common/AndSelector.d.ts +11 -0
- package/dist/common/AndSelector.d.ts.map +1 -0
- package/dist/common/AndSelector.js +30 -0
- package/dist/common/Campaign.d.ts +24 -0
- package/dist/common/Campaign.d.ts.map +1 -0
- package/dist/common/Campaign.js +41 -0
- package/dist/common/CampaignConfiguration.d.ts +10 -0
- package/dist/common/CampaignConfiguration.d.ts.map +1 -0
- package/dist/common/CampaignConfiguration.js +7 -0
- package/dist/common/CampaignFactory.d.ts +22 -0
- package/dist/common/CampaignFactory.d.ts.map +1 -0
- package/dist/common/CampaignFactory.js +95 -0
- package/dist/common/CartAmountQualifier.d.ts +22 -0
- package/dist/common/CartAmountQualifier.d.ts.map +1 -0
- package/dist/common/CartAmountQualifier.js +46 -0
- package/dist/common/CartHasItemQualifier.d.ts +21 -0
- package/dist/common/CartHasItemQualifier.d.ts.map +1 -0
- package/dist/common/CartHasItemQualifier.js +54 -0
- package/dist/common/CartQuantityQualifier.d.ts +22 -0
- package/dist/common/CartQuantityQualifier.d.ts.map +1 -0
- package/dist/common/CartQuantityQualifier.js +62 -0
- package/dist/common/ConfigSchema.d.ts +71 -0
- package/dist/common/ConfigSchema.d.ts.map +1 -0
- package/dist/common/ConfigSchema.js +69 -0
- package/dist/common/ConfigValidator.d.ts +29 -0
- package/dist/common/ConfigValidator.d.ts.map +1 -0
- package/dist/common/ConfigValidator.js +84 -0
- package/dist/common/CountryCodeQualifier.d.ts +15 -0
- package/dist/common/CountryCodeQualifier.d.ts.map +1 -0
- package/dist/common/CountryCodeQualifier.js +30 -0
- package/dist/common/CustomerEmailQualifier.d.ts +16 -0
- package/dist/common/CustomerEmailQualifier.d.ts.map +1 -0
- package/dist/common/CustomerEmailQualifier.js +52 -0
- package/dist/common/CustomerSubscriberQualifier.d.ts +18 -0
- package/dist/common/CustomerSubscriberQualifier.d.ts.map +1 -0
- package/dist/common/CustomerSubscriberQualifier.js +28 -0
- package/dist/common/CustomerTagQualifier.d.ts +16 -0
- package/dist/common/CustomerTagQualifier.d.ts.map +1 -0
- package/dist/common/CustomerTagQualifier.js +45 -0
- package/dist/common/DiscountCart.d.ts +23 -0
- package/dist/common/DiscountCart.d.ts.map +1 -0
- package/dist/common/DiscountCart.js +103 -0
- package/dist/common/DiscountInterface.d.ts +17 -0
- package/dist/common/DiscountInterface.d.ts.map +1 -0
- package/dist/common/DiscountInterface.js +2 -0
- package/dist/common/OrSelector.d.ts +11 -0
- package/dist/common/OrSelector.d.ts.map +1 -0
- package/dist/common/OrSelector.js +30 -0
- package/dist/common/PostCartAmountQualifier.d.ts +9 -0
- package/dist/common/PostCartAmountQualifier.d.ts.map +1 -0
- package/dist/common/PostCartAmountQualifier.js +17 -0
- package/dist/common/ProductHandleSelector.d.ts +8 -0
- package/dist/common/ProductHandleSelector.d.ts.map +1 -0
- package/dist/common/ProductHandleSelector.js +22 -0
- package/dist/common/ProductIdSelector.d.ts +8 -0
- package/dist/common/ProductIdSelector.d.ts.map +1 -0
- package/dist/common/ProductIdSelector.js +22 -0
- package/dist/common/ProductTagSelector.d.ts +10 -0
- package/dist/common/ProductTagSelector.d.ts.map +1 -0
- package/dist/common/ProductTagSelector.js +39 -0
- package/dist/common/ProductTypeSelector.d.ts +8 -0
- package/dist/common/ProductTypeSelector.d.ts.map +1 -0
- package/dist/common/ProductTypeSelector.js +25 -0
- package/dist/common/Qualifier.d.ts +30 -0
- package/dist/common/Qualifier.d.ts.map +1 -0
- package/dist/common/Qualifier.js +61 -0
- package/dist/common/SaleItemSelector.d.ts +11 -0
- package/dist/common/SaleItemSelector.d.ts.map +1 -0
- package/dist/common/SaleItemSelector.js +30 -0
- package/dist/common/Selector.d.ts +27 -0
- package/dist/common/Selector.d.ts.map +1 -0
- package/dist/common/Selector.js +51 -0
- package/dist/common/SubscriptionItemSelector.d.ts +7 -0
- package/dist/common/SubscriptionItemSelector.d.ts.map +1 -0
- package/dist/common/SubscriptionItemSelector.js +19 -0
- package/dist/form/CampaignForm.d.ts +1 -0
- package/dist/form/CampaignForm.d.ts.map +1 -0
- package/dist/form/CampaignForm.js +1 -0
- package/{src/index.ts → dist/index.d.ts} +22 -27
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/lineItem/BuyXGetY.d.ts +18 -0
- package/dist/lineItem/BuyXGetY.d.ts.map +1 -0
- package/dist/lineItem/BuyXGetY.js +85 -0
- package/dist/lineItem/ConditionalDiscount.d.ts +14 -0
- package/dist/lineItem/ConditionalDiscount.d.ts.map +1 -0
- package/dist/lineItem/ConditionalDiscount.js +81 -0
- package/dist/lineItem/FixedItemDiscount.d.ts +9 -0
- package/dist/lineItem/FixedItemDiscount.d.ts.map +1 -0
- package/dist/lineItem/FixedItemDiscount.js +35 -0
- package/dist/lineItem/PercentageDiscount.d.ts +8 -0
- package/dist/lineItem/PercentageDiscount.d.ts.map +1 -0
- package/dist/lineItem/PercentageDiscount.js +32 -0
- package/dist/lineItem/api.d.ts +2026 -0
- package/dist/lineItem/api.d.ts.map +1 -0
- package/dist/lineItem/api.js +1157 -0
- package/dist/shipping/FixedDiscount.d.ts +8 -0
- package/dist/shipping/FixedDiscount.d.ts.map +1 -0
- package/dist/shipping/FixedDiscount.js +30 -0
- package/dist/shipping/RateNameSelector.d.ts +10 -0
- package/dist/shipping/RateNameSelector.d.ts.map +1 -0
- package/dist/shipping/RateNameSelector.js +45 -0
- package/dist/shipping/ShippingDiscount.d.ts +14 -0
- package/dist/shipping/ShippingDiscount.d.ts.map +1 -0
- package/dist/shipping/ShippingDiscount.js +48 -0
- package/dist/shipping/api.d.ts +2019 -0
- package/dist/shipping/api.d.ts.map +1 -0
- package/dist/shipping/api.js +1147 -0
- package/package.json +26 -7
- package/migrate.ts +0 -64
- package/src/common/AndSelector.ts +0 -42
- package/src/common/Campaign.ts +0 -70
- package/src/common/CampaignConfiguration.ts +0 -10
- package/src/common/CampaignFactory.ts +0 -234
- package/src/common/CartAmountQualifier.ts +0 -64
- package/src/common/CartHasItemQualifier.ts +0 -80
- package/src/common/CartQuantityQualifier.ts +0 -94
- package/src/common/CountryCodeQualifier.ts +0 -49
- package/src/common/CustomerEmailQualifier.ts +0 -67
- package/src/common/CustomerSubscriberQualifier.ts +0 -32
- package/src/common/CustomerTagQualifier.ts +0 -69
- package/src/common/DiscountCart.ts +0 -161
- package/src/common/DiscountInterface.ts +0 -26
- package/src/common/OrSelector.ts +0 -40
- package/src/common/PostCartAmountQualifier.ts +0 -21
- package/src/common/ProductHandleSelector.ts +0 -31
- package/src/common/ProductIdSelector.ts +0 -34
- package/src/common/ProductTagSelector.ts +0 -63
- package/src/common/ProductTypeSelector.ts +0 -40
- package/src/common/Qualifier.ts +0 -67
- package/src/common/SaleItemSelector.ts +0 -36
- package/src/common/Selector.ts +0 -66
- package/src/common/SubscriptionItemSelector.ts +0 -23
- package/src/lineItem/BuyXGetY.ts +0 -131
- package/src/lineItem/ConditionalDiscount.ts +0 -102
- package/src/lineItem/FixedItemDiscount.ts +0 -51
- package/src/lineItem/PercentageDiscount.ts +0 -44
- package/src/lineItem/api.ts +0 -2103
- package/src/shipping/FixedDiscount.ts +0 -37
- package/src/shipping/RateNameSelector.ts +0 -54
- package/src/shipping/ShippingDiscount.ts +0 -75
- package/src/shipping/api.ts +0 -2014
- package/tests/AndSelector.test.ts +0 -27
- package/tests/CartQuantityQualifier.test.ts +0 -381
- package/tests/CountryCodeQualifier.test.ts +0 -55
- package/tests/CustomerSubscriberQualifier.test.ts +0 -101
- package/tests/CustomerTagQualifier.test.ts +0 -71
- package/tests/DiscountCart.test.ts +0 -115
- package/tests/OrSelector.test.ts +0 -27
- package/tests/ProductIdSelector.test.ts +0 -83
- package/tests/ProductTagSelector.test.ts +0 -75
- package/tests/Qualifier.test.ts +0 -193
- package/tests/RateNameSelector.test.ts +0 -107
- package/tests/SaleItemSelector.test.ts +0 -113
- package/tests/Selector.test.ts +0 -83
- package/tests/ShippingDiscount.test.ts +0 -147
- package/tsconfig.json +0 -25
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ApplyDiscount,
|
|
3
|
-
Discount,
|
|
4
|
-
DiscountInterface,
|
|
5
|
-
} from '../common/DiscountInterface';
|
|
6
|
-
|
|
7
|
-
export class FixedDiscount implements DiscountInterface {
|
|
8
|
-
amount: number;
|
|
9
|
-
message: string;
|
|
10
|
-
|
|
11
|
-
constructor(amount: number, message: string) {
|
|
12
|
-
this.amount = amount;
|
|
13
|
-
this.message = message;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
apply(items: ApplyDiscount[]): Discount {
|
|
17
|
-
const targets = items.map(
|
|
18
|
-
({ deliveryOption: { handle } }) => {
|
|
19
|
-
return {
|
|
20
|
-
deliveryOption: {
|
|
21
|
-
handle,
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
targets,
|
|
29
|
-
value: {
|
|
30
|
-
fixedAmount: {
|
|
31
|
-
amount: this.amount,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
message: this.message,
|
|
35
|
-
} as Discount;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { CartDeliveryOption } from '../shipping/api';
|
|
2
|
-
import { MatchType, Selector } from '../common/Selector';
|
|
3
|
-
import { StringComparisonType } from '../common/Qualifier';
|
|
4
|
-
|
|
5
|
-
export class RateNameSelector extends Selector {
|
|
6
|
-
invert: boolean;
|
|
7
|
-
matchCondition: StringComparisonType;
|
|
8
|
-
names: string[];
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
matchType: MatchType.DOES | MatchType.DOES_NOT,
|
|
12
|
-
matchCondition: StringComparisonType,
|
|
13
|
-
names: string[]
|
|
14
|
-
) {
|
|
15
|
-
super();
|
|
16
|
-
this.invert = matchType == MatchType.DOES_NOT;
|
|
17
|
-
this.matchCondition = matchCondition;
|
|
18
|
-
this.names = names.map((e) => e.toLowerCase());
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
match(subject: unknown): boolean;
|
|
22
|
-
match(subject: CartDeliveryOption) {
|
|
23
|
-
let matchResult;
|
|
24
|
-
|
|
25
|
-
const title = subject?.title?.toLowerCase() || '';
|
|
26
|
-
|
|
27
|
-
switch (this.matchCondition) {
|
|
28
|
-
case StringComparisonType.MATCH:
|
|
29
|
-
matchResult = this.names.includes(title);
|
|
30
|
-
break;
|
|
31
|
-
case StringComparisonType.CONTAINS:
|
|
32
|
-
matchResult =
|
|
33
|
-
this.names.filter((e) => title.indexOf(e) > -1)
|
|
34
|
-
.length > 0;
|
|
35
|
-
break;
|
|
36
|
-
case StringComparisonType.START_WITH:
|
|
37
|
-
matchResult =
|
|
38
|
-
this.names.filter((e) => title.startsWith(e))
|
|
39
|
-
.length > 0;
|
|
40
|
-
break;
|
|
41
|
-
case StringComparisonType.END_WITH:
|
|
42
|
-
matchResult =
|
|
43
|
-
this.names.filter((e) => title.endsWith(e))
|
|
44
|
-
.length > 0;
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (this.invert) {
|
|
49
|
-
return !matchResult;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return matchResult;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { CartDeliveryOption } from './api';
|
|
2
|
-
import { Campaign } from '../common/Campaign';
|
|
3
|
-
import type { DiscountCart } from '../common/DiscountCart';
|
|
4
|
-
import type {
|
|
5
|
-
ApplyDiscount,
|
|
6
|
-
DiscountInterface,
|
|
7
|
-
} from '../common/DiscountInterface';
|
|
8
|
-
import type {
|
|
9
|
-
QualifierBehavior,
|
|
10
|
-
Qualifier,
|
|
11
|
-
} from '../common/Qualifier';
|
|
12
|
-
import type { Selector } from '../common/Selector';
|
|
13
|
-
import type { AndSelector } from '../common/AndSelector';
|
|
14
|
-
import type { OrSelector } from '../common/OrSelector';
|
|
15
|
-
|
|
16
|
-
export class ShippingDiscount extends Campaign {
|
|
17
|
-
discount: DiscountInterface;
|
|
18
|
-
rateSelector: Selector;
|
|
19
|
-
|
|
20
|
-
constructor(
|
|
21
|
-
behavior: QualifierBehavior,
|
|
22
|
-
qualifiers:
|
|
23
|
-
| (Qualifier | AndSelector | OrSelector)[]
|
|
24
|
-
| null,
|
|
25
|
-
discount: DiscountInterface,
|
|
26
|
-
rateSelector: Selector
|
|
27
|
-
) {
|
|
28
|
-
super(behavior, qualifiers);
|
|
29
|
-
this.discount = discount;
|
|
30
|
-
this.rateSelector = rateSelector;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
run(discountCart: DiscountCart) {
|
|
34
|
-
// First we see if this cart qualifies for this discount
|
|
35
|
-
if (this.qualifies(discountCart)) {
|
|
36
|
-
// Now that it qualifies, we can determine the applicableDeliveryOptions
|
|
37
|
-
// to apply discounts to by...
|
|
38
|
-
// Loop through all deliveryGroups
|
|
39
|
-
const applicableDiscounts =
|
|
40
|
-
discountCart.cart.deliveryGroups
|
|
41
|
-
.reduce((deliveryOptions, deliveryGroup) => {
|
|
42
|
-
// Loop through its delivery options
|
|
43
|
-
deliveryGroup.deliveryOptions.forEach((o) => {
|
|
44
|
-
const deliveryOption =
|
|
45
|
-
o as CartDeliveryOption;
|
|
46
|
-
// 2. Looping any deliveryOptions within the group
|
|
47
|
-
if (
|
|
48
|
-
this.rateSelector &&
|
|
49
|
-
this.rateSelector.match(deliveryOption)
|
|
50
|
-
) {
|
|
51
|
-
// if this is a match, we want to apply this discount
|
|
52
|
-
deliveryOptions.push(deliveryOption);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
return deliveryOptions;
|
|
57
|
-
}, [] as CartDeliveryOption[])
|
|
58
|
-
.map((deliveryOption) => {
|
|
59
|
-
return {
|
|
60
|
-
deliveryOption: {
|
|
61
|
-
handle: deliveryOption.handle,
|
|
62
|
-
},
|
|
63
|
-
} as ApplyDiscount;
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
if (applicableDiscounts.length) {
|
|
67
|
-
const discount = this.discount.apply(
|
|
68
|
-
applicableDiscounts
|
|
69
|
-
);
|
|
70
|
-
discountCart.addShippingDiscount(discount);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return discountCart;
|
|
74
|
-
}
|
|
75
|
-
}
|