@netlify/cache 1.1.0 → 1.3.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.
- package/dist/bootstrap/main.cjs +93 -74
- package/dist/bootstrap/main.d.cts +4 -27
- package/dist/bootstrap/main.d.ts +4 -27
- package/dist/bootstrap/main.js +96 -92
- package/dist/cache-854474ad.d.ts +33 -0
- package/dist/chunk-I5FZDZ6V.js +46 -0
- package/dist/main.cjs +280 -0
- package/dist/main.d.cts +155 -1
- package/dist/main.d.ts +155 -1
- package/dist/main.js +270 -0
- package/package.json +7 -5
package/dist/bootstrap/main.cjs
CHANGED
|
@@ -43,22 +43,58 @@ __export(main_exports, {
|
|
|
43
43
|
});
|
|
44
44
|
module.exports = __toCommonJS(main_exports);
|
|
45
45
|
|
|
46
|
+
// src/headers.ts
|
|
47
|
+
var ResourceHeaders = "netlify-programmable-headers";
|
|
48
|
+
var ResourceStatus = "netlify-programmable-status";
|
|
49
|
+
var ResourceStore = "netlify-programmable-store";
|
|
50
|
+
var NetlifyForwardedHost = "netlify-forwarded-host";
|
|
51
|
+
var UserAgent = "user-agent";
|
|
52
|
+
|
|
46
53
|
// src/bootstrap/cache.ts
|
|
47
|
-
var import_node_buffer = require("buffer");
|
|
48
|
-
var HEADERS_HEADER = "Netlify-Programmable-Headers";
|
|
49
|
-
var STATUS_HEADER = "Netlify-Programmable-Status";
|
|
50
|
-
var STORE_HEADER = "Netlify-Programmable-Store";
|
|
51
54
|
var allowedProtocols = /* @__PURE__ */ new Set(["http:", "https:"]);
|
|
52
55
|
var discardedHeaders = /* @__PURE__ */ new Set(["cookie", "content-encoding", "content-length"]);
|
|
53
|
-
var
|
|
56
|
+
var getInternalHeaders = Symbol("getInternalHeaders");
|
|
57
|
+
var serializeResourceHeaders = Symbol("serializeResourceHeaders");
|
|
58
|
+
var _base64Encode, _getContext, _name, _userAgent;
|
|
54
59
|
var NetlifyCache = class {
|
|
55
|
-
constructor({
|
|
56
|
-
__privateAdd(this,
|
|
57
|
-
__privateAdd(this,
|
|
60
|
+
constructor({ base64Encode, getContext, name, userAgent }) {
|
|
61
|
+
__privateAdd(this, _base64Encode, void 0);
|
|
62
|
+
__privateAdd(this, _getContext, void 0);
|
|
58
63
|
__privateAdd(this, _name, void 0);
|
|
59
|
-
|
|
60
|
-
__privateSet(this,
|
|
64
|
+
__privateAdd(this, _userAgent, void 0);
|
|
65
|
+
__privateSet(this, _base64Encode, base64Encode);
|
|
66
|
+
__privateSet(this, _getContext, getContext);
|
|
61
67
|
__privateSet(this, _name, name);
|
|
68
|
+
__privateSet(this, _userAgent, userAgent);
|
|
69
|
+
}
|
|
70
|
+
[getInternalHeaders](requestContext) {
|
|
71
|
+
const { host, token } = requestContext;
|
|
72
|
+
const headers = {
|
|
73
|
+
Authorization: `Bearer ${token}`,
|
|
74
|
+
[ResourceStore]: __privateGet(this, _name)
|
|
75
|
+
};
|
|
76
|
+
if (host) {
|
|
77
|
+
headers[NetlifyForwardedHost] = host;
|
|
78
|
+
}
|
|
79
|
+
if (__privateGet(this, _userAgent)) {
|
|
80
|
+
headers[UserAgent] = __privateGet(this, _userAgent);
|
|
81
|
+
}
|
|
82
|
+
return headers;
|
|
83
|
+
}
|
|
84
|
+
[serializeResourceHeaders](headers) {
|
|
85
|
+
const headersMap = {};
|
|
86
|
+
headers.forEach((value, key) => {
|
|
87
|
+
if (discardedHeaders.has(key)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (key === "set-cookie") {
|
|
91
|
+
headersMap[key] = headersMap[key] || [];
|
|
92
|
+
headersMap[key].push(value);
|
|
93
|
+
} else {
|
|
94
|
+
headersMap[key] = value.split(",");
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return __privateGet(this, _base64Encode).call(this, JSON.stringify(headersMap));
|
|
62
98
|
}
|
|
63
99
|
async add(request) {
|
|
64
100
|
await this.put(new Request(request), await fetch(request));
|
|
@@ -66,6 +102,36 @@ var NetlifyCache = class {
|
|
|
66
102
|
async addAll(requests) {
|
|
67
103
|
await Promise.allSettled(requests.map((request) => this.add(request)));
|
|
68
104
|
}
|
|
105
|
+
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
106
|
+
async delete(request) {
|
|
107
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
108
|
+
const resourceURL = extractAndValidateURL(request);
|
|
109
|
+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
|
|
110
|
+
headers: this[getInternalHeaders](context),
|
|
111
|
+
method: "DELETE"
|
|
112
|
+
});
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
116
|
+
async keys(_request) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
async match(request) {
|
|
120
|
+
try {
|
|
121
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
122
|
+
const resourceURL = extractAndValidateURL(request);
|
|
123
|
+
const cacheURL = `${context.url}/${toCacheKey(resourceURL)}`;
|
|
124
|
+
const response = await fetch(cacheURL, {
|
|
125
|
+
headers: this[getInternalHeaders](context),
|
|
126
|
+
method: "GET"
|
|
127
|
+
});
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
return response;
|
|
132
|
+
} catch {
|
|
133
|
+
}
|
|
134
|
+
}
|
|
69
135
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
70
136
|
async matchAll(request, _options) {
|
|
71
137
|
if (!request) {
|
|
@@ -87,72 +153,25 @@ var NetlifyCache = class {
|
|
|
87
153
|
if (response.headers.get("vary")?.includes("*")) {
|
|
88
154
|
throw new TypeError("Cannot cache response with 'Vary: *' header.");
|
|
89
155
|
}
|
|
156
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
90
157
|
const resourceURL = extractAndValidateURL(request);
|
|
91
|
-
await fetch(`${
|
|
158
|
+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
|
|
92
159
|
body: response.body,
|
|
93
160
|
headers: {
|
|
94
|
-
|
|
95
|
-
[
|
|
96
|
-
[
|
|
97
|
-
[STORE_HEADER]: __privateGet(this, _name)
|
|
161
|
+
...this[getInternalHeaders](context),
|
|
162
|
+
[ResourceHeaders]: this[serializeResourceHeaders](response.headers),
|
|
163
|
+
[ResourceStatus]: response.status.toString()
|
|
98
164
|
},
|
|
99
165
|
// @ts-expect-error https://github.com/whatwg/fetch/pull/1457
|
|
100
166
|
duplex: "half",
|
|
101
167
|
method: "POST"
|
|
102
168
|
});
|
|
103
169
|
}
|
|
104
|
-
async match(request) {
|
|
105
|
-
try {
|
|
106
|
-
const resourceURL = extractAndValidateURL(request);
|
|
107
|
-
const cacheURL = `${__privateGet(this, _getURL).call(this)}/${toCacheKey(resourceURL)}`;
|
|
108
|
-
const response = await fetch(cacheURL, {
|
|
109
|
-
headers: {
|
|
110
|
-
Authorization: `Bearer ${__privateGet(this, _getToken).call(this)}`
|
|
111
|
-
},
|
|
112
|
-
method: "GET"
|
|
113
|
-
});
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
return response;
|
|
118
|
-
} catch {
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
122
|
-
async delete(request) {
|
|
123
|
-
const resourceURL = extractAndValidateURL(request);
|
|
124
|
-
await fetch(`${__privateGet(this, _getURL).call(this)}/${toCacheKey(resourceURL)}`, {
|
|
125
|
-
headers: {
|
|
126
|
-
Authorization: `Bearer ${__privateGet(this, _getToken).call(this)}`,
|
|
127
|
-
[STORE_HEADER]: __privateGet(this, _name)
|
|
128
|
-
},
|
|
129
|
-
method: "DELETE"
|
|
130
|
-
});
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
134
|
-
async keys(_request) {
|
|
135
|
-
return [];
|
|
136
|
-
}
|
|
137
170
|
};
|
|
138
|
-
|
|
139
|
-
|
|
171
|
+
_base64Encode = new WeakMap();
|
|
172
|
+
_getContext = new WeakMap();
|
|
140
173
|
_name = new WeakMap();
|
|
141
|
-
|
|
142
|
-
const headersMap = {};
|
|
143
|
-
headers.forEach((value, key) => {
|
|
144
|
-
if (discardedHeaders.has(key)) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
if (key === "set-cookie") {
|
|
148
|
-
headersMap[key] = headersMap[key] || [];
|
|
149
|
-
headersMap[key].push(value);
|
|
150
|
-
} else {
|
|
151
|
-
headersMap[key] = value.split(",");
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
return import_node_buffer.Buffer.from(JSON.stringify(headersMap), "utf8").toString("base64");
|
|
155
|
-
};
|
|
174
|
+
_userAgent = new WeakMap();
|
|
156
175
|
var extractAndValidateURL = (input) => {
|
|
157
176
|
let url;
|
|
158
177
|
if (input instanceof Request) {
|
|
@@ -176,20 +195,21 @@ var extractAndValidateURL = (input) => {
|
|
|
176
195
|
var toCacheKey = (url) => encodeURIComponent(url.toString());
|
|
177
196
|
|
|
178
197
|
// src/bootstrap/cachestorage.ts
|
|
179
|
-
var
|
|
198
|
+
var _environmentOptions, _stores;
|
|
180
199
|
var NetlifyCacheStorage = class {
|
|
181
|
-
constructor(
|
|
182
|
-
__privateAdd(this,
|
|
183
|
-
__privateAdd(this, _getURL2, void 0);
|
|
200
|
+
constructor(environmentOptions) {
|
|
201
|
+
__privateAdd(this, _environmentOptions, void 0);
|
|
184
202
|
__privateAdd(this, _stores, void 0);
|
|
185
|
-
__privateSet(this,
|
|
186
|
-
__privateSet(this, _getURL2, getURL);
|
|
203
|
+
__privateSet(this, _environmentOptions, environmentOptions);
|
|
187
204
|
__privateSet(this, _stores, /* @__PURE__ */ new Map());
|
|
188
205
|
}
|
|
189
206
|
open(name) {
|
|
190
207
|
let store = __privateGet(this, _stores).get(name);
|
|
191
208
|
if (!store) {
|
|
192
|
-
store = new NetlifyCache({
|
|
209
|
+
store = new NetlifyCache({
|
|
210
|
+
...__privateGet(this, _environmentOptions),
|
|
211
|
+
name
|
|
212
|
+
});
|
|
193
213
|
__privateGet(this, _stores).set(name, store);
|
|
194
214
|
}
|
|
195
215
|
return Promise.resolve(store);
|
|
@@ -215,8 +235,7 @@ var NetlifyCacheStorage = class {
|
|
|
215
235
|
}
|
|
216
236
|
}
|
|
217
237
|
};
|
|
218
|
-
|
|
219
|
-
_getURL2 = new WeakMap();
|
|
238
|
+
_environmentOptions = new WeakMap();
|
|
220
239
|
_stores = new WeakMap();
|
|
221
240
|
// Annotate the CommonJS export names for ESM import in node:
|
|
222
241
|
0 && (module.exports = {
|
|
@@ -1,29 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { E as EnvironmentOptions } from '../cache-854474ad.js';
|
|
2
|
+
export { B as Base64Encoder, N as NetlifyCache, R as RequestContextFactory } from '../cache-854474ad.js';
|
|
2
3
|
|
|
3
|
-
interface NetlifyCacheOptions {
|
|
4
|
-
getToken: Factory<string>;
|
|
5
|
-
getURL: Factory<string>;
|
|
6
|
-
name: string;
|
|
7
|
-
}
|
|
8
|
-
declare class NetlifyCache implements Cache {
|
|
9
|
-
#private;
|
|
10
|
-
constructor({ getToken, getURL, name }: NetlifyCacheOptions);
|
|
11
|
-
add(request: RequestInfo): Promise<void>;
|
|
12
|
-
addAll(requests: RequestInfo[]): Promise<void>;
|
|
13
|
-
matchAll(request?: RequestInfo, _options?: CacheQueryOptions): Promise<readonly Response[]>;
|
|
14
|
-
put(request: RequestInfo | URL | string, response: Response): Promise<void>;
|
|
15
|
-
match(request: RequestInfo): Promise<Response | undefined>;
|
|
16
|
-
delete(request: RequestInfo): Promise<boolean>;
|
|
17
|
-
keys(_request?: Request): Promise<never[]>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
interface NetlifyCacheStorageOptions {
|
|
21
|
-
getToken: Factory<string>;
|
|
22
|
-
getURL: Factory<string>;
|
|
23
|
-
}
|
|
24
4
|
declare class NetlifyCacheStorage {
|
|
25
5
|
#private;
|
|
26
|
-
constructor(
|
|
6
|
+
constructor(environmentOptions: EnvironmentOptions);
|
|
27
7
|
open(name: string): Promise<Cache>;
|
|
28
8
|
has(name: string): Promise<boolean>;
|
|
29
9
|
delete(name: string): Promise<boolean>;
|
|
@@ -31,7 +11,4 @@ declare class NetlifyCacheStorage {
|
|
|
31
11
|
match(request: RequestInfo, options?: MultiCacheQueryOptions): Promise<Response | undefined>;
|
|
32
12
|
}
|
|
33
13
|
|
|
34
|
-
|
|
35
|
-
type URLFactory = Factory<string>;
|
|
36
|
-
|
|
37
|
-
export { NetlifyCache, NetlifyCacheStorage, TokenFactory, URLFactory };
|
|
14
|
+
export { NetlifyCacheStorage };
|
package/dist/bootstrap/main.d.ts
CHANGED
|
@@ -1,29 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { E as EnvironmentOptions } from '../cache-854474ad.js';
|
|
2
|
+
export { B as Base64Encoder, N as NetlifyCache, R as RequestContextFactory } from '../cache-854474ad.js';
|
|
2
3
|
|
|
3
|
-
interface NetlifyCacheOptions {
|
|
4
|
-
getToken: Factory<string>;
|
|
5
|
-
getURL: Factory<string>;
|
|
6
|
-
name: string;
|
|
7
|
-
}
|
|
8
|
-
declare class NetlifyCache implements Cache {
|
|
9
|
-
#private;
|
|
10
|
-
constructor({ getToken, getURL, name }: NetlifyCacheOptions);
|
|
11
|
-
add(request: RequestInfo): Promise<void>;
|
|
12
|
-
addAll(requests: RequestInfo[]): Promise<void>;
|
|
13
|
-
matchAll(request?: RequestInfo, _options?: CacheQueryOptions): Promise<readonly Response[]>;
|
|
14
|
-
put(request: RequestInfo | URL | string, response: Response): Promise<void>;
|
|
15
|
-
match(request: RequestInfo): Promise<Response | undefined>;
|
|
16
|
-
delete(request: RequestInfo): Promise<boolean>;
|
|
17
|
-
keys(_request?: Request): Promise<never[]>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
interface NetlifyCacheStorageOptions {
|
|
21
|
-
getToken: Factory<string>;
|
|
22
|
-
getURL: Factory<string>;
|
|
23
|
-
}
|
|
24
4
|
declare class NetlifyCacheStorage {
|
|
25
5
|
#private;
|
|
26
|
-
constructor(
|
|
6
|
+
constructor(environmentOptions: EnvironmentOptions);
|
|
27
7
|
open(name: string): Promise<Cache>;
|
|
28
8
|
has(name: string): Promise<boolean>;
|
|
29
9
|
delete(name: string): Promise<boolean>;
|
|
@@ -31,7 +11,4 @@ declare class NetlifyCacheStorage {
|
|
|
31
11
|
match(request: RequestInfo, options?: MultiCacheQueryOptions): Promise<Response | undefined>;
|
|
32
12
|
}
|
|
33
13
|
|
|
34
|
-
|
|
35
|
-
type URLFactory = Factory<string>;
|
|
36
|
-
|
|
37
|
-
export { NetlifyCache, NetlifyCacheStorage, TokenFactory, URLFactory };
|
|
14
|
+
export { NetlifyCacheStorage };
|
package/dist/bootstrap/main.js
CHANGED
|
@@ -1,38 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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;
|
|
18
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
NetlifyForwardedHost,
|
|
3
|
+
ResourceHeaders,
|
|
4
|
+
ResourceStatus,
|
|
5
|
+
ResourceStore,
|
|
6
|
+
UserAgent,
|
|
7
|
+
__privateAdd,
|
|
8
|
+
__privateGet,
|
|
9
|
+
__privateSet
|
|
10
|
+
} from "../chunk-I5FZDZ6V.js";
|
|
19
11
|
|
|
20
12
|
// src/bootstrap/cache.ts
|
|
21
|
-
import { Buffer as Buffer2 } from "buffer";
|
|
22
|
-
var HEADERS_HEADER = "Netlify-Programmable-Headers";
|
|
23
|
-
var STATUS_HEADER = "Netlify-Programmable-Status";
|
|
24
|
-
var STORE_HEADER = "Netlify-Programmable-Store";
|
|
25
13
|
var allowedProtocols = /* @__PURE__ */ new Set(["http:", "https:"]);
|
|
26
14
|
var discardedHeaders = /* @__PURE__ */ new Set(["cookie", "content-encoding", "content-length"]);
|
|
27
|
-
var
|
|
15
|
+
var getInternalHeaders = Symbol("getInternalHeaders");
|
|
16
|
+
var serializeResourceHeaders = Symbol("serializeResourceHeaders");
|
|
17
|
+
var _base64Encode, _getContext, _name, _userAgent;
|
|
28
18
|
var NetlifyCache = class {
|
|
29
|
-
constructor({
|
|
30
|
-
__privateAdd(this,
|
|
31
|
-
__privateAdd(this,
|
|
19
|
+
constructor({ base64Encode, getContext, name, userAgent }) {
|
|
20
|
+
__privateAdd(this, _base64Encode, void 0);
|
|
21
|
+
__privateAdd(this, _getContext, void 0);
|
|
32
22
|
__privateAdd(this, _name, void 0);
|
|
33
|
-
|
|
34
|
-
__privateSet(this,
|
|
23
|
+
__privateAdd(this, _userAgent, void 0);
|
|
24
|
+
__privateSet(this, _base64Encode, base64Encode);
|
|
25
|
+
__privateSet(this, _getContext, getContext);
|
|
35
26
|
__privateSet(this, _name, name);
|
|
27
|
+
__privateSet(this, _userAgent, userAgent);
|
|
28
|
+
}
|
|
29
|
+
[getInternalHeaders](requestContext) {
|
|
30
|
+
const { host, token } = requestContext;
|
|
31
|
+
const headers = {
|
|
32
|
+
Authorization: `Bearer ${token}`,
|
|
33
|
+
[ResourceStore]: __privateGet(this, _name)
|
|
34
|
+
};
|
|
35
|
+
if (host) {
|
|
36
|
+
headers[NetlifyForwardedHost] = host;
|
|
37
|
+
}
|
|
38
|
+
if (__privateGet(this, _userAgent)) {
|
|
39
|
+
headers[UserAgent] = __privateGet(this, _userAgent);
|
|
40
|
+
}
|
|
41
|
+
return headers;
|
|
42
|
+
}
|
|
43
|
+
[serializeResourceHeaders](headers) {
|
|
44
|
+
const headersMap = {};
|
|
45
|
+
headers.forEach((value, key) => {
|
|
46
|
+
if (discardedHeaders.has(key)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (key === "set-cookie") {
|
|
50
|
+
headersMap[key] = headersMap[key] || [];
|
|
51
|
+
headersMap[key].push(value);
|
|
52
|
+
} else {
|
|
53
|
+
headersMap[key] = value.split(",");
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return __privateGet(this, _base64Encode).call(this, JSON.stringify(headersMap));
|
|
36
57
|
}
|
|
37
58
|
async add(request) {
|
|
38
59
|
await this.put(new Request(request), await fetch(request));
|
|
@@ -40,6 +61,36 @@ var NetlifyCache = class {
|
|
|
40
61
|
async addAll(requests) {
|
|
41
62
|
await Promise.allSettled(requests.map((request) => this.add(request)));
|
|
42
63
|
}
|
|
64
|
+
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
65
|
+
async delete(request) {
|
|
66
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
67
|
+
const resourceURL = extractAndValidateURL(request);
|
|
68
|
+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
|
|
69
|
+
headers: this[getInternalHeaders](context),
|
|
70
|
+
method: "DELETE"
|
|
71
|
+
});
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
75
|
+
async keys(_request) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
async match(request) {
|
|
79
|
+
try {
|
|
80
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
81
|
+
const resourceURL = extractAndValidateURL(request);
|
|
82
|
+
const cacheURL = `${context.url}/${toCacheKey(resourceURL)}`;
|
|
83
|
+
const response = await fetch(cacheURL, {
|
|
84
|
+
headers: this[getInternalHeaders](context),
|
|
85
|
+
method: "GET"
|
|
86
|
+
});
|
|
87
|
+
if (!response.ok) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
return response;
|
|
91
|
+
} catch {
|
|
92
|
+
}
|
|
93
|
+
}
|
|
43
94
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
44
95
|
async matchAll(request, _options) {
|
|
45
96
|
if (!request) {
|
|
@@ -61,72 +112,25 @@ var NetlifyCache = class {
|
|
|
61
112
|
if (response.headers.get("vary")?.includes("*")) {
|
|
62
113
|
throw new TypeError("Cannot cache response with 'Vary: *' header.");
|
|
63
114
|
}
|
|
115
|
+
const context = __privateGet(this, _getContext).call(this);
|
|
64
116
|
const resourceURL = extractAndValidateURL(request);
|
|
65
|
-
await fetch(`${
|
|
117
|
+
await fetch(`${context.url}/${toCacheKey(resourceURL)}`, {
|
|
66
118
|
body: response.body,
|
|
67
119
|
headers: {
|
|
68
|
-
|
|
69
|
-
[
|
|
70
|
-
[
|
|
71
|
-
[STORE_HEADER]: __privateGet(this, _name)
|
|
120
|
+
...this[getInternalHeaders](context),
|
|
121
|
+
[ResourceHeaders]: this[serializeResourceHeaders](response.headers),
|
|
122
|
+
[ResourceStatus]: response.status.toString()
|
|
72
123
|
},
|
|
73
124
|
// @ts-expect-error https://github.com/whatwg/fetch/pull/1457
|
|
74
125
|
duplex: "half",
|
|
75
126
|
method: "POST"
|
|
76
127
|
});
|
|
77
128
|
}
|
|
78
|
-
async match(request) {
|
|
79
|
-
try {
|
|
80
|
-
const resourceURL = extractAndValidateURL(request);
|
|
81
|
-
const cacheURL = `${__privateGet(this, _getURL).call(this)}/${toCacheKey(resourceURL)}`;
|
|
82
|
-
const response = await fetch(cacheURL, {
|
|
83
|
-
headers: {
|
|
84
|
-
Authorization: `Bearer ${__privateGet(this, _getToken).call(this)}`
|
|
85
|
-
},
|
|
86
|
-
method: "GET"
|
|
87
|
-
});
|
|
88
|
-
if (!response.ok) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
return response;
|
|
92
|
-
} catch {
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
96
|
-
async delete(request) {
|
|
97
|
-
const resourceURL = extractAndValidateURL(request);
|
|
98
|
-
await fetch(`${__privateGet(this, _getURL).call(this)}/${toCacheKey(resourceURL)}`, {
|
|
99
|
-
headers: {
|
|
100
|
-
Authorization: `Bearer ${__privateGet(this, _getToken).call(this)}`,
|
|
101
|
-
[STORE_HEADER]: __privateGet(this, _name)
|
|
102
|
-
},
|
|
103
|
-
method: "DELETE"
|
|
104
|
-
});
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
// eslint-disable-next-line class-methods-use-this, require-await, @typescript-eslint/no-unused-vars
|
|
108
|
-
async keys(_request) {
|
|
109
|
-
return [];
|
|
110
|
-
}
|
|
111
129
|
};
|
|
112
|
-
|
|
113
|
-
|
|
130
|
+
_base64Encode = new WeakMap();
|
|
131
|
+
_getContext = new WeakMap();
|
|
114
132
|
_name = new WeakMap();
|
|
115
|
-
|
|
116
|
-
const headersMap = {};
|
|
117
|
-
headers.forEach((value, key) => {
|
|
118
|
-
if (discardedHeaders.has(key)) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (key === "set-cookie") {
|
|
122
|
-
headersMap[key] = headersMap[key] || [];
|
|
123
|
-
headersMap[key].push(value);
|
|
124
|
-
} else {
|
|
125
|
-
headersMap[key] = value.split(",");
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
return Buffer2.from(JSON.stringify(headersMap), "utf8").toString("base64");
|
|
129
|
-
};
|
|
133
|
+
_userAgent = new WeakMap();
|
|
130
134
|
var extractAndValidateURL = (input) => {
|
|
131
135
|
let url;
|
|
132
136
|
if (input instanceof Request) {
|
|
@@ -150,20 +154,21 @@ var extractAndValidateURL = (input) => {
|
|
|
150
154
|
var toCacheKey = (url) => encodeURIComponent(url.toString());
|
|
151
155
|
|
|
152
156
|
// src/bootstrap/cachestorage.ts
|
|
153
|
-
var
|
|
157
|
+
var _environmentOptions, _stores;
|
|
154
158
|
var NetlifyCacheStorage = class {
|
|
155
|
-
constructor(
|
|
156
|
-
__privateAdd(this,
|
|
157
|
-
__privateAdd(this, _getURL2, void 0);
|
|
159
|
+
constructor(environmentOptions) {
|
|
160
|
+
__privateAdd(this, _environmentOptions, void 0);
|
|
158
161
|
__privateAdd(this, _stores, void 0);
|
|
159
|
-
__privateSet(this,
|
|
160
|
-
__privateSet(this, _getURL2, getURL);
|
|
162
|
+
__privateSet(this, _environmentOptions, environmentOptions);
|
|
161
163
|
__privateSet(this, _stores, /* @__PURE__ */ new Map());
|
|
162
164
|
}
|
|
163
165
|
open(name) {
|
|
164
166
|
let store = __privateGet(this, _stores).get(name);
|
|
165
167
|
if (!store) {
|
|
166
|
-
store = new NetlifyCache({
|
|
168
|
+
store = new NetlifyCache({
|
|
169
|
+
...__privateGet(this, _environmentOptions),
|
|
170
|
+
name
|
|
171
|
+
});
|
|
167
172
|
__privateGet(this, _stores).set(name, store);
|
|
168
173
|
}
|
|
169
174
|
return Promise.resolve(store);
|
|
@@ -189,8 +194,7 @@ var NetlifyCacheStorage = class {
|
|
|
189
194
|
}
|
|
190
195
|
}
|
|
191
196
|
};
|
|
192
|
-
|
|
193
|
-
_getURL2 = new WeakMap();
|
|
197
|
+
_environmentOptions = new WeakMap();
|
|
194
198
|
_stores = new WeakMap();
|
|
195
199
|
export {
|
|
196
200
|
NetlifyCache,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
type Base64Encoder = (input: string) => string;
|
|
2
|
+
interface EnvironmentOptions {
|
|
3
|
+
base64Encode: Base64Encoder;
|
|
4
|
+
getContext: RequestContextFactory;
|
|
5
|
+
userAgent?: string;
|
|
6
|
+
}
|
|
7
|
+
type RequestContextFactory = () => RequestContext;
|
|
8
|
+
interface RequestContext {
|
|
9
|
+
host: string;
|
|
10
|
+
token: string;
|
|
11
|
+
url: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type NetlifyCacheOptions = EnvironmentOptions & {
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
declare const getInternalHeaders: unique symbol;
|
|
18
|
+
declare const serializeResourceHeaders: unique symbol;
|
|
19
|
+
declare class NetlifyCache implements Cache {
|
|
20
|
+
#private;
|
|
21
|
+
constructor({ base64Encode, getContext, name, userAgent }: NetlifyCacheOptions);
|
|
22
|
+
private [getInternalHeaders];
|
|
23
|
+
private [serializeResourceHeaders];
|
|
24
|
+
add(request: RequestInfo): Promise<void>;
|
|
25
|
+
addAll(requests: RequestInfo[]): Promise<void>;
|
|
26
|
+
delete(request: RequestInfo): Promise<boolean>;
|
|
27
|
+
keys(_request?: Request): Promise<never[]>;
|
|
28
|
+
match(request: RequestInfo): Promise<Response | undefined>;
|
|
29
|
+
matchAll(request?: RequestInfo, _options?: CacheQueryOptions): Promise<readonly Response[]>;
|
|
30
|
+
put(request: RequestInfo | URL | string, response: Response): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { Base64Encoder as B, EnvironmentOptions as E, NetlifyCache as N, RequestContextFactory as R };
|
|
@@ -0,0 +1,46 @@
|
|
|
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;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// src/headers.ts
|
|
21
|
+
var CacheStatus = "cache-status";
|
|
22
|
+
var NetlifyCacheId = "netlify-cache-id";
|
|
23
|
+
var NetlifyCacheTag = "netlify-cache-tag";
|
|
24
|
+
var NetlifyCdnCacheControl = "netlify-cdn-cache-control";
|
|
25
|
+
var NetlifyVary = "netlify-vary";
|
|
26
|
+
var ResourceHeaders = "netlify-programmable-headers";
|
|
27
|
+
var ResourceStatus = "netlify-programmable-status";
|
|
28
|
+
var ResourceStore = "netlify-programmable-store";
|
|
29
|
+
var NetlifyForwardedHost = "netlify-forwarded-host";
|
|
30
|
+
var UserAgent = "user-agent";
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
__privateGet,
|
|
34
|
+
__privateAdd,
|
|
35
|
+
__privateSet,
|
|
36
|
+
CacheStatus,
|
|
37
|
+
NetlifyCacheId,
|
|
38
|
+
NetlifyCacheTag,
|
|
39
|
+
NetlifyCdnCacheControl,
|
|
40
|
+
NetlifyVary,
|
|
41
|
+
ResourceHeaders,
|
|
42
|
+
ResourceStatus,
|
|
43
|
+
ResourceStore,
|
|
44
|
+
NetlifyForwardedHost,
|
|
45
|
+
UserAgent
|
|
46
|
+
};
|