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
@@ -3,12 +3,10 @@ import { IApplicationLoadBalancer } from "aws-cdk-lib/aws-elasticloadbalancingv2
3
3
  import { Construct } from "constructs";
4
4
  import { NextjsBaseConstructOverrides, NextjsBaseOverrides, NextjsBaseConstruct, NextjsBaseProps } from "./nextjs-base-construct";
5
5
  import { OptionalNextjsContainersProps } from "../generated-structs/OptionalNextjsContainersProps";
6
- import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
7
6
  import { NextjsContainers, NextjsContainersOverrides } from "../nextjs-compute/nextjs-containers";
8
- import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
7
+ import { NextjsPostDeploy } from "../nextjs-post-deploy";
9
8
  export interface NextjsRegionalContainersConstructOverrides extends NextjsBaseConstructOverrides {
10
9
  readonly nextjsContainerProps?: OptionalNextjsContainersProps;
11
- readonly nextjsPostDeployProps?: OptionalNextjsPostDeployProps;
12
10
  }
13
11
  /**
14
12
  * Overrides for `NextjsRegionalContainers`. Overrides are lower level than
@@ -18,7 +16,6 @@ export interface NextjsRegionalContainersConstructOverrides extends NextjsBaseCo
18
16
  export interface NextjsRegionalContainersOverrides extends NextjsBaseOverrides {
19
17
  readonly nextjsRegionalContainers?: NextjsRegionalContainersConstructOverrides;
20
18
  readonly nextjsContainers?: NextjsContainersOverrides;
21
- readonly nextjsPostDeploy?: NextjsPostDeployOverrides;
22
19
  }
23
20
  export interface NextjsRegionalContainersProps extends NextjsBaseProps {
24
21
  /**
@@ -33,6 +30,23 @@ export interface NextjsRegionalContainersProps extends NextjsBaseProps {
33
30
  * a new cluster and VPC gateway endpoints.
34
31
  */
35
32
  readonly ecsCluster?: ICluster;
33
+ /**
34
+ * Path to API Route Handler that returns HTTP 200 to ensure compute health.
35
+ * Used by the ALB target group and the ECS container health check, both of
36
+ * which have to be able to tell a running task from a wedged one.
37
+ *
38
+ * Give the path as your app routes it, without your app's `basePath` —
39
+ * cdk-nextjs adds that prefix, since both checks hit the app directly.
40
+ * @example "/api/health"
41
+ * @example
42
+ * // api/health/route.ts
43
+ * import { NextResponse } from "next/server";
44
+ *
45
+ * export function GET() {
46
+ * return NextResponse.json("");
47
+ * }
48
+ */
49
+ readonly healthCheckPath: string;
36
50
  /**
37
51
  * Override props of any construct.
38
52
  */
@@ -47,9 +61,15 @@ export interface NextjsRegionalContainersProps extends NextjsBaseProps {
47
61
  export declare class NextjsRegionalContainers extends NextjsBaseConstruct {
48
62
  nextjsContainers: NextjsContainers;
49
63
  nextjsPostDeploy: NextjsPostDeploy;
64
+ /**
65
+ * The ALB forwards every path to the container unchanged, so the app only
66
+ * answers under its own `basePath`. `resolvedBasePath` is deliberately not
67
+ * used here: for this `NextjsType` it only namespaces the S3 bucket and has no
68
+ * routing meaning, whereas the app's own `basePath` is what the container
69
+ * serves from.
70
+ */
50
71
  get url(): string;
51
72
  private props;
52
73
  constructor(scope: Construct, id: string, props: NextjsRegionalContainersProps);
53
74
  private createNextjsLoadBalancedContainers;
54
- private createNextjsPostDeploy;
55
75
  }
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const constants_1 = require("../constants");
6
6
  const nextjs_base_construct_1 = require("./nextjs-base-construct");
7
7
  const nextjs_containers_1 = require("../nextjs-compute/nextjs-containers");
8
- const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
8
+ const base_path_1 = require("../utils/base-path");
9
9
  /**
10
10
  * Deploy Next.js load balanced with containers. Uses [Application Load
11
11
  * Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
@@ -13,11 +13,18 @@ const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
13
13
  * for containers.
14
14
  */
15
15
  class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.6.1" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.0" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
+ /**
20
+ * The ALB forwards every path to the container unchanged, so the app only
21
+ * answers under its own `basePath`. `resolvedBasePath` is deliberately not
22
+ * used here: for this `NextjsType` it only namespaces the S3 bucket and has no
23
+ * routing meaning, whereas the app's own `basePath` is what the container
24
+ * serves from.
25
+ */
19
26
  get url() {
20
- return this.nextjsContainers.url;
27
+ return (0, base_path_1.joinPath)(this.nextjsContainers.url, this.nextjsBuild.nextConfigBasePath);
21
28
  }
22
29
  props;
23
30
  constructor(scope, id, props) {
@@ -31,28 +38,23 @@ class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstru
31
38
  return new nextjs_containers_1.NextjsContainers(this, "NextjsContainers", {
32
39
  ...this.computeBaseProps(),
33
40
  alb: this.props.alb,
41
+ buildDirectory: this.props.buildDirectory,
34
42
  ecsCluster: this.props.ecsCluster,
43
+ healthCheckPath: this.resolvedHealthCheckPath(this.props.healthCheckPath),
35
44
  relativeEntrypointPath: this.nextjsBuild.relativePathToEntrypoint,
45
+ relativeProjectDir: this.nextjsBuild.relativeProjectDir,
36
46
  overrides: {
37
47
  ...this.props.overrides?.nextjsContainers,
38
48
  ecsClusterProps: {
39
49
  ...this.props.overrides?.nextjsContainers?.ecsClusterProps,
40
- vpc: this.baseProps.vpc,
50
+ // Conditional for the same reason as the Functions' `vpc`: assigned
51
+ // unconditionally, an unset `vpc` prop would erase the override's.
52
+ ...(this.baseProps.vpc ? { vpc: this.baseProps.vpc } : {}),
41
53
  },
42
54
  },
43
55
  ...this.props.overrides?.nextjsRegionalContainers?.nextjsContainerProps,
44
56
  });
45
57
  }
46
- createNextjsPostDeploy() {
47
- return new nextjs_post_deploy_1.NextjsPostDeploy(this, "NextjsPostDeploy", {
48
- buildId: this.nextjsBuild.buildId,
49
- cacheBucket: this.nextjsCache.cacheBucket,
50
- revalidationTable: this.nextjsCache.revalidationTable,
51
- staticAssetsBucket: this.nextjsStaticAssets.bucket,
52
- overrides: this.props.overrides?.nextjsPostDeploy,
53
- ...this.props.overrides?.nextjsRegionalContainers?.nextjsPostDeployProps,
54
- });
55
- }
56
58
  }
