cdk-nextjs 0.5.14 → 0.5.15
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/.jsii +40 -40
- package/docs/caching-guide.md +3 -0
- package/lib/adapter/cache-handler.mjs +50916 -13061
- package/lib/adapter/memory-cache-handler.d.ts +1 -1
- package/lib/adapter/memory-cache-handler.js +17 -11
- package/lib/adapter/memory-cache-handler.test.js +57 -1
- package/lib/adapter/s3-cache-handler.d.ts +33 -0
- package/lib/adapter/s3-cache-handler.js +96 -1
- package/lib/adapter/s3-cache-handler.test.js +66 -1
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.d.ts +15 -0
- package/lib/root-constructs/nextjs-global-containers.js +57 -2
- package/lib/root-constructs/nextjs-global-functions.d.ts +16 -0
- package/lib/root-constructs/nextjs-global-functions.js +56 -2
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/package.json +2 -1
|
@@ -64,7 +64,7 @@ export declare class MemoryCacheHandler implements CacheHandler {
|
|
|
64
64
|
private readonly maxEntries;
|
|
65
65
|
constructor(options: MemoryCacheHandlerOptions);
|
|
66
66
|
get(cacheKey: string, ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext): Promise<CacheHandlerValue | null>;
|
|
67
|
-
set(cacheKey: string, data: IncrementalCacheValue | null,
|
|
67
|
+
set(cacheKey: string, data: IncrementalCacheValue | null, ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext): Promise<void>;
|
|
68
68
|
revalidateTag(tag: string | string[]): Promise<void>;
|
|
69
69
|
resetRequestCache(): Promise<void>;
|
|
70
70
|
/**
|
|
@@ -9,6 +9,7 @@ exports.MemoryCacheHandler = void 0;
|
|
|
9
9
|
*/
|
|
10
10
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
11
11
|
const debug_1 = __importDefault(require("debug"));
|
|
12
|
+
const cache_utils_1 = require("./cache-utils");
|
|
12
13
|
class MemoryCacheHandler {
|
|
13
14
|
inMemoryCache = new Map();
|
|
14
15
|
debug = (0, debug_1.default)("cdk-nextjs:cache-handler:memory");
|
|
@@ -106,7 +107,7 @@ class MemoryCacheHandler {
|
|
|
106
107
|
this.debug(`MEMORY CACHE MISS: ${cacheKey}`);
|
|
107
108
|
return null;
|
|
108
109
|
}
|
|
109
|
-
async set(cacheKey, data,
|
|
110
|
+
async set(cacheKey, data, ctx) {
|
|
110
111
|
if (!data) {
|
|
111
112
|
// Delete from memory cache
|
|
112
113
|
this.debug(`MEMORY CACHE DELETE: ${cacheKey}`);
|
|
@@ -123,6 +124,7 @@ class MemoryCacheHandler {
|
|
|
123
124
|
const entry = {
|
|
124
125
|
value: cacheHandlerValue,
|
|
125
126
|
expiresAt: Date.now() + this.ttlMs,
|
|
127
|
+
tags: (0, cache_utils_1.getTags)(ctx) || [],
|
|
126
128
|
};
|
|
127
129
|
// Clean up expired entries before adding new one
|
|
128
130
|
this.cleanupExpired();
|
|
@@ -136,15 +138,19 @@ class MemoryCacheHandler {
|
|
|
136
138
|
}
|
|
137
139
|
async revalidateTag(tag) {
|
|
138
140
|
const tags = Array.isArray(tag) ? tag : [tag];
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
//
|
|
141
|
+
let invalidatedCount = 0;
|
|
142
|
+
for (const [key, entry] of this.inMemoryCache.entries()) {
|
|
143
|
+
if (entry.tags.some((entryTag) => tags.includes(entryTag))) {
|
|
144
|
+
this.inMemoryCache.delete(key);
|
|
145
|
+
invalidatedCount++;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.debug(`MEMORY REVALIDATE TAGS: [${tags.join(", ")}] removed ${invalidatedCount} entries`);
|
|
149
|
+
// Note: this only clears the cache on the instance handling this request.
|
|
150
|
+
// In distributed environments (multiple Lambda functions or Fargate containers),
|
|
151
|
+
// other instances continue serving their own memory-cached entries until those
|
|
152
|
+
// entries expire (ttlMs). Set CDK_NEXTJS_MEMORY_CACHE_TTL_MS=0 to disable the
|
|
153
|
+
// memory cache entirely if strong cross-instance consistency is required.
|
|
148
154
|
}
|
|
149
155
|
async resetRequestCache() {
|
|
150
156
|
// Clear in-memory cache
|
|
@@ -186,4 +192,4 @@ class MemoryCacheHandler {
|
|
|
186
192
|
}
|
|
187
193
|
}
|
|
188
194
|
exports.MemoryCacheHandler = MemoryCacheHandler;
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9tZW1vcnktY2FjaGUtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7RUFFRTtBQUNGLHNEQUFzRDtBQUN0RCxrREFBNkI7QUF1QjdCLE1BQWEsa0JBQWtCO0lBQ3JCLGFBQWEsR0FBa0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6RCxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0EwQkc7SUFDYyxLQUFLLENBQVM7SUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMEJHO0lBQ2MsVUFBVSxDQUFTO0lBRXBDLFlBQVksT0FBa0M7UUFDNUMsdUVBQXVFO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDO1FBRTFFLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTO1FBQzlFLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCO1lBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFB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LENBQUM7UUFDeEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCw0Q0FBNEM7SUFDckMsWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFsTkQsZ0RBa05DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgSW4tbWVtb3J5IGNhY2hlIGhhbmRsZXIgd2l0aCB0YWcgbWFuYWdlbWVudFxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGdldERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHtcbiAgQ2FjaGVIYW5kbGVyLFxuICBDYWNoZUhhbmRsZXJWYWx1ZSxcbiAgQ2FjaGVIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlXCI7XG5pbXBvcnQge1xuICBJbmNyZW1lbnRhbENhY2hlVmFsdWUsXG4gIEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIEdldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG59IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlXCI7XG5cbmludGVyZmFjZSBNZW1vcnlDYWNoZUVudHJ5IHtcbiAgdmFsdWU6IENhY2hlSGFuZGxlclZhbHVlO1xuICBleHBpcmVzQXQ6IG51bWJlcjsgLy8gVGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICBjb250ZXh0OiBDYWNoZUhhbmRsZXJDb250ZXh0O1xufVxuXG5leHBvcnQgY2xhc3MgTWVtb3J5Q2FjaGVIYW5kbGVyIGltcGxlbWVudHMgQ2FjaGVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBpbk1lbW9yeUNhY2hlOiBNYXA8c3RyaW5nLCBNZW1vcnlDYWNoZUVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpjYWNoZS1oYW5kbGVyOm1lbW9yeVwiKTtcblxuICAvKipcbiAgICogVGltZSB0byBsaXZlIGluIG1pbGxpc2Vjb25kcyBmb3IgY2FjaGUgZW50cmllcy5cbiAgICogQWZ0ZXIgdGhpcyBkdXJhdGlvbiwgZW50cmllcyBleHBpcmUgYW5kIGFyZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlLlxuICAgKlxuICAgKiAqKkltcG9ydGFudCoqOiBEdWUgdG8gdGhlIGRpc3RyaWJ1dGVkIG5hdHVyZSBvZiBjb21wdXRlIGluc3RhbmNlcyAoTGFtYmRhIGZ1bmN0aW9ucyxcbiAgICogRUNTIEZhcmdhdGUgY29udGFpbmVycywgZXRjLiksIHRoaXMgY2FjaGUgb25seSBwcm92aWRlcyBldmVudHVhbCBjb25zaXN0ZW5jeSBhY3Jvc3NcbiAgICogaW5zdGFuY2VzLiBUYWcgcmV2YWxpZGF0aW9ucyB3aWxsIGNsZWFyIHRoZSBjYWNoZSBvbiB0aGUgaW5zdGFuY2UgdGhhdCBwcm9jZXNzZXNcbiAgICogdGhlIHJldmFsaWRhdGlvbiwgYnV0IG90aGVyIGluc3RhbmNlcyBtYXkgc2VydmUgc3RhbGUgZGF0YSB1bnRpbCB0aGVpciBjYWNoZSBlbnRyaWVzIGV4cGlyZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2hvcnQgVFRMICg1IG1pbnV0ZXMpIC0gZm9yIGZyZXF1ZW50bHkgY2hhbmdpbmcgZGF0YVxuICAgKiB0dGxNcyA9IDUgKiA2MCAqIDEwMDA7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIE1lZGl1bSBUVEwgKDEgaG91cikgLSBiYWxhbmNlZCBiZXR3ZWVuIGZyZXNobmVzcyBhbmQgcGVyZm9ybWFuY2VcbiAgICogdHRsTXMgPSA2MCAqIDYwICogMTAwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTG9uZyBUVEwgKDI0IGhvdXJzKSAtIGZvciBtb3N0bHkgc3RhdGljIGNvbnRlbnRcbiAgICogdHRsTXMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgKlxuICAgKiAqKldoeSBhZGp1c3QgdGhpcz8qKlxuICAgKiAtIExvd2VyIHZhbHVlczogTW9yZSBjYWNoZSBtaXNzZXMsIGZyZXNoZXIgZGF0YSwgaGlnaGVyIFMzL0R5bmFtb0RCIGNvc3RzXG4gICAqIC0gSGlnaGVyIHZhbHVlczogRmV3ZXIgY2FjaGUgbWlzc2VzLCBiZXR0ZXIgcGVyZm9ybWFuY2UsIGJ1dCBsb25nZXIgc3RhbGUgZGF0YSB3aW5kb3dzXG4gICAqXG4gICAqIFNldCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGU6IGBDREtfTkVYVEpTX01FTU9SWV9DQUNIRV9UVExfTVNgXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bE1zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMgdG8gc3RvcmUgaW4gbWVtb3J5LlxuICAgKiBXaGVuIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgKExSVSkgZW50cnkgaXMgZXZpY3RlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU21hbGwgY2FjaGUgKDEwMCBlbnRyaWVzKSAtIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludCBmb3Igc2ltcGxlIGFwcHNcbiAgICogbWF4RW50cmllcyA9IDEwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTWVkaXVtIGNhY2hlICgxMDAwIGVudHJpZXMpIC0gZ29vZCBiYWxhbmNlIGZvciB0eXBpY2FsIGFwcGxpY2F0aW9uc1xuICAgKiBtYXhFbnRyaWVzID0gMTAwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTGFyZ2UgY2FjaGUgKDEwMDAwIGVudHJpZXMpIC0gZm9yIGhpZ2gtdHJhZmZpYyBhcHBzIHdpdGggbWFueSB1bmlxdWUgcGFnZXNcbiAgICogbWF4RW50cmllcyA9IDEwMDAwO1xuICAgKlxuICAgKiAqKldoeSBhZGp1c3QgdGhpcz8qKlxuICAgKiAtIExvd2VyIHZhbHVlczogTGVzcyBtZW1vcnkgdXNhZ2UsIG1vcmUgY2FjaGUgZXZpY3Rpb25zXG4gICAqIC0gSGlnaGVyIHZhbHVlczogTW9yZSBtZW1vcnkgdXNhZ2UsIGZld2VyIGNhY2hlIGV2aWN0aW9ucywgYmV0dGVyIGhpdCByYXRlc1xuICAgKlxuICAgKiAqKk1lbW9yeSBjb25zaWRlcmF0aW9ucyoqOiBFYWNoIGVudHJ5IHN0b3JlcyB0aGUgZnVsbCBjYWNoZSB2YWx1ZSAoSFRNTCwgSlNPTiwgZXRjLilcbiAgICogQSB0eXBpY2FsIHBhZ2UgY2FjaGUgbWlnaHQgYmUgMTAtMTAwS0IsIHNvIDEwMDAgZW50cmllcyDiiYggMTAtMTAwTUIgb2YgbWVtb3J5LlxuICAgKiBDb25zaWRlciB5b3VyIGNvbXB1dGUgZW52aXJvbm1lbnQncyBtZW1vcnkgbGltaXRzIChMYW1iZGE6IDEyOE1CLTEwR0IsIEZhcmdhdGU6IDUxMk1CLTMwR0IpXG4gICAqIGFuZCBzaXplIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBTZXQgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlOiBgQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfTUFYX0VOVFJJRVNgXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEVudHJpZXM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNZW1vcnlDYWNoZUhhbmRsZXJPcHRpb25zKSB7XG4gICAgLy8gUmVhZCBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggZmFsbGJhY2sgZGVmYXVsdHNcbiAgICBjb25zdCB0dGxGcm9tRW52ID0gcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfVFRMX01TO1xuICAgIGNvbnN0IG1heEVudHJpZXNGcm9tRW52ID0gcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfTUFYX0VOVFJJRVM7XG5cbiAgICAvLyBEZWZhdWx0IHRvIDEgaG91ciBUVEwgYW5kIDEwMDAgbWF4IGVudHJpZXNcbiAgICB0aGlzLnR0bE1zID0gdHRsRnJvbUVudiA/IHBhcnNlSW50KHR0bEZyb21FbnYsIDEwKSA6IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbiAgICB0aGlzLm1heEVudHJpZXMgPSBtYXhFbnRyaWVzRnJvbUVudlxuICAgICAgPyBwYXJzZUludChtYXhFbnRyaWVzRnJvbUVudiwgMTApXG4gICAgICA6IDEwMDA7XG5cbiAgICAvLyBMb2cgdGhlIG9wdGlvbnMgZm9yIGRlYnVnZ2luZyAob3B0aW9uYWwgdXNhZ2UgdG8gYXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nKVxuICAgIGlmIChvcHRpb25zLmNvbnRleHQuZGV2KSB7XG4gICAgICB0aGlzLmRlYnVnKFwiTWVtb3J5Q2FjaGVIYW5kbGVyIGluaXRpYWxpemVkIGluIGRldmVsb3BtZW50IG1vZGVcIik7XG4gICAgfVxuICAgIHRoaXMuZGVidWcoYFRUTDogJHt0aGlzLnR0bE1zIC8gMTAwMH1zLCBNYXggZW50cmllczogJHt0aGlzLm1heEVudHJpZXN9YCk7XG4gIH1cblxuICBhc3luYyBnZXQoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBjdHg6IEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQgfCBHZXRJbmNyZW1lbnRhbFJlc3BvbnNlQ2FjaGVDb250ZXh0LFxuICApOiBQcm9taXNlPENhY2hlSGFuZGxlclZhbHVlIHwgbnVsbD4ge1xuICAgIC8vIExvZyBjb250ZXh0IGZvciBkZWJ1Z2dpbmcgKG9wdGlvbmFsIHVzYWdlIHRvIGF2b2lkIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZylcbiAgICBpZiAoY3R4LmtpbmQpIHtcbiAgICAgIHRoaXMuZGVidWcoXG4gICAgICAgIGBNZW1vcnkgY2FjaGUgZ2V0IG9wZXJhdGlvbiBmb3IgJHtjYWNoZUtleX0gd2l0aCBraW5kOiAke2N0eC5raW5kfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGluLW1lbW9yeSBjYWNoZVxuICAgIGNvbnN0IG1lbW9yeUVudHJ5ID0gdGhpcy5pbk1lbW9yeUNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKG1lbW9yeUVudHJ5KSB7XG4gICAgICAvLyBDaGVjayBpZiBleHBpcmVkXG4gICAgICBpZiAoRGF0ZS5ub3coKSA+IG1lbW9yeUVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgICB0aGlzLmRlYnVnKGBNRU1PUlkgQ0FDSEUgRVhQSVJFRDogJHtjYWNoZUtleX1gKTtcbiAgICAgICAgdGhpcy5pbk1lbW9yeUNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIGVuZCAobW9zdCByZWNlbnRseSB1c2VkKSBieSBkZWxldGluZyBhbmQgcmUtaW5zZXJ0aW5nXG4gICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXQoY2FjaGVLZXksIG1lbW9yeUVudHJ5KTtcblxuICAgICAgdGhpcy5kZWJ1ZyhgTUVNT1JZIENBQ0hFIEhJVDogJHtjYWNoZUtleX1gKTtcbiAgICAgIHJldHVybiBtZW1vcnlFbnRyeS52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmRlYnVnKGBNRU1PUlkgQ0FDSEUgTUlTUzogJHtjYWNoZUtleX1gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHNldChcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIGRhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSB8IG51bGwsXG4gICAgX2N0eDogU2V0SW5jcmVtZW50YWxGZXRjaENhY2hlQ29udGV4dCB8IFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgLy8gRGVsZXRlIGZyb20gbWVtb3J5IGNhY2hlXG4gICAgICB0aGlzLmRlYnVnKGBNRU1PUlkgQ0FDSEUgREVMRVRFOiAke2NhY2hlS2V5fWApO1xuICAgICAgdGhpcy5pbk1lbW9yeUNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVidWcgbG9nZ2luZyBmb3IgbWVtb3J5IGNhY2hlIHNldFxuICAgIHRoaXMuZGVidWcoYE1FTU9SWSBDQUNIRSBTRVQ6ICR7Y2FjaGVLZXl9ICgke2RhdGEua2luZH0pYCk7XG5cbiAgICAvLyBTdG9yZSBpbiBtZW1vcnkgY2FjaGUgd2l0aCBwcm9wZXIgQ2FjaGVIYW5kbGVyVmFsdWUgc3RydWN0dXJlXG4gICAgY29uc3QgY2FjaGVIYW5kbGVyVmFsdWU6IENhY2hlSGFuZGxlclZhbHVlID0ge1xuICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudHJ5OiBNZW1vcnlDYWNoZUVudHJ5ID0ge1xuICAgICAgdmFsdWU6IGNhY2hlSGFuZGxlclZhbHVlLFxuICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdGhpcy50dGxNcyxcbiAgICB9O1xuXG4gICAgLy8gQ2xlYW4gdXAgZXhwaXJlZCBlbnRyaWVzIGJlZm9yZSBhZGRpbmcgbmV3IG9uZVxuICAgIHRoaXMuY2xlYW51cEV4cGlyZWQoKTtcblxuICAgIC8vIElmIHdlJ3JlIGF0IG1heCBjYXBhY2l0eSwgZXZpY3Qgb2xkZXN0IGVudHJ5XG4gICAgaWYgKHRoaXMuaW5NZW1vcnlDYWNoZS5zaXplID49IHRoaXMubWF4RW50cmllcykge1xuICAgICAgdGhpcy5ldmljdE9sZGVzdCgpO1xuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgZW50cnlcbiAgICB0aGlzLmluTWVtb3J5Q2FjaGUuc2V0KGNhY2hlS2V5LCBlbnRyeSk7XG5cbiAgICB0aGlzLmRlYnVnKGBDYWNoZSBlbnRyaWVzOiAke3RoaXMuaW5NZW1vcnlDYWNoZS5zaXplfS8ke3RoaXMubWF4RW50cmllc31gKTtcbiAgfVxuXG4gIGFzeW5jIHJldmFsaWRhdGVUYWcodGFnOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KHRhZykgPyB0YWcgOiBbdGFnXTtcbiAgICB0aGlzLmRlYnVnKGBNRU1PUlkgUkVWQUxJREFURSBUQUdTIChuby1vcCk6IFske3RhZ3Muam9pbihcIiwgXCIpfV1gKTtcbiAgICAvLyBNZW1vcnkgY2FjaGUgZG9lcyBub3QgdHJhY2sgdGFncyBiZWNhdXNlOlxuICAgIC8vIDEuIEluIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50cyAobXVsdGlwbGUgTGFtYmRhIGZ1bmN0aW9ucyBvciBGYXJnYXRlIGNvbnRhaW5lcnMpLFxuICAgIC8vICAgIHRhZyByZXZhbGlkYXRpb24gb25seSBjbGVhcnMgY2FjaGUgb24gdGhlIGN1cnJlbnQgaW5zdGFuY2UuIE90aGVyIGluc3RhbmNlc1xuICAgIC8vICAgIHdvdWxkIGNvbnRpbnVlIHNlcnZpbmcgc3RhbGUgZGF0YSB1bnRpbCB0aGVpciBUVEwgZXhwaXJlcyBhbnl3YXkuXG4gICAgLy8gMi4gVGhlIFMzIGNhY2hlIGhhbmRsZXIgd2l0aCBEeW5hbW9EQiBwcm92aWRlcyB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2Ugb2YgdHJ1dGhcbiAgICAvLyAgICBmb3IgdGFnIHJldmFsaWRhdGlvbnMgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXG4gICAgLy8gMy4gTWVtb3J5IGNhY2hlIHJlbGllcyBvbiBUVEwtYmFzZWQgZXhwaXJhdGlvbiBmb3Igc2ltcGxpY2l0eSBhbmQgY29uc2lzdGVuY3kuXG4gICAgLy8gICAgSWYgc3Ryb25nIGNvbnNpc3RlbmN5IGlzIHJlcXVpcmVkLCBzZXQgQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfVFRMX01TPTAuXG4gIH1cblxuICBhc3luYyByZXNldFJlcXVlc3RDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDbGVhciBpbi1tZW1vcnkgY2FjaGVcbiAgICB0aGlzLmluTWVtb3J5Q2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGV4cGlyZWQgY2FjaGUgZW50cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBleHBpcmVkQ291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdGhpcy5pbk1lbW9yeUNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKG5vdyA+IGVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIGV4cGlyZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHBpcmVkQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmRlYnVnKGBDbGVhbmVkIHVwICR7ZXhwaXJlZENvdW50fSBleHBpcmVkIGVudHJpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZpY3QgdGhlIG9sZGVzdCAobGVhc3QgcmVjZW50bHkgdXNlZCkgY2FjaGUgZW50cnlcbiAgICogTWFwIG1haW50YWlucyBpbnNlcnRpb24gb3JkZXIsIHNvIGZpcnN0IGVudHJ5IGlzIG9sZGVzdFxuICAgKi9cbiAgcHJpdmF0ZSBldmljdE9sZGVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdEtleSA9IHRoaXMuaW5NZW1vcnlDYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChmaXJzdEtleSkge1xuICAgICAgdGhpcy5kZWJ1ZyhgTUFYIENBUEFDSVRZIEVWSUNUIChMUlUpOiAke2ZpcnN0S2V5fWApO1xuICAgICAgdGhpcy5pbk1lbW9yeUNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHVibGljIG1ldGhvZHMgZm9yIHRlc3RpbmcgYW5kIG1vbml0b3JpbmdcbiAgcHVibGljIGdldENhY2hlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmluTWVtb3J5Q2FjaGUuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5jbGVhcigpO1xuICB9XG59XG4iXX0=
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9tZW1vcnktY2FjaGUtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7RUFFRTtBQUNGLHNEQUFzRDtBQUN0RCxrREFBNkI7QUFhN0IsK0NBQXdDO0FBWXhDLE1BQWEsa0JBQWtCO0lBQ3JCLGFBQWEsR0FBa0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6RCxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0EwQkc7SUFDYyxLQUFLLENBQVM7SUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMEJHO0lBQ2MsVUFBVSxDQUFTO0lBRXBDLFlBQVksT0FBa0M7UUFDNUMsdUVBQXVFO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDO1FBRTFFLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTO1FBQzlFLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCO1lBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQ1AsUUFBZ0IsRUFDaEIsR0FBeUU7UUFFekUsK0VBQStFO1FBQy9FLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FDUixrQ0FBa0MsUUFBUSxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FDcEUsQ0FBQztRQUNKLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUNQLFFBQWdCLEVBQ2hCLElBQWtDLEVBQ2xDLEdBQXlFO1FBRXpFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLE9BQU87UUFDVCxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUUzRCxnRUFBZ0U7UUFDaEUsTUFBTSxpQkFBaUIsR0FBc0I7WUFDM0MsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQXFCO1lBQzlCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSztZQUNsQyxJQUFJLEVBQUUsSUFBQSxxQkFBTyxFQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7U0FDekIsQ0FBQztRQUVGLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsK0NBQStDO1FBQy9DLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFzQjtRQUN4QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFFekIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLGdCQUFnQixFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUNSLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLGdCQUFnQixVQUFVLENBQ25GLENBQUM7UUFFRiwwRUFBMEU7UUFDMUUsaUZBQWlGO1FBQ2pGLCtFQUErRTtRQUMvRSw4RUFBOEU7UUFDOUUsMEVBQTBFO0lBQzVFLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3hELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLFlBQVksRUFBRSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLFlBQVksa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFdBQVc7UUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCw0Q0FBNEM7SUFDckMsWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUE1TkQsZ0RBNE5DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgSW4tbWVtb3J5IGNhY2hlIGhhbmRsZXIgd2l0aCB0YWcgbWFuYWdlbWVudFxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGdldERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHtcbiAgQ2FjaGVIYW5kbGVyLFxuICBDYWNoZUhhbmRsZXJWYWx1ZSxcbiAgQ2FjaGVIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlXCI7XG5pbXBvcnQge1xuICBJbmNyZW1lbnRhbENhY2hlVmFsdWUsXG4gIEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIEdldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG59IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlXCI7XG5pbXBvcnQgeyBnZXRUYWdzIH0gZnJvbSBcIi4vY2FjaGUtdXRpbHNcIjtcblxuaW50ZXJmYWNlIE1lbW9yeUNhY2hlRW50cnkge1xuICB2YWx1ZTogQ2FjaGVIYW5kbGVyVmFsdWU7XG4gIGV4cGlyZXNBdDogbnVtYmVyOyAvLyBUaW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG4gIHRhZ3M6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICBjb250ZXh0OiBDYWNoZUhhbmRsZXJDb250ZXh0O1xufVxuXG5leHBvcnQgY2xhc3MgTWVtb3J5Q2FjaGVIYW5kbGVyIGltcGxlbWVudHMgQ2FjaGVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBpbk1lbW9yeUNhY2hlOiBNYXA8c3RyaW5nLCBNZW1vcnlDYWNoZUVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpjYWNoZS1oYW5kbGVyOm1lbW9yeVwiKTtcblxuICAvKipcbiAgICogVGltZSB0byBsaXZlIGluIG1pbGxpc2Vjb25kcyBmb3IgY2FjaGUgZW50cmllcy5cbiAgICogQWZ0ZXIgdGhpcyBkdXJhdGlvbiwgZW50cmllcyBleHBpcmUgYW5kIGFyZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlLlxuICAgKlxuICAgKiAqKkltcG9ydGFudCoqOiBEdWUgdG8gdGhlIGRpc3RyaWJ1dGVkIG5hdHVyZSBvZiBjb21wdXRlIGluc3RhbmNlcyAoTGFtYmRhIGZ1bmN0aW9ucyxcbiAgICogRUNTIEZhcmdhdGUgY29udGFpbmVycywgZXRjLiksIHRoaXMgY2FjaGUgb25seSBwcm92aWRlcyBldmVudHVhbCBjb25zaXN0ZW5jeSBhY3Jvc3NcbiAgICogaW5zdGFuY2VzLiBUYWcgcmV2YWxpZGF0aW9ucyB3aWxsIGNsZWFyIHRoZSBjYWNoZSBvbiB0aGUgaW5zdGFuY2UgdGhhdCBwcm9jZXNzZXNcbiAgICogdGhlIHJldmFsaWRhdGlvbiwgYnV0IG90aGVyIGluc3RhbmNlcyBtYXkgc2VydmUgc3RhbGUgZGF0YSB1bnRpbCB0aGVpciBjYWNoZSBlbnRyaWVzIGV4cGlyZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2hvcnQgVFRMICg1IG1pbnV0ZXMpIC0gZm9yIGZyZXF1ZW50bHkgY2hhbmdpbmcgZGF0YVxuICAgKiB0dGxNcyA9IDUgKiA2MCAqIDEwMDA7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIE1lZGl1bSBUVEwgKDEgaG91cikgLSBiYWxhbmNlZCBiZXR3ZWVuIGZyZXNobmVzcyBhbmQgcGVyZm9ybWFuY2VcbiAgICogdHRsTXMgPSA2MCAqIDYwICogMTAwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTG9uZyBUVEwgKDI0IGhvdXJzKSAtIGZvciBtb3N0bHkgc3RhdGljIGNvbnRlbnRcbiAgICogdHRsTXMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgKlxuICAgKiAqKldoeSBhZGp1c3QgdGhpcz8qKlxuICAgKiAtIExvd2VyIHZhbHVlczogTW9yZSBjYWNoZSBtaXNzZXMsIGZyZXNoZXIgZGF0YSwgaGlnaGVyIFMzL0R5bmFtb0RCIGNvc3RzXG4gICAqIC0gSGlnaGVyIHZhbHVlczogRmV3ZXIgY2FjaGUgbWlzc2VzLCBiZXR0ZXIgcGVyZm9ybWFuY2UsIGJ1dCBsb25nZXIgc3RhbGUgZGF0YSB3aW5kb3dzXG4gICAqXG4gICAqIFNldCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGU6IGBDREtfTkVYVEpTX01FTU9SWV9DQUNIRV9UVExfTVNgXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bE1zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMgdG8gc3RvcmUgaW4gbWVtb3J5LlxuICAgKiBXaGVuIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgKExSVSkgZW50cnkgaXMgZXZpY3RlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU21hbGwgY2FjaGUgKDEwMCBlbnRyaWVzKSAtIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludCBmb3Igc2ltcGxlIGFwcHNcbiAgICogbWF4RW50cmllcyA9IDEwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTWVkaXVtIGNhY2hlICgxMDAwIGVudHJpZXMpIC0gZ29vZCBiYWxhbmNlIGZvciB0eXBpY2FsIGFwcGxpY2F0aW9uc1xuICAgKiBtYXhFbnRyaWVzID0gMTAwMDtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTGFyZ2UgY2FjaGUgKDEwMDAwIGVudHJpZXMpIC0gZm9yIGhpZ2gtdHJhZmZpYyBhcHBzIHdpdGggbWFueSB1bmlxdWUgcGFnZXNcbiAgICogbWF4RW50cmllcyA9IDEwMDAwO1xuICAgKlxuICAgKiAqKldoeSBhZGp1c3QgdGhpcz8qKlxuICAgKiAtIExvd2VyIHZhbHVlczogTGVzcyBtZW1vcnkgdXNhZ2UsIG1vcmUgY2FjaGUgZXZpY3Rpb25zXG4gICAqIC0gSGlnaGVyIHZhbHVlczogTW9yZSBtZW1vcnkgdXNhZ2UsIGZld2VyIGNhY2hlIGV2aWN0aW9ucywgYmV0dGVyIGhpdCByYXRlc1xuICAgKlxuICAgKiAqKk1lbW9yeSBjb25zaWRlcmF0aW9ucyoqOiBFYWNoIGVudHJ5IHN0b3JlcyB0aGUgZnVsbCBjYWNoZSB2YWx1ZSAoSFRNTCwgSlNPTiwgZXRjLilcbiAgICogQSB0eXBpY2FsIHBhZ2UgY2FjaGUgbWlnaHQgYmUgMTAtMTAwS0IsIHNvIDEwMDAgZW50cmllcyDiiYggMTAtMTAwTUIgb2YgbWVtb3J5LlxuICAgKiBDb25zaWRlciB5b3VyIGNvbXB1dGUgZW52aXJvbm1lbnQncyBtZW1vcnkgbGltaXRzIChMYW1iZGE6IDEyOE1CLTEwR0IsIEZhcmdhdGU6IDUxMk1CLTMwR0IpXG4gICAqIGFuZCBzaXplIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBTZXQgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlOiBgQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfTUFYX0VOVFJJRVNgXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEVudHJpZXM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNZW1vcnlDYWNoZUhhbmRsZXJPcHRpb25zKSB7XG4gICAgLy8gUmVhZCBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggZmFsbGJhY2sgZGVmYXVsdHNcbiAgICBjb25zdCB0dGxGcm9tRW52ID0gcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfVFRMX01TO1xuICAgIGNvbnN0IG1heEVudHJpZXNGcm9tRW52ID0gcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19NRU1PUllfQ0FDSEVfTUFYX0VOVFJJRVM7XG5cbiAgICAvLyBEZWZhdWx0IHRvIDEgaG91ciBUVEwgYW5kIDEwMDAgbWF4IGVudHJpZXNcbiAgICB0aGlzLnR0bE1zID0gdHRsRnJvbUVudiA/IHBhcnNlSW50KHR0bEZyb21FbnYsIDEwKSA6IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbiAgICB0aGlzLm1heEVudHJpZXMgPSBtYXhFbnRyaWVzRnJvbUVudlxuICAgICAgPyBwYXJzZUludChtYXhFbnRyaWVzRnJvbUVudiwgMTApXG4gICAgICA6IDEwMDA7XG5cbiAgICAvLyBMb2cgdGhlIG9wdGlvbnMgZm9yIGRlYnVnZ2luZyAob3B0aW9uYWwgdXNhZ2UgdG8gYXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nKVxuICAgIGlmIChvcHRpb25zLmNvbnRleHQuZGV2KSB7XG4gICAgICB0aGlzLmRlYnVnKFwiTWVtb3J5Q2FjaGVIYW5kbGVyIGluaXRpYWxpemVkIGluIGRldmVsb3BtZW50IG1vZGVcIik7XG4gICAgfVxuICAgIHRoaXMuZGVidWcoYFRUTDogJHt0aGlzLnR0bE1zIC8gMTAwMH1zLCBNYXggZW50cmllczogJHt0aGlzLm1heEVudHJpZXN9YCk7XG4gIH1cblxuICBhc3luYyBnZXQoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBjdHg6IEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQgfCBHZXRJbmNyZW1lbnRhbFJlc3BvbnNlQ2FjaGVDb250ZXh0LFxuICApOiBQcm9taXNlPENhY2hlSGFuZGxlclZhbHVlIHwgbnVsbD4ge1xuICAgIC8vIExvZyBjb250ZXh0IGZvciBkZWJ1Z2dpbmcgKG9wdGlvbmFsIHVzYWdlIHRvIGF2b2lkIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZylcbiAgICBpZiAoY3R4LmtpbmQpIHtcbiAgICAgIHRoaXMuZGVidWcoXG4gICAgICAgIGBNZW1vcnkgY2FjaGUgZ2V0IG9wZXJhdGlvbiBmb3IgJHtjYWNoZUtleX0gd2l0aCBraW5kOiAke2N0eC5raW5kfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGluLW1lbW9yeSBjYWNoZVxuICAgIGNvbnN0IG1lbW9yeUVudHJ5ID0gdGhpcy5pbk1lbW9yeUNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKG1lbW9yeUVudHJ5KSB7XG4gICAgICAvLyBDaGVjayBpZiBleHBpcmVkXG4gICAgICBpZiAoRGF0ZS5ub3coKSA+IG1lbW9yeUVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgICB0aGlzLmRlYnVnKGBNRU1PUlkgQ0FDSEUgRVhQSVJFRDogJHtjYWNoZUtleX1gKTtcbiAgICAgICAgdGhpcy5pbk1lbW9yeUNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHRvIGVuZCAobW9zdCByZWNlbnRseSB1c2VkKSBieSBkZWxldGluZyBhbmQgcmUtaW5zZXJ0aW5nXG4gICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXQoY2FjaGVLZXksIG1lbW9yeUVudHJ5KTtcblxuICAgICAgdGhpcy5kZWJ1ZyhgTUVNT1JZIENBQ0hFIEhJVDogJHtjYWNoZUtleX1gKTtcbiAgICAgIHJldHVybiBtZW1vcnlFbnRyeS52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmRlYnVnKGBNRU1PUlkgQ0FDSEUgTUlTUzogJHtjYWNoZUtleX1gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHNldChcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIGRhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSB8IG51bGwsXG4gICAgY3R4OiBTZXRJbmNyZW1lbnRhbEZldGNoQ2FjaGVDb250ZXh0IHwgU2V0SW5jcmVtZW50YWxSZXNwb25zZUNhY2hlQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICAvLyBEZWxldGUgZnJvbSBtZW1vcnkgY2FjaGVcbiAgICAgIHRoaXMuZGVidWcoYE1FTU9SWSBDQUNIRSBERUxFVEU6ICR7Y2FjaGVLZXl9YCk7XG4gICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBsb2dnaW5nIGZvciBtZW1vcnkgY2FjaGUgc2V0XG4gICAgdGhpcy5kZWJ1ZyhgTUVNT1JZIENBQ0hFIFNFVDogJHtjYWNoZUtleX0gKCR7ZGF0YS5raW5kfSlgKTtcblxuICAgIC8vIFN0b3JlIGluIG1lbW9yeSBjYWNoZSB3aXRoIHByb3BlciBDYWNoZUhhbmRsZXJWYWx1ZSBzdHJ1Y3R1cmVcbiAgICBjb25zdCBjYWNoZUhhbmRsZXJWYWx1ZTogQ2FjaGVIYW5kbGVyVmFsdWUgPSB7XG4gICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICB9O1xuXG4gICAgY29uc3QgZW50cnk6IE1lbW9yeUNhY2hlRW50cnkgPSB7XG4gICAgICB2YWx1ZTogY2FjaGVIYW5kbGVyVmFsdWUsXG4gICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0aGlzLnR0bE1zLFxuICAgICAgdGFnczogZ2V0VGFncyhjdHgpIHx8IFtdLFxuICAgIH07XG5cbiAgICAvLyBDbGVhbiB1cCBleHBpcmVkIGVudHJpZXMgYmVmb3JlIGFkZGluZyBuZXcgb25lXG4gICAgdGhpcy5jbGVhbnVwRXhwaXJlZCgpO1xuXG4gICAgLy8gSWYgd2UncmUgYXQgbWF4IGNhcGFjaXR5LCBldmljdCBvbGRlc3QgZW50cnlcbiAgICBpZiAodGhpcy5pbk1lbW9yeUNhY2hlLnNpemUgPj0gdGhpcy5tYXhFbnRyaWVzKSB7XG4gICAgICB0aGlzLmV2aWN0T2xkZXN0KCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyBlbnRyeVxuICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXQoY2FjaGVLZXksIGVudHJ5KTtcblxuICAgIHRoaXMuZGVidWcoYENhY2hlIGVudHJpZXM6ICR7dGhpcy5pbk1lbW9yeUNhY2hlLnNpemV9LyR7dGhpcy5tYXhFbnRyaWVzfWApO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZVRhZyh0YWc6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFncyA9IEFycmF5LmlzQXJyYXkodGFnKSA/IHRhZyA6IFt0YWddO1xuICAgIGxldCBpbnZhbGlkYXRlZENvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuaW5NZW1vcnlDYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChlbnRyeS50YWdzLnNvbWUoKGVudHJ5VGFnKSA9PiB0YWdzLmluY2x1ZGVzKGVudHJ5VGFnKSkpIHtcbiAgICAgICAgdGhpcy5pbk1lbW9yeUNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICBpbnZhbGlkYXRlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1ZyhcbiAgICAgIGBNRU1PUlkgUkVWQUxJREFURSBUQUdTOiBbJHt0YWdzLmpvaW4oXCIsIFwiKX1dIHJlbW92ZWQgJHtpbnZhbGlkYXRlZENvdW50fSBlbnRyaWVzYCxcbiAgICApO1xuXG4gICAgLy8gTm90ZTogdGhpcyBvbmx5IGNsZWFycyB0aGUgY2FjaGUgb24gdGhlIGluc3RhbmNlIGhhbmRsaW5nIHRoaXMgcmVxdWVzdC5cbiAgICAvLyBJbiBkaXN0cmlidXRlZCBlbnZpcm9ubWVudHMgKG11bHRpcGxlIExhbWJkYSBmdW5jdGlvbnMgb3IgRmFyZ2F0ZSBjb250YWluZXJzKSxcbiAgICAvLyBvdGhlciBpbnN0YW5jZXMgY29udGludWUgc2VydmluZyB0aGVpciBvd24gbWVtb3J5LWNhY2hlZCBlbnRyaWVzIHVudGlsIHRob3NlXG4gICAgLy8gZW50cmllcyBleHBpcmUgKHR0bE1zKS4gU2V0IENES19ORVhUSlNfTUVNT1JZX0NBQ0hFX1RUTF9NUz0wIHRvIGRpc2FibGUgdGhlXG4gICAgLy8gbWVtb3J5IGNhY2hlIGVudGlyZWx5IGlmIHN0cm9uZyBjcm9zcy1pbnN0YW5jZSBjb25zaXN0ZW5jeSBpcyByZXF1aXJlZC5cbiAgfVxuXG4gIGFzeW5jIHJlc2V0UmVxdWVzdENhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENsZWFyIGluLW1lbW9yeSBjYWNoZVxuICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZXhwaXJlZCBjYWNoZSBlbnRyaWVzXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBFeHBpcmVkKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgbGV0IGV4cGlyZWRDb3VudCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiB0aGlzLmluTWVtb3J5Q2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAobm93ID4gZW50cnkuZXhwaXJlc0F0KSB7XG4gICAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgICAgZXhwaXJlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4cGlyZWRDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuZGVidWcoYENsZWFuZWQgdXAgJHtleHBpcmVkQ291bnR9IGV4cGlyZWQgZW50cmllc2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmljdCB0aGUgb2xkZXN0IChsZWFzdCByZWNlbnRseSB1c2VkKSBjYWNoZSBlbnRyeVxuICAgKiBNYXAgbWFpbnRhaW5zIGluc2VydGlvbiBvcmRlciwgc28gZmlyc3QgZW50cnkgaXMgb2xkZXN0XG4gICAqL1xuICBwcml2YXRlIGV2aWN0T2xkZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5pbk1lbW9yeUNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKGZpcnN0S2V5KSB7XG4gICAgICB0aGlzLmRlYnVnKGBNQVggQ0FQQUNJVFkgRVZJQ1QgKExSVSk6ICR7Zmlyc3RLZXl9YCk7XG4gICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICB9XG4gIH1cblxuICAvLyBQdWJsaWMgbWV0aG9kcyBmb3IgdGVzdGluZyBhbmQgbW9uaXRvcmluZ1xuICBwdWJsaWMgZ2V0Q2FjaGVTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5NZW1vcnlDYWNoZS5zaXplO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5pbk1lbW9yeUNhY2hlLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -64,6 +64,62 @@ describe("MemoryCacheHandler", () => {
|
|
|
64
64
|
expect(result?.value).toEqual(testData);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
|
+
describe("revalidateTag", () => {
|
|
68
|
+
const testData = {
|
|
69
|
+
kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */,
|
|
70
|
+
html: "<html>tagged</html>",
|
|
71
|
+
rscData: undefined,
|
|
72
|
+
headers: undefined,
|
|
73
|
+
postponed: undefined,
|
|
74
|
+
segmentData: undefined,
|
|
75
|
+
status: undefined,
|
|
76
|
+
};
|
|
77
|
+
it("should remove entries tagged with the revalidated tag", async () => {
|
|
78
|
+
await handler.set("tagged-key", testData, {
|
|
79
|
+
fetchCache: true,
|
|
80
|
+
tags: ["collection"],
|
|
81
|
+
});
|
|
82
|
+
await handler.revalidateTag("collection");
|
|
83
|
+
const result = await handler.get("tagged-key", {
|
|
84
|
+
kind: "APP_PAGE" /* IncrementalCacheKind.APP_PAGE */,
|
|
85
|
+
isFallback: false,
|
|
86
|
+
});
|
|
87
|
+
expect(result).toBeNull();
|
|
88
|
+
expect(handler.getCacheSize()).toBe(0);
|
|
89
|
+
});
|
|
90
|
+
it("should not remove entries with unrelated tags", async () => {
|
|
91
|
+
await handler.set("unrelated-key", testData, {
|
|
92
|
+
fetchCache: true,
|
|
93
|
+
tags: ["other-tag"],
|
|
94
|
+
});
|
|
95
|
+
await handler.revalidateTag("collection");
|
|
96
|
+
const result = await handler.get("unrelated-key", {
|
|
97
|
+
kind: "APP_PAGE" /* IncrementalCacheKind.APP_PAGE */,
|
|
98
|
+
isFallback: false,
|
|
99
|
+
});
|
|
100
|
+
expect(result).not.toBeNull();
|
|
101
|
+
expect(handler.getCacheSize()).toBe(1);
|
|
102
|
+
});
|
|
103
|
+
it("should accept an array of tags and remove any matching entries", async () => {
|
|
104
|
+
await handler.set("key-a", testData, {
|
|
105
|
+
fetchCache: true,
|
|
106
|
+
tags: ["tag-a"],
|
|
107
|
+
});
|
|
108
|
+
await handler.set("key-b", testData, {
|
|
109
|
+
fetchCache: true,
|
|
110
|
+
tags: ["tag-b"],
|
|
111
|
+
});
|
|
112
|
+
await handler.revalidateTag(["tag-a", "tag-b"]);
|
|
113
|
+
expect(handler.getCacheSize()).toBe(0);
|
|
114
|
+
});
|
|
115
|
+
it("should be a no-op when no entries match the tag", async () => {
|
|
116
|
+
await handler.set("untagged-key", testData, {
|
|
117
|
+
fetchCache: true,
|
|
118
|
+
});
|
|
119
|
+
await expect(handler.revalidateTag("nonexistent-tag")).resolves.not.toThrow();
|
|
120
|
+
expect(handler.getCacheSize()).toBe(1);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
67
123
|
describe("resetRequestCache", () => {
|
|
68
124
|
it("should clear all caches", async () => {
|
|
69
125
|
const testData = {
|
|
@@ -84,4 +140,4 @@ describe("MemoryCacheHandler", () => {
|
|
|
84
140
|
});
|
|
85
141
|
});
|
|
86
142
|
});
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLWhhbmRsZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyL21lbW9yeS1jYWNoZS1oYW5kbGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxpRUFBNEQ7QUFFNUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLE9BQTJCLENBQUM7SUFDaEMsSUFBSSxXQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUF5QixDQUFDO1FBRXBELE9BQU8sR0FBRyxJQUFJLHlDQUFrQixDQUFDO1lBQy9CLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ25CLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFO2dCQUMvQyxJQUFJLGdEQUErQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RELE1BQU0sUUFBUSxHQUEwQjtnQkFDdEMsSUFBSSwyQ0FBMEI7Z0JBQzlCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDO1lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUU7Z0JBQ3RDLFVBQVUsRUFBRSxJQUFhO2FBQzFCLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNDLElBQUksZ0RBQStCO2dCQUNuQyxVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNuQixFQUFFLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEQsTUFBTSxRQUFRLEdBQTBCO2dCQUN0QyxJQUFJLDJDQUEwQjtnQkFDOUIsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixTQUFTLEVBQUUsU0FBUztnQkFDcEIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLE1BQU0sRUFBRSxTQUFTO2FBQ2xCLENBQUM7WUFFRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtnQkFDckMsVUFBVSxFQUFFLElBQWE7YUFDMUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO2dCQUMxQyxJQUFJLGdEQUErQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sUUFBUSxHQUEwQjtnQkFDdEMsSUFBSSwyQ0FBMEI7Z0JBQzlCLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDO1lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxJQUFhO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkMsTUFBTSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUVsQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHtcbiAgSW5jcmVtZW50YWxDYWNoZVZhbHVlLFxuICBDYWNoZWRSb3V0ZUtpbmQsXG4gIEluY3JlbWVudGFsQ2FjaGVLaW5kLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgTWVtb3J5Q2FjaGVIYW5kbGVyIH0gZnJvbSBcIi4vbWVtb3J5LWNhY2hlLWhhbmRsZXJcIjtcblxuZGVzY3JpYmUoXCJNZW1vcnlDYWNoZUhhbmRsZXJcIiwgKCkgPT4ge1xuICBsZXQgaGFuZGxlcjogTWVtb3J5Q2FjaGVIYW5kbGVyO1xuICBsZXQgbW9ja0NvbnRleHQ6IENhY2hlSGFuZGxlckNvbnRleHQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja0NvbnRleHQgPSB7IGRldjogZmFsc2UgfSBhcyBDYWNoZUhhbmRsZXJDb250ZXh0O1xuXG4gICAgaGFuZGxlciA9IG5ldyBNZW1vcnlDYWNoZUhhbmRsZXIoe1xuICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaGFuZGxlci5jbGVhckNhY2hlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiZ2V0XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXR1cm4gbnVsbCBmb3Igbm9uLWV4aXN0ZW50IGNhY2hlIGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcIm5vbi1leGlzdGVudFwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiBjYWNoZWQgdmFsdWUgZnJvbSBtZW1vcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcInRlc3Qta2V5XCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmVOdWxsKCk7XG4gICAgICBleHBlY3QocmVzdWx0Py52YWx1ZSkudG9FcXVhbCh0ZXN0RGF0YSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwic2V0XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzdG9yZSB2YWx1ZSBpbiBtZW1vcnkgY2FjaGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnNldCB0ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJzZXQta2V5XCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGhhbmRsZXIuZ2V0Q2FjaGVTaXplKCkpLnRvQmUoMSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwic2V0LWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdD8udmFsdWUpLnRvRXF1YWwodGVzdERhdGEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInJlc2V0UmVxdWVzdENhY2hlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjbGVhciBhbGwgY2FjaGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5yZXNldCB0ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJyZXNldC1rZXlcIiwgdGVzdERhdGEsIHtcbiAgICAgICAgZmV0Y2hDYWNoZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoaGFuZGxlci5nZXRDYWNoZVNpemUoKSkudG9CZSgxKTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXNldFJlcXVlc3RDYWNoZSgpO1xuXG4gICAgICBleHBlY3QoaGFuZGxlci5nZXRDYWNoZVNpemUoKSkudG9CZSgwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLWhhbmRsZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyL21lbW9yeS1jYWNoZS1oYW5kbGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxpRUFBNEQ7QUFFNUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLE9BQTJCLENBQUM7SUFDaEMsSUFBSSxXQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUF5QixDQUFDO1FBRXBELE9BQU8sR0FBRyxJQUFJLHlDQUFrQixDQUFDO1lBQy9CLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ25CLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFO2dCQUMvQyxJQUFJLGdEQUErQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RELE1BQU0sUUFBUSxHQUEwQjtnQkFDdEMsSUFBSSwyQ0FBMEI7Z0JBQzlCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsU0FBUztnQkFDbEIs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dGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IENhY2hlSGFuZGxlckNvbnRleHQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvaW5jcmVtZW50YWwtY2FjaGVcIjtcbmltcG9ydCB7XG4gIEluY3JlbWVudGFsQ2FjaGVWYWx1ZSxcbiAgQ2FjaGVkUm91dGVLaW5kLFxuICBJbmNyZW1lbnRhbENhY2hlS2luZCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGVcIjtcbmltcG9ydCB7IE1lbW9yeUNhY2hlSGFuZGxlciB9IGZyb20gXCIuL21lbW9yeS1jYWNoZS1oYW5kbGVyXCI7XG5cbmRlc2NyaWJlKFwiTWVtb3J5Q2FjaGVIYW5kbGVyXCIsICgpID0+IHtcbiAgbGV0IGhhbmRsZXI6IE1lbW9yeUNhY2hlSGFuZGxlcjtcbiAgbGV0IG1vY2tDb250ZXh0OiBDYWNoZUhhbmRsZXJDb250ZXh0O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tDb250ZXh0ID0geyBkZXY6IGZhbHNlIH0gYXMgQ2FjaGVIYW5kbGVyQ29udGV4dDtcblxuICAgIGhhbmRsZXIgPSBuZXcgTWVtb3J5Q2FjaGVIYW5kbGVyKHtcbiAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGhhbmRsZXIuY2xlYXJDYWNoZSgpO1xuICB9KTtcblxuICBkZXNjcmliZShcImdldFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgZm9yIG5vbi1leGlzdGVudCBjYWNoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJub24tZXhpc3RlbnRcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY2FjaGVkIHZhbHVlIGZyb20gbWVtb3J5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD50ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJ0ZXN0LWtleVwiLCB0ZXN0RGF0YSwge1xuICAgICAgICBmZXRjaENhY2hlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcInRlc3Qta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlTnVsbCgpO1xuICAgICAgZXhwZWN0KHJlc3VsdD8udmFsdWUpLnRvRXF1YWwodGVzdERhdGEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInNldFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3RvcmUgdmFsdWUgaW4gbWVtb3J5IGNhY2hlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5zZXQgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwic2V0LWtleVwiLCB0ZXN0RGF0YSwge1xuICAgICAgICBmZXRjaENhY2hlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChoYW5kbGVyLmdldENhY2hlU2l6ZSgpKS50b0JlKDEpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcInNldC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQ/LnZhbHVlKS50b0VxdWFsKHRlc3REYXRhKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXZhbGlkYXRlVGFnXCIsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgaHRtbDogXCI8aHRtbD50YWdnZWQ8L2h0bWw+XCIsXG4gICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaXQoXCJzaG91bGQgcmVtb3ZlIGVudHJpZXMgdGFnZ2VkIHdpdGggdGhlIHJldmFsaWRhdGVkIHRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcInRhZ2dlZC1rZXlcIiwgdGVzdERhdGEsIHtcbiAgICAgICAgZmV0Y2hDYWNoZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgdGFnczogW1wiY29sbGVjdGlvblwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJjb2xsZWN0aW9uXCIpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcInRhZ2dlZC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICBleHBlY3QoaGFuZGxlci5nZXRDYWNoZVNpemUoKSkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCByZW1vdmUgZW50cmllcyB3aXRoIHVucmVsYXRlZCB0YWdzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwidW5yZWxhdGVkLWtleVwiLCB0ZXN0RGF0YSwge1xuICAgICAgICBmZXRjaENhY2hlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICB0YWdzOiBbXCJvdGhlci10YWdcIl0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiY29sbGVjdGlvblwiKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJ1bnJlbGF0ZWQta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZU51bGwoKTtcbiAgICAgIGV4cGVjdChoYW5kbGVyLmdldENhY2hlU2l6ZSgpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IGFuIGFycmF5IG9mIHRhZ3MgYW5kIHJlbW92ZSBhbnkgbWF0Y2hpbmcgZW50cmllc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcImtleS1hXCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICAgIHRhZ3M6IFtcInRhZy1hXCJdLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcImtleS1iXCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICAgIHRhZ3M6IFtcInRhZy1iXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhbXCJ0YWctYVwiLCBcInRhZy1iXCJdKTtcblxuICAgICAgZXhwZWN0KGhhbmRsZXIuZ2V0Q2FjaGVTaXplKCkpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBiZSBhIG5vLW9wIHdoZW4gbm8gZW50cmllcyBtYXRjaCB0aGUgdGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwidW50YWdnZWQta2V5XCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJub25leGlzdGVudC10YWdcIiksXG4gICAgICApLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoaGFuZGxlci5nZXRDYWNoZVNpemUoKSkudG9CZSgxKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXNldFJlcXVlc3RDYWNoZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY2xlYXIgYWxsIGNhY2hlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+cmVzZXQgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwicmVzZXQta2V5XCIsIHRlc3REYXRhLCB7XG4gICAgICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGhhbmRsZXIuZ2V0Q2FjaGVTaXplKCkpLnRvQmUoMSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmVzZXRSZXF1ZXN0Q2FjaGUoKTtcblxuICAgICAgZXhwZWN0KGhhbmRsZXIuZ2V0Q2FjaGVTaXplKCkpLnRvQmUoMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -10,22 +10,55 @@ interface DynamoDBRevalidationConfig {
|
|
|
10
10
|
region: string;
|
|
11
11
|
buildId: string;
|
|
12
12
|
}
|
|
13
|
+
interface CloudFrontInvalidationConfig {
|
|
14
|
+
/**
|
|
15
|
+
* Name (not value) of the SSM Parameter holding the distribution ID.
|
|
16
|
+
*
|
|
17
|
+
* The distribution ID itself can't be passed as a plain env var: CDK
|
|
18
|
+
* constructs the Lambda/Fargate task before the distribution exists (the
|
|
19
|
+
* distribution's origin references the compute's function URL/ALB), so
|
|
20
|
+
* embedding the distribution's physical ID directly in the compute's
|
|
21
|
+
* environment or IAM policy would create a circular CloudFormation
|
|
22
|
+
* dependency. The parameter *name* is static and known at synth time, so
|
|
23
|
+
* it can be safely embedded; only its *value* depends on the distribution.
|
|
24
|
+
*/
|
|
25
|
+
distributionIdParameterName: string;
|
|
26
|
+
region: string;
|
|
27
|
+
}
|
|
13
28
|
export interface S3CacheHandlerOptions {
|
|
14
29
|
context: CacheHandlerContext;
|
|
15
30
|
s3Config?: Partial<S3CacheConfig>;
|
|
16
31
|
dynamoConfig?: Partial<DynamoDBRevalidationConfig>;
|
|
32
|
+
cloudFrontConfig?: Partial<CloudFrontInvalidationConfig>;
|
|
17
33
|
}
|
|
18
34
|
export declare class S3CacheHandler implements CacheHandler {
|
|
19
35
|
private s3Client;
|
|
20
36
|
private dynamoClient;
|
|
37
|
+
private cloudFrontClient;
|
|
38
|
+
private ssmClient;
|
|
21
39
|
private s3Config;
|
|
22
40
|
private dynamoConfig;
|
|
41
|
+
private cloudFrontConfig;
|
|
23
42
|
private debug;
|
|
43
|
+
private cachedDistributionId;
|
|
24
44
|
constructor(options: S3CacheHandlerOptions);
|
|
25
45
|
get(cacheKey: string, ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext): Promise<CacheHandlerValue | null>;
|
|
26
46
|
set(cacheKey: string, data: IncrementalCacheValue | null, ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext): Promise<void>;
|
|
27
47
|
revalidateTag(tag: string | string[]): Promise<void>;
|
|
28
48
|
private revalidateSingleTag;
|
|
49
|
+
/**
|
|
50
|
+
* Reverses `buildS3Key` to recover the request path CloudFront cached the
|
|
51
|
+
* response under. Fetch-cache entries (opaque hash keys, not page routes)
|
|
52
|
+
* translate to a path that won't match anything cached, which is harmless.
|
|
53
|
+
*/
|
|
54
|
+
private s3KeyToInvalidationPath;
|
|
55
|
+
private invalidateCloudFrontPaths;
|
|
56
|
+
/**
|
|
57
|
+
* Resolves the distribution's physical ID via SSM Parameter Store, caching
|
|
58
|
+
* it for the lifetime of this instance. See `CloudFrontInvalidationConfig`
|
|
59
|
+
* for why this indirection (rather than a plain env var) is necessary.
|
|
60
|
+
*/
|
|
61
|
+
private getDistributionId;
|
|
29
62
|
resetRequestCache(): Promise<void>;
|
|
30
63
|
private buildS3Key;
|
|
31
64
|
private storeDynamoDBTagMappings;
|