@brytdesigns/shopify-ajax-cart-components 1.0.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 (94) hide show
  1. package/dist/jsdelivr/components/cart-context.js +22 -0
  2. package/dist/jsdelivr/components/cart-context.js.map +1 -0
  3. package/dist/jsdelivr/components/cart-data-array-item.js +19 -0
  4. package/dist/jsdelivr/components/cart-data-array-item.js.map +1 -0
  5. package/dist/jsdelivr/components/cart-data-array.js +58 -0
  6. package/dist/jsdelivr/components/cart-data-array.js.map +1 -0
  7. package/dist/jsdelivr/components/cart-data-conditions.js +97 -0
  8. package/dist/jsdelivr/components/cart-data-conditions.js.map +1 -0
  9. package/dist/jsdelivr/components/cart-data-injection.js +89 -0
  10. package/dist/jsdelivr/components/cart-data-injection.js.map +1 -0
  11. package/dist/jsdelivr/components/cart-data-listener-status.js +35 -0
  12. package/dist/jsdelivr/components/cart-data-listener-status.js.map +1 -0
  13. package/dist/jsdelivr/components/cart-data-listener.js +163 -0
  14. package/dist/jsdelivr/components/cart-data-listener.js.map +1 -0
  15. package/dist/jsdelivr/components/cart-data.js +29 -0
  16. package/dist/jsdelivr/components/cart-data.js.map +1 -0
  17. package/dist/jsdelivr/components/cart-loading-state.js +39 -0
  18. package/dist/jsdelivr/components/cart-loading-state.js.map +1 -0
  19. package/dist/jsdelivr/components/index.js +11 -0
  20. package/dist/jsdelivr/components/index.js.map +1 -0
  21. package/dist/jsdelivr/hooks/index.js +7 -0
  22. package/dist/jsdelivr/hooks/index.js.map +1 -0
  23. package/dist/jsdelivr/hooks/useCartValue.js +23 -0
  24. package/dist/jsdelivr/hooks/useCartValue.js.map +1 -0
  25. package/dist/jsdelivr/hooks/useFormattedValue.js +27 -0
  26. package/dist/jsdelivr/hooks/useFormattedValue.js.map +1 -0
  27. package/dist/jsdelivr/hooks/useFullPropertyPath.js +35 -0
  28. package/dist/jsdelivr/hooks/useFullPropertyPath.js.map +1 -0
  29. package/dist/jsdelivr/hooks/useHybridCart.js +23 -0
  30. package/dist/jsdelivr/hooks/useHybridCart.js.map +1 -0
  31. package/dist/jsdelivr/hooks/useListenerStatus.js +33 -0
  32. package/dist/jsdelivr/hooks/useListenerStatus.js.map +1 -0
  33. package/dist/jsdelivr/index.js +72 -0
  34. package/dist/jsdelivr/index.js.map +1 -0
  35. package/dist/jsdelivr/utils/formatValue.js +22 -0
  36. package/dist/jsdelivr/utils/formatValue.js.map +1 -0
  37. package/dist/jsdelivr/utils/getTargetElement.js +13 -0
  38. package/dist/jsdelivr/utils/getTargetElement.js.map +1 -0
  39. package/dist/jsdelivr/utils/getTemplateContent.js +11 -0
  40. package/dist/jsdelivr/utils/getTemplateContent.js.map +1 -0
  41. package/dist/jsdelivr/utils/getValueFromPath.js +14 -0
  42. package/dist/jsdelivr/utils/getValueFromPath.js.map +1 -0
  43. package/dist/jsdelivr/utils/index.js +7 -0
  44. package/dist/jsdelivr/utils/index.js.map +1 -0
  45. package/dist/jsdelivr/utils/parseNestedObject.js +32 -0
  46. package/dist/jsdelivr/utils/parseNestedObject.js.map +1 -0
  47. package/dist/main/components/cart-context.js +22 -0
  48. package/dist/main/components/cart-context.js.map +1 -0
  49. package/dist/main/components/cart-data-array-item.js +19 -0
  50. package/dist/main/components/cart-data-array-item.js.map +1 -0
  51. package/dist/main/components/cart-data-array.js +59 -0
  52. package/dist/main/components/cart-data-array.js.map +1 -0
  53. package/dist/main/components/cart-data-conditions.js +98 -0
  54. package/dist/main/components/cart-data-conditions.js.map +1 -0
  55. package/dist/main/components/cart-data-injection.js +89 -0
  56. package/dist/main/components/cart-data-injection.js.map +1 -0
  57. package/dist/main/components/cart-data-listener-status.js +36 -0
  58. package/dist/main/components/cart-data-listener-status.js.map +1 -0
  59. package/dist/main/components/cart-data-listener.js +163 -0
  60. package/dist/main/components/cart-data-listener.js.map +1 -0
  61. package/dist/main/components/cart-data.js +29 -0
  62. package/dist/main/components/cart-data.js.map +1 -0
  63. package/dist/main/components/cart-loading-state.js +39 -0
  64. package/dist/main/components/cart-loading-state.js.map +1 -0
  65. package/dist/main/components/index.js +11 -0
  66. package/dist/main/components/index.js.map +1 -0
  67. package/dist/main/hooks/index.js +7 -0
  68. package/dist/main/hooks/index.js.map +1 -0
  69. package/dist/main/hooks/useAjaxCart.js +23 -0
  70. package/dist/main/hooks/useAjaxCart.js.map +1 -0
  71. package/dist/main/hooks/useCartValue.js +23 -0
  72. package/dist/main/hooks/useCartValue.js.map +1 -0
  73. package/dist/main/hooks/useFormattedValue.js +27 -0
  74. package/dist/main/hooks/useFormattedValue.js.map +1 -0
  75. package/dist/main/hooks/useFullPropertyPath.js +35 -0
  76. package/dist/main/hooks/useFullPropertyPath.js.map +1 -0
  77. package/dist/main/hooks/useListenerStatus.js +33 -0
  78. package/dist/main/hooks/useListenerStatus.js.map +1 -0
  79. package/dist/main/index.d.ts +14996 -0
  80. package/dist/main/index.js +72 -0
  81. package/dist/main/index.js.map +1 -0
  82. package/dist/main/utils/formatValue.js +22 -0
  83. package/dist/main/utils/formatValue.js.map +1 -0
  84. package/dist/main/utils/getTargetElement.js +13 -0
  85. package/dist/main/utils/getTargetElement.js.map +1 -0
  86. package/dist/main/utils/getTemplateContent.js +11 -0
  87. package/dist/main/utils/getTemplateContent.js.map +1 -0
  88. package/dist/main/utils/getValueFromPath.js +14 -0
  89. package/dist/main/utils/getValueFromPath.js.map +1 -0
  90. package/dist/main/utils/index.js +7 -0
  91. package/dist/main/utils/index.js.map +1 -0
  92. package/dist/main/utils/parseNestedObject.js +32 -0
  93. package/dist/main/utils/parseNestedObject.js.map +1 -0
  94. package/package.json +36 -0
@@ -0,0 +1,72 @@
1
+ import { customShadowlessElement, correctElementType } from '@brytdesigns/web-component-utils';
2
+ import { CartContext, CartDataArrayItem, CartDataArray, CartData, CartDataConditions, CartDataInjection, CartDataListener, CartDataListenerStatus, CartLoadingState } from './components/index.js';
3
+ export * from './hooks/index.js';
4
+
5
+ customShadowlessElement(
6
+ "cart-context",
7
+ { debug: false },
8
+ correctElementType(CartContext)
9
+ );
10
+ customShadowlessElement(
11
+ "cart-data-array-item",
12
+ //@ts-ignore
13
+ { itemIndex: "0" },
14
+ correctElementType(CartDataArrayItem)
15
+ );
16
+ customShadowlessElement(
17
+ "cart-data-array",
18
+ {
19
+ format: "",
20
+ arrayPath: "items"
21
+ },
22
+ correctElementType(CartDataArray)
23
+ );
24
+ customShadowlessElement(
25
+ "cart-data",
26
+ {
27
+ format: "",
28
+ propertyName: "item_count"
29
+ },
30
+ correctElementType(CartData)
31
+ );
32
+ customShadowlessElement(
33
+ "cart-data-conditions",
34
+ {},
35
+ correctElementType(CartDataConditions)
36
+ );
37
+ customShadowlessElement(
38
+ "cart-data-injection",
39
+ {
40
+ propertyName: "item_count",
41
+ attributeName: "data-item-count",
42
+ injectionType: "attribute",
43
+ target: "",
44
+ format: ""
45
+ },
46
+ correctElementType(CartDataInjection)
47
+ );
48
+ customShadowlessElement(
49
+ "cart-data-listener",
50
+ {
51
+ status: "default",
52
+ on: "submit",
53
+ method: "updateItem",
54
+ resetForm: true,
55
+ debounceDelay: 0,
56
+ resetStatusDelay: 0,
57
+ preventDefault: true
58
+ },
59
+ correctElementType(CartDataListener)
60
+ );
61
+ customShadowlessElement(
62
+ "cart-data-listener-status",
63
+ {},
64
+ correctElementType(CartDataListenerStatus)
65
+ );
66
+ customShadowlessElement(
67
+ "cart-loading-state",
68
+ { ignoredStates: [] },
69
+ correctElementType(CartLoadingState)
70
+ );
71
+ //# sourceMappingURL=index.js.map
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAiBA,uBAAA;AAAA,EACE,cAAA;AAAA,EACA,EAAE,OAAO,KAAM,EAAA;AAAA,EACf,mBAAmB,WAAW;AAChC,CAAA;AAEA,uBAAA;AAAA,EACE,sBAAA;AAAA;AAAA,EAEA,EAAE,WAAW,GAAI,EAAA;AAAA,EACjB,mBAAmB,iBAAiB;AACtC,CAAA;AAEA,uBAAA;AAAA,EACE,iBAAA;AAAA,EACA;AAAA,IACE,MAAQ,EAAA,EAAA;AAAA,IACR,SAAW,EAAA;AAAA,GACb;AAAA,EACA,mBAAmB,aAAa;AAClC,CAAA;AAEA,uBAAA;AAAA,EACE,WAAA;AAAA,EACA;AAAA,IACE,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,mBAAmB,QAAQ;AAC7B,CAAA;AAEA,uBAAA;AAAA,EACE,sBAAA;AAAA,EACA,EAAC;AAAA,EACD,mBAAmB,kBAAkB;AACvC,CAAA;AAEA,uBAAA;AAAA,EACE,qBAAA;AAAA,EACA;AAAA,IACE,YAAc,EAAA,YAAA;AAAA,IACd,aAAe,EAAA,iBAAA;AAAA,IACf,aAAe,EAAA,WAAA;AAAA,IACf,MAAQ,EAAA,EAAA;AAAA,IACR,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,mBAAmB,iBAAiB;AACtC,CAAA;AAEA,uBAAA;AAAA,EACE,oBAAA;AAAA,EACA;AAAA,IACE,MAAQ,EAAA,SAAA;AAAA,IACR,EAAI,EAAA,QAAA;AAAA,IACJ,MAAQ,EAAA,YAAA;AAAA,IACR,SAAW,EAAA,IAAA;AAAA,IACX,aAAe,EAAA,CAAA;AAAA,IACf,gBAAkB,EAAA,CAAA;AAAA,IAClB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,mBAAmB,gBAAgB;AACrC,CAAA;AAEA,uBAAA;AAAA,EACE,2BAAA;AAAA,EACA,EAAC;AAAA,EACD,mBAAmB,sBAAsB;AAC3C,CAAA;AAEA,uBAAA;AAAA,EACE,oBAAA;AAAA,EACA,EAAE,aAAe,EAAA,EAAG,EAAA;AAAA,EACpB,mBAAmB,gBAAgB;AACrC,CAAA","file":"index.js","sourcesContent":["import {\n customShadowlessElement,\n correctElementType,\n} from \"@brytdesigns/web-component-utils\";\n\nimport {\n CartContext,\n CartData,\n CartDataArray,\n CartDataArrayItem,\n CartDataConditions,\n CartDataInjection,\n CartDataListener,\n CartDataListenerStatus,\n CartLoadingState,\n} from \"./components/index.js\";\n\ncustomShadowlessElement(\n \"cart-context\",\n { debug: false },\n correctElementType(CartContext),\n);\n\ncustomShadowlessElement(\n \"cart-data-array-item\",\n //@ts-ignore\n { itemIndex: \"0\" },\n correctElementType(CartDataArrayItem),\n);\n\ncustomShadowlessElement(\n \"cart-data-array\",\n {\n format: \"\",\n arrayPath: \"items\",\n },\n correctElementType(CartDataArray),\n);\n\ncustomShadowlessElement(\n \"cart-data\",\n {\n format: \"\",\n propertyName: \"item_count\",\n },\n correctElementType(CartData),\n);\n\ncustomShadowlessElement(\n \"cart-data-conditions\",\n {},\n correctElementType(CartDataConditions),\n);\n\ncustomShadowlessElement(\n \"cart-data-injection\",\n {\n propertyName: \"item_count\",\n attributeName: \"data-item-count\",\n injectionType: \"attribute\",\n target: \"\",\n format: \"\",\n },\n correctElementType(CartDataInjection),\n);\n\ncustomShadowlessElement(\n \"cart-data-listener\",\n {\n status: \"default\",\n on: \"submit\",\n method: \"updateItem\",\n resetForm: true,\n debounceDelay: 0,\n resetStatusDelay: 0,\n preventDefault: true,\n },\n correctElementType(CartDataListener),\n);\n\ncustomShadowlessElement(\n \"cart-data-listener-status\",\n {},\n correctElementType(CartDataListenerStatus),\n);\n\ncustomShadowlessElement(\n \"cart-loading-state\",\n { ignoredStates: [] },\n correctElementType(CartLoadingState),\n);\n\nexport * from \"./hooks/index.js\";\n"]}
@@ -0,0 +1,22 @@
1
+ function formatValue(format, value) {
2
+ switch (format) {
3
+ case "currency":
4
+ if (typeof value === "number") return window.Shopify.formatMoney(value);
5
+ if (typeof value === "string")
6
+ return window.Shopify.formatMoney(parseFloat(value));
7
+ console.warn("formatValue: Unsupported value type for currency format.");
8
+ return window.Shopify.formatMoney(0);
9
+ case "number":
10
+ return Number(value);
11
+ case "boolean":
12
+ return typeof value === "string" ? value.toLowerCase() === "true" : Boolean(value);
13
+ case "invert_boolean":
14
+ return typeof value === "string" ? value.toLowerCase() === "false" : !Boolean(value);
15
+ default:
16
+ return value;
17
+ }
18
+ }
19
+
20
+ export { formatValue };
21
+ //# sourceMappingURL=formatValue.js.map
22
+ //# sourceMappingURL=formatValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/formatValue.ts"],"names":[],"mappings":"AAOO,SAAS,WAAA,CAAY,QAAgB,KAAgB,EAAA;AAC1D,EAAA,QAAQ,MAAQ;AAAA,IACd,KAAK,UAAA;AACH,MAAA,IAAI,OAAO,KAAU,KAAA,QAAA,SAAiB,MAAO,CAAA,OAAA,CAAQ,YAAY,KAAK,CAAA;AACtE,MAAA,IAAI,OAAO,KAAU,KAAA,QAAA;AACnB,QAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,WAAY,CAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AACrD,MAAA,OAAA,CAAQ,KAAK,0DAA0D,CAAA;AACvE,MAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,WAAA,CAAY,CAAC,CAAA;AAAA,IACrC,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IACrB,KAAK,SAAA;AACH,MAAO,OAAA,OAAO,UAAU,QACpB,GAAA,KAAA,CAAM,aAAkB,KAAA,MAAA,GACxB,QAAQ,KAAK,CAAA;AAAA,IACnB,KAAK,gBAAA;AACH,MAAO,OAAA,OAAO,UAAU,QACpB,GAAA,KAAA,CAAM,aAAkB,KAAA,OAAA,GACxB,CAAC,OAAA,CAAQ,KAAK,CAAA;AAAA,IACpB;AACE,MAAO,OAAA,KAAA;AAAA;AAEb","file":"formatValue.js","sourcesContent":["export type Format =\n | \"currency\"\n | \"number\"\n | \"boolean\"\n | \"invert_boolean\"\n | string;\n\nexport function formatValue(format: Format, value: unknown) {\n switch (format) {\n case \"currency\":\n if (typeof value === \"number\") return window.Shopify.formatMoney(value);\n if (typeof value === \"string\")\n return window.Shopify.formatMoney(parseFloat(value));\n console.warn(\"formatValue: Unsupported value type for currency format.\");\n return window.Shopify.formatMoney(0);\n case \"number\":\n return Number(value);\n case \"boolean\":\n return typeof value === \"string\"\n ? value.toLowerCase() === \"true\"\n : Boolean(value);\n case \"invert_boolean\":\n return typeof value === \"string\"\n ? value.toLowerCase() === \"false\"\n : !Boolean(value);\n default:\n return value as any;\n }\n}\n\ndeclare global {\n interface Window {\n Shopify: {\n formatMoney(value: number, currency?: string): string;\n };\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ function getTargetElement(rootElement, target) {
2
+ if (!target) return rootElement;
3
+ const t = rootElement.querySelector(target);
4
+ if (!t) {
5
+ console.error(`target element not found: ${target}`);
6
+ return null;
7
+ }
8
+ return t;
9
+ }
10
+
11
+ export { getTargetElement };
12
+ //# sourceMappingURL=getTargetElement.js.map
13
+ //# sourceMappingURL=getTargetElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/getTargetElement.ts"],"names":[],"mappings":"AAAO,SAAS,gBAAA,CAAiB,aAA0B,MAAgB,EAAA;AACzE,EAAI,IAAA,CAAC,QAAe,OAAA,WAAA;AACpB,EAAM,MAAA,CAAA,GAAI,WAAY,CAAA,aAAA,CAAc,MAAM,CAAA;AAC1C,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAQ,OAAA,CAAA,KAAA,CAAM,CAA6B,0BAAA,EAAA,MAAM,CAAE,CAAA,CAAA;AACnD,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT","file":"getTargetElement.js","sourcesContent":["export function getTargetElement(rootElement: HTMLElement, target: string) {\n if (!target) return rootElement;\n const t = rootElement.querySelector(target);\n if (!t) {\n console.error(`target element not found: ${target}`);\n return null;\n }\n return t;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ function getTemplateContent(element, state) {
2
+ const tmpl = element.querySelector(
3
+ `template[${state}]`
4
+ );
5
+ if (!tmpl) return null;
6
+ return tmpl.content;
7
+ }
8
+
9
+ export { getTemplateContent };
10
+ //# sourceMappingURL=getTemplateContent.js.map
11
+ //# sourceMappingURL=getTemplateContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/getTemplateContent.ts"],"names":[],"mappings":"AAAO,SAAS,kBAAA,CAAmB,SAAsB,KAAe,EAAA;AACtE,EAAA,MAAM,OAAO,OAAQ,CAAA,aAAA;AAAA,IACnB,YAAY,KAAK,CAAA,CAAA;AAAA,GACnB;AACA,EAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAClB,EAAA,OAAO,IAAK,CAAA,OAAA;AACd","file":"getTemplateContent.js","sourcesContent":["export function getTemplateContent(element: HTMLElement, state: string) {\n const tmpl = element.querySelector(\n `template[${state}]`,\n ) as HTMLTemplateElement;\n if (!tmpl) return null;\n return tmpl.content;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ function getValueFromPath(obj, path) {
2
+ return path.split(".").reduce((acc, key) => {
3
+ if (acc === null || acc === void 0) return void 0;
4
+ const isArrayIndex = !isNaN(Number(key)) && key.trim() !== "";
5
+ if (Array.isArray(acc) && isArrayIndex) {
6
+ return acc[Number(key)];
7
+ }
8
+ return acc[key];
9
+ }, obj);
10
+ }
11
+
12
+ export { getValueFromPath };
13
+ //# sourceMappingURL=getValueFromPath.js.map
14
+ //# sourceMappingURL=getValueFromPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/getValueFromPath.ts"],"names":[],"mappings":"AA+BO,SAAS,gBAAA,CACd,KACA,IACiB,EAAA;AACjB,EAAA,OAAO,KAAK,KAAM,CAAA,GAAG,EAAE,MAAY,CAAA,CAAC,KAAK,GAAQ,KAAA;AAC/C,IAAA,IAAI,GAAQ,KAAA,IAAA,IAAQ,GAAQ,KAAA,MAAA,EAAkB,OAAA,MAAA;AAG9C,IAAM,MAAA,YAAA,GAAe,CAAC,KAAM,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,IAAK,GAAI,CAAA,IAAA,EAAW,KAAA,EAAA;AAC3D,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA,IAAK,YAAc,EAAA;AACtC,MAAO,OAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAC,CAAA;AAAA;AAIxB,IAAA,OAAO,IAAI,GAAG,CAAA;AAAA,KACb,GAAG,CAAA;AACR","file":"getValueFromPath.js","sourcesContent":["// 🔥 Recursively Constructs All Possible Paths for an Object or Array\nexport type Path<T> = T extends readonly (infer U)[]\n ? `${number}` | `${number}.${Path<U>}` // Allows indexing into readonly arrays\n : T extends object\n ? {\n [K in keyof T & (string | number)]: T[K] extends object | any[]\n ? `${K}` | `${K}.${Path<T[K]>}`\n : `${K}`;\n }[keyof T & (string | number)]\n : never;\n\n// 🔥 Correctly Extracts the Value at the Given Path\nexport type PathValue<\n T,\n P extends string,\n> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : Key extends `${number}`\n ? T extends readonly (infer U)[]\n ? PathValue<U, Rest>\n : undefined\n : undefined\n : P extends keyof T\n ? T[P]\n : P extends `${number}`\n ? T extends readonly (infer U)[]\n ? U\n : undefined\n : undefined;\n\nexport function getValueFromPath<T, P extends Path<T>>(\n obj: T,\n path: P,\n): PathValue<T, P> {\n return path.split(\".\").reduce<any>((acc, key) => {\n if (acc === null || acc === undefined) return undefined;\n\n // 🔥 Convert numeric keys for proper array indexing\n const isArrayIndex = !isNaN(Number(key)) && key.trim() !== \"\";\n if (Array.isArray(acc) && isArrayIndex) {\n return acc[Number(key)];\n }\n\n // Normal object property access\n return acc[key];\n }, obj) as PathValue<T, P>;\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export * from './getValueFromPath.js';
2
+ export * from './formatValue.js';
3
+ export * from './getTemplateContent.js';
4
+ export * from './getTargetElement.js';
5
+ export * from './parseNestedObject.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,32 @@
1
+ function parseNestedObject(data) {
2
+ const result = {};
3
+ for (const key in data) {
4
+ const value = data[key];
5
+ const parts = key.match(/(\w+|\[\d+\])/g);
6
+ if (!parts) continue;
7
+ let current = result;
8
+ for (let i = 0; i < parts.length; i++) {
9
+ let part = parts[i];
10
+ let nextPart = parts[i + 1];
11
+ if (!part) continue;
12
+ if (part.startsWith("[")) {
13
+ part = parseInt(part.slice(1, -1), 10);
14
+ }
15
+ if (i === parts.length - 1) {
16
+ current[part] = value;
17
+ } else {
18
+ if (typeof parts[i + 1] === "number" || nextPart && nextPart.startsWith("[")) {
19
+ current[part] = current[part] || [];
20
+ } else {
21
+ current[part] = current[part] || {};
22
+ }
23
+ current = current[part];
24
+ }
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+
30
+ export { parseNestedObject };
31
+ //# sourceMappingURL=parseNestedObject.js.map
32
+ //# sourceMappingURL=parseNestedObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/parseNestedObject.ts"],"names":[],"mappings":"AAAO,SAAS,kBACd,IACqB,EAAA;AACrB,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,MAAA,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,IAAM,MAAA,KAAA,GAAQ,GAAI,CAAA,KAAA,CAAM,gBAAgB,CAAA;AAExC,IAAA,IAAI,CAAC,KAAO,EAAA;AAEZ,IAAA,IAAI,OAAe,GAAA,MAAA;AACnB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,MAAI,IAAA,IAAA,GAAoC,MAAM,CAAC,CAAA;AAC/C,MAAI,IAAA,QAAA,GAAwC,KAAM,CAAA,CAAA,GAAI,CAAC,CAAA;AAEvD,MAAA,IAAI,CAAC,IAAM,EAAA;AAGX,MAAI,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,CAAG,EAAA;AACxB,QAAA,IAAA,GAAO,SAAS,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,GAAG,EAAE,CAAA;AAAA;AAGvC,MAAI,IAAA,CAAA,KAAM,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1B,QAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,KAAA;AAAA,OACX,MAAA;AACL,QACE,IAAA,OAAO,KAAM,CAAA,CAAA,GAAI,CAAC,CAAA,KAAM,YACvB,QAAY,IAAA,QAAA,CAAS,UAAW,CAAA,GAAG,CACpC,EAAA;AACA,UAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAQ,CAAA,IAAI,KAAK,EAAC;AAAA,SAC7B,MAAA;AACL,UAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAQ,CAAA,IAAI,KAAK,EAAC;AAAA;AAEpC,QAAA,OAAA,GAAU,QAAQ,IAAI,CAAA;AAAA;AACxB;AACF;AAGF,EAAO,OAAA,MAAA;AACT","file":"parseNestedObject.js","sourcesContent":["export function parseNestedObject<T extends Record<string, any>>(\n data: T,\n): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const key in data) {\n const value = data[key];\n const parts = key.match(/(\\w+|\\[\\d+\\])/g);\n\n if (!parts) continue;\n\n let current: any = result;\n for (let i = 0; i < parts.length; i++) {\n let part: string | number | undefined = parts[i];\n let nextPart: string | number | undefined = parts[i + 1];\n\n if (!part) continue;\n\n // Convert array-like keys to numbers\n if (part.startsWith(\"[\")) {\n part = parseInt(part.slice(1, -1), 10);\n }\n\n if (i === parts.length - 1) {\n current[part] = value;\n } else {\n if (\n typeof parts[i + 1] === \"number\" ||\n (nextPart && nextPart.startsWith(\"[\"))\n ) {\n current[part] = current[part] || [];\n } else {\n current[part] = current[part] || {};\n }\n current = current[part];\n }\n }\n }\n\n return result;\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@brytdesigns/shopify-ajax-cart-components",
3
+ "version": "1.0.0",
4
+ "description": "Headless web components for the Ajax Cart Library",
5
+ "main": "./dist/main/index.js",
6
+ "types": "./dist/main/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/main/index.d.ts",
11
+ "module": "./dist/main/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "keywords": [],
18
+ "dependencies": {
19
+ "component-register": "^0.8.7",
20
+ "lodash.debounce": "^4.0.8",
21
+ "solid-js": "^1.9.7",
22
+ "@brytdesigns/shopify-ajax-cart": "1.0.0",
23
+ "@brytdesigns/web-component-utils": "0.1.12"
24
+ },
25
+ "author": "Bryt Designs",
26
+ "license": "ISC",
27
+ "devDependencies": {
28
+ "@types/lodash.debounce": "^4.0.9",
29
+ "dts-bundle-generator": "^9.5.1",
30
+ "tsup": "^8.4.0"
31
+ },
32
+ "scripts": {
33
+ "build": "tsup --clean",
34
+ "typecheck": "tsc --noEmit"
35
+ }
36
+ }