57
59
  exports.NextjsRegionalContainers = NextjsRegionalContainers;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWNvbnRhaW5lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1yZWdpb25hbC1jb250YWluZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSw0Q0FBMEM7QUFDMUMsbUVBS2lDO0FBR2pDLDJFQUc2QztBQUM3Qyw4REFHK0I7QUFxQy9COzs7OztHQUtHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSwyQ0FBbUI7O0lBQy9ELGdCQUFnQixDQUFtQjtJQUNuQyxnQkFBZ0IsQ0FBbUI7SUFDbkMsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFFTyxLQUFLLENBQWdDO0lBRTdDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW9DO1FBRXBDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxzQkFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU8sa0NBQWtDO1FBQ3hDLDRDQUE0QztRQUM1QyxPQUFPLElBQUksb0NBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUNqQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QjtZQUNqRSxTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQ3pDLGVBQWUsRUFBRTtvQkFDZixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGVBQWU7b0JBQzFELEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7aUJBQ3hCO2FBQ0Y7WUFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLG9CQUFvQjtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUI7U0FDekUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoREgsNERBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNsdXN0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMsXG4gIE5leHRqc0Jhc2VPdmVycmlkZXMsXG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3QsXG4gIE5leHRqc0Jhc2VQcm9wcyxcbn0gZnJvbSBcIi4vbmV4dGpzLWJhc2UtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0NvbnRhaW5lcnMsXG4gIE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtY29udGFpbmVyc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNDb250YWluZXJQcm9wcz86IE9wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc1JlZ2lvbmFsQ29udGFpbmVycz86IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVycz86IE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1Byb3BzIGV4dGVuZHMgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIFdoZW4gcHJvdmlkZWQsIGl0IGlzIHBhc3NlZFxuICAgKiBkaXJlY3RseSB0byBgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRGYXJnYXRlU2VydmljZWAuIElmIHRoZSBBTEIgYWxyZWFkeVxuICAgKiBoYXMgYSBsaXN0ZW5lciBvbiBwb3J0IDgwLCBjYWxsIGByZW1vdmVBdXRvQ3JlYXRlZExpc3RlbmVyKClgIGFmdGVyXG4gICAqIGNvbnN0cnVjdGlvbiB0byBhdm9pZCBkZXBsb3ltZW50IGZhaWx1cmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxiPzogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gRUNTIGNsdXN0ZXIuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anMgd2lsbCBza2lwIGNyZWF0aW5nXG4gICAqIGEgbmV3IGNsdXN0ZXIgYW5kIFZQQyBnYXRld2F5IGVuZHBvaW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGVjc0NsdXN0ZXI/OiBJQ2x1c3RlcjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgbG9hZCBiYWxhbmNlZCB3aXRoIGNvbnRhaW5lcnMuIFVzZXMgW0FwcGxpY2F0aW9uIExvYWRcbiAqIEJhbGFuY2VyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2ludHJvZHVjdGlvbi5odG1sKVxuICogZm9yIGxvYWQgYmFsYW5jaW5nIGFuZCBbQVdTIEZhcmdhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FXU19GYXJnYXRlLmh0bWwpXG4gKiBmb3IgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1JlZ2lvbmFsQ29udGFpbmVycyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3Qge1xuICBuZXh0anNDb250YWluZXJzOiBOZXh0anNDb250YWluZXJzO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmV4dGpzQ29udGFpbmVycy51cmw7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzQ29udGFpbmVycyA9IHRoaXMuY3JlYXRlTmV4dGpzTG9hZEJhbGFuY2VkQ29udGFpbmVycygpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNMb2FkQmFsYW5jZWRDb250YWluZXJzKCk6IE5leHRqc0NvbnRhaW5lcnMge1xuICAgIC8vIENyZWF0ZSBjb250YWluZXJzIHdpdGggbG9jYWwgYnVpbGQgb3V0cHV0XG4gICAgcmV0dXJuIG5ldyBOZXh0anNDb250YWluZXJzKHRoaXMsIFwiTmV4dGpzQ29udGFpbmVyc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbXB1dGVCYXNlUHJvcHMoKSxcbiAgICAgIGFsYjogdGhpcy5wcm9wcy5hbGIsXG4gICAgICBlY3NDbHVzdGVyOiB0aGlzLnByb3BzLmVjc0NsdXN0ZXIsXG4gICAgICByZWxhdGl2ZUVudHJ5cG9pbnRQYXRoOiB0aGlzLm5leHRqc0J1aWxkLnJlbGF0aXZlUGF0aFRvRW50cnlwb2ludCxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQ29udGFpbmVycyxcbiAgICAgICAgZWNzQ2x1c3RlclByb3BzOiB7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NvbnRhaW5lcnM/LmVjc0NsdXN0ZXJQcm9wcyxcbiAgICAgICAgICB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzPy5uZXh0anNDb250YWluZXJQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpOiBOZXh0anNQb3N0RGVwbG95IHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1Bvc3REZXBsb3kodGhpcywgXCJOZXh0anNQb3N0RGVwbG95XCIsIHtcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3ksXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWNvbnRhaW5lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1yZWdpb25hbC1jb250YWluZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSw0Q0FBMEM7QUFDMUMsbUVBS2lDO0FBRWpDLDJFQUc2QztBQUU3QyxrREFBOEM7QUFvRDlDOzs7OztHQUtHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSwyQ0FBbUI7O0lBQy9ELGdCQUFnQixDQUFtQjtJQUNuQyxnQkFBZ0IsQ0FBbUI7SUFDbkM7Ozs7OztPQU1HO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFBLG9CQUFRLEVBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQWdDO0lBRTdDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW9DO1FBRXBDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxzQkFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU8sa0NBQWtDO1FBQ3hDLDRDQUE0QztRQUM1QyxPQUFPLElBQUksb0NBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDbkIsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztZQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ2pDLGVBQWUsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0I7WUFDakUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0I7WUFDdkQsU0FBUyxFQUFFO2dCQUNULEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO2dCQUN6QyxlQUFlLEVBQUU7b0JBQ2YsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlO29CQUMxRCxvRUFBb0U7b0JBQ3BFLG1FQUFtRTtvQkFDbkUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzNEO2FBQ0Y7WUFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLG9CQUFvQjtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXBESCw0REFxREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ2x1c3RlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNDb250YWluZXJzLFxuICBOZXh0anNDb250YWluZXJzT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbnRhaW5lcnNcIjtcbmltcG9ydCB7IE5leHRqc1Bvc3REZXBsb3kgfSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gXCIuLi91dGlscy9iYXNlLXBhdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVyUHJvcHM/OiBPcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc1JlZ2lvbmFsQ29udGFpbmVycz86IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVycz86IE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlci4gV2hlbiBwcm92aWRlZCwgaXQgaXMgcGFzc2VkXG4gICAqIGRpcmVjdGx5IHRvIGBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlZEZhcmdhdGVTZXJ2aWNlYC4gSWYgdGhlIEFMQiBhbHJlYWR5XG4gICAqIGhhcyBhIGxpc3RlbmVyIG9uIHBvcnQgODAsIGNhbGwgYHJlbW92ZUF1dG9DcmVhdGVkTGlzdGVuZXIoKWAgYWZ0ZXJcbiAgICogY29uc3RydWN0aW9uIHRvIGF2b2lkIGRlcGxveW1lbnQgZmFpbHVyZXMuXG4gICAqL1xuICByZWFkb25seSBhbGI/OiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBFQ1MgY2x1c3Rlci4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqcyB3aWxsIHNraXAgY3JlYXRpbmdcbiAgICogYSBuZXcgY2x1c3RlciBhbmQgVlBDIGdhdGV3YXkgZW5kcG9pbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZWNzQ2x1c3Rlcj86IElDbHVzdGVyO1xuICAvKipcbiAgICogUGF0aCB0byBBUEkgUm91dGUgSGFuZGxlciB0aGF0IHJldHVybnMgSFRUUCAyMDAgdG8gZW5zdXJlIGNvbXB1dGUgaGVhbHRoLlxuICAgKiBVc2VkIGJ5IHRoZSBBTEIgdGFyZ2V0IGdyb3VwIGFuZCB0aGUgRUNTIGNvbnRhaW5lciBoZWFsdGggY2hlY2ssIGJvdGggb2ZcbiAgICogd2hpY2ggaGF2ZSB0byBiZSBhYmxlIHRvIHRlbGwgYSBydW5uaW5nIHRhc2sgZnJvbSBhIHdlZGdlZCBvbmUuXG4gICAqXG4gICAqIEdpdmUgdGhlIHBhdGggYXMgeW91ciBhcHAgcm91dGVzIGl0LCB3aXRob3V0IHlvdXIgYXBwJ3MgYGJhc2VQYXRoYCDigJRcbiAgICogY2RrLW5leHRqcyBhZGRzIHRoYXQgcHJlZml4LCBzaW5jZSBib3RoIGNoZWNrcyBoaXQgdGhlIGFwcCBkaXJlY3RseS5cbiAgICogQGV4YW1wbGUgXCIvYXBpL2hlYWx0aFwiXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGFwaS9oZWFsdGgvcm91dGUudHNcbiAgICogaW1wb3J0IHsgTmV4dFJlc3BvbnNlIH0gZnJvbSBcIm5leHQvc2VydmVyXCI7XG4gICAqXG4gICAqIGV4cG9ydCBmdW5jdGlvbiBHRVQoKSB7XG4gICAqICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFwiXCIpO1xuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVja1BhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgbG9hZCBiYWxhbmNlZCB3aXRoIGNvbnRhaW5lcnMuIFVzZXMgW0FwcGxpY2F0aW9uIExvYWRcbiAqIEJhbGFuY2VyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2ludHJvZHVjdGlvbi5odG1sKVxuICogZm9yIGxvYWQgYmFsYW5jaW5nIGFuZCBbQVdTIEZhcmdhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FXU19GYXJnYXRlLmh0bWwpXG4gKiBmb3IgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1JlZ2lvbmFsQ29udGFpbmVycyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3Qge1xuICBuZXh0anNDb250YWluZXJzOiBOZXh0anNDb250YWluZXJzO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICAvKipcbiAgICogVGhlIEFMQiBmb3J3YXJkcyBldmVyeSBwYXRoIHRvIHRoZSBjb250YWluZXIgdW5jaGFuZ2VkLCBzbyB0aGUgYXBwIG9ubHlcbiAgICogYW5zd2VycyB1bmRlciBpdHMgb3duIGBiYXNlUGF0aGAuIGByZXNvbHZlZEJhc2VQYXRoYCBpcyBkZWxpYmVyYXRlbHkgbm90XG4gICAqIHVzZWQgaGVyZTogZm9yIHRoaXMgYE5leHRqc1R5cGVgIGl0IG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGFuZCBoYXMgbm9cbiAgICogcm91dGluZyBtZWFuaW5nLCB3aGVyZWFzIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCBpcyB3aGF0IHRoZSBjb250YWluZXJcbiAgICogc2VydmVzIGZyb20uXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW5QYXRoKFxuICAgICAgdGhpcy5uZXh0anNDb250YWluZXJzLnVybCxcbiAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Jhc2VQYXRoLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzQ29udGFpbmVycyA9IHRoaXMuY3JlYXRlTmV4dGpzTG9hZEJhbGFuY2VkQ29udGFpbmVycygpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNMb2FkQmFsYW5jZWRDb250YWluZXJzKCk6IE5leHRqc0NvbnRhaW5lcnMge1xuICAgIC8vIENyZWF0ZSBjb250YWluZXJzIHdpdGggbG9jYWwgYnVpbGQgb3V0cHV0XG4gICAgcmV0dXJuIG5ldyBOZXh0anNDb250YWluZXJzKHRoaXMsIFwiTmV4dGpzQ29udGFpbmVyc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbXB1dGVCYXNlUHJvcHMoKSxcbiAgICAgIGFsYjogdGhpcy5wcm9wcy5hbGIsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIGVjc0NsdXN0ZXI6IHRoaXMucHJvcHMuZWNzQ2x1c3RlcixcbiAgICAgIGhlYWx0aENoZWNrUGF0aDogdGhpcy5yZXNvbHZlZEhlYWx0aENoZWNrUGF0aCh0aGlzLnByb3BzLmhlYWx0aENoZWNrUGF0aCksXG4gICAgICByZWxhdGl2ZUVudHJ5cG9pbnRQYXRoOiB0aGlzLm5leHRqc0J1aWxkLnJlbGF0aXZlUGF0aFRvRW50cnlwb2ludCxcbiAgICAgIHJlbGF0aXZlUHJvamVjdERpcjogdGhpcy5uZXh0anNCdWlsZC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NvbnRhaW5lcnMsXG4gICAgICAgIGVjc0NsdXN0ZXJQcm9wczoge1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNDb250YWluZXJzPy5lY3NDbHVzdGVyUHJvcHMsXG4gICAgICAgICAgLy8gQ29uZGl0aW9uYWwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyB0aGUgRnVuY3Rpb25zJyBgdnBjYDogYXNzaWduZWRcbiAgICAgICAgICAvLyB1bmNvbmRpdGlvbmFsbHksIGFuIHVuc2V0IGB2cGNgIHByb3Agd291bGQgZXJhc2UgdGhlIG92ZXJyaWRlJ3MuXG4gICAgICAgICAgLi4uKHRoaXMuYmFzZVByb3BzLnZwYyA/IHsgdnBjOiB0aGlzLmJhc2VQcm9wcy52cGMgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzPy5uZXh0anNDb250YWluZXJQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,13 +1,11 @@
