cdk-nextjs 0.7.6 → 0.7.7

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 (43) hide show
  1. package/.jsii +3 -3
  2. package/.jsii.tabl.json +1 -1
  3. package/README.md +12 -3
  4. package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +31 -13
  5. package/docs/caching-guide.md +11 -1
  6. package/docs/harness-coverage.md +2 -1
  7. package/lib/adapter/aws-cache-store.d.ts +214 -3
  8. package/lib/adapter/aws-cache-store.js +470 -35
  9. package/lib/adapter/aws-cache-store.test.js +675 -3
  10. package/lib/adapter/cache-handler.mjs +421 -30
  11. package/lib/adapter/use-cache-common.d.ts +53 -1
  12. package/lib/adapter/use-cache-common.js +121 -14
  13. package/lib/adapter/use-cache-common.test.js +138 -1
  14. package/lib/adapter/use-cache-default-handler.js +36 -6
  15. package/lib/adapter/use-cache-default-handler.mjs +525 -42
  16. package/lib/adapter/use-cache-handlers.test.js +247 -7
  17. package/lib/adapter/use-cache-remote-handler.js +9 -7
  18. package/lib/adapter/use-cache-remote-handler.mjs +516 -40
  19. package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +2 -1
  20. package/lib/lambdas/post-deploy/prune-revalidation-table.js +35 -13
  21. package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +19 -1
  22. package/lib/nextjs-api.js +1 -1
  23. package/lib/nextjs-build/nextjs-build.js +1 -1
  24. package/lib/nextjs-cache.js +1 -1
  25. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  26. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  27. package/lib/nextjs-distribution.js +1 -1
  28. package/lib/nextjs-post-deploy.js +1 -1
  29. package/lib/nextjs-static-assets.js +1 -1
  30. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  31. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  32. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  33. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  34. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  35. package/lib/runtime/core.js +18 -4
  36. package/lib/runtime/core.test.js +17 -1
  37. package/lib/runtime/lambda.mjs +16 -3
  38. package/lib/runtime/server.mjs +16 -3
  39. package/lib/runtime/tag-manifest.d.ts +15 -0
  40. package/lib/runtime/tag-manifest.js +24 -0
  41. package/lib/runtime/tag-manifest.test.d.ts +1 -0
  42. package/lib/runtime/tag-manifest.test.js +21 -0
  43. package/package.json +1 -1
@@ -7,7 +7,8 @@ interface PruneRevalidationTableProps {
7
7
  * and delete them efficiently. Uses metadata entry to track current build ID.
8
8
  *
9
9
  * Schema:
10
- * - Revalidation entries: pk=buildId, sk=tag#cacheKey
10
+ * - Tag marker rows: pk=buildId, sk=tag (hashed past a length limit)
11
+ * - Tag mapping rows: pk=buildId, sk=tag#s3Key
11
12
  * - Revalidation log rows: pk=buildId#log, sk=timestamp#tag
12
13
  * - Metadata entry: pk="METADATA", sk="CURRENT_BUILD", buildId=currentBuildId
13
14
  */
@@ -11,12 +11,20 @@ const debug_1 = __importDefault(require("debug"));
11
11
  const prune_s3_1 = require("./prune-s3");
12
12
  const debug = (0, debug_1.default)("cdk-nextjs:post-deploy:prune-revalidation-table");
13
13
  const dynamoClient = new client_dynamodb_1.DynamoDBClient();
14
+ /** How many times a delete batch is sent, counting the first. */
15
+ const DELETE_ATTEMPTS = 4;
16
+ /** The pause before the first resend; it doubles for each one after. */
17
+ const DELETE_RETRY_BASE_MS = 100;
18
+ function sleep(ms) {
19
+ return new Promise((resolve) => setTimeout(resolve, ms));
20
+ }
14
21
  /**
15
22
  * Given `tableName` and `currentBuildId`, query the previous build's revalidation entries
16
23
  * and delete them efficiently. Uses metadata entry to track current build ID.
17
24
  *
18
25
  * Schema:
19
- * - Revalidation entries: pk=buildId, sk=tag#cacheKey
26
+ * - Tag marker rows: pk=buildId, sk=tag (hashed past a length limit)
27
+ * - Tag mapping rows: pk=buildId, sk=tag#s3Key
20
28
  * - Revalidation log rows: pk=buildId#log, sk=timestamp#tag
21
29
  * - Metadata entry: pk="METADATA", sk="CURRENT_BUILD", buildId=currentBuildId
22
30
  */
@@ -86,22 +94,36 @@ async function pruneRevalidationTable(props) {
86
94
  }
87
95
  await (0, prune_s3_1.processBatch)(deleteBatches, 5, // Process up to 5 delete batches in parallel
88
96
  async (batch) => {
97
+ let requests = batch.map((item) => ({
98
+ DeleteRequest: {
99
+ Key: item,
100
+ },
101
+ }));
89
102
  try {
90
- const deleteRequests = batch.map((item) => ({
91
- DeleteRequest: {
92
- Key: item,
93
- },
94
- }));
95
103
  debug(`Deleting revalidation entries: ${batch.map((b) => `${b.pk.S}/${b.sk.S}`).join(", ")} from ${tableName}`);
96
- await dynamoClient.send(new client_dynamodb_1.BatchWriteItemCommand({
97
- RequestItems: {
98
- [tableName]: deleteRequests,
99
- },
100
- }));
101
- debug(`Deleted ${batch.length} revalidation entries from ${tableName}`);
104
+ // `UnprocessedItems` is DynamoDB declining part of the batch under
105
+ // load, so those are sent again after a pause.
106
+ for (let attempt = 0; requests?.length && attempt < DELETE_ATTEMPTS; attempt++) {
107
+ if (attempt > 0) {
108
+ await sleep(DELETE_RETRY_BASE_MS * 2 ** (attempt - 1));
109
+ }
110
+ const response = await dynamoClient.send(new client_dynamodb_1.BatchWriteItemCommand({
111
+ RequestItems: {
112
+ [tableName]: requests,
113
+ },
114
+ }));
115
+ requests = response.UnprocessedItems?.[tableName];
116
+ }
102
117
  }
103
118
  catch (error) {
104
119
  console.error("Error deleting revalidation entries:", error);
120
+ return;
121
+ }
122
+ if (requests?.length) {
123
+ console.error(`DynamoDB left ${requests.length} revalidation entries undeleted after retrying`);
124
+ }
125
+ else {
126
+ debug(`Deleted ${batch.length} revalidation entries from ${tableName}`);
105
127
  }
106
128
  });
107
129
  }
@@ -125,4 +147,4 @@ async function updateMetadata(tableName, currentBuildId) {
125
147
  await dynamoClient.send(putCommand);
126
148
  debug(`Updated metadata with current build ID: ${currentBuildId}`);
127
149
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xhbWJkYXMvcG9zdC1kZXBsb3kvcHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBOEJBLHdEQTBIQztBQXhKRCw2REFBNkQ7QUFDN0QsOERBTWtDO0FBQ2xDLDZEQUE2RDtBQUM3RCxrREFBNkI7QUFDN0IseUNBQTBDO0FBRTFDLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBUSxFQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFFMUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQ0FBYyxFQUFFLENBQUM7QUFPMUM7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLEtBQWtDO0lBRWxDLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVDLDRDQUE0QztJQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLGdDQUFjLENBQUM7UUFDcEMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsR0FBRyxFQUFFO1lBQ0gsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRTtZQUNyQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFO1NBQzNCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxlQUFtQyxDQUFDO0lBQ3hDLElBQUksQ0FBQztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7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LE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxLQUFLLENBQUMsMkNBQTJDLGNBQWMsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7XG4gIER5bmFtb0RCQ2xpZW50LFxuICBRdWVyeUNvbW1hbmQsXG4gIEdldEl0ZW1Db21tYW5kLFxuICBQdXRJdGVtQ29tbWFuZCxcbiAgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBwcm9jZXNzQmF0Y2ggfSBmcm9tIFwiLi9wcnVuZS1zM1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpwb3N0LWRlcGxveTpwcnVuZS1yZXZhbGlkYXRpb24tdGFibGVcIik7XG5cbmNvbnN0IGR5bmFtb0NsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCgpO1xuXG5pbnRlcmZhY2UgUHJ1bmVSZXZhbGlkYXRpb25UYWJsZVByb3BzIHtcbiAgdGFibGVOYW1lOiBzdHJpbmc7XG4gIGN1cnJlbnRCdWlsZElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2l2ZW4gYHRhYmxlTmFtZWAgYW5kIGBjdXJyZW50QnVpbGRJZGAsIHF1ZXJ5IHRoZSBwcmV2aW91cyBidWlsZCdzIHJldmFsaWRhdGlvbiBlbnRyaWVzXG4gKiBhbmQgZGVsZXRlIHRoZW0gZWZmaWNpZW50bHkuIFVzZXMgbWV0YWRhdGEgZW50cnkgdG8gdHJhY2sgY3VycmVudCBidWlsZCBJRC5cbiAqXG4gKiBTY2hlbWE6XG4gKiAtIFJldmFsaWRhdGlvbiBlbnRyaWVzOiBwaz1idWlsZElkLCBzaz10YWcjY2FjaGVLZXlcbiAqIC0gUmV2YWxpZGF0aW9uIGxvZyByb3dzOiBwaz1idWlsZElkI2xvZywgc2s9dGltZXN0YW1wI3RhZ1xuICogLSBNZXRhZGF0YSBlbnRyeTogcGs9XCJNRVRBREFUQVwiLCBzaz1cIkNVUlJFTlRfQlVJTERcIiwgYnVpbGRJZD1jdXJyZW50QnVpbGRJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJ1bmVSZXZhbGlkYXRpb25UYWJsZShcbiAgcHJvcHM6IFBydW5lUmV2YWxpZGF0aW9uVGFibGVQcm9wcyxcbikge1xuICBjb25zdCB7IHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQgfSA9IHByb3BzO1xuXG4gIC8vIDEuIFJlYWQgbWV0YWRhdGEgdG8gZ2V0IHByZXZpb3VzIGJ1aWxkIElEXG4gIGNvbnN0IGdldENvbW1hbmQgPSBuZXcgR2V0SXRlbUNvbW1hbmQoe1xuICAgIFRhYmxlTmFtZTogdGFibGVOYW1lLFxuICAgIEtleToge1xuICAgICAgcGs6IHsgUzogXCJNRVRBREFUQVwiIH0sXG4gICAgICBzazogeyBTOiBcIkNVUlJFTlRfQlVJTERcIiB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCBwcmV2aW91c0J1aWxkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRhZGF0YVJlc3BvbnNlID0gYXdhaXQgZHluYW1vQ2xpZW50LnNlbmQoZ2V0Q29tbWFuZCk7XG4gICAgcHJldmlvdXNCdWlsZElkID0gbWV0YWRhdGFSZXNwb25zZS5JdGVtPy5idWlsZElkPy5TO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGRlYnVnKFwiTm8gbWV0YWRhdGEgZW50cnkgZm91bmQsIHRoaXMgbWF5IGJlIHRoZSBmaXJzdCBkZXBsb3ltZW50XCIpO1xuICB9XG5cbiAgaWYgKCFwcmV2aW91c0J1aWxkSWQpIHtcbiAgICBkZWJ1ZyhcIk5vIHByZXZpb3VzIGJ1aWxkIHRvIHBydW5lXCIpO1xuICAgIC8vIFVwZGF0ZSBtZXRhZGF0YSB3aXRoIGN1cnJlbnQgYnVpbGQgSUQgZm9yIG5leHQgZGVwbG95bWVudFxuICAgIGF3YWl0IHVwZGF0ZU1ldGFkYXRhKHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcmV2aW91c0J1aWxkSWQgPT09IGN1cnJlbnRCdWlsZElkKSB7XG4gICAgZGVidWcoXG4gICAgICBgUHJldmlvdXMgYnVpbGQgSUQgbWF0Y2hlcyBjdXJyZW50IGJ1aWxkIElEICgke2N1cnJlbnRCdWlsZElkfSksIG5vdGhpbmcgdG8gcHJ1bmVgLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWcoYFBydW5pbmcgcmV2YWxpZGF0aW9uIGVudHJpZXMgZm9yIHByZXZpb3VzIGJ1aWxkOiAke3ByZXZpb3VzQnVpbGRJZH1gKTtcblxuICAvLyAyLiBRdWVyeSBhbGwgaXRlbXMgZm9yIHByZXZpb3VzIGJ1aWxkIElEIChlZmZpY2llbnQgcGFydGl0aW9uIHF1ZXJpZXMpOlxuICAvLyBpdHMgbWFya2VyIHJvd3MsIGFuZCBpdHMgcmV2YWxpZGF0aW9uIGxvZyByb3dzLCB3aGljaCBhIHRhYmxlIHdpdGhvdXQgVFRMXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBrZWVwIGZvcmV2ZXIuXG4gIGNvbnN0IGl0ZW1zVG9EZWxldGU6IEFycmF5PHsgcGs6IHsgUzogc3RyaW5nIH07IHNrOiB7IFM6IHN0cmluZyB9IH0+ID0gW107XG5cbiAgZm9yIChjb25zdCBwayBvZiBbcHJldmlvdXNCdWlsZElkLCBgJHtwcmV2aW91c0J1aWxkSWR9I2xvZ2BdKSB7XG4gICAgbGV0IGxhc3RFdmFsdWF0ZWRLZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgcXVlcnlDb21tYW5kOiBRdWVyeUNvbW1hbmQgPSBuZXcgUXVlcnlDb21tYW5kKHtcbiAgICAgICAgVGFibGVOYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGtcIixcbiAgICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgIFwiOnBrXCI6IHsgUzogcGsgfSxcbiAgICAgICAgfSxcbiAgICAgICAgRXhjbHVzaXZlU3RhcnRLZXk6IGxhc3RFdmFsdWF0ZWRLZXksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBkeW5hbW9DbGllbnQuc2VuZChxdWVyeUNvbW1hbmQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzcG9uc2UuSXRlbXMgPz8gW10pIHtcbiAgICAgICAgaWYgKGl0ZW0ucGs/LlMgJiYgaXRlbS5zaz8uUykge1xuICAgICAgICAgIGl0ZW1zVG9EZWxldGUucHVzaCh7XG4gICAgICAgICAgICBwazogeyBTOiBpdGVtLnBrLlMgfSxcbiAgICAgICAgICAgIHNrOiB7IFM6IGl0ZW0uc2suUyB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RFdmFsdWF0ZWRLZXkgPSByZXNwb25zZS5MYXN0RXZhbHVhdGVkS2V5O1xuICAgIH0gd2hpbGUgKGxhc3RFdmFsdWF0ZWRLZXkpO1xuICB9XG5cbiAgZGVidWcoXG4gICAgYEZvdW5kICR7aXRlbXNUb0RlbGV0ZS5sZW5ndGh9IHJldmFsaWRhdGlvbiBlbnRyaWVzIHRvIGRlbGV0ZSBmb3IgYnVpbGQgJHtwcmV2aW91c0J1aWxkSWR9YCxcbiAgKTtcblxuICAvLyAzLiBEZWxldGUgaXRlbXMgaW4gYmF0Y2hlcyAocmVzcGVjdGluZyBEeW5hbW9EQidzIDI1IGl0ZW1zIHBlciBiYXRjaCBsaW1pdClcbiAgaWYgKGl0ZW1zVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGRlbGV0ZUJhdGNoZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXNUb0RlbGV0ZS5sZW5ndGg7IGkgKz0gMjUpIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gaXRlbXNUb0RlbGV0ZS5zbGljZShpLCBpICsgMjUpO1xuICAgICAgZGVsZXRlQmF0Y2hlcy5wdXNoKGJhdGNoKTtcbiAgICB9XG5cbiAgICBhd2FpdCBwcm9jZXNzQmF0Y2goXG4gICAgICBkZWxldGVCYXRjaGVzLFxuICAgICAgNSwgLy8gUHJvY2VzcyB1cCB0byA1IGRlbGV0ZSBiYXRjaGVzIGluIHBhcmFsbGVsXG4gICAgICBhc3luYyAoYmF0Y2gpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZWxldGVSZXF1ZXN0cyA9IGJhdGNoLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIERlbGV0ZVJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgS2V5OiBpdGVtLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGBEZWxldGluZyByZXZhbGlkYXRpb24gZW50cmllczogJHtiYXRjaC5tYXAoKGIpID0+IGAke2IucGsuU30vJHtiLnNrLlN9YCkuam9pbihcIiwgXCIpfSBmcm9tICR7dGFibGVOYW1lfWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGR5bmFtb0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IEJhdGNoV3JpdGVJdGVtQ29tbWFuZCh7XG4gICAgICAgICAgICAgIFJlcXVlc3RJdGVtczoge1xuICAgICAgICAgICAgICAgIFt0YWJsZU5hbWVdOiBkZWxldGVSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGBEZWxldGVkICR7YmF0Y2gubGVuZ3RofSByZXZhbGlkYXRpb24gZW50cmllcyBmcm9tICR7dGFibGVOYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZGVsZXRpbmcgcmV2YWxpZGF0aW9uIGVudHJpZXM6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gNC4gVXBkYXRlIG1ldGFkYXRhIHdpdGggbmV3IGJ1aWxkIElEXG4gIGF3YWl0IHVwZGF0ZU1ldGFkYXRhKHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQpO1xuXG4gIGRlYnVnKFxuICAgIGBSZXZhbGlkYXRpb24gdGFibGUgcHJ1bmluZyBjb21wbGV0ZS4gRGVsZXRlZCAke2l0ZW1zVG9EZWxldGUubGVuZ3RofSBlbnRyaWVzIGZyb20gJHt0YWJsZU5hbWV9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIG1ldGFkYXRhIGVudHJ5IHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgSURcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlTWV0YWRhdGEoXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBjdXJyZW50QnVpbGRJZDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHB1dENvbW1hbmQgPSBuZXcgUHV0SXRlbUNvbW1hbmQoe1xuICAgIFRhYmxlTmFtZTogdGFibGVOYW1lLFxuICAgIEl0ZW06IHtcbiAgICAgIHBrOiB7IFM6IFwiTUVUQURBVEFcIiB9LFxuICAgICAgc2s6IHsgUzogXCJDVVJSRU5UX0JVSUxEXCIgfSxcbiAgICAgIGJ1aWxkSWQ6IHsgUzogY3VycmVudEJ1aWxkSWQgfSxcbiAgICAgIHVwZGF0ZWRBdDogeyBOOiBEYXRlLm5vdygpLnRvU3RyaW5nKCkgfSxcbiAgICB9LFxuICB9KTtcblxuICBhd2FpdCBkeW5hbW9DbGllbnQuc2VuZChwdXRDb21tYW5kKTtcbiAgZGVidWcoYFVwZGF0ZWQgbWV0YWRhdGEgd2l0aCBjdXJyZW50IGJ1aWxkIElEOiAke2N1cnJlbnRCdWlsZElkfWApO1xufVxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xhbWJkYXMvcG9zdC1kZXBsb3kvcHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBMENBLHdEQTZJQztBQXZMRCw2REFBNkQ7QUFDN0QsOERBUWtDO0FBQ2xDLDZEQUE2RDtBQUM3RCxrREFBNkI7QUFDN0IseUNBQTBDO0FBRTFDLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBUSxFQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFFMUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQ0FBYyxFQUFFLENBQUM7QUFFMUMsaUVBQWlFO0FBQ2pFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQix3RUFBd0U7QUFDeEUsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQU9EOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsS0FBa0M7SUFFbEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFNUMsNENBQTRDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksZ0NBQWMsQ0FBQztRQUNwQyxTQUFTLEVBQUUsU0FBUztRQUNwQixHQUFHLEVBQUU7WUFDSCxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFO1lBQ3JCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUU7U0FDM0I7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLGVBQW1DLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxn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UUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsS0FBSyxDQUNYLGlCQUFpQixRQUFRLENBQUMsTUFBTSxnREFBZ0QsQ0FDakYsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQ0gsV0FBVyxLQUFLLENBQUMsTUFBTSw4QkFBOEIsU0FBUyxFQUFFLENBQ2pFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUVoRCxLQUFLLENBQ0gsZ0RBQWdELGFBQWEsQ0FBQyxNQUFNLGlCQUFpQixTQUFTLEVBQUUsQ0FDakcsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxjQUFjLENBQzNCLFNBQWlCLEVBQ2pCLGNBQXNCO0lBRXRCLE1BQU0sVUFBVSxHQUFHLElBQUksZ0NBQWMsQ0FBQztRQUNwQyxTQUFTLEVBQUUsU0FBUztRQUNwQixJQUFJLEVBQUU7WUFDSixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFO1lBQ3JCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUU7WUFDMUIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRTtZQUM5QixTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO1NBQ3hDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLEtBQUssQ0FBQywyQ0FBMkMsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgRHluYW1vREJDbGllbnQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgR2V0SXRlbUNvbW1hbmQsXG4gIFB1dEl0ZW1Db21tYW5kLFxuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmQsXG4gIEJhdGNoV3JpdGVJdGVtQ29tbWFuZE91dHB1dCxcbiAgV3JpdGVSZXF1ZXN0LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBwcm9jZXNzQmF0Y2ggfSBmcm9tIFwiLi9wcnVuZS1zM1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpwb3N0LWRlcGxveTpwcnVuZS1yZXZhbGlkYXRpb24tdGFibGVcIik7XG5cbmNvbnN0IGR5bmFtb0NsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCgpO1xuXG4vKiogSG93IG1hbnkgdGltZXMgYSBkZWxldGUgYmF0Y2ggaXMgc2VudCwgY291bnRpbmcgdGhlIGZpcnN0LiAqL1xuY29uc3QgREVMRVRFX0FUVEVNUFRTID0gNDtcbi8qKiBUaGUgcGF1c2UgYmVmb3JlIHRoZSBmaXJzdCByZXNlbmQ7IGl0IGRvdWJsZXMgZm9yIGVhY2ggb25lIGFmdGVyLiAqL1xuY29uc3QgREVMRVRFX1JFVFJZX0JBU0VfTVMgPSAxMDA7XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmludGVyZmFjZSBQcnVuZVJldmFsaWRhdGlvblRhYmxlUHJvcHMge1xuICB0YWJsZU5hbWU6IHN0cmluZztcbiAgY3VycmVudEJ1aWxkSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHaXZlbiBgdGFibGVOYW1lYCBhbmQgYGN1cnJlbnRCdWlsZElkYCwgcXVlcnkgdGhlIHByZXZpb3VzIGJ1aWxkJ3MgcmV2YWxpZGF0aW9uIGVudHJpZXNcbiAqIGFuZCBkZWxldGUgdGhlbSBlZmZpY2llbnRseS4gVXNlcyBtZXRhZGF0YSBlbnRyeSB0byB0cmFjayBjdXJyZW50IGJ1aWxkIElELlxuICpcbiAqIFNjaGVtYTpcbiAqIC0gVGFnIG1hcmtlciByb3dzOiBwaz1idWlsZElkLCBzaz10YWcgKGhhc2hlZCBwYXN0IGEgbGVuZ3RoIGxpbWl0KVxuICogLSBUYWcgbWFwcGluZyByb3dzOiBwaz1idWlsZElkLCBzaz10YWcjczNLZXlcbiAqIC0gUmV2YWxpZGF0aW9uIGxvZyByb3dzOiBwaz1idWlsZElkI2xvZywgc2s9dGltZXN0YW1wI3RhZ1xuICogLSBNZXRhZGF0YSBlbnRyeTogcGs9XCJNRVRBREFUQVwiLCBzaz1cIkNVUlJFTlRfQlVJTERcIiwgYnVpbGRJZD1jdXJyZW50QnVpbGRJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJ1bmVSZXZhbGlkYXRpb25UYWJsZShcbiAgcHJvcHM6IFBydW5lUmV2YWxpZGF0aW9uVGFibGVQcm9wcyxcbikge1xuICBjb25zdCB7IHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQgfSA9IHByb3BzO1xuXG4gIC8vIDEuIFJlYWQgbWV0YWRhdGEgdG8gZ2V0IHByZXZpb3VzIGJ1aWxkIElEXG4gIGNvbnN0IGdldENvbW1hbmQgPSBuZXcgR2V0SXRlbUNvbW1hbmQoe1xuICAgIFRhYmxlTmFtZTogdGFibGVOYW1lLFxuICAgIEtleToge1xuICAgICAgcGs6IHsgUzogXCJNRVRBREFUQVwiIH0sXG4gICAgICBzazogeyBTOiBcIkNVUlJFTlRfQlVJTERcIiB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCBwcmV2aW91c0J1aWxkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRhZGF0YVJlc3BvbnNlID0gYXdhaXQgZHluYW1vQ2xpZW50LnNlbmQoZ2V0Q29tbWFuZCk7XG4gICAgcHJldmlvdXNCdWlsZElkID0gbWV0YWRhdGFSZXNwb25zZS5JdGVtPy5idWlsZElkPy5TO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGRlYnVnKFwiTm8gbWV0YWRhdGEgZW50cnkgZm91bmQsIHRoaXMgbWF5IGJlIHRoZSBmaXJzdCBkZXBsb3ltZW50XCIpO1xuICB9XG5cbiAgaWYgKCFwcmV2aW91c0J1aWxkSWQpIHtcbiAgICBkZWJ1ZyhcIk5vIHByZXZpb3VzIGJ1aWxkIHRvIHBydW5lXCIpO1xuICAgIC8vIFVwZGF0ZSBtZXRhZGF0YSB3aXRoIGN1cnJlbnQgYnVpbGQgSUQgZm9yIG5leHQgZGVwbG95bWVudFxuICAgIGF3YWl0IHVwZGF0ZU1ldGFkYXRhKHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcmV2aW91c0J1aWxkSWQgPT09IGN1cnJlbnRCdWlsZElkKSB7XG4gICAgZGVidWcoXG4gICAgICBgUHJldmlvdXMgYnVpbGQgSUQgbWF0Y2hlcyBjdXJyZW50IGJ1aWxkIElEICgke2N1cnJlbnRCdWlsZElkfSksIG5vdGhpbmcgdG8gcHJ1bmVgLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWcoYFBydW5pbmcgcmV2YWxpZGF0aW9uIGVudHJpZXMgZm9yIHByZXZpb3VzIGJ1aWxkOiAke3ByZXZpb3VzQnVpbGRJZH1gKTtcblxuICAvLyAyLiBRdWVyeSBhbGwgaXRlbXMgZm9yIHByZXZpb3VzIGJ1aWxkIElEIChlZmZpY2llbnQgcGFydGl0aW9uIHF1ZXJpZXMpOlxuICAvLyBpdHMgbWFya2VyIHJvd3MsIGFuZCBpdHMgcmV2YWxpZGF0aW9uIGxvZyByb3dzLCB3aGljaCBhIHRhYmxlIHdpdGhvdXQgVFRMXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBrZWVwIGZvcmV2ZXIuXG4gIGNvbnN0IGl0ZW1zVG9EZWxldGU6IEFycmF5PHsgcGs6IHsgUzogc3RyaW5nIH07IHNrOiB7IFM6IHN0cmluZyB9IH0+ID0gW107XG5cbiAgZm9yIChjb25zdCBwayBvZiBbcHJldmlvdXNCdWlsZElkLCBgJHtwcmV2aW91c0J1aWxkSWR9I2xvZ2BdKSB7XG4gICAgbGV0IGxhc3RFdmFsdWF0ZWRLZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgcXVlcnlDb21tYW5kOiBRdWVyeUNvbW1hbmQgPSBuZXcgUXVlcnlDb21tYW5kKHtcbiAgICAgICAgVGFibGVOYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGtcIixcbiAgICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgIFwiOnBrXCI6IHsgUzogcGsgfSxcbiAgICAgICAgfSxcbiAgICAgICAgRXhjbHVzaXZlU3RhcnRLZXk6IGxhc3RFdmFsdWF0ZWRLZXksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBkeW5hbW9DbGllbnQuc2VuZChxdWVyeUNvbW1hbmQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzcG9uc2UuSXRlbXMgPz8gW10pIHtcbiAgICAgICAgaWYgKGl0ZW0ucGs/LlMgJiYgaXRlbS5zaz8uUykge1xuICAgICAgICAgIGl0ZW1zVG9EZWxldGUucHVzaCh7XG4gICAgICAgICAgICBwazogeyBTOiBpdGVtLnBrLlMgfSxcbiAgICAgICAgICAgIHNrOiB7IFM6IGl0ZW0uc2suUyB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RFdmFsdWF0ZWRLZXkgPSByZXNwb25zZS5MYXN0RXZhbHVhdGVkS2V5O1xuICAgIH0gd2hpbGUgKGxhc3RFdmFsdWF0ZWRLZXkpO1xuICB9XG5cbiAgZGVidWcoXG4gICAgYEZvdW5kICR7aXRlbXNUb0RlbGV0ZS5sZW5ndGh9IHJldmFsaWRhdGlvbiBlbnRyaWVzIHRvIGRlbGV0ZSBmb3IgYnVpbGQgJHtwcmV2aW91c0J1aWxkSWR9YCxcbiAgKTtcblxuICAvLyAzLiBEZWxldGUgaXRlbXMgaW4gYmF0Y2hlcyAocmVzcGVjdGluZyBEeW5hbW9EQidzIDI1IGl0ZW1zIHBlciBiYXRjaCBsaW1pdClcbiAgaWYgKGl0ZW1zVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGRlbGV0ZUJhdGNoZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXNUb0RlbGV0ZS5sZW5ndGg7IGkgKz0gMjUpIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gaXRlbXNUb0RlbGV0ZS5zbGljZShpLCBpICsgMjUpO1xuICAgICAgZGVsZXRlQmF0Y2hlcy5wdXNoKGJhdGNoKTtcbiAgICB9XG5cbiAgICBhd2FpdCBwcm9jZXNzQmF0Y2goXG4gICAgICBkZWxldGVCYXRjaGVzLFxuICAgICAgNSwgLy8gUHJvY2VzcyB1cCB0byA1IGRlbGV0ZSBiYXRjaGVzIGluIHBhcmFsbGVsXG4gICAgICBhc3luYyAoYmF0Y2gpID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RzOiBXcml0ZVJlcXVlc3RbXSB8IHVuZGVmaW5lZCA9IGJhdGNoLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBEZWxldGVSZXF1ZXN0OiB7XG4gICAgICAgICAgICBLZXk6IGl0ZW0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgYERlbGV0aW5nIHJldmFsaWRhdGlvbiBlbnRyaWVzOiAke2JhdGNoLm1hcCgoYikgPT4gYCR7Yi5way5TfS8ke2Iuc2suU31gKS5qb2luKFwiLCBcIil9IGZyb20gJHt0YWJsZU5hbWV9YCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gYFVucHJvY2Vzc2VkSXRlbXNgIGlzIER5bmFtb0RCIGRlY2xpbmluZyBwYXJ0IG9mIHRoZSBiYXRjaCB1bmRlclxuICAgICAgICAgIC8vIGxvYWQsIHNvIHRob3NlIGFyZSBzZW50IGFnYWluIGFmdGVyIGEgcGF1c2UuXG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgIHJlcXVlc3RzPy5sZW5ndGggJiYgYXR0ZW1wdCA8IERFTEVURV9BVFRFTVBUUztcbiAgICAgICAgICAgIGF0dGVtcHQrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGF0dGVtcHQgPiAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEVURV9SRVRSWV9CQVNFX01TICogMiAqKiAoYXR0ZW1wdCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQgPVxuICAgICAgICAgICAgICBhd2FpdCBkeW5hbW9DbGllbnQuc2VuZChcbiAgICAgICAgICAgICAgICBuZXcgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kKHtcbiAgICAgICAgICAgICAgICAgIFJlcXVlc3RJdGVtczoge1xuICAgICAgICAgICAgICAgICAgICBbdGFibGVOYW1lXTogcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVxdWVzdHMgPSByZXNwb25zZS5VbnByb2Nlc3NlZEl0ZW1zPy5bdGFibGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRlbGV0aW5nIHJldmFsaWRhdGlvbiBlbnRyaWVzOlwiLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYER5bmFtb0RCIGxlZnQgJHtyZXF1ZXN0cy5sZW5ndGh9IHJldmFsaWRhdGlvbiBlbnRyaWVzIHVuZGVsZXRlZCBhZnRlciByZXRyeWluZ2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGBEZWxldGVkICR7YmF0Y2gubGVuZ3RofSByZXZhbGlkYXRpb24gZW50cmllcyBmcm9tICR7dGFibGVOYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gNC4gVXBkYXRlIG1ldGFkYXRhIHdpdGggbmV3IGJ1aWxkIElEXG4gIGF3YWl0IHVwZGF0ZU1ldGFkYXRhKHRhYmxlTmFtZSwgY3VycmVudEJ1aWxkSWQpO1xuXG4gIGRlYnVnKFxuICAgIGBSZXZhbGlkYXRpb24gdGFibGUgcHJ1bmluZyBjb21wbGV0ZS4gRGVsZXRlZCAke2l0ZW1zVG9EZWxldGUubGVuZ3RofSBlbnRyaWVzIGZyb20gJHt0YWJsZU5hbWV9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIG1ldGFkYXRhIGVudHJ5IHdpdGggdGhlIGN1cnJlbnQgYnVpbGQgSURcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlTWV0YWRhdGEoXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBjdXJyZW50QnVpbGRJZDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHB1dENvbW1hbmQgPSBuZXcgUHV0SXRlbUNvbW1hbmQoe1xuICAgIFRhYmxlTmFtZTogdGFibGVOYW1lLFxuICAgIEl0ZW06IHtcbiAgICAgIHBrOiB7IFM6IFwiTUVUQURBVEFcIiB9LFxuICAgICAgc2s6IHsgUzogXCJDVVJSRU5UX0JVSUxEXCIgfSxcbiAgICAgIGJ1aWxkSWQ6IHsgUzogY3VycmVudEJ1aWxkSWQgfSxcbiAgICAgIHVwZGF0ZWRBdDogeyBOOiBEYXRlLm5vdygpLnRvU3RyaW5nKCkgfSxcbiAgICB9LFxuICB9KTtcblxuICBhd2FpdCBkeW5hbW9DbGllbnQuc2VuZChwdXRDb21tYW5kKTtcbiAgZGVidWcoYFVwZGF0ZWQgbWV0YWRhdGEgd2l0aCBjdXJyZW50IGJ1aWxkIElEOiAke2N1cnJlbnRCdWlsZElkfWApO1xufVxuIl19
@@ -67,5 +67,23 @@ describe("pruneRevalidationTable", () => {
67
67
  ].sort());
68
68
  expect(sent(client_dynamodb_1.PutItemCommand)[0].input.Item.buildId.S).toBe("current");
69
69
  });
70
+ it("sends the rows DynamoDB left unprocessed again", async () => {
71
+ stubTable("old", { old: ["tag-a", "tag-b"] });
72
+ const stub = holder.send.getMockImplementation();
73
+ let writes = 0;
74
+ holder.send.mockImplementation((command) => {
75
+ if (command instanceof client_dynamodb_1.BatchWriteItemCommand && writes++ === 0) {
76
+ const [, second] = command.input.RequestItems.table;
77
+ return Promise.resolve({ UnprocessedItems: { table: [second] } });
78
+ }
79
+ return stub(command);
80
+ });
81
+ await (0, prune_revalidation_table_1.pruneRevalidationTable)({
82
+ tableName: "table",
83
+ currentBuildId: "current",
84
+ });
85
+ const batches = sent(client_dynamodb_1.BatchWriteItemCommand).map((command) => command.input.RequestItems.table.map((request) => request.DeleteRequest.Key.sk.S));
86
+ expect(batches).toEqual([["tag-a", "tag-b"], ["tag-b"]]);
87
+ });
70
88
  });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9wb3N0LWRlcGxveS9wcnVuZS1yZXZhbGlkYXRpb24tdGFibGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUM7SUFDakQsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNuRCxDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMsQ0FBQztBQUVKLDhEQUtrQztBQUNsQyx5RUFBb0U7QUFFcEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFFbkM7OztHQUdHO0FBQ0gsU0FBUyxTQUFTLENBQ2hCLGVBQXVCLEVBQ3ZCLElBQThCLEVBQzlCLFFBQVEsR0FBRyxDQUFDO0lBRVosTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtRQUNsRCxJQUFJLE9BQU8sWUFBWSxnQ0FBYyxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxJQUFJLE9BQU8sWUFBWSw4QkFBWSxFQUFFLENBQUM7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QUMsSUFBSSxFQUFFLENBQ1QsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vLyBPbmx5IHRoZSBjbGllbnQgaXMgbW9ja2VkLCBhcyBpbiBgcHJ1bmUtY2FjaGUtYnVja2V0LnRlc3QudHNgOiB0aGUgbW9kdWxlXG4vLyBjb25zdHJ1Y3RzIGl0cyBjbGllbnQgYXQgbW9kdWxlIHNjb3BlLCBiZWZvcmUgdGhlIG1vY2sgdmFyaWFibGVzIGV4aXN0LlxuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbChcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKSxcbiAgRHluYW1vREJDbGllbnQ6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBzZW5kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBob2xkZXIuc2VuZCguLi5hcmdzKSxcbiAgfSkpLFxufSkpO1xuXG5pbXBvcnQge1xuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmQsXG4gIEdldEl0ZW1Db21tYW5kLFxuICBQdXRJdGVtQ29tbWFuZCxcbiAgUXVlcnlDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCI7XG5pbXBvcnQgeyBwcnVuZVJldmFsaWRhdGlvblRhYmxlIH0gZnJvbSBcIi4vcHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlXCI7XG5cbmNvbnN0IGhvbGRlciA9IHsgc2VuZDogamVzdC5mbigpIH07XG5cbi8qKlxuICogQSBmYWtlIHRhYmxlIHdob3NlIG1ldGFkYXRhIG5hbWVzIGBwcmV2aW91c0J1aWxkSWRgOyBlYWNoIFF1ZXJ5IHBhZ2VzXG4gKiBgcGFnZVNpemVgIHJvd3MgYXQgYSB0aW1lIG9mIHRoZSBwYXJ0aXRpb24gYXNrZWQgZm9yLlxuICovXG5mdW5jdGlvbiBzdHViVGFibGUoXG4gIHByZXZpb3VzQnVpbGRJZDogc3RyaW5nLFxuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sXG4gIHBhZ2VTaXplID0gMixcbik6IHZvaWQge1xuICBob2xkZXIuc2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+IHtcbiAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIEdldEl0ZW1Db21tYW5kKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgSXRlbTogeyBidWlsZElkOiB7IFM6IHByZXZpb3VzQnVpbGRJZCB9IH0gfSk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kKSB7XG4gICAgICBjb25zdCBwayA9IGNvbW1hbmQuaW5wdXQuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyFbXCI6cGtcIl0uUyE7XG4gICAgICBjb25zdCBvZmZzZXQgPSBOdW1iZXIoY29tbWFuZC5pbnB1dC5FeGNsdXNpdmVTdGFydEtleT8ub2Zmc2V0Lk4gPz8gMCk7XG4gICAgICBjb25zdCBza3MgPSByb3dzW3BrXSA/PyBbXTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBJdGVtczogc2tzXG4gICAgICAgICAgLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgcGFnZVNpemUpXG4gICAgICAgICAgLm1hcCgoc2spID0+ICh7IHBrOiB7IFM6IHBrIH0sIHNrOiB7IFM6IHNrIH0gfSkpLFxuICAgICAgICBMYXN0RXZhbHVhdGVkS2V5OlxuICAgICAgICAgIG9mZnNldCArIHBhZ2VTaXplIDwgc2tzLmxlbmd0aFxuICAgICAgICAgICAgPyB7IG9mZnNldDogeyBOOiBTdHJpbmcob2Zmc2V0ICsgcGFnZVNpemUpIH0gfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZW50PFQ+KHR5cGU6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUW10ge1xuICByZXR1cm4gaG9sZGVyLnNlbmQubW9jay5jYWxsc1xuICAgIC5tYXAoKFtjb21tYW5kXSkgPT4gY29tbWFuZClcbiAgICAuZmlsdGVyKChjb21tYW5kKTogY29tbWFuZCBpcyBUID0+IGNvbW1hbmQgaW5zdGFuY2VvZiB0eXBlKTtcbn1cblxuZGVzY3JpYmUoXCJwcnVuZVJldmFsaWRhdGlvblRhYmxlXCIsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaG9sZGVyLnNlbmQubW9ja1Jlc2V0KCk7XG4gIH0pO1xuXG4gIGl0KFwiZGVsZXRlcyB0aGUgcHJldmlvdXMgYnVpbGQncyBtYXJrZXIgYW5kIGxvZyByb3dzLCB0aGVuIHJlY29yZHMgdGhlIGN1cnJlbnQgYnVpbGRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHN0dWJUYWJsZShcIm9sZFwiLCB7XG4gICAgICBvbGQ6IFtcInRhZy1hXCIsIFwidGFnLWJcIiwgXCJ0YWctY1wiXSxcbiAgICAgIFwib2xkI2xvZ1wiOiBbXCIwMDAwMDAwMDAwMDAwMDEjdGFnLWFcIiwgXCIwMDAwMDAwMDAwMDAwMDIjdGFnLWJcIl0sXG4gICAgICBjdXJyZW50OiBbXCJ0YWctYVwiXSxcbiAgICAgIFwiY3VycmVudCNsb2dcIjogW1wiMDAwMDAwMDAwMDAwMDAzI3RhZy1hXCJdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgcHJ1bmVSZXZhbGlkYXRpb25UYWJsZSh7XG4gICAgICB0YWJsZU5hbWU6IFwidGFibGVcIixcbiAgICAgIGN1cnJlbnRCdWlsZElkOiBcImN1cnJlbnRcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlbGV0ZWQgPSBzZW50KEJhdGNoV3JpdGVJdGVtQ29tbWFuZCkuZmxhdE1hcCgoY29tbWFuZCkgPT5cbiAgICAgIGNvbW1hbmQuaW5wdXQuUmVxdWVzdEl0ZW1zIS50YWJsZS5tYXAoXG4gICAgICAgIChyZXF1ZXN0KSA9PlxuICAgICAgICAgIGAke3JlcXVlc3QuRGVsZXRlUmVxdWVzdCEuS2V5IS5way5TfS8ke3JlcXVlc3QuRGVsZXRlUmVxdWVzdCEuS2V5IS5zay5TfWAsXG4gICAgICApLFxuICAgICk7XG4gICAgZXhwZWN0KGRlbGV0ZWQuc29ydCgpKS50b0VxdWFsKFxuICAgICAgW1xuICAgICAgICBcIm9sZC90YWctYVwiLFxuICAgICAgICBcIm9sZC90YWctYlwiLFxuICAgICAgICBcIm9sZC90YWctY1wiLFxuICAgICAgICBcIm9sZCNsb2cvMDAwMDAwMDAwMDAwMDAxI3RhZy1hXCIsXG4gICAgICAgIFwib2xkI2xvZy8wMDAwMDAwMDAwMDAwMDIjdGFnLWJcIixcbiAgICAgIF0uc29ydCgpLFxuICAgICk7XG4gICAgZXhwZWN0KHNlbnQoUHV0SXRlbUNvbW1hbmQpWzBdLmlucHV0Lkl0ZW0hLmJ1aWxkSWQuUykudG9CZShcImN1cnJlbnRcIik7XG4gIH0pO1xufSk7XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtcmV2YWxpZGF0aW9uLXRhYmxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9wb3N0LWRlcGxveS9wcnVuZS1yZXZhbGlkYXRpb24tdGFibGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUM7SUFDakQsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNuRCxDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMsQ0FBQztBQUVKLDhEQUtrQztBQUNsQyx5RUFBb0U7QUFFcEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFFbkM7OztHQUdHO0FBQ0gsU0FBUyxTQUFTLENBQ2hCLGVBQXVCLEVBQ3ZCLElBQThCLEVBQzlCLFFBQVEsR0FBRyxDQUFDO0lBRVosTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtRQUNsRCxJQUFJLE9BQU8sWUFBWSxnQ0FBYyxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxJQUFJLE9BQU8sWUFBWSw4QkFBWSxFQUFFLENBQUM7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QUUsRUFBRSxDQUMxRCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNuQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWMsQ0FBQyxHQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDOUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8vIE9ubHkgdGhlIGNsaWVudCBpcyBtb2NrZWQsIGFzIGluIGBwcnVuZS1jYWNoZS1idWNrZXQudGVzdC50c2A6IHRoZSBtb2R1bGVcbi8vIGNvbnN0cnVjdHMgaXRzIGNsaWVudCBhdCBtb2R1bGUgc2NvcGUsIGJlZm9yZSB0aGUgbW9jayB2YXJpYWJsZXMgZXhpc3QuXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIiwgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpLFxuICBEeW5hbW9EQkNsaWVudDogamVzdC5mbigoKSA9PiAoe1xuICAgIHNlbmQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IGhvbGRlci5zZW5kKC4uLmFyZ3MpLFxuICB9KSksXG59KSk7XG5cbmltcG9ydCB7XG4gIEJhdGNoV3JpdGVJdGVtQ29tbWFuZCxcbiAgR2V0SXRlbUNvbW1hbmQsXG4gIFB1dEl0ZW1Db21tYW5kLFxuICBRdWVyeUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7IHBydW5lUmV2YWxpZGF0aW9uVGFibGUgfSBmcm9tIFwiLi9wcnVuZS1yZXZhbGlkYXRpb24tdGFibGVcIjtcblxuY29uc3QgaG9sZGVyID0geyBzZW5kOiBqZXN0LmZuKCkgfTtcblxuLyoqXG4gKiBBIGZha2UgdGFibGUgd2hvc2UgbWV0YWRhdGEgbmFtZXMgYHByZXZpb3VzQnVpbGRJZGA7IGVhY2ggUXVlcnkgcGFnZXNcbiAqIGBwYWdlU2l6ZWAgcm93cyBhdCBhIHRpbWUgb2YgdGhlIHBhcnRpdGlvbiBhc2tlZCBmb3IuXG4gKi9cbmZ1bmN0aW9uIHN0dWJUYWJsZShcbiAgcHJldmlvdXNCdWlsZElkOiBzdHJpbmcsXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPixcbiAgcGFnZVNpemUgPSAyLFxuKTogdm9pZCB7XG4gIGhvbGRlci5zZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgR2V0SXRlbUNvbW1hbmQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBJdGVtOiB7IGJ1aWxkSWQ6IHsgUzogcHJldmlvdXNCdWlsZElkIH0gfSB9KTtcbiAgICB9XG4gICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmQpIHtcbiAgICAgIGNvbnN0IHBrID0gY29tbWFuZC5pbnB1dC5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIVtcIjpwa1wiXS5TITtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE51bWJlcihjb21tYW5kLmlucHV0LkV4Y2x1c2l2ZVN0YXJ0S2V5Py5vZmZzZXQuTiA/PyAwKTtcbiAgICAgIGNvbnN0IHNrcyA9IHJvd3NbcGtdID8/IFtdO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIEl0ZW1zOiBza3NcbiAgICAgICAgICAuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBwYWdlU2l6ZSlcbiAgICAgICAgICAubWFwKChzaykgPT4gKHsgcGs6IHsgUzogcGsgfSwgc2s6IHsgUzogc2sgfSB9KSksXG4gICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6XG4gICAgICAgICAgb2Zmc2V0ICsgcGFnZVNpemUgPCBza3MubGVuZ3RoXG4gICAgICAgICAgICA/IHsgb2Zmc2V0OiB7IE46IFN0cmluZyhvZmZzZXQgKyBwYWdlU2l6ZSkgfSB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlbnQ8VD4odHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFRbXSB7XG4gIHJldHVybiBob2xkZXIuc2VuZC5tb2NrLmNhbGxzXG4gICAgLm1hcCgoW2NvbW1hbmRdKSA9PiBjb21tYW5kKVxuICAgIC5maWx0ZXIoKGNvbW1hbmQpOiBjb21tYW5kIGlzIFQgPT4gY29tbWFuZCBpbnN0YW5jZW9mIHR5cGUpO1xufVxuXG5kZXNjcmliZShcInBydW5lUmV2YWxpZGF0aW9uVGFibGVcIiwgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBob2xkZXIuc2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgaXQoXCJkZWxldGVzIHRoZSBwcmV2aW91cyBidWlsZCdzIG1hcmtlciBhbmQgbG9nIHJvd3MsIHRoZW4gcmVjb3JkcyB0aGUgY3VycmVudCBidWlsZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc3R1YlRhYmxlKFwib2xkXCIsIHtcbiAgICAgIG9sZDogW1widGFnLWFcIiwgXCJ0YWctYlwiLCBcInRhZy1jXCJdLFxuICAgICAgXCJvbGQjbG9nXCI6IFtcIjAwMDAwMDAwMDAwMDAwMSN0YWctYVwiLCBcIjAwMDAwMDAwMDAwMDAwMiN0YWctYlwiXSxcbiAgICAgIGN1cnJlbnQ6IFtcInRhZy1hXCJdLFxuICAgICAgXCJjdXJyZW50I2xvZ1wiOiBbXCIwMDAwMDAwMDAwMDAwMDMjdGFnLWFcIl0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBwcnVuZVJldmFsaWRhdGlvblRhYmxlKHtcbiAgICAgIHRhYmxlTmFtZTogXCJ0YWJsZVwiLFxuICAgICAgY3VycmVudEJ1aWxkSWQ6IFwiY3VycmVudFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVsZXRlZCA9IHNlbnQoQmF0Y2hXcml0ZUl0ZW1Db21tYW5kKS5mbGF0TWFwKChjb21tYW5kKSA9PlxuICAgICAgY29tbWFuZC5pbnB1dC5SZXF1ZXN0SXRlbXMhLnRhYmxlLm1hcChcbiAgICAgICAgKHJlcXVlc3QpID0+XG4gICAgICAgICAgYCR7cmVxdWVzdC5EZWxldGVSZXF1ZXN0IS5LZXkhLnBrLlN9LyR7cmVxdWVzdC5EZWxldGVSZXF1ZXN0IS5LZXkhLnNrLlN9YCxcbiAgICAgICksXG4gICAgKTtcbiAgICBleHBlY3QoZGVsZXRlZC5zb3J0KCkpLnRvRXF1YWwoXG4gICAgICBbXG4gICAgICAgIFwib2xkL3RhZy1hXCIsXG4gICAgICAgIFwib2xkL3RhZy1iXCIsXG4gICAgICAgIFwib2xkL3RhZy1jXCIsXG4gICAgICAgIFwib2xkI2xvZy8wMDAwMDAwMDAwMDAwMDEjdGFnLWFcIixcbiAgICAgICAgXCJvbGQjbG9nLzAwMDAwMDAwMDAwMDAwMiN0YWctYlwiLFxuICAgICAgXS5zb3J0KCksXG4gICAgKTtcbiAgICBleHBlY3Qoc2VudChQdXRJdGVtQ29tbWFuZClbMF0uaW5wdXQuSXRlbSEuYnVpbGRJZC5TKS50b0JlKFwiY3VycmVudFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZW5kcyB0aGUgcm93cyBEeW5hbW9EQiBsZWZ0IHVucHJvY2Vzc2VkIGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBzdHViVGFibGUoXCJvbGRcIiwgeyBvbGQ6IFtcInRhZy1hXCIsIFwidGFnLWJcIl0gfSk7XG4gICAgY29uc3Qgc3R1YiA9IGhvbGRlci5zZW5kLmdldE1vY2tJbXBsZW1lbnRhdGlvbigpITtcbiAgICBsZXQgd3JpdGVzID0gMDtcbiAgICBob2xkZXIuc2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kICYmIHdyaXRlcysrID09PSAwKSB7XG4gICAgICAgIGNvbnN0IFssIHNlY29uZF0gPSBjb21tYW5kLmlucHV0LlJlcXVlc3RJdGVtcyEudGFibGU7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBVbnByb2Nlc3NlZEl0ZW1zOiB7IHRhYmxlOiBbc2Vjb25kXSB9IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0dWIoY29tbWFuZCk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBwcnVuZVJldmFsaWRhdGlvblRhYmxlKHtcbiAgICAgIHRhYmxlTmFtZTogXCJ0YWJsZVwiLFxuICAgICAgY3VycmVudEJ1aWxkSWQ6IFwiY3VycmVudFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmF0Y2hlcyA9IHNlbnQoQmF0Y2hXcml0ZUl0ZW1Db21tYW5kKS5tYXAoKGNvbW1hbmQpID0+XG4gICAgICBjb21tYW5kLmlucHV0LlJlcXVlc3RJdGVtcyEudGFibGUubWFwKFxuICAgICAgICAocmVxdWVzdCkgPT4gcmVxdWVzdC5EZWxldGVSZXF1ZXN0IS5LZXkhLnNrLlMsXG4gICAgICApLFxuICAgICk7XG4gICAgZXhwZWN0KGJhdGNoZXMpLnRvRXF1YWwoW1tcInRhZy1hXCIsIFwidGFnLWJcIl0sIFtcInRhZy1iXCJdXSk7XG4gIH0pO1xufSk7XG4iXX0=
package/lib/nextjs-api.js CHANGED
@@ -22,7 +22,7 @@ const API_PATH_PART = /^[a-zA-Z0-9:._\-$]+$/;
22
22
  * Creates an API Gateway REST API for Next.js applications
23
23
  */
24
24
  class NextjsApi extends constructs_1.Construct {
25
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.7.6" };
25
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.7.7" };
26
26
  /**
27
27
  * The API Gateway REST API
28
28
  */
@@ -65,7 +65,7 @@ function deploymentArchitecture(props) {
65
65
  * @link https://nextjs.org/docs/pages/api-reference/next-config-js/output
66
66
  */
67
67
  class NextjsBuild extends constructs_1.Construct {
68
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.7.6" };
68
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.7.7" };
69
69
  /**
70
70
  * Unique id for this deployment. Used to partition cache storage and as
71
71
  * metadata for static assets in S3 bucket.
@@ -86,7 +86,7 @@ function sizeOfDirectory(dir) {
86
86
  * Next.js Cache construct providing unified S3 and DynamoDB cache management.
87
87
  */
88
88
  class NextjsCache extends constructs_1.Construct {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.6" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.7" };
90
90
  cacheBucket;
91
91
  revalidationTable;
92
92
  buildId;
@@ -19,7 +19,7 @@ const constants_1 = require("../constants");
19
19
  * Fargate.
20
20
  */
21
21
  class NextjsContainers extends constructs_1.Construct {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.6" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.7" };
23
23
  albFargateService;
24
24
  ecsCluster;
25
25
  url;
@@ -23,7 +23,7 @@ const zip_directory_1 = require("../utils/zip-directory");
23
23
  * `awslambda.streamifyResponse` directly.
24
24
  */
25
25
  class NextjsFunctions extends constructs_1.Construct {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.6" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.7" };
27
27
  /**
28
28
  * The `default` group's function: the one the distribution's default behavior
29
29
  * targets, and the only one at all unless `functionGroups` is used.
@@ -11,7 +11,7 @@ const function_groups_1 = require("./adapter/function-groups");
11
11
  const constants_1 = require("./constants");
12
12
  const base_path_1 = require("./utils/base-path");
13
13
  class NextjsDistribution extends constructs_1.Construct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.7.6" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.7.7" };
15
15
  distribution;
16
16
  props;
17
17
  /**
@@ -18,7 +18,7 @@ const base_path_1 = require("./utils/base-path");
18
18
  * current build id AND are older than `msTtl`
19
19
  */
20
20
  class NextjsPostDeploy extends constructs_1.Construct {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.6" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.7" };
22
22
  customResource;
23
23
  lambdaFunction;
24
24
  props;
@@ -29,7 +29,7 @@ function staticAssetsObjectsPattern(keyPrefix) {
29
29
  * Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
30
30
  */
31
31
  class NextjsStaticAssets extends constructs_1.Construct {
32
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.6" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.7" };
33
33
  bucket;
34
34
  deployment;
35
35
  /**
@@ -15,7 +15,7 @@ const base_path_1 = require("../utils/base-path");
15
15
  * Base class for all Next.js root constructs
16
16
  */
17
17
  class NextjsBaseConstruct extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.6" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.7" };
19
19
  nextjsBuild;
20
20
  nextjsStaticAssets;
21
21
  nextjsCache;
@@ -14,7 +14,7 @@ const base_path_1 = require("../utils/base-path");
14
14
  * for containers.
15
15
  */
16
16
  class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
17
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.6" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.7" };
18
18
  nextjsContainers;
19
19
  nextjsDistribution;
20
20
  nextjsPostDeploy;
@@ -17,7 +17,7 @@ const base_path_1 = require("../utils/base-path");
17
17
  * for functions.
18
18
  */
19
19
  class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.6" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.7" };
21
21
  nextjsFunctions;
22
22
  nextjsDistribution;
23
23
  nextjsPostDeploy;
@@ -13,7 +13,7 @@ const base_path_1 = require("../utils/base-path");
13
13
  * for containers.
14
14
  */
15
15
  class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.6" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.7" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
19
  /**
@@ -11,7 +11,7 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
11
11
  * for routing requests and AWS Lambda Functions for server-side rendering.
12
12
  */
13
13
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.6" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.7" };
15
15
  nextjsFunctions;
16
16
  nextjsApi;
17
17
  nextjsPostDeploy;