cdk-nextjs 0.7.4 → 0.7.6
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 +37 -37
- package/docs/adapter-runtime.md +1 -1
- package/docs/harness-coverage.md +9 -8
- package/lib/adapter/adapter.mjs +220 -149
- package/lib/adapter/aws-cache-store.d.ts +28 -4
- package/lib/adapter/aws-cache-store.js +52 -21
- package/lib/adapter/aws-cache-store.test.js +36 -1
- package/lib/adapter/build-outputs.js +23 -1
- package/lib/adapter/build-outputs.test.js +18 -1
- package/lib/adapter/cache-handler.d.ts +4 -3
- package/lib/adapter/cache-handler.js +1 -1
- package/lib/adapter/cache-handler.mjs +131 -61
- package/lib/adapter/cache-handler.test.js +31 -1
- package/lib/adapter/cache-utils.d.ts +68 -2
- package/lib/adapter/cache-utils.js +108 -2
- package/lib/adapter/cache-utils.test.js +45 -1
- package/lib/adapter/init-cache.d.ts +1 -1
- package/lib/adapter/init-cache.js +60 -37
- package/lib/adapter/init-cache.test.js +55 -2
- package/lib/adapter/local-file-cache-handler.d.ts +2 -2
- package/lib/adapter/local-file-cache-handler.js +4 -5
- package/lib/adapter/s3-cache-handler.d.ts +23 -7
- package/lib/adapter/s3-cache-handler.js +63 -27
- package/lib/adapter/s3-cache-handler.test.js +168 -1
- package/lib/adapter/use-cache-default-handler.mjs +32 -9
- package/lib/adapter/use-cache-remote-handler.js +2 -3
- package/lib/adapter/use-cache-remote-handler.mjs +81 -61
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.d.ts +0 -7
- package/lib/nextjs-build/nextjs-build.js +4 -11
- package/lib/nextjs-build/nextjs-build.test.js +4 -3
- 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.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/image.d.ts +19 -0
- package/lib/runtime/image.js +28 -2
- package/lib/runtime/image.test.js +43 -1
- package/lib/runtime/lambda.mjs +14 -3
- package/lib/runtime/server.mjs +14 -3
- package/lib/utils/deployment-build-id.d.ts +11 -0
- package/lib/utils/deployment-build-id.js +15 -0
- package/package.json +3 -3
- package/scripts/e2e-harness/README.md +1 -1
|
@@ -21,8 +21,10 @@ async function prerender(pathname, parentOutputId, body, fallback = {}) {
|
|
|
21
21
|
await (0, promises_1.writeFile)(filePath, body);
|
|
22
22
|
return { pathname, parentOutputId, fallback: { filePath, ...fallback } };
|
|
23
23
|
}
|
|
24
|
-
function context(prerenders, basePath = "") {
|
|
24
|
+
function context(prerenders, basePath = "", projectDir = dir) {
|
|
25
25
|
return {
|
|
26
|
+
nextVersion: "16.3.8",
|
|
27
|
+
projectDir,
|
|
26
28
|
config: { basePath },
|
|
27
29
|
outputs: {
|
|
28
30
|
pages: [{ id: "/blog/[slug]" }, { id: "/gone" }],
|
|
@@ -104,6 +106,45 @@ describe("writeInitCache", () => {
|
|
|
104
106
|
expect(fallback.value.kind).toBe("PAGES");
|
|
105
107
|
expect(fallback.value.html).toBe("<html>fallback</html>");
|
|
106
108
|
});
|
|
109
|
+
/**
|
|
110
|
+
* next >= 16.3.8 reads a page's cache under a key scoped by its source route,
|
|
111
|
+
* and writes the prerender to `<distDir>/server/<that key><ext>`. Seeding under
|
|
112
|
+
* the pathname made every seeded prerender a MISS.
|
|
113
|
+
*/
|
|
114
|
+
it("seeds under the route-cache key next 16.3.8 filed the prerender under", async () => {
|
|
115
|
+
const key = `route-cache/APP_PAGE/${"a".repeat(64)}/$/shop`;
|
|
116
|
+
const at = (ext) => (0, node_path_1.join)(dir, ".next", "server", `${key}${ext}`);
|
|
117
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(at("")), { recursive: true });
|
|
118
|
+
await (0, promises_1.writeFile)(at(".html"), "<html>shop</html>");
|
|
119
|
+
await (0, promises_1.writeFile)(at(".rsc"), "flight");
|
|
120
|
+
const ctx = context([
|
|
121
|
+
{
|
|
122
|
+
pathname: "/shop",
|
|
123
|
+
parentOutputId: "/shop",
|
|
124
|
+
fallback: { filePath: at(".html"), initialStatus: 200 },
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
pathname: "/shop.rsc",
|
|
128
|
+
parentOutputId: "/shop",
|
|
129
|
+
fallback: { filePath: at(".rsc") },
|
|
130
|
+
},
|
|
131
|
+
]);
|
|
132
|
+
await (0, init_cache_1.writeInitCache)(ctx, cacheDir);
|
|
133
|
+
expect((await readEntry(key)).value.html).toBe("<html>shop</html>");
|
|
134
|
+
expect((0, node_fs_1.existsSync)((0, node_path_1.join)(cacheDir, "shop.json"))).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
// Told by the module that derives the key, not the version: a canary's says
|
|
137
|
+
// nothing of what it contains.
|
|
138
|
+
it("fails the build when a next with route-cache keys files a prerender outside route-cache", async () => {
|
|
139
|
+
const scopedApp = (0, node_path_1.join)(dir, "scoped-app");
|
|
140
|
+
const routeCacheKeyModule = (0, node_path_1.join)(scopedApp, "node_modules/next/dist/server/lib/route-cache-key.js");
|
|
141
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(routeCacheKeyModule), { recursive: true });
|
|
142
|
+
await (0, promises_1.writeFile)(routeCacheKeyModule, "");
|
|
143
|
+
const unscopedApp = (0, node_path_1.join)(dir, "unscoped-app");
|
|
144
|
+
await (0, promises_1.mkdir)(unscopedApp);
|
|
145
|
+
await expect((0, init_cache_1.writeInitCache)(context([await prerender("/shop", "/shop", "<html>shop</html>")], "", scopedApp), cacheDir)).rejects.toThrow("/shop");
|
|
146
|
+
await expect((0, init_cache_1.writeInitCache)(context([await prerender("/shop", "/shop", "<html>shop</html>")], "", unscopedApp), cacheDir)).resolves.toBeUndefined();
|
|
147
|
+
});
|
|
107
148
|
it("skips a Pages Router route prerendered with a non-200 status", async () => {
|
|
108
149
|
// A build-time `notFound: true`: seeding it would be a 200 HIT with the 404
|
|
109
150
|
// page's HTML.
|
|
@@ -128,10 +169,22 @@ describe("writeInitCache", () => {
|
|
|
128
169
|
"_N_T_/shop": ["shop"],
|
|
129
170
|
});
|
|
130
171
|
});
|
|
172
|
+
it("seeds a route whose S3 key would pass 1024 bytes where the handler reads it", async () => {
|
|
173
|
+
const pathname = `/${Array(10).fill("p".repeat(100)).join("/")}`;
|
|
174
|
+
const filePath = (0, node_path_1.join)(dir, "long.out");
|
|
175
|
+
await (0, promises_1.writeFile)(filePath, "<rss/>");
|
|
176
|
+
const ctx = context([
|
|
177
|
+
{ pathname, parentOutputId: "/feed.xml", fallback: { filePath } },
|
|
178
|
+
]);
|
|
179
|
+
await (0, init_cache_1.writeInitCache)(ctx, cacheDir);
|
|
180
|
+
const name = (0, cache_utils_1.cacheObjectName)(pathname);
|
|
181
|
+
expect(name).toMatch(/^_long-key\/[0-9a-f]{64}\.long$/);
|
|
182
|
+
expect((0, node_fs_1.existsSync)((0, node_path_1.join)(cacheDir, name))).toBe(true);
|
|
183
|
+
});
|
|
131
184
|
it("writes no tag manifest when nothing is tagged", async () => {
|
|
132
185
|
const ctx = context([await prerender("/feed.xml", "/feed.xml", "<rss/>")]);
|
|
133
186
|
await (0, init_cache_1.writeInitCache)(ctx, cacheDir);
|
|
134
187
|
expect(await (0, promises_1.readdir)(cacheDir)).toEqual(["feed.xml.json"]);
|
|
135
188
|
});
|
|
136
189
|
});
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1jYWNoZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvaW5pdC1jYWNoZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXFDO0FBQ3JDLCtDQUE2RTtBQUM3RSxxQ0FBaUM7QUFDakMseUNBQWlDO0FBRWpDLCtDQUF3RDtBQUN4RCw2Q0FBOEM7QUFFOUMsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxRQUFnQixDQUFDO0FBRXJCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNwQixHQUFHLEdBQUcsTUFBTSxJQUFBLGtCQUFPLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNuQixNQUFNLElBQUEsYUFBRSxFQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsS0FBSyxVQUFVLFNBQVMsQ0FDdEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsSUFBWSxFQUNaLFdBQW9DLEVBQUU7SUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRSxNQUFNLElBQUEsb0JBQVMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxF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QztRQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2xCLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUEsMkJBQWMsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLE1BQU0sSUFBQSxrQkFBTyxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2R0ZW1wLCByZWFkRmlsZSwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRDb21wbGV0ZUNvbnRleHQgfSBmcm9tIFwiLi9idWlsZC1vdXRwdXRzXCI7XG5pbXBvcnQgeyBJTklUX0NBQ0hFX1RBR19NQU5JRkVTVCB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQgeyB3cml0ZUluaXRDYWNoZSB9IGZyb20gXCIuL2luaXQtY2FjaGVcIjtcblxubGV0IGRpcjogc3RyaW5nO1xubGV0IGNhY2hlRGlyOiBzdHJpbmc7XG5cbmJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiaW5pdC1jYWNoZS10ZXN0LVwiKSk7XG4gIGNhY2hlRGlyID0gam9pbihkaXIsIFwiY2FjaGVcIik7XG59KTtcblxuYWZ0ZXJFYWNoKGFzeW5jICgpID0+IHtcbiAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG59KTtcblxuLyoqIEEgcHJlcmVuZGVyIG91dHB1dCBhcyBgbmV4dCBidWlsZGAgaGFuZHMgaXQgdG8gYG9uQnVpbGRDb21wbGV0ZWAuICovXG5hc3luYyBmdW5jdGlvbiBwcmVyZW5kZXIoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIHBhcmVudE91dHB1dElkOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgZmFsbGJhY2s6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pIHtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGRpciwgYCR7cGF0aG5hbWUucmVwbGFjZSgvXFwvL2csIFwiX1wiKX0ub3V0YCk7XG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgYm9keSk7XG4gIHJldHVybiB7IHBhdGhuYW1lLCBwYXJlbnRPdXRwdXRJZCwgZmFsbGJhY2s6IHsgZmlsZVBhdGgsIC4uLmZhbGxiYWNrIH0gfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dChcbiAgcHJlcmVuZGVyczogdW5rbm93bltdLFxuICBiYXNlUGF0aCA9IFwiXCIsXG4pOiBQaWNrPEJ1aWxkQ29tcGxldGVDb250ZXh0LCBcImNvbmZpZ1wiIHwgXCJvdXRwdXRzXCI+IHtcbiAgcmV0dXJuIHtcbiAgICBjb25maWc6IHsgYmFzZVBhdGggfSxcbiAgICBvdXRwdXRzOiB7XG4gICAgICBwYWdlczogW3sgaWQ6IFwiL2Jsb2cvW3NsdWddXCIgfSwgeyBpZDogXCIvZ29uZVwiIH1dLFxuICAgICAgYXBwUGFnZXM6IFt7IGlkOiBcIi9zaG9wXCIgfSwgeyBpZDogXCIvaXNyL1tpZF1cIiB9XSxcbiAgICAgIGFwcFJvdXRlczogW3sgaWQ6IFwiL2ZlZWQueG1sXCIgfV0sXG4gICAgICBwYWdlc0FwaTogW10sXG4gICAgICBwcmVyZW5kZXJzLFxuICAgICAgc3RhdGljRmlsZXM6IFtdLFxuICAgIH0sXG4gIH0gYXMgdW5rbm93biBhcyBQaWNrPEJ1aWxkQ29tcGxldGVDb250ZXh0LCBcImNvbmZpZ1wiIHwgXCJvdXRwdXRzXCI+O1xufVxuXG5jb25zdCByZWFkRW50cnkgPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gIEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoam9pbihjYWNoZURpciwgYCR7a2V5fS5qc29uYCksIFwidXRmOFwiKSk7XG5cbmRlc2NyaWJlKFwid3JpdGVJbml0Q2FjaGVcIiwgKCkgPT4ge1xuICBpdChcInNlZWRzIGVhY2gga2luZCB3aXRoIHRoZSBzaGFwZSB0aGUgY2FjaGUgaGFuZGxlciByZWFkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gY29udGV4dChbXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvc2hvcFwiLCBcIi9zaG9wXCIsIFwiPGh0bWw+c2hvcDwvaHRtbD5cIiwge1xuICAgICAgICBpbml0aWFsU3RhdHVzOiAyMDAsXG4gICAgICAgIHBvc3Rwb25lZFN0YXRlOiB1bmRlZmluZWQsXG4gICAgICAgIGluaXRpYWxIZWFkZXJzOiB7XG4gICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgICAgICBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwic2hvcCxfTl9UXy9zaG9wXCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9zaG9wLnJzY1wiLCBcIi9zaG9wXCIsIFwiZmxpZ2h0XCIpLFxuICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL3Nob3Auc2VnbWVudHMvX3RyZWUuc2VnbWVudC5yc2NcIiwgXCIvc2hvcFwiLCBcInRyZWVcIiksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvZmVlZC54bWxcIiwgXCIvZmVlZC54bWxcIiwgXCI8cnNzLz5cIiwge1xuICAgICAgICBpbml0aWFsSGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL3htbFwiIH0sXG4gICAgICB9KSxcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9ibG9nL2hlbGxvXCIsIFwiL2Jsb2cvW3NsdWddXCIsIFwiPGh0bWw+aGVsbG88L2h0bWw+XCIsIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1czogMjAwLFxuICAgICAgICBpbml0aWFsSGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0sXG4gICAgICB9KSxcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcbiAgICAgICAgXCIvX25leHQvZGF0YS9idWlsZC9ibG9nL2hlbGxvLmpzb25cIixcbiAgICAgICAgXCIvYmxvZy9bc2x1Z11cIixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBwYWdlUHJvcHM6IHsgc2x1ZzogXCJoZWxsb1wiIH0gfSksXG4gICAgICApLFxuICAgIF0pO1xuICAgIGF3YWl0IHdyaXRlSW5pdENhY2hlKGN0eCwgY2FjaGVEaXIpO1xuXG4gICAgY29uc3Qgc2hvcCA9IGF3YWl0IHJlYWRFbnRyeShcInNob3BcIik7XG4gICAgZXhwZWN0KHNob3AudmFsdWUua2luZCkudG9CZShcIkFQUF9QQUdFXCIpO1xuICAgIGV4cGVjdChzaG9wLnZhbHVlLmh0bWwpLnRvQmUoXCI8aHRtbD5zaG9wPC9odG1sPlwiKTtcbiAgICBleHBlY3Qoc2hvcC52YWx1ZS5zdGF0dXMpLnRvQmUoMjAwKTtcbiAgICAvLyBQcmVzZW50YXRpb25hbCBoZWFkZXJzIHN0YXkgb3V0IG9mIGFuIEFQUF9QQUdFIGVudHJ5OyB0aGUgcmVuZGVyJ3Mgb3duXG4gICAgLy8gKGNhY2hlIHRhZ3MpIHN0YXkgaW4uXG4gICAgZXhwZWN0KHNob3AudmFsdWUuaGVhZGVycykudG9FcXVhbCh7XG4gICAgICBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwic2hvcCxfTl9UXy9zaG9wXCIsXG4gICAgfSk7XG4gICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHNob3AudmFsdWUucnNjRGF0YSkpLnRvQ29udGFpbihcbiAgICAgIEJ1ZmZlci5mcm9tKFwiZmxpZ2h0XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHNob3AudmFsdWUuc2VnbWVudERhdGEpKS50b0NvbnRhaW4oXCIvX3RyZWVcIik7XG5cbiAgICBjb25zdCBmZWVkID0gYXdhaXQgcmVhZEVudHJ5KFwiZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KGZlZWQudmFsdWUua2luZCkudG9CZShcIkFQUF9ST1VURVwiKTtcbiAgICBleHBlY3QoZmVlZC52YWx1ZS5zdGF0dXMpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoZmVlZC52YWx1ZS5oZWFkZXJzKS50b0VxdWFsKHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi94bWxcIiB9KTtcblxuICAgIGNvbnN0IGhlbGxvID0gYXdhaXQgcmVhZEVudHJ5KFwiYmxvZy9oZWxsb1wiKTtcbiAgICBleHBlY3QoaGVsbG8udmFsdWUua2luZCkudG9CZShcIlBBR0VTXCIpO1xuICAgIGV4cGVjdChoZWxsby52YWx1ZS5odG1sKS50b0JlKFwiPGh0bWw+aGVsbG88L2h0bWw+XCIpO1xuICAgIGV4cGVjdChoZWxsby52YWx1ZS5wYWdlRGF0YSkudG9FcXVhbCh7IHBhZ2VQcm9wczogeyBzbHVnOiBcImhlbGxvXCIgfSB9KTtcbiAgICAvLyBgRmlsZVN5c3RlbUNhY2hlYCBoYW5kcyBhIFBBR0VTIGVudHJ5IGJhY2sgd2l0aG91dCBoZWFkZXJzOyBzZWVkaW5nXG4gICAgLy8gYGluaXRpYWxIZWFkZXJzYCB3b3VsZCBsYWJlbCBpdHMgSlNPTiBkYXRhIHJlc3BvbnNlcyB0ZXh0L2h0bWwuXG4gICAgZXhwZWN0KGhlbGxvLnZhbHVlLmhlYWRlcnMpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJzZWVkcyBhIGR5bmFtaWMgcm91dGUncyB0ZW1wbGF0ZSB1bmRlciBpdHMgb3duIGtleSwgd2l0aCB0aGUgUFBSIHNoZWxsJ3MgcG9zdHBvbmVkIHN0YXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBXaXRoIFBQUiB0aGUgdGVtcGxhdGUgaXMgdGhlIHJvdXRlJ3MgZmFsbGJhY2sgc2hlbGwsIGxvb2tlZCB1cCB1bmRlciB0aGVcbiAgICAvLyBsaXRlcmFsIHRlbXBsYXRlIGtleTsgdGhlIFBhZ2VzIFJvdXRlciBsb29rcyB1cCBhbiBJU1IgZmFsbGJhY2sgdGhlIHNhbWVcbiAgICAvLyB3YXkuIFVuc2VlZGVkLCBldmVyeSBzdWNoIGxvb2t1cCBtaXNzZWQgYW5kIHRoZSBzaGVsbCByZW5kZXJlZCBwZXIgcmVxdWVzdC5cbiAgICBjb25zdCBjdHggPSBjb250ZXh0KFtcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9pc3IvW2lkXVwiLCBcIi9pc3IvW2lkXVwiLCBcIjxodG1sPnNoZWxsPC9odG1sPlwiLCB7XG4gICAgICAgIGluaXRpYWxTdGF0dXM6IDIwMCxcbiAgICAgICAgcG9zdHBvbmVkU3RhdGU6IFwicG9zdHBvbmVkLXN0YXRlXCIsXG4gICAgICB9KSxcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9pc3IvW2lkXS5yc2NcIiwgXCIvaXNyL1tpZF1cIiwgXCJmbGlnaHRcIiksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z11cIiwgXCI8aHRtbD5mYWxsYmFjazwvaHRtbD5cIiwge1xuICAgICAgICBpbml0aWFsU3RhdHVzOiAyMDAsXG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBhd2FpdCB3cml0ZUluaXRDYWNoZShjdHgsIGNhY2hlRGlyKTtcblxuICAgIGNvbnN0IHNoZWxsID0gYXdhaXQgcmVhZEVudHJ5KFwiaXNyL1tpZF1cIik7XG4gICAgZXhwZWN0KHNoZWxsLnZhbHVlLmtpbmQpLnRvQmUoXCJBUFBfUEFHRVwiKTtcbiAgICBleHBlY3Qoc2hlbGwudmFsdWUuaHRtbCkudG9CZShcIjxodG1sPnNoZWxsPC9odG1sPlwiKTtcbiAgICBleHBlY3Qoc2hlbGwudmFsdWUucG9zdHBvbmVkKS50b0JlKFwicG9zdHBvbmVkLXN0YXRlXCIpO1xuXG4gICAgY29uc3QgZmFsbGJhY2sgPSBhd2FpdCByZWFkRW50cnkoXCJibG9nL1tzbHVnXVwiKTtcbiAgICBleHBlY3QoZmFsbGJhY2sudmFsdWUua2luZCkudG9CZShcIlBBR0VTXCIpO1xuICAgIGV4cGVjdChmYWxsYmFjay52YWx1ZS5odG1sKS50b0JlKFwiPGh0bWw+ZmFsbGJhY2s8L2h0bWw+XCIpO1xuICB9KTtcblxuICBpdChcInNraXBzIGEgUGFnZXMgUm91dGVyIHJvdXRlIHByZXJlbmRlcmVkIHdpdGggYSBub24tMjAwIHN0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQSBidWlsZC10aW1lIGBub3RGb3VuZDogdHJ1ZWA6IHNlZWRpbmcgaXQgd291bGQgYmUgYSAyMDAgSElUIHdpdGggdGhlIDQwNFxuICAgIC8vIHBhZ2UncyBIVE1MLlxuICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoW1xuICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL2dvbmVcIiwgXCIvZ29uZVwiLCBcIjxodG1sPjQwNDwvaHRtbD5cIiwge1xuICAgICAgICBpbml0aWFsU3RhdHVzOiA0MDQsXG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBhd2FpdCB3cml0ZUluaXRDYWNoZShjdHgsIGNhY2hlRGlyKTtcbiAgICBleHBlY3QoZXhpc3RzU3luYyhqb2luKGNhY2hlRGlyLCBcImdvbmUuanNvblwiKSkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIm1hcHMgZWFjaCB0YWcgdG8gdGhlIGtleXMgY2FycnlpbmcgaXQsIHVuZGVyIGJhc2VQYXRoLWxlc3Mga2V5c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gY29udGV4dChcbiAgICAgIFtcbiAgICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL2RvY3Mvc2hvcFwiLCBcIi9zaG9wXCIsIFwiPGh0bWw+YTwvaHRtbD5cIiwge1xuICAgICAgICAgIGluaXRpYWxIZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJwcm9kdWN0cyxfTl9UXy9zaG9wXCIgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgXCIvZG9jc1wiLFxuICAgICk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG5cbiAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCByZWFkRmlsZShqb2luKGNhY2hlRGlyLCBJTklUX0NBQ0hFX1RBR19NQU5JRkVTVCksIFwidXRmOFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChtYW5pZmVzdCkudG9FcXVhbCh7XG4gICAgICBwcm9kdWN0czogW1wic2hvcFwiXSxcbiAgICAgIFwiX05fVF8vc2hvcFwiOiBbXCJzaG9wXCJdLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIndyaXRlcyBubyB0YWcgbWFuaWZlc3Qgd2hlbiBub3RoaW5nIGlzIHRhZ2dlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gY29udGV4dChbYXdhaXQgcHJlcmVuZGVyKFwiL2ZlZWQueG1sXCIsIFwiL2ZlZWQueG1sXCIsIFwiPHJzcy8+XCIpXSk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWRkaXIoY2FjaGVEaXIpKS50b0VxdWFsKFtcImZlZWQueG1sLmpzb25cIl0pO1xuICB9KTtcbn0pO1xuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1jYWNoZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvaW5pdC1jYWNoZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXFDO0FBQ3JDLCtDQU8wQjtBQUMxQixxQ0FBaUM7QUFDakMseUNBQTBDO0FBRTFDLCtDQUF5RTtBQUN6RSw2Q0FBOEM7QUFFOUMsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxRQUFnQixDQUFDO0FBRXJCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNwQixHQUFHLEdBQUcsTUFBTSxJQUFBLGtCQUFPLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUN4RCxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNuQixNQUFNLElBQUEsYUFBRSxFQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsS0FBSyxVQUFVLFNBQVMsQ0FDdEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsSUFBWSxFQUNaLFdBQW9DLEVBQUU7SUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBQSxnQkFBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRSxNQUFNLElBQUEsb0JBQVMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxF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QyxJQUFBLGdCQUFJLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxJQUFBLDJCQUFjLEVBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxNQUFNLElBQUEsa0JBQU8sRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICByZWFkZGlyLFxuICBybSxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkQ29tcGxldGVDb250ZXh0IH0gZnJvbSBcIi4vYnVpbGQtb3V0cHV0c1wiO1xuaW1wb3J0IHsgY2FjaGVPYmplY3ROYW1lLCBJTklUX0NBQ0hFX1RBR19NQU5JRkVTVCB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQgeyB3cml0ZUluaXRDYWNoZSB9IGZyb20gXCIuL2luaXQtY2FjaGVcIjtcblxubGV0IGRpcjogc3RyaW5nO1xubGV0IGNhY2hlRGlyOiBzdHJpbmc7XG5cbmJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIFwiaW5pdC1jYWNoZS10ZXN0LVwiKSk7XG4gIGNhY2hlRGlyID0gam9pbihkaXIsIFwiY2FjaGVcIik7XG59KTtcblxuYWZ0ZXJFYWNoKGFzeW5jICgpID0+IHtcbiAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG59KTtcblxuLyoqIEEgcHJlcmVuZGVyIG91dHB1dCBhcyBgbmV4dCBidWlsZGAgaGFuZHMgaXQgdG8gYG9uQnVpbGRDb21wbGV0ZWAuICovXG5hc3luYyBmdW5jdGlvbiBwcmVyZW5kZXIoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIHBhcmVudE91dHB1dElkOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgZmFsbGJhY2s6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pIHtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGRpciwgYCR7cGF0aG5hbWUucmVwbGFjZSgvXFwvL2csIFwiX1wiKX0ub3V0YCk7XG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgYm9keSk7XG4gIHJldHVybiB7IHBhdGhuYW1lLCBwYXJlbnRPdXRwdXRJZCwgZmFsbGJhY2s6IHsgZmlsZVBhdGgsIC4uLmZhbGxiYWNrIH0gfTtcbn1cblxudHlwZSBDb250ZXh0ID0gUGljazxcbiAgQnVpbGRDb21wbGV0ZUNvbnRleHQsXG4gIFwiY29uZmlnXCIgfCBcIm91dHB1dHNcIiB8IFwibmV4dFZlcnNpb25cIiB8IFwicHJvamVjdERpclwiXG4+O1xuXG5mdW5jdGlvbiBjb250ZXh0KFxuICBwcmVyZW5kZXJzOiB1bmtub3duW10sXG4gIGJhc2VQYXRoID0gXCJcIixcbiAgcHJvamVjdERpciA9IGRpcixcbik6IENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIG5leHRWZXJzaW9uOiBcIjE2LjMuOFwiLFxuICAgIHByb2plY3REaXIsXG4gICAgY29uZmlnOiB7IGJhc2VQYXRoIH0sXG4gICAgb3V0cHV0czoge1xuICAgICAgcGFnZXM6IFt7IGlkOiBcIi9ibG9nL1tzbHVnXVwiIH0sIHsgaWQ6IFwiL2dvbmVcIiB9XSxcbiAgICAgIGFwcFBhZ2VzOiBbeyBpZDogXCIvc2hvcFwiIH0sIHsgaWQ6IFwiL2lzci9baWRdXCIgfV0sXG4gICAgICBhcHBSb3V0ZXM6IFt7IGlkOiBcIi9mZWVkLnhtbFwiIH1dLFxuICAgICAgcGFnZXNBcGk6IFtdLFxuICAgICAgcHJlcmVuZGVycyxcbiAgICAgIHN0YXRpY0ZpbGVzOiBbXSxcbiAgICB9LFxuICB9IGFzIHVua25vd24gYXMgQ29udGV4dDtcbn1cblxuY29uc3QgcmVhZEVudHJ5ID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKGpvaW4oY2FjaGVEaXIsIGAke2tleX0uanNvbmApLCBcInV0ZjhcIikpO1xuXG5kZXNjcmliZShcIndyaXRlSW5pdENhY2hlXCIsICgpID0+IHtcbiAgaXQoXCJzZWVkcyBlYWNoIGtpbmQgd2l0aCB0aGUgc2hhcGUgdGhlIGNhY2hlIGhhbmRsZXIgcmVhZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoW1xuICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL3Nob3BcIiwgXCIvc2hvcFwiLCBcIjxodG1sPnNob3A8L2h0bWw+XCIsIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1czogMjAwLFxuICAgICAgICBwb3N0cG9uZWRTdGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICBpbml0aWFsSGVhZGVyczoge1xuICAgICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInNob3AsX05fVF8vc2hvcFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvc2hvcC5yc2NcIiwgXCIvc2hvcFwiLCBcImZsaWdodFwiKSxcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9zaG9wLnNlZ21lbnRzL190cmVlLnNlZ21lbnQucnNjXCIsIFwiL3Nob3BcIiwgXCJ0cmVlXCIpLFxuICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL2ZlZWQueG1sXCIsIFwiL2ZlZWQueG1sXCIsIFwiPHJzcy8+XCIsIHtcbiAgICAgICAgaW5pdGlhbEhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi94bWxcIiB9LFxuICAgICAgfSksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvYmxvZy9oZWxsb1wiLCBcIi9ibG9nL1tzbHVnXVwiLCBcIjxodG1sPmhlbGxvPC9odG1sPlwiLCB7XG4gICAgICAgIGluaXRpYWxTdGF0dXM6IDIwMCxcbiAgICAgICAgaW5pdGlhbEhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9LFxuICAgICAgfSksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXG4gICAgICAgIFwiL19uZXh0L2RhdGEvYnVpbGQvYmxvZy9oZWxsby5qc29uXCIsXG4gICAgICAgIFwiL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgcGFnZVByb3BzOiB7IHNsdWc6IFwiaGVsbG9cIiB9IH0pLFxuICAgICAgKSxcbiAgICBdKTtcbiAgICBhd2FpdCB3cml0ZUluaXRDYWNoZShjdHgsIGNhY2hlRGlyKTtcblxuICAgIGNvbnN0IHNob3AgPSBhd2FpdCByZWFkRW50cnkoXCJzaG9wXCIpO1xuICAgIGV4cGVjdChzaG9wLnZhbHVlLmtpbmQpLnRvQmUoXCJBUFBfUEFHRVwiKTtcbiAgICBleHBlY3Qoc2hvcC52YWx1ZS5odG1sKS50b0JlKFwiPGh0bWw+c2hvcDwvaHRtbD5cIik7XG4gICAgZXhwZWN0KHNob3AudmFsdWUuc3RhdHVzKS50b0JlKDIwMCk7XG4gICAgLy8gUHJlc2VudGF0aW9uYWwgaGVhZGVycyBzdGF5IG91dCBvZiBhbiBBUFBfUEFHRSBlbnRyeTsgdGhlIHJlbmRlcidzIG93blxuICAgIC8vIChjYWNoZSB0YWdzKSBzdGF5IGluLlxuICAgIGV4cGVjdChzaG9wLnZhbHVlLmhlYWRlcnMpLnRvRXF1YWwoe1xuICAgICAgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInNob3AsX05fVF8vc2hvcFwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShzaG9wLnZhbHVlLnJzY0RhdGEpKS50b0NvbnRhaW4oXG4gICAgICBCdWZmZXIuZnJvbShcImZsaWdodFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShzaG9wLnZhbHVlLnNlZ21lbnREYXRhKSkudG9Db250YWluKFwiL190cmVlXCIpO1xuXG4gICAgY29uc3QgZmVlZCA9IGF3YWl0IHJlYWRFbnRyeShcImZlZWQueG1sXCIpO1xuICAgIGV4cGVjdChmZWVkLnZhbHVlLmtpbmQpLnRvQmUoXCJBUFBfUk9VVEVcIik7XG4gICAgZXhwZWN0KGZlZWQudmFsdWUuc3RhdHVzKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KGZlZWQudmFsdWUuaGVhZGVycykudG9FcXVhbCh7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24veG1sXCIgfSk7XG5cbiAgICBjb25zdCBoZWxsbyA9IGF3YWl0IHJlYWRFbnRyeShcImJsb2cvaGVsbG9cIik7XG4gICAgZXhwZWN0KGhlbGxvLnZhbHVlLmtpbmQpLnRvQmUoXCJQQUdFU1wiKTtcbiAgICBleHBlY3QoaGVsbG8udmFsdWUuaHRtbCkudG9CZShcIjxodG1sPmhlbGxvPC9odG1sPlwiKTtcbiAgICBleHBlY3QoaGVsbG8udmFsdWUucGFnZURhdGEpLnRvRXF1YWwoeyBwYWdlUHJvcHM6IHsgc2x1ZzogXCJoZWxsb1wiIH0gfSk7XG4gICAgLy8gYEZpbGVTeXN0ZW1DYWNoZWAgaGFuZHMgYSBQQUdFUyBlbnRyeSBiYWNrIHdpdGhvdXQgaGVhZGVyczsgc2VlZGluZ1xuICAgIC8vIGBpbml0aWFsSGVhZGVyc2Agd291bGQgbGFiZWwgaXRzIEpTT04gZGF0YSByZXNwb25zZXMgdGV4dC9odG1sLlxuICAgIGV4cGVjdChoZWxsby52YWx1ZS5oZWFkZXJzKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic2VlZHMgYSBkeW5hbWljIHJvdXRlJ3MgdGVtcGxhdGUgdW5kZXIgaXRzIG93biBrZXksIHdpdGggdGhlIFBQUiBzaGVsbCdzIHBvc3Rwb25lZCBzdGF0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gV2l0aCBQUFIgdGhlIHRlbXBsYXRlIGlzIHRoZSByb3V0ZSdzIGZhbGxiYWNrIHNoZWxsLCBsb29rZWQgdXAgdW5kZXIgdGhlXG4gICAgLy8gbGl0ZXJhbCB0ZW1wbGF0ZSBrZXk7IHRoZSBQYWdlcyBSb3V0ZXIgbG9va3MgdXAgYW4gSVNSIGZhbGxiYWNrIHRoZSBzYW1lXG4gICAgLy8gd2F5LiBVbnNlZWRlZCwgZXZlcnkgc3VjaCBsb29rdXAgbWlzc2VkIGFuZCB0aGUgc2hlbGwgcmVuZGVyZWQgcGVyIHJlcXVlc3QuXG4gICAgY29uc3QgY3R4ID0gY29udGV4dChbXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvaXNyL1tpZF1cIiwgXCIvaXNyL1tpZF1cIiwgXCI8aHRtbD5zaGVsbDwvaHRtbD5cIiwge1xuICAgICAgICBpbml0aWFsU3RhdHVzOiAyMDAsXG4gICAgICAgIHBvc3Rwb25lZFN0YXRlOiBcInBvc3Rwb25lZC1zdGF0ZVwiLFxuICAgICAgfSksXG4gICAgICBhd2FpdCBwcmVyZW5kZXIoXCIvaXNyL1tpZF0ucnNjXCIsIFwiL2lzci9baWRdXCIsIFwiZmxpZ2h0XCIpLFxuICAgICAgYXdhaXQgcHJlcmVuZGVyKFwiL2Jsb2cvW3NsdWddXCIsIFwiL2Jsb2cvW3NsdWddXCIsIFwiPGh0bWw+ZmFsbGJhY2s8L2h0bWw+XCIsIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1czogMjAwLFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG5cbiAgICBjb25zdCBzaGVsbCA9IGF3YWl0IHJlYWRFbnRyeShcImlzci9baWRdXCIpO1xuICAgIGV4cGVjdChzaGVsbC52YWx1ZS5raW5kKS50b0JlKFwiQVBQX1BBR0VcIik7XG4gICAgZXhwZWN0KHNoZWxsLnZhbHVlLmh0bWwpLnRvQmUoXCI8aHRtbD5zaGVsbDwvaHRtbD5cIik7XG4gICAgZXhwZWN0KHNoZWxsLnZhbHVlLnBvc3Rwb25lZCkudG9CZShcInBvc3Rwb25lZC1zdGF0ZVwiKTtcblxuICAgIGNvbnN0IGZhbGxiYWNrID0gYXdhaXQgcmVhZEVudHJ5KFwiYmxvZy9bc2x1Z11cIik7XG4gICAgZXhwZWN0KGZhbGxiYWNrLnZhbHVlLmtpbmQpLnRvQmUoXCJQQUdFU1wiKTtcbiAgICBleHBlY3QoZmFsbGJhY2sudmFsdWUuaHRtbCkudG9CZShcIjxodG1sPmZhbGxiYWNrPC9odG1sPlwiKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIG5leHQgPj0gMTYuMy44IHJlYWRzIGEgcGFnZSdzIGNhY2hlIHVuZGVyIGEga2V5IHNjb3BlZCBieSBpdHMgc291cmNlIHJvdXRlLFxuICAgKiBhbmQgd3JpdGVzIHRoZSBwcmVyZW5kZXIgdG8gYDxkaXN0RGlyPi9zZXJ2ZXIvPHRoYXQga2V5PjxleHQ+YC4gU2VlZGluZyB1bmRlclxuICAgKiB0aGUgcGF0aG5hbWUgbWFkZSBldmVyeSBzZWVkZWQgcHJlcmVuZGVyIGEgTUlTUy5cbiAgICovXG4gIGl0KFwic2VlZHMgdW5kZXIgdGhlIHJvdXRlLWNhY2hlIGtleSBuZXh0IDE2LjMuOCBmaWxlZCB0aGUgcHJlcmVuZGVyIHVuZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kL3Nob3BgO1xuICAgIGNvbnN0IGF0ID0gKGV4dDogc3RyaW5nKSA9PiBqb2luKGRpciwgXCIubmV4dFwiLCBcInNlcnZlclwiLCBgJHtrZXl9JHtleHR9YCk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShhdChcIlwiKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShhdChcIi5odG1sXCIpLCBcIjxodG1sPnNob3A8L2h0bWw+XCIpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShhdChcIi5yc2NcIiksIFwiZmxpZ2h0XCIpO1xuICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoW1xuICAgICAge1xuICAgICAgICBwYXRobmFtZTogXCIvc2hvcFwiLFxuICAgICAgICBwYXJlbnRPdXRwdXRJZDogXCIvc2hvcFwiLFxuICAgICAgICBmYWxsYmFjazogeyBmaWxlUGF0aDogYXQoXCIuaHRtbFwiKSwgaW5pdGlhbFN0YXR1czogMjAwIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRobmFtZTogXCIvc2hvcC5yc2NcIixcbiAgICAgICAgcGFyZW50T3V0cHV0SWQ6IFwiL3Nob3BcIixcbiAgICAgICAgZmFsbGJhY2s6IHsgZmlsZVBhdGg6IGF0KFwiLnJzY1wiKSB9LFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGF3YWl0IHdyaXRlSW5pdENhY2hlKGN0eCwgY2FjaGVEaXIpO1xuXG4gICAgZXhwZWN0KChhd2FpdCByZWFkRW50cnkoa2V5KSkudmFsdWUuaHRtbCkudG9CZShcIjxodG1sPnNob3A8L2h0bWw+XCIpO1xuICAgIGV4cGVjdChleGlzdHNTeW5jKGpvaW4oY2FjaGVEaXIsIFwic2hvcC5qc29uXCIpKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIC8vIFRvbGQgYnkgdGhlIG1vZHVsZSB0aGF0IGRlcml2ZXMgdGhlIGtleSwgbm90IHRoZSB2ZXJzaW9uOiBhIGNhbmFyeSdzIHNheXNcbiAgLy8gbm90aGluZyBvZiB3aGF0IGl0IGNvbnRhaW5zLlxuICBpdChcImZhaWxzIHRoZSBidWlsZCB3aGVuIGEgbmV4dCB3aXRoIHJvdXRlLWNhY2hlIGtleXMgZmlsZXMgYSBwcmVyZW5kZXIgb3V0c2lkZSByb3V0ZS1jYWNoZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2NvcGVkQXBwID0gam9pbihkaXIsIFwic2NvcGVkLWFwcFwiKTtcbiAgICBjb25zdCByb3V0ZUNhY2hlS2V5TW9kdWxlID0gam9pbihcbiAgICAgIHNjb3BlZEFwcCxcbiAgICAgIFwibm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvbGliL3JvdXRlLWNhY2hlLWtleS5qc1wiLFxuICAgICk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShyb3V0ZUNhY2hlS2V5TW9kdWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHJvdXRlQ2FjaGVLZXlNb2R1bGUsIFwiXCIpO1xuICAgIGNvbnN0IHVuc2NvcGVkQXBwID0gam9pbihkaXIsIFwidW5zY29wZWQtYXBwXCIpO1xuICAgIGF3YWl0IG1rZGlyKHVuc2NvcGVkQXBwKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHdyaXRlSW5pdENhY2hlKFxuICAgICAgICBjb250ZXh0KFxuICAgICAgICAgIFthd2FpdCBwcmVyZW5kZXIoXCIvc2hvcFwiLCBcIi9zaG9wXCIsIFwiPGh0bWw+c2hvcDwvaHRtbD5cIildLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgc2NvcGVkQXBwLFxuICAgICAgICApLFxuICAgICAgICBjYWNoZURpcixcbiAgICAgICksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coXCIvc2hvcFwiKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHdyaXRlSW5pdENhY2hlKFxuICAgICAgICBjb250ZXh0KFxuICAgICAgICAgIFthd2FpdCBwcmVyZW5kZXIoXCIvc2hvcFwiLCBcIi9zaG9wXCIsIFwiPGh0bWw+c2hvcDwvaHRtbD5cIildLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgdW5zY29wZWRBcHAsXG4gICAgICAgICksXG4gICAgICAgIGNhY2hlRGlyLFxuICAgICAgKSxcbiAgICApLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJza2lwcyBhIFBhZ2VzIFJvdXRlciByb3V0ZSBwcmVyZW5kZXJlZCB3aXRoIGEgbm9uLTIwMCBzdGF0dXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEEgYnVpbGQtdGltZSBgbm90Rm91bmQ6IHRydWVgOiBzZWVkaW5nIGl0IHdvdWxkIGJlIGEgMjAwIEhJVCB3aXRoIHRoZSA0MDRcbiAgICAvLyBwYWdlJ3MgSFRNTC5cbiAgICBjb25zdCBjdHggPSBjb250ZXh0KFtcbiAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9nb25lXCIsIFwiL2dvbmVcIiwgXCI8aHRtbD40MDQ8L2h0bWw+XCIsIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1czogNDA0LFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG4gICAgZXhwZWN0KGV4aXN0c1N5bmMoam9pbihjYWNoZURpciwgXCJnb25lLmpzb25cIikpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJtYXBzIGVhY2ggdGFnIHRvIHRoZSBrZXlzIGNhcnJ5aW5nIGl0LCB1bmRlciBiYXNlUGF0aC1sZXNzIGtleXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoXG4gICAgICBbXG4gICAgICAgIGF3YWl0IHByZXJlbmRlcihcIi9kb2NzL3Nob3BcIiwgXCIvc2hvcFwiLCBcIjxodG1sPmE8L2h0bWw+XCIsIHtcbiAgICAgICAgICBpbml0aWFsSGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwicHJvZHVjdHMsX05fVF8vc2hvcFwiIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIFwiL2RvY3NcIixcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlSW5pdENhY2hlKGN0eCwgY2FjaGVEaXIpO1xuXG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgcmVhZEZpbGUoam9pbihjYWNoZURpciwgSU5JVF9DQUNIRV9UQUdfTUFOSUZFU1QpLCBcInV0ZjhcIiksXG4gICAgKTtcbiAgICBleHBlY3QobWFuaWZlc3QpLnRvRXF1YWwoe1xuICAgICAgcHJvZHVjdHM6IFtcInNob3BcIl0sXG4gICAgICBcIl9OX1RfL3Nob3BcIjogW1wic2hvcFwiXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJzZWVkcyBhIHJvdXRlIHdob3NlIFMzIGtleSB3b3VsZCBwYXNzIDEwMjQgYnl0ZXMgd2hlcmUgdGhlIGhhbmRsZXIgcmVhZHMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGhuYW1lID0gYC8ke0FycmF5KDEwKS5maWxsKFwicFwiLnJlcGVhdCgxMDApKS5qb2luKFwiL1wiKX1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihkaXIsIFwibG9uZy5vdXRcIik7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBcIjxyc3MvPlwiKTtcbiAgICBjb25zdCBjdHggPSBjb250ZXh0KFtcbiAgICAgIHsgcGF0aG5hbWUsIHBhcmVudE91dHB1dElkOiBcIi9mZWVkLnhtbFwiLCBmYWxsYmFjazogeyBmaWxlUGF0aCB9IH0sXG4gICAgXSk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG5cbiAgICBjb25zdCBuYW1lID0gY2FjaGVPYmplY3ROYW1lKHBhdGhuYW1lKTtcbiAgICBleHBlY3QobmFtZSkudG9NYXRjaCgvXl9sb25nLWtleVxcL1swLTlhLWZdezY0fVxcLmxvbmckLyk7XG4gICAgZXhwZWN0KGV4aXN0c1N5bmMoam9pbihjYWNoZURpciwgbmFtZSkpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIndyaXRlcyBubyB0YWcgbWFuaWZlc3Qgd2hlbiBub3RoaW5nIGlzIHRhZ2dlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gY29udGV4dChbYXdhaXQgcHJlcmVuZGVyKFwiL2ZlZWQueG1sXCIsIFwiL2ZlZWQueG1sXCIsIFwiPHJzcy8+XCIpXSk7XG4gICAgYXdhaXQgd3JpdGVJbml0Q2FjaGUoY3R4LCBjYWNoZURpcik7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWRkaXIoY2FjaGVEaXIpKS50b0VxdWFsKFtcImZlZWQueG1sLmpzb25cIl0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -10,8 +10,8 @@ export declare class LocalFileCacheHandler {
|
|
|
10
10
|
private entries;
|
|
11
11
|
constructor();
|
|
12
12
|
/**
|
|
13
|
-
* Build file path for cache entry
|
|
14
|
-
*
|
|
13
|
+
* Build file path for cache entry: {@link cacheObjectName}, the name the
|
|
14
|
+
* runtime reads it back under (BucketDeployment will add buildId prefix)
|
|
15
15
|
*/
|
|
16
16
|
private buildFilePath;
|
|
17
17
|
/**
|
|
@@ -36,12 +36,11 @@ class LocalFileCacheHandler {
|
|
|
36
36
|
debug(`Created local cache directory: ${this.cacheDir}`);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Build file path for cache entry
|
|
40
|
-
*
|
|
39
|
+
* Build file path for cache entry: {@link cacheObjectName}, the name the
|
|
40
|
+
* runtime reads it back under (BucketDeployment will add buildId prefix)
|
|
41
41
|
*/
|
|
42
42
|
buildFilePath(cacheKey) {
|
|
43
|
-
|
|
44
|
-
return filePath;
|
|
43
|
+
return (0, path_1.join)(this.cacheDir, (0, cache_utils_1.cacheObjectName)(cacheKey));
|
|
45
44
|
}
|
|
46
45
|
/**
|
|
47
46
|
* Read back an entry this build already wrote.
|
|
@@ -135,4 +134,4 @@ class LocalFileCacheHandler {
|
|
|
135
134
|
}
|
|
136
135
|
}
|
|
137
136
|
exports.LocalFileCacheHandler = LocalFileCacheHandler;
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvbG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7RUFNRTtBQUNGLHNEQUFzRDtBQUN0RCwyQkFBd0U7QUFDeEUsK0JBQXFDO0FBQ3JDLGtEQUE2QjtBQUc3QiwrQ0FBcUU7QUFFckUsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMscUNBQXFDLENBQUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFhLHFCQUFxQjtJQUN4QixRQUFRLENBQVM7SUFDekIsbUVBQW1FO0lBQzNELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUV2RDtRQUNFLG9FQUFvRTtRQUNwRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtZQUNuRCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7WUFDdkMsQ0FBQyxDQUFDLElBQUEsV0FBSSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUUxRCw0RkFBNEY7UUFDNUYsSUFBQSxjQUFTLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxRQUFnQjtRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztRQUN6RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7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QUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBL0hELHNEQStIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIExvY2FsIEZpbGUgQ2FjaGUgSGFuZGxlciBmb3IgTmV4dC5qcyBidWlsZC10aW1lIHByZS1jYWNoaW5nXG4gIFxuICBXcml0ZXMgY2FjaGUgZW50cmllcyB0byAubmV4dC9jZGstbmV4dGpzLWNhY2hlLWhhbmRsZXIve2NhY2hlS2V5fS5qc29uXG4gIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBzbyB0aGV5IGNhbiBiZSBkZXBsb3llZCB0byBTMyB2aWEgQnVja2V0RGVwbG95bWVudC5cbiAgQnVja2V0RGVwbG95bWVudCB3aWxsIGFkZCB0aGUgYnVpbGRJZCBwcmVmaXggd2hlbiB1cGxvYWRpbmcgdG8gUzMuXG4qL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBDYWNoZUhhbmRsZXJWYWx1ZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHR5cGUgeyBJbmNyZW1lbnRhbENhY2hlVmFsdWUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgcGFyc2VDYWNoZVZhbHVlLCBzZXJpYWxpemVDYWNoZVZhbHVlIH0gZnJvbSBcIi4vY2FjaGUtdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6Y2FjaGUtaGFuZGxlcjpsb2NhbC1maWxlXCIpO1xuXG4vKipcbiAqIExvY2FsIGZpbGUgY2FjaGUgaGFuZGxlciB0aGF0IHdyaXRlcyBjYWNoZSBlbnRyaWVzIGR1cmluZyBOZXh0LmpzIGJ1aWxkXG4gKiB0byBiZSBkZXBsb3llZCB0byBTMyBsYXRlciB2aWEgQnVja2V0RGVwbG95bWVudFxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxGaWxlQ2FjaGVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBjYWNoZURpcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGlzIHByb2Nlc3MgaGFzIHdyaXR0ZW4gb3IgcmVhZCBiYWNrOyBzZWUge0BsaW5rIGdldH0uICovXG4gIHByaXZhdGUgZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUhhbmRsZXJWYWx1ZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWFkIGNhY2hlIGRpcmVjdG9yeSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBieSBOZXh0anNCdWlsZFxuICAgIC8vIEZhbGxzIGJhY2sgdG8gZGVmYXVsdCBsb2NhdGlvbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuY2FjaGVEaXIgPSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0lOSVRfQ0FDSEVfRElSXG4gICAgICA/IHByb2Nlc3MuZW52LkNES19ORVhUSlNfSU5JVF9DQUNIRV9ESVJcbiAgICAgIDogam9pbihwcm9jZXNzLmN3ZCgpLCBcIi5uZXh0XCIsIFwiY2RrLW5leHRqcy1pbml0LWNhY2hlXCIpO1xuXG4gICAgLy8gQ3JlYXRlIGZyZXNoIGNhY2hlIGRpcmVjdG9yeTsgY2FjaGUgZGlyZWN0b3J5IGlzIGNsZWFuZWQgYmVmb3JlIGVhY2ggYnVpbGQgaW4gTmV4dGpzQnVpbGRcbiAgICBta2RpclN5bmModGhpcy5jYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZGVidWcoYENyZWF0ZWQgbG9jYWwgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgZmlsZSBwYXRoIGZvciBjYWNoZSBlbnRyeVxuICAgKiBTdHJ1Y3R1cmU6IHtjYWNoZUtleX0uanNvbiAoQnVja2V0RGVwbG95bWVudCB3aWxsIGFkZCBidWlsZElkIHByZWZpeClcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGaWxlUGF0aChjYWNoZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4odGhpcy5jYWNoZURpciwgYCR7Y2FjaGVLZXl9Lmpzb25gKTtcbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBiYWNrIGFuIGVudHJ5IHRoaXMgYnVpbGQgYWxyZWFkeSB3cm90ZS5cbiAgICpcbiAgICogUmVxdWlyZWQsIG5vdCBhbiBvcHRpbWl6YXRpb24uIFVuZGVyIGBjYWNoZUNvbXBvbmVudHNgIGEgcHJlcmVuZGVyIHJ1bnNcbiAgICogdHdpY2U6IGEgZmlyc3QgcGFzcyB0aGF0IGZpbGxzIGNhY2hlcyAoZXZlcnkgYGZldGNoYCBtaXNzZXMsIHJ1bnMgZm9yIHJlYWwsXG4gICAqIGFuZCBpcyBgc2V0YCksIHRoZW4gYSBmaW5hbCBwYXNzIGluIHdoaWNoIGV2ZXJ5IGF3YWl0IG11c3Qgc2V0dGxlIGluIGFcbiAgICogbWljcm90YXNrIOKAlCBhbnl0aGluZyBzdGlsbCBwZW5kaW5nIGlzIGJ5IGRlZmluaXRpb24gXCJydW50aW1lIGRhdGFcIiwgYW5kXG4gICAqIE5leHQuanMgYWJvcnRzIHRoZSBwYWdlIHdpdGggYFJvdXRlIFwiL1wiOiBOZXh0LmpzIGVuY291bnRlcmVkIHVuY2FjaGVkIG9yXG4gICAqIHJ1bnRpbWUgZGF0YSBkdXJpbmcgcHJlcmVuZGVyaW5nYC4gVGhlIGZpbmFsIHBhc3Mgb25seSBzZXR0bGVzIGltbWVkaWF0ZWx5XG4gICAqIGlmIGBnZXRgIHJldHVybnMgd2hhdCB0aGUgZmlyc3QgcGFzcyBgc2V0YCwgc28gYSB3cml0ZS1vbmx5IGJ1aWxkLXRpbWVcbiAgICogaGFuZGxlciBtYWtlcyBgZmV0Y2godXJsLCB7IGNhY2hlOiAnZm9yY2UtY2FjaGUnIH0pYCB1bnByZXJlbmRlcmFibGUgYW5kXG4gICAqIGZhaWxzIHRoZSBidWlsZC4gTmV4dC5qcydzIG93biBgRmlsZVN5c3RlbUNhY2hlYCByZWFkcyBiYWNrIGZvciBleGFjdGx5XG4gICAqIHRoaXMgcmVhc29uLiBNZWFzdXJlZCBhZ2FpbnN0IG5leHQuanMnc1xuICAgKiBgdGVzdC9lMmUvYXBwLWRpci9yZXN1bWUtZGF0YS1jYWNoZWAsIHdoaWNoIGlzIHVuYnVpbGRhYmxlIHdpdGhvdXQgaXQuXG4gICAqXG4gICAqIEVudHJpZXMgYXJlIHJlYWQgdGhyb3VnaCBhIHByb2Nlc3MtbG9jYWwgbWFwIGJlY2F1c2UgdGhlIHR3byBwYXNzZXMgYXJlIHRoZVxuICAgKiBzYW1lIHByb2Nlc3MsIGFuZCBiZWNhdXNlIHRoZSBkZXNlcmlhbGl6ZWQgdmFsdWUgaXMgd2hhdCBOZXh0LmpzIGNvbXBhcmVzXG4gICAqIGJ5IHJlZmVyZW5jZSB3aGVuIGRlZHVwaW5nIHdpdGhpbiBhIHJlbmRlci5cbiAgICovXG4gIGFzeW5jIGdldChjYWNoZUtleTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUhhbmRsZXJWYWx1ZSB8IG51bGw+IHtcbiAgICBjb25zdCBtZW1vaXplZCA9IHRoaXMuZW50cmllcy5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChtZW1vaXplZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuYnVpbGRGaWxlUGF0aChjYWNoZUtleSk7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gYHRhZ3NgIGlzIHN0b3JlZCBhbG9uZ3NpZGUsIG5vdCBpbnNpZGUsIHRoZSBgQ2FjaGVIYW5kbGVyVmFsdWVgOyBpdCBpc1xuICAgICAgLy8gb25seSBjb25zdWx0ZWQgZm9yIHRhZyByZXZhbGlkYXRpb24sIHdoaWNoIGNhbm5vdCBoYXBwZW4gbWlkLWJ1aWxkLlxuICAgICAgY29uc3Qgc3RvcmVkID0gcGFyc2VDYWNoZVZhbHVlKHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICBjb25zdCBlbnRyeTogQ2FjaGVIYW5kbGVyVmFsdWUgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogc3RvcmVkLmxhc3RNb2RpZmllZCxcbiAgICAgICAgdmFsdWU6IHN0b3JlZC52YWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmVudHJpZXMuc2V0KGNhY2hlS2V5LCBlbnRyeSk7XG4gICAgICBkZWJ1ZyhgTE9DQUwgRklMRSBDQUNIRSBISVQ6ICR7Y2FjaGVLZXl9YCk7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgbG9jYWwgY2FjaGUgZmlsZSBmb3IgJHtjYWNoZUtleX06YCwgZXJyb3IpO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBhIG1pc3Mgb25seSBjb3N0cyB0aGUgYnVpbGQgYSByZS1mZXRjaC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBjYWNoZSBlbnRyeSB0byBsb2NhbCBmaWxlXG4gICAqL1xuICBhc3luYyBzZXQoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBkYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgfCBudWxsLFxuICAgIHRhZ3M/OiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5idWlsZEZpbGVQYXRoKGNhY2hlS2V5KTtcblxuICAgICAgLy8gQ3JlYXRlIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGZpbGVQYXRoKTtcbiAgICAgIGlmICghZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgQ2FjaGVIYW5kbGVyVmFsdWUgc3RydWN0dXJlIHdpdGggdGFnc1xuICAgICAgY29uc3QgY2FjaGVIYW5kbGVyVmFsdWU6IENhY2hlSGFuZGxlclZhbHVlID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgfTtcblxuICAgICAgLy8gU3RvcmUgd2l0aCB0YWdzIGZvciByZXZhbGlkYXRpb24gY2hlY2tpbmdcbiAgICAgIGNvbnN0IHN0b3JhZ2VWYWx1ZSA9IHtcbiAgICAgICAgLi4uY2FjaGVIYW5kbGVyVmFsdWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgICB9O1xuXG4gICAgICAvLyBTZXJpYWxpemUgdG8gSlNPTiB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIE1hcCBhbmQgQnVmZmVyXG4gICAgICBjb25zdCBqc29uU3RyaW5nID0gc2VyaWFsaXplQ2FjaGVWYWx1ZShzdG9yYWdlVmFsdWUpO1xuXG4gICAgICAvLyBXcml0ZSB0byBmaWxlXG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBqc29uU3RyaW5nLCBcInV0Zi04XCIpO1xuICAgICAgLy8gU2VydmUgdGhlIHJlc3Qgb2YgdGhpcyBidWlsZCBmcm9tIG1lbW9yeSByYXRoZXIgdGhhbiByZS1yZWFkaW5nOyBzZWVcbiAgICAgIC8vIHtAbGluayBnZXR9LlxuICAgICAgdGhpcy5lbnRyaWVzLnNldChjYWNoZUtleSwgY2FjaGVIYW5kbGVyVmFsdWUpO1xuXG4gICAgICBkZWJ1ZyhgTE9DQUwgRklMRSBDQUNIRSBXUklURTogJHtjYWNoZUtleX0gLT4gJHtmaWxlUGF0aH1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd3JpdGluZyBsb2NhbCBjYWNoZSBmaWxlIGZvciAke2NhY2hlS2V5fTpgLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGJ1aWxkIHNob3VsZCBjb250aW51ZSBldmVuIGlmIGNhY2hpbmcgZmFpbHNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIGRpcmVjdG9yeSBwYXRoXG4gICAqL1xuICBnZXRDYWNoZURpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhY2hlRGlyO1xuICB9XG59XG4iXX0=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvbG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7RUFNRTtBQUNGLHNEQUFzRDtBQUN0RCwyQkFBd0U7QUFDeEUsK0JBQXFDO0FBQ3JDLGtEQUE2QjtBQUc3QiwrQ0FJdUI7QUFFdkIsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMscUNBQXFDLENBQUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFhLHFCQUFxQjtJQUN4QixRQUFRLENBQVM7SUFDekIsbUVBQW1FO0lBQzNELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUV2RDtRQUNFLG9FQUFvRTtRQUNwRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtZQUNuRCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7WUFDdkMsQ0FBQyxDQUFDLElBQUEsV0FBSSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUUxRCw0RkFBNEY7UUFDNUYsSUFBQSxjQUFTLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxRQUFnQjtRQUNwQyxPQUFPLElBQUEsV0FBSSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBQSw2QkFBZSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7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QUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTlIRCxzREE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBMb2NhbCBGaWxlIENhY2hlIEhhbmRsZXIgZm9yIE5leHQuanMgYnVpbGQtdGltZSBwcmUtY2FjaGluZ1xuICBcbiAgV3JpdGVzIGNhY2hlIGVudHJpZXMgdG8gLm5leHQvY2RrLW5leHRqcy1jYWNoZS1oYW5kbGVyL3tjYWNoZUtleX0uanNvblxuICBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3Mgc28gdGhleSBjYW4gYmUgZGVwbG95ZWQgdG8gUzMgdmlhIEJ1Y2tldERlcGxveW1lbnQuXG4gIEJ1Y2tldERlcGxveW1lbnQgd2lsbCBhZGQgdGhlIGJ1aWxkSWQgcHJlZml4IHdoZW4gdXBsb2FkaW5nIHRvIFMzLlxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGdldERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyVmFsdWUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvaW5jcmVtZW50YWwtY2FjaGVcIjtcbmltcG9ydCB0eXBlIHsgSW5jcmVtZW50YWxDYWNoZVZhbHVlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGVcIjtcbmltcG9ydCB7XG4gIGNhY2hlT2JqZWN0TmFtZSxcbiAgcGFyc2VDYWNoZVZhbHVlLFxuICBzZXJpYWxpemVDYWNoZVZhbHVlLFxufSBmcm9tIFwiLi9jYWNoZS11dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpjYWNoZS1oYW5kbGVyOmxvY2FsLWZpbGVcIik7XG5cbi8qKlxuICogTG9jYWwgZmlsZSBjYWNoZSBoYW5kbGVyIHRoYXQgd3JpdGVzIGNhY2hlIGVudHJpZXMgZHVyaW5nIE5leHQuanMgYnVpbGRcbiAqIHRvIGJlIGRlcGxveWVkIHRvIFMzIGxhdGVyIHZpYSBCdWNrZXREZXBsb3ltZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbEZpbGVDYWNoZUhhbmRsZXIge1xuICBwcml2YXRlIGNhY2hlRGlyOiBzdHJpbmc7XG4gIC8qKiBXaGF0IHRoaXMgcHJvY2VzcyBoYXMgd3JpdHRlbiBvciByZWFkIGJhY2s7IHNlZSB7QGxpbmsgZ2V0fS4gKi9cbiAgcHJpdmF0ZSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlSGFuZGxlclZhbHVlPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFJlYWQgY2FjaGUgZGlyZWN0b3J5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IGJ5IE5leHRqc0J1aWxkXG4gICAgLy8gRmFsbHMgYmFjayB0byBkZWZhdWx0IGxvY2F0aW9uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5jYWNoZURpciA9IHByb2Nlc3MuZW52LkNES19ORVhUSlNfSU5JVF9DQUNIRV9ESVJcbiAgICAgID8gcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19JTklUX0NBQ0hFX0RJUlxuICAgICAgOiBqb2luKHByb2Nlc3MuY3dkKCksIFwiLm5leHRcIiwgXCJjZGstbmV4dGpzLWluaXQtY2FjaGVcIik7XG5cbiAgICAvLyBDcmVhdGUgZnJlc2ggY2FjaGUgZGlyZWN0b3J5OyBjYWNoZSBkaXJlY3RvcnkgaXMgY2xlYW5lZCBiZWZvcmUgZWFjaCBidWlsZCBpbiBOZXh0anNCdWlsZFxuICAgIG1rZGlyU3luYyh0aGlzLmNhY2hlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBkZWJ1ZyhgQ3JlYXRlZCBsb2NhbCBjYWNoZSBkaXJlY3Rvcnk6ICR7dGhpcy5jYWNoZURpcn1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBmaWxlIHBhdGggZm9yIGNhY2hlIGVudHJ5OiB7QGxpbmsgY2FjaGVPYmplY3ROYW1lfSwgdGhlIG5hbWUgdGhlXG4gICAqIHJ1bnRpbWUgcmVhZHMgaXQgYmFjayB1bmRlciAoQnVja2V0RGVwbG95bWVudCB3aWxsIGFkZCBidWlsZElkIHByZWZpeClcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGaWxlUGF0aChjYWNoZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gam9pbih0aGlzLmNhY2hlRGlyLCBjYWNoZU9iamVjdE5hbWUoY2FjaGVLZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGJhY2sgYW4gZW50cnkgdGhpcyBidWlsZCBhbHJlYWR5IHdyb3RlLlxuICAgKlxuICAgKiBSZXF1aXJlZCwgbm90IGFuIG9wdGltaXphdGlvbi4gVW5kZXIgYGNhY2hlQ29tcG9uZW50c2AgYSBwcmVyZW5kZXIgcnVuc1xuICAgKiB0d2ljZTogYSBmaXJzdCBwYXNzIHRoYXQgZmlsbHMgY2FjaGVzIChldmVyeSBgZmV0Y2hgIG1pc3NlcywgcnVucyBmb3IgcmVhbCxcbiAgICogYW5kIGlzIGBzZXRgKSwgdGhlbiBhIGZpbmFsIHBhc3MgaW4gd2hpY2ggZXZlcnkgYXdhaXQgbXVzdCBzZXR0bGUgaW4gYVxuICAgKiBtaWNyb3Rhc2sg4oCUIGFueXRoaW5nIHN0aWxsIHBlbmRpbmcgaXMgYnkgZGVmaW5pdGlvbiBcInJ1bnRpbWUgZGF0YVwiLCBhbmRcbiAgICogTmV4dC5qcyBhYm9ydHMgdGhlIHBhZ2Ugd2l0aCBgUm91dGUgXCIvXCI6IE5leHQuanMgZW5jb3VudGVyZWQgdW5jYWNoZWQgb3JcbiAgICogcnVudGltZSBkYXRhIGR1cmluZyBwcmVyZW5kZXJpbmdgLiBUaGUgZmluYWwgcGFzcyBvbmx5IHNldHRsZXMgaW1tZWRpYXRlbHlcbiAgICogaWYgYGdldGAgcmV0dXJucyB3aGF0IHRoZSBmaXJzdCBwYXNzIGBzZXRgLCBzbyBhIHdyaXRlLW9ubHkgYnVpbGQtdGltZVxuICAgKiBoYW5kbGVyIG1ha2VzIGBmZXRjaCh1cmwsIHsgY2FjaGU6ICdmb3JjZS1jYWNoZScgfSlgIHVucHJlcmVuZGVyYWJsZSBhbmRcbiAgICogZmFpbHMgdGhlIGJ1aWxkLiBOZXh0LmpzJ3Mgb3duIGBGaWxlU3lzdGVtQ2FjaGVgIHJlYWRzIGJhY2sgZm9yIGV4YWN0bHlcbiAgICogdGhpcyByZWFzb24uIE1lYXN1cmVkIGFnYWluc3QgbmV4dC5qcydzXG4gICAqIGB0ZXN0L2UyZS9hcHAtZGlyL3Jlc3VtZS1kYXRhLWNhY2hlYCwgd2hpY2ggaXMgdW5idWlsZGFibGUgd2l0aG91dCBpdC5cbiAgICpcbiAgICogRW50cmllcyBhcmUgcmVhZCB0aHJvdWdoIGEgcHJvY2Vzcy1sb2NhbCBtYXAgYmVjYXVzZSB0aGUgdHdvIHBhc3NlcyBhcmUgdGhlXG4gICAqIHNhbWUgcHJvY2VzcywgYW5kIGJlY2F1c2UgdGhlIGRlc2VyaWFsaXplZCB2YWx1ZSBpcyB3aGF0IE5leHQuanMgY29tcGFyZXNcbiAgICogYnkgcmVmZXJlbmNlIHdoZW4gZGVkdXBpbmcgd2l0aGluIGEgcmVuZGVyLlxuICAgKi9cbiAgYXN5bmMgZ2V0KGNhY2hlS2V5OiBzdHJpbmcpOiBQcm9taXNlPENhY2hlSGFuZGxlclZhbHVlIHwgbnVsbD4ge1xuICAgIGNvbnN0IG1lbW9pemVkID0gdGhpcy5lbnRyaWVzLmdldChjYWNoZUtleSk7XG4gICAgaWYgKG1lbW9pemVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5idWlsZEZpbGVQYXRoKGNhY2hlS2V5KTtcbiAgICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBgdGFnc2AgaXMgc3RvcmVkIGFsb25nc2lkZSwgbm90IGluc2lkZSwgdGhlIGBDYWNoZUhhbmRsZXJWYWx1ZWA7IGl0IGlzXG4gICAgICAvLyBvbmx5IGNvbnN1bHRlZCBmb3IgdGFnIHJldmFsaWRhdGlvbiwgd2hpY2ggY2Fubm90IGhhcHBlbiBtaWQtYnVpbGQuXG4gICAgICBjb25zdCBzdG9yZWQgPSBwYXJzZUNhY2hlVmFsdWUocmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgIGNvbnN0IGVudHJ5OiBDYWNoZUhhbmRsZXJWYWx1ZSA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiBzdG9yZWQubGFzdE1vZGlmaWVkLFxuICAgICAgICB2YWx1ZTogc3RvcmVkLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuZW50cmllcy5zZXQoY2FjaGVLZXksIGVudHJ5KTtcbiAgICAgIGRlYnVnKGBMT0NBTCBGSUxFIENBQ0hFIEhJVDogJHtjYWNoZUtleX1gKTtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVhZGluZyBsb2NhbCBjYWNoZSBmaWxlIGZvciAke2NhY2hlS2V5fTpgLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGEgbWlzcyBvbmx5IGNvc3RzIHRoZSBidWlsZCBhIHJlLWZldGNoLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIGNhY2hlIGVudHJ5IHRvIGxvY2FsIGZpbGVcbiAgICovXG4gIGFzeW5jIHNldChcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIGRhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSB8IG51bGwsXG4gICAgdGFncz86IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmJ1aWxkRmlsZVBhdGgoY2FjaGVLZXkpO1xuXG4gICAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFleGlzdHNTeW5jKGRpcikpIHtcbiAgICAgICAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBDYWNoZUhhbmRsZXJWYWx1ZSBzdHJ1Y3R1cmUgd2l0aCB0YWdzXG4gICAgICBjb25zdCBjYWNoZUhhbmRsZXJWYWx1ZTogQ2FjaGVIYW5kbGVyVmFsdWUgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdG9yZSB3aXRoIHRhZ3MgZm9yIHJldmFsaWRhdGlvbiBjaGVja2luZ1xuICAgICAgY29uc3Qgc3RvcmFnZVZhbHVlID0ge1xuICAgICAgICAuLi5jYWNoZUhhbmRsZXJWYWx1ZSxcbiAgICAgICAgdGFnczogdGFncyB8fCBbXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFNlcmlhbGl6ZSB0byBKU09OIHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgTWFwIGFuZCBCdWZmZXJcbiAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBzZXJpYWxpemVDYWNoZVZhbHVlKHN0b3JhZ2VWYWx1ZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRvIGZpbGVcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGpzb25TdHJpbmcsIFwidXRmLThcIik7XG4gICAgICAvLyBTZXJ2ZSB0aGUgcmVzdCBvZiB0aGlzIGJ1aWxkIGZyb20gbWVtb3J5IHJhdGhlciB0aGFuIHJlLXJlYWRpbmc7IHNlZVxuICAgICAgLy8ge0BsaW5rIGdldH0uXG4gICAgICB0aGlzLmVudHJpZXMuc2V0KGNhY2hlS2V5LCBjYWNoZUhhbmRsZXJWYWx1ZSk7XG5cbiAgICAgIGRlYnVnKGBMT0NBTCBGSUxFIENBQ0hFIFdSSVRFOiAke2NhY2hlS2V5fSAtPiAke2ZpbGVQYXRofWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3cml0aW5nIGxvY2FsIGNhY2hlIGZpbGUgZm9yICR7Y2FjaGVLZXl9OmAsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gYnVpbGQgc2hvdWxkIGNvbnRpbnVlIGV2ZW4gaWYgY2FjaGluZyBmYWlsc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgZGlyZWN0b3J5IHBhdGhcbiAgICovXG4gIGdldENhY2hlRGlyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVEaXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CacheHandler, CacheHandlerValue, CacheHandlerContext } from "next/dist/server/lib/incremental-cache";
|
|
2
|
-
import { IncrementalCacheValue
|
|
2
|
+
import { IncrementalCacheValue } from "next/dist/server/response-cache";
|
|
3
3
|
import { RevalidateDurations } from "./aws-cache-store";
|
|
4
|
+
import { GetCacheHandlerContext, SetCacheHandlerContext } from "./cache-utils";
|
|
4
5
|
export interface S3CacheHandlerOptions {
|
|
5
6
|
context: CacheHandlerContext;
|
|
6
7
|
/**
|
|
@@ -40,7 +41,7 @@ export declare class S3CacheHandler implements CacheHandler {
|
|
|
40
41
|
/** @see buildTagManifest */
|
|
41
42
|
private buildTags;
|
|
42
43
|
constructor(options: S3CacheHandlerOptions);
|
|
43
|
-
get(cacheKey: string, ctx:
|
|
44
|
+
get(cacheKey: string, ctx: GetCacheHandlerContext): Promise<CacheHandlerValue | null>;
|
|
44
45
|
/**
|
|
45
46
|
* Whether a tag revalidation has expired `entry`, for a `get` with `ctx`.
|
|
46
47
|
*
|
|
@@ -71,14 +72,14 @@ export declare class S3CacheHandler implements CacheHandler {
|
|
|
71
72
|
lastModified?: number;
|
|
72
73
|
tags?: string[];
|
|
73
74
|
value?: unknown;
|
|
74
|
-
}, ctx:
|
|
75
|
+
}, ctx: GetCacheHandlerContext, cacheKey: string): Promise<boolean>;
|
|
75
76
|
/**
|
|
76
77
|
* Remember that `cacheKey` was served stale, when there is a distribution
|
|
77
78
|
* whose copy of it will need invalidating again. See
|
|
78
79
|
* {@link softRevalidatedKeys}.
|
|
79
80
|
*/
|
|
80
81
|
private noteSoftRevalidated;
|
|
81
|
-
set(cacheKey: string, data: IncrementalCacheValue | null, ctx:
|
|
82
|
+
set(cacheKey: string, data: IncrementalCacheValue | null, ctx: SetCacheHandlerContext): Promise<void>;
|
|
82
83
|
revalidateTag(tag: string | string[], durations?: RevalidateDurations): Promise<void>;
|
|
83
84
|
/**
|
|
84
85
|
* The routes CloudFront could be holding a response for `tag` under -
|
|
@@ -95,7 +96,8 @@ export declare class S3CacheHandler implements CacheHandler {
|
|
|
95
96
|
*/
|
|
96
97
|
private buildTagManifest;
|
|
97
98
|
/**
|
|
98
|
-
* Every mapping row for `tag
|
|
99
|
+
* Every mapping row for `tag` - those whose sort key starts with
|
|
100
|
+
* `skPrefix`, its {@link tagMappingPrefix} - following `LastEvaluatedKey`, and whether
|
|
99
101
|
* {@link MAX_TAG_QUERY_PAGES} cut the walk short.
|
|
100
102
|
*
|
|
101
103
|
* DynamoDB caps a Query at 1 MB of items regardless of how many match, and
|
|
@@ -143,8 +145,22 @@ export declare class S3CacheHandler implements CacheHandler {
|
|
|
143
145
|
private get mapsTagsToPaths();
|
|
144
146
|
/** Whether there is a distribution to invalidate. */
|
|
145
147
|
private get invalidatesCdn();
|
|
146
|
-
/**
|
|
147
|
-
|
|
148
|
+
/**
|
|
149
|
+
* The sort key of `tag`'s mapping row for `s3Key`: `<prefix>s3Key`, or, when
|
|
150
|
+
* that passes DynamoDB's 1024-byte sort key limit, `<prefix><buildId>/#<sha256>`.
|
|
151
|
+
* Either way the row carries the key itself in `s3Key`. next 16.3.8's
|
|
152
|
+
* route-scoped keys are ~88 bytes longer than a pathname, enough to push a
|
|
153
|
+
* long tag on a long path over - and a rejected `PutItem` left
|
|
154
|
+
* `revalidateTag` nothing to invalidate, so CloudFront kept the stale page.
|
|
155
|
+
* The prefix is {@link tagMappingPrefix}'s, which {@link MAX_TAG_BYTES} and
|
|
156
|
+
* the build ID's cap leave room for the hashed form after.
|
|
157
|
+
*/
|
|
158
|
+
private tagMappingSortKey;
|
|
159
|
+
/**
|
|
160
|
+
* What every mapping row of `tag` starts with, and so what
|
|
161
|
+
* {@link queryTagMappings} matches: `<sortKeyTag(tag)>#`.
|
|
162
|
+
*/
|
|
163
|
+
private tagMappingPrefix;
|
|
148
164
|
private storeDynamoDBTagMappings;
|
|
149
165
|
/**
|
|
150
166
|
* Drop the `tag#s3Key` mapping rows for an entry that no longer exists.
|