1
1
  import { Construct } from "constructs";
2
- import { NextjsApi, NextjsApiOverrides, NextjsApiProps } from "../nextjs-api";
3
- import { NextjsBaseConstruct, NextjsBaseProps, NextjsFunctionsConstructOverrides, NextjsBaseOverrides } from "./nextjs-base-construct";
4
- import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
5
- import { NextjsFunctions, NextjsFunctionsOverrides } from "../nextjs-compute/nextjs-functions";
6
- import { NextjsImageFunction, NextjsImageFunctionOverrides } from "../nextjs-compute/nextjs-image-function";
7
- import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
8
- export interface NextjsRegionalFunctionsConstructOverrides extends NextjsFunctionsConstructOverrides {
9
- readonly nextjsApiProps?: NextjsApiProps;
10
- readonly nextjsPostDeployProps?: OptionalNextjsPostDeployProps;
2
+ import { OptionalNextjsApiProps } from "../generated-structs/OptionalNextjsApiProps";
3
+ import { NextjsApi, NextjsApiOverrides } from "../nextjs-api";
4
+ import { NextjsBaseConstruct, NextjsBaseProps, NextjsBaseConstructOverrides, NextjsBaseOverrides } from "./nextjs-base-construct";
5
+ import { NextjsFunctionGroup, NextjsFunctions, NextjsFunctionsOverrides } from "../nextjs-compute/nextjs-functions";
6
+ import { NextjsPostDeploy } from "../nextjs-post-deploy";
7
+ export interface NextjsRegionalFunctionsConstructOverrides extends NextjsBaseConstructOverrides {
8
+ readonly nextjsApiProps?: OptionalNextjsApiProps;
11
9
  }
12
10
  /**
13
11
  * Overrides for `NextjsRegionalFunctions`. Overrides are lower level than
@@ -17,11 +15,24 @@ export interface NextjsRegionalFunctionsConstructOverrides extends NextjsFunctio
17
15
  export interface NextjsRegionalFunctionsOverrides extends NextjsBaseOverrides {
18
16
  readonly nextjsRegionalFunctions?: NextjsRegionalFunctionsConstructOverrides;
19
17
  readonly nextjsFunctions?: NextjsFunctionsOverrides;
20
- readonly nextjsImageFunction?: NextjsImageFunctionOverrides;
21
18
  readonly nextjsApi?: NextjsApiOverrides;
22
- readonly nextjsPostDeploy?: NextjsPostDeployOverrides;
23
19
  }
24
20
  export interface NextjsRegionalFunctionsProps extends NextjsBaseProps {
21
+ /**
22
+ * Package sets of routes into separate Lambda functions, each fronted by its
23
+ * own API Gateway resources.
24
+ *
25
+ * Reach for this when a single function exceeds Lambda's 250 MB unzipped
26
+ * limit — cdk-nextjs throws at synth with the measured size when it does. It is
27
+ * not a performance or isolation feature: every group ships the same Next.js
28
+ * runtime, so splitting only moves route-local code.
29
+ *
30
+ * @see NextjsFunctionGroup for the pattern grammar and its limits. API Gateway
31
+ * could express more than CloudFront can, but the grammar is deliberately the
32
+ * same in both so switching deployment type never regroups routes.
33
+ * @default - one function serves every route
34
+ */
35
+ readonly functionGroups?: NextjsFunctionGroup[];
25
36
  /**
26
37
  * Override props of any construct.
27
38
  */
@@ -33,17 +44,10 @@ export interface NextjsRegionalFunctionsProps extends NextjsBaseProps {
33
44
  */
34
45
  export declare class NextjsRegionalFunctions extends NextjsBaseConstruct {
35
46
  nextjsFunctions: NextjsFunctions;
36
- /**
37
- * Only created when the (experimental, unsupported) dedicated image
38
- * optimization Lambda is enabled. `_next/image` is otherwise served by
39
- * {@link nextjsFunctions}.
40
- */
41
- nextjsImageFunction?: NextjsImageFunction;
42
47
  nextjsApi: NextjsApi;
43
48
  nextjsPostDeploy: NextjsPostDeploy;
44
49
  get url(): string;
45
50
  private props;
46
51
  constructor(scope: Construct, id: string, props: NextjsRegionalFunctionsProps);
47
52
  private createNextjsApi;
48
- private createNextjsPostDeploy;
49
53
  }
@@ -2,24 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NextjsRegionalFunctions = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const function_groups_1 = require("../adapter/function-groups");
5
6
  const constants_1 = require("../constants");
6
7
  const nextjs_api_1 = require("../nextjs-api");
7
8
  const nextjs_base_construct_1 = require("./nextjs-base-construct");
8
- const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
9
- const experimental_flags_1 = require("../utils/experimental-flags");
10
9
  /**
11
10
  * Deploy Next.js regionally with functions. Uses API Gateway REST API
12
11
  * for routing requests and AWS Lambda Functions for server-side rendering.
13
12
  */
14
13
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.6.1" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.0" };
16
15
  nextjsFunctions;
17
- /**
18
- * Only created when the (experimental, unsupported) dedicated image
19
- * optimization Lambda is enabled. `_next/image` is otherwise served by
20
- * {@link nextjsFunctions}.
21
- */
22
- nextjsImageFunction;
23
16
  nextjsApi;
24
17
  nextjsPostDeploy;
25
18
  get url() {
@@ -29,10 +22,7 @@ class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruc
29
22
  constructor(scope, id, props) {
30
23
  super(scope, id, props, constants_1.NextjsType.REGIONAL_FUNCTIONS);
31
24
  this.props = props;
32
- this.nextjsFunctions = this.createNextjsFunctions(this.props.overrides?.nextjsFunctions);
33
- if ((0, experimental_flags_1.useDedicatedImageFunction)()) {
34
- this.nextjsImageFunction = this.createNextjsImageFunction(this.props.overrides?.nextjsImageFunction);
35
- }
25
+ this.nextjsFunctions = this.createNextjsFunctions();
36
26
  this.nextjsApi = this.createNextjsApi();
37
27
  this.nextjsPostDeploy = this.createNextjsPostDeploy();
38
28
  }
@@ -41,23 +31,16 @@ class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruc
41
31
  staticAssetsBucket: this.nextjsStaticAssets.bucket,
42
32
  staticAssetsKeyPrefix: this.nextjsStaticAssets.keyPrefix,
43
33
  serverFunction: this.nextjsFunctions.function,
44
- imageFunction: this.nextjsImageFunction?.function,
45
34
  basePath: this.resolvedBasePath,
46
35
  overrides: this.props.overrides?.nextjsApi,
47
36
  publicDirEntries: this.nextjsBuild.publicDirEntries,
37
+ // `serverFunction` above is the default group's, which the `{proxy+}`
38
+ // catch-all reaches; the rest get resources of their own.
39
+ functionGroups: this.nextjsFunctions.functionGroups.filter((group) => group.name !== function_groups_1.DEFAULT_FUNCTION_GROUP),
40
+ functionGroupBehaviors: this.nextjsBuild.functionGroupBehaviors,
48
41
  ...this.props.overrides?.nextjsRegionalFunctions?.nextjsApiProps,
49
42
  });
