@pack/hydrogen 0.0.4 → 0.0.6

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.
@@ -1,9 +1,9 @@
1
1
  /// <reference types="@shopify/oxygen-workers-types" />
2
2
  import { PackClient } from "@pack/client";
3
- import { CacheLong } from "@shopify/hydrogen";
3
+ import { CacheCustom } from "@shopify/hydrogen";
4
4
  import { PreviewSession } from "./preview/preview-session";
5
5
  /** @see https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/cache#caching-strategies */
6
- type CachingStrategy = ReturnType<typeof CacheLong>;
6
+ type CachingStrategy = ReturnType<typeof CacheCustom>;
7
7
  interface EnvironmentOptions {
8
8
  /**
9
9
  * A Cache API instance.
@@ -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,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,uGAAuG;AACvG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAEpD,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;AA8BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAkDvE"}
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,CA6DvE"}
@@ -1,5 +1,5 @@
1
1
  import { PackClient } from "@pack/client";
2
- import { CacheLong, createWithCache } from "@shopify/hydrogen";
2
+ import { CacheCustom, createWithCache } from "@shopify/hydrogen";
3
3
  const PRODUCTION_ENVIRONMENT = "production";
4
4
  /**
5
5
  * Create an SHA-256 hash as a hex string
@@ -25,13 +25,21 @@ function hashQuery(query, variables) {
25
25
  hash += JSON.stringify(variables);
26
26
  return sha256(hash);
27
27
  }
28
+ // Extends the CacheLong strategy with a stale-if-error policy
29
+ const cacheCustom = CacheCustom({
30
+ maxAge: 3600,
31
+ staleWhileRevalidate: 82800,
32
+ staleIfError: 86400, // 1 day
33
+ });
28
34
  export function createPackClient(options) {
29
35
  const { cache, waitUntil, preview, contentEnvironment, token, apiUrl } = options;
30
36
  const previewEnabled = !!preview?.session.get("enabled");
31
37
  const previewEnvironment = preview?.session.get("environment");
32
38
  const clientContentEnvironment = previewEnvironment || contentEnvironment || PRODUCTION_ENVIRONMENT;
33
39
  // Use live API URL if preview mode is enabled and no API URL is provided
34
- const clientApiUrl = previewEnabled && !apiUrl ? "https://api.packdigital.com/graphql" : apiUrl;
40
+ const clientApiUrl = previewEnabled && !apiUrl
41
+ ? "https://apicdn.packdigital.com/graphql"
42
+ : apiUrl;
35
43
  const packClient = new PackClient({
36
44
  apiUrl: clientApiUrl,
37
45
  token,
@@ -40,7 +48,7 @@ export function createPackClient(options) {
40
48
  return {
41
49
  preview,
42
50
  isPreviewModeEnabled: () => previewEnabled,
43
- async query(query, { variables, cache: strategy = CacheLong() } = {}) {
51
+ async query(query, { variables, cache: strategy = cacheCustom } = {}) {
44
52
  const queryHash = await hashQuery(query, variables);
45
53
  const withCache = createWithCache({
46
54
  cache,
@@ -54,9 +62,22 @@ export function createPackClient(options) {
54
62
  queryVariables.version = "PUBLISHED";
55
63
  }
56
64
  // Preview mode always bypasses the cache
57
- if (previewEnabled)
58
- return packClient.fetch(query, { variables: queryVariables });
59
- return withCache(queryHash, strategy, () => packClient.fetch(query, { variables: queryVariables }));
65
+ if (previewEnabled) {
66
+ try {
67
+ return await packClient.fetch(query, { variables: queryVariables });
68
+ }
69
+ catch (error) {
70
+ return { error, data: {} };
71
+ }
72
+ }
73
+ return withCache(queryHash, strategy, async () => {
74
+ try {
75
+ return await packClient.fetch(query, { variables: queryVariables });
76
+ }
77
+ catch (error) {
78
+ return { error, data: {} };
79
+ }
80
+ });
60
81
  },
61
82
  isValidEditToken: (token) => packClient.isValidEditToken(token),
62
83
  };
@@ -1,4 +1,4 @@
1
- import { type ActionFunction, type LoaderFunction } from "@shopify/remix-oxygen";
1
+ import { type ActionFunction, type LoaderFunction } from "@remix-run/server-runtime";
2
2
  type JsonFunction = <Data>(data: Data, init?: number | ResponseInit) => TypedResponse<Data>;
3
3
  type RedirectFunction = (url: string, init?: number | ResponseInit) => Response;
4
4
  type TypedResponse<T = unknown> = Omit<Response, "json"> & {
@@ -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,uBAAuB,CAAC;AAI/B,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+BpB,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,cA+BpB,CAAC"}
@@ -81,8 +81,8 @@ export const loader = async function ({ request, context }) {
81
81
  if (!searchParams.has("token")) {
82
82
  throw new MissingTokenError();
83
83
  }
84
- const isValidToken = await pack.isValidEditToken(token);
85
- if (!isValidToken) {
84
+ const validatedToken = await pack.isValidEditToken(token);
85
+ if (!validatedToken) {
86
86
  throw new InvalidTokenError();
87
87
  }
88
88
  pack.preview.session.set("enabled", true);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pack/hydrogen",
3
3
  "description": "Pack Hydrogen",
4
- "version": "0.0.4",
4
+ "version": "0.0.6",
5
5
  "exports": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "engines": {
@@ -22,11 +22,15 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@pack/client": "^0.0.6",
25
+ "@pack/client": "^0.0.7",
26
26
  "@shopify/hydrogen": "^2023.10.2"
27
27
  },
28
28
  "devDependencies": {
29
+ "@remix-run/server-runtime": "^2.0.0",
29
30
  "@shopify/oxygen-workers-types": "^4.0.0",
30
31
  "@shopify/remix-oxygen": "^2.0.1"
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^18.0.0"
31
35
  }
32
36
  }