@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: string;
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;AAEjE,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,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;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;AAqCD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAwDvE"}
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 || PRODUCTION_ENVIRONMENT;
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 always
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,cA+CpB,CAAC"}
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);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pack/hydrogen",
3
3
  "description": "Pack Hydrogen",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "exports": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "engines": {