@anker-in/lib 0.0.0-beta.1 → 0.0.0-beta.2

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 (247) hide show
  1. package/.gitkeep +0 -0
  2. package/.turbo/turbo-build.log +22 -0
  3. package/.turbo/turbo-test.log +5 -0
  4. package/dist/cjs/context/HeadlessProvider.js +1 -1
  5. package/dist/cjs/context/HeadlessProvider.js.map +2 -2
  6. package/dist/context/HeadlessProvider.d.ts.map +1 -1
  7. package/dist/esm/cart/const.js +2 -0
  8. package/dist/esm/cart/const.js.map +7 -0
  9. package/dist/esm/cart/hooks/basic/useBuyNow.js +2 -0
  10. package/dist/esm/cart/hooks/basic/useBuyNow.js.map +7 -0
  11. package/dist/esm/cart/index.js +2 -0
  12. package/dist/esm/cart/index.js.map +7 -0
  13. package/dist/esm/cart/track/fbq.js +2 -0
  14. package/dist/esm/cart/track/fbq.js.map +7 -0
  15. package/dist/esm/cart/types/index.js +1 -0
  16. package/dist/esm/cart/types/index.js.map +7 -0
  17. package/dist/esm/cart/utils/index.js +2 -0
  18. package/dist/esm/cart/utils/index.js.map +7 -0
  19. package/dist/esm/context/HeadlessProvider.js +2 -0
  20. package/dist/esm/context/HeadlessProvider.js.map +7 -0
  21. package/dist/esm/context/config.js +1 -0
  22. package/dist/esm/context/config.js.map +7 -0
  23. package/dist/esm/context/index.js +2 -0
  24. package/dist/esm/context/index.js.map +7 -0
  25. package/dist/esm/index.js +2 -0
  26. package/dist/esm/index.js.map +7 -0
  27. package/dist/esm/package.json +3 -0
  28. package/dist/esm/shopify/fetchers/add-cart-lines.js +2 -0
  29. package/dist/esm/shopify/fetchers/add-cart-lines.js.map +7 -0
  30. package/dist/esm/shopify/fetchers/create-cart.js +2 -0
  31. package/dist/esm/shopify/fetchers/create-cart.js.map +7 -0
  32. package/dist/esm/shopify/fetchers/get-cart.js +2 -0
  33. package/dist/esm/shopify/fetchers/get-cart.js.map +7 -0
  34. package/dist/esm/shopify/fetchers/get-products-by-handles.js +2 -0
  35. package/dist/esm/shopify/fetchers/get-products-by-handles.js.map +7 -0
  36. package/dist/esm/shopify/fetchers/index.js +2 -0
  37. package/dist/esm/shopify/fetchers/index.js.map +7 -0
  38. package/dist/esm/shopify/fetchers/remove-cart-lines.js +2 -0
  39. package/dist/esm/shopify/fetchers/remove-cart-lines.js.map +7 -0
  40. package/dist/esm/shopify/fetchers/update-cart-attributes.js +2 -0
  41. package/dist/esm/shopify/fetchers/update-cart-attributes.js.map +7 -0
  42. package/dist/esm/shopify/fetchers/update-cart-buyer-identity.js +2 -0
  43. package/dist/esm/shopify/fetchers/update-cart-buyer-identity.js.map +7 -0
  44. package/dist/esm/shopify/fetchers/update-cart-codes.js +2 -0
  45. package/dist/esm/shopify/fetchers/update-cart-codes.js.map +7 -0
  46. package/dist/esm/shopify/fetchers/update-cart-lines.js +2 -0
  47. package/dist/esm/shopify/fetchers/update-cart-lines.js.map +7 -0
  48. package/dist/esm/shopify/fragments/article.js +50 -0
  49. package/dist/esm/shopify/fragments/article.js.map +7 -0
  50. package/dist/esm/shopify/fragments/blog.js +11 -0
  51. package/dist/esm/shopify/fragments/blog.js.map +7 -0
  52. package/dist/esm/shopify/fragments/cart.js +189 -0
  53. package/dist/esm/shopify/fragments/cart.js.map +7 -0
  54. package/dist/esm/shopify/fragments/collection.js +16 -0
  55. package/dist/esm/shopify/fragments/collection.js.map +7 -0
  56. package/dist/esm/shopify/fragments/image.js +9 -0
  57. package/dist/esm/shopify/fragments/image.js.map +7 -0
  58. package/dist/esm/shopify/fragments/index.js +2 -0
  59. package/dist/esm/shopify/fragments/index.js.map +7 -0
  60. package/dist/esm/shopify/fragments/metafields.js +16 -0
  61. package/dist/esm/shopify/fragments/metafields.js.map +7 -0
  62. package/dist/esm/shopify/fragments/page-info.js +9 -0
  63. package/dist/esm/shopify/fragments/page-info.js.map +7 -0
  64. package/dist/esm/shopify/fragments/page.js +13 -0
  65. package/dist/esm/shopify/fragments/page.js.map +7 -0
  66. package/dist/esm/shopify/fragments/product.js +72 -0
  67. package/dist/esm/shopify/fragments/product.js.map +7 -0
  68. package/dist/esm/shopify/fragments/seo.js +7 -0
  69. package/dist/esm/shopify/fragments/seo.js.map +7 -0
  70. package/dist/esm/shopify/fragments/variant.js +30 -0
  71. package/dist/esm/shopify/fragments/variant.js.map +7 -0
  72. package/dist/esm/shopify/gql/fragment-masking.js +2 -0
  73. package/dist/esm/shopify/gql/fragment-masking.js.map +7 -0
  74. package/dist/esm/shopify/gql/gql.js +2 -0
  75. package/dist/esm/shopify/gql/gql.js.map +7 -0
  76. package/dist/esm/shopify/gql/graphql.js +2 -0
  77. package/dist/esm/shopify/gql/graphql.js.map +7 -0
  78. package/dist/esm/shopify/gql/index.js +2 -0
  79. package/dist/esm/shopify/gql/index.js.map +7 -0
  80. package/dist/esm/shopify/hooks/index.js +2 -0
  81. package/dist/esm/shopify/hooks/index.js.map +7 -0
  82. package/dist/esm/shopify/hooks/useProductsByHandles.js +2 -0
  83. package/dist/esm/shopify/hooks/useProductsByHandles.js.map +7 -0
  84. package/dist/esm/shopify/index.js +2 -0
  85. package/dist/esm/shopify/index.js.map +7 -0
  86. package/dist/esm/shopify/mutations/add-cart-lines.js +15 -0
  87. package/dist/esm/shopify/mutations/add-cart-lines.js.map +7 -0
  88. package/dist/esm/shopify/mutations/create-cart.js +21 -0
  89. package/dist/esm/shopify/mutations/create-cart.js.map +7 -0
  90. package/dist/esm/shopify/mutations/remove-cart-items.js +15 -0
  91. package/dist/esm/shopify/mutations/remove-cart-items.js.map +7 -0
  92. package/dist/esm/shopify/mutations/update-cart-attributes.js +15 -0
  93. package/dist/esm/shopify/mutations/update-cart-attributes.js.map +7 -0
  94. package/dist/esm/shopify/mutations/update-cart-buyer-identity.js +15 -0
  95. package/dist/esm/shopify/mutations/update-cart-buyer-identity.js.map +7 -0
  96. package/dist/esm/shopify/mutations/update-cart-discount-code.js +15 -0
  97. package/dist/esm/shopify/mutations/update-cart-discount-code.js.map +7 -0
  98. package/dist/esm/shopify/mutations/update-cart-items.js +15 -0
  99. package/dist/esm/shopify/mutations/update-cart-items.js.map +7 -0
  100. package/dist/esm/shopify/queries/get-cart.js +13 -0
  101. package/dist/esm/shopify/queries/get-cart.js.map +7 -0
  102. package/dist/esm/shopify/queries/get-product-by-handles.js +29 -0
  103. package/dist/esm/shopify/queries/get-product-by-handles.js.map +7 -0
  104. package/dist/esm/shopify/queries/index.js +2 -0
  105. package/dist/esm/shopify/queries/index.js.map +7 -0
  106. package/dist/esm/shopify/types/article.js +1 -0
  107. package/dist/esm/shopify/types/article.js.map +7 -0
  108. package/dist/esm/shopify/types/cart.js +1 -0
  109. package/dist/esm/shopify/types/cart.js.map +7 -0
  110. package/dist/esm/shopify/types/checkout.js +1 -0
  111. package/dist/esm/shopify/types/checkout.js.map +7 -0
  112. package/dist/esm/shopify/types/collection.js +1 -0
  113. package/dist/esm/shopify/types/collection.js.map +7 -0
  114. package/dist/esm/shopify/types/common.js +1 -0
  115. package/dist/esm/shopify/types/common.js.map +7 -0
  116. package/dist/esm/shopify/types/config.js +1 -0
  117. package/dist/esm/shopify/types/config.js.map +7 -0
  118. package/dist/esm/shopify/types/customer.js +1 -0
  119. package/dist/esm/shopify/types/customer.js.map +7 -0
  120. package/dist/esm/shopify/types/fetcher.js +2 -0
  121. package/dist/esm/shopify/types/fetcher.js.map +7 -0
  122. package/dist/esm/shopify/types/index.js +2 -0
  123. package/dist/esm/shopify/types/index.js.map +7 -0
  124. package/dist/esm/shopify/types/page.js +1 -0
  125. package/dist/esm/shopify/types/page.js.map +7 -0
  126. package/dist/esm/shopify/types/product.js +1 -0
  127. package/dist/esm/shopify/types/product.js.map +7 -0
  128. package/dist/esm/shopify/types/search.js +1 -0
  129. package/dist/esm/shopify/types/search.js.map +7 -0
  130. package/dist/esm/shopify/types/site.js +1 -0
  131. package/dist/esm/shopify/types/site.js.map +7 -0
  132. package/dist/esm/shopify/types/type-helper.js +1 -0
  133. package/dist/esm/shopify/types/type-helper.js.map +7 -0
  134. package/dist/esm/shopify/utils/colors.js +2 -0
  135. package/dist/esm/shopify/utils/colors.js.map +7 -0
  136. package/dist/esm/shopify/utils/const.js +2 -0
  137. package/dist/esm/shopify/utils/const.js.map +7 -0
  138. package/dist/esm/shopify/utils/cookie.js +2 -0
  139. package/dist/esm/shopify/utils/cookie.js.map +7 -0
  140. package/dist/esm/shopify/utils/errors.js +3 -0
  141. package/dist/esm/shopify/utils/errors.js.map +7 -0
  142. package/dist/esm/shopify/utils/fetch-graphql-api.js +3 -0
  143. package/dist/esm/shopify/utils/fetch-graphql-api.js.map +7 -0
  144. package/dist/esm/shopify/utils/handle-fetch-response.js +2 -0
  145. package/dist/esm/shopify/utils/handle-fetch-response.js.map +7 -0
  146. package/dist/esm/shopify/utils/helper.js +2 -0
  147. package/dist/esm/shopify/utils/helper.js.map +7 -0
  148. package/dist/esm/shopify/utils/normalize/cart.js +2 -0
  149. package/dist/esm/shopify/utils/normalize/cart.js.map +7 -0
  150. package/dist/esm/shopify/utils/normalize/customer.js +2 -0
  151. package/dist/esm/shopify/utils/normalize/customer.js.map +7 -0
  152. package/dist/esm/shopify/utils/normalize/index.js +2 -0
  153. package/dist/esm/shopify/utils/normalize/index.js.map +7 -0
  154. package/dist/esm/shopify/utils/normalize/metafield.js +2 -0
  155. package/dist/esm/shopify/utils/normalize/metafield.js.map +7 -0
  156. package/dist/esm/shopify/utils/normalize/product.js +2 -0
  157. package/dist/esm/shopify/utils/normalize/product.js.map +7 -0
  158. package/dist/esm/shopify/utils/store.js +2 -0
  159. package/dist/esm/shopify/utils/store.js.map +7 -0
  160. package/dist/esm/shopify/utils/type-helper.js +1 -0
  161. package/dist/esm/shopify/utils/type-helper.js.map +7 -0
  162. package/esbuild-cjs.mjs +23 -0
  163. package/esbuild-esm.mjs +30 -0
  164. package/jest.config.ts +12 -0
  165. package/package.json +10 -13
  166. package/src/cart/const.ts +23 -0
  167. package/src/cart/hooks/basic/useBuyNow.ts +105 -0
  168. package/src/cart/index.ts +19 -0
  169. package/src/cart/track/fbq.ts +63 -0
  170. package/src/cart/types/index.ts +25 -0
  171. package/src/cart/utils/index.ts +22 -0
  172. package/src/context/HeadlessProvider.tsx +30 -0
  173. package/src/context/config.ts +10 -0
  174. package/src/context/index.ts +3 -0
  175. package/src/index.ts +22 -0
  176. package/src/shopify/fetchers/add-cart-lines.ts +53 -0
  177. package/src/shopify/fetchers/create-cart.ts +43 -0
  178. package/src/shopify/fetchers/get-cart.ts +48 -0
  179. package/src/shopify/fetchers/get-products-by-handles.ts +48 -0
  180. package/src/shopify/fetchers/index.ts +10 -0
  181. package/src/shopify/fetchers/remove-cart-lines.ts +31 -0
  182. package/src/shopify/fetchers/update-cart-attributes.ts +29 -0
  183. package/src/shopify/fetchers/update-cart-buyer-identity.ts +32 -0
  184. package/src/shopify/fetchers/update-cart-codes.ts +32 -0
  185. package/src/shopify/fetchers/update-cart-lines.ts +42 -0
  186. package/src/shopify/fragments/article.ts +51 -0
  187. package/src/shopify/fragments/blog.ts +10 -0
  188. package/src/shopify/fragments/cart.ts +193 -0
  189. package/src/shopify/fragments/collection.ts +15 -0
  190. package/src/shopify/fragments/image.ts +8 -0
  191. package/src/shopify/fragments/index.ts +11 -0
  192. package/src/shopify/fragments/metafields.ts +17 -0
  193. package/src/shopify/fragments/page-info.ts +8 -0
  194. package/src/shopify/fragments/page.ts +12 -0
  195. package/src/shopify/fragments/product.ts +71 -0
  196. package/src/shopify/fragments/seo.ts +6 -0
  197. package/src/shopify/fragments/variant.ts +29 -0
  198. package/src/shopify/gql/fragment-masking.ts +85 -0
  199. package/src/shopify/gql/gql.ts +110 -0
  200. package/src/shopify/gql/graphql.ts +11780 -0
  201. package/src/shopify/gql/index.ts +4 -0
  202. package/src/shopify/hooks/index.ts +1 -0
  203. package/src/shopify/hooks/useProductsByHandles.ts +24 -0
  204. package/src/shopify/index.ts +5 -0
  205. package/src/shopify/mutations/add-cart-lines.ts +16 -0
  206. package/src/shopify/mutations/create-cart.ts +22 -0
  207. package/src/shopify/mutations/remove-cart-items.ts +16 -0
  208. package/src/shopify/mutations/update-cart-attributes.ts +16 -0
  209. package/src/shopify/mutations/update-cart-buyer-identity.ts +16 -0
  210. package/src/shopify/mutations/update-cart-discount-code.ts +16 -0
  211. package/src/shopify/mutations/update-cart-items.ts +16 -0
  212. package/src/shopify/queries/get-cart.ts +14 -0
  213. package/src/shopify/queries/get-product-by-handles.ts +32 -0
  214. package/src/shopify/queries/index.ts +2 -0
  215. package/src/shopify/types/article.ts +46 -0
  216. package/src/shopify/types/cart.ts +204 -0
  217. package/src/shopify/types/checkout.ts +44 -0
  218. package/src/shopify/types/collection.ts +104 -0
  219. package/src/shopify/types/common.ts +53 -0
  220. package/src/shopify/types/config.ts +14 -0
  221. package/src/shopify/types/customer.ts +31 -0
  222. package/src/shopify/types/fetcher.ts +67 -0
  223. package/src/shopify/types/index.ts +11 -0
  224. package/src/shopify/types/page.ts +45 -0
  225. package/src/shopify/types/product.ts +176 -0
  226. package/src/shopify/types/search.ts +62 -0
  227. package/src/shopify/types/site.ts +38 -0
  228. package/src/shopify/types/type-helper.ts +5 -0
  229. package/src/shopify/utils/colors.ts +206 -0
  230. package/src/shopify/utils/const.ts +115 -0
  231. package/src/shopify/utils/cookie.ts +28 -0
  232. package/src/shopify/utils/errors.ts +65 -0
  233. package/src/shopify/utils/fetch-graphql-api.ts +67 -0
  234. package/src/shopify/utils/handle-fetch-response.ts +60 -0
  235. package/src/shopify/utils/helper.ts +89 -0
  236. package/src/shopify/utils/normalize/cart.ts +106 -0
  237. package/src/shopify/utils/normalize/customer.ts +18 -0
  238. package/src/shopify/utils/normalize/index.ts +2 -0
  239. package/src/shopify/utils/normalize/metafield.ts +69 -0
  240. package/src/shopify/utils/normalize/product.ts +193 -0
  241. package/src/shopify/utils/store.ts +5 -0
  242. package/src/shopify/utils/type-helper.ts +7 -0
  243. package/tsconfig.json +20 -0
  244. package/tsup.config.ts +17 -0
  245. package/dist/index.esm.js +0 -1669
  246. package/dist/index.js +0 -1679
  247. package/dist/index.mjs +0 -1669
