cdk-nextjs 0.6.1 → 0.7.0

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 (266) hide show
  1. package/.jsii +2467 -2714
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +1725 -1909
  4. package/CLAUDE.md +2 -1
  5. package/README.md +429 -130
  6. package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +152 -170
  7. package/assets/lambdas/redeploy-stage/redeploy-stage.lambda/index.js +875 -0
  8. package/docs/adapter-runtime.md +185 -0
  9. package/docs/breaking-changes.md +687 -4
  10. package/docs/caching-guide.md +156 -112
  11. package/docs/cdk-nextjs-cfn-exec-policy.json +2 -1
  12. package/docs/development-guide.md +1 -1
  13. package/docs/harness-coverage.md +598 -0
  14. package/docs/init-cache-deployment.md +32 -1
  15. package/docs/next-build-output-guide.md +30 -20
  16. package/examples/README.md +5 -1
  17. package/lib/adapter/__fixtures__/app-playground-base-path.json +4926 -0
  18. package/lib/adapter/__fixtures__/app-playground.json +4917 -0
  19. package/lib/adapter/__fixtures__/pages-i18n.json +1728 -0
  20. package/lib/adapter/adapter.mjs +1548 -185
  21. package/lib/adapter/adapter.test.js +106 -0
  22. package/lib/adapter/aws-cache-store.d.ts +489 -0
  23. package/lib/adapter/aws-cache-store.js +1004 -0
  24. package/lib/adapter/aws-cache-store.test.d.ts +1 -0
  25. package/lib/adapter/aws-cache-store.test.js +361 -0
  26. package/lib/adapter/build-outputs.d.ts +80 -0
  27. package/lib/adapter/build-outputs.js +852 -0
  28. package/lib/adapter/build-outputs.test.d.ts +1 -0
  29. package/lib/adapter/build-outputs.test.js +861 -0
  30. package/lib/adapter/cache-handler.d.ts +9 -2
  31. package/lib/adapter/cache-handler.js +72 -96
  32. package/lib/adapter/cache-handler.mjs +18956 -17774
  33. package/lib/adapter/cache-handler.test.js +263 -31
  34. package/lib/adapter/cache-kinds.d.ts +32 -0
  35. package/lib/adapter/cache-kinds.js +35 -0
  36. package/lib/adapter/cache-kinds.test.d.ts +1 -0
  37. package/lib/adapter/cache-kinds.test.js +69 -0
  38. package/lib/adapter/cache-utils.d.ts +90 -0
  39. package/lib/adapter/cache-utils.js +199 -4
  40. package/lib/adapter/cache-utils.test.d.ts +1 -0
  41. package/lib/adapter/cache-utils.test.js +179 -0
  42. package/lib/adapter/function-groups.d.ts +215 -0
  43. package/lib/adapter/function-groups.js +1099 -0
  44. package/lib/adapter/function-groups.test.d.ts +1 -0
  45. package/lib/adapter/function-groups.test.js +743 -0
  46. package/lib/adapter/init-cache.d.ts +6 -0
  47. package/lib/adapter/init-cache.js +245 -0
  48. package/lib/adapter/init-cache.test.d.ts +1 -0
  49. package/lib/adapter/init-cache.test.js +137 -0
  50. package/lib/adapter/local-file-cache-handler.d.ts +23 -0
  51. package/lib/adapter/local-file-cache-handler.js +52 -1
  52. package/lib/adapter/memory-cache-handler.d.ts +26 -17
  53. package/lib/adapter/memory-cache-handler.js +32 -50
  54. package/lib/adapter/memory-cache-handler.test.js +105 -85
  55. package/lib/adapter/s3-cache-handler.d.ts +179 -40
  56. package/lib/adapter/s3-cache-handler.js +807 -277
  57. package/lib/adapter/s3-cache-handler.test.js +1186 -31
  58. package/lib/adapter/use-cache-common.d.ts +90 -0
  59. package/lib/adapter/use-cache-common.js +250 -0
  60. package/lib/adapter/use-cache-common.test.d.ts +1 -0
  61. package/lib/adapter/use-cache-common.test.js +646 -0
  62. package/lib/adapter/use-cache-default-handler.d.ts +24 -0
  63. package/lib/adapter/use-cache-default-handler.js +90 -0
  64. package/lib/adapter/use-cache-default-handler.mjs +38645 -0
  65. package/lib/adapter/use-cache-handlers.test.d.ts +1 -0
  66. package/lib/adapter/use-cache-handlers.test.js +349 -0
  67. package/lib/adapter/use-cache-remote-handler.d.ts +26 -0
  68. package/lib/adapter/use-cache-remote-handler.js +186 -0
  69. package/lib/{image-optimization/handler.mjs → adapter/use-cache-remote-handler.mjs} +33572 -38798
  70. package/lib/generated-structs/OptionalNextjsApiProps.d.ts +59 -0
  71. package/lib/generated-structs/OptionalNextjsApiProps.js +3 -0
  72. package/lib/generated-structs/OptionalNextjsCacheProps.d.ts +15 -6
  73. package/lib/generated-structs/OptionalNextjsCacheProps.js +1 -1
  74. package/lib/generated-structs/OptionalNextjsContainersProps.d.ts +25 -11
  75. package/lib/generated-structs/OptionalNextjsContainersProps.js +1 -1
  76. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +31 -9
  77. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  78. package/lib/generated-structs/OptionalNextjsPostDeployProps.d.ts +13 -0
  79. package/lib/generated-structs/OptionalNextjsPostDeployProps.js +1 -1
  80. package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.d.ts +11 -2
  81. package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.js +1 -1
  82. package/lib/index.d.ts +6 -7
  83. package/lib/index.js +2 -4
  84. package/lib/lambdas/post-deploy/post-deploy.lambda.js +3 -2
  85. package/lib/lambdas/post-deploy/prune-cache-bucket.d.ts +7 -3
  86. package/lib/lambdas/post-deploy/prune-cache-bucket.js +57 -71
  87. package/lib/lambdas/post-deploy/prune-cache-bucket.test.d.ts +1 -0
  88. package/lib/lambdas/post-deploy/prune-cache-bucket.test.js +114 -0
  89. package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +1 -0
  90. package/lib/lambdas/post-deploy/prune-revalidation-table.js +23 -31
  91. package/lib/lambdas/post-deploy/prune-revalidation-table.test.d.ts +1 -0
  92. package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +71 -0
  93. package/lib/lambdas/post-deploy/prune-s3.d.ts +19 -3
  94. package/lib/lambdas/post-deploy/prune-s3.js +54 -15
  95. package/lib/lambdas/post-deploy/prune-s3.test.d.ts +1 -0
  96. package/lib/lambdas/post-deploy/prune-s3.test.js +255 -0
  97. package/lib/lambdas/redeploy-stage/redeploy-stage-function.d.ts +13 -0
  98. package/lib/lambdas/redeploy-stage/redeploy-stage-function.js +55 -0
  99. package/lib/lambdas/redeploy-stage/redeploy-stage.d.ts +24 -0
  100. package/lib/lambdas/redeploy-stage/redeploy-stage.js +68 -0
  101. package/lib/lambdas/redeploy-stage/redeploy-stage.lambda.d.ts +20 -0
  102. package/lib/lambdas/redeploy-stage/redeploy-stage.lambda.js +24 -0
  103. package/lib/lambdas/redeploy-stage/redeploy-stage.test.d.ts +1 -0
  104. package/lib/lambdas/redeploy-stage/redeploy-stage.test.js +93 -0
  105. package/lib/nextjs-api.d.ts +107 -18
  106. package/lib/nextjs-api.js +349 -39
  107. package/lib/nextjs-api.test.js +582 -1
  108. package/lib/nextjs-build/global-containers.Dockerfile +15 -10
  109. package/lib/nextjs-build/nextjs-build.d.ts +339 -63
  110. package/lib/nextjs-build/nextjs-build.js +684 -327
  111. package/lib/nextjs-build/nextjs-build.test.d.ts +1 -0
  112. package/lib/nextjs-build/nextjs-build.test.js +412 -0
  113. package/lib/nextjs-build/patch-fetch.js +1 -1
  114. package/lib/nextjs-build/patch-fetch.test.js +166 -11
  115. package/lib/nextjs-build/regional-containers.Dockerfile +17 -10
  116. package/lib/nextjs-cache.d.ts +82 -4
  117. package/lib/nextjs-cache.js +186 -10
  118. package/lib/nextjs-cache.test.js +176 -1
  119. package/lib/nextjs-compute/nextjs-compute-base-props.d.ts +21 -8
  120. package/lib/nextjs-compute/nextjs-compute-base-props.js +41 -1
  121. package/lib/nextjs-compute/nextjs-compute-base-props.test.d.ts +1 -0
  122. package/lib/nextjs-compute/nextjs-compute-base-props.test.js +44 -0
  123. package/lib/nextjs-compute/nextjs-containers.d.ts +19 -0
  124. package/lib/nextjs-compute/nextjs-containers.js +57 -20
  125. package/lib/nextjs-compute/nextjs-functions.d.ts +122 -7
  126. package/lib/nextjs-compute/nextjs-functions.js +113 -67
  127. package/lib/nextjs-compute/nextjs-functions.test.d.ts +1 -0
  128. package/lib/nextjs-compute/nextjs-functions.test.js +99 -0
  129. package/lib/nextjs-distribution.d.ts +194 -23
  130. package/lib/nextjs-distribution.js +535 -62
  131. package/lib/nextjs-distribution.test.d.ts +1 -0
  132. package/lib/nextjs-distribution.test.js +697 -0
  133. package/lib/nextjs-post-deploy.d.ts +23 -3
  134. package/lib/nextjs-post-deploy.js +14 -10
  135. package/lib/nextjs-post-deploy.test.d.ts +1 -0
  136. package/lib/nextjs-post-deploy.test.js +34 -0
  137. package/lib/nextjs-static-assets.d.ts +23 -4
  138. package/lib/nextjs-static-assets.js +29 -6
  139. package/lib/nextjs-static-assets.test.js +20 -1
  140. package/lib/root-constructs/nextjs-base-construct.d.ts +105 -45
  141. package/lib/root-constructs/nextjs-base-construct.js +144 -34
  142. package/lib/root-constructs/nextjs-global-containers.d.ts +18 -20
  143. package/lib/root-constructs/nextjs-global-containers.js +20 -70
  144. package/lib/root-constructs/nextjs-global-functions.d.ts +26 -28
  145. package/lib/root-constructs/nextjs-global-functions.js +52 -69
  146. package/lib/root-constructs/nextjs-regional-containers.d.ts +25 -5
  147. package/lib/root-constructs/nextjs-regional-containers.js +17 -15
  148. package/lib/root-constructs/nextjs-regional-functions.d.ts +22 -18
  149. package/lib/root-constructs/nextjs-regional-functions.js +8 -25
  150. package/lib/runtime/api-gateway-path.d.ts +34 -0
  151. package/lib/runtime/api-gateway-path.js +71 -0
  152. package/lib/runtime/api-gateway-path.test.d.ts +1 -0
  153. package/lib/runtime/api-gateway-path.test.js +65 -0
  154. package/lib/runtime/case-redirect.d.ts +22 -0
  155. package/lib/runtime/case-redirect.js +63 -0
  156. package/lib/runtime/case-redirect.test.d.ts +1 -0
  157. package/lib/runtime/case-redirect.test.js +32 -0
  158. package/lib/runtime/core.d.ts +234 -0
  159. package/lib/runtime/core.js +1213 -0
  160. package/lib/runtime/core.test.d.ts +1 -0
  161. package/lib/runtime/core.test.js +1678 -0
  162. package/lib/runtime/deployment-root.d.ts +13 -0
  163. package/lib/runtime/deployment-root.js +29 -0
  164. package/lib/runtime/dispatch.d.ts +331 -0
  165. package/lib/runtime/dispatch.js +751 -0
  166. package/lib/runtime/dispatch.test.d.ts +1 -0
  167. package/lib/runtime/dispatch.test.js +853 -0
  168. package/lib/runtime/entrypoints.d.ts +57 -0
  169. package/lib/runtime/entrypoints.js +115 -0
  170. package/lib/runtime/http/abort-signal.d.ts +6 -0
  171. package/lib/runtime/http/abort-signal.js +19 -0
  172. package/lib/runtime/http/abort-signal.test.d.ts +1 -0
  173. package/lib/runtime/http/abort-signal.test.js +49 -0
  174. package/lib/runtime/http/node-server.d.ts +38 -0
  175. package/lib/runtime/http/node-server.js +99 -0
  176. package/lib/runtime/http/node-server.test.d.ts +1 -0
  177. package/lib/runtime/http/node-server.test.js +96 -0
  178. package/lib/runtime/http/node-sink.d.ts +16 -0
  179. package/lib/runtime/http/node-sink.js +48 -0
  180. package/lib/runtime/http/node-sink.test.d.ts +1 -0
  181. package/lib/runtime/http/node-sink.test.js +66 -0
  182. package/lib/runtime/http/request.d.ts +62 -0
  183. package/lib/runtime/http/request.js +134 -0
  184. package/lib/runtime/http/request.test.d.ts +1 -0
  185. package/lib/runtime/http/request.test.js +103 -0
  186. package/lib/runtime/http/response.d.ts +77 -0
  187. package/lib/runtime/http/response.js +229 -0
  188. package/lib/runtime/http/response.test.d.ts +1 -0
  189. package/lib/runtime/http/response.test.js +178 -0
  190. package/lib/runtime/http/sink.d.ts +73 -0
  191. package/lib/runtime/http/sink.js +188 -0
  192. package/lib/runtime/http/sink.test.d.ts +1 -0
  193. package/lib/runtime/http/sink.test.js +257 -0
  194. package/lib/runtime/image-utils.d.ts +78 -0
  195. package/lib/runtime/image-utils.js +129 -0
  196. package/lib/runtime/image-utils.test.d.ts +1 -0
  197. package/lib/runtime/image-utils.test.js +237 -0
  198. package/lib/runtime/image.d.ts +76 -0
  199. package/lib/runtime/image.js +296 -0
  200. package/lib/runtime/image.test.d.ts +1 -0
  201. package/lib/runtime/image.test.js +405 -0
  202. package/lib/runtime/lambda-event.d.ts +4 -0
  203. package/lib/runtime/lambda-event.js +113 -0
  204. package/lib/runtime/lambda-event.test.d.ts +1 -0
  205. package/lib/runtime/lambda-event.test.js +119 -0
  206. package/lib/runtime/lambda.mjs +41595 -0
  207. package/lib/runtime/load-module.d.ts +8 -0
  208. package/lib/runtime/load-module.js +35 -0
  209. package/lib/runtime/manifest.d.ts +215 -0
  210. package/lib/runtime/manifest.js +118 -0
  211. package/lib/runtime/middleware.d.ts +43 -0
  212. package/lib/runtime/middleware.js +113 -0
  213. package/lib/runtime/middleware.test.d.ts +1 -0
  214. package/lib/runtime/middleware.test.js +259 -0
  215. package/lib/runtime/next-modules.d.ts +55 -0
  216. package/lib/runtime/next-modules.js +124 -0
  217. package/lib/runtime/next-modules.test.d.ts +1 -0
  218. package/lib/runtime/next-modules.test.js +34 -0
  219. package/lib/runtime/public-files.d.ts +32 -0
  220. package/lib/runtime/public-files.js +117 -0
  221. package/lib/runtime/public-files.test.d.ts +1 -0
  222. package/lib/runtime/public-files.test.js +97 -0
  223. package/lib/runtime/server.mjs +41588 -0
  224. package/lib/runtime/static-files.d.ts +50 -0
  225. package/lib/runtime/static-files.js +266 -0
  226. package/lib/runtime/static-files.test.d.ts +1 -0
  227. package/lib/runtime/static-files.test.js +118 -0
  228. package/lib/runtime/util.d.ts +28 -0
  229. package/lib/runtime/util.js +79 -0
  230. package/lib/utils/base-path.d.ts +123 -11
  231. package/lib/utils/base-path.js +276 -39
  232. package/lib/utils/base-path.test.js +275 -50
  233. package/lib/utils/get-architecture.d.ts +7 -8
  234. package/lib/utils/get-architecture.js +12 -13
  235. package/lib/utils/zip-directory.d.ts +14 -0
  236. package/lib/utils/zip-directory.js +121 -0
  237. package/lib/utils/zip-directory.test.d.ts +1 -0
  238. package/lib/utils/zip-directory.test.js +99 -0
  239. package/package.json +22 -3
  240. package/scripts/capture-adapter-fixture.mjs +325 -0
  241. package/scripts/e2e-deploy.sh +398 -0
  242. package/scripts/e2e-harness/README.md +707 -0
  243. package/scripts/e2e-harness/app.js +370 -0
  244. package/scripts/e2e-harness/common.sh +249 -0
  245. package/scripts/e2e-harness/screen.mjs +302 -0
  246. package/scripts/e2e-harness/stage-proxy.mjs +145 -0
  247. package/scripts/e2e-harness/type-filters.mjs +47 -0
  248. package/scripts/e2e-logs.sh +75 -0
  249. package/scripts/e2e-offline.sh +91 -0
  250. package/scripts/e2e-sweep.sh +370 -0
  251. package/scripts/e2e-warm.sh +114 -0
  252. package/scripts/zero-config-build.mjs +418 -0
  253. package/docs/1k-concurrent-users-executions.png +0 -0
  254. package/docs/plans/adapter-runtime-release.md +0 -362
  255. package/docs/plans/phase-0-image-function-opt-in.md +0 -295
  256. package/lib/generated-structs/OptionalDockerImageFunctionProps.d.ts +0 -425
  257. package/lib/generated-structs/OptionalDockerImageFunctionProps.js +0 -3
  258. package/lib/image-optimization/handler-utils.d.ts +0 -34
  259. package/lib/image-optimization/handler-utils.js +0 -83
  260. package/lib/image-optimization/handler-utils.test.js +0 -178
  261. package/lib/nextjs-build/functions.Dockerfile +0 -31
  262. package/lib/nextjs-compute/nextjs-image-function.d.ts +0 -53
  263. package/lib/nextjs-compute/nextjs-image-function.js +0 -59
  264. package/lib/utils/experimental-flags.d.ts +0 -24
  265. package/lib/utils/experimental-flags.js +0 -30
  266. /package/lib/{image-optimization/handler-utils.test.d.ts → adapter/adapter.test.d.ts} +0 -0
@@ -19,6 +19,12 @@ export interface NextjsPostDeployOverrides {
19
19
  readonly customResourceProperties?: OptionalPostDeployCustomResourceProperties;
20
20
  }
21
21
  export interface NextjsPostDeployProps {
22
+ /**
23
+ * The app's `basePath`. Scopes the deploy's CloudFront invalidation to the
24
+ * app's URIs, so a deploy doesn't flush other apps on the same distribution.
25
+ * @default - the whole distribution (`/*`)
26
+ */
27
+ readonly basePath?: string;
22
28
  readonly buildId: string;
23
29
  /**
24
30
  * Cache bucket for cleaning up old BUILD_ID prefixed objects
@@ -45,6 +51,13 @@ export interface NextjsPostDeployProps {
45
51
  * Required for `NextjsType.GlobalFunctions` and `NextjsType.GlobalContainers`
46
52
  */
47
53
  readonly staticAssetsBucket?: IBucket;
54
+ /**
55
+ * S3 key prefix the static assets were uploaded under
56
+ * (`NextjsStaticAssets.keyPrefix`). Scopes pruning to this app's objects, so
57
+ * that apps or branches sharing one bucket under different `basePath`s don't
58
+ * prune each other's assets.
59
+ */
60
+ readonly staticAssetsKeyPrefix?: string;
48
61
  }
49
62
  export interface PostDeployCustomResourceProperties {
50
63
  /**
@@ -69,8 +82,8 @@ export interface PostDeployCustomResourceProperties {
69
82
  invalidationBatch: {
70
83
  callerReference: new Date().toISOString(),
71
84
  paths: {
72
- quantity: 1,
73
- items: ["/*"], // invalidate all paths
85
+ quantity: paths.length,
86
+ items: paths, // wholeAppInvalidationPaths(basePath)
74
87
  },
75
88
  },
76
89
  }
@@ -84,11 +97,18 @@ export interface PostDeployCustomResourceProperties {
84
97
  */
85
98
  readonly msTtl: string;
86
99
  readonly staticAssetsBucketName?: string;
100
+ /**
101
+ * S3 key prefix to scope static asset pruning to. Only `<prefix>/_next/` is
102
+ * pruned, where every build-hashed asset lives, so `public/` files and other
103
+ * apps' prefixes are never touched. Empty or absent prunes `_next/` at the
104
+ * bucket root.
105
+ */
106
+ readonly staticAssetsKeyPrefix?: string;
87
107
  }
88
108
  /**
89
109
  * Performs post deployment tasks in custom resource.
90
110
  *
91
- * 1. CloudFront Invalidation (defaults to /*)
111
+ * 1. CloudFront Invalidation of every URI of the app (`/*` without a `basePath`)
92
112
  * 2. Prune cache bucket by removing objects with old BUILD_ID prefixes
93
113
  * 3. Prune DynamoDB revalidation table by removing entries with old BUILD_ID prefixes
94
114
  * 4. Prune static assets S3 by removing objects that don't have next-build-id metadata of
@@ -6,18 +6,19 @@ const node_path_1 = require("node:path");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
7
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
8
  const constructs_1 = require("constructs");
9
- const get_architecture_1 = require("./utils/get-architecture");
9
+ const nextjs_static_assets_1 = require("./nextjs-static-assets");
10
+ const base_path_1 = require("./utils/base-path");
10
11
  /**
11
12
  * Performs post deployment tasks in custom resource.
12
13
  *
13
- * 1. CloudFront Invalidation (defaults to /*)
14
+ * 1. CloudFront Invalidation of every URI of the app (`/*` without a `basePath`)
14
15
  * 2. Prune cache bucket by removing objects with old BUILD_ID prefixes
15
16
  * 3. Prune DynamoDB revalidation table by removing entries with old BUILD_ID prefixes
16
17
  * 4. Prune static assets S3 by removing objects that don't have next-build-id metadata of
17
18
  * current build id AND are older than `msTtl`
18
19
  */
19
20
  class NextjsPostDeploy extends constructs_1.Construct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.6.1" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.0" };
21
22
  customResource;
22
23
  lambdaFunction;
23
24
  props;
@@ -29,7 +30,9 @@ class NextjsPostDeploy extends constructs_1.Construct {
29
30
  }
30
31
  createFunction() {
31
32
  const fn = new aws_lambda_1.Function(this, "Fn", {
32
- architecture: (0, get_architecture_1.getLambdaArchitecture)(),
33
+ // Plain bundled JS with no native dependencies, so nothing ties it to the
34
+ // synth machine: always arm64, the cheaper of the two.
35
+ architecture: aws_lambda_1.Architecture.ARM_64,
33
36
  code: aws_lambda_1.Code.fromAsset((0, node_path_1.join)(__dirname, "../assets/lambdas/post-deploy/post-deploy.lambda")),
34
37
  handler: "index.handler",
35
38
  memorySize: 2048,
@@ -41,12 +44,15 @@ class NextjsPostDeploy extends constructs_1.Construct {
41
44
  if (this.props.debug !== false) {
42
45
  fn.addEnvironment("DEBUG", "1");
43
46
  }
44
- this.props.staticAssetsBucket?.grantReadWrite(fn);
47
+ // Only this app's prefix: pruning stays inside it, and a shared bucket's
48
+ // other apps are out of reach.
49
+ this.props.staticAssetsBucket?.grantReadWrite(fn, (0, nextjs_static_assets_1.staticAssetsObjectsPattern)(this.props.staticAssetsKeyPrefix));
45
50
  this.props.cacheBucket?.grantReadWrite(fn);
46
51
  this.props.revalidationTable?.grantReadWriteData(fn);
47
52
  return fn;
48
53
  }
49
54
  createCustomResource() {
55
+ const paths = (0, base_path_1.wholeAppInvalidationPaths)(this.props.basePath);
50
56
  const properties = {
51
57
  // ensures this CR runs each time new build
52
58
  buildId: this.props.buildId,
@@ -54,15 +60,13 @@ class NextjsPostDeploy extends constructs_1.Construct {
54
60
  revalidationTableName: this.props.revalidationTable?.tableName,
55
61
  msTtl: (1000 * 60 * 60 * 24 * 30).toString(), // 1 month
56
62
  staticAssetsBucketName: this.props.staticAssetsBucket?.bucketName,
63
+ staticAssetsKeyPrefix: this.props.staticAssetsKeyPrefix || undefined,
57
64
  createInvalidationCommandInput: this.props.distribution
58
65
  ? {
59
66
  distributionId: this.props.distribution.distributionId,
60
67
  invalidationBatch: {
61
68
  callerReference: new Date().toISOString(),
62
- paths: {
63
- quantity: 1,
64
- items: ["/*"],
65
- },
69
+ paths: { quantity: paths.length, items: paths },
66
70
  },
67
71
  }
68
72
  : undefined,
@@ -77,4 +81,4 @@ class NextjsPostDeploy extends constructs_1.Construct {
77
81
  }
78
82
  }
79
83
  exports.NextjsPostDeploy = NextjsPostDeploy;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1wb3N0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseUNBQWlDO0FBQ2pDLDZDQUF1RDtBQUd2RCx1REFLZ0M7QUFFaEMsMkNBQXVDO0FBSXZDLCtEQUFpRTtBQW1GakU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHNCQUFTOztJQUM3QyxjQUFjLENBQWlCO0lBQy9CLGNBQWMsQ0FBaUI7SUFFdkIsS0FBSyxDQUF3QjtJQUVyQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxZQUFZLEVBQUUsSUFBQSx3Q0FBcUIsR0FBRTtZQUNyQyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FDcEU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxvQkFBTyxDQUFDLFlBQVksRUFBRSwwQkFBYSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYTtTQUN2QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxVQUFVLEdBQXVDO1lBQ3JELDJDQUEyQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVO1lBQ25ELHFCQUFxQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsU0FBUztZQUM5RCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVTtZQUN4RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFVBQVU7WUFDakUsOEJBQThCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNyRCxDQUFDLENBQUM7b0JBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWM7b0JBQ3RELGlCQUFpQixFQUFFO3dCQUNqQixlQUFlLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7d0JBQ3pDLEtBQUssRUFBRTs0QkFDTCxRQUFRLEVBQUUsQ0FBQzs0QkFDWCxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUJBQ2Q7cUJBQ0Y7aUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QjtTQUNsRCxDQUFDO1FBQ0YsT0FBTyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ2hELFVBQVU7WUFDVixZQUFZLEVBQUUsMEJBQTBCO1lBQ3hDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDN0MsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxtQkFBbUI7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvREgsNENBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSURpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgSVRhYmxlVjIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbixcbiAgUnVudGltZSxcbiAgUnVudGltZUZhbWlseSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxDdXN0b21SZXNvdXJjZVByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxDdXN0b21SZXNvdXJjZVByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbEZ1bmN0aW9uUHJvcHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbEZ1bmN0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgZ2V0TGFtYmRhQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4vdXRpbHMvZ2V0LWFyY2hpdGVjdHVyZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMge1xuICByZWFkb25seSBmdW5jdGlvblByb3BzPzogT3B0aW9uYWxGdW5jdGlvblByb3BzO1xuICAvKipcbiAgICogUHJvcHMgdGhhdCBkZWZpbmUgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wcz86IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcztcbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgcGFzc2VkIGludG8gY3VzdG9tIHJlc291cmNlIHRoYXQgYXJlIHBhc3NlZCB0byBMYW1iZGEgZXZlbnQgaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcGVydGllcz86IE9wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNQb3N0RGVwbG95UHJvcHMge1xuICByZWFkb25seSBidWlsZElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWNoZSBidWNrZXQgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCBvYmplY3RzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBEeW5hbW9EQiB0YWJsZSBmb3IgY2xlYW5pbmcgdXAgb2xkIEJVSUxEX0lEIHByZWZpeGVkIHJldmFsaWRhdGlvbiBlbnRyaWVzXG4gICAqL1xuICByZWFkb25seSByZXZhbGlkYXRpb25UYWJsZT86IElUYWJsZVYyO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgbG9ncyBkZXRhaWxzIGluIGN1c3RvbSByZXNvdXJjZSBsYW1iZGFcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gdG8gaW52YWxpZGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uPzogSURpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIGZvciBldmVyeSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xuICAvKipcbiAgICogUmVxdWlyZWQgZm9yIGBOZXh0anNUeXBlLkdsb2JhbEZ1bmN0aW9uc2AgYW5kIGBOZXh0anNUeXBlLkdsb2JhbENvbnRhaW5lcnNgXG4gICAqL1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXQ/OiBJQnVja2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogQnVpbGQgSUQgb2YgY3VycmVudCBkZXBsb3ltZW50LiBVc2VkIHRvIHBydW5lIGNhY2hlIGJ1Y2tldCBvZiBvYmplY3RzXG4gICAqIHdpdGggb2xkIGJ1aWxkIGlkcywgcHJ1bmUgRHluYW1vREIgcmV2YWxpZGF0aW9uIGVudHJpZXMgd2l0aCBvbGQgYnVpbGQgaWRzLFxuICAgKiBhbmQgcHJ1bmUgUzMgc3RhdGljIGFzc2V0cyBiYXNlZCBvbiBtZXRhZGF0YSBhbmQgYG1zVHRsYFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IG5hbWUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCBvYmplY3RzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEeW5hbW9EQiByZXZhbGlkYXRpb24gdGFibGUgbmFtZSBmb3IgY2xlYW5pbmcgdXAgb2xkIEJVSUxEX0lEIHByZWZpeGVkIGVudHJpZXNcbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZyb250L2NvbW1hbmQvQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZC9cbiAgICogQGRlZmF1bHRcbiAgICoge1xuICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIGl0ZW1zOiBbXCIvKlwiXSwgLy8gaW52YWxpZGF0ZSBhbGwgcGF0aHNcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHNcbiAgICpcbiAgICogTXVzdCBiZSBzdHJpbmcgYmVjYXVzZSBvZiBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgbGltaXRhdGlvblxuICAgKiBAZGVmYXVsdCAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpXG4gICAqL1xuICByZWFkb25seSBtc1R0bDogc3RyaW5nO1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHBvc3QgZGVwbG95bWVudCB0YXNrcyBpbiBjdXN0b20gcmVzb3VyY2UuXG4gKlxuICogMS4gQ2xvdWRGcm9udCBJbnZhbGlkYXRpb24gKGRlZmF1bHRzIHRvIC8qKVxuICogMi4gUHJ1bmUgY2FjaGUgYnVja2V0IGJ5IHJlbW92aW5nIG9iamVjdHMgd2l0aCBvbGQgQlVJTERfSUQgcHJlZml4ZXNcbiAqIDMuIFBydW5lIER5bmFtb0RCIHJldmFsaWRhdGlvbiB0YWJsZSBieSByZW1vdmluZyBlbnRyaWVzIHdpdGggb2xkIEJVSUxEX0lEIHByZWZpeGVzXG4gKiA0LiBQcnVuZSBzdGF0aWMgYXNzZXRzIFMzIGJ5IHJlbW92aW5nIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIG5leHQtYnVpbGQtaWQgbWV0YWRhdGEgb2ZcbiAqIGN1cnJlbnQgYnVpbGQgaWQgQU5EIGFyZSBvbGRlciB0aGFuIGBtc1R0bGBcbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1Bvc3REZXBsb3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG4gIGxhbWJkYUZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNQb3N0RGVwbG95UHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1Bvc3REZXBsb3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICBhcmNoaXRlY3R1cmU6IGdldExhbWJkYUFyY2hpdGVjdHVyZSgpLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9sYW1iZGFzL3Bvc3QtZGVwbG95L3Bvc3QtZGVwbG95LmxhbWJkYVwiKSxcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uPy5ncmFudENyZWF0ZUludmFsaWRhdGlvbihmbik7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVidWcgIT09IGZhbHNlKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChcIkRFQlVHXCIsIFwiMVwiKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQ/LmdyYW50UmVhZFdyaXRlKGZuKTtcbiAgICB0aGlzLnByb3BzLmNhY2hlQnVja2V0Py5ncmFudFJlYWRXcml0ZShmbik7XG4gICAgdGhpcy5wcm9wcy5yZXZhbGlkYXRpb25UYWJsZT8uZ3JhbnRSZWFkV3JpdGVEYXRhKGZuKTtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgPSB7XG4gICAgICAvLyBlbnN1cmVzIHRoaXMgQ1IgcnVucyBlYWNoIHRpbWUgbmV3IGJ1aWxkXG4gICAgICBidWlsZElkOiB0aGlzLnByb3BzLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmJ1Y2tldE5hbWUsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZU5hbWU6IHRoaXMucHJvcHMucmV2YWxpZGF0aW9uVGFibGU/LnRhYmxlTmFtZSxcbiAgICAgIG1zVHRsOiAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpLCAvLyAxIG1vbnRoXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXROYW1lOiB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uYnVja2V0TmFtZSxcbiAgICAgIGNyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmRJbnB1dDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgICAgICBjYWxsZXJSZWZlcmVuY2U6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgICAgICBpdGVtczogW1wiLypcIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcIkN1c3RvbVJlc291cmNlXCIsIHtcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpOZXh0anNQb3N0RGVwbG95XCIsXG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMubGFtYmRhRnVuY3Rpb24uZnVuY3Rpb25Bcm4sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uY3VzdG9tUmVzb3VyY2VQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1wb3N0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseUNBQWlDO0FBQ2pDLDZDQUF1RDtBQUd2RCx1REFNZ0M7QUFFaEMsMkNBQXVDO0FBSXZDLGlFQUFvRTtBQUNwRSxpREFBOEQ7QUF1RzlEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUzs7SUFDN0MsY0FBYyxDQUFpQjtJQUMvQixjQUFjLENBQWlCO0lBRXZCLEtBQUssQ0FBd0I7SUFFckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDeEMsMEVBQTBFO1lBQzFFLHVEQUF1RDtZQUN2RCxZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxrREFBa0QsQ0FBQyxDQUNwRTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLG9CQUFPLENBQUMsWUFBWSxFQUFFLDBCQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELHlFQUF5RTtRQUN6RSwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQzNDLEVBQUUsRUFDRixJQUFBLGlEQUEwQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFBLHFDQUF5QixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQXVDO1lBQ3JELDJDQUEyQztZQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVO1lBQ25ELHFCQUFxQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsU0FBUztZQUM5RCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVTtZQUN4RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFVBQVU7WUFDakUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxTQUFTO1lBQ3BFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckQsQ0FBQyxDQUFDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO29CQUN0RCxpQkFBaUIsRUFBRTt3QkFDakIsZUFBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO3dCQUN6QyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO3FCQUNoRDtpQkFDRjtnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsd0JBQXdCO1NBQ2xELENBQUM7UUFDRixPQUFPLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEQsVUFBVTtZQUNWLFlBQVksRUFBRSwwQkFBMEI7WUFDeEMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUM3QyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXJFSCw0Q0FzRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJRGlzdHJpYnV0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBJVGFibGVWMiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG4gIFJ1bnRpbWVGYW1pbHksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxGdW5jdGlvblByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuIH0gZnJvbSBcIi4vbmV4dGpzLXN0YXRpYy1hc3NldHNcIjtcbmltcG9ydCB7IHdob2xlQXBwSW52YWxpZGF0aW9uUGF0aHMgfSBmcm9tIFwiLi91dGlscy9iYXNlLXBhdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgLyoqXG4gICAqIFByb3BzIHRoYXQgZGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcHM/OiBPcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHM7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIGN1c3RvbSByZXNvdXJjZSB0aGF0IGFyZSBwYXNzZWQgdG8gTGFtYmRhIGV2ZW50IGhhbmRsZXIuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiBPcHRpb25hbFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUG9zdERlcGxveVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBhcHAncyBgYmFzZVBhdGhgLiBTY29wZXMgdGhlIGRlcGxveSdzIENsb3VkRnJvbnQgaW52YWxpZGF0aW9uIHRvIHRoZVxuICAgKiBhcHAncyBVUklzLCBzbyBhIGRlcGxveSBkb2Vzbid0IGZsdXNoIG90aGVyIGFwcHMgb24gdGhlIHNhbWUgZGlzdHJpYnV0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHRoZSB3aG9sZSBkaXN0cmlidXRpb24gKGAvKmApXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IGZvciBjbGVhbmluZyB1cCBvbGQgQlVJTERfSUQgcHJlZml4ZWQgb2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRHluYW1vREIgdGFibGUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCByZXZhbGlkYXRpb24gZW50cmllc1xuICAgKi9cbiAgcmVhZG9ubHkgcmV2YWxpZGF0aW9uVGFibGU/OiBJVGFibGVWMjtcbiAgLyoqXG4gICAqIElmIHRydWUsIGxvZ3MgZGV0YWlscyBpbiBjdXN0b20gcmVzb3VyY2UgbGFtYmRhXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IElEaXN0cmlidXRpb247XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBmb3IgZXZlcnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGZvciBgTmV4dGpzVHlwZS5HbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzVHlwZS5HbG9iYWxDb250YWluZXJzYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHMgd2VyZSB1cGxvYWRlZCB1bmRlclxuICAgKiAoYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgKS4gU2NvcGVzIHBydW5pbmcgdG8gdGhpcyBhcHAncyBvYmplY3RzLCBzb1xuICAgKiB0aGF0IGFwcHMgb3IgYnJhbmNoZXMgc2hhcmluZyBvbmUgYnVja2V0IHVuZGVyIGRpZmZlcmVudCBgYmFzZVBhdGhgcyBkb24ndFxuICAgKiBwcnVuZSBlYWNoIG90aGVyJ3MgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzS2V5UHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogQnVpbGQgSUQgb2YgY3VycmVudCBkZXBsb3ltZW50LiBVc2VkIHRvIHBydW5lIGNhY2hlIGJ1Y2tldCBvZiBvYmplY3RzXG4gICAqIHdpdGggb2xkIGJ1aWxkIGlkcywgcHJ1bmUgRHluYW1vREIgcmV2YWxpZGF0aW9uIGVudHJpZXMgd2l0aCBvbGQgYnVpbGQgaWRzLFxuICAgKiBhbmQgcHJ1bmUgUzMgc3RhdGljIGFzc2V0cyBiYXNlZCBvbiBtZXRhZGF0YSBhbmQgYG1zVHRsYFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2FjaGUgYnVja2V0IG5hbWUgZm9yIGNsZWFuaW5nIHVwIG9sZCBCVUlMRF9JRCBwcmVmaXhlZCBvYmplY3RzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEeW5hbW9EQiByZXZhbGlkYXRpb24gdGFibGUgbmFtZSBmb3IgY2xlYW5pbmcgdXAgb2xkIEJVSUxEX0lEIHByZWZpeGVkIGVudHJpZXNcbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZyb250L2NvbW1hbmQvQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZC9cbiAgICogQGRlZmF1bHRcbiAgICoge1xuICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICBxdWFudGl0eTogcGF0aHMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IHBhdGhzLCAvLyB3aG9sZUFwcEludmFsaWRhdGlvblBhdGhzKGJhc2VQYXRoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAqL1xuICByZWFkb25seSBjcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGltZSB0byBsaXZlIGluIG1pbGxpc2Vjb25kc1xuICAgKlxuICAgKiBNdXN0IGJlIHN0cmluZyBiZWNhdXNlIG9mIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZSBsaW1pdGF0aW9uXG4gICAqIEBkZWZhdWx0ICgxMDAwICogNjAgKiA2MCAqIDI0ICogMzApLnRvU3RyaW5nKClcbiAgICovXG4gIHJlYWRvbmx5IG1zVHRsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTMyBrZXkgcHJlZml4IHRvIHNjb3BlIHN0YXRpYyBhc3NldCBwcnVuaW5nIHRvLiBPbmx5IGA8cHJlZml4Pi9fbmV4dC9gIGlzXG4gICAqIHBydW5lZCwgd2hlcmUgZXZlcnkgYnVpbGQtaGFzaGVkIGFzc2V0IGxpdmVzLCBzbyBgcHVibGljL2AgZmlsZXMgYW5kIG90aGVyXG4gICAqIGFwcHMnIHByZWZpeGVzIGFyZSBuZXZlciB0b3VjaGVkLiBFbXB0eSBvciBhYnNlbnQgcHJ1bmVzIGBfbmV4dC9gIGF0IHRoZVxuICAgKiBidWNrZXQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0tleVByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBwb3N0IGRlcGxveW1lbnQgdGFza3MgaW4gY3VzdG9tIHJlc291cmNlLlxuICpcbiAqIDEuIENsb3VkRnJvbnQgSW52YWxpZGF0aW9uIG9mIGV2ZXJ5IFVSSSBvZiB0aGUgYXBwIChgLypgIHdpdGhvdXQgYSBgYmFzZVBhdGhgKVxuICogMi4gUHJ1bmUgY2FjaGUgYnVja2V0IGJ5IHJlbW92aW5nIG9iamVjdHMgd2l0aCBvbGQgQlVJTERfSUQgcHJlZml4ZXNcbiAqIDMuIFBydW5lIER5bmFtb0RCIHJldmFsaWRhdGlvbiB0YWJsZSBieSByZW1vdmluZyBlbnRyaWVzIHdpdGggb2xkIEJVSUxEX0lEIHByZWZpeGVzXG4gKiA0LiBQcnVuZSBzdGF0aWMgYXNzZXRzIFMzIGJ5IHJlbW92aW5nIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIG5leHQtYnVpbGQtaWQgbWV0YWRhdGEgb2ZcbiAqIGN1cnJlbnQgYnVpbGQgaWQgQU5EIGFyZSBvbGRlciB0aGFuIGBtc1R0bGBcbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1Bvc3REZXBsb3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG4gIGxhbWJkYUZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNQb3N0RGVwbG95UHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1Bvc3REZXBsb3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICAvLyBQbGFpbiBidW5kbGVkIEpTIHdpdGggbm8gbmF0aXZlIGRlcGVuZGVuY2llcywgc28gbm90aGluZyB0aWVzIGl0IHRvIHRoZVxuICAgICAgLy8gc3ludGggbWFjaGluZTogYWx3YXlzIGFybTY0LCB0aGUgY2hlYXBlciBvZiB0aGUgdHdvLlxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9sYW1iZGFzL3Bvc3QtZGVwbG95L3Bvc3QtZGVwbG95LmxhbWJkYVwiKSxcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uPy5ncmFudENyZWF0ZUludmFsaWRhdGlvbihmbik7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVidWcgIT09IGZhbHNlKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChcIkRFQlVHXCIsIFwiMVwiKTtcbiAgICB9XG4gICAgLy8gT25seSB0aGlzIGFwcCdzIHByZWZpeDogcHJ1bmluZyBzdGF5cyBpbnNpZGUgaXQsIGFuZCBhIHNoYXJlZCBidWNrZXQnc1xuICAgIC8vIG90aGVyIGFwcHMgYXJlIG91dCBvZiByZWFjaC5cbiAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBmbixcbiAgICAgIHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuKHRoaXMucHJvcHMuc3RhdGljQXNzZXRzS2V5UHJlZml4KSxcbiAgICApO1xuICAgIHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmdyYW50UmVhZFdyaXRlKGZuKTtcbiAgICB0aGlzLnByb3BzLnJldmFsaWRhdGlvblRhYmxlPy5ncmFudFJlYWRXcml0ZURhdGEoZm4pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgcGF0aHMgPSB3aG9sZUFwcEludmFsaWRhdGlvblBhdGhzKHRoaXMucHJvcHMuYmFzZVBhdGgpO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFBvc3REZXBsb3lDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgPSB7XG4gICAgICAvLyBlbnN1cmVzIHRoaXMgQ1IgcnVucyBlYWNoIHRpbWUgbmV3IGJ1aWxkXG4gICAgICBidWlsZElkOiB0aGlzLnByb3BzLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuY2FjaGVCdWNrZXQ/LmJ1Y2tldE5hbWUsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZU5hbWU6IHRoaXMucHJvcHMucmV2YWxpZGF0aW9uVGFibGU/LnRhYmxlTmFtZSxcbiAgICAgIG1zVHRsOiAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpLCAvLyAxIG1vbnRoXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXROYW1lOiB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uYnVja2V0TmFtZSxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNLZXlQcmVmaXggfHwgdW5kZWZpbmVkLFxuICAgICAgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0OiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbklkOiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICAgICAgICAgIGludmFsaWRhdGlvbkJhdGNoOiB7XG4gICAgICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBwYXRoczogeyBxdWFudGl0eTogcGF0aHMubGVuZ3RoLCBpdGVtczogcGF0aHMgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiQ3VzdG9tUmVzb3VyY2VcIiwge1xuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIixcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ const assertions_1 = require("aws-cdk-lib/assertions");
5
+ const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
6
+ const nextjs_post_deploy_1 = require("./nextjs-post-deploy");
7
+ /** The paths the deploy's CloudFront invalidation names. */
8
+ function invalidatedPaths(basePath) {
9
+ const stack = new aws_cdk_lib_1.Stack(new aws_cdk_lib_1.App(), "Stack");
10
+ new nextjs_post_deploy_1.NextjsPostDeploy(stack, "PostDeploy", {
11
+ basePath,
12
+ buildId: "build",
13
+ distribution: aws_cloudfront_1.Distribution.fromDistributionAttributes(stack, "Dist", {
14
+ distributionId: "DIST",
15
+ domainName: "d.cloudfront.net",
16
+ }),
17
+ });
18
+ const [resource] = Object.values(assertions_1.Template.fromStack(stack).findResources("Custom::NextjsPostDeploy"));
19
+ return resource.Properties.createInvalidationCommandInput.invalidationBatch
20
+ .paths;
21
+ }
22
+ describe("NextjsPostDeploy", () => {
23
+ it("invalidates the whole distribution without a basePath", () => {
24
+ expect(invalidatedPaths()).toEqual({ quantity: 1, items: ["/*"] });
25
+ });
26
+ it("invalidates only the app's URIs under a basePath", () => {
27
+ // `/*` would flush every other app on a shared distribution too.
28
+ expect(invalidatedPaths("/docs")).toEqual({
29
+ quantity: 3,
30
+ items: ["/docs", "/docs?*", "/docs/*"],
31
+ });
32
+ });
33
+ });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXBvc3QtZGVwbG95LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBeUM7QUFDekMsdURBQWtEO0FBQ2xELCtEQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNERBQTREO0FBQzVELFNBQVMsZ0JBQWdCLENBQUMsUUFBaUI7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLElBQUksaUJBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLElBQUkscUNBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtRQUN4QyxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU87UUFDaEIsWUFBWSxFQUFFLDZCQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNuRSxjQUFjLEVBQUUsTUFBTTtZQUN0QixVQUFVLEVBQUUsa0JBQWtCO1NBQy9CLENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDOUIscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQ3BFLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsaUJBQWlCO1NBQ3hFLEtBQUssQ0FBQztBQUNYLENBQUM7QUFFRCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsaUVBQWlFO1FBQ2pFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxRQUFRLEVBQUUsQ0FBQztZQUNYLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO1NBQ3ZDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5pbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IE5leHRqc1Bvc3REZXBsb3kgfSBmcm9tIFwiLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcblxuLyoqIFRoZSBwYXRocyB0aGUgZGVwbG95J3MgQ2xvdWRGcm9udCBpbnZhbGlkYXRpb24gbmFtZXMuICovXG5mdW5jdGlvbiBpbnZhbGlkYXRlZFBhdGhzKGJhc2VQYXRoPzogc3RyaW5nKTogdW5rbm93biB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKTtcbiAgbmV3IE5leHRqc1Bvc3REZXBsb3koc3RhY2ssIFwiUG9zdERlcGxveVwiLCB7XG4gICAgYmFzZVBhdGgsXG4gICAgYnVpbGRJZDogXCJidWlsZFwiLFxuICAgIGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uLmZyb21EaXN0cmlidXRpb25BdHRyaWJ1dGVzKHN0YWNrLCBcIkRpc3RcIiwge1xuICAgICAgZGlzdHJpYnV0aW9uSWQ6IFwiRElTVFwiLFxuICAgICAgZG9tYWluTmFtZTogXCJkLmNsb3VkZnJvbnQubmV0XCIsXG4gICAgfSksXG4gIH0pO1xuICBjb25zdCBbcmVzb3VyY2VdID0gT2JqZWN0LnZhbHVlcyhcbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIiksXG4gICk7XG4gIHJldHVybiByZXNvdXJjZS5Qcm9wZXJ0aWVzLmNyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmRJbnB1dC5pbnZhbGlkYXRpb25CYXRjaFxuICAgIC5wYXRocztcbn1cblxuZGVzY3JpYmUoXCJOZXh0anNQb3N0RGVwbG95XCIsICgpID0+IHtcbiAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgZGlzdHJpYnV0aW9uIHdpdGhvdXQgYSBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbCh7IHF1YW50aXR5OiAxLCBpdGVtczogW1wiLypcIl0gfSk7XG4gIH0pO1xuXG4gIGl0KFwiaW52YWxpZGF0ZXMgb25seSB0aGUgYXBwJ3MgVVJJcyB1bmRlciBhIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAvLyBgLypgIHdvdWxkIGZsdXNoIGV2ZXJ5IG90aGVyIGFwcCBvbiBhIHNoYXJlZCBkaXN0cmlidXRpb24gdG9vLlxuICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKFwiL2RvY3NcIikpLnRvRXF1YWwoe1xuICAgICAgcXVhbnRpdHk6IDMsXG4gICAgICBpdGVtczogW1wiL2RvY3NcIiwgXCIvZG9jcz8qXCIsIFwiL2RvY3MvKlwiXSxcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,6 +1,13 @@
1
1
  import { BucketProps, IBucket } from "aws-cdk-lib/aws-s3";
2
2
  import { BucketDeployment, BucketDeploymentProps } from "aws-cdk-lib/aws-s3-deployment";
3
3
  import { Construct } from "constructs";
4
+ /**
5
+ * The S3 object key pattern covering every static asset uploaded under
6
+ * `keyPrefix` (`NextjsStaticAssets.keyPrefix`): `"base/*"`, or `"*"` at the
7
+ * bucket root. For scoping the compute's read grant to the app's own objects
8
+ * when several apps share one bucket.
9
+ */
10
+ export declare function staticAssetsObjectsPattern(keyPrefix?: string): string;
4
11
  export interface NextjsStaticAssetsOverrides {
5
12
  readonly bucketProps?: BucketProps;
6
13
  readonly bucketDeploymentProps?: BucketDeploymentProps;
@@ -9,7 +16,10 @@ export interface NextjsStaticAssetsProps {
9
16
  /**
10
17
  * Bring your own S3 bucket for static assets. When provided, cdk-nextjs
11
18
  * will skip creating a new bucket and deploy assets to this bucket instead.
12
- * Use with `basePath` to isolate assets per branch when sharing a bucket.
19
+ * Can be shared only between deployments with different `basePath`s (S3 key
20
+ * prefixes): pruning is scoped to `<basePath>/_next/`, but two deployments
21
+ * under the same prefix overwrite each other's `public/` files and prune each
22
+ * other's older `_next/` assets.
13
23
  */
14
24
  readonly bucket?: IBucket;
15
25
  /**
@@ -38,10 +48,13 @@ export declare class NextjsStaticAssets extends Construct {
38
48
  * S3 key prefix the assets are actually uploaded under, normalized to a bare
39
49
  * path segment (empty when they live at the bucket root).
40
50
  *
41
- * Consumers that read assets back out of the bucket (the image optimization
42
- * Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
51
+ * Consumers that read assets back out of the bucket (the runtime's image
52
+ * optimizer, `NextjsApi`'s S3 integrations) must use this rather than the
43
53
  * `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
44
- * prefix outright.
54
+ * prefix outright. Nor can they derive it from the app's own `basePath`: that
55
+ * is the prefix of the *URL* the app is served at, which for the API Gateway
56
+ * deployment types is the stage name and has nothing to do with where the
57
+ * bytes were uploaded.
45
58
  */
46
59
  readonly keyPrefix: string;
47
60
  private stagingDir?;
@@ -53,6 +66,12 @@ export declare class NextjsStaticAssets extends Construct {
53
66
  * but it's normalized here and `createDeployment` sets the normalized value
54
67
  * after the override spread, so `keyPrefix` can't drift from where the assets
55
68
  * land.
69
+ *
70
+ * Compared against `undefined` rather than tested with `in`, because a JSII
71
+ * language binding (or a programmatically built props object) can materialize
72
+ * an unset optional field as an explicit `undefined`. Treating that as an
73
+ * intentional "move the assets to the bucket root" override would silently
74
+ * drop `basePath` from the prefix.
56
75
  */
57
76
  private resolveKeyPrefix;
58
77
  private createBucket;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NextjsStaticAssets = void 0;
4
+ exports.staticAssetsObjectsPattern = staticAssetsObjectsPattern;
4
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
6
  const node_fs_1 = require("node:fs");
6
7
  const node_os_1 = require("node:os");
@@ -11,21 +12,37 @@ const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
11
12
  const constructs_1 = require("constructs");
12
13
  const constants_1 = require("./constants");
13
14
  const base_path_1 = require("./utils/base-path");
15
+ /**
16
+ * The S3 object key pattern covering every static asset uploaded under
17
+ * `keyPrefix` (`NextjsStaticAssets.keyPrefix`): `"base/*"`, or `"*"` at the
18
+ * bucket root. For scoping the compute's read grant to the app's own objects
19
+ * when several apps share one bucket.
20
+ */
21
+ function staticAssetsObjectsPattern(keyPrefix) {
22
+ if (keyPrefix && aws_cdk_lib_1.Token.isUnresolved(keyPrefix)) {
23
+ return "*";
24
+ }
25
+ const prefix = (0, base_path_1.normalizeBasePath)(keyPrefix);
26
+ return prefix ? `${prefix}/*` : "*";
27
+ }
14
28
  /**
15
29
  * Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
16
30
  */
17
31
  class NextjsStaticAssets extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.6.1" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.0" };
19
33
  bucket;
20
34
  deployment;
21
35
  /**
22
36
  * S3 key prefix the assets are actually uploaded under, normalized to a bare
23
37
  * path segment (empty when they live at the bucket root).
24
38
  *
25
- * Consumers that read assets back out of the bucket (the image optimization
26
- * Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
39
+ * Consumers that read assets back out of the bucket (the runtime's image
40
+ * optimizer, `NextjsApi`'s S3 integrations) must use this rather than the
27
41
  * `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
28
- * prefix outright.
42
+ * prefix outright. Nor can they derive it from the app's own `basePath`: that
43
+ * is the prefix of the *URL* the app is served at, which for the API Gateway
44
+ * deployment types is the stage name and has nothing to do with where the
45
+ * bytes were uploaded.
29
46
  */
30
47
  keyPrefix;
31
48
  stagingDir;
@@ -43,10 +60,16 @@ class NextjsStaticAssets extends constructs_1.Construct {
43
60
  * but it's normalized here and `createDeployment` sets the normalized value
44
61
  * after the override spread, so `keyPrefix` can't drift from where the assets
45
62
  * land.
63
+ *
64
+ * Compared against `undefined` rather than tested with `in`, because a JSII
65
+ * language binding (or a programmatically built props object) can materialize
66
+ * an unset optional field as an explicit `undefined`. Treating that as an
67
+ * intentional "move the assets to the bucket root" override would silently
68
+ * drop `basePath` from the prefix.
46
69
  */
47
70
  resolveKeyPrefix() {
48
71
  const deploymentOverrides = this.props.overrides?.bucketDeploymentProps;
49
- const prefix = deploymentOverrides && "destinationKeyPrefix" in deploymentOverrides
72
+ const prefix = deploymentOverrides?.destinationKeyPrefix !== undefined
50
73
  ? deploymentOverrides.destinationKeyPrefix
51
74
  : this.props.basePath;
52
75
  return (0, base_path_1.normalizeBasePath)(prefix);
@@ -140,4 +163,4 @@ class NextjsStaticAssets extends constructs_1.Construct {
140
163
  }
141
164
  }
142
165
  exports.NextjsStaticAssets = NextjsStaticAssets;
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHFDQU9pQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUE0QztBQUM1QywrQ0FNNEI7QUFDNUIscUVBSXVDO0FBQ3ZDLDJDQUF1QztBQUN2QywyQ0FBeUM7QUFDekMsaURBQXNEO0FBK0J0RDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7O0lBQy9DLE1BQU0sQ0FBVTtJQUNoQixVQUFVLENBQW1CO0lBQzdCOzs7Ozs7OztPQVFHO0lBQ00sU0FBUyxDQUFTO0lBQ25CLFVBQVUsQ0FBVTtJQUVwQixLQUFLLENBQTBCO0lBRXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCO1FBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQ1YsbUJBQW1CLElBQUksc0JBQXNCLElBQUksbUJBQW1CO1lBQ2xFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0I7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxL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TyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUU5Qyx5QkFBeUI7Z0JBQ3pCLElBQUEsbUJBQVMsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFeEMscUJBQXFCO2dCQUNyQixJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsc0JBQVUsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdCQUF3QjtZQUMxQixDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxPQUFlO1FBQ3JDLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUEsa0JBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzs7QUF4SUgsZ0RBeUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3BTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICBybVN5bmMsXG4gIHN0YXRTeW5jLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0LFxuICBCdWNrZXRFbmNyeXB0aW9uLFxuICBCdWNrZXRQcm9wcyxcbiAgSUJ1Y2tldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0RGVwbG95bWVudCxcbiAgQnVja2V0RGVwbG95bWVudFByb3BzLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSBcIi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgYnVja2V0UHJvcHM/OiBCdWNrZXRQcm9wcztcbiAgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudFByb3BzPzogQnVja2V0RGVwbG95bWVudFByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3Igc3RhdGljIGFzc2V0cy4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHNraXAgY3JlYXRpbmcgYSBuZXcgYnVja2V0IGFuZCBkZXBsb3kgYXNzZXRzIHRvIHRoaXMgYnVja2V0IGluc3RlYWQuXG4gICAqIFVzZSB3aXRoIGBiYXNlUGF0aGAgdG8gaXNvbGF0ZSBhc3NldHMgcGVyIGJyYW5jaCB3aGVuIHNoYXJpbmcgYSBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQuXG4gICAqIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIC5uZXh0IGRpcmVjdG9yeSBhbmQgb3RoZXIgYnVpbGQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJ1aWxkIElEIGZyb20gTmV4dGpzQnVpbGQgdG8gdHJhY2sgYXNzZXQgdmVyc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBTMyBCdWNrZXQgZm9yIHB1YmxpYyBhbmQgX25leHQvc3RhdGljIGFzc2V0cyBhbmQgZGVwbG95cyB0aGVtIHVzaW5nIFMzRGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1N0YXRpY0Fzc2V0cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGJ1Y2tldDogSUJ1Y2tldDtcbiAgZGVwbG95bWVudDogQnVja2V0RGVwbG95bWVudDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIGFzc2V0cyBhcmUgYWN0dWFsbHkgdXBsb2FkZWQgdW5kZXIsIG5vcm1hbGl6ZWQgdG8gYSBiYXJlXG4gICAqIHBhdGggc2VnbWVudCAoZW1wdHkgd2hlbiB0aGV5IGxpdmUgYXQgdGhlIGJ1Y2tldCByb290KS5cbiAgICpcbiAgICogQ29uc3VtZXJzIHRoYXQgcmVhZCBhc3NldHMgYmFjayBvdXQgb2YgdGhlIGJ1Y2tldCAodGhlIGltYWdlIG9wdGltaXphdGlvblxuICAgKiBMYW1iZGEsIGBOZXh0anNBcGlgJ3MgUzMgaW50ZWdyYXRpb25zKSBtdXN0IHVzZSB0aGlzIHJhdGhlciB0aGFuIHRoZVxuICAgKiBgYmFzZVBhdGhgIHByb3AsIHNpbmNlIGBvdmVycmlkZXMuYnVja2V0RGVwbG95bWVudFByb3BzYCBjYW4gcmVwbGFjZSB0aGVcbiAgICogcHJlZml4IG91dHJpZ2h0LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhZ2luZ0Rpcj86IHN0cmluZztcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmtleVByZWZpeCA9IHRoaXMucmVzb2x2ZUtleVByZWZpeCgpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0ID8/IHRoaXMuY3JlYXRlQnVja2V0KCk7XG4gICAgdGhpcy5kZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHNpbmdsZSBwcmVmaXggYm90aCB0aGUgdXBsb2FkIGFuZCB0aGUgVVJMcyB1c2UuIEFcbiAgICogYGJ1Y2tldERlcGxveW1lbnRQcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeGAgb3ZlcnJpZGUgd2lucyBvdmVyIGBiYXNlUGF0aGAsXG4gICAqIGJ1dCBpdCdzIG5vcm1hbGl6ZWQgaGVyZSBhbmQgYGNyZWF0ZURlcGxveW1lbnRgIHNldHMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogYWZ0ZXIgdGhlIG92ZXJyaWRlIHNwcmVhZCwgc28gYGtleVByZWZpeGAgY2FuJ3QgZHJpZnQgZnJvbSB3aGVyZSB0aGUgYXNzZXRzXG4gICAqIGxhbmQuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVLZXlQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXBsb3ltZW50T3ZlcnJpZGVzID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcztcbiAgICBjb25zdCBwcmVmaXggPVxuICAgICAgZGVwbG95bWVudE92ZXJyaWRlcyAmJiBcImRlc3RpbmF0aW9uS2V5UHJlZml4XCIgaW4gZGVwbG95bWVudE92ZXJyaWRlc1xuICAgICAgICA/IGRlcGxveW1lbnRPdmVycmlkZXMuZGVzdGluYXRpb25LZXlQcmVmaXhcbiAgICAgICAgOiB0aGlzLnByb3BzLmJhc2VQYXRoO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChwcmVmaXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdWNrZXQoKSB7XG4gICAgcmV0dXJuIG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIG1pbmltdW1UTFNWZXJzaW9uOiAxLjIsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uYnVja2V0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveW1lbnQoKSB7XG4gICAgLy8gQ3JlYXRlIGEgc3RhZ2luZyBkaXJlY3Rvcnkgd2l0aCB0aGUgY29ycmVjdCBzdHJ1Y3R1cmVcbiAgICB0aGlzLnN0YWdpbmdEaXIgPSB0aGlzLmNyZWF0ZVN0YWdpbmdEaXJlY3RvcnkoKTtcblxuICAgIGlmICghdGhpcy5zdGFnaW5nRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBzdGF0aWMgYXNzZXRzIGZvdW5kIHRvIGRlcGxveS4gRW5zdXJlIHlvdXIgTmV4dC5qcyBidWlsZCBvdXRwdXQgY29udGFpbnMgZWl0aGVyOlxuICAgICAgICAtIEEgJ3B1YmxpYycgZGlyZWN0b3J5IGF0OiAke2pvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIil9XG4gICAgICAgIC0gQSAnLm5leHQvc3RhdGljJyBkaXJlY3RvcnkgYXQ6ICR7am9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveW1lbnRcIiwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldCh0aGlzLnN0YWdpbmdEaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIC8vIEFkZCBCVUlMRF9JRCBhcyBtZXRhZGF0YSB0byBhbGwgb2JqZWN0cyBmb3IgdmVyc2lvbiB0cmFja2luZ1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgQlVJTERfSUQ6IHRoaXMucHJvcHMuYnVpbGRJZCxcbiAgICAgIH0sXG4gICAgICBwcnVuZTogZmFsc2UsIC8vIERvbid0IGRlbGV0ZSBleGlzdGluZyBhc3NldHMgdG8gcHJldmVudCA0MDRzIGR1cmluZyBkZXBsb3ltZW50LCBwcnVuaW5nIHdpbGwgYmUgaGFuZGxlZCBieSBwb3N0LWRlcGxveVxuICAgICAgLy8gUzNEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBjb250ZW50IHR5cGVzIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uc1xuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgICAgIC8vIFNldCBhZnRlciB0aGUgc3ByZWFkOiBgcmVzb2x2ZUtleVByZWZpeGAgYWxyZWFkeSBmb2xkZWQgaW4gYW55XG4gICAgICAvLyBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBzbyB0aGlzIGlzIHRoZSBub3JtYWxpemVkIGZvcm0gb2YgaXQuXG4gICAgICAvLyBMZXR0aW5nIHRoZSByYXcgb3ZlcnJpZGUgdGhyb3VnaCBoZXJlIHdvdWxkIHVwbG9hZCB0aGUgYXNzZXRzIHNvbWV3aGVyZVxuICAgICAgLy8gb3RoZXIgdGhhbiB0aGUgYGtleVByZWZpeGAgdXNlZCB0byBidWlsZCB0aGVpciBVUkxzLlxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IHRoaXMua2V5UHJlZml4IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFnaW5nIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IHN0cnVjdHVyZTpcbiAgICogLSBwdWJsaWMvIGZpbGVzIGdvIHRvIHJvb3RcbiAgICogLSAubmV4dC9zdGF0aWMvIGZpbGVzIGdvIHRvIF9uZXh0L3N0YXRpYy9cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3RhZ2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YWdpbmdEaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1hc3NldHMtXCIpKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBwdWJsaWMgZGlyZWN0b3J5IGNvbnRlbnRzIHRvIHN0YWdpbmcgcm9vdFxuICAgICAgY29uc3QgcHVibGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIik7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnlFeGlzdHMocHVibGljUGF0aCkpIHtcbiAgICAgICAgY3BTeW5jKHB1YmxpY1BhdGgsIHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IC5uZXh0L3N0YXRpYyB0byBzdGFnaW5nL19uZXh0L3N0YXRpY1xuICAgICAgY29uc3Qgc3RhdGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiLCBcInN0YXRpY1wiKTtcbiAgICAgIGlmICh0aGlzLmRpcmVjdG9yeUV4aXN0cyhzdGF0aWNQYXRoKSkge1xuICAgICAgICBjb25zdCBuZXh0RGlyID0gam9pbihzdGFnaW5nRGlyLCBcIl9uZXh0XCIpO1xuICAgICAgICBjb25zdCBzdGF0aWNEZXN0RGlyID0gam9pbihuZXh0RGlyLCBcInN0YXRpY1wiKTtcblxuICAgICAgICAvLyBDcmVhdGUgX25leHQgZGlyZWN0b3J5XG4gICAgICAgIG1rZGlyU3luYyhuZXh0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBDb3B5IHN0YXRpYyBhc3NldHNcbiAgICAgICAgY3BTeW5jKHN0YXRpY1BhdGgsIHN0YXRpY0Rlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzQXNzZXRzID8gc3RhZ2luZ0RpciA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBFcnJvciBjcmVhdGluZyBzdGFnaW5nIGRpcmVjdG9yeTpgLCBlcnJvcik7XG4gICAgICAvLyBDbGVhbiB1cCBvbiBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgcm1TeW5jKHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBkaXJlY3RvcnlFeGlzdHMoZGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBleGlzdHNTeW5jKGRpclBhdGgpICYmIHN0YXRTeW5jKGRpclBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUNBLGdFQU1DOztBQXZDRCxxQ0FPaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBbUQ7QUFDbkQsK0NBTTRCO0FBQzVCLHFFQUl1QztBQUN2QywyQ0FBdUM7QUFDdkMsMkNBQXlDO0FBQ3pDLGlEQUFzRDtBQUV0RDs7Ozs7R0FLRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLFNBQWtCO0lBQzNELElBQUksU0FBUyxJQUFJLG1CQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSw2QkFBaUIsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3RDLENBQUM7QUFrQ0Q7O0dBRUc7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTOztJQUMvQyxNQUFNLENBQVU7SUFDaEIsVUFBVSxDQUFtQjtJQUM3Qjs7Ozs7Ozs7Ozs7T0FXRztJQUNNLFNBQVMsQ0FBUztJQUNuQixVQUFVLENBQVU7SUFFcEIsS0FBSyxDQUEwQjtJQUV2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFD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O0lBQ0ssZUFBZSxDQUFDLE9BQWU7UUFDckMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFBLG9CQUFVLEVBQUMsT0FBTyxDQUFDLElBQUksSUFBQSxrQkFBUSxFQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOztBQWpKSCxnREFrSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcFN5bmMsXG4gIGV4aXN0c1N5bmMsXG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJtU3luYyxcbiAgc3RhdFN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFRva2VuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0LFxuICBCdWNrZXRFbmNyeXB0aW9uLFxuICBCdWNrZXRQcm9wcyxcbiAgSUJ1Y2tldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0RGVwbG95bWVudCxcbiAgQnVja2V0RGVwbG95bWVudFByb3BzLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSBcIi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbi8qKlxuICogVGhlIFMzIG9iamVjdCBrZXkgcGF0dGVybiBjb3ZlcmluZyBldmVyeSBzdGF0aWMgYXNzZXQgdXBsb2FkZWQgdW5kZXJcbiAqIGBrZXlQcmVmaXhgIChgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGApOiBgXCJiYXNlLypcImAsIG9yIGBcIipcImAgYXQgdGhlXG4gKiBidWNrZXQgcm9vdC4gRm9yIHNjb3BpbmcgdGhlIGNvbXB1dGUncyByZWFkIGdyYW50IHRvIHRoZSBhcHAncyBvd24gb2JqZWN0c1xuICogd2hlbiBzZXZlcmFsIGFwcHMgc2hhcmUgb25lIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY0Fzc2V0c09iamVjdHNQYXR0ZXJuKGtleVByZWZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXlQcmVmaXggJiYgVG9rZW4uaXNVbnJlc29sdmVkKGtleVByZWZpeCkpIHtcbiAgICByZXR1cm4gXCIqXCI7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplQmFzZVBhdGgoa2V5UHJlZml4KTtcbiAgcmV0dXJuIHByZWZpeCA/IGAke3ByZWZpeH0vKmAgOiBcIipcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXMge1xuICByZWFkb25seSBidWNrZXRQcm9wcz86IEJ1Y2tldFByb3BzO1xuICByZWFkb25seSBidWNrZXREZXBsb3ltZW50UHJvcHM/OiBCdWNrZXREZXBsb3ltZW50UHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMge1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gUzMgYnVja2V0IGZvciBzdGF0aWMgYXNzZXRzLiBXaGVuIHByb3ZpZGVkLCBjZGstbmV4dGpzXG4gICAqIHdpbGwgc2tpcCBjcmVhdGluZyBhIG5ldyBidWNrZXQgYW5kIGRlcGxveSBhc3NldHMgdG8gdGhpcyBidWNrZXQgaW5zdGVhZC5cbiAgICogQ2FuIGJlIHNoYXJlZCBvbmx5IGJldHdlZW4gZGVwbG95bWVudHMgd2l0aCBkaWZmZXJlbnQgYGJhc2VQYXRoYHMgKFMzIGtleVxuICAgKiBwcmVmaXhlcyk6IHBydW5pbmcgaXMgc2NvcGVkIHRvIGA8YmFzZVBhdGg+L19uZXh0L2AsIGJ1dCB0d28gZGVwbG95bWVudHNcbiAgICogdW5kZXIgdGhlIHNhbWUgcHJlZml4IG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgYHB1YmxpYy9gIGZpbGVzIGFuZCBwcnVuZSBlYWNoXG4gICAqIG90aGVyJ3Mgb2xkZXIgYF9uZXh0L2AgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSB0aGUgTmV4dC5qcyBhcHBsaWNhdGlvbiBpcyBsb2NhdGVkLlxuICAgKiBUaGlzIHNob3VsZCBjb250YWluIHRoZSAubmV4dCBkaXJlY3RvcnkgYW5kIG90aGVyIGJ1aWxkIGFydGlmYWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZCBJRCBmcm9tIE5leHRqc0J1aWxkIHRvIHRyYWNrIGFzc2V0IHZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBidWlsZElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuXG4gICAqIEBleGFtcGxlIFwiL215LWJhc2UtcGF0aFwiXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgUzMgQnVja2V0IGZvciBwdWJsaWMgYW5kIF9uZXh0L3N0YXRpYyBhc3NldHMgYW5kIGRlcGxveXMgdGhlbSB1c2luZyBTM0RlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNTdGF0aWNBc3NldHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIGRlcGxveW1lbnQ6IEJ1Y2tldERlcGxveW1lbnQ7XG4gIC8qKlxuICAgKiBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgYXJlIGFjdHVhbGx5IHVwbG9hZGVkIHVuZGVyLCBub3JtYWxpemVkIHRvIGEgYmFyZVxuICAgKiBwYXRoIHNlZ21lbnQgKGVtcHR5IHdoZW4gdGhleSBsaXZlIGF0IHRoZSBidWNrZXQgcm9vdCkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYXNzZXRzIGJhY2sgb3V0IG9mIHRoZSBidWNrZXQgKHRoZSBydW50aW1lJ3MgaW1hZ2VcbiAgICogb3B0aW1pemVyLCBgTmV4dGpzQXBpYCdzIFMzIGludGVncmF0aW9ucykgbXVzdCB1c2UgdGhpcyByYXRoZXIgdGhhbiB0aGVcbiAgICogYGJhc2VQYXRoYCBwcm9wLCBzaW5jZSBgb3ZlcnJpZGVzLmJ1Y2tldERlcGxveW1lbnRQcm9wc2AgY2FuIHJlcGxhY2UgdGhlXG4gICAqIHByZWZpeCBvdXRyaWdodC4gTm9yIGNhbiB0aGV5IGRlcml2ZSBpdCBmcm9tIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYDogdGhhdFxuICAgKiBpcyB0aGUgcHJlZml4IG9mIHRoZSAqVVJMKiB0aGUgYXBwIGlzIHNlcnZlZCBhdCwgd2hpY2ggZm9yIHRoZSBBUEkgR2F0ZXdheVxuICAgKiBkZXBsb3ltZW50IHR5cGVzIGlzIHRoZSBzdGFnZSBuYW1lIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHdoZXJlIHRoZVxuICAgKiBieXRlcyB3ZXJlIHVwbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhZ2luZ0Rpcj86IHN0cmluZztcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmtleVByZWZpeCA9IHRoaXMucmVzb2x2ZUtleVByZWZpeCgpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0ID8/IHRoaXMuY3JlYXRlQnVja2V0KCk7XG4gICAgdGhpcy5kZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHNpbmdsZSBwcmVmaXggYm90aCB0aGUgdXBsb2FkIGFuZCB0aGUgVVJMcyB1c2UuIEFcbiAgICogYGJ1Y2tldERlcGxveW1lbnRQcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeGAgb3ZlcnJpZGUgd2lucyBvdmVyIGBiYXNlUGF0aGAsXG4gICAqIGJ1dCBpdCdzIG5vcm1hbGl6ZWQgaGVyZSBhbmQgYGNyZWF0ZURlcGxveW1lbnRgIHNldHMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogYWZ0ZXIgdGhlIG92ZXJyaWRlIHNwcmVhZCwgc28gYGtleVByZWZpeGAgY2FuJ3QgZHJpZnQgZnJvbSB3aGVyZSB0aGUgYXNzZXRzXG4gICAqIGxhbmQuXG4gICAqXG4gICAqIENvbXBhcmVkIGFnYWluc3QgYHVuZGVmaW5lZGAgcmF0aGVyIHRoYW4gdGVzdGVkIHdpdGggYGluYCwgYmVjYXVzZSBhIEpTSUlcbiAgICogbGFuZ3VhZ2UgYmluZGluZyAob3IgYSBwcm9ncmFtbWF0aWNhbGx5IGJ1aWx0IHByb3BzIG9iamVjdCkgY2FuIG1hdGVyaWFsaXplXG4gICAqIGFuIHVuc2V0IG9wdGlvbmFsIGZpZWxkIGFzIGFuIGV4cGxpY2l0IGB1bmRlZmluZWRgLiBUcmVhdGluZyB0aGF0IGFzIGFuXG4gICAqIGludGVudGlvbmFsIFwibW92ZSB0aGUgYXNzZXRzIHRvIHRoZSBidWNrZXQgcm9vdFwiIG92ZXJyaWRlIHdvdWxkIHNpbGVudGx5XG4gICAqIGRyb3AgYGJhc2VQYXRoYCBmcm9tIHRoZSBwcmVmaXguXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVLZXlQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXBsb3ltZW50T3ZlcnJpZGVzID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcztcbiAgICBjb25zdCBwcmVmaXggPVxuICAgICAgZGVwbG95bWVudE92ZXJyaWRlcz8uZGVzdGluYXRpb25LZXlQcmVmaXggIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGRlcGxveW1lbnRPdmVycmlkZXMuZGVzdGluYXRpb25LZXlQcmVmaXhcbiAgICAgICAgOiB0aGlzLnByb3BzLmJhc2VQYXRoO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChwcmVmaXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdWNrZXQoKSB7XG4gICAgcmV0dXJuIG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIG1pbmltdW1UTFNWZXJzaW9uOiAxLjIsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uYnVja2V0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveW1lbnQoKSB7XG4gICAgLy8gQ3JlYXRlIGEgc3RhZ2luZyBkaXJlY3Rvcnkgd2l0aCB0aGUgY29ycmVjdCBzdHJ1Y3R1cmVcbiAgICB0aGlzLnN0YWdpbmdEaXIgPSB0aGlzLmNyZWF0ZVN0YWdpbmdEaXJlY3RvcnkoKTtcblxuICAgIGlmICghdGhpcy5zdGFnaW5nRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBzdGF0aWMgYXNzZXRzIGZvdW5kIHRvIGRlcGxveS4gRW5zdXJlIHlvdXIgTmV4dC5qcyBidWlsZCBvdXRwdXQgY29udGFpbnMgZWl0aGVyOlxuICAgICAgICAtIEEgJ3B1YmxpYycgZGlyZWN0b3J5IGF0OiAke2pvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIil9XG4gICAgICAgIC0gQSAnLm5leHQvc3RhdGljJyBkaXJlY3RvcnkgYXQ6ICR7am9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveW1lbnRcIiwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldCh0aGlzLnN0YWdpbmdEaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIC8vIEFkZCBCVUlMRF9JRCBhcyBtZXRhZGF0YSB0byBhbGwgb2JqZWN0cyBmb3IgdmVyc2lvbiB0cmFja2luZ1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgQlVJTERfSUQ6IHRoaXMucHJvcHMuYnVpbGRJZCxcbiAgICAgIH0sXG4gICAgICBwcnVuZTogZmFsc2UsIC8vIERvbid0IGRlbGV0ZSBleGlzdGluZyBhc3NldHMgdG8gcHJldmVudCA0MDRzIGR1cmluZyBkZXBsb3ltZW50LCBwcnVuaW5nIHdpbGwgYmUgaGFuZGxlZCBieSBwb3N0LWRlcGxveVxuICAgICAgLy8gUzNEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBjb250ZW50IHR5cGVzIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uc1xuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgICAgIC8vIFNldCBhZnRlciB0aGUgc3ByZWFkOiBgcmVzb2x2ZUtleVByZWZpeGAgYWxyZWFkeSBmb2xkZWQgaW4gYW55XG4gICAgICAvLyBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBzbyB0aGlzIGlzIHRoZSBub3JtYWxpemVkIGZvcm0gb2YgaXQuXG4gICAgICAvLyBMZXR0aW5nIHRoZSByYXcgb3ZlcnJpZGUgdGhyb3VnaCBoZXJlIHdvdWxkIHVwbG9hZCB0aGUgYXNzZXRzIHNvbWV3aGVyZVxuICAgICAgLy8gb3RoZXIgdGhhbiB0aGUgYGtleVByZWZpeGAgdXNlZCB0byBidWlsZCB0aGVpciBVUkxzLlxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IHRoaXMua2V5UHJlZml4IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFnaW5nIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IHN0cnVjdHVyZTpcbiAgICogLSBwdWJsaWMvIGZpbGVzIGdvIHRvIHJvb3RcbiAgICogLSAubmV4dC9zdGF0aWMvIGZpbGVzIGdvIHRvIF9uZXh0L3N0YXRpYy9cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3RhZ2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YWdpbmdEaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1hc3NldHMtXCIpKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBwdWJsaWMgZGlyZWN0b3J5IGNvbnRlbnRzIHRvIHN0YWdpbmcgcm9vdFxuICAgICAgY29uc3QgcHVibGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIik7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnlFeGlzdHMocHVibGljUGF0aCkpIHtcbiAgICAgICAgY3BTeW5jKHB1YmxpY1BhdGgsIHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IC5uZXh0L3N0YXRpYyB0byBzdGFnaW5nL19uZXh0L3N0YXRpY1xuICAgICAgY29uc3Qgc3RhdGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiLCBcInN0YXRpY1wiKTtcbiAgICAgIGlmICh0aGlzLmRpcmVjdG9yeUV4aXN0cyhzdGF0aWNQYXRoKSkge1xuICAgICAgICBjb25zdCBuZXh0RGlyID0gam9pbihzdGFnaW5nRGlyLCBcIl9uZXh0XCIpO1xuICAgICAgICBjb25zdCBzdGF0aWNEZXN0RGlyID0gam9pbihuZXh0RGlyLCBcInN0YXRpY1wiKTtcblxuICAgICAgICAvLyBDcmVhdGUgX25leHQgZGlyZWN0b3J5XG4gICAgICAgIG1rZGlyU3luYyhuZXh0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBDb3B5IHN0YXRpYyBhc3NldHNcbiAgICAgICAgY3BTeW5jKHN0YXRpY1BhdGgsIHN0YXRpY0Rlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzQXNzZXRzID8gc3RhZ2luZ0RpciA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBFcnJvciBjcmVhdGluZyBzdGFnaW5nIGRpcmVjdG9yeTpgLCBlcnJvcik7XG4gICAgICAvLyBDbGVhbiB1cCBvbiBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgcm1TeW5jKHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBkaXJlY3RvcnlFeGlzdHMoZGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBleGlzdHNTeW5jKGRpclBhdGgpICYmIHN0YXRTeW5jKGRpclBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -53,6 +53,25 @@ describe("NextjsStaticAssets", () => {
53
53
  expect(createStaticAssets({ basePath: "/base", destinationKeyPrefix: "" })
54
54
  .keyPrefix).toBe("");
55
55
  });
56
+ // A JSII language binding, or a programmatically built props object, can
57
+ // materialize an unset optional field as an explicit `undefined`. Treating
58
+ // that as an intentional "move the assets to the bucket root" override would
59
+ // upload them there while CloudFront still requested them under basePath,
60
+ // failing synth with a key prefix mismatch that names neither the override
61
+ // nor the cause.
62
+ it("falls back to basePath when the override key is present but undefined", () => {
63
+ const staticAssets = new nextjs_static_assets_1.NextjsStaticAssets(stack, "NextjsStaticAssets", {
64
+ buildDirectory,
65
+ buildId: "test-build-id",
66
+ basePath: "/base",
67
+ overrides: {
68
+ bucketDeploymentProps: {
69
+ destinationKeyPrefix: undefined,
70
+ },
71
+ },
72
+ });
73
+ expect(staticAssets.keyPrefix).toBe("base");
74
+ });
56
75
  });
57
76
  });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtc3RhdGljLWFzc2V0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUF3RTtBQUN4RSxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUF5QztBQUN6QyxpRUFBNEQ7QUFFNUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLGNBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBSSxpQkFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsY0FBYyxHQUFHLElBQUEscUJBQVcsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxnQkFBTSxHQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQUksRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFELElBQUEsbUJBQVMsRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFBLHVCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFBLGdCQUFNLEVBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsa0JBQWtCLENBQUMsS0FHM0I7UUFDQyxPQUFPLElBQUkseUNBQWtCLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1lBQ3pELGNBQWM7WUFDZCxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsU0FBUyxFQUNQLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxTQUFTO2dCQUN0QyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUM7b0JBQ0UscUJBQXFCLEVBQUU7d0JBQ3JCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7cUJBQzFDO2lCQUNUO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQ0osa0JBQWtCLENBQUM7Z0JBQ2pCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixvQkFBb0IsRUFBRSxVQUFVO2FBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQ2IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELE1BQU0sQ0FDSixrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ2hFLFNBQVMsQ0FDYixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgbWtkaXJTeW5jLCBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTmV4dGpzU3RhdGljQXNzZXRzIH0gZnJvbSBcIi4vbmV4dGpzLXN0YXRpYy1hc3NldHNcIjtcblxuZGVzY3JpYmUoXCJOZXh0anNTdGF0aWNBc3NldHNcIiwgKCkgPT4ge1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhuZXcgQXBwKCksIFwiVGVzdFN0YWNrXCIpO1xuICAgIGJ1aWxkRGlyZWN0b3J5ID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJuZXh0anMtc3RhdGljLWFzc2V0cy1cIikpO1xuICAgIGNvbnN0IHN0YXRpY0RpciA9IGpvaW4oYnVpbGREaXJlY3RvcnksIFwiLm5leHRcIiwgXCJzdGF0aWNcIik7XG4gICAgbWtkaXJTeW5jKHN0YXRpY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKHN0YXRpY0RpciwgXCJjaHVuay5qc1wiKSwgXCIvLyBjaHVua1wiKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmMoYnVpbGREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RhdGljQXNzZXRzKHByb3BzOiB7XG4gICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgZGVzdGluYXRpb25LZXlQcmVmaXg/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1N0YXRpY0Fzc2V0cyhzdGFjaywgXCJOZXh0anNTdGF0aWNBc3NldHNcIiwge1xuICAgICAgYnVpbGREaXJlY3RvcnksXG4gICAgICBidWlsZElkOiBcInRlc3QtYnVpbGQtaWRcIixcbiAgICAgIGJhc2VQYXRoOiBwcm9wcy5iYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczpcbiAgICAgICAgcHJvcHMuZGVzdGluYXRpb25LZXlQcmVmaXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGJ1Y2tldERlcGxveW1lbnRQcm9wczoge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBwcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeCxcbiAgICAgICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoXCJrZXlQcmVmaXhcIiwgKCkgPT4ge1xuICAgIGl0KFwiaXMgZW1wdHkgd2hlbiBubyBiYXNlUGF0aCBpcyBzZXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNyZWF0ZVN0YXRpY0Fzc2V0cyh7fSkua2V5UHJlZml4KS50b0JlKFwiXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdHJpcHMgc3Vycm91bmRpbmcgc2xhc2hlcyBmcm9tIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChjcmVhdGVTdGF0aWNBc3NldHMoeyBiYXNlUGF0aDogXCIvYmFzZS9cIiB9KS5rZXlQcmVmaXgpLnRvQmUoXCJiYXNlXCIpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG92ZXJyaWRlIGlzIHNwcmVhZCBsYXN0IGludG8gQnVja2V0RGVwbG95bWVudCwgc28gaXQgZGVjaWRlcyB3aGVyZVxuICAgIC8vIHRoZSBvYmplY3RzIGFjdHVhbGx5IGxhbmQuIENvbnN1bWVycyByZWFkaW5nIGFzc2V0cyBiYWNrIG91dCBvZiB0aGVcbiAgICAvLyBidWNrZXQgaGF2ZSB0byBzZWUgdGhhdCwgbm90IHRoZSBiYXNlUGF0aCBwcm9wLlxuICAgIGl0KFwicmVmbGVjdHMgYSBkZXN0aW5hdGlvbktleVByZWZpeCBvdmVycmlkZSByYXRoZXIgdGhhbiBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNyZWF0ZVN0YXRpY0Fzc2V0cyh7XG4gICAgICAgICAgYmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogXCJicmFuY2gteFwiLFxuICAgICAgICB9KS5rZXlQcmVmaXgsXG4gICAgICApLnRvQmUoXCJicmFuY2gteFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaXMgZW1wdHkgd2hlbiBhbiBvdmVycmlkZSBjbGVhcnMgdGhlIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNyZWF0ZVN0YXRpY0Fzc2V0cyh7IGJhc2VQYXRoOiBcIi9iYXNlXCIsIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBcIlwiIH0pXG4gICAgICAgICAgLmtleVByZWZpeCxcbiAgICAgICkudG9CZShcIlwiKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtc3RhdGljLWFzc2V0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUF3RTtBQUN4RSxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUF5QztBQUN6QyxpRUFBNEQ7QUFFNUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLGNBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBSSxpQkFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsY0FBYyxHQUFHLElBQUEscUJBQVcsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxnQkFBTSxHQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQUksRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFELElBQUEsbUJBQVMsRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFBLHVCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFBLGdCQUFNLEVBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsa0JBQWtCLENBQUMsS0FHM0I7UUFDQyxPQUFPLElBQUkseUNBQWtCLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1lBQ3pELGNBQWM7WUFDZCxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsU0FBUyxFQUNQLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxTQUFTO2dCQUN0QyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUM7b0JBQ0UscUJBQXFCLEVBQUU7d0JBQ3JCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7cUJBQzFDO2lCQUNUO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQ0osa0JBQWtCLENBQUM7Z0JBQ2pCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixvQkFBb0IsRUFBRSxVQUFVO2FBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQ2IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELE1BQU0sQ0FDSixrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ2hFLFNBQVMsQ0FDYixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLDJFQUEyRTtRQUMzRSw2RUFBNkU7UUFDN0UsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSxpQkFBaUI7UUFDakIsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtZQUMvRSxNQUFNLFlBQVksR0FBRyxJQUFJLHlDQUFrQixDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtnQkFDdkUsY0FBYztnQkFDZCxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDVCxxQkFBcUIsRUFBRTt3QkFDckIsb0JBQW9CLEVBQUUsU0FBUztxQkFDekI7aUJBQ1Q7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IG1rZGlyU3luYywgbWtkdGVtcFN5bmMsIHJtU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IE5leHRqc1N0YXRpY0Fzc2V0cyB9IGZyb20gXCIuL25leHRqcy1zdGF0aWMtYXNzZXRzXCI7XG5cbmRlc2NyaWJlKFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsICgpID0+IHtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlRlc3RTdGFja1wiKTtcbiAgICBidWlsZERpcmVjdG9yeSA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwibmV4dGpzLXN0YXRpYy1hc3NldHMtXCIpKTtcbiAgICBjb25zdCBzdGF0aWNEaXIgPSBqb2luKGJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpO1xuICAgIG1rZGlyU3luYyhzdGF0aWNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihzdGF0aWNEaXIsIFwiY2h1bmsuanNcIiksIFwiLy8gY2h1bmtcIik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcm1TeW5jKGJ1aWxkRGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0YXRpY0Fzc2V0cyhwcm9wczoge1xuICAgIGJhc2VQYXRoPzogc3RyaW5nO1xuICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4Pzogc3RyaW5nO1xuICB9KSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNTdGF0aWNBc3NldHMoc3RhY2ssIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIGJ1aWxkRGlyZWN0b3J5LFxuICAgICAgYnVpbGRJZDogXCJ0ZXN0LWJ1aWxkLWlkXCIsXG4gICAgICBiYXNlUGF0aDogcHJvcHMuYmFzZVBhdGgsXG4gICAgICBvdmVycmlkZXM6XG4gICAgICAgIHByb3BzLmRlc3RpbmF0aW9uS2V5UHJlZml4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBidWNrZXREZXBsb3ltZW50UHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogcHJvcHMuZGVzdGluYXRpb25LZXlQcmVmaXgsXG4gICAgICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlc2NyaWJlKFwia2V5UHJlZml4XCIsICgpID0+IHtcbiAgICBpdChcImlzIGVtcHR5IHdoZW4gbm8gYmFzZVBhdGggaXMgc2V0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChjcmVhdGVTdGF0aWNBc3NldHMoe30pLmtleVByZWZpeCkudG9CZShcIlwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RyaXBzIHN1cnJvdW5kaW5nIHNsYXNoZXMgZnJvbSBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY3JlYXRlU3RhdGljQXNzZXRzKHsgYmFzZVBhdGg6IFwiL2Jhc2UvXCIgfSkua2V5UHJlZml4KS50b0JlKFwiYmFzZVwiKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBvdmVycmlkZSBpcyBzcHJlYWQgbGFzdCBpbnRvIEJ1Y2tldERlcGxveW1lbnQsIHNvIGl0IGRlY2lkZXMgd2hlcmVcbiAgICAvLyB0aGUgb2JqZWN0cyBhY3R1YWxseSBsYW5kLiBDb25zdW1lcnMgcmVhZGluZyBhc3NldHMgYmFjayBvdXQgb2YgdGhlXG4gICAgLy8gYnVja2V0IGhhdmUgdG8gc2VlIHRoYXQsIG5vdCB0aGUgYmFzZVBhdGggcHJvcC5cbiAgICBpdChcInJlZmxlY3RzIGEgZGVzdGluYXRpb25LZXlQcmVmaXggb3ZlcnJpZGUgcmF0aGVyIHRoYW4gYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBjcmVhdGVTdGF0aWNBc3NldHMoe1xuICAgICAgICAgIGJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IFwiYnJhbmNoLXhcIixcbiAgICAgICAgfSkua2V5UHJlZml4LFxuICAgICAgKS50b0JlKFwiYnJhbmNoLXhcIik7XG4gICAgfSk7XG5cbiAgICBpdChcImlzIGVtcHR5IHdoZW4gYW4gb3ZlcnJpZGUgY2xlYXJzIHRoZSBwcmVmaXhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBjcmVhdGVTdGF0aWNBc3NldHMoeyBiYXNlUGF0aDogXCIvYmFzZVwiLCBkZXN0aW5hdGlvbktleVByZWZpeDogXCJcIiB9KVxuICAgICAgICAgIC5rZXlQcmVmaXgsXG4gICAgICApLnRvQmUoXCJcIik7XG4gICAgfSk7XG5cbiAgICAvLyBBIEpTSUkgbGFuZ3VhZ2UgYmluZGluZywgb3IgYSBwcm9ncmFtbWF0aWNhbGx5IGJ1aWx0IHByb3BzIG9iamVjdCwgY2FuXG4gICAgLy8gbWF0ZXJpYWxpemUgYW4gdW5zZXQgb3B0aW9uYWwgZmllbGQgYXMgYW4gZXhwbGljaXQgYHVuZGVmaW5lZGAuIFRyZWF0aW5nXG4gICAgLy8gdGhhdCBhcyBhbiBpbnRlbnRpb25hbCBcIm1vdmUgdGhlIGFzc2V0cyB0byB0aGUgYnVja2V0IHJvb3RcIiBvdmVycmlkZSB3b3VsZFxuICAgIC8vIHVwbG9hZCB0aGVtIHRoZXJlIHdoaWxlIENsb3VkRnJvbnQgc3RpbGwgcmVxdWVzdGVkIHRoZW0gdW5kZXIgYmFzZVBhdGgsXG4gICAgLy8gZmFpbGluZyBzeW50aCB3aXRoIGEga2V5IHByZWZpeCBtaXNtYXRjaCB0aGF0IG5hbWVzIG5laXRoZXIgdGhlIG92ZXJyaWRlXG4gICAgLy8gbm9yIHRoZSBjYXVzZS5cbiAgICBpdChcImZhbGxzIGJhY2sgdG8gYmFzZVBhdGggd2hlbiB0aGUgb3ZlcnJpZGUga2V5IGlzIHByZXNlbnQgYnV0IHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0aWNBc3NldHMgPSBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHN0YWNrLCBcIk5leHRqc1N0YXRpY0Fzc2V0c1wiLCB7XG4gICAgICAgIGJ1aWxkRGlyZWN0b3J5LFxuICAgICAgICBidWlsZElkOiBcInRlc3QtYnVpbGQtaWRcIixcbiAgICAgICAgYmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgYnVja2V0RGVwbG95bWVudFByb3BzOiB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNBc3NldHMua2V5UHJlZml4KS50b0JlKFwiYmFzZVwiKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==