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.
Files changed (51) hide show
  1. package/.jsii +37 -37
  2. package/docs/adapter-runtime.md +1 -1
  3. package/docs/harness-coverage.md +9 -8
  4. package/lib/adapter/adapter.mjs +220 -149
  5. package/lib/adapter/aws-cache-store.d.ts +28 -4
  6. package/lib/adapter/aws-cache-store.js +52 -21
  7. package/lib/adapter/aws-cache-store.test.js +36 -1
  8. package/lib/adapter/build-outputs.js +23 -1
  9. package/lib/adapter/build-outputs.test.js +18 -1
  10. package/lib/adapter/cache-handler.d.ts +4 -3
  11. package/lib/adapter/cache-handler.js +1 -1
  12. package/lib/adapter/cache-handler.mjs +131 -61
  13. package/lib/adapter/cache-handler.test.js +31 -1
  14. package/lib/adapter/cache-utils.d.ts +68 -2
  15. package/lib/adapter/cache-utils.js +108 -2
  16. package/lib/adapter/cache-utils.test.js +45 -1
  17. package/lib/adapter/init-cache.d.ts +1 -1
  18. package/lib/adapter/init-cache.js +60 -37
  19. package/lib/adapter/init-cache.test.js +55 -2
  20. package/lib/adapter/local-file-cache-handler.d.ts +2 -2
  21. package/lib/adapter/local-file-cache-handler.js +4 -5
  22. package/lib/adapter/s3-cache-handler.d.ts +23 -7
  23. package/lib/adapter/s3-cache-handler.js +63 -27
  24. package/lib/adapter/s3-cache-handler.test.js +168 -1
  25. package/lib/adapter/use-cache-default-handler.mjs +32 -9
  26. package/lib/adapter/use-cache-remote-handler.js +2 -3
  27. package/lib/adapter/use-cache-remote-handler.mjs +81 -61
  28. package/lib/nextjs-api.js +1 -1
  29. package/lib/nextjs-build/nextjs-build.d.ts +0 -7
  30. package/lib/nextjs-build/nextjs-build.js +4 -11
  31. package/lib/nextjs-build/nextjs-build.test.js +4 -3
  32. package/lib/nextjs-cache.js +1 -1
  33. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  34. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  35. package/lib/nextjs-distribution.js +1 -1
  36. package/lib/nextjs-post-deploy.js +1 -1
  37. package/lib/nextjs-static-assets.js +1 -1
  38. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  39. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  40. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  41. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  42. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  43. package/lib/runtime/image.d.ts +19 -0
  44. package/lib/runtime/image.js +28 -2
  45. package/lib/runtime/image.test.js +43 -1
  46. package/lib/runtime/lambda.mjs +14 -3
  47. package/lib/runtime/server.mjs +14 -3
  48. package/lib/utils/deployment-build-id.d.ts +11 -0
  49. package/lib/utils/deployment-build-id.js +15 -0
  50. package/package.json +3 -3
  51. 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