50
43
  }
51
- createNextjsPostDeploy() {
52
- return new nextjs_post_deploy_1.NextjsPostDeploy(this, "NextjsPostDeploy", {
53
- buildId: this.nextjsBuild.buildId,
54
- cacheBucket: this.nextjsCache.cacheBucket,
55
- revalidationTable: this.nextjsCache.revalidationTable,
56
- staticAssetsBucket: this.nextjsStaticAssets.bucket,
57
- overrides: this.props.overrides?.nextjsPostDeploy,
58
- ...this.props.overrides?.nextjsRegionalFunctions?.nextjsPostDeployProps,
59
- });
60
- }
61
44
  }
62
45
  exports.NextjsRegionalFunctions = NextjsRegionalFunctions;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LWNvbnN0cnVjdHMvbmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNENBQTBDO0FBQzFDLDhDQUE4RTtBQUM5RSxtRUFLaUM7QUFVakMsOERBRytCO0FBQy9CLG9FQUF3RTtBQTJCeEU7OztHQUdHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSwyQ0FBbUI7O0lBQzlELGVBQWUsQ0FBa0I7SUFDakM7Ozs7T0FJRztJQUNILG1CQUFtQixDQUF1QjtJQUMxQyxTQUFTLENBQVk7SUFDckIsZ0JBQWdCLENBQW1CO0lBQ25DLElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBK0I7SUFFNUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxJQUFBLDhDQUF5QixHQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FDMUMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN0QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztZQUN4RCxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQzdDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUTtZQUNqRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUztZQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGNBQWM7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixPQUFPLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN6QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtZQUNyRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ2pELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBMURILDBEQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTmV4dGpzQXBpLCBOZXh0anNBcGlPdmVycmlkZXMsIE5leHRqc0FwaVByb3BzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3QsXG4gIE5leHRqc0Jhc2VQcm9wcyxcbiAgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBOZXh0anNCYXNlT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0ltYWdlRnVuY3Rpb24sXG4gIE5leHRqc0ltYWdlRnVuY3Rpb25PdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtaW1hZ2UtZnVuY3Rpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1Bvc3REZXBsb3ksXG4gIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNBcGlQcm9wcz86IE5leHRqc0FwaVByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc2AuIE92ZXJyaWRlcyBhcmUgbG93ZXIgbGV2ZWwgdGhhblxuICogcHJvcHMgYW5kIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0RLIENvbnN0cnVjdHMgZ2l2aW5nIHlvdSBtb3JlIGNvbnRyb2wuIEl0J3NcbiAqIHJlY29tbWVuZGVkIHRvIHVzZSBjYXV0aW9uIGFuZCByZXZpZXcgc291cmNlIGNvZGUgc28geW91IGtub3cgaG93IHRoZXkncmUgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc092ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNSZWdpb25hbEZ1bmN0aW9ucz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNGdW5jdGlvbnM/OiBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIHJlZ2lvbmFsbHkgd2l0aCBmdW5jdGlvbnMuIFVzZXMgQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAqIGZvciByb3V0aW5nIHJlcXVlc3RzIGFuZCBBV1MgTGFtYmRhIEZ1bmN0aW9ucyBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0IHtcbiAgbmV4dGpzRnVuY3Rpb25zOiBOZXh0anNGdW5jdGlvbnM7XG4gIC8qKlxuICAgKiBPbmx5IGNyZWF0ZWQgd2hlbiB0aGUgKGV4cGVyaW1lbnRhbCwgdW5zdXBwb3J0ZWQpIGRlZGljYXRlZCBpbWFnZVxuICAgKiBvcHRpbWl6YXRpb24gTGFtYmRhIGlzIGVuYWJsZWQuIGBfbmV4dC9pbWFnZWAgaXMgb3RoZXJ3aXNlIHNlcnZlZCBieVxuICAgKiB7QGxpbmsgbmV4dGpzRnVuY3Rpb25zfS5cbiAgICovXG4gIG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uO1xuICBuZXh0anNBcGk6IE5leHRqc0FwaTtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5leHRqc0FwaS51cmw7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcywgTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zLFxuICAgICk7XG4gICAgaWYgKHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24oKSkge1xuICAgICAgdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbWFnZUZ1bmN0aW9uKFxuICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubmV4dGpzQXBpID0gdGhpcy5jcmVhdGVOZXh0anNBcGkoKTtcbiAgICB0aGlzLm5leHRqc1Bvc3REZXBsb3kgPSB0aGlzLmNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQXBpKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQXBpKHRoaXMsIFwiTmV4dGpzQXBpXCIsIHtcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgc3RhdGljQXNzZXRzS2V5UHJlZml4OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXgsXG4gICAgICBzZXJ2ZXJGdW5jdGlvbjogdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24sXG4gICAgICBpbWFnZUZ1bmN0aW9uOiB0aGlzLm5leHRqc0ltYWdlRnVuY3Rpb24/LmZ1bmN0aW9uLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0FwaSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbEZ1bmN0aW9ucz8ubmV4dGpzQXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LWNvbnN0cnVjdHMvbmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsZ0VBQW9FO0FBQ3BFLDRDQUEwQztBQUUxQyw4Q0FBOEQ7QUFDOUQsbUVBS2lDO0FBNkNqQzs7O0dBR0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLDJDQUFtQjs7SUFDOUQsZUFBZSxDQUFrQjtJQUNqQyxTQUFTLENBQVk7SUFDckIsZ0JBQWdCLENBQW1CO0lBQ25DLElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBK0I7SUFFNUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUksc0JBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELHFCQUFxQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTO1lBQ3hELGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVE7WUFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDbkQsc0VBQXNFO1lBQ3RFLDBEQUEwRDtZQUMxRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUN4RCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyx3Q0FBc0IsQ0FDakQ7WUFDRCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQjtZQUMvRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGNBQWM7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF2Q0gsMERBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IERFRkFVTFRfRlVOQ1RJT05fR1JPVVAgfSBmcm9tIFwiLi4vYWRhcHRlci9mdW5jdGlvbi1ncm91cHNcIjtcbmltcG9ydCB7IE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0FwaVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQXBpUHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc0FwaSwgTmV4dGpzQXBpT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3QsXG4gIE5leHRqc0Jhc2VQcm9wcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4vbmV4dGpzLWJhc2UtY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbkdyb3VwLFxuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7IE5leHRqc1Bvc3REZXBsb3kgfSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzQXBpUHJvcHM/OiBPcHRpb25hbE5leHRqc0FwaVByb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlcyBmb3IgYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYC4gT3ZlcnJpZGVzIGFyZSBsb3dlciBsZXZlbCB0aGFuXG4gKiBwcm9wcyBhbmQgYXJlIHBhc3NlZCBkaXJlY3RseSB0byBDREsgQ29uc3RydWN0cyBnaXZpbmcgeW91IG1vcmUgY29udHJvbC4gSXQnc1xuICogcmVjb21tZW5kZWQgdG8gdXNlIGNhdXRpb24gYW5kIHJldmlldyBzb3VyY2UgY29kZSBzbyB5b3Uga25vdyBob3cgdGhleSdyZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zPzogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0Z1bmN0aW9ucz86IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzQXBpPzogTmV4dGpzQXBpT3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogUGFja2FnZSBzZXRzIG9mIHJvdXRlcyBpbnRvIHNlcGFyYXRlIExhbWJkYSBmdW5jdGlvbnMsIGVhY2ggZnJvbnRlZCBieSBpdHNcbiAgICogb3duIEFQSSBHYXRld2F5IHJlc291cmNlcy5cbiAgICpcbiAgICogUmVhY2ggZm9yIHRoaXMgd2hlbiBhIHNpbmdsZSBmdW5jdGlvbiBleGNlZWRzIExhbWJkYSdzIDI1MCBNQiB1bnppcHBlZFxuICAgKiBsaW1pdCDigJQgY2RrLW5leHRqcyB0aHJvd3MgYXQgc3ludGggd2l0aCB0aGUgbWVhc3VyZWQgc2l6ZSB3aGVuIGl0IGRvZXMuIEl0IGlzXG4gICAqIG5vdCBhIHBlcmZvcm1hbmNlIG9yIGlzb2xhdGlvbiBmZWF0dXJlOiBldmVyeSBncm91cCBzaGlwcyB0aGUgc2FtZSBOZXh0LmpzXG4gICAqIHJ1bnRpbWUsIHNvIHNwbGl0dGluZyBvbmx5IG1vdmVzIHJvdXRlLWxvY2FsIGNvZGUuXG4gICAqXG4gICAqIEBzZWUgTmV4dGpzRnVuY3Rpb25Hcm91cCBmb3IgdGhlIHBhdHRlcm4gZ3JhbW1hciBhbmQgaXRzIGxpbWl0cy4gQVBJIEdhdGV3YXlcbiAgICogY291bGQgZXhwcmVzcyBtb3JlIHRoYW4gQ2xvdWRGcm9udCBjYW4sIGJ1dCB0aGUgZ3JhbW1hciBpcyBkZWxpYmVyYXRlbHkgdGhlXG4gICAqIHNhbWUgaW4gYm90aCBzbyBzd2l0Y2hpbmcgZGVwbG95bWVudCB0eXBlIG5ldmVyIHJlZ3JvdXBzIHJvdXRlcy5cbiAgICogQGRlZmF1bHQgLSBvbmUgZnVuY3Rpb24gc2VydmVzIGV2ZXJ5IHJvdXRlXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbkdyb3Vwcz86IE5leHRqc0Z1bmN0aW9uR3JvdXBbXTtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc092ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBEZXBsb3kgTmV4dC5qcyByZWdpb25hbGx5IHdpdGggZnVuY3Rpb25zLiBVc2VzIEFQSSBHYXRld2F5IFJFU1QgQVBJXG4gKiBmb3Igcm91dGluZyByZXF1ZXN0cyBhbmQgQVdTIExhbWJkYSBGdW5jdGlvbnMgZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdCB7XG4gIG5leHRqc0Z1bmN0aW9uczogTmV4dGpzRnVuY3Rpb25zO1xuICBuZXh0anNBcGk6IE5leHRqc0FwaTtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5leHRqc0FwaS51cmw7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcywgTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoKTtcbiAgICB0aGlzLm5leHRqc0FwaSA9IHRoaXMuY3JlYXRlTmV4dGpzQXBpKCk7XG4gICAgdGhpcy5uZXh0anNQb3N0RGVwbG95ID0gdGhpcy5jcmVhdGVOZXh0anNQb3N0RGVwbG95KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0FwaSgpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0FwaSh0aGlzLCBcIk5leHRqc0FwaVwiLCB7XG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4LFxuICAgICAgc2VydmVyRnVuY3Rpb246IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0FwaSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC8vIGBzZXJ2ZXJGdW5jdGlvbmAgYWJvdmUgaXMgdGhlIGRlZmF1bHQgZ3JvdXAncywgd2hpY2ggdGhlIGB7cHJveHkrfWBcbiAgICAgIC8vIGNhdGNoLWFsbCByZWFjaGVzOyB0aGUgcmVzdCBnZXQgcmVzb3VyY2VzIG9mIHRoZWlyIG93bi5cbiAgICAgIGZ1bmN0aW9uR3JvdXBzOiB0aGlzLm5leHRqc0Z1bmN0aW9ucy5mdW5jdGlvbkdyb3Vwcy5maWx0ZXIoXG4gICAgICAgIChncm91cCkgPT4gZ3JvdXAubmFtZSAhPT0gREVGQVVMVF9GVU5DVElPTl9HUk9VUCxcbiAgICAgICksXG4gICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzOiB0aGlzLm5leHRqc0J1aWxkLmZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxGdW5jdGlvbnM/Lm5leHRqc0FwaVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The path to hand Next.js for an API Gateway REST event.
