@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.
Files changed (161) hide show
  1. package/CLAUDE.md +136 -0
  2. package/EXAMPLES.md +384 -0
  3. package/INTEGRATION.md +482 -0
  4. package/README.md +5 -1
  5. package/dist/common/AndSelector.d.ts +11 -0
  6. package/dist/common/AndSelector.d.ts.map +1 -0
  7. package/dist/common/AndSelector.js +30 -0
  8. package/dist/common/Campaign.d.ts +24 -0
  9. package/dist/common/Campaign.d.ts.map +1 -0
  10. package/dist/common/Campaign.js +41 -0
  11. package/dist/common/CampaignConfiguration.d.ts +10 -0
  12. package/dist/common/CampaignConfiguration.d.ts.map +1 -0
  13. package/dist/common/CampaignConfiguration.js +7 -0
  14. package/dist/common/CampaignFactory.d.ts +22 -0
  15. package/dist/common/CampaignFactory.d.ts.map +1 -0
  16. package/dist/common/CampaignFactory.js +95 -0
  17. package/dist/common/CartAmountQualifier.d.ts +22 -0
  18. package/dist/common/CartAmountQualifier.d.ts.map +1 -0
  19. package/dist/common/CartAmountQualifier.js +46 -0
  20. package/dist/common/CartHasItemQualifier.d.ts +21 -0
  21. package/dist/common/CartHasItemQualifier.d.ts.map +1 -0
  22. package/dist/common/CartHasItemQualifier.js +54 -0
  23. package/dist/common/CartQuantityQualifier.d.ts +22 -0
  24. package/dist/common/CartQuantityQualifier.d.ts.map +1 -0
  25. package/dist/common/CartQuantityQualifier.js +62 -0
  26. package/dist/common/ConfigSchema.d.ts +71 -0
  27. package/dist/common/ConfigSchema.d.ts.map +1 -0
  28. package/dist/common/ConfigSchema.js +69 -0
  29. package/dist/common/ConfigValidator.d.ts +29 -0
  30. package/dist/common/ConfigValidator.d.ts.map +1 -0
  31. package/dist/common/ConfigValidator.js +84 -0
  32. package/dist/common/CountryCodeQualifier.d.ts +15 -0
  33. package/dist/common/CountryCodeQualifier.d.ts.map +1 -0
  34. package/dist/common/CountryCodeQualifier.js +30 -0
  35. package/dist/common/CustomerEmailQualifier.d.ts +16 -0
  36. package/dist/common/CustomerEmailQualifier.d.ts.map +1 -0
  37. package/dist/common/CustomerEmailQualifier.js +52 -0
  38. package/dist/common/CustomerSubscriberQualifier.d.ts +18 -0
  39. package/dist/common/CustomerSubscriberQualifier.d.ts.map +1 -0
  40. package/dist/common/CustomerSubscriberQualifier.js +28 -0
  41. package/dist/common/CustomerTagQualifier.d.ts +16 -0
  42. package/dist/common/CustomerTagQualifier.d.ts.map +1 -0
  43. package/dist/common/CustomerTagQualifier.js +45 -0
  44. package/dist/common/DiscountCart.d.ts +23 -0
  45. package/dist/common/DiscountCart.d.ts.map +1 -0
  46. package/dist/common/DiscountCart.js +103 -0
  47. package/dist/common/DiscountInterface.d.ts +17 -0
  48. package/dist/common/DiscountInterface.d.ts.map +1 -0
  49. package/dist/common/DiscountInterface.js +2 -0
  50. package/dist/common/OrSelector.d.ts +11 -0
  51. package/dist/common/OrSelector.d.ts.map +1 -0
  52. package/dist/common/OrSelector.js +30 -0
  53. package/dist/common/PostCartAmountQualifier.d.ts +9 -0
  54. package/dist/common/PostCartAmountQualifier.d.ts.map +1 -0
  55. package/dist/common/PostCartAmountQualifier.js +17 -0
  56. package/dist/common/ProductHandleSelector.d.ts +8 -0
  57. package/dist/common/ProductHandleSelector.d.ts.map +1 -0
  58. package/dist/common/ProductHandleSelector.js +22 -0
  59. package/dist/common/ProductIdSelector.d.ts +8 -0
  60. package/dist/common/ProductIdSelector.d.ts.map +1 -0
  61. package/dist/common/ProductIdSelector.js +22 -0
  62. package/dist/common/ProductTagSelector.d.ts +10 -0
  63. package/dist/common/ProductTagSelector.d.ts.map +1 -0
  64. package/dist/common/ProductTagSelector.js +39 -0
  65. package/dist/common/ProductTypeSelector.d.ts +8 -0
  66. package/dist/common/ProductTypeSelector.d.ts.map +1 -0
  67. package/dist/common/ProductTypeSelector.js +25 -0
  68. package/dist/common/Qualifier.d.ts +30 -0
  69. package/dist/common/Qualifier.d.ts.map +1 -0
  70. package/dist/common/Qualifier.js +61 -0
  71. package/dist/common/SaleItemSelector.d.ts +11 -0
  72. package/dist/common/SaleItemSelector.d.ts.map +1 -0
  73. package/dist/common/SaleItemSelector.js +30 -0
  74. package/dist/common/Selector.d.ts +27 -0
  75. package/dist/common/Selector.d.ts.map +1 -0
  76. package/dist/common/Selector.js +51 -0
  77. package/dist/common/SubscriptionItemSelector.d.ts +7 -0
  78. package/dist/common/SubscriptionItemSelector.d.ts.map +1 -0
  79. package/dist/common/SubscriptionItemSelector.js +19 -0
  80. package/dist/form/CampaignForm.d.ts +1 -0
  81. package/dist/form/CampaignForm.d.ts.map +1 -0
  82. package/dist/form/CampaignForm.js +1 -0
  83. package/{src/index.ts → dist/index.d.ts} +22 -27
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +78 -0
  86. package/dist/lineItem/BuyXGetY.d.ts +18 -0
  87. package/dist/lineItem/BuyXGetY.d.ts.map +1 -0
  88. package/dist/lineItem/BuyXGetY.js +85 -0
  89. package/dist/lineItem/ConditionalDiscount.d.ts +14 -0
  90. package/dist/lineItem/ConditionalDiscount.d.ts.map +1 -0
  91. package/dist/lineItem/ConditionalDiscount.js +81 -0
  92. package/dist/lineItem/FixedItemDiscount.d.ts +9 -0
  93. package/dist/lineItem/FixedItemDiscount.d.ts.map +1 -0
  94. package/dist/lineItem/FixedItemDiscount.js +35 -0
  95. package/dist/lineItem/PercentageDiscount.d.ts +8 -0
  96. package/dist/lineItem/PercentageDiscount.d.ts.map +1 -0
  97. package/dist/lineItem/PercentageDiscount.js +32 -0
  98. package/dist/lineItem/api.d.ts +2026 -0
  99. package/dist/lineItem/api.d.ts.map +1 -0
  100. package/dist/lineItem/api.js +1157 -0
  101. package/dist/shipping/FixedDiscount.d.ts +8 -0
  102. package/dist/shipping/FixedDiscount.d.ts.map +1 -0
  103. package/dist/shipping/FixedDiscount.js +30 -0
  104. package/dist/shipping/RateNameSelector.d.ts +10 -0
  105. package/dist/shipping/RateNameSelector.d.ts.map +1 -0
  106. package/dist/shipping/RateNameSelector.js +45 -0
  107. package/dist/shipping/ShippingDiscount.d.ts +14 -0
  108. package/dist/shipping/ShippingDiscount.d.ts.map +1 -0
  109. package/dist/shipping/ShippingDiscount.js +48 -0
  110. package/dist/shipping/api.d.ts +2019 -0
  111. package/dist/shipping/api.d.ts.map +1 -0
  112. package/dist/shipping/api.js +1147 -0
  113. package/package.json +26 -7
  114. package/migrate.ts +0 -64
  115. package/src/common/AndSelector.ts +0 -42
  116. package/src/common/Campaign.ts +0 -70
  117. package/src/common/CampaignConfiguration.ts +0 -10
  118. package/src/common/CampaignFactory.ts +0 -234
  119. package/src/common/CartAmountQualifier.ts +0 -64
  120. package/src/common/CartHasItemQualifier.ts +0 -80
  121. package/src/common/CartQuantityQualifier.ts +0 -94
  122. package/src/common/CountryCodeQualifier.ts +0 -49
  123. package/src/common/CustomerEmailQualifier.ts +0 -67
  124. package/src/common/CustomerSubscriberQualifier.ts +0 -32
  125. package/src/common/CustomerTagQualifier.ts +0 -69
  126. package/src/common/DiscountCart.ts +0 -161
  127. package/src/common/DiscountInterface.ts +0 -26
  128. package/src/common/OrSelector.ts +0 -40
  129. package/src/common/PostCartAmountQualifier.ts +0 -21
  130. package/src/common/ProductHandleSelector.ts +0 -31
  131. package/src/common/ProductIdSelector.ts +0 -34
  132. package/src/common/ProductTagSelector.ts +0 -63
  133. package/src/common/ProductTypeSelector.ts +0 -40
  134. package/src/common/Qualifier.ts +0 -67
  135. package/src/common/SaleItemSelector.ts +0 -36
  136. package/src/common/Selector.ts +0 -66
  137. package/src/common/SubscriptionItemSelector.ts +0 -23
  138. package/src/lineItem/BuyXGetY.ts +0 -131
  139. package/src/lineItem/ConditionalDiscount.ts +0 -102
  140. package/src/lineItem/FixedItemDiscount.ts +0 -51
  141. package/src/lineItem/PercentageDiscount.ts +0 -44
  142. package/src/lineItem/api.ts +0 -2103
  143. package/src/shipping/FixedDiscount.ts +0 -37
  144. package/src/shipping/RateNameSelector.ts +0 -54
  145. package/src/shipping/ShippingDiscount.ts +0 -75
  146. package/src/shipping/api.ts +0 -2014
  147. package/tests/AndSelector.test.ts +0 -27
  148. package/tests/CartQuantityQualifier.test.ts +0 -381
  149. package/tests/CountryCodeQualifier.test.ts +0 -55
  150. package/tests/CustomerSubscriberQualifier.test.ts +0 -101
  151. package/tests/CustomerTagQualifier.test.ts +0 -71
  152. package/tests/DiscountCart.test.ts +0 -115
  153. package/tests/OrSelector.test.ts +0 -27
  154. package/tests/ProductIdSelector.test.ts +0 -83
  155. package/tests/ProductTagSelector.test.ts +0 -75
  156. package/tests/Qualifier.test.ts +0 -193
  157. package/tests/RateNameSelector.test.ts +0 -107
  158. package/tests/SaleItemSelector.test.ts +0 -113
  159. package/tests/Selector.test.ts +0 -83
  160. package/tests/ShippingDiscount.test.ts +0 -147
  161. package/tsconfig.json +0 -25