- * Structure: {cacheKey}.json (BucketDeployment will add buildId prefix)
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
- * Structure: {cacheKey}.json (BucketDeployment will add buildId prefix)
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
- const filePath = (0, path_1.join)(this.cacheDir, `${cacheKey}.json`);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvbG9jYWwtZmlsZS1jYWNoZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7RUFNRTtBQUNGLHNEQUFzRDtBQUN0RCwyQkFBd0U7QUFDeEUsK0JBQXFDO0FBQ3JDLGtEQUE2QjtBQUc3QiwrQ0FBcUU7QUFFckUsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMscUNBQXFDLENBQUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFhLHFCQUFxQjtJQUN4QixRQUFRLENBQVM7SUFDekIsbUVBQW1FO0lBQzNELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUV2RDtRQUNFLG9FQUFvRTtRQUNwRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtZQUNuRCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7WUFDdkMsQ0FBQyxDQUFDLElBQUEsV0FBSSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUUxRCw0RkFBNEY7UUFDNUYsSUFBQSxjQUFTLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxRQUFnQjtRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FBQztRQUN6RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBZ0I7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUEsZUFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELHlFQUF5RTtZQUN6RSxzRUFBc0U7WUFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBQSw2QkFBZSxFQUFDLElBQUEsaUJBQVksRUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRSxNQUFNLEtBQUssR0FBc0I7Z0JBQy9CLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtnQkFDakMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2FBQ3BCLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RSx3REFBd0Q7WUFDeEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FDUCxRQUFnQixFQUNoQixJQUFrQyxFQUNsQyxJQUFlO1FBRWYsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5Qyx1Q0FBdUM7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUEsZUFBVSxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUEsY0FBUyxFQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxpQkFBaUIsR0FBc0I7Z0JBQzNDLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUN4QixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7WUFFRiw0Q0FBNEM7WUFDNUMsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEdBQUcsaUJBQWlCO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7YUFDakIsQ0FBQztZQUVGLDZEQUE2RDtZQUM3RCxNQUFNLFVBQVUsR0FBRyxJQUFBLGlDQUFtQixFQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXJELGdCQUFnQjtZQUNoQixJQUFBLGtCQUFhLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3Qyx1RUFBdUU7WUFDdkUsZUFBZTtZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRTlDLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RSw0REFBNEQ7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBL0hELHNEQStIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIExvY2FsIEZpbGUgQ2FjaGUgSGFuZGxlciBmb3IgTmV4dC5qcyBidWlsZC10aW1lIHByZS1jYWNoaW5nXG4gIFxuICBXcml0ZXMgY2FjaGUgZW50cmllcyB0byAubmV4dC9jZGstbmV4dGpzLWNhY2hlLWhhbmRsZXIve2NhY2hlS2V5fS5qc29uXG4gIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBzbyB0aGV5IGNhbiBiZSBkZXBsb3llZCB0byBTMyB2aWEgQnVja2V0RGVwbG95bWVudC5cbiAgQnVja2V0RGVwbG95bWVudCB3aWxsIGFkZCB0aGUgYnVpbGRJZCBwcmVmaXggd2hlbiB1cGxvYWRpbmcgdG8gUzMuXG4qL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBDYWNoZUhhbmRsZXJWYWx1ZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHR5cGUgeyBJbmNyZW1lbnRhbENhY2hlVmFsdWUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgcGFyc2VDYWNoZVZhbHVlLCBzZXJpYWxpemVDYWNoZVZhbHVlIH0gZnJvbSBcIi4vY2FjaGUtdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6Y2FjaGUtaGFuZGxlcjpsb2NhbC1maWxlXCIpO1xuXG4vKipcbiAqIExvY2FsIGZpbGUgY2FjaGUgaGFuZGxlciB0aGF0IHdyaXRlcyBjYWNoZSBlbnRyaWVzIGR1cmluZyBOZXh0LmpzIGJ1aWxkXG4gKiB0byBiZSBkZXBsb3llZCB0byBTMyBsYXRlciB2aWEgQnVja2V0RGVwbG95bWVudFxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxGaWxlQ2FjaGVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBjYWNoZURpcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGlzIHByb2Nlc3MgaGFzIHdyaXR0ZW4gb3IgcmVhZCBiYWNrOyBzZWUge0BsaW5rIGdldH0uICovXG4gIHByaXZhdGUgZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUhhbmRsZXJWYWx1ZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWFkIGNhY2hlIGRpcmVjdG9yeSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBieSBOZXh0anNCdWlsZFxuICAgIC8vIEZhbGxzIGJhY2sgdG8gZGVmYXVsdCBsb2NhdGlvbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuY2FjaGVEaXIgPSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0lOSVRfQ0FDSEVfRElSXG4gICAgICA/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, GetIncrementalFetchCacheContext, GetIncrementalResponseCacheContext, SetIncrementalFetchCacheContext, SetIncrementalResponseCacheContext } from "next/dist/server/response-cache";
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: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext): Promise<CacheHandlerValue | null>;
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: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext, cacheKey: string): Promise<boolean>;
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: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext): Promise<void>;
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`, following `LastEvaluatedKey`, and whether
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
- /** `{buildId}/{cacheKey}.json`; see {@link buildS3Key}. */
147
- private buildS3Key;
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.