@pack/hydrogen 0.1.0 → 0.1.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.
|
@@ -18,11 +18,13 @@ interface EnvironmentOptions {
|
|
|
18
18
|
}
|
|
19
19
|
interface CreatePackClientOptions extends EnvironmentOptions {
|
|
20
20
|
apiUrl?: string;
|
|
21
|
-
token
|
|
21
|
+
token?: string;
|
|
22
22
|
preview?: {
|
|
23
23
|
session: PreviewSession;
|
|
24
24
|
};
|
|
25
25
|
contentEnvironment?: string;
|
|
26
|
+
/** Default theme data to use when no token is provided */
|
|
27
|
+
defaultThemeData?: DefaultThemeData;
|
|
26
28
|
}
|
|
27
29
|
type Variables = Record<string, any>;
|
|
28
30
|
interface QueryOptions {
|
|
@@ -47,6 +49,9 @@ export interface Pack {
|
|
|
47
49
|
query: <T = any>(query: string, options?: QueryOptions) => Promise<QueryResponse<T>>;
|
|
48
50
|
isValidEditToken: PackClient["isValidEditToken"];
|
|
49
51
|
}
|
|
52
|
+
interface DefaultThemeData {
|
|
53
|
+
data: Record<string, any>;
|
|
54
|
+
}
|
|
50
55
|
export declare function createPackClient(options: CreatePackClientOptions): Pack;
|
|
51
56
|
export {};
|
|
52
57
|
//# sourceMappingURL=create-pack-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pack-client.d.ts","sourceRoot":"","sources":["../src/create-pack-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-pack-client.d.ts","sourceRoot":"","sources":["../src/create-pack-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,uGAAuG;AACvG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,UAAU,kBAAkB;IAC1B;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC1C;AAED,UAAU,uBAAwB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,IAAI;IACnB,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,gBAAgB,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;CAClD;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAsFD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAwFvE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PackClient } from "@pack/client";
|
|
2
2
|
import { CacheCustom, createWithCache } from "@shopify/hydrogen";
|
|
3
|
-
const PRODUCTION_ENVIRONMENT = "production";
|
|
4
3
|
/**
|
|
5
4
|
* Create an SHA-256 hash as a hex string
|
|
6
5
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string
|
|
@@ -31,13 +30,70 @@ const cacheCustom = CacheCustom({
|
|
|
31
30
|
staleWhileRevalidate: 82800,
|
|
32
31
|
staleIfError: 86400, // 1 day
|
|
33
32
|
});
|
|
33
|
+
/** Resolves the default data for a given query based on the theme config */
|
|
34
|
+
function resolveQuery({ query, variables, defaultThemeData, }) {
|
|
35
|
+
const queryField = extractTopLevelField(query);
|
|
36
|
+
const identifier = variables?.handle || variables?.id;
|
|
37
|
+
const defaultDataForField = defaultThemeData.data[queryField];
|
|
38
|
+
if (!defaultDataForField) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
[queryField]: identifier
|
|
43
|
+
? defaultDataForField[identifier]
|
|
44
|
+
: defaultDataForField,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extracts the top-level field from a GraphQL query string.
|
|
49
|
+
*
|
|
50
|
+
* The function assumes that the query follows the standard GraphQL syntax
|
|
51
|
+
* and expects the top-level field to be the first field in the query.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const query = `
|
|
55
|
+
* query GetProduct($id: ID!) {
|
|
56
|
+
* product(id: $id) {
|
|
57
|
+
* id
|
|
58
|
+
* name
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
* `;
|
|
62
|
+
* const topLevelField = extractTopLevelField(query);
|
|
63
|
+
* console.log(topLevelField); // Output: "product"
|
|
64
|
+
*/
|
|
65
|
+
function extractTopLevelField(query) {
|
|
66
|
+
const match = query.match(/\{[^{]*?\w+(?=\(|:|\s*\{)/);
|
|
67
|
+
if (match) {
|
|
68
|
+
return match[0].slice(1).trim();
|
|
69
|
+
}
|
|
70
|
+
return "";
|
|
71
|
+
}
|
|
34
72
|
export function createPackClient(options) {
|
|
35
|
-
const { cache, waitUntil, preview, contentEnvironment, token, apiUrl } = options;
|
|
73
|
+
const { cache, waitUntil, preview, contentEnvironment, token, apiUrl, defaultThemeData, } = options;
|
|
36
74
|
const previewEnabled = !!preview?.session.get("enabled");
|
|
37
75
|
const previewEnvironment = preview?.session.get("environment");
|
|
38
|
-
const clientContentEnvironment = previewEnvironment || contentEnvironment
|
|
76
|
+
const clientContentEnvironment = previewEnvironment || contentEnvironment;
|
|
77
|
+
if (!token && !defaultThemeData) {
|
|
78
|
+
throw new Error("The Pack client token is missing or empty. Please provide a valid token or default theme data.");
|
|
79
|
+
}
|
|
80
|
+
if (!token) {
|
|
81
|
+
return {
|
|
82
|
+
preview,
|
|
83
|
+
isPreviewModeEnabled: () => previewEnabled,
|
|
84
|
+
async query(query, { variables } = {}) {
|
|
85
|
+
if (!defaultThemeData?.data) {
|
|
86
|
+
console.warn("Invalid default theme data provided to Pack client.");
|
|
87
|
+
return { data: null, error: null };
|
|
88
|
+
}
|
|
89
|
+
const data = resolveQuery({ query, variables, defaultThemeData });
|
|
90
|
+
return { data: data, error: null };
|
|
91
|
+
},
|
|
92
|
+
isValidEditToken: () => new Promise(() => false),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
39
95
|
const packClient = new PackClient({
|
|
40
|
-
// Use live API URL if preview mode is enabled
|
|
96
|
+
// Use live API URL if preview mode is enabled
|
|
41
97
|
apiUrl: previewEnabled ? "https://app.packdigital.com/graphql" : apiUrl,
|
|
42
98
|
token,
|
|
43
99
|
contentEnvironment: clientContentEnvironment,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-mode.d.ts","sourceRoot":"","sources":["../../src/preview/preview-mode.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAInC,KAAK,YAAY,GAAG,CAAC,IAAI,EACvB,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,KACzB,aAAa,CAAC,IAAI,CAAC,CAAC;AAEzB,KAAK,gBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,KAAK,QAAQ,CAAC;AAIhF,KAAK,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG;IACzD,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,YAYlB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAetB,CAAC;AAoBF;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,cAkBpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"preview-mode.d.ts","sourceRoot":"","sources":["../../src/preview/preview-mode.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAInC,KAAK,YAAY,GAAG,CAAC,IAAI,EACvB,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,KACzB,aAAa,CAAC,IAAI,CAAC,CAAC;AAEzB,KAAK,gBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,KAAK,QAAQ,CAAC;AAIhF,KAAK,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG;IACzD,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,YAYlB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAetB,CAAC;AAoBF;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,cAkBpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,cAwCpB,CAAC"}
|
|
@@ -74,7 +74,6 @@ export const loader = async function ({ request, context }) {
|
|
|
74
74
|
if (!pack.preview?.session)
|
|
75
75
|
return notFound();
|
|
76
76
|
const { searchParams } = new URL(request.url);
|
|
77
|
-
console.log("searchParams.customizerMeta", searchParams.get("customizerMeta"));
|
|
78
77
|
const token = searchParams.get("token");
|
|
79
78
|
const environment = searchParams.get("environment");
|
|
80
79
|
const path = searchParams.get("path") ?? ROOT_PATH;
|
|
@@ -89,12 +88,11 @@ export const loader = async function ({ request, context }) {
|
|
|
89
88
|
}
|
|
90
89
|
let customizerMetaJson;
|
|
91
90
|
try {
|
|
92
|
-
customizerMetaJson = JSON.parse(customizerMeta
|
|
91
|
+
customizerMetaJson = customizerMeta ? JSON.parse(customizerMeta) : null;
|
|
93
92
|
}
|
|
94
93
|
catch (_error) {
|
|
95
94
|
customizerMetaJson = null;
|
|
96
95
|
}
|
|
97
|
-
console.log("customizerMetaJson", customizerMetaJson);
|
|
98
96
|
pack.preview.session.set("enabled", true);
|
|
99
97
|
pack.preview.session.set("environment", environment);
|
|
100
98
|
pack.preview.session.set("customizerMeta", customizerMetaJson);
|