@@ -1,113 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- CartLine,
4
- CurrencyCode,
5
- WeightUnit,
6
- } from '../src/lineItem/api';
7
- import _ from 'lodash';
8
- import {
9
- SaleItemSelector,
10
- SaleItemSelectorMatchType,
11
- } from '../src/common/SaleItemSelector';
12
-
13
- describe('SaleItemSelector', () => {
14
- it('returns true when item is on sale and we pass :IS', () => {
15
- const isSelector = new SaleItemSelector(
16
- SaleItemSelectorMatchType.IS
17
- );
18
- const isResult = isSelector.match(lineItemOnSale);
19
- expect(isResult).toEqual(true);
20
- });
21
-
22
- it('returns false when item is on sale and we pass :NOT', () => {
23
- const notSelector = new SaleItemSelector(
24
- SaleItemSelectorMatchType.NOT
25
- );
26
- const notResult = notSelector.match(lineItemOnSale);
27
- expect(notResult).toEqual(false);
28
- });
29
-
30
- it('returns false when item is NOT on sale and we pass :IS', () => {
31
- const isSelector = new SaleItemSelector(
32
- SaleItemSelectorMatchType.IS
33
- );
34
- const isResult = isSelector.match(lineItemNotOnSale);
35
- expect(isResult).toEqual(false);
36
- });
37
-
38
- it('returns true when :NOT matchtype passed and item is NOT on sale', () => {
39
- const notSelector = new SaleItemSelector(
40
- SaleItemSelectorMatchType.NOT
41
- );
42
- const notResult = notSelector.match(lineItemNotOnSale);
43
- expect(notResult).toEqual(true);
44
- });
45
-
46
- const lineItemOnSale: CartLine = {
47
- id: 'gid://shopify/CartLine/111111',
48
- cost: {
49
- amountPerQuantity: {
50
- amount: '8.0',
51
- currencyCode: CurrencyCode.Usd,
52
- },
53
- subtotalAmount: {
54
- amount: '64.0',
55
- currencyCode: CurrencyCode.Usd,
56
- },
57
- totalAmount: {
58
- amount: '64.0',
59
- currencyCode: CurrencyCode.Usd,
60
- },
61
- compareAtAmountPerQuantity: {
62
- amount: '10.0',
63
- currencyCode: CurrencyCode.Usd,
64
- },
65
- },
66
- quantity: 8,
67
- merchandise: {
68
- __typename: 'ProductVariant',
69
- id: 'gid://shopify/ProductVariant/43900890579178',
70
- product: {
71
- title: 'Wristband Product',
72
- handle: 'wristband-product',
73
- id: 'gid://shopify/Product/8069766840554',
74
- productType: 'Wristband - Single',
75
- inAnyCollection: false,
76
- inCollections: [],
77
- hasAnyTag: false,
78
- isGiftCard: false,
79
- hasTags: [
80
- {
81
- tag: 'meta-exclude-gift',
82
- hasTag: false,
83
- },
84
- {
85
- tag: 'feel-good-mystery-3-pack',
86
- hasTag: true,
87
- },
88
- ],
89
- },
90
- requiresShipping: false,
91
- weightUnit: WeightUnit.Pounds,
92
- },
93
- };
94
-
95
- const lineItemNotOnSale = _.cloneDeep(lineItemOnSale);
96
- _.merge(lineItemNotOnSale, {
97
- cost: {
98
- amountPerQuantity: {
99
- amount: '8.0',
100
- currencyCode: CurrencyCode.Usd,
101
- },
102
- subtotalAmount: {
103
- amount: '64.0',
104
- currencyCode: CurrencyCode.Usd,
105
- },
106
- totalAmount: {
107
- amount: '64.0',
108
- currencyCode: CurrencyCode.Usd,
109
- },
110
- compareAtAmountPerQuantity: null,
111
- },
112
- } as CartLine);
113
- });
@@ -1,83 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import type { CartLine } from '../src/lineItem/api';
3
- import { Selector } from '../src/common/Selector';
4
- import { StringComparisonType } from '../src/common/Qualifier';
5
-
6
- export enum MatchType {
7
- 'ALL' = ':all',
8
- 'IS_ONE' = ':is_one',
9
- 'NOT_ONE' = ':not_one',
10
- }
11
-
12
- describe('Selector', () => {
13
- it('always returns true when calling match method', () => {
14
- const selector = new Selector();
15
- expect(selector.match({} as CartLine)).toBeTruthy();
16
- });
17
-
18
- it('is true when part of the string is present', () => {
19
- const selector = new Selector();
20
- const result = selector.partialMatch(
21
- StringComparisonType.CONTAINS,
22
- ['tag1', 'tag3'],
23
- ['ag', 'a']
24
- );
25
-
26
- expect(result).toEqual(true);
27
- });
28
-
29
- it('is false when part of the string is not present', () => {
30
- const selector = new Selector();
31
- const result = selector.partialMatch(
32
- StringComparisonType.CONTAINS,
33
- ['tag1', 'tag3'],
34
- ['sandwich', 'marshmallow']
35
- );
36
-
37
- expect(result).toEqual(false);
38
- });
39
-
40
- it('is true when it starts with a string', () => {
41
- const selector = new Selector();
42
- const result = selector.partialMatch(
43
- StringComparisonType.START_WITH,
44
- ['tag1', 'tag3'],
45
- ['ta', 'tag']
46
- );
47
-
48
- expect(result).toEqual(true);
49
- });
50
-
51
- it('is false when it does NOT start with that string', () => {
52
- const selector = new Selector();
53
- const result = selector.partialMatch(
54
- StringComparisonType.START_WITH,
55
- ['tag1', 'tag3'],
56
- ['ag1', 'ag3']
57
- );
58
-
59
- expect(result).toEqual(false);
60
- });
61
-
62
- it('is true when it ends with a string', () => {
63
- const selector = new Selector();
64
- const result = selector.partialMatch(
65
- StringComparisonType.END_WITH,
66
- ['tag1', 'tag3'],
67
- ['ag3', 'coconuts']
68
- );
69
-
70
- expect(result).toEqual(true);
71
- });
72
-
73
- it('is false when it does NOT end with that string', () => {
74
- const selector = new Selector();
75
- const result = selector.partialMatch(
76
- StringComparisonType.END_WITH,
77
- ['tag1', 'tag3'],
78
- ['ta', 'tag']
79
- );
80
-
81
- expect(result).toEqual(false);
82
- });
83
- });
@@ -1,147 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import _ from 'lodash';
3
- import {
4
- DeliveryMethod,
5
- Discount,
6
- RunInput,
7
- } from '../src/shipping/api';
8
- import { ShippingDiscount } from '../src/shipping/ShippingDiscount';
9
- import { MatchType } from '../src/common/Selector';
10
- import {
11
- NumericalComparisonType,
12
- QualifierBehavior,
13
- StringComparisonType,
14
- } from '../src/common/Qualifier';
15
- import {
16
- CartAmountQualifier,
17
- CartAmountBehavior,
18
- } from '../src/common/CartAmountQualifier';
19
- import { FixedDiscount } from '../src/shipping/FixedDiscount';
20
- import { RateNameSelector } from '../src/shipping/RateNameSelector';
21
- import { DiscountCart } from '../src/common/DiscountCart';
22
-
23
- describe('ShippingDiscount', () => {
24
- it('is true when it matches one of', () => {
25
- const campaign = new ShippingDiscount(
26
- QualifierBehavior.ALL,
27
- [
28
- new CartAmountQualifier(
29
- CartAmountBehavior.CART,
30
- NumericalComparisonType.GREATER_THAN_OR_EQUAL,
31
- 50
32
- ),
33
- ],
34
- new FixedDiscount(10, 'ZOXPASS Discount'),
35
- new RateNameSelector(
36
- MatchType.DOES,
37
- StringComparisonType.CONTAINS,
38
- ['FedEx']
39
- )
40
- );
41
-
42
- // @ts-ignore
43
- const discountCart = new DiscountCart(runInput.cart);
44
- campaign.run(discountCart);
45
-
46
- const expectedResult: Discount[] = [
47
- {
48
- message: 'ZOXPASS Discount',
49
- targets: [
50
- {
51
- deliveryOption: {
52
- handle: 'test-handle',
53
- },
54
- },
55
- ],
56
- value: {
57
- fixedAmount: {
58
- amount: 10,
59
- },
60
- },
61
- },
62
- ];
63
-
64
- expect(discountCart.discounts).toEqual(expectedResult);
65
- });
66
-
67
- const runInput = {
68
- cart: {
69
- buyerIdentity: {
70
- customer: {
71
- email: 'sebi@zox.la',
72
- isActiveSubscriber: false,
73
- hasTags: [
74
- {
75
- tag: 'Active product subscription',
76
- hasTag: true,
77
- },
78
- ],
79
- },
80
- },
81
- cost: {
82
- amountPerQuantity: {
83
- amount: '8.0',
84
- },
85
- subtotalAmount: {
86
- amount: '64.0',
87
- },
88
- totalAmount: {
89
- amount: '64.0',
90
- },
91
- compareAtAmountPerQuantity: null,
92
- },
93
- lines: [
94
- {
95
- cost: {
96
- amountPerQuantity: {
97
- amount: '8.0',
98
- },
99
- subtotalAmount: {
100
- amount: '64.0',
101
- },
102
- totalAmount: {
103
- amount: '64.0',
104
- },
105
- compareAtAmountPerQuantity: null,
106
- },
107
- quantity: 8,
108
- merchandise: {
109
- __typename: 'ProductVariant',
110
- id: 'gid://shopify/ProductVariant/12345',
111
- product: {
112
- id: 'gid://shopify/Product/67890',
113
- productType: 'Wristband - Single',
114
- hasTags: [
115
- {
116
- tag: 'meta-exclude-gift',
117
- hasTag: false,
118
- },
119
- {
120
- tag: 'mystery-3-pack',
121
- hasTag: true,
122
- },
123
- ],
124
- },
125
- },
126
- },
127
- ],
128
- deliveryGroups: [
129
- {
130
- deliveryOptions: [
131
- {
132
- deliveryMethodType: DeliveryMethod.Shipping,
133
- handle: 'test-handle',
134
- title: 'FedEx - 10% Shipping',
135
- },
136
- ],
137
- },
138
- ],
139
- },
140
- discountNode: {
141
- metafield: {
142
- value:
143
- '{"campaigns":[{"__type":"ShippingDiscount","inputs":[":all",[{"__type":"CartAmountQualifier","inputs":[":cart",":greater_than_or_equal",50]}],{"__type":"FixedDiscount","inputs":[10,"ZOXPASS Discount"]},{"__type":"RateNameSelector","inputs":[":does",":contains",["FedEx"]]}]}]}',
144
- },
145
- },
146
- } as unknown;
147
- });
package/tsconfig.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "include": ["**/*.ts", "**/*.tsx"],
3
- "compilerOptions": {
4
- "lib": ["DOM", "DOM.Iterable", "ES2019"],
5
- "strict": true,
6
- "skipLibCheck": true,
7
- "isolatedModules": true,
8
- "allowSyntheticDefaultImports": true,
9
- "removeComments": false,
10
- "forceConsistentCasingInFileNames": true,
11
- "noEmit": true,
12
- "allowJs": true,
13
- "jsx": "react-jsx",
14
- "module": "Node16",
15
- "moduleResolution": "Node16",
16
- "target": "ES2019",
17
- "baseUrl": ".",
18
- "paths": {
19
- "~/*": ["./src/*"]
20
- },
21
- "types": [
22
- "node", "@shopify/app-bridge-types"
23
- ]
24
- }
25
- }