package/dist/index.js DELETED
@@ -1,1679 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJS = (cb, mod) => function __require() {
9
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
- };
11
- var __export = (target, all) => {
12
- for (var name in all)
13
- __defProp(target, name, { get: all[name], enumerable: true });
14
- };
15
- var __copyProps = (to, from, except, desc) => {
16
- if (from && typeof from === "object" || typeof from === "function") {
17
- for (let key of __getOwnPropNames(from))
18
- if (!__hasOwnProp.call(to, key) && key !== except)
19
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
- }
21
- return to;
22
- };
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
- mod
30
- ));
31
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
-
33
- // ../../node_modules/.pnpm/lodash.random@3.2.0/node_modules/lodash.random/index.js
34
- var require_lodash = __commonJS({
35
- "../../node_modules/.pnpm/lodash.random@3.2.0/node_modules/lodash.random/index.js"(exports, module2) {
36
- var INFINITY = 1 / 0;
37
- var MAX_SAFE_INTEGER = 9007199254740991;
38
- var MAX_INTEGER = 17976931348623157e292;
39
- var NAN = 0 / 0;
40
- var funcTag = "[object Function]";
41
- var genTag = "[object GeneratorFunction]";
42
- var symbolTag = "[object Symbol]";
43
- var reTrim = /^\s+|\s+$/g;
44
- var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
45
- var reIsBinary = /^0b[01]+$/i;
46
- var reIsOctal = /^0o[0-7]+$/i;
47
- var reIsUint = /^(?:0|[1-9]\d*)$/;
48
- var freeParseFloat = parseFloat;
49
- var freeParseInt = parseInt;
50
- var objectProto = Object.prototype;
51
- var objectToString = objectProto.toString;
52
- var nativeFloor = Math.floor;
53
- var nativeMin = Math.min;
54
- var nativeRandom = Math.random;
55
- function baseRandom(lower, upper) {
56
- return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
57
- }
58
- function isIndex(value, length) {
59
- length = length == null ? MAX_SAFE_INTEGER : length;
60
- return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
61
- }
62
- function isIterateeCall(value, index, object) {
63
- if (!isObject(object)) {
64
- return false;
65
- }
66
- var type = typeof index;
67
- if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) {
68
- return eq(object[index], value);
69
- }
70
- return false;
71
- }
72
- function eq(value, other) {
73
- return value === other || value !== value && other !== other;
74
- }
75
- function isArrayLike(value) {
76
- return value != null && isLength(value.length) && !isFunction(value);
77
- }
78
- function isFunction(value) {
79
- var tag = isObject(value) ? objectToString.call(value) : "";
80
- return tag == funcTag || tag == genTag;
81
- }
82
- function isLength(value) {
83
- return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
84
- }
85
- function isObject(value) {
86
- var type = typeof value;
87
- return !!value && (type == "object" || type == "function");
88
- }
89
- function isObjectLike(value) {
90
- return !!value && typeof value == "object";
91
- }
92
- function isSymbol(value) {
93
- return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag;
94
- }
95
- function toFinite(value) {
96
- if (!value) {
97
- return value === 0 ? value : 0;
98
- }
99
- value = toNumber(value);
100
- if (value === INFINITY || value === -INFINITY) {
101
- var sign = value < 0 ? -1 : 1;
102
- return sign * MAX_INTEGER;
103
- }
104
- return value === value ? value : 0;
105
- }
106
- function toNumber(value) {
107
- if (typeof value == "number") {
108
- return value;
109
- }
110
- if (isSymbol(value)) {
111
- return NAN;
112
- }
113
- if (isObject(value)) {
114
- var other = typeof value.valueOf == "function" ? value.valueOf() : value;
115
- value = isObject(other) ? other + "" : other;
116
- }
117
- if (typeof value != "string") {
118
- return value === 0 ? value : +value;
119
- }
120
- value = value.replace(reTrim, "");
121
- var isBinary = reIsBinary.test(value);
122
- return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
123
- }
124
- function random2(lower, upper, floating) {
125
- if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) {
126
- upper = floating = void 0;
127
- }
128
- if (floating === void 0) {
129
- if (typeof upper == "boolean") {
130
- floating = upper;
131
- upper = void 0;
132
- } else if (typeof lower == "boolean") {
133
- floating = lower;
134
- lower = void 0;
135
- }
136
- }
137
- if (lower === void 0 && upper === void 0) {
138
- lower = 0;
139
- upper = 1;
140
- } else {
141
- lower = toFinite(lower);
142
- if (upper === void 0) {
143
- upper = lower;
144
- lower = 0;
145
- } else {
146
- upper = toFinite(upper);
147
- }
148
- }
149
- if (lower > upper) {
150
- var temp = lower;
151
- lower = upper;
152
- upper = temp;
153
- }
154
- if (floating || lower % 1 || upper % 1) {
155
- var rand = nativeRandom();
156
- return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper);
157
- }
158
- return baseRandom(lower, upper);
159
- }
160
- module2.exports = random2;
161
- }
162
- });
163
-
164
- // src/index.ts
165
- var src_exports = {};
166
- __export(src_exports, {
167
- HeadlessProvider: () => HeadlessProvider,
168
- addCartLines: () => addCartLines,
169
- addToCartFbq: () => addToCartFbq,
170
- articleFragment: () => articleFragment,
171
- articleWithoutContentFragment: () => articleWithoutContentFragment,
172
- blogFragment: () => blogFragment,
173
- buyNowFbq: () => buyNowFbq,
174
- cartFragment: () => cartFragment,
175
- collectionFragment: () => collectionFragment,
176
- createCart: () => createCart,
177
- currencyCodeMapping: () => currencyCodeMapping,
178
- defaultSWRMutationConfiguration: () => defaultSWRMutationConfiguration,
179
- fbq: () => fbq,
180
- getCart: () => getCart,
181
- getProductsByHandles: () => getProductsByHandles,
182
- getProductsByHandlesQuery: () => getProductsByHandlesQuery,
183
- gtag: () => gtag,
184
- imageFragment: () => imageFragment,
185
- isAttributesEqual: () => isAttributesEqual,
186
- metafieldFragment: () => metafieldFragment,
187
- metafieldFragmentStr: () => metafieldFragmentStr,
188
- pageFragment: () => pageFragment,
189
- pageInfoFragment: () => pageInfoFragment,
190
- productFragment: () => productFragment,
191
- removeCartLines: () => removeCartLines,
192
- seoFragment: () => seoFragment,
193
- updateCartAttributes: () => updateCartAttributes,
194
- updateCartLines: () => updateCartLines,
195
- useBuyNow: () => useBuyNow,
196
- useHeadlessContext: () => useHeadlessContext,
197
- useProductsByHandles: () => useProductsByHandles,
198
- variantFragment: () => variantFragment
199
- });
200
- module.exports = __toCommonJS(src_exports);
201
-
202
- // src/context/HeadlessProvider.tsx
203
- var import_react = require("react");
204
- var import_jsx_runtime = require("react/jsx-runtime");
205
- var HeadlessContext = (0, import_react.createContext)(null);
206
- var HeadlessProvider = ({ children, headlessConfig }) => {
207
- console.log("headlessConfig", headlessConfig);
208
- const contextValue = (0, import_react.useMemo)(() => {
209
- return headlessConfig;
210
- }, [headlessConfig]);
211
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HeadlessContext.Provider, { value: contextValue, children });
212
- };
213
- var useHeadlessContext = () => {
214
- const context = (0, import_react.useContext)(HeadlessContext);
215
- console.log("context", context);
216
- return context || {};
217
- };
218
-
219
- // src/shopify/fragments/article.ts
220
- var articleFragment = (
221
- /* GraphQL */
222
- `
223
- fragment article on Article {
224
- id
225
- handle
226
- title
227
- seo {
228
- ...seo
229
- }
230
- image {
231
- ...image
232
- }
233
- tags
234
- publishedAt
235
- content
236
- contentHtml
237
- excerpt
238
- excerptHtml
239
- authorV2 {
240
- bio
241
- email
242
- firstName
243
- lastName
244
- name
245
- }
246
- }
247
- `
248
- );
249
- var articleWithoutContentFragment = (
250
- /* GraphQL */
251
- `
252
- fragment article on Article {
253
- id
254
- handle
255
- title
256
- seo {
257
- ...seo
258
- }
259
- image {
260
- ...image
261
- }
262
- tags
263
- publishedAt
264
- excerpt
265
- excerptHtml
266
- authorV2 {
267
- bio
268
- email
269
- firstName
270
- lastName
271
- name
272
- }
273
- }
274
- `
275
- );
276
-
277
- // src/shopify/fragments/blog.ts
278
- var blogFragment = (
279
- /* GraphQL */
280
- `
281
- fragment blog on Blog {
282
- id
283
- handle
284
- title
285
- seo {
286
- ...seo
287
- }
288
- }
289
- `
290
- );
291
-
292
- // src/shopify/fragments/collection.ts
293
- var collectionFragment = (
294
- /* GraphQL */
295
- `
296
- fragment collection on Collection {
297
- id
298
- handle
299
- title
300
- description
301
- descriptionHtml
302
- seo {
303
- ...seo
304
- }
305
- image {
306
- ...image
307
- }
308
- }
309
- `
310
- );
311
-
312
- // src/shopify/fragments/image.ts
313
- var imageFragment = (
314
- /* GraphQL */
315
- `
316
- fragment image on Image {
317
- url
318
- altText
319
- width
320
- height
321
- }
322
- `
323
- );
324
-
325
- // src/shopify/fragments/metafields.ts
326
- var metafieldFragment = (
327
- /* GraphQL */
328
- `
329
- fragment metafield on Metafield {
330
- value
331
- type
332
- description
333
- namespace
334
- key
335
- }
336
- `
337
- );
338
- var metafieldFragmentStr = `
339
- value
340
- type
341
- description
342
- namespace
343
- key
344
- `;
345
-
346
- // src/shopify/fragments/product.ts
347
- var productFragment = (
348
- /* GraphQL */
349
- `
350
- fragment product on Product {
351
- id
352
- handle
353
- availableForSale
354
- title
355
- description
356
- descriptionHtml
357
- options {
358
- id
359
- name
360
- values
361
- }
362
- productType
363
- priceRange {
364
- maxVariantPrice {
365
- amount
366
- currencyCode
367
- }
368
- minVariantPrice {
369
- amount
370
- currencyCode
371
- }
372
- }
373
- compareAtPriceRange {
374
- minVariantPrice {
375
- amount
376
- currencyCode
377
- }
378
- }
379
- featuredImage {
380
- ...image
381
- }
382
- images(first: 250) {
383
- nodes {
384
- ...image
385
- }
386
- }
387
- media(first: 250) {
388
- nodes {
389
- id
390
- mediaContentType
391
- presentation {
392
- id
393
- }
394
- ... on Video {
395
- id
396
- sources {
397
- format
398
- height
399
- mimeType
400
- url
401
- width
402
- }
403
- }
404
- ... on MediaImage {
405
- id
406
- image {
407
- altText
408
- url
409
- }
410
- }
411
- }
412
- }
413
- seo {
414
- ...seo
415
- }
416
- tags
417
- updatedAt
418
- }
419
- `
420
- );
421
-
422
- // src/shopify/fragments/seo.ts
423
- var seoFragment = (
424
- /* GraphQL */
425
- `
426
- fragment seo on SEO {
427
- description
428
- title
429
- }
430
- `
431
- );
432
-
433
- // src/shopify/fragments/cart.ts
434
- var cartFragment = (
435
- /* GraphQL */
436
- `
437
- fragment cart on Cart {
438
- id
439
- totalQuantity
440
- updatedAt
441
- createdAt
442
- checkoutUrl
443
- note
444
- attributes {
445
- key
446
- value
447
- }
448
- cost {
449
- checkoutChargeAmount {
450
- amount
451
- currencyCode
452
- }
453
- subtotalAmount {
454
- amount
455
- currencyCode
456
- }
457
- totalAmount {
458
- amount
459
- currencyCode
460
- }
461
- totalTaxAmount {
462
- amount
463
- currencyCode
464
- }
465
- totalDutyAmount {
466
- amount
467
- currencyCode
468
- }
469
- totalAmountEstimated
470
- totalTaxAmountEstimated
471
- totalDutyAmountEstimated
472
- subtotalAmountEstimated
473
- }
474
- buyerIdentity {
475
- email
476
- customer {
477
- email
478
- id
479
- }
480
- deliveryAddressPreferences {
481
- ... on MailingAddress {
482
- address1
483
- address2
484
- city
485
- country
486
- zip
487
- }
488
- }
489
- }
490
- discountCodes {
491
- applicable
492
- code
493
- }
494
- discountAllocations {
495
- ... on CartCodeDiscountAllocation {
496
- code
497
- discountedAmount {
498
- amount
499
- currencyCode
500
- }
501
- }
502
- ... on CartAutomaticDiscountAllocation {
503
- title
504
- discountedAmount {
505
- amount
506
- currencyCode
507
- }
508
- }
509
- ... on CartCustomDiscountAllocation {
510
- title
511
- discountedAmount {
512
- amount
513
- currencyCode
514
- }
515
- }
516
- }
517
- deliveryGroups(first: 10) {
518
- nodes {
519
- deliveryAddress {
520
- address1
521
- address2
522
- city
523
- country
524
- zip
525
- }
526
- }
527
- }
528
- lines(first: 100) {
529
- edges {
530
- node {
531
- id
532
- quantity
533
- discountAllocations {
534
- ... on CartCodeDiscountAllocation {
535
- code
536
- discountedAmount {
537
- amount
538
- currencyCode
539
- }
540
- }
541
- ... on CartAutomaticDiscountAllocation {
542
- title
543
- discountedAmount {
544
- amount
545
- currencyCode
546
- }
547
- }
548
- ... on CartCustomDiscountAllocation {
549
- title
550
- discountedAmount {
551
- amount
552
- currencyCode
553
- }
554
- }
555
- }
556
- attributes {
557
- key
558
- value
559
- }
560
- cost {
561
- amountPerQuantity {
562
- amount
563
- currencyCode
564
- }
565
- compareAtAmountPerQuantity {
566
- amount
567
- currencyCode
568
- }
569
- subtotalAmount {
570
- amount
571
- currencyCode
572
- }
573
- totalAmount {
574
- amount
575
- currencyCode
576
- }
577
- }
578
- merchandise {
579
- ... on ProductVariant {
580
- id
581
- sku
582
- title
583
- quantityAvailable
584
- currentlyNotInStock
585
- availableForSale
586
- barcode
587
- weight
588
- selectedOptions {
589
- name
590
- value
591
- }
592
- image {
593
- ...image
594
- }
595
- price {
596
- amount
597
- currencyCode
598
- }
599
- compareAtPrice {
600
- amount
601
- currencyCode
602
- }
603
- metafields(identifiers: $variantMetafieldIdentifiers) {
604
- ...metafield
605
- }
606
- product {
607
- ...product
608
- metafields(identifiers: $productMetafieldIdentifiers) {
609
- ...metafield
610
- }
611
- }
612
- }
613
- }
614
- }
615
- }
616
- }
617
- totalQuantity
618
- }
619
- ${productFragment}
620
- ${seoFragment}
621
- ${imageFragment}
622
- ${metafieldFragment}
623
- `
624
- );
625
-
626
- // src/shopify/fragments/page-info.ts
627
- var pageInfoFragment = (
628
- /* GraphQL */
629
- `
630
- fragment pageInfo on PageInfo {
631
- hasNextPage
632
- hasPreviousPage
633
- startCursor
634
- endCursor
635
- }
636
- `
637
- );
638
-
639
- // src/shopify/fragments/variant.ts
640
- var variantFragment = (
641
- /* GraphQL */
642
- `
643
- fragment variant on ProductVariant {
644
- id
645
- sku
646
- title
647
- requiresShipping
648
- quantityAvailable
649
- currentlyNotInStock
650
- availableForSale
651
- barcode
652
- quantityAvailable
653
- weight
654
- selectedOptions {
655
- name
656
- value
657
- }
658
- image {
659
- ...image
660
- }
661
- price {
662
- amount
663
- currencyCode
664
- }
665
- compareAtPrice {
666
- amount
667
- currencyCode
668
- }
669
- }
670
- `
671
- );
672
-
673
- // src/shopify/fragments/page.ts
674
- var pageFragment = (
675
- /* GraphQL */
676
- `
677
- fragment page on Page {
678
- title
679
- handle
680
- body
681
- bodySummary
682
- seo {
683
- title
684
- description
685
- }
686
- }
687
- `
688
- );
689
-
690
- // src/shopify/queries/get-product-by-handles.ts
691
- var getProductsByHandlesQuery = (handles) => (
692
- /* GraphQL */
693
- `
694
- query GetProductByHandles(
695
- $productMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
696
- $variantMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
697
- ) {
698
- ${handles.map(
699
- (handle, index) => (
700
- /* GraphQL */
701
- `
702
- product${index}: product(handle: "${handle}") {
703
- ...product
704
- metafields(identifiers: $productMetafieldIdentifiers) {
705
- ...metafield
706
- }
707
- variants(first: 250) {
708
- nodes {
709
- ...variant
710
- metafields(identifiers: $variantMetafieldIdentifiers) {
711
- ...metafield
712
- }
713
- }
714
- }
715
- }
716
- `
717
- )
718
- )}
719
- }
720
- ${productFragment}
721
- ${variantFragment}
722
- ${metafieldFragment}
723
- ${seoFragment}
724
- ${imageFragment}
725
- `
726
- );
727
-
728
- // src/shopify/utils/fetch-graphql-api.ts
729
- var import_fetch_ponyfill = __toESM(require("fetch-ponyfill"));
730
-
731
- // src/shopify/utils/errors.ts
732
- var CommerceError = class extends Error {
733
- code;
734
- errors;
735
- constructor({ message, code, errors }) {
736
- const error = message ? { message, ...code ? { code } : {} } : errors[0];
737
- super(error.message);
738
- this.errors = message ? [error] : errors;
739
- if (error.code)
740
- this.code = error.code;
741
- }
742
- };
743
- var CommerceFetcherError = class extends CommerceError {
744
- status;
745
- constructor(options) {
746
- super(options);
747
- this.status = options.status;
748
- }
749
- };
750
-
751
- // src/shopify/utils/handle-fetch-response.ts
752
- function getCommerceError(errors, status = 500) {
753
- errors = errors ?? [{ message: "Failed to fetch Shopify API" }];
754
- return new CommerceFetcherError({ errors, status });
755
- }
756
-
757
- // src/shopify/utils/fetch-graphql-api.ts
758
- var { fetch } = (0, import_fetch_ponyfill.default)();
759
- async function fetchGraphqlApi({
760
- query,
761
- variables,
762
- fetchOptions,
763
- headers,
764
- config
765
- }) {
766
- const { storefrontToken, storeDomain } = config;
767
- let result;
768
- try {
769
- result = await fetch(`https://${storeDomain}/api/2025-07/graphql.json`, {
770
- method: "POST",
771
- headers: {
772
- "Content-Type": "application/json",
773
- "X-Shopify-Storefront-Access-Token": storefrontToken,
774
- ...headers
775
- },
776
- body: JSON.stringify({
777
- ...query && { query },
778
- ...variables && { variables }
779
- }),
780
- ...fetchOptions
781
- });
782
- const { data, errors, status } = await result.json();
783
- if (errors?.length) {
784
- throw new Error(
785
- `Status: ${status}, ${result.status}, GraphQL errors: ` + errors.map(({ message }) => message).join(", ")
786
- );
787
- }
788
- return { data, status, ...errors && { errors } };
789
- } catch (err) {
790
- console.error("fetchGraphqlApi url:", storeDomain, result?.status);
791
- throw getCommerceError(
792
- [
793
- {
794
- message: `status: ${result?.status}, ${err.message}
795
- Most likely related to an unexpected output. e.g the store might be protected with password or not available.`
796
- }
797
- ],
798
- 500
799
- );
800
- }
801
- }
802
-
803
- // src/shopify/utils/helper.ts
804
- var import_js_cookie = __toESM(require("js-cookie"));
805
-
806
- // src/shopify/utils/const.ts
807
- var REVALIDATE_TIME = 60 * 5;
808
-
809
- // src/shopify/utils/helper.ts
810
- function atobID(id) {
811
- if (id && typeof id === "string" && id.includes("/")) {
812
- return id.split("/").pop()?.split("?")?.shift();
813
- } else {
814
- return id;
815
- }
816
- }
817
- function constructMetafieldIdentifiersQueryParams(metafieldIdentifiers = {}, metafieldsNamespace = "") {
818
- const identifiers = Object.entries(metafieldIdentifiers).reduce((queryInput, [key, value]) => {
819
- const metafieldIdentifiers2 = value;
820
- queryInput[`${key}MetafieldIdentifiers`] = metafieldIdentifiers2.filter((item) => item.namespace !== metafieldsNamespace).map((item) => ({
821
- namespace: metafieldsNamespace,
822
- key: item.namespace
823
- })).concat(metafieldIdentifiers2);
824
- return queryInput;
825
- }, {});
826
- return identifiers;
827
- }
828
-
829
- // src/shopify/utils/normalize/metafield.ts
830
- var normalizeMetafields = (metafields, metafieldNamespacePrefix) => {
831
- return metafields?.reduce(
832
- (prev, cur) => {
833
- if (cur) {
834
- let namespace = cur.namespace;
835
- if (namespace.startsWith(`${metafieldNamespacePrefix}combo`)) {
836
- namespace = cur.key;
837
- prev[namespace] = prev[namespace] || {};
838
- const parsedMetafields = parseMetafield(cur);
839
- if (parsedMetafields) {
840
- Object.entries(parsedMetafields).forEach(([key, innerMetafields]) => {
841
- prev[namespace][key] = prev[namespace][key] ?? (innerMetafields ? parseMetafield(innerMetafields) : null);
842
- });
843
- }
844
- } else {
845
- prev[namespace] = prev[namespace] || {};
846
- prev[namespace][cur.key] = cur ? parseMetafield(cur) : null;
847
- }
848
- }
849
- return prev;
850
- },
851
- {}
852
- );
853
- };
854
- function parseJSON(str) {
855
- try {
856
- return JSON.parse(str);
857
- } catch (err) {
858
- return {};
859
- }
860
- }
861
- var parseDesc = (desc) => {
862
- const cfg = parseJSON(desc) || {};
863
- return {
864
- parseType: cfg.type,
865
- // JSON_STRING
866
- descContent: cfg.content || "",
867
- // 描述
868
- status: cfg.status || "Active"
869
- // 状态
870
- };
871
- };
872
- var parseMetafield = (metafield) => {
873
- const type = metafield?.type && metafield?.type.toLowerCase();
874
- const { status } = parseDesc(metafield?.description || "");
875
- if (status.toLowerCase() !== "active")
876
- return null;
877
- switch (type) {
878
- case "json":
879
- case "json_string":
880
- case "rating":
881
- case "volume":
882
- case "weight":
883
- case "dimension":
884
- return JSON.parse(metafield.value);
885
- default:
886
- return metafield?.value || metafield;
887
- }
888
- };
889
-
890
- // src/shopify/utils/colors.ts
891
- var import_lodash = __toESM(require_lodash());
892
- var colorMap = {
893
- aliceblue: "#F0F8FF",
894
- antiquewhite: "#FAEBD7",
895
- aqua: "#00FFFF",
896
- aquamarine: "#7FFFD4",
897
- azure: "#F0FFFF",
898
- beige: "#F5F5DC",
899
- bisque: "#FFE4C4",
900
- black: "#000000",
901
- blanchedalmond: "#FFEBCD",
902
- blue: "#0000FF",
903
- blueviolet: "#8A2BE2",
904
- brown: "#A52A2A",
905
- burlywood: "#DEB887",
906
- burgandy: "#800020",
907
- burgundy: "#800020",
908
- cadetblue: "#5F9EA0",
909
- chartreuse: "#7FFF00",
910
- chocolate: "#D2691E",
911
- coral: "#FF7F50",
912
- cornflowerblue: "#6495ED",
913
- cornsilk: "#FFF8DC",
914
- crimson: "#DC143C",
915
- cyan: "#00FFFF",
916
- darkblue: "#00008B",
917
- darkcyan: "#008B8B",
918
- darkgoldenrod: "#B8860B",
919
- darkgray: "#A9A9A9",
920
- darkgreen: "#006400",
921
- darkgrey: "#A9A9A9",
922
- darkkhaki: "#BDB76B",
923
- darkmagenta: "#8B008B",
924
- darkolivegreen: "#556B2F",
925
- darkorange: "#FF8C00",
926
- darkorchid: "#9932CC",
927
- darkred: "#8B0000",
928
- darksalmon: "#E9967A",
929
- darkseagreen: "#8FBC8F",
930
- darkslateblue: "#483D8B",
931
- darkslategray: "#2F4F4F",
932
- darkslategrey: "#2F4F4F",
933
- darkturquoise: "#00CED1",
934
- darkviolet: "#9400D3",
935
- deeppink: "#FF1493",
936
- deepskyblue: "#00BFFF",
937
- dimgray: "#696969",
938
- dimgrey: "#696969",
939
- dodgerblue: "#1E90FF",
940
- firebrick: "#B22222",
941
- floralwhite: "#FFFAF0",
942
- forestgreen: "#228B22",
943
- fuchsia: "#FF00FF",
944
- gainsboro: "#DCDCDC",
945
- ghostwhite: "#F8F8FF",
946
- gold: "#FFD700",
947
- goldenrod: "#DAA520",
948
- gray: "#808080",
949
- green: "#008000",
950
- greenyellow: "#ADFF2F",
951
- grey: "#808080",
952
- honeydew: "#F0FFF0",
953
- hotpink: "#FF69B4",
954
- indianred: "#CD5C5C",
955
- indigo: "#4B0082",
956
- ivory: "#FFFFF0",
957
- khaki: "#F0E68C",
958
- lavender: "#E6E6FA",
959
- lavenderblush: "#FFF0F5",
960
- lawngreen: "#7CFC00",
961
- lemonchiffon: "#FFFACD",
962
- lightblue: "#ADD8E6",
963
- lightcoral: "#F08080",
964
- lightcyan: "#E0FFFF",
965
- lightgoldenrodyellow: "#FAFAD2",
966
- lightgray: "#D3D3D3",
967
- lightgreen: "#90EE90",
968
- lightgrey: "#D3D3D3",
969
- lightpink: "#FFB6C1",
970
- lightsalmon: "#FFA07A",
971
- lightseagreen: "#20B2AA",
972
- lightskyblue: "#87CEFA",
973
- lightslategray: "#778899",
974
- lightslategrey: "#778899",
975
- lightsteelblue: "#B0C4DE",
976
- lightyellow: "#FFFFE0",
977
- lime: "#00FF00",
978
- limegreen: "#32CD32",
979
- linen: "#FAF0E6",
980
- magenta: "#FF00FF",
981
- maroon: "#800000",
982
- mediumaquamarine: "#66CDAA",
983
- mediumblue: "#0000CD",
984
- mediumorchid: "#BA55D3",
985
- mediumpurple: "#9370DB",
986
- mediumseagreen: "#3CB371",
987
- mediumslateblue: "#7B68EE",
988
- mediumspringgreen: "#00FA9A",
989
- mediumturquoise: "#48D1CC",
990
- mediumvioletred: "#C71585",
991
- midnightblue: "#191970",
992
- mintcream: "#F5FFFA",
993
- mistyrose: "#FFE4E1",
994
- moccasin: "#FFE4B5",
995
- navajowhite: "#FFDEAD",
996
- navy: "#000080",
997
- oldlace: "#FDF5E6",
998
- olive: "#808000",
999
- olivedrab: "#6B8E23",
1000
- orange: "#FFA500",
1001
- orangered: "#FF4500",
1002
- orchid: "#DA70D6",
1003
- palegoldenrod: "#EEE8AA",
1004
- palegreen: "#98FB98",
1005
- paleturquoise: "#AFEEEE",
1006
- palevioletred: "#DB7093",
1007
- papayawhip: "#FFEFD5",
1008
- peachpuff: "#FFDAB9",
1009
- peru: "#CD853F",
1010
- pink: "#FFC0CB",
1011
- plum: "#DDA0DD",
1012
- powderblue: "#B0E0E6",
1013
- purple: "#800080",
1014
- rebeccapurple: "#663399",
1015
- red: "#FF0000",
1016
- rosybrown: "#BC8F8F",
1017
- royalblue: "#4169E1",
1018
- saddlebrown: "#8B4513",
1019
- salmon: "#FA8072",
1020
- sandybrown: "#F4A460",
1021
- seagreen: "#2E8B57",
1022
- seashell: "#FFF5EE",
1023
- sienna: "#A0522D",
1024
- silver: "#C0C0C0",
1025
- skyblue: "#87CEEB",
1026
- slateblue: "#6A5ACD",
1027
- slategray: "#708090",
1028
- slategrey: "#708090",
1029
- spacegrey: "#65737e",
1030
- spacegray: "#65737e",
1031
- snow: "#FFFAFA",
1032
- springgreen: "#00FF7F",
1033
- steelblue: "#4682B4",
1034
- tan: "#D2B48C",
1035
- teal: "#008080",
1036
- thistle: "#D8BFD8",
1037
- tomato: "#FF6347",
1038
- turquoise: "#40E0D0",
1039
- violet: "#EE82EE",
1040
- wheat: "#F5DEB3",
1041
- white: "#FFFFFF",
1042
- whitesmoke: "#F5F5F5",
1043
- yellow: "#FFFF00",
1044
- yellowgreen: "#9ACD32"
1045
- };
1046
-
1047
- // src/shopify/utils/normalize/product.ts
1048
- var money = ({ amount, currencyCode }) => {
1049
- return amount && currencyCode && {
1050
- amount: +amount,
1051
- currencyCode
1052
- };
1053
- };
1054
- var checkVariantAvailable = (variant) => {
1055
- if (!variant.availableForSale)
1056
- return false;
1057
- if (!variant.quantityAvailable && !variant.currentlyNotInStock)
1058
- return false;
1059
- if (variant.price?.amount >= 999999999e-2)
1060
- return false;
1061
- return true;
1062
- };
1063
- var normalizeProductOption = ({
1064
- id,
1065
- name,
1066
- values
1067
- }) => {
1068
- return {
1069
- __typename: "ProductOption",
1070
- id,
1071
- name: name.toLowerCase(),
1072
- values: values.map((value) => {
1073
- let output = {
1074
- label: value
1075
- };
1076
- if (name.match(/colou?r/gi)) {
1077
- const mapedColor = colorMap[value.toLowerCase().replace(/ /g, "")];
1078
- if (mapedColor) {
1079
- output = {
1080
- ...output,
1081
- hexColors: [mapedColor]
1082
- };
1083
- }
1084
- }
1085
- return output;
1086
- })
1087
- };
1088
- };
1089
- var normalizeProductImages = ({ nodes }) => nodes?.map((node) => ({
1090
- url: node.url,
1091
- alt: node.altText || ""
1092
- })) || [];
1093
- var normalizeProductMedia = ({ nodes }) => nodes?.map((node) => node) || [];
1094
- function normalizeVariantProduct(product, metafieldNamespacePrefix = "") {
1095
- const { id, vendor, images, media, variants, handle, priceRange, options, metafields, availableForSale, ...rest } = product;
1096
- return {
1097
- ...rest,
1098
- availableForSale: !!variants.nodes.find((item) => !!item.availableForSale),
1099
- id,
1100
- vendor: vendor || "",
1101
- handle,
1102
- path: `/${handle}`,
1103
- slug: handle?.replace(/^\/+|\/+$/g, ""),
1104
- price: money(priceRange?.minVariantPrice),
1105
- priceRange,
1106
- images: normalizeProductImages(images),
1107
- media: normalizeProductMedia(media),
1108
- options: options ? options.filter((o) => o.name !== "Title").map((o) => normalizeProductOption(o)) : [],
1109
- metafields: normalizeMetafields(metafields, metafieldNamespacePrefix) || {}
1110
- };
1111
- }
1112
- var getCouponsFromVariantMetafields = ({ metafields, variantId }) => {
1113
- const coupons = metafields?.__discountCodeApp?.data?.filter((coupon) => {
1114
- const isRightVariant = String(coupon.variant_shopify_id) === atobID(variantId);
1115
- const isActive = (coupon.ends_at === null || new Date(coupon.ends_at).getTime() > (/* @__PURE__ */ new Date()).getTime()) && (coupon.starts_at === null || new Date(coupon.starts_at).getTime() <= (/* @__PURE__ */ new Date()).getTime());
1116
- return isRightVariant && isActive;
1117
- }) || [];
1118
- return coupons;
1119
- };
1120
- var normalizeProductVariants = ({ nodes }, product, metafieldNamespacePrefix = "") => {
1121
- return nodes?.map((node) => {
1122
- const { id, selectedOptions, sku, price, metafields, ...rest } = node;
1123
- const normalizedMetafields = normalizeMetafields(metafields, metafieldNamespacePrefix);
1124
- const coupons = getCouponsFromVariantMetafields({ metafields: normalizedMetafields, variantId: id });
1125
- return {
1126
- ...rest,
1127
- id,
1128
- sku: sku ?? id,
1129
- weight: node.weight,
1130
- price: money(price),
1131
- availableForSale: checkVariantAvailable(node),
1132
- options: selectedOptions.map(({ name, value }) => {
1133
- const options = normalizeProductOption({
1134
- id,
1135
- name,
1136
- values: [value]
1137
- });
1138
- return options;
1139
- }),
1140
- selectedOptions,
1141
- metafields: normalizedMetafields,
1142
- product: normalizeVariantProduct(product, metafieldNamespacePrefix),
1143
- coupons
1144
- };
1145
- });
1146
- };
1147
- function normalizeProduct(product, metafieldNamespacePrefix = "") {
1148
- const { id, vendor, images, media, variants, handle, priceRange, options, metafields, availableForSale, ...rest } = product;
1149
- const customVariants = variants ? normalizeProductVariants(variants, product, metafieldNamespacePrefix) : [];
1150
- return {
1151
- ...rest,
1152
- availableForSale: !!customVariants.find((item) => !!item.availableForSale),
1153
- id,
1154
- vendor: vendor || "",
1155
- handle,
1156
- path: `/${handle}`,
1157
- slug: handle?.replace(/^\/+|\/+$/g, ""),
1158
- price: money(priceRange?.minVariantPrice),
1159
- priceRange,
1160
- images: normalizeProductImages(images),
1161
- media: normalizeProductMedia(media),
1162
- variants: customVariants,
1163
- options: options?.length > 0 ? options.filter((o) => o.name !== "Title").map((o) => normalizeProductOption(o)) : customVariants.length > 1 ? [
1164
- {
1165
- id: "colorOptionsId",
1166
- name: customVariants?.[0]?.options?.[0]?.name,
1167
- values: customVariants.map((item) => item.options.map((o) => o.values)).flatMap((item) => item.flat())
1168
- }
1169
- ] : [],
1170
- metafields: normalizeMetafields(metafields, metafieldNamespacePrefix) || {}
1171
- };
1172
- }
1173
-
1174
- // src/shopify/fetchers/get-products-by-handles.ts
1175
- var getProductsByHandles = async ({ options, config }) => {
1176
- const { handles, metafieldIdentifiers, comboMetafieldsNamespace } = options;
1177
- if (!handles?.length) {
1178
- throw new Error("Handles are required");
1179
- }
1180
- const products = await fetchGraphqlApi({
1181
- query: getProductsByHandlesQuery(handles),
1182
- variables: {
1183
- handles,
1184
- ...constructMetafieldIdentifiersQueryParams(metafieldIdentifiers, comboMetafieldsNamespace)
1185
- },
1186
- config
1187
- });
1188
- return Object.values(products.data).filter((item) => !!item).map((product) => normalizeProduct(product, ""));
1189
- };
1190
-
1191
- // src/shopify/mutations/add-cart-lines.ts
1192
- var addCartLinesMutation = (
1193
- /* GraphQL */
1194
- `
1195
- mutation addCartLines($cartId: ID!, $lines: [CartLineInput!]!) {
1196
- cartLinesAdd(cartId: $cartId, lines: $lines) {
1197
- cart {
1198
- ...cart
1199
- }
1200
- userErrors {
1201
- field
1202
- message
1203
- }
1204
- }
1205
- }
1206
- ${cartFragment}
1207
- `
1208
- );
1209
-
1210
- // src/shopify/utils/normalize/cart.ts
1211
- function normalizeCart(cart, metafieldsNamespace = "") {
1212
- const lineItems = cart.lines?.edges?.map((item) => normalizeLineItem(item, metafieldsNamespace));
1213
- const orderDiscounts = cart?.discountAllocations?.reduce((pre, cur) => {
1214
- return Number(cur?.discountedAmount?.amount) + pre;
1215
- }, 0);
1216
- const [totalLineItemsDiscount, lineItemsSubtotalPrice] = lineItems?.reduce(
1217
- ([t, l], cur) => {
1218
- const currentDiscount = cur?.discountAllocations?.reduce((p, c) => Number(c?.amount) + p, 0) || 0;
1219
- return [currentDiscount + t, Number(cur?.subtotalAmount) + l];
1220
- },
1221
- [0, 0]
1222
- ) || [0, 0];
1223
- return {
1224
- customAttributes: cart.attributes,
1225
- totalLineItemsDiscount: orderDiscounts + totalLineItemsDiscount,
1226
- id: cart.id,
1227
- url: cart.checkoutUrl,
1228
- ready: true,
1229
- customerId: cart?.buyerIdentity?.customer?.id || "",
1230
- email: cart?.buyerIdentity?.email || "",
1231
- createdAt: cart.createdAt,
1232
- currency: {
1233
- code: cart.cost?.subtotalAmount?.currencyCode
1234
- },
1235
- taxesIncluded: cart.cost?.totalTaxAmountEstimated,
1236
- lineItems: cart.lines?.edges?.map((item) => normalizeLineItem(item, metafieldsNamespace)),
1237
- subtotalPrice: cart.cost?.subtotalAmount?.amount,
1238
- totalPrice: cart.cost?.totalAmount?.amount - (cart.cost?.totalTaxAmount?.amount || 0),
1239
- // 预估税额现在逻辑没理清楚,暂时 写死为 0
1240
- // totalTaxAmount: cart.cost?.totalTaxAmount?.amount,
1241
- totalTaxAmount: 0,
1242
- // lineItemsSubtotalPrice: cart.cost?.subtotalAmount?.amount,
1243
- lineItemsSubtotalPrice,
1244
- discountCodes: cart.discountCodes || [],
1245
- discountAllocations: cart?.discountAllocations?.map((item) => ({
1246
- code: item?.code || item?.title || "",
1247
- amount: item?.discountedAmount?.amount
1248
- })) || []
1249
- };
1250
- }
1251
- function normalizeLineItem({
1252
- node: { id, merchandise: variant, quantity, discountAllocations, attributes, cost }
1253
- }, metafieldNamespacePrefix = "") {
1254
- const price = variant?.price?.amount;
1255
- const name = variant?.product?.title;
1256
- return {
1257
- id,
1258
- name,
1259
- quantity,
1260
- variantId: String(variant?.id),
1261
- productId: String(variant?.product?.id),
1262
- totalAmount: cost?.totalAmount?.amount,
1263
- subtotalAmount: cost?.subtotalAmount?.amount,
1264
- discountAllocations: discountAllocations?.map((item) => ({
1265
- code: item?.code || item?.title || "",
1266
- amount: item?.discountedAmount?.amount
1267
- })) || [],
1268
- customAttributes: attributes?.map((item) => ({
1269
- key: item?.key || "",
1270
- value: item?.value || ""
1271
- })) || [],
1272
- variant: {
1273
- id: String(variant?.id),
1274
- options: [],
1275
- price,
1276
- listPrice: variant?.compareAtPrice?.amount,
1277
- sku: variant?.sku ?? "",
1278
- name: variant?.title,
1279
- requiresShipping: variant?.requiresShipping ?? false,
1280
- availableForSale: availableVariant({
1281
- ...variant,
1282
- price: variant?.price
1283
- }),
1284
- quantityAvailable: variant?.quantityAvailable || 0,
1285
- currentlyNotInStock: variant?.currentlyNotInStock || false,
1286
- metafields: normalizeMetafields(variant.metafields, metafieldNamespacePrefix)
1287
- },
1288
- product: variant?.product,
1289
- path: `/${variant?.product?.handle}`,
1290
- discounts: [],
1291
- options: variant?.title == "Default Title" ? [] : variant?.selectedOptions
1292
- };
1293
- }
1294
- var availableVariant = (variant) => {
1295
- if (!variant.availableForSale)
1296
- return false;
1297
- if (!variant.quantityAvailable && !variant.currentlyNotInStock)
1298
- return false;
1299
- if (variant.price?.amount >= 999999999e-2)
1300
- return false;
1301
- return true;
1302
- };
1303
-
1304
- // src/shopify/fetchers/add-cart-lines.ts
1305
- var addCartLines = async function({
1306
- options,
1307
- config
1308
- }) {
1309
- const { data } = await fetchGraphqlApi({
1310
- query: addCartLinesMutation,
1311
- variables: {
1312
- cartId: options.cartId,
1313
- lines: options.lines
1314
- },
1315
- config
1316
- });
1317
- if (data?.cartLinesAdd?.userErrors?.length) {
1318
- const errors = data.cartLinesAdd.userErrors;
1319
- const quantityError = errors.find((error) => error.field?.includes("quantity"));
1320
- if (quantityError) {
1321
- return Promise.reject(quantityError);
1322
- } else {
1323
- throw new Error(JSON.stringify(data?.cartLinesAdd?.userErrors));
1324
- }
1325
- }
1326
- const cart = data?.cartLinesAdd?.cart;
1327
- if (cart) {
1328
- return normalizeCart(cart, "");
1329
- } else {
1330
- return void 0;
1331
- }
1332
- };
1333
-
1334
- // src/shopify/mutations/create-cart.ts
1335
- var createCartMutation = (
1336
- /* GraphQL */
1337
- `
1338
- mutation createCart(
1339
- $lines: [CartLineInput!]
1340
- $discountCodes: [String!]
1341
- $attributes: [AttributeInput!] = []
1342
- $productMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
1343
- $variantMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
1344
- ) {
1345
- cartCreate(input: { lines: $lines, discountCodes: $discountCodes, attributes: $attributes }) {
1346
- cart {
1347
- ...cart
1348
- }
1349
- userErrors {
1350
- field
1351
- message
1352
- }
1353
- }
1354
- }
1355
- ${cartFragment}
1356
- `
1357
- );
1358
-
1359
- // src/shopify/fetchers/create-cart.ts
1360
- var createCart = async function({
1361
- options,
1362
- config
1363
- }) {
1364
- const { comboMetafieldsNamespace, metafieldIdentifiers, ...rest } = options;
1365
- if (!rest.lines?.length) {
1366
- throw new Error("Invalid input used for this operation: Miss lines");
1367
- }
1368
- const { data } = await fetchGraphqlApi({
1369
- query: createCartMutation,
1370
- variables: {
1371
- ...rest,
1372
- ...metafieldIdentifiers && {
1373
- ...constructMetafieldIdentifiersQueryParams(metafieldIdentifiers, comboMetafieldsNamespace)
1374
- }
1375
- },
1376
- config
1377
- });
1378
- const cart = data?.cartCreate?.cart;
1379
- if (cart) {
1380
- return normalizeCart(cart, comboMetafieldsNamespace);
1381
- } else {
1382
- return void 0;
1383
- }
1384
- };
1385
-
1386
- // src/shopify/mutations/remove-cart-items.ts
1387
- var removeCartItemsMutation = (
1388
- /* GraphQL */
1389
- `
1390
- mutation removeFromCart($cartId: ID!, $lineIds: [ID!]!) {
1391
- cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {
1392
- cart {
1393
- ...cart
1394
- }
1395
- userErrors {
1396
- field
1397
- message
1398
- }
1399
- }
1400
- }
1401
- ${cartFragment}
1402
- `
1403
- );
1404
-
1405
- // src/shopify/fetchers/remove-cart-lines.ts
1406
- var removeCartLines = async function({
1407
- options,
1408
- config
1409
- }) {
1410
- const { data } = await fetchGraphqlApi({
1411
- query: removeCartItemsMutation,
1412
- variables: options,
1413
- config
1414
- });
1415
- if (data?.cartLinesRemove?.cart) {
1416
- const normalizedCart = normalizeCart(data.cartLinesRemove.cart, "");
1417
- return normalizedCart;
1418
- } else {
1419
- return void 0;
1420
- }
1421
- };
1422
-
1423
- // src/shopify/mutations/update-cart-attributes.ts
1424
- var updateCartAttributesMutation = (
1425
- /* GraphQL */
1426
- `
1427
- mutation updateCartAttributes($cartId: ID!, $attributes: [AttributeInput!]!) {
1428
- cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {
1429
- cart {
1430
- ...cart
1431
- }
1432
- userErrors {
1433
- field
1434
- message
1435
- }
1436
- }
1437
- }
1438
- ${cartFragment}
1439
- `
1440
- );
1441
-
1442
- // src/shopify/fetchers/update-cart-attributes.ts
1443
- var updateCartAttributes = async function({ options, config }) {
1444
- const { data } = await fetchGraphqlApi({
1445
- query: updateCartAttributesMutation,
1446
- variables: options,
1447
- config
1448
- });
1449
- if (data?.cartAttributesUpdate?.cart) {
1450
- const normalizedCart = normalizeCart(data.cartAttributesUpdate.cart, "");
1451
- return normalizedCart;
1452
- } else {
1453
- return void 0;
1454
- }
1455
- };
1456
-
1457
- // src/shopify/mutations/update-cart-items.ts
1458
- var updateCartLinesMutation = (
1459
- /* GraphQL */
1460
- `
1461
- mutation updateCartLines($cartId: ID!, $lines: [CartLineUpdateInput!]!) {
1462
- cartLinesUpdate(cartId: $cartId, lines: $lines) {
1463
- cart {
1464
- ...cart
1465
- }
1466
- userErrors {
1467
- field
1468
- message
1469
- }
1470
- }
1471
- }
1472
- ${cartFragment}
1473
- `
1474
- );
1475
-
1476
- // src/shopify/fetchers/update-cart-lines.ts
1477
- var updateCartLines = async function({
1478
- options,
1479
- config
1480
- }) {
1481
- const { data } = await fetchGraphqlApi({
1482
- query: updateCartLinesMutation,
1483
- variables: options,
1484
- config
1485
- });
1486
- if (data?.cartLinesUpdate?.userErrors?.length) {
1487
- const errors = data.cartLinesUpdate?.userErrors;
1488
- const quantityError = errors.find((error) => error.field?.includes("quantity"));
1489
- if (quantityError) {
1490
- return Promise.reject(quantityError);
1491
- }
1492
- }
1493
- if (data?.cartLinesUpdate?.cart) {
1494
- const normalizedCart = normalizeCart(data.cartLinesUpdate.cart, "");
1495
- return normalizedCart;
1496
- } else {
1497
- return void 0;
1498
- }
1499
- };
1500
-
1501
- // src/shopify/queries/get-cart.ts
1502
- var getCartQuery = (
1503
- /* GraphQL */
1504
- `
1505
- query getCart(
1506
- $cartId: ID!
1507
- $productMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
1508
- $variantMetafieldIdentifiers: [HasMetafieldsIdentifier!] = []
1509
- ) {
1510
- cart(id: $cartId) {
1511
- ...cart
1512
- }
1513
- }
1514
- ${cartFragment}
1515
- `
1516
- );
1517
-
1518
- // src/shopify/fetchers/get-cart.ts
1519
- var getCart = async function({ options, config }) {
1520
- const { comboMetafieldsNamespace: metafieldsNamespace, metafieldIdentifiers, cartId } = options;
1521
- if (!cartId) {
1522
- throw new Error("Invalid input used for this operation: Miss cartId");
1523
- }
1524
- const { data } = await fetchGraphqlApi({
1525
- query: getCartQuery,
1526
- variables: {
1527
- cartId,
1528
- ...constructMetafieldIdentifiersQueryParams(metafieldIdentifiers, metafieldsNamespace)
1529
- },
1530
- config
1531
- });
1532
- return normalizeCart(data.cart, metafieldsNamespace);
1533
- };
1534
-
1535
- // src/shopify/hooks/useProductsByHandles.ts
1536
- var import_swr = __toESM(require("swr"));
1537
- function useProductsByHandles({
1538
- handles,
1539
- metafieldIdentifiers
1540
- }) {
1541
- const { storefrontToken, storeDomain, comboMetafieldsNamespace } = useHeadlessContext();
1542
- return (0, import_swr.default)(handles?.length ? { handles, metafieldIdentifiers } : void 0, async () => {
1543
- return getProductsByHandles({
1544
- options: {
1545
- handles,
1546
- metafieldIdentifiers,
1547
- comboMetafieldsNamespace
1548
- },
1549
- config: { storefrontToken, storeDomain }
1550
- });
1551
- });
1552
- }
1553
-
1554
- // src/cart/hooks/basic/useBuyNow.ts
1555
- var import_react2 = require("react");
1556
- var import_mutation = __toESM(require("swr/mutation"));
1557
-
1558
- // src/cart/const.ts
1559
- var currencyCodeMapping = {
1560
- us: "USD",
1561
- ca: "CAD",
1562
- gb: "GBP",
1563
- eu: "EUR",
1564
- au: "AUD",
1565
- nz: "NZD",
1566
- de: "EUR",
1567
- fr: "EUR",
1568
- es: "EUR",
1569
- it: "EUR",
1570
- nl: "EUR",
1571
- pl: "EUR",
1572
- ro: "EUR"
1573
- };
1574
- var defaultSWRMutationConfiguration = {
1575
- throwOnError: false
1576
- };
1577
-
1578
- // src/cart/hooks/basic/useBuyNow.ts
1579
- var useBuyNow = ({ withTrack = true, redirectToCheckout = true } = {}, swrOptions = defaultSWRMutationConfiguration) => {
1580
- const { storefrontToken, storeDomain } = useHeadlessContext();
1581
- const trigger = (0, import_react2.useCallback)(
1582
- async (_, { arg }) => {
1583
- const { lineItems, discountCodes, gtmParams = {}, buyerIdentity, fbqTrackConfig } = arg;
1584
- if (!lineItems) {
1585
- return;
1586
- }
1587
- const linesToBuyNow = lineItems.map((item) => ({
1588
- merchandiseId: item.variant.id,
1589
- quantity: item.quantity || 1,
1590
- attributes: item.attributes
1591
- })).filter((item) => item.merchandiseId && item.quantity);
1592
- let resultCart;
1593
- if (linesToBuyNow.length > 0) {
1594
- const createCartOptions = {
1595
- lines: linesToBuyNow,
1596
- buyerIdentity,
1597
- discountCodes
1598
- };
1599
- resultCart = await createCart({
1600
- options: createCartOptions,
1601
- config: {
1602
- storefrontToken,
1603
- storeDomain
1604
- }
1605
- });
1606
- }
1607
- if (withTrack) {
1608
- }
1609
- if (redirectToCheckout && resultCart?.url) {
1610
- window.location.href = resultCart.url;
1611
- } else {
1612
- throw new Error("Failed to buy now");
1613
- }
1614
- return resultCart;
1615
- },
1616
- [withTrack, redirectToCheckout, createCart]
1617
- );
1618
- return (0, import_mutation.default)("buyNow", trigger, swrOptions);
1619
- };
1620
-
1621
- // src/cart/utils/index.ts
1622
- var isAttributesEqual = (oldAttributes, newAttributes) => {
1623
- if (oldAttributes?.length !== newAttributes?.length) {
1624
- return false;
1625
- }
1626
- const oldMap = new Map(oldAttributes.map((attr) => [attr.key, attr.value]));
1627
- const newMap = new Map(newAttributes.map((attr) => [attr.key, attr.value]));
1628
- for (const [key, value] of newMap) {
1629
- if (!oldMap.has(key) || oldMap.get(key) !== value) {
1630
- return false;
1631
- }
1632
- }
1633
- return true;
1634
- };
1635
-
1636
- // src/cart/track/fbq.ts
1637
- var fbq = (...args) => {
1638
- if (window.fbq) {
1639
- window.fbq(...args);
1640
- }
1641
- };
1642
- var gtag = (...args) => {
1643
- if (window.gtag) {
1644
- window.gtag(...args);
1645
- }
1646
- };
1647
- var addToCartFbq = ({ lineItems = [] }) => {
1648
- if (lineItems.length && lineItems[0].variant) {
1649
- const { variant, quantity, finalPrice } = lineItems[0];
1650
- fbq("track", "AddToCart", {
1651
- value: finalPrice?.amount || variant?.price?.amount,
1652
- num_items: quantity,
1653
- currency: variant?.price?.currencyCode,
1654
- content_name: variant?.product?.title,
1655
- // 产品内容的名字
1656
- content_type: "product_group",
1657
- content_ids: String(variant?.id),
1658
- // 产品的varaint id
1659
- content_category: variant?.product?.metafields?.global?.trafficType || "public"
1660
- // 产品分类
1661
- });
1662
- }
1663
- };
1664
- var buyNowFbq = ({
1665
- trackConfig,
1666
- gtagId
1667
- }) => {
1668
- try {
1669
- if (trackConfig?.fbqBuyNowEvent) {
1670
- fbq("trackCustom", trackConfig?.fbqBuyNowEvent);
1671
- }
1672
- if (trackConfig?.gtagBuyNowLabel) {
1673
- gtag("event", trackConfig?.gtagBuyNowConversion || "conversion", {
1674
- send_to: `${gtagId}/${trackConfig?.gtagBuyNowLabel}`
1675
- });
1676
- }
1677
- } catch (error) {
1678
- }
1679
- };