@codewheel/jsonapi-frontend-client 1.0.3 → 1.0.4

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/README.md CHANGED
@@ -61,6 +61,10 @@ await resolvePath("/about-us", {
61
61
  })
62
62
  ```
63
63
 
64
+ ### Caching note (Next.js / SSR)
65
+
66
+ If you pass `Authorization` (or `Cookie`) headers, this client defaults to `cache: "no-store"` unless you explicitly set `options.init.cache`.
67
+
64
68
  ## Query building (optional)
65
69
 
66
70
  This client doesn’t require a query builder, but `drupal-jsonapi-params` works well:
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAoBD,wBAAsB,YAAY,CAAC,CAAC,GAAG,eAAe,EACpD,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAG,eAAe,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,CAAC,CAAC,CAyCZ"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAwBD,wBAAsB,YAAY,CAAC,CAAC,GAAG,eAAe,EACpD,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,CAAC,CAAC,CAuDZ;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAG,eAAe,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,CAAC,CAAC,CAyDZ"}
package/dist/fetch.js CHANGED
@@ -46,6 +46,9 @@ function buildSafeUrl(input, base, options) {
46
46
  }
47
47
  return url;
48
48
  }
49
+ function hasAuthLikeHeaders(headers) {
50
+ return headers.has("authorization") || headers.has("cookie");
51
+ }
49
52
  export async function fetchJsonApi(jsonapiPath, options) {
50
53
  const base = getDrupalBaseUrlFromOptions({ baseUrl: options?.baseUrl, envKey: options?.envKey });
51
54
  const fetcher = getFetch(options?.fetch);
@@ -63,15 +66,28 @@ export async function fetchJsonApi(jsonapiPath, options) {
63
66
  if (!headers.has("Accept")) {
64
67
  headers.set("Accept", "application/vnd.api+json");
65
68
  }
66
- const res = await fetcher(url.toString(), {
69
+ const hasExplicitCache = options?.init?.cache !== undefined;
70
+ const disableCaching = hasAuthLikeHeaders(headers) && !hasExplicitCache;
71
+ const init = {
67
72
  ...options?.init,
68
73
  headers,
69
- next: {
70
- ...(options?.init?.next ?? {}),
71
- revalidate: options?.revalidate,
72
- tags: Array.from(new Set([...(options?.init?.next?.tags ?? []), ...tags])),
73
- },
74
- });
74
+ };
75
+ if (disableCaching) {
76
+ init.cache = "no-store";
77
+ // Avoid mixing Next.js cache options with no-store.
78
+ delete init.next;
79
+ }
80
+ const fetchInit = disableCaching
81
+ ? init
82
+ : {
83
+ ...init,
84
+ next: {
85
+ ...(options?.init?.next ?? {}),
86
+ revalidate: options?.revalidate,
87
+ tags: Array.from(new Set([...(options?.init?.next?.tags ?? []), ...tags])),
88
+ },
89
+ };
90
+ const res = await fetcher(url.toString(), fetchInit);
75
91
  if (!res.ok) {
76
92
  throw new Error(`JSON:API fetch failed: ${res.status} ${res.statusText}`);
77
93
  }
@@ -99,15 +115,27 @@ export async function fetchView(dataUrl, options) {
99
115
  if (!headers.has("Accept")) {
100
116
  headers.set("Accept", "application/vnd.api+json");
101
117
  }
102
- const res = await fetcher(url.toString(), {
118
+ const hasExplicitCache = options?.init?.cache !== undefined;
119
+ const disableCaching = hasAuthLikeHeaders(headers) && !hasExplicitCache;
120
+ const init = {
103
121
  ...options?.init,
104
122
  headers,
105
- next: {
106
- ...(options?.init?.next ?? {}),
107
- revalidate: options?.revalidate,
108
- tags: Array.from(new Set([...(options?.init?.next?.tags ?? []), ...tags])),
109
- },
110
- });
123
+ };
124
+ if (disableCaching) {
125
+ init.cache = "no-store";
126
+ delete init.next;
127
+ }
128
+ const fetchInit = disableCaching
129
+ ? init
130
+ : {
131
+ ...init,
132
+ next: {
133
+ ...(options?.init?.next ?? {}),
134
+ revalidate: options?.revalidate,
135
+ tags: Array.from(new Set([...(options?.init?.next?.tags ?? []), ...tags])),
136
+ },
137
+ };
138
+ const res = await fetcher(url.toString(), fetchInit);
111
139
  if (!res.ok) {
112
140
  throw new Error(`View fetch failed: ${res.status} ${res.statusText}`);
113
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAA;AAE1G;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAA;AAE1G;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,GACA,OAAO,CAAC,eAAe,CAAC,CA8C1B"}
package/dist/resolve.js CHANGED
@@ -15,14 +15,26 @@ export async function resolvePath(path, options) {
15
15
  if (!headers.has("Accept")) {
16
16
  headers.set("Accept", "application/vnd.api+json");
17
17
  }
18
- const res = await fetcher(url.toString(), {
18
+ const hasExplicitCache = options?.init?.cache !== undefined;
19
+ const disableCaching = (headers.has("authorization") || headers.has("cookie")) && !hasExplicitCache;
20
+ const init = {
19
21
  ...options?.init,
20
22
  headers,
21
- next: {
22
- ...(options?.init?.next ?? {}),
23
- revalidate: options?.revalidate,
24
- },
25
- });
23
+ };
24
+ if (disableCaching) {
25
+ init.cache = "no-store";
26
+ delete init.next;
27
+ }
28
+ const fetchInit = disableCaching
29
+ ? init
30
+ : {
31
+ ...init,
32
+ next: {
33
+ ...(options?.init?.next ?? {}),
34
+ revalidate: options?.revalidate,
35
+ },
36
+ };
37
+ const res = await fetcher(url.toString(), fetchInit);
26
38
  if (!res.ok) {
27
39
  throw new Error(`Resolver failed: ${res.status} ${res.statusText}`);
28
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codewheel/jsonapi-frontend-client",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "TypeScript client helpers for Drupal drupal/jsonapi_frontend",
5
5
  "homepage": "https://github.com/code-wheel/jsonapi-frontend-client#readme",
6
6
  "repository": {