@serwist/core 9.0.0-preview.9 → 9.0.1
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 +1 -1
- package/dist/index.d.ts +3 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.internal.d.ts +1 -15
- package/dist/index.internal.d.ts.map +1 -1
- package/dist/index.internal.js +1 -120
- package/dist/index.js +2 -92
- package/package.json +9 -6
- package/src/index.internal.ts +4 -21
- package/src/index.ts +43 -13
- package/dist/_private/Deferred.d.ts +0 -19
- package/dist/_private/Deferred.d.ts.map +0 -1
- package/dist/_private/SerwistError.d.ts +0 -25
- package/dist/_private/SerwistError.d.ts.map +0 -1
- package/dist/_private/assert.d.ts +0 -11
- package/dist/_private/assert.d.ts.map +0 -1
- package/dist/_private/cacheMatchIgnoreParams.d.ts +0 -15
- package/dist/_private/cacheMatchIgnoreParams.d.ts.map +0 -1
- package/dist/_private/cacheNames.d.ts +0 -40
- package/dist/_private/cacheNames.d.ts.map +0 -1
- package/dist/_private/canConstructReadableStream.d.ts +0 -12
- package/dist/_private/canConstructReadableStream.d.ts.map +0 -1
- package/dist/_private/canConstructResponseFromBodyStream.d.ts +0 -11
- package/dist/_private/canConstructResponseFromBodyStream.d.ts.map +0 -1
- package/dist/_private/dontWaitFor.d.ts +0 -7
- package/dist/_private/dontWaitFor.d.ts.map +0 -1
- package/dist/_private/executeQuotaErrorCallbacks.d.ts +0 -9
- package/dist/_private/executeQuotaErrorCallbacks.d.ts.map +0 -1
- package/dist/_private/getFriendlyURL.d.ts +0 -3
- package/dist/_private/getFriendlyURL.d.ts.map +0 -1
- package/dist/_private/logger.d.ts +0 -24
- package/dist/_private/logger.d.ts.map +0 -1
- package/dist/_private/resultingClientExists.d.ts +0 -12
- package/dist/_private/resultingClientExists.d.ts.map +0 -1
- package/dist/_private/timeout.d.ts +0 -10
- package/dist/_private/timeout.d.ts.map +0 -1
- package/dist/_private/waitUntil.d.ts +0 -11
- package/dist/_private/waitUntil.d.ts.map +0 -1
- package/dist/cacheNames.d.ts +0 -21
- package/dist/cacheNames.d.ts.map +0 -1
- package/dist/chunks/quotaErrorCallbacks.js +0 -355
- package/dist/clientsClaim.d.ts +0 -7
- package/dist/clientsClaim.d.ts.map +0 -1
- package/dist/copyResponse.d.ts +0 -21
- package/dist/copyResponse.d.ts.map +0 -1
- package/dist/models/messages/messageGenerator.d.ts +0 -4
- package/dist/models/messages/messageGenerator.d.ts.map +0 -1
- package/dist/models/messages/messages.d.ts +0 -44
- package/dist/models/messages/messages.d.ts.map +0 -1
- package/dist/models/pluginEvents.d.ts +0 -10
- package/dist/models/pluginEvents.d.ts.map +0 -1
- package/dist/models/quotaErrorCallbacks.d.ts +0 -3
- package/dist/models/quotaErrorCallbacks.d.ts.map +0 -1
- package/dist/registerQuotaErrorCallback.d.ts +0 -9
- package/dist/registerQuotaErrorCallback.d.ts.map +0 -1
- package/dist/setCacheNameDetails.d.ts +0 -10
- package/dist/setCacheNameDetails.d.ts.map +0 -1
- package/dist/types.d.ts +0 -279
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/pluginUtils.d.ts +0 -5
- package/dist/utils/pluginUtils.d.ts.map +0 -1
- package/dist/utils/welcome.d.ts +0 -2
- package/dist/utils/welcome.d.ts.map +0 -1
- package/src/_private/Deferred.ts +0 -33
- package/src/_private/SerwistError.ts +0 -43
- package/src/_private/assert.ts +0 -89
- package/src/_private/cacheMatchIgnoreParams.ts +0 -54
- package/src/_private/cacheNames.ts +0 -87
- package/src/_private/canConstructReadableStream.ts +0 -34
- package/src/_private/canConstructResponseFromBodyStream.ts +0 -37
- package/src/_private/dontWaitFor.ts +0 -16
- package/src/_private/executeQuotaErrorCallbacks.ts +0 -35
- package/src/_private/getFriendlyURL.ts +0 -16
- package/src/_private/logger.ts +0 -95
- package/src/_private/resultingClientExists.ts +0 -58
- package/src/_private/timeout.ts +0 -19
- package/src/_private/waitUntil.ts +0 -21
- package/src/cacheNames.ts +0 -41
- package/src/clientsClaim.ts +0 -20
- package/src/copyResponse.ts +0 -62
- package/src/models/messages/messageGenerator.ts +0 -29
- package/src/models/messages/messages.ts +0 -233
- package/src/models/pluginEvents.ts +0 -17
- package/src/models/quotaErrorCallbacks.ts +0 -13
- package/src/registerQuotaErrorCallback.ts +0 -36
- package/src/setCacheNameDetails.ts +0 -55
- package/src/types.ts +0 -322
- package/src/utils/pluginUtils.ts +0 -15
- package/src/utils/welcome.ts +0 -25
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
This module
|
|
1
|
+
This module has been deprecated.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { registerQuotaErrorCallback } from "./registerQuotaErrorCallback.js";
|
|
5
|
-
import { setCacheNameDetails } from "./setCacheNameDetails.js";
|
|
6
|
-
/**
|
|
7
|
-
* All Serwist libraries use `@serwist/core` for shared code as well as
|
|
8
|
-
* setting default values that need to be shared (like cache names).
|
|
9
|
-
*/
|
|
10
|
-
export { cacheNames, clientsClaim, copyResponse, registerQuotaErrorCallback, setCacheNameDetails };
|
|
11
|
-
export type * from "./types.js";
|
|
1
|
+
export { cacheNames, copyResponse, registerQuotaErrorCallback, setCacheNameDetails } from "serwist";
|
|
2
|
+
export { clientsClaim } from "serwist/internal";
|
|
3
|
+
export type { PromiseOrNot, MapLikeObject, PluginState, RouteMatchCallbackOptions, RouteMatchCallback, RouteHandlerCallbackOptions, ManualHandlerCallbackOptions, HandlerCallbackOptions, RouteHandlerCallback, ManualHandlerCallback, RouteHandlerObject, RouteHandler, HandlerWillStartCallbackParam, HandlerWillStartCallback, CacheDidUpdateCallbackParam, CacheDidUpdateCallback, CacheKeyWillBeUsedCallbackParam, CacheKeyWillBeUsedCallback, CacheWillUpdateCallbackParam, CacheWillUpdateCallback, CachedResponseWillBeUsedCallbackParam, CachedResponseWillBeUsedCallback, FetchDidFailCallbackParam, FetchDidFailCallback, FetchDidSucceedCallbackParam, FetchDidSucceedCallback, RequestWillFetchCallbackParam, RequestWillFetchCallback, HandlerWillRespondCallbackParam, HandlerWillRespondCallback, HandlerDidErrorCallbackParam, HandlerDidErrorCallback, HandlerDidRespondCallbackParam, HandlerDidRespondCallback, HandlerDidCompleteCallbackParam, HandlerDidCompleteCallback, SerwistPlugin, SerwistPluginCallbackParam, SerwistGlobalConfig, } from "serwist";
|
|
12
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,yBAAyB,EACzB,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,qCAAqC,EACrC,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,+BAA+B,EAC/B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,yBAAyB,EACzB,+BAA+B,EAC/B,0BAA0B,EAC1B,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
package/dist/index.internal.d.ts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { SerwistError } from "./_private/SerwistError.js";
|
|
3
|
-
import { assert } from "./_private/assert.js";
|
|
4
|
-
import { cacheMatchIgnoreParams } from "./_private/cacheMatchIgnoreParams.js";
|
|
5
|
-
import { cacheNames as privateCacheNames } from "./_private/cacheNames.js";
|
|
6
|
-
import { canConstructReadableStream } from "./_private/canConstructReadableStream.js";
|
|
7
|
-
import { canConstructResponseFromBodyStream } from "./_private/canConstructResponseFromBodyStream.js";
|
|
8
|
-
import { dontWaitFor } from "./_private/dontWaitFor.js";
|
|
9
|
-
import { executeQuotaErrorCallbacks } from "./_private/executeQuotaErrorCallbacks.js";
|
|
10
|
-
import { getFriendlyURL } from "./_private/getFriendlyURL.js";
|
|
11
|
-
import { logger } from "./_private/logger.js";
|
|
12
|
-
import { resultingClientExists } from "./_private/resultingClientExists.js";
|
|
13
|
-
import { timeout } from "./_private/timeout.js";
|
|
14
|
-
import { waitUntil } from "./_private/waitUntil.js";
|
|
15
|
-
export { assert, cacheMatchIgnoreParams, canConstructReadableStream, canConstructResponseFromBodyStream, Deferred, dontWaitFor, executeQuotaErrorCallbacks, getFriendlyURL, logger, privateCacheNames, resultingClientExists, SerwistError, timeout, waitUntil, };
|
|
1
|
+
export { Deferred, SerwistError, assert, cacheMatchIgnoreParams, privateCacheNames, canConstructReadableStream, canConstructResponseFromBodyStream, dontWaitFor, executeQuotaErrorCallbacks, getFriendlyURL, logger, resultingClientExists, timeout, waitUntil, } from "serwist/internal";
|
|
16
2
|
//# sourceMappingURL=index.internal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.internal.d.ts","sourceRoot":"","sources":["../src/index.internal.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.internal.d.ts","sourceRoot":"","sources":["../src/index.internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,kCAAkC,EAClC,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,MAAM,EACN,qBAAqB,EACrB,OAAO,EACP,SAAS,GACV,MAAM,kBAAkB,CAAC"}
|
package/dist/index.internal.js
CHANGED
|
@@ -1,120 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { S as SerwistError, f as assert, a as canConstructResponseFromBodyStream, c as privateCacheNames } from './chunks/quotaErrorCallbacks.js';
|
|
3
|
-
|
|
4
|
-
class Deferred {
|
|
5
|
-
promise;
|
|
6
|
-
resolve;
|
|
7
|
-
reject;
|
|
8
|
-
constructor(){
|
|
9
|
-
this.promise = new Promise((resolve, reject)=>{
|
|
10
|
-
this.resolve = resolve;
|
|
11
|
-
this.reject = reject;
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function stripParams(fullURL, ignoreParams) {
|
|
17
|
-
const strippedURL = new URL(fullURL);
|
|
18
|
-
for (const param of ignoreParams){
|
|
19
|
-
strippedURL.searchParams.delete(param);
|
|
20
|
-
}
|
|
21
|
-
return strippedURL.href;
|
|
22
|
-
}
|
|
23
|
-
async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {
|
|
24
|
-
const strippedRequestURL = stripParams(request.url, ignoreParams);
|
|
25
|
-
if (request.url === strippedRequestURL) {
|
|
26
|
-
return cache.match(request, matchOptions);
|
|
27
|
-
}
|
|
28
|
-
const keysOptions = {
|
|
29
|
-
...matchOptions,
|
|
30
|
-
ignoreSearch: true
|
|
31
|
-
};
|
|
32
|
-
const cacheKeys = await cache.keys(request, keysOptions);
|
|
33
|
-
for (const cacheKey of cacheKeys){
|
|
34
|
-
const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);
|
|
35
|
-
if (strippedRequestURL === strippedCacheKeyURL) {
|
|
36
|
-
return cache.match(cacheKey, matchOptions);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let supportStatus;
|
|
43
|
-
function canConstructReadableStream() {
|
|
44
|
-
if (supportStatus === undefined) {
|
|
45
|
-
try {
|
|
46
|
-
new ReadableStream({
|
|
47
|
-
start () {}
|
|
48
|
-
});
|
|
49
|
-
supportStatus = true;
|
|
50
|
-
} catch (error) {
|
|
51
|
-
supportStatus = false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return supportStatus;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function dontWaitFor(promise) {
|
|
58
|
-
void promise.then(()=>{});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function executeQuotaErrorCallbacks() {
|
|
62
|
-
if (process.env.NODE_ENV !== "production") {
|
|
63
|
-
logger.log(`About to run ${quotaErrorCallbacks.size} callbacks to clean up caches.`);
|
|
64
|
-
}
|
|
65
|
-
for (const callback of quotaErrorCallbacks){
|
|
66
|
-
await callback();
|
|
67
|
-
if (process.env.NODE_ENV !== "production") {
|
|
68
|
-
logger.log(callback, "is complete.");
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (process.env.NODE_ENV !== "production") {
|
|
72
|
-
logger.log("Finished running callbacks.");
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const getFriendlyURL = (url)=>{
|
|
77
|
-
const urlObj = new URL(String(url), location.href);
|
|
78
|
-
return urlObj.href.replace(new RegExp(`^${location.origin}`), "");
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
function timeout(ms) {
|
|
82
|
-
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const MAX_RETRY_TIME = 2000;
|
|
86
|
-
async function resultingClientExists(resultingClientId) {
|
|
87
|
-
if (!resultingClientId) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
let existingWindows = await self.clients.matchAll({
|
|
91
|
-
type: "window"
|
|
92
|
-
});
|
|
93
|
-
const existingWindowIds = new Set(existingWindows.map((w)=>w.id));
|
|
94
|
-
let resultingWindow = undefined;
|
|
95
|
-
const startTime = performance.now();
|
|
96
|
-
while(performance.now() - startTime < MAX_RETRY_TIME){
|
|
97
|
-
existingWindows = await self.clients.matchAll({
|
|
98
|
-
type: "window"
|
|
99
|
-
});
|
|
100
|
-
resultingWindow = existingWindows.find((w)=>{
|
|
101
|
-
if (resultingClientId) {
|
|
102
|
-
return w.id === resultingClientId;
|
|
103
|
-
}
|
|
104
|
-
return !existingWindowIds.has(w.id);
|
|
105
|
-
});
|
|
106
|
-
if (resultingWindow) {
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
await timeout(100);
|
|
110
|
-
}
|
|
111
|
-
return resultingWindow;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const waitUntil = (event, asyncFn)=>{
|
|
115
|
-
const returnPromise = asyncFn();
|
|
116
|
-
event.waitUntil(returnPromise);
|
|
117
|
-
return returnPromise;
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
export { Deferred, cacheMatchIgnoreParams, canConstructReadableStream, dontWaitFor, executeQuotaErrorCallbacks, getFriendlyURL, logger, resultingClientExists, timeout, waitUntil };
|
|
1
|
+
export { Deferred, SerwistError, assert, cacheMatchIgnoreParams, canConstructReadableStream, canConstructResponseFromBodyStream, dontWaitFor, executeQuotaErrorCallbacks, getFriendlyURL, logger, privateCacheNames, resultingClientExists, timeout, waitUntil } from 'serwist/internal';
|
package/dist/index.js
CHANGED
|
@@ -1,92 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const cacheNames = {
|
|
4
|
-
get googleAnalytics () {
|
|
5
|
-
return cacheNames$1.getGoogleAnalyticsName();
|
|
6
|
-
},
|
|
7
|
-
get precache () {
|
|
8
|
-
return cacheNames$1.getPrecacheName();
|
|
9
|
-
},
|
|
10
|
-
get prefix () {
|
|
11
|
-
return cacheNames$1.getPrefix();
|
|
12
|
-
},
|
|
13
|
-
get runtime () {
|
|
14
|
-
return cacheNames$1.getRuntimeName();
|
|
15
|
-
},
|
|
16
|
-
get suffix () {
|
|
17
|
-
return cacheNames$1.getSuffix();
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
function clientsClaim() {
|
|
22
|
-
self.addEventListener("activate", ()=>self.clients.claim());
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async function copyResponse(response, modifier) {
|
|
26
|
-
let origin = null;
|
|
27
|
-
if (response.url) {
|
|
28
|
-
const responseURL = new URL(response.url);
|
|
29
|
-
origin = responseURL.origin;
|
|
30
|
-
}
|
|
31
|
-
if (origin !== self.location.origin) {
|
|
32
|
-
throw new SerwistError("cross-origin-copy-response", {
|
|
33
|
-
origin
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
const clonedResponse = response.clone();
|
|
37
|
-
const responseInit = {
|
|
38
|
-
headers: new Headers(clonedResponse.headers),
|
|
39
|
-
status: clonedResponse.status,
|
|
40
|
-
statusText: clonedResponse.statusText
|
|
41
|
-
};
|
|
42
|
-
const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;
|
|
43
|
-
const body = canConstructResponseFromBodyStream() ? clonedResponse.body : await clonedResponse.blob();
|
|
44
|
-
return new Response(body, modifiedResponseInit);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function registerQuotaErrorCallback(callback) {
|
|
48
|
-
if (process.env.NODE_ENV !== "production") {
|
|
49
|
-
finalAssertExports.isType(callback, "function", {
|
|
50
|
-
moduleName: "@serwist/core",
|
|
51
|
-
funcName: "register",
|
|
52
|
-
paramName: "callback"
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
quotaErrorCallbacks.add(callback);
|
|
56
|
-
if (process.env.NODE_ENV !== "production") {
|
|
57
|
-
logger.log("Registered a callback to respond to quota errors.", callback);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function setCacheNameDetails(details) {
|
|
62
|
-
if (process.env.NODE_ENV !== "production") {
|
|
63
|
-
for (const key of Object.keys(details)){
|
|
64
|
-
finalAssertExports.isType(details[key], "string", {
|
|
65
|
-
moduleName: "@serwist/core",
|
|
66
|
-
funcName: "setCacheNameDetails",
|
|
67
|
-
paramName: `details.${key}`
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
if (details.precache?.length === 0) {
|
|
71
|
-
throw new SerwistError("invalid-cache-name", {
|
|
72
|
-
cacheNameId: "precache",
|
|
73
|
-
value: details.precache
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
if (details.runtime?.length === 0) {
|
|
77
|
-
throw new SerwistError("invalid-cache-name", {
|
|
78
|
-
cacheNameId: "runtime",
|
|
79
|
-
value: details.runtime
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (details.googleAnalytics?.length === 0) {
|
|
83
|
-
throw new SerwistError("invalid-cache-name", {
|
|
84
|
-
cacheNameId: "googleAnalytics",
|
|
85
|
-
value: details.googleAnalytics
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
cacheNames$1.updateDetails(details);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export { cacheNames, clientsClaim, copyResponse, registerQuotaErrorCallback, setCacheNameDetails };
|
|
1
|
+
export { cacheNames, copyResponse, registerQuotaErrorCallback, setCacheNameDetails } from 'serwist';
|
|
2
|
+
export { clientsClaim } from 'serwist/internal';
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serwist/core",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "This module
|
|
5
|
+
"description": "This module was used by a number of the other Serwist modules to share common code.",
|
|
6
6
|
"files": [
|
|
7
7
|
"src",
|
|
8
8
|
"dist"
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
],
|
|
16
16
|
"author": "Google's Web DevRel Team, Serwist's Team",
|
|
17
17
|
"license": "MIT",
|
|
18
|
-
"repository": "serwist/serwist",
|
|
18
|
+
"repository": "https://github.com/serwist/serwist",
|
|
19
19
|
"bugs": "https://github.com/serwist/serwist/issues",
|
|
20
20
|
"homepage": "https://serwist.pages.dev",
|
|
21
21
|
"main": "./dist/index.js",
|
|
@@ -37,10 +37,13 @@
|
|
|
37
37
|
"default": "./dist/index.internal.js"
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"serwist": "9.0.0"
|
|
42
|
+
},
|
|
40
43
|
"devDependencies": {
|
|
41
|
-
"rollup": "4.
|
|
42
|
-
"typescript": "5.
|
|
43
|
-
"@serwist/
|
|
44
|
+
"rollup": "4.14.3",
|
|
45
|
+
"typescript": "5.5.0-dev.20240415",
|
|
46
|
+
"@serwist/configs": "9.0.1"
|
|
44
47
|
},
|
|
45
48
|
"peerDependencies": {
|
|
46
49
|
"typescript": ">=5.0.0"
|
package/src/index.internal.ts
CHANGED
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
import { Deferred } from "./_private/Deferred.js";
|
|
2
|
-
import { SerwistError } from "./_private/SerwistError.js";
|
|
3
|
-
import { assert } from "./_private/assert.js";
|
|
4
|
-
import { cacheMatchIgnoreParams } from "./_private/cacheMatchIgnoreParams.js";
|
|
5
|
-
import { cacheNames as privateCacheNames } from "./_private/cacheNames.js";
|
|
6
|
-
import { canConstructReadableStream } from "./_private/canConstructReadableStream.js";
|
|
7
|
-
import { canConstructResponseFromBodyStream } from "./_private/canConstructResponseFromBodyStream.js";
|
|
8
|
-
import { dontWaitFor } from "./_private/dontWaitFor.js";
|
|
9
|
-
import { executeQuotaErrorCallbacks } from "./_private/executeQuotaErrorCallbacks.js";
|
|
10
|
-
import { getFriendlyURL } from "./_private/getFriendlyURL.js";
|
|
11
|
-
import { logger } from "./_private/logger.js";
|
|
12
|
-
import { resultingClientExists } from "./_private/resultingClientExists.js";
|
|
13
|
-
import { timeout } from "./_private/timeout.js";
|
|
14
|
-
import { waitUntil } from "./_private/waitUntil.js";
|
|
15
|
-
|
|
16
|
-
// Serwist's internal functions, classes, variables, and more. Feel free to use them,
|
|
17
|
-
// but they are not documented. Note: they do follow semver.
|
|
18
1
|
export {
|
|
2
|
+
Deferred,
|
|
3
|
+
SerwistError,
|
|
19
4
|
assert,
|
|
20
5
|
cacheMatchIgnoreParams,
|
|
6
|
+
privateCacheNames,
|
|
21
7
|
canConstructReadableStream,
|
|
22
8
|
canConstructResponseFromBodyStream,
|
|
23
|
-
Deferred,
|
|
24
9
|
dontWaitFor,
|
|
25
10
|
executeQuotaErrorCallbacks,
|
|
26
11
|
getFriendlyURL,
|
|
27
12
|
logger,
|
|
28
|
-
privateCacheNames,
|
|
29
13
|
resultingClientExists,
|
|
30
|
-
SerwistError,
|
|
31
14
|
timeout,
|
|
32
15
|
waitUntil,
|
|
33
|
-
};
|
|
16
|
+
} from "serwist/internal";
|
package/src/index.ts
CHANGED
|
@@ -5,16 +5,46 @@
|
|
|
5
5
|
license that can be found in the LICENSE file or at
|
|
6
6
|
https://opensource.org/licenses/MIT.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
export { cacheNames, copyResponse, registerQuotaErrorCallback, setCacheNameDetails } from "serwist";
|
|
9
|
+
export { clientsClaim } from "serwist/internal";
|
|
10
|
+
export type {
|
|
11
|
+
PromiseOrNot,
|
|
12
|
+
MapLikeObject,
|
|
13
|
+
PluginState,
|
|
14
|
+
RouteMatchCallbackOptions,
|
|
15
|
+
RouteMatchCallback,
|
|
16
|
+
RouteHandlerCallbackOptions,
|
|
17
|
+
ManualHandlerCallbackOptions,
|
|
18
|
+
HandlerCallbackOptions,
|
|
19
|
+
RouteHandlerCallback,
|
|
20
|
+
ManualHandlerCallback,
|
|
21
|
+
RouteHandlerObject,
|
|
22
|
+
RouteHandler,
|
|
23
|
+
HandlerWillStartCallbackParam,
|
|
24
|
+
HandlerWillStartCallback,
|
|
25
|
+
CacheDidUpdateCallbackParam,
|
|
26
|
+
CacheDidUpdateCallback,
|
|
27
|
+
CacheKeyWillBeUsedCallbackParam,
|
|
28
|
+
CacheKeyWillBeUsedCallback,
|
|
29
|
+
CacheWillUpdateCallbackParam,
|
|
30
|
+
CacheWillUpdateCallback,
|
|
31
|
+
CachedResponseWillBeUsedCallbackParam,
|
|
32
|
+
CachedResponseWillBeUsedCallback,
|
|
33
|
+
FetchDidFailCallbackParam,
|
|
34
|
+
FetchDidFailCallback,
|
|
35
|
+
FetchDidSucceedCallbackParam,
|
|
36
|
+
FetchDidSucceedCallback,
|
|
37
|
+
RequestWillFetchCallbackParam,
|
|
38
|
+
RequestWillFetchCallback,
|
|
39
|
+
HandlerWillRespondCallbackParam,
|
|
40
|
+
HandlerWillRespondCallback,
|
|
41
|
+
HandlerDidErrorCallbackParam,
|
|
42
|
+
HandlerDidErrorCallback,
|
|
43
|
+
HandlerDidRespondCallbackParam,
|
|
44
|
+
HandlerDidRespondCallback,
|
|
45
|
+
HandlerDidCompleteCallbackParam,
|
|
46
|
+
HandlerDidCompleteCallback,
|
|
47
|
+
SerwistPlugin,
|
|
48
|
+
SerwistPluginCallbackParam,
|
|
49
|
+
SerwistGlobalConfig,
|
|
50
|
+
} from "serwist";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The Deferred class composes Promises in a way that allows for them to be
|
|
3
|
-
* resolved or rejected from outside the constructor. In most cases promises
|
|
4
|
-
* should be used directly, but Deferreds can be necessary when the logic to
|
|
5
|
-
* resolve a promise must be separate.
|
|
6
|
-
*
|
|
7
|
-
* @private
|
|
8
|
-
*/
|
|
9
|
-
declare class Deferred<T> {
|
|
10
|
-
promise: Promise<T>;
|
|
11
|
-
resolve: (value: T) => void;
|
|
12
|
-
reject: (reason?: any) => void;
|
|
13
|
-
/**
|
|
14
|
-
* Creates a promise and exposes its resolve and reject functions as methods.
|
|
15
|
-
*/
|
|
16
|
-
constructor();
|
|
17
|
-
}
|
|
18
|
-
export { Deferred };
|
|
19
|
-
//# sourceMappingURL=Deferred.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Deferred.d.ts","sourceRoot":"","sources":["../../src/_private/Deferred.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,cAAM,QAAQ,CAAC,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAG,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,MAAM,EAAG,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhC;;OAEG;;CAOJ;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { MessageKey } from "../models/messages/messages.js";
|
|
2
|
-
import type { MapLikeObject } from "../types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Serwist errors should be thrown with this class.
|
|
5
|
-
* This allows use to ensure the type easily in tests,
|
|
6
|
-
* helps developers identify errors from Serwist
|
|
7
|
-
* easily and allows use to optimise error
|
|
8
|
-
* messages correctly.
|
|
9
|
-
*
|
|
10
|
-
* @private
|
|
11
|
-
*/
|
|
12
|
-
declare class SerwistError extends Error {
|
|
13
|
-
details?: MapLikeObject;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* @param errorCode The error code that
|
|
17
|
-
* identifies this particular error.
|
|
18
|
-
* @param details Any relevant arguments
|
|
19
|
-
* that will help developers identify issues should
|
|
20
|
-
* be added as a key on the context object.
|
|
21
|
-
*/
|
|
22
|
-
constructor(errorCode: MessageKey, details?: MapLikeObject);
|
|
23
|
-
}
|
|
24
|
-
export { SerwistError };
|
|
25
|
-
//# sourceMappingURL=SerwistError.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SerwistError.d.ts","sourceRoot":"","sources":["../../src/_private/SerwistError.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;GAQG;AACH,cAAM,YAAa,SAAQ,KAAK;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;;OAOG;gBACS,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa;CAQ3D;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { MapLikeObject } from "../types.js";
|
|
2
|
-
declare const finalAssertExports: {
|
|
3
|
-
hasMethod: (object: MapLikeObject, expectedMethod: string, details: MapLikeObject) => void;
|
|
4
|
-
isArray: (value: any[], details: MapLikeObject) => void;
|
|
5
|
-
isInstance: (object: unknown, expectedClass: Function, details: MapLikeObject) => void;
|
|
6
|
-
isOneOf: (value: any, validValues: any[], details: MapLikeObject) => void;
|
|
7
|
-
isType: (object: unknown, expectedType: string, details: MapLikeObject) => void;
|
|
8
|
-
isArrayOfClass: (value: any, expectedClass: Function, details: MapLikeObject) => void;
|
|
9
|
-
} | null;
|
|
10
|
-
export { finalAssertExports as assert };
|
|
11
|
-
//# sourceMappingURL=assert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/_private/assert.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmEjD,QAAA,MAAM,kBAAkB;wBArDG,aAAa,kBAAkB,MAAM,WAAW,aAAa;qBANhE,GAAG,EAAE,WAAW,aAAa;yBAuB3C,OAAO,iBAEA,QAAQ,WACd,aAAa;qBAQA,GAAG,eAAe,GAAG,EAAE,WAAW,aAAa;qBApB/C,OAAO,gBAAgB,MAAM,WAAW,aAAa;4BA4BpE,GAAG,iBAEK,QAAQ,WACd,aAAa;QAwBjB,CAAC;AAER,OAAO,EAAE,kBAAkB,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Matches an item in the cache, ignoring specific URL params. This is similar
|
|
3
|
-
* to the `ignoreSearch` option, but it allows you to ignore just specific
|
|
4
|
-
* params (while continuing to match on the others).
|
|
5
|
-
*
|
|
6
|
-
* @private
|
|
7
|
-
* @param cache
|
|
8
|
-
* @param request
|
|
9
|
-
* @param matchOptions
|
|
10
|
-
* @param ignoreParams
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
declare function cacheMatchIgnoreParams(cache: Cache, request: Request, ignoreParams: string[], matchOptions?: CacheQueryOptions): Promise<Response | undefined>;
|
|
14
|
-
export { cacheMatchIgnoreParams };
|
|
15
|
-
//# sourceMappingURL=cacheMatchIgnoreParams.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cacheMatchIgnoreParams.d.ts","sourceRoot":"","sources":["../../src/_private/cacheMatchIgnoreParams.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;GAWG;AACH,iBAAe,sBAAsB,CACnC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAmB/B;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export interface CacheNameDetails {
|
|
2
|
-
googleAnalytics: string;
|
|
3
|
-
precache: string;
|
|
4
|
-
prefix: string;
|
|
5
|
-
runtime: string;
|
|
6
|
-
suffix: string;
|
|
7
|
-
}
|
|
8
|
-
export interface PartialCacheNameDetails {
|
|
9
|
-
/**
|
|
10
|
-
* The string to add to the beginning of the precache and runtime cache names.
|
|
11
|
-
*/
|
|
12
|
-
prefix?: string;
|
|
13
|
-
/**
|
|
14
|
-
* The string to add to the end of the precache and runtime cache names.
|
|
15
|
-
*/
|
|
16
|
-
suffix?: string;
|
|
17
|
-
/**
|
|
18
|
-
* The cache name to use for precache caching.
|
|
19
|
-
*/
|
|
20
|
-
precache?: string;
|
|
21
|
-
/**
|
|
22
|
-
* The cache name to use for runtime caching.
|
|
23
|
-
*/
|
|
24
|
-
runtime?: string;
|
|
25
|
-
/**
|
|
26
|
-
* The cache name to use for `@serwist/google-analytics` caching.
|
|
27
|
-
*/
|
|
28
|
-
googleAnalytics?: string;
|
|
29
|
-
[propName: string]: string | undefined;
|
|
30
|
-
}
|
|
31
|
-
export type CacheNameDetailsProp = "googleAnalytics" | "precache" | "prefix" | "runtime" | "suffix";
|
|
32
|
-
export declare const cacheNames: {
|
|
33
|
-
updateDetails: (details: PartialCacheNameDetails) => void;
|
|
34
|
-
getGoogleAnalyticsName: (userCacheName?: string) => string;
|
|
35
|
-
getPrecacheName: (userCacheName?: string) => string;
|
|
36
|
-
getPrefix: () => string;
|
|
37
|
-
getRuntimeName: (userCacheName?: string) => string;
|
|
38
|
-
getSuffix: () => string;
|
|
39
|
-
};
|
|
40
|
-
//# sourceMappingURL=cacheNames.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cacheNames.d.ts","sourceRoot":"","sources":["../../src/_private/cacheNames.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAoBpG,eAAO,MAAM,UAAU;6BACI,uBAAuB,KAAG,IAAI;6CAQd,MAAM,KAAG,MAAM;sCAGtB,MAAM,KAAG,MAAM;qBAGlC,MAAM;qCAGY,MAAM,KAAG,MAAM;qBAGjC,MAAM;CAGtB,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A utility function that determines whether the current browser supports
|
|
3
|
-
* constructing a [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)
|
|
4
|
-
* object.
|
|
5
|
-
*
|
|
6
|
-
* @returns `true`, if the current browser can successfully construct a `ReadableStream`, `false` otherwise.
|
|
7
|
-
*
|
|
8
|
-
* @private
|
|
9
|
-
*/
|
|
10
|
-
declare function canConstructReadableStream(): boolean;
|
|
11
|
-
export { canConstructReadableStream };
|
|
12
|
-
//# sourceMappingURL=canConstructReadableStream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canConstructReadableStream.d.ts","sourceRoot":"","sources":["../../src/_private/canConstructReadableStream.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,iBAAS,0BAA0B,IAAI,OAAO,CAY7C;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A utility function that determines whether the current browser supports
|
|
3
|
-
* constructing a new `Response` from a `response.body` stream.
|
|
4
|
-
*
|
|
5
|
-
* @returns `true`, if the current browser can successfully construct
|
|
6
|
-
* a `Response` from a `response.body` stream, `false` otherwise.
|
|
7
|
-
* @private
|
|
8
|
-
*/
|
|
9
|
-
declare function canConstructResponseFromBodyStream(): boolean;
|
|
10
|
-
export { canConstructResponseFromBodyStream };
|
|
11
|
-
//# sourceMappingURL=canConstructResponseFromBodyStream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canConstructResponseFromBodyStream.d.ts","sourceRoot":"","sources":["../../src/_private/canConstructResponseFromBodyStream.ts"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,iBAAS,kCAAkC,IAAI,OAAO,CAgBrD;AAED,OAAO,EAAE,kCAAkC,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dontWaitFor.d.ts","sourceRoot":"","sources":["../../src/_private/dontWaitFor.ts"],"names":[],"mappings":"AAOA;;;;IAII;AACJ,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAGvD"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runs all of the callback functions, one at a time sequentially, in the order
|
|
3
|
-
* in which they were registered.
|
|
4
|
-
*
|
|
5
|
-
* @private
|
|
6
|
-
*/
|
|
7
|
-
declare function executeQuotaErrorCallbacks(): Promise<void>;
|
|
8
|
-
export { executeQuotaErrorCallbacks };
|
|
9
|
-
//# sourceMappingURL=executeQuotaErrorCallbacks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executeQuotaErrorCallbacks.d.ts","sourceRoot":"","sources":["../../src/_private/executeQuotaErrorCallbacks.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,iBAAe,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAezD;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFriendlyURL.d.ts","sourceRoot":"","sources":["../../src/_private/getFriendlyURL.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,cAAc,QAAS,GAAG,GAAG,MAAM,KAAG,MAK3C,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
declare global {
|
|
2
|
-
interface WorkerGlobalScope {
|
|
3
|
-
__WB_DISABLE_DEV_LOGS: boolean;
|
|
4
|
-
}
|
|
5
|
-
interface Window {
|
|
6
|
-
__WB_DISABLE_DEV_LOGS: boolean;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* The logger used by Serwist inside of both service workers and the window global scope.
|
|
11
|
-
*
|
|
12
|
-
* Note: This is forcibly `null` in production mode to reduce bundle size. Do check whether
|
|
13
|
-
* you are currently in development mode (by using `process.env.NODE_ENV !== "production"`)
|
|
14
|
-
* before using it.
|
|
15
|
-
*/
|
|
16
|
-
export declare const logger: {
|
|
17
|
-
error: (...args: any[]) => void;
|
|
18
|
-
debug: (...args: any[]) => void;
|
|
19
|
-
log: (...args: any[]) => void;
|
|
20
|
-
warn: (...args: any[]) => void;
|
|
21
|
-
groupCollapsed: (...args: any[]) => void;
|
|
22
|
-
groupEnd: (...args: any[]) => void;
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/_private/logger.ts"],"names":[],"mappings":"AAQA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,qBAAqB,EAAE,OAAO,CAAC;KAChC;IAED,UAAU,MAAM;QACd,qBAAqB,EAAE,OAAO,CAAC;KAChC;CACF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;qBAmEoC,GAAG,EAAE,KAAK,IAAI;qBAAd,GAAG,EAAE,KAAK,IAAI;mBAAd,GAAG,EAAE,KAAK,IAAI;oBAAd,GAAG,EAAE,KAAK,IAAI;8BAAd,GAAG,EAAE,KAAK,IAAI;wBAAd,GAAG,EAAE,KAAK,IAAI;CAE3D,CAAC"}
|