@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.
- package/dist/jsdelivr/components/cart-context.js +22 -0
- package/dist/jsdelivr/components/cart-context.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-array-item.js +19 -0
- package/dist/jsdelivr/components/cart-data-array-item.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-array.js +58 -0
- package/dist/jsdelivr/components/cart-data-array.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-conditions.js +97 -0
- package/dist/jsdelivr/components/cart-data-conditions.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-injection.js +89 -0
- package/dist/jsdelivr/components/cart-data-injection.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-listener-status.js +35 -0
- package/dist/jsdelivr/components/cart-data-listener-status.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-listener.js +163 -0
- package/dist/jsdelivr/components/cart-data-listener.js.map +1 -0
- package/dist/jsdelivr/components/cart-data.js +29 -0
- package/dist/jsdelivr/components/cart-data.js.map +1 -0
- package/dist/jsdelivr/components/cart-loading-state.js +39 -0
- package/dist/jsdelivr/components/cart-loading-state.js.map +1 -0
- package/dist/jsdelivr/components/index.js +11 -0
- package/dist/jsdelivr/components/index.js.map +1 -0
- package/dist/jsdelivr/hooks/index.js +7 -0
- package/dist/jsdelivr/hooks/index.js.map +1 -0
- package/dist/jsdelivr/hooks/useCartValue.js +23 -0
- package/dist/jsdelivr/hooks/useCartValue.js.map +1 -0
- package/dist/jsdelivr/hooks/useFormattedValue.js +27 -0
- package/dist/jsdelivr/hooks/useFormattedValue.js.map +1 -0
- package/dist/jsdelivr/hooks/useFullPropertyPath.js +35 -0
- package/dist/jsdelivr/hooks/useFullPropertyPath.js.map +1 -0
- package/dist/jsdelivr/hooks/useHybridCart.js +23 -0
- package/dist/jsdelivr/hooks/useHybridCart.js.map +1 -0
- package/dist/jsdelivr/hooks/useListenerStatus.js +33 -0
- package/dist/jsdelivr/hooks/useListenerStatus.js.map +1 -0
- package/dist/jsdelivr/index.js +72 -0
- package/dist/jsdelivr/index.js.map +1 -0
- package/dist/jsdelivr/utils/formatValue.js +22 -0
- package/dist/jsdelivr/utils/formatValue.js.map +1 -0
- package/dist/jsdelivr/utils/getTargetElement.js +13 -0
- package/dist/jsdelivr/utils/getTargetElement.js.map +1 -0
- package/dist/jsdelivr/utils/getTemplateContent.js +11 -0
- package/dist/jsdelivr/utils/getTemplateContent.js.map +1 -0
- package/dist/jsdelivr/utils/getValueFromPath.js +14 -0
- package/dist/jsdelivr/utils/getValueFromPath.js.map +1 -0
- package/dist/jsdelivr/utils/index.js +7 -0
- package/dist/jsdelivr/utils/index.js.map +1 -0
- package/dist/jsdelivr/utils/parseNestedObject.js +32 -0
- package/dist/jsdelivr/utils/parseNestedObject.js.map +1 -0
- package/dist/main/components/cart-context.js +22 -0
- package/dist/main/components/cart-context.js.map +1 -0
- package/dist/main/components/cart-data-array-item.js +19 -0
- package/dist/main/components/cart-data-array-item.js.map +1 -0
- package/dist/main/components/cart-data-array.js +59 -0
- package/dist/main/components/cart-data-array.js.map +1 -0
- package/dist/main/components/cart-data-conditions.js +98 -0
- package/dist/main/components/cart-data-conditions.js.map +1 -0
- package/dist/main/components/cart-data-injection.js +89 -0
- package/dist/main/components/cart-data-injection.js.map +1 -0
- package/dist/main/components/cart-data-listener-status.js +36 -0
- package/dist/main/components/cart-data-listener-status.js.map +1 -0
- package/dist/main/components/cart-data-listener.js +163 -0
- package/dist/main/components/cart-data-listener.js.map +1 -0
- package/dist/main/components/cart-data.js +29 -0
- package/dist/main/components/cart-data.js.map +1 -0
- package/dist/main/components/cart-loading-state.js +39 -0
- package/dist/main/components/cart-loading-state.js.map +1 -0
- package/dist/main/components/index.js +11 -0
- package/dist/main/components/index.js.map +1 -0
- package/dist/main/hooks/index.js +7 -0
- package/dist/main/hooks/index.js.map +1 -0
- package/dist/main/hooks/useAjaxCart.js +23 -0
- package/dist/main/hooks/useAjaxCart.js.map +1 -0
- package/dist/main/hooks/useCartValue.js +23 -0
- package/dist/main/hooks/useCartValue.js.map +1 -0
- package/dist/main/hooks/useFormattedValue.js +27 -0
- package/dist/main/hooks/useFormattedValue.js.map +1 -0
- package/dist/main/hooks/useFullPropertyPath.js +35 -0
- package/dist/main/hooks/useFullPropertyPath.js.map +1 -0
- package/dist/main/hooks/useListenerStatus.js +33 -0
- package/dist/main/hooks/useListenerStatus.js.map +1 -0
- package/dist/main/index.d.ts +14996 -0
- package/dist/main/index.js +72 -0
- package/dist/main/index.js.map +1 -0
- package/dist/main/utils/formatValue.js +22 -0
- package/dist/main/utils/formatValue.js.map +1 -0
- package/dist/main/utils/getTargetElement.js +13 -0
- package/dist/main/utils/getTargetElement.js.map +1 -0
- package/dist/main/utils/getTemplateContent.js +11 -0
- package/dist/main/utils/getTemplateContent.js.map +1 -0
- package/dist/main/utils/getValueFromPath.js +14 -0
- package/dist/main/utils/getValueFromPath.js.map +1 -0
- package/dist/main/utils/index.js +7 -0
- package/dist/main/utils/index.js.map +1 -0
- package/dist/main/utils/parseNestedObject.js +32 -0
- package/dist/main/utils/parseNestedObject.js.map +1 -0
- 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
|
+
}
|