@netlify/cache 1.8.2 → 1.9.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.
@@ -3,6 +3,9 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
6
9
  var __export = (target, all) => {
7
10
  for (var name in all)
8
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -16,24 +19,10 @@ var __copyProps = (to, from, except, desc) => {
16
19
  return to;
17
20
  };
18
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var __accessCheck = (obj, member, msg) => {
20
- if (!member.has(obj))
21
- throw TypeError("Cannot " + msg);
22
- };
23
- var __privateGet = (obj, member, getter) => {
24
- __accessCheck(obj, member, "read from private field");
25
- return getter ? getter.call(obj) : member.get(obj);
26
- };
27
- var __privateAdd = (obj, member, value) => {
28
- if (member.has(obj))
29
- throw TypeError("Cannot add the same private member more than once");
30
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
31
- };
32
- var __privateSet = (obj, member, value, setter) => {
33
- __accessCheck(obj, member, "write to private field");
34
- setter ? setter.call(obj, value) : member.set(obj, value);
35
- return value;
36
- };
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
37
26
 
38
27
  // src/bootstrap/main.ts
39
28
  var main_exports = {};
@@ -52,6 +41,9 @@ var Operation = /* @__PURE__ */ ((Operation2) => {
52
41
  return Operation2;
53
42
  })(Operation || {});
54
43
 
44
+ // src/bootstrap/cache.ts
45
+ var import_runtime_utils = require("@netlify/runtime-utils");
46
+
55
47
  // src/bootstrap/errors.ts
56
48
  var ERROR_CODES = {
57
49
  invalid_vary: "Responses must not use unsupported directives of the `Netlify-Vary` header (https://ntl.fyi/cache_api_invalid_vary).",
@@ -78,14 +70,12 @@ var allowedProtocols = /* @__PURE__ */ new Set(["http:", "https:"]);
78
70
  var discardedHeaders = /* @__PURE__ */ new Set(["cookie", "content-encoding", "content-length"]);
79
71
  var getInternalHeaders = Symbol("getInternalHeaders");
80
72
  var serializeResourceHeaders = Symbol("serializeResourceHeaders");
81
- var _base64Encode, _getContext, _name, _userAgent;
73
+ var _getContext, _name, _userAgent;
82
74
  var NetlifyCache = class {
83
- constructor({ base64Encode, getContext, name, userAgent }) {
84
- __privateAdd(this, _base64Encode, void 0);
85
- __privateAdd(this, _getContext, void 0);
86
- __privateAdd(this, _name, void 0);
87
- __privateAdd(this, _userAgent, void 0);
88
- __privateSet(this, _base64Encode, base64Encode);
75
+ constructor({ getContext, name, userAgent }) {
76
+ __privateAdd(this, _getContext);
77
+ __privateAdd(this, _name);
78
+ __privateAdd(this, _userAgent);
89
79
  __privateSet(this, _getContext, getContext);
90
80
  __privateSet(this, _name, name);
91
81
  __privateSet(this, _userAgent, userAgent);
@@ -117,7 +107,7 @@ var NetlifyCache = class {
117
107
  headersMap[key] = value.split(",");
118
108
  }
119
109
  });
120
- return __privateGet(this, _base64Encode).call(this, JSON.stringify(headersMap));
110
+ return (0, import_runtime_utils.base64Encode)(JSON.stringify(headersMap));
121
111
  }
122
112
  async add(request) {
123
113
  await this.put(new Request(request), await fetch(request));
@@ -198,13 +188,12 @@ var NetlifyCache = class {
198
188
  method: "POST"
199
189
  });
200
190
  if (!cacheResponse.ok) {
201
- const errorDetail = cacheResponse.headers.get(ErrorDetail) ?? "";
191
+ const errorDetail = cacheResponse.headers?.get(ErrorDetail) ?? "";
202
192
  const errorMessage = ERROR_CODES[errorDetail] || GENERIC_ERROR;
203
193
  context.logger?.(`Failed to write to the cache: ${errorMessage}`);
204
194
  }
205
195
  }
206
196
  };
207
- _base64Encode = new WeakMap();
208
197
  _getContext = new WeakMap();
209
198
  _name = new WeakMap();
210
199
  _userAgent = new WeakMap();
@@ -234,8 +223,8 @@ var toCacheKey = (url) => encodeURIComponent(url.toString());
234
223
  var _environmentOptions, _stores;
235
224
  var NetlifyCacheStorage = class {
236
225
  constructor(environmentOptions) {
237
- __privateAdd(this, _environmentOptions, void 0);
238
- __privateAdd(this, _stores, void 0);
226
+ __privateAdd(this, _environmentOptions);
227
+ __privateAdd(this, _stores);
239
228
  __privateSet(this, _environmentOptions, environmentOptions);
240
229
  __privateSet(this, _stores, /* @__PURE__ */ new Map());
241
230
  }
@@ -1,5 +1,5 @@
1
- import { E as EnvironmentOptions } from '../cache-7af07baa.js';
2
- export { B as Base64Encoder, N as NetlifyCache, O as Operation, R as RequestContextFactory } from '../cache-7af07baa.js';
1
+ import { E as EnvironmentOptions } from '../cache-BHHI9pin.cjs';
2
+ export { N as NetlifyCache, O as Operation, R as RequestContextFactory } from '../cache-BHHI9pin.cjs';
3
3
 
4
4
  declare class NetlifyCacheStorage {
5
5
  #private;
@@ -1,5 +1,5 @@
1
- import { E as EnvironmentOptions } from '../cache-7af07baa.js';
2
- export { B as Base64Encoder, N as NetlifyCache, O as Operation, R as RequestContextFactory } from '../cache-7af07baa.js';
1
+ import { E as EnvironmentOptions } from '../cache-BHHI9pin.js';
2
+ export { N as NetlifyCache, O as Operation, R as RequestContextFactory } from '../cache-BHHI9pin.js';
3
3
 
4
4
  declare class NetlifyCacheStorage {
5
5
  #private;
@@ -1,21 +1,10 @@
1
- var __accessCheck = (obj, member, msg) => {
2
- if (!member.has(obj))
3
- throw TypeError("Cannot " + msg);
4
- };
5
- var __privateGet = (obj, member, getter) => {
6
- __accessCheck(obj, member, "read from private field");
7
- return getter ? getter.call(obj) : member.get(obj);
8
- };
9
- var __privateAdd = (obj, member, value) => {
10
- if (member.has(obj))
11
- throw TypeError("Cannot add the same private member more than once");
12
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
- };
14
- var __privateSet = (obj, member, value, setter) => {
15
- __accessCheck(obj, member, "write to private field");
16
- setter ? setter.call(obj, value) : member.set(obj, value);
17
- return value;
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
18
3
  };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
19
8
 
20
9
  // src/bootstrap/environment.ts
21
10
  var Operation = /* @__PURE__ */ ((Operation2) => {
@@ -25,6 +14,9 @@ var Operation = /* @__PURE__ */ ((Operation2) => {
25
14
  return Operation2;
26
15
  })(Operation || {});
27
16
 
17
+ // src/bootstrap/cache.ts
18
+ import { base64Encode } from "@netlify/runtime-utils";
19
+
28
20
  // src/bootstrap/errors.ts
29
21
  var ERROR_CODES = {
30
22
  invalid_vary: "Responses must not use unsupported directives of the `Netlify-Vary` header (https://ntl.fyi/cache_api_invalid_vary).",
@@ -51,14 +43,12 @@ var allowedProtocols = /* @__PURE__ */ new Set(["http:", "https:"]);
51
43
  var discardedHeaders = /* @__PURE__ */ new Set(["cookie", "content-encoding", "content-length"]);
52
44
  var getInternalHeaders = Symbol("getInternalHeaders");
53
45
  var serializeResourceHeaders = Symbol("serializeResourceHeaders");
54
- var _base64Encode, _getContext, _name, _userAgent;
46
+ var _getContext, _name, _userAgent;
55
47
  var NetlifyCache = class {
56
- constructor({ base64Encode, getContext, name, userAgent }) {
57
- __privateAdd(this, _base64Encode, void 0);
58
- __privateAdd(this, _getContext, void 0);
59
- __privateAdd(this, _name, void 0);
60
- __privateAdd(this, _userAgent, void 0);
61
- __privateSet(this, _base64Encode, base64Encode);
48
+ constructor({ getContext, name, userAgent }) {
49
+ __privateAdd(this, _getContext);
50
+ __privateAdd(this, _name);
51
+ __privateAdd(this, _userAgent);
62
52
  __privateSet(this, _getContext, getContext);
63
53
  __privateSet(this, _name, name);
64
54
  __privateSet(this, _userAgent, userAgent);
@@ -90,7 +80,7 @@ var NetlifyCache = class {
90
80
  headersMap[key] = value.split(",");
91
81
  }
92
82
  });
93
- return __privateGet(this, _base64Encode).call(this, JSON.stringify(headersMap));
83
+ return base64Encode(JSON.stringify(headersMap));
94
84
  }
95
85
  async add(request) {
96
86
  await this.put(new Request(request), await fetch(request));
@@ -171,13 +161,12 @@ var NetlifyCache = class {
171
161
  method: "POST"
172
162
  });
173
163
  if (!cacheResponse.ok) {
174
- const errorDetail = cacheResponse.headers.get(ErrorDetail) ?? "";
164
+ const errorDetail = cacheResponse.headers?.get(ErrorDetail) ?? "";
175
165
  const errorMessage = ERROR_CODES[errorDetail] || GENERIC_ERROR;
176
166
  context.logger?.(`Failed to write to the cache: ${errorMessage}`);
177
167
  }
178
168
  }
179
169
  };
180
- _base64Encode = new WeakMap();
181
170
  _getContext = new WeakMap();
182
171
  _name = new WeakMap();
183
172
  _userAgent = new WeakMap();
@@ -207,8 +196,8 @@ var toCacheKey = (url) => encodeURIComponent(url.toString());
207
196
  var _environmentOptions, _stores;
208
197
  var NetlifyCacheStorage = class {
209
198
  constructor(environmentOptions) {
210
- __privateAdd(this, _environmentOptions, void 0);
211
- __privateAdd(this, _stores, void 0);
199
+ __privateAdd(this, _environmentOptions);
200
+ __privateAdd(this, _stores);
212
201
  __privateSet(this, _environmentOptions, environmentOptions);
213
202
  __privateSet(this, _stores, /* @__PURE__ */ new Map());
214
203
  }
@@ -1,7 +1,5 @@
1
- type Base64Encoder = (input: string) => string;
2
1
  type Logger = (...args: any[]) => void;
3
2
  interface EnvironmentOptions {
4
- base64Encode: Base64Encoder;
5
3
  getContext: RequestContextFactory;
6
4
  userAgent?: string;
7
5
  }
@@ -27,7 +25,7 @@ declare const getInternalHeaders: unique symbol;
27
25
  declare const serializeResourceHeaders: unique symbol;
28
26
  declare class NetlifyCache implements Cache {
29
27
  #private;
30
- constructor({ base64Encode, getContext, name, userAgent }: NetlifyCacheOptions);
28
+ constructor({ getContext, name, userAgent }: NetlifyCacheOptions);
31
29
  private [getInternalHeaders];
32
30
  private [serializeResourceHeaders];
33
31
  add(request: RequestInfo): Promise<void>;
@@ -39,4 +37,4 @@ declare class NetlifyCache implements Cache {
39
37
  put(request: RequestInfo | URL | string, response: Response): Promise<void>;
40
38
  }
41
39
 
42
- export { Base64Encoder as B, EnvironmentOptions as E, NetlifyCache as N, Operation as O, RequestContextFactory as R };
40
+ export { type EnvironmentOptions as E, NetlifyCache as N, Operation as O, type RequestContextFactory as R };
@@ -0,0 +1,40 @@
1
+ type Logger = (...args: any[]) => void;
2
+ interface EnvironmentOptions {
3
+ getContext: RequestContextFactory;
4
+ userAgent?: string;
5
+ }
6
+ declare enum Operation {
7
+ Delete = "delete",
8
+ Read = "read",
9
+ Write = "write"
10
+ }
11
+ type RequestContextFactory = (options: {
12
+ operation: Operation;
13
+ }) => RequestContext | null;
14
+ interface RequestContext {
15
+ host: string;
16
+ logger?: Logger;
17
+ token: string;
18
+ url: string;
19
+ }
20
+
21
+ type NetlifyCacheOptions = EnvironmentOptions & {
22
+ name: string;
23
+ };
24
+ declare const getInternalHeaders: unique symbol;
25
+ declare const serializeResourceHeaders: unique symbol;
26
+ declare class NetlifyCache implements Cache {
27
+ #private;
28
+ constructor({ getContext, name, userAgent }: NetlifyCacheOptions);
29
+ private [getInternalHeaders];
30
+ private [serializeResourceHeaders];
31
+ add(request: RequestInfo): Promise<void>;
32
+ addAll(requests: RequestInfo[]): Promise<void>;
33
+ delete(request: RequestInfo): Promise<boolean>;
34
+ keys(_request?: Request): Promise<never[]>;
35
+ match(request: RequestInfo): Promise<Response | undefined>;
36
+ matchAll(request?: RequestInfo, _options?: CacheQueryOptions): Promise<readonly Response[]>;
37
+ put(request: RequestInfo | URL | string, response: Response): Promise<void>;
38
+ }
39
+
40
+ export { type EnvironmentOptions as E, NetlifyCache as N, Operation as O, type RequestContextFactory as R };
package/dist/main.cjs CHANGED
@@ -340,14 +340,20 @@ var fetchWithCache = async (request, optionsOrCacheSettings, cacheOptionsParam)
340
340
  return cached;
341
341
  }
342
342
  const fresh = await fetch(request, requestInit);
343
- const responseForCache = setCacheHeaders(fresh.clone(), cacheSettings);
344
- const cachePut = cache.put(request, responseForCache);
343
+ if (!fresh.body) {
344
+ return fresh;
345
+ }
346
+ const [clientStream, cacheStream] = fresh.body.tee();
347
+ const clientResponse = new Response(clientStream, fresh);
348
+ const cacheResponse = new Response(cacheStream, fresh);
349
+ applyHeaders(cacheResponse.headers, cacheHeaders(cacheSettings));
350
+ const cachePut = cache.put(request, cacheResponse);
345
351
  if (onCachePut) {
346
352
  await onCachePut(cachePut);
347
353
  } else {
348
354
  await cachePut;
349
355
  }
350
- return fresh;
356
+ return clientResponse;
351
357
  };
352
358
 
353
359
  // src/constants.ts
package/dist/main.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { N as NetlifyCache } from './cache-7af07baa.js';
1
+ import { N as NetlifyCache } from './cache-BHHI9pin.cjs';
2
2
 
3
3
  /**
4
4
  * Polyfill for local development environments where `globalThis.caches` is not
package/dist/main.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { N as NetlifyCache } from './cache-7af07baa.js';
1
+ import { N as NetlifyCache } from './cache-BHHI9pin.js';
2
2
 
3
3
  /**
4
4
  * Polyfill for local development environments where `globalThis.caches` is not
package/dist/main.js CHANGED
@@ -306,14 +306,20 @@ var fetchWithCache = async (request, optionsOrCacheSettings, cacheOptionsParam)
306
306
  return cached;
307
307
  }
308
308
  const fresh = await fetch(request, requestInit);
309
- const responseForCache = setCacheHeaders(fresh.clone(), cacheSettings);
310
- const cachePut = cache.put(request, responseForCache);
309
+ if (!fresh.body) {
310
+ return fresh;
311
+ }
312
+ const [clientStream, cacheStream] = fresh.body.tee();
313
+ const clientResponse = new Response(clientStream, fresh);
314
+ const cacheResponse = new Response(cacheStream, fresh);
315
+ applyHeaders(cacheResponse.headers, cacheHeaders(cacheSettings));
316
+ const cachePut = cache.put(request, cacheResponse);
311
317
  if (onCachePut) {
312
318
  await onCachePut(cachePut);
313
319
  } else {
314
320
  await cachePut;
315
321
  }
316
- return fresh;
322
+ return clientResponse;
317
323
  };
318
324
 
319
325
  // src/constants.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netlify/cache",
3
- "version": "1.8.2",
3
+ "version": "1.9.0",
4
4
  "description": "TypeScript utilities for interacting with the Netlify cache",
5
5
  "type": "module",
6
6
  "engines": {
@@ -67,10 +67,14 @@
67
67
  },
68
68
  "author": "Netlify Inc.",
69
69
  "devDependencies": {
70
+ "@netlify/dev-utils": "2.0.0",
70
71
  "npm-run-all2": "^7.0.2",
71
72
  "semver": "^7.5.3",
72
73
  "tmp-promise": "^3.0.3",
73
- "tsup": "^7.2.0",
74
- "vitest": "^0.34.0"
74
+ "tsup": "^8.0.0",
75
+ "vitest": "^3.0.0"
76
+ },
77
+ "dependencies": {
78
+ "@netlify/runtime-utils": "1.1.0"
75
79
  }
76
80
  }