3
+ *
4
+ * API Gateway strips the prefix it routed on before invoking Lambda: the stage on
5
+ * the execute-api endpoint (`/prod/foo` arrives as `event.path = "/foo"`), or the
6
+ * base path mapping on a custom domain. `requestContext.path` keeps it. Which of
7
+ * the two is right depends on the app:
8
+ *
9
+ * - An app built with a `basePath` that *includes* the stripped prefix — the
10
+ * usual execute-api setup, `basePath: "/prod"` so its links carry the stage —
11
+ * only routes the unstripped path. Handing it `event.path` 404'd every request,
12
+ * which is why `examples/app-playground` used to carry a `proxy.ts` that
13
+ * prepended the stage from an environment variable.
14
+ * - Every other app — no `basePath`, or one API Gateway does not strip (a custom
15
+ * domain mapped at the root) — routes `event.path`, and `requestContext.path`
16
+ * would carry a stage it never heard of.
17
+ *
18
+ * So `requestContext.path` is used exactly when it starts with the app's
19
+ * `basePath` on a segment boundary, and nothing has to be configured: a stage
20
+ * named `test`, a renamed stage and a base path mapping are all read off the
21
+ * event. Measured against a deployed REST API: the two fields share an encoding
22
+ * (`/a%20b` in both), and only `event.path` is normalized — `/prod` arrives as
23
+ * `"/"` and `/prod//foo` as `"/foo"` — so reconstructing the prefix from their
24
+ * difference is not reliable, and taking `requestContext.path` whole is.
25
+ *
26
+ * @param basePath the app's own `basePath`, as the adapter manifest records it:
27
+ * `""` or a leading-slash path with no trailing slash.
28
+ */
29
+ export declare function apiGatewayRequestPath(event: {
30
+ path: string;
31
+ requestContext: {
32
+ path?: string;
33
+ };
34
+ }, basePath: string): string;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.apiGatewayRequestPath = apiGatewayRequestPath;
4
+ const base_path_1 = require("../utils/base-path");
5
+ /**
6
+ * The path to hand Next.js for an API Gateway REST event.
7
+ *
8
+ * API Gateway strips the prefix it routed on before invoking Lambda: the stage on
9
+ * the execute-api endpoint (`/prod/foo` arrives as `event.path = "/foo"`), or the
10
+ * base path mapping on a custom domain. `requestContext.path` keeps it. Which of
11
+ * the two is right depends on the app:
12
+ *
13
+ * - An app built with a `basePath` that *includes* the stripped prefix — the
14
+ * usual execute-api setup, `basePath: "/prod"` so its links carry the stage —
15
+ * only routes the unstripped path. Handing it `event.path` 404'd every request,
16
+ * which is why `examples/app-playground` used to carry a `proxy.ts` that
17
+ * prepended the stage from an environment variable.
18
+ * - Every other app — no `basePath`, or one API Gateway does not strip (a custom
19
+ * domain mapped at the root) — routes `event.path`, and `requestContext.path`
20
+ * would carry a stage it never heard of.
21
+ *
22
+ * So `requestContext.path` is used exactly when it starts with the app's
23
+ * `basePath` on a segment boundary, and nothing has to be configured: a stage
24
+ * named `test`, a renamed stage and a base path mapping are all read off the
25
+ * event. Measured against a deployed REST API: the two fields share an encoding
26
+ * (`/a%20b` in both), and only `event.path` is normalized — `/prod` arrives as
27
+ * `"/"` and `/prod//foo` as `"/foo"` — so reconstructing the prefix from their
28
+ * difference is not reliable, and taking `requestContext.path` whole is.
29
+ *
30
+ * @param basePath the app's own `basePath`, as the adapter manifest records it:
31
+ * `""` or a leading-slash path with no trailing slash.
32
+ */
33
+ function apiGatewayRequestPath(event, basePath) {
34
+ const unstripped = event.requestContext.path;
35
+ if (unstripped && (0, base_path_1.hasPathPrefix)(unstripped, basePath)) {
36
+ return unstripped;
37
+ }
38
+ return ((unstripped && withRepeatedSlashes(unstripped, event.path)) ?? event.path);
39
+ }
40
+ /**
41
+ * `event.path` with the repeated slashes API Gateway collapsed put back, or
42
+ * `undefined` when there are none to restore.
43
+ *
44
+ * `//` arrives as `event.path = "/"`, so Next.js never sees the repeated slash it
45
+ * redirects away (`normalizeRepeatedSlashes`), and the page is served at `//`
46
+ * itself - where the Pages Router's client throws `Invalid URL` building a URL
47
+ * from a protocol-relative path, and the page never hydrates. Found by next.js's
48
+ * `test/e2e/hydration` on Regional Functions.
49
+ *
50
+ * The prefix API Gateway stripped (the stage, or a base path mapping) is not
51
+ * recoverable by subtracting one field from the other, for the reason above.
52
+ * So whole leading segments are dropped from `requestContext.path` until what is
53
+ * left, collapsed, is `event.path`: the first such suffix is the unstripped path
54
+ * below the prefix. If none matches, `event.path` stands.
55
+ */
56
+ function withRepeatedSlashes(unstripped, stripped) {
57
+ if (!unstripped.includes("//")) {
58
+ return undefined;
59
+ }
60
+ for (let rest = unstripped;;) {
61
+ if (rest.replace(/\/{2,}/g, "/") === stripped) {
62
+ return rest === stripped ? undefined : rest;
63
+ }
64
+ const next = rest.replace(/^\/[^/]+/, "");
65
+ if (next === rest) {
66
+ return undefined;
67
+ }
68
+ rest = next;
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWdhdGV3YXktcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2FwaS1nYXRld2F5LXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsc0RBV0M7QUF6Q0Qsa0RBQW1EO0FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsS0FBMEQsRUFDMUQsUUFBZ0I7SUFFaEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0MsSUFBSSxVQUFVLElBQUksSUFBQSx5QkFBYSxFQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxPQUFPLENBQ0wsQ0FBQyxVQUFVLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQzFFLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsVUFBa0IsRUFDbEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsS0FBSyxJQUFJLElBQUksR0FBRyxVQUFVLElBQUssQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNQYXRoUHJlZml4IH0gZnJvbSBcIi4uL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG4vKipcbiAqIFRoZSBwYXRoIHRvIGhhbmQgTmV4dC5qcyBmb3IgYW4gQVBJIEdhdGV3YXkgUkVTVCBldmVudC5cbiAqXG4gKiBBUEkgR2F0ZXdheSBzdHJpcHMgdGhlIHByZWZpeCBpdCByb3V0ZWQgb24gYmVmb3JlIGludm9raW5nIExhbWJkYTogdGhlIHN0YWdlIG9uXG4gKiB0aGUgZXhlY3V0ZS1hcGkgZW5kcG9pbnQgKGAvcHJvZC9mb29gIGFycml2ZXMgYXMgYGV2ZW50LnBhdGggPSBcIi9mb29cImApLCBvciB0aGVcbiAqIGJhc2UgcGF0aCBtYXBwaW5nIG9uIGEgY3VzdG9tIGRvbWFpbi4gYHJlcXVlc3RDb250ZXh0LnBhdGhgIGtlZXBzIGl0LiBXaGljaCBvZlxuICogdGhlIHR3byBpcyByaWdodCBkZXBlbmRzIG9uIHRoZSBhcHA6XG4gKlxuICogLSBBbiBhcHAgYnVpbHQgd2l0aCBhIGBiYXNlUGF0aGAgdGhhdCAqaW5jbHVkZXMqIHRoZSBzdHJpcHBlZCBwcmVmaXgg4oCUIHRoZVxuICogICB1c3VhbCBleGVjdXRlLWFwaSBzZXR1cCwgYGJhc2VQYXRoOiBcIi9wcm9kXCJgIHNvIGl0cyBsaW5rcyBjYXJyeSB0aGUgc3RhZ2Ug4oCUXG4gKiAgIG9ubHkgcm91dGVzIHRoZSB1bnN0cmlwcGVkIHBhdGguIEhhbmRpbmcgaXQgYGV2ZW50LnBhdGhgIDQwNCdkIGV2ZXJ5IHJlcXVlc3QsXG4gKiAgIHdoaWNoIGlzIHdoeSBgZXhhbXBsZXMvYXBwLXBsYXlncm91bmRgIHVzZWQgdG8gY2FycnkgYSBgcHJveHkudHNgIHRoYXRcbiAqICAgcHJlcGVuZGVkIHRoZSBzdGFnZSBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogLSBFdmVyeSBvdGhlciBhcHAg4oCUIG5vIGBiYXNlUGF0aGAsIG9yIG9uZSBBUEkgR2F0ZXdheSBkb2VzIG5vdCBzdHJpcCAoYSBjdXN0b21cbiAqICAgZG9tYWluIG1hcHBlZCBhdCB0aGUgcm9vdCkg4oCUIHJvdXRlcyBgZXZlbnQucGF0aGAsIGFuZCBgcmVxdWVzdENvbnRleHQucGF0aGBcbiAqICAgd291bGQgY2FycnkgYSBzdGFnZSBpdCBuZXZlciBoZWFyZCBvZi5cbiAqXG4gKiBTbyBgcmVxdWVzdENvbnRleHQucGF0aGAgaXMgdXNlZCBleGFjdGx5IHdoZW4gaXQgc3RhcnRzIHdpdGggdGhlIGFwcCdzXG4gKiBgYmFzZVBhdGhgIG9uIGEgc2VnbWVudCBib3VuZGFyeSwgYW5kIG5vdGhpbmcgaGFzIHRvIGJlIGNvbmZpZ3VyZWQ6IGEgc3RhZ2VcbiAqIG5hbWVkIGB0ZXN0YCwgYSByZW5hbWVkIHN0YWdlIGFuZCBhIGJhc2UgcGF0aCBtYXBwaW5nIGFyZSBhbGwgcmVhZCBvZmYgdGhlXG4gKiBldmVudC4gTWVhc3VyZWQgYWdhaW5zdCBhIGRlcGxveWVkIFJFU1QgQVBJOiB0aGUgdHdvIGZpZWxkcyBzaGFyZSBhbiBlbmNvZGluZ1xuICogKGAvYSUyMGJgIGluIGJvdGgpLCBhbmQgb25seSBgZXZlbnQucGF0aGAgaXMgbm9ybWFsaXplZCDigJQgYC9wcm9kYCBhcnJpdmVzIGFzXG4gKiBgXCIvXCJgIGFuZCBgL3Byb2QvL2Zvb2AgYXMgYFwiL2Zvb1wiYCDigJQgc28gcmVjb25zdHJ1Y3RpbmcgdGhlIHByZWZpeCBmcm9tIHRoZWlyXG4gKiBkaWZmZXJlbmNlIGlzIG5vdCByZWxpYWJsZSwgYW5kIHRha2luZyBgcmVxdWVzdENvbnRleHQucGF0aGAgd2hvbGUgaXMuXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCwgYXMgdGhlIGFkYXB0ZXIgbWFuaWZlc3QgcmVjb3JkcyBpdDpcbiAqIGBcIlwiYCBvciBhIGxlYWRpbmctc2xhc2ggcGF0aCB3aXRoIG5vIHRyYWlsaW5nIHNsYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpR2F0ZXdheVJlcXVlc3RQYXRoKFxuICBldmVudDogeyBwYXRoOiBzdHJpbmc7IHJlcXVlc3RDb250ZXh0OiB7IHBhdGg/OiBzdHJpbmcgfSB9LFxuICBiYXNlUGF0aDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdW5zdHJpcHBlZCA9IGV2ZW50LnJlcXVlc3RDb250ZXh0LnBhdGg7XG4gIGlmICh1bnN0cmlwcGVkICYmIGhhc1BhdGhQcmVmaXgodW5zdHJpcHBlZCwgYmFzZVBhdGgpKSB7XG4gICAgcmV0dXJuIHVuc3RyaXBwZWQ7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAodW5zdHJpcHBlZCAmJiB3aXRoUmVwZWF0ZWRTbGFzaGVzKHVuc3RyaXBwZWQsIGV2ZW50LnBhdGgpKSA/PyBldmVudC5wYXRoXG4gICk7XG59XG5cbi8qKlxuICogYGV2ZW50LnBhdGhgIHdpdGggdGhlIHJlcGVhdGVkIHNsYXNoZXMgQVBJIEdhdGV3YXkgY29sbGFwc2VkIHB1dCBiYWNrLCBvclxuICogYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBhcmUgbm9uZSB0byByZXN0b3JlLlxuICpcbiAqIGAvL2AgYXJyaXZlcyBhcyBgZXZlbnQucGF0aCA9IFwiL1wiYCwgc28gTmV4dC5qcyBuZXZlciBzZWVzIHRoZSByZXBlYXRlZCBzbGFzaCBpdFxuICogcmVkaXJlY3RzIGF3YXkgKGBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXNgKSwgYW5kIHRoZSBwYWdlIGlzIHNlcnZlZCBhdCBgLy9gXG4gKiBpdHNlbGYgLSB3aGVyZSB0aGUgUGFnZXMgUm91dGVyJ3MgY2xpZW50IHRocm93cyBgSW52YWxpZCBVUkxgIGJ1aWxkaW5nIGEgVVJMXG4gKiBmcm9tIGEgcHJvdG9jb2wtcmVsYXRpdmUgcGF0aCwgYW5kIHRoZSBwYWdlIG5ldmVyIGh5ZHJhdGVzLiBGb3VuZCBieSBuZXh0LmpzJ3NcbiAqIGB0ZXN0L2UyZS9oeWRyYXRpb25gIG9uIFJlZ2lvbmFsIEZ1bmN0aW9ucy5cbiAqXG4gKiBUaGUgcHJlZml4IEFQSSBHYXRld2F5IHN0cmlwcGVkICh0aGUgc3RhZ2UsIG9yIGEgYmFzZSBwYXRoIG1hcHBpbmcpIGlzIG5vdFxuICogcmVjb3ZlcmFibGUgYnkgc3VidHJhY3Rpbmcgb25lIGZpZWxkIGZyb20gdGhlIG90aGVyLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cbiAqIFNvIHdob2xlIGxlYWRpbmcgc2VnbWVudHMgYXJlIGRyb3BwZWQgZnJvbSBgcmVxdWVzdENvbnRleHQucGF0aGAgdW50aWwgd2hhdCBpc1xuICogbGVmdCwgY29sbGFwc2VkLCBpcyBgZXZlbnQucGF0aGA6IHRoZSBmaXJzdCBzdWNoIHN1ZmZpeCBpcyB0aGUgdW5zdHJpcHBlZCBwYXRoXG4gKiBiZWxvdyB0aGUgcHJlZml4LiBJZiBub25lIG1hdGNoZXMsIGBldmVudC5wYXRoYCBzdGFuZHMuXG4gKi9cbmZ1bmN0aW9uIHdpdGhSZXBlYXRlZFNsYXNoZXMoXG4gIHVuc3RyaXBwZWQ6IHN0cmluZyxcbiAgc3RyaXBwZWQ6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdW5zdHJpcHBlZC5pbmNsdWRlcyhcIi8vXCIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmb3IgKGxldCByZXN0ID0gdW5zdHJpcHBlZDsgOykge1xuICAgIGlmIChyZXN0LnJlcGxhY2UoL1xcL3syLH0vZywgXCIvXCIpID09PSBzdHJpcHBlZCkge1xuICAgICAgcmV0dXJuIHJlc3QgPT09IHN0cmlwcGVkID8gdW5kZWZpbmVkIDogcmVzdDtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHJlc3QucmVwbGFjZSgvXlxcL1teL10rLywgXCJcIik7XG4gICAgaWYgKG5leHQgPT09IHJlc3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJlc3QgPSBuZXh0O1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const api_gateway_path_1 = require("./api-gateway-path");
4
+ /** The two fields as a deployed REST API reported them for the same request. */
5
+ const event = (path, contextPath) => ({
6
+ path,
7
+ requestContext: { path: contextPath },
8
+ });
9
+ describe("apiGatewayRequestPath", () => {
10
+ it("keeps the stage for an app whose basePath is the stage", () => {
11
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/prod/foo"), "/prod")).toBe("/prod/foo");
12
+ });
13
+ it("reads whatever the stage is called, not a fixed name", () => {
14
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/test/foo"), "/test")).toBe("/test/foo");
15
+ });
16
+ it("serves the app's root at the bare stage URL", () => {
17
+ // `event.path` is normalized to "/" here, which is why the prefix cannot be
18
+ // recovered by subtracting one field from the other.
19
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/", "/prod"), "/prod")).toBe("/prod");
20
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/", "/prod/"), "/prod")).toBe("/prod/");
21
+ });
22
+ it("keeps a basePath nested below the stage", () => {
23
+ // `basePath: "/prod/base"` with the construct's `basePath` prop "base": the
24
+ // resources sit under /base, and only the stage is stripped.
25
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/base/foo", "/prod/base/foo"), "/prod/base")).toBe("/prod/base/foo");
26
+ });
27
+ it("passes the percent-encoding through untouched", () => {
28
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/a%20b/c", "/prod/a%20b/c"), "/prod")).toBe("/prod/a%20b/c");
29
+ });
30
+ it("leaves an app without a basePath on the stripped path", () => {
31
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/prod/foo"), "")).toBe("/foo");
32
+ });
33
+ it("leaves an app whose basePath API Gateway does not strip alone", () => {
34
+ // A custom domain mapped at the root: nothing is stripped, so both fields
35
+ // agree and either would do.
36
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/docs/foo", "/docs/foo"), "/docs")).toBe("/docs/foo");
37
+ // And a basePath that is not the stage: the stage-carrying path would 404.
38
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/prod/foo"), "/docs")).toBe("/foo");
39
+ });
40
+ it("matches the basePath on a segment boundary", () => {
41
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/production/foo"), "/prod")).toBe("/foo");
42
+ });
43
+ it("keeps repeated slashes API Gateway collapsed out of event.path", () => {
44
+ // Below the stage, so Next.js can redirect `//` away itself.
45
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/", "/prod//"), "")).toBe("//");
46
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/prod//foo"), "")).toBe("//foo");
47
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/a/b", "/prod/a//b"), "")).toBe("/a//b");
48
+ // A base path mapping of more than one segment strips as many.
49
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "/v1/api//foo"), "")).toBe("//foo");
50
+ // A custom domain mapped at the root strips nothing.
51
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/", "//"), "")).toBe("//");
52
+ // And with a basePath API Gateway does not strip.
53
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/docs/", "/docs//"), "/docs")).toBe("/docs//");
54
+ });
55
+ it("keeps event.path when the repeated slashes cannot be placed", () => {
56
+ // No suffix of the context path collapses to event.path.
57
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/bar", "/prod//foo"), "")).toBe("/bar");
58
+ // Repeated slashes only inside the stripped prefix.
59
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)(event("/foo", "//prod/foo"), "")).toBe("/foo");
60
+ });
61
+ it("falls back to event.path when the context has no path", () => {
62
+ expect((0, api_gateway_path_1.apiGatewayRequestPath)({ path: "/foo", requestContext: {} }, "/prod")).toBe("/foo");
63
+ });
64
+ });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWdhdGV3YXktcGF0aC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvYXBpLWdhdGV3YXktcGF0aC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseURBQTJEO0FBRTNELGdGQUFnRjtBQUNoRixNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxXQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELElBQUk7SUFDSixjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0NBQ3RDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtRQUNoRSxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtRQUM5RCxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCw0RUFBNEU7UUFDNUUscURBQXFEO1FBQ3JELE1BQU0sQ0FBQyxJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUUsTUFBTSxDQUFDLElBQUEsd0NBQXFCLEVBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCxNQUFNLENBQ0osSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQzFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELE1BQU0sQ0FDSixJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQ25FLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtRQUN2RSwwRUFBMEU7UUFDMUUsNkJBQTZCO1FBQzdCLE1BQU0sQ0FDSixJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQ2hFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BCLDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRSxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLENBQ0osSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQ2pFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtRQUN4RSw2REFBNkQ7UUFDN0QsTUFBTSxDQUFDLElBQUEsd0NBQXFCLEVBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqRSxPQUFPLENBQ1IsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pFLE9BQU8sQ0FDUixDQUFDO1FBQ0YsK0RBQStEO1FBQy9ELE1BQU0sQ0FBQyxJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLE9BQU8sQ0FDUixDQUFDO1FBQ0YscURBQXFEO1FBQ3JELE1BQU0sQ0FBQyxJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0Qsa0RBQWtEO1FBQ2xELE1BQU0sQ0FBQyxJQUFBLHdDQUFxQixFQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JFLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLHlEQUF5RDtRQUN6RCxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLG9EQUFvRDtRQUNwRCxNQUFNLENBQUMsSUFBQSx3Q0FBcUIsRUFBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLENBQ0osSUFBQSx3Q0FBcUIsRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUNyRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBpR2F0ZXdheVJlcXVlc3RQYXRoIH0gZnJvbSBcIi4vYXBpLWdhdGV3YXktcGF0aFwiO1xuXG4vKiogVGhlIHR3byBmaWVsZHMgYXMgYSBkZXBsb3llZCBSRVNUIEFQSSByZXBvcnRlZCB0aGVtIGZvciB0aGUgc2FtZSByZXF1ZXN0LiAqL1xuY29uc3QgZXZlbnQgPSAocGF0aDogc3RyaW5nLCBjb250ZXh0UGF0aDogc3RyaW5nKSA9PiAoe1xuICBwYXRoLFxuICByZXF1ZXN0Q29udGV4dDogeyBwYXRoOiBjb250ZXh0UGF0aCB9LFxufSk7XG5cbmRlc2NyaWJlKFwiYXBpR2F0ZXdheVJlcXVlc3RQYXRoXCIsICgpID0+IHtcbiAgaXQoXCJrZWVwcyB0aGUgc3RhZ2UgZm9yIGFuIGFwcCB3aG9zZSBiYXNlUGF0aCBpcyB0aGUgc3RhZ2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZm9vXCIsIFwiL3Byb2QvZm9vXCIpLCBcIi9wcm9kXCIpKS50b0JlKFxuICAgICAgXCIvcHJvZC9mb29cIixcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlYWRzIHdoYXRldmVyIHRoZSBzdGFnZSBpcyBjYWxsZWQsIG5vdCBhIGZpeGVkIG5hbWVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZm9vXCIsIFwiL3Rlc3QvZm9vXCIpLCBcIi90ZXN0XCIpKS50b0JlKFxuICAgICAgXCIvdGVzdC9mb29cIixcbiAgICApO1xuICB9KTtcblxuICBpdChcInNlcnZlcyB0aGUgYXBwJ3Mgcm9vdCBhdCB0aGUgYmFyZSBzdGFnZSBVUkxcIiwgKCkgPT4ge1xuICAgIC8vIGBldmVudC5wYXRoYCBpcyBub3JtYWxpemVkIHRvIFwiL1wiIGhlcmUsIHdoaWNoIGlzIHdoeSB0aGUgcHJlZml4IGNhbm5vdCBiZVxuICAgIC8vIHJlY292ZXJlZCBieSBzdWJ0cmFjdGluZyBvbmUgZmllbGQgZnJvbSB0aGUgb3RoZXIuXG4gICAgZXhwZWN0KGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9cIiwgXCIvcHJvZFwiKSwgXCIvcHJvZFwiKSkudG9CZShcIi9wcm9kXCIpO1xuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvXCIsIFwiL3Byb2QvXCIpLCBcIi9wcm9kXCIpKS50b0JlKFwiL3Byb2QvXCIpO1xuICB9KTtcblxuICBpdChcImtlZXBzIGEgYmFzZVBhdGggbmVzdGVkIGJlbG93IHRoZSBzdGFnZVwiLCAoKSA9PiB7XG4gICAgLy8gYGJhc2VQYXRoOiBcIi9wcm9kL2Jhc2VcImAgd2l0aCB0aGUgY29uc3RydWN0J3MgYGJhc2VQYXRoYCBwcm9wIFwiYmFzZVwiOiB0aGVcbiAgICAvLyByZXNvdXJjZXMgc2l0IHVuZGVyIC9iYXNlLCBhbmQgb25seSB0aGUgc3RhZ2UgaXMgc3RyaXBwZWQuXG4gICAgZXhwZWN0KFxuICAgICAgYXBpR2F0ZXdheVJlcXVlc3RQYXRoKGV2ZW50KFwiL2Jhc2UvZm9vXCIsIFwiL3Byb2QvYmFzZS9mb29cIiksIFwiL3Byb2QvYmFzZVwiKSxcbiAgICApLnRvQmUoXCIvcHJvZC9iYXNlL2Zvb1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgdGhlIHBlcmNlbnQtZW5jb2RpbmcgdGhyb3VnaCB1bnRvdWNoZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9hJTIwYi9jXCIsIFwiL3Byb2QvYSUyMGIvY1wiKSwgXCIvcHJvZFwiKSxcbiAgICApLnRvQmUoXCIvcHJvZC9hJTIwYi9jXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhbiBhcHAgd2l0aG91dCBhIGJhc2VQYXRoIG9uIHRoZSBzdHJpcHBlZCBwYXRoXCIsICgpID0+IHtcbiAgICBleHBlY3QoYXBpR2F0ZXdheVJlcXVlc3RQYXRoKGV2ZW50KFwiL2Zvb1wiLCBcIi9wcm9kL2Zvb1wiKSwgXCJcIikpLnRvQmUoXCIvZm9vXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhbiBhcHAgd2hvc2UgYmFzZVBhdGggQVBJIEdhdGV3YXkgZG9lcyBub3Qgc3RyaXAgYWxvbmVcIiwgKCkgPT4ge1xuICAgIC8vIEEgY3VzdG9tIGRvbWFpbiBtYXBwZWQgYXQgdGhlIHJvb3Q6IG5vdGhpbmcgaXMgc3RyaXBwZWQsIHNvIGJvdGggZmllbGRzXG4gICAgLy8gYWdyZWUgYW5kIGVpdGhlciB3b3VsZCBkby5cbiAgICBleHBlY3QoXG4gICAgICBhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZG9jcy9mb29cIiwgXCIvZG9jcy9mb29cIiksIFwiL2RvY3NcIiksXG4gICAgKS50b0JlKFwiL2RvY3MvZm9vXCIpO1xuICAgIC8vIEFuZCBhIGJhc2VQYXRoIHRoYXQgaXMgbm90IHRoZSBzdGFnZTogdGhlIHN0YWdlLWNhcnJ5aW5nIHBhdGggd291bGQgNDA0LlxuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZm9vXCIsIFwiL3Byb2QvZm9vXCIpLCBcIi9kb2NzXCIpKS50b0JlKFxuICAgICAgXCIvZm9vXCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJtYXRjaGVzIHRoZSBiYXNlUGF0aCBvbiBhIHNlZ21lbnQgYm91bmRhcnlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9mb29cIiwgXCIvcHJvZHVjdGlvbi9mb29cIiksIFwiL3Byb2RcIiksXG4gICAgKS50b0JlKFwiL2Zvb1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyByZXBlYXRlZCBzbGFzaGVzIEFQSSBHYXRld2F5IGNvbGxhcHNlZCBvdXQgb2YgZXZlbnQucGF0aFwiLCAoKSA9PiB7XG4gICAgLy8gQmVsb3cgdGhlIHN0YWdlLCBzbyBOZXh0LmpzIGNhbiByZWRpcmVjdCBgLy9gIGF3YXkgaXRzZWxmLlxuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvXCIsIFwiL3Byb2QvL1wiKSwgXCJcIikpLnRvQmUoXCIvL1wiKTtcbiAgICBleHBlY3QoYXBpR2F0ZXdheVJlcXVlc3RQYXRoKGV2ZW50KFwiL2Zvb1wiLCBcIi9wcm9kLy9mb29cIiksIFwiXCIpKS50b0JlKFxuICAgICAgXCIvL2Zvb1wiLFxuICAgICk7XG4gICAgZXhwZWN0KGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9hL2JcIiwgXCIvcHJvZC9hLy9iXCIpLCBcIlwiKSkudG9CZShcbiAgICAgIFwiL2EvL2JcIixcbiAgICApO1xuICAgIC8vIEEgYmFzZSBwYXRoIG1hcHBpbmcgb2YgbW9yZSB0aGFuIG9uZSBzZWdtZW50IHN0cmlwcyBhcyBtYW55LlxuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZm9vXCIsIFwiL3YxL2FwaS8vZm9vXCIpLCBcIlwiKSkudG9CZShcbiAgICAgIFwiLy9mb29cIixcbiAgICApO1xuICAgIC8vIEEgY3VzdG9tIGRvbWFpbiBtYXBwZWQgYXQgdGhlIHJvb3Qgc3RyaXBzIG5vdGhpbmcuXG4gICAgZXhwZWN0KGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9cIiwgXCIvL1wiKSwgXCJcIikpLnRvQmUoXCIvL1wiKTtcbiAgICAvLyBBbmQgd2l0aCBhIGJhc2VQYXRoIEFQSSBHYXRld2F5IGRvZXMgbm90IHN0cmlwLlxuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZG9jcy9cIiwgXCIvZG9jcy8vXCIpLCBcIi9kb2NzXCIpKS50b0JlKFxuICAgICAgXCIvZG9jcy8vXCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyBldmVudC5wYXRoIHdoZW4gdGhlIHJlcGVhdGVkIHNsYXNoZXMgY2Fubm90IGJlIHBsYWNlZFwiLCAoKSA9PiB7XG4gICAgLy8gTm8gc3VmZml4IG9mIHRoZSBjb250ZXh0IHBhdGggY29sbGFwc2VzIHRvIGV2ZW50LnBhdGguXG4gICAgZXhwZWN0KGFwaUdhdGV3YXlSZXF1ZXN0UGF0aChldmVudChcIi9iYXJcIiwgXCIvcHJvZC8vZm9vXCIpLCBcIlwiKSkudG9CZShcIi9iYXJcIik7XG4gICAgLy8gUmVwZWF0ZWQgc2xhc2hlcyBvbmx5IGluc2lkZSB0aGUgc3RyaXBwZWQgcHJlZml4LlxuICAgIGV4cGVjdChhcGlHYXRld2F5UmVxdWVzdFBhdGgoZXZlbnQoXCIvZm9vXCIsIFwiLy9wcm9kL2Zvb1wiKSwgXCJcIikpLnRvQmUoXCIvZm9vXCIpO1xuICB9KTtcblxuICBpdChcImZhbGxzIGJhY2sgdG8gZXZlbnQucGF0aCB3aGVuIHRoZSBjb250ZXh0IGhhcyBubyBwYXRoXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBhcGlHYXRld2F5UmVxdWVzdFBhdGgoeyBwYXRoOiBcIi9mb29cIiwgcmVxdWVzdENvbnRleHQ6IHt9IH0sIFwiL3Byb2RcIiksXG4gICAgKS50b0JlKFwiL2Zvb1wiKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The canonical spelling of a URL that reached the wrong function group only
3
+ * because of its case.
4
+ *
5
+ * CloudFront behaviors and API Gateway resources match paths case-sensitively,
6
+ * and Next.js's route matching does not, so `/API/reports/1` misses the
7
+ * `api/reports/*` behavior, reaches the default group, and matches
8
+ * `/api/reports/[id]` there, whose code another group carries. Redirecting it
9
+ * to `/api/reports/1` gets it to the group that has the route, where a 404
10
+ * would have told the client a URL `next start` serves does not exist.
11
+ */
12
+ import { AdapterManifest } from "./manifest";
13
+ /**
14
+ * `pathname` (as requested, percent-encoded) respelled with the static segments
15
+ * of `template` (the matched `manifest.entrypoints` key), keeping the request's
16
+ * own dynamic segment values and basePath, which the manifest key carries too.
17
+ * `undefined` when the two differ in anything but case — a rewrite, a
18
+ * mismatched shape — or not at all, since then a redirect would not change
19
+ * where the request goes. No locale handling: `functionGroups` cannot be
20
+ * combined with i18n (`assertNoI18nSplitting`).
21
+ */
22
+ export declare function caseCanonicalPath(pathname: string, template: string, manifest: Pick<AdapterManifest, "config">): string | undefined;