cdk-nextjs 0.5.15 → 0.6.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 (53) hide show
  1. package/.jsii +821 -253
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +787 -18
  4. package/README.md +3 -3
  5. package/docs/breaking-changes.md +86 -0
  6. package/docs/caching-guide.md +6 -0
  7. package/docs/plans/adapter-runtime-release.md +362 -0
  8. package/docs/plans/phase-0-image-function-opt-in.md +295 -0
  9. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +13 -0
  10. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  11. package/lib/image-optimization/handler-utils.d.ts +34 -0
  12. package/lib/image-optimization/handler-utils.js +83 -0
  13. package/lib/image-optimization/handler-utils.test.d.ts +1 -0
  14. package/lib/image-optimization/handler-utils.test.js +178 -0
  15. package/lib/image-optimization/handler.mjs +56126 -0
  16. package/lib/index.d.ts +2 -1
  17. package/lib/index.js +4 -2
  18. package/lib/nextjs-api.d.ts +44 -0
  19. package/lib/nextjs-api.js +64 -20
  20. package/lib/nextjs-api.test.d.ts +1 -0
  21. package/lib/nextjs-api.test.js +144 -0
  22. package/lib/nextjs-build/nextjs-build.d.ts +60 -0
  23. package/lib/nextjs-build/nextjs-build.js +184 -27
  24. package/lib/nextjs-cache.js +1 -1
  25. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  26. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  27. package/lib/nextjs-compute/nextjs-image-function.d.ts +53 -0
  28. package/lib/nextjs-compute/nextjs-image-function.js +59 -0
  29. package/lib/nextjs-distribution.d.ts +33 -0
  30. package/lib/nextjs-distribution.js +39 -11
  31. package/lib/nextjs-post-deploy.js +1 -1
  32. package/lib/nextjs-static-assets.d.ts +18 -0
  33. package/lib/nextjs-static-assets.js +33 -6
  34. package/lib/nextjs-static-assets.test.d.ts +1 -0
  35. package/lib/nextjs-static-assets.test.js +58 -0
  36. package/lib/root-constructs/nextjs-base-construct.d.ts +62 -2
  37. package/lib/root-constructs/nextjs-base-construct.js +81 -3
  38. package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
  39. package/lib/root-constructs/nextjs-global-containers.js +11 -5
  40. package/lib/root-constructs/nextjs-global-functions.d.ts +16 -5
  41. package/lib/root-constructs/nextjs-global-functions.js +23 -21
  42. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  43. package/lib/root-constructs/nextjs-regional-functions.d.ts +11 -5
  44. package/lib/root-constructs/nextjs-regional-functions.js +17 -21
  45. package/lib/utils/base-path.d.ts +40 -0
  46. package/lib/utils/base-path.js +123 -0
  47. package/lib/utils/base-path.test.d.ts +1 -0
  48. package/lib/utils/base-path.test.js +163 -0
  49. package/lib/utils/experimental-flags.d.ts +24 -0
  50. package/lib/utils/experimental-flags.js +30 -0
  51. package/lib/utils/get-architecture.d.ts +10 -0
  52. package/lib/utils/get-architecture.js +17 -2
  53. package/package.json +3 -1
@@ -6,10 +6,11 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
6
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
8
8
  const constants_1 = require("../constants");
9
- const nextjs_functions_1 = require("../nextjs-compute/nextjs-functions");
9
+ const nextjs_base_construct_1 = require("./nextjs-base-construct");
10
10
  const nextjs_distribution_1 = require("../nextjs-distribution");
11
11
  const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
12
- const nextjs_base_construct_1 = require("./nextjs-base-construct");
12
+ const base_path_1 = require("../utils/base-path");
13
+ const experimental_flags_1 = require("../utils/experimental-flags");
13
14
  /**
14
15
  * Deploy Next.js globally distributed with functions. Uses [CloudFront
15
16
  * Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
@@ -17,18 +18,32 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
17
18
  * for functions.
18
19
  */
19
20
  class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.5.15" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.6.0" };
21
22
  nextjsFunctions;
23
+ /**
24
+ * Only created when the (experimental, unsupported) dedicated image
25
+ * optimization Lambda is enabled. `_next/image` is otherwise served by
26
+ * {@link nextjsFunctions}.
27
+ */
28
+ nextjsImageFunction;
22
29
  nextjsDistribution;
23
30
  nextjsPostDeploy;
31
+ /**
32
+ * Public URL of the app, including `basePath` — the app only answers under
33
+ * that prefix, and it's derived from the app's own `basePath` when the prop is
34
+ * left unset, so it's there whether or not you asked for it.
35
+ */
24
36
  get url() {
25
- return `https://${this.nextjsDistribution.distribution.domainName}`;
37
+ return (0, base_path_1.joinPath)(`https://${this.nextjsDistribution.distribution.domainName}`, this.resolvedBasePath);
26
38
  }
27
39
  props;
28
40
  constructor(scope, id, props) {
29
41
  super(scope, id, props, constants_1.NextjsType.GLOBAL_FUNCTIONS);
30
42
  this.props = props;
31
- this.nextjsFunctions = this.createNextjsFunctions();
43
+ this.nextjsFunctions = this.createNextjsFunctions(this.props.overrides?.nextjsFunctions);
44
+ if ((0, experimental_flags_1.useDedicatedImageFunction)()) {
45
+ this.nextjsImageFunction = this.createNextjsImageFunction(this.props.overrides?.nextjsImageFunction);
46
+ }
32
47
  this.nextjsDistribution = this.createNextjsDistribution();
33
48
  this.wireCloudFrontInvalidation();
34
49
  this.nextjsPostDeploy = this.createNextjsPostDeploy();
@@ -83,25 +98,12 @@ class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct
83
98
  }));
84
99
  this.nextjsFunctions.function.addEnvironment("CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME", distributionIdParameterName);
85
100
  }
86
- createNextjsFunctions() {
87
- // Create functions with local build output
88
- return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
89
- ...this.computeBaseProps(),
90
- overrides: {
91
- ...this.props.overrides?.nextjsFunctions,
92
- dockerImageFunctionProps: {
93
- ...this.props.overrides?.nextjsFunctions?.dockerImageFunctionProps,
94
- vpc: this.baseProps.vpc,
95
- },
96
- },
97
- ...this.props.overrides?.nextjsGlobalFunctions?.nextjsFunctionsProps,
98
- });
99
- }
100
101
  createNextjsDistribution() {
101
102
  return new nextjs_distribution_1.NextjsDistribution(this, "NextjsDistribution", {
102
103
  assetsBucket: this.nextjsStaticAssets.bucket,
103
- basePath: this.baseProps.basePath,
104
+ basePath: this.resolvedBasePath,
104
105
  functionUrl: this.nextjsFunctions.functionUrl,
106
+ imageFunctionUrl: this.nextjsImageFunction?.functionUrl,
105
107
  nextjsType: this.nextjsType,
106
108
  overrides: this.props.overrides?.nextjsDistribution,
107
109
  publicDirEntries: this.nextjsBuild.publicDirEntries,
@@ -121,4 +123,4 @@ class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct
121
123
  }
122
124
  }
123
125
  exports.NextjsGlobalFunctions = NextjsGlobalFunctions;
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1nbG9iYWwtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBb0M7QUFFcEMsaURBQXNEO0FBQ3RELGlEQUFzRDtBQUV0RCw0Q0FBMEM7QUFHMUMseUVBSTRDO0FBQzVDLGdFQUdnQztBQUNoQyw4REFHK0I7QUFDL0IsbUVBS2lDO0FBZ0NqQzs7Ozs7R0FLRztBQUNILE1BQWEscUJBQXNCLFNBQVEsMkNBQW1COztJQUM1RCxlQUFlLENBQWtCO0lBQ2pDLGtCQUFrQixDQUFxQjtJQUN2QyxnQkFBZ0IsQ0FBbUI7SUFDbkMsSUFBSSxHQUFHO1FBQ0wsT0FBTyxXQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVPLEtBQUssQ0FBNkI7SUFFMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSywwQkFBMEI7UUFDaEMsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRixJQUFJLHlCQUFlLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFO1lBQ25ELGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsY0FBYztTQUNqRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzNDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUM3QixTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDZCxPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsV0FBVztvQkFDckIsWUFBWSxFQUFFLDJCQUEyQjtpQkFDMUMsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzNDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztZQUMxQyxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLGlFQUFpRTtZQUNqRSxpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLFNBQVMsRUFBRTtnQkFDVCxLQUFLLENBQUMsU0FBUyxDQUFDO29CQUNkLE9BQU8sRUFBRSxZQUFZO29CQUNyQixNQUFNLEVBQUUsRUFBRTtvQkFDVixRQUFRLEVBQUUsY0FBYztvQkFDeEIsWUFBWSxFQUFFLEdBQUc7aUJBQ2xCLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUMxQyx1Q0FBdUMsRUFDdkMsMkJBQTJCLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLDJDQUEyQztRQUMzQyxPQUFPLElBQUksa0NBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDbEQsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZTtnQkFDeEMsd0JBQXdCLEVBQUU7b0JBQ3hCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHdCQUF3QjtvQkFDbEUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztpQkFDeEI7YUFDRjtZQUNELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLHdDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO1lBQzdDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ25ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFySEgsc0RBc0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9ucyxcbiAgTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzLFxuICBOZXh0anNGdW5jdGlvbnNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWRpc3RyaWJ1dGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNHbG9iYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zUHJvcHM/OiBOZXh0anNGdW5jdGlvbnNQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0dsb2JhbEZ1bmN0aW9ucz86IE5leHRqc0dsb2JhbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb24/OiBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbEZ1bmN0aW9uc1Byb3BzIGV4dGVuZHMgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4gQ2FuIGJlIHVzZWQgd2l0aCBgYmFzZVBhdGhgIHRvIGhvc3QgbXVsdGlwbGVcbiAgICogYXBwcyBvbiB0aGUgc2FtZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNHbG9iYWxGdW5jdGlvbnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgZ2xvYmFsbHkgZGlzdHJpYnV0ZWQgd2l0aCBmdW5jdGlvbnMuIFVzZXMgW0Nsb3VkRnJvbnRcbiAqIERpc3RyaWJ1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13b3JraW5nLXdpdGguaHRtbClcbiAqIGFzIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayAoQ0ROKSBmb3IgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBhbmQgW0FXUyBMYW1iZGEgRnVuY3Rpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy93ZWxjb21lLmh0bWwpXG4gKiBmb3IgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzR2xvYmFsRnVuY3Rpb25zIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdCB7XG4gIG5leHRqc0Z1bmN0aW9uczogTmV4dGpzRnVuY3Rpb25zO1xuICBuZXh0anNEaXN0cmlidXRpb246IE5leHRqc0Rpc3RyaWJ1dGlvbjtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3RoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbi5kb21haW5OYW1lfWA7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoKTtcbiAgICB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbiA9IHRoaXMuY3JlYXRlTmV4dGpzRGlzdHJpYnV0aW9uKCk7XG4gICAgdGhpcy53aXJlQ2xvdWRGcm9udEludmFsaWRhdGlvbigpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZnVuY3Rpb24gcGVybWlzc2lvbiB0byBpbnZhbGlkYXRlIHRoZSBkaXN0cmlidXRpb24gYW5kIHBhc3Nlc1xuICAgKiBhbG9uZyBhIHdheSB0byBsb29rIHVwIGl0cyBJRCwgc28gb24tZGVtYW5kIHJldmFsaWRhdGlvblxuICAgKiAocmV2YWxpZGF0ZVRhZy9yZXZhbGlkYXRlUGF0aCkgY2FuIGV2aWN0IHN0YWxlIHJlc3BvbnNlcyBmcm9tIHRoZSBDRE5cbiAgICogZWRnZSBjYWNoZSwgbm90IGp1c3QgdGhlIG9yaWdpbidzIFMzL0R5bmFtb0RCIGNhY2hlLlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIElEIGNhbid0IGJlIHBhc3NlZCBhcyBhIHBsYWluIGVudiB2YXIgb3Igc2NvcGVkIElBTVxuICAgKiByZXNvdXJjZSBBUk46IHRoZSBkaXN0cmlidXRpb24ncyBvcmlnaW4gcmVmZXJlbmNlcyB0aGlzIGZ1bmN0aW9uJ3MgVVJMLFxuICAgKiBzbyBtYWtpbmcgdGhlIGZ1bmN0aW9uJ3Mgcm9sZS9lbnZpcm9ubWVudCByZWZlcmVuY2UgdGhlIGRpc3RyaWJ1dGlvbidzXG4gICAqIElEIGluIHJldHVybiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5LiBJbnN0ZWFkLFxuICAgKiB0aGUgSUQgaXMgcHVibGlzaGVkIHRvIGFuIFNTTSBQYXJhbWV0ZXIgKHdob3NlICpuYW1lKiBpcyBzdGF0aWMgYW5kIHNhZmVcbiAgICogdG8gZW1iZWQpIHRoYXQgdGhlIGZ1bmN0aW9uIHJlYWRzIGF0IHJ1bnRpbWUsIGFuZCB0aGUgSUFNIGdyYW50IGlzXG4gICAqIHNjb3BlZCB0byBhbGwgZGlzdHJpYnV0aW9ucyBpbiB0aGlzIGFjY291bnQvcmVnaW9uIHJhdGhlciB0aGFuIHRoaXNcbiAgICogc3BlY2lmaWMgKG5vdC15ZXQta25vd24tYXQtc3ludGgtdGltZSkgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlQ2xvdWRGcm9udEludmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSA9IGBjZGstbmV4dGpzLWRpc3RyaWJ1dGlvbi1pZC0ke3RoaXMubm9kZS5hZGRyfWA7XG5cbiAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiRGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJcIiwge1xuICAgICAgcGFyYW1ldGVyTmFtZTogZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICB9KTtcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogXCJzc21cIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcInBhcmFtZXRlclwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJjbG91ZGZyb250OkNyZWF0ZUludmFsaWRhdGlvblwiXSxcbiAgICAgICAgLy8gQ2FuJ3Qgc2NvcGUgdGhpcyB0byB0aGUgc3BlY2lmaWMgZGlzdHJpYnV0aW9uOiB0aGUgZGlzdHJpYnV0aW9uJ3NcbiAgICAgICAgLy8gb3JpZ2luIGFscmVhZHkgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uICh2aWEgaXRzIEZ1bmN0aW9uVXJsKSwgc29cbiAgICAgICAgLy8gcmVmZXJlbmNpbmcgdGhlIGRpc3RyaWJ1dGlvbidzIElEIGhlcmUgd291bGQgY3JlYXRlIGEgY2lyY3VsYXJcbiAgICAgICAgLy8gQ2xvdWRGb3JtYXRpb24gZGVwZW5kZW5jeS4gSGVuY2UgdGhlIFNTTSBwYXJhbWV0ZXIgaW5kaXJlY3Rpb25cbiAgICAgICAgLy8gYWJvdmUgZm9yIGxvb2tpbmcgdXAgdGhlIElEIGF0IHJ1bnRpbWUgaW5zdGVhZCBvZiBzeW50aCB0aW1lLlxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogXCJjbG91ZGZyb250XCIsXG4gICAgICAgICAgICByZWdpb246IFwiXCIsXG4gICAgICAgICAgICByZXNvdXJjZTogXCJkaXN0cmlidXRpb25cIixcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogXCIqXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJDREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FXCIsXG4gICAgICBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzRnVuY3Rpb25zKCk6IE5leHRqc0Z1bmN0aW9ucyB7XG4gICAgLy8gQ3JlYXRlIGZ1bmN0aW9ucyB3aXRoIGxvY2FsIGJ1aWxkIG91dHB1dFxuICAgIHJldHVybiBuZXcgTmV4dGpzRnVuY3Rpb25zKHRoaXMsIFwiTmV4dGpzRnVuY3Rpb25zXCIsIHtcbiAgICAgIC4uLnRoaXMuY29tcHV0ZUJhc2VQcm9wcygpLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGdW5jdGlvbnMsXG4gICAgICAgIGRvY2tlckltYWdlRnVuY3Rpb25Qcm9wczoge1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGdW5jdGlvbnM/LmRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgICB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNGdW5jdGlvbnNQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzRGlzdHJpYnV0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHRoaXMsIFwiTmV4dGpzRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGFzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVByb3BzLmJhc2VQYXRoLFxuICAgICAgZnVuY3Rpb25Vcmw6IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uVXJsLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRGlzdHJpYnV0aW9uLFxuICAgICAgcHVibGljRGlyRW50cmllczogdGhpcy5uZXh0anNCdWlsZC5wdWJsaWNEaXJFbnRyaWVzLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3ksXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1nbG9iYWwtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBb0M7QUFFcEMsaURBQXNEO0FBQ3RELGlEQUFzRDtBQUV0RCw0Q0FBMEM7QUFDMUMsbUVBS2lDO0FBV2pDLGdFQUdnQztBQUNoQyw4REFHK0I7QUFDL0Isa0RBQThDO0FBQzlDLG9FQUF3RTtBQWdDeEU7Ozs7O0dBS0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDJDQUFtQjs7SUFDNUQsZUFBZSxDQUFrQjtJQUNqQzs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQXVCO0lBQzFDLGtCQUFrQixDQUFxQjtJQUN2QyxnQkFBZ0IsQ0FBbUI7SUFDbkM7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBQSxvQkFBUSxFQUNiLFdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFDNUQsSUFBSSxDQUFDLGdCQUFnQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBNkI7SUFFMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQ3RDLENBQUM7UUFDRixJQUFJLElBQUEsOENBQXlCLEdBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ3ZE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LElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1SEgsc0RBNkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9ucyxcbiAgTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWZ1bmN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1pbWFnZS1mdW5jdGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRGlzdHJpYnV0aW9uLFxuICBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtZGlzdHJpYnV0aW9uXCI7XG5pbXBvcnQge1xuICBOZXh0anNQb3N0RGVwbG95LFxuICBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gXCIuLi91dGlscy9iYXNlLXBhdGhcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0dsb2JhbEZ1bmN0aW9ucz86IE5leHRqc0dsb2JhbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNJbWFnZUZ1bmN0aW9uPzogTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uPzogTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95PzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBkaXN0cmlidXRpb24uIENhbiBiZSB1c2VkIHdpdGggYGJhc2VQYXRoYCB0byBob3N0IG11bHRpcGxlXG4gICAqIGFwcHMgb24gdGhlIHNhbWUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBEaXN0cmlidXRpb247XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBvZiBhbnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIGdsb2JhbGx5IGRpc3RyaWJ1dGVkIHdpdGggZnVuY3Rpb25zLiBVc2VzIFtDbG91ZEZyb250XG4gKiBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td29ya2luZy13aXRoLmh0bWwpXG4gKiBhcyBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmsgKENETikgZm9yIGdsb2JhbCBkaXN0cmlidXRpb24gYW5kIFtBV1MgTGFtYmRhIEZ1bmN0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvd2VsY29tZS5odG1sKVxuICogZm9yIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc0dsb2JhbEZ1bmN0aW9ucyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3Qge1xuICBuZXh0anNGdW5jdGlvbnM6IE5leHRqc0Z1bmN0aW9ucztcbiAgLyoqXG4gICAqIE9ubHkgY3JlYXRlZCB3aGVuIHRoZSAoZXhwZXJpbWVudGFsLCB1bnN1cHBvcnRlZCkgZGVkaWNhdGVkIGltYWdlXG4gICAqIG9wdGltaXphdGlvbiBMYW1iZGEgaXMgZW5hYmxlZC4gYF9uZXh0L2ltYWdlYCBpcyBvdGhlcndpc2Ugc2VydmVkIGJ5XG4gICAqIHtAbGluayBuZXh0anNGdW5jdGlvbnN9LlxuICAgKi9cbiAgbmV4dGpzSW1hZ2VGdW5jdGlvbj86IE5leHRqc0ltYWdlRnVuY3Rpb247XG4gIG5leHRqc0Rpc3RyaWJ1dGlvbjogTmV4dGpzRGlzdHJpYnV0aW9uO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICAvKipcbiAgICogUHVibGljIFVSTCBvZiB0aGUgYXBwLCBpbmNsdWRpbmcgYGJhc2VQYXRoYCDigJQgdGhlIGFwcCBvbmx5IGFuc3dlcnMgdW5kZXJcbiAgICogdGhhdCBwcmVmaXgsIGFuZCBpdCdzIGRlcml2ZWQgZnJvbSB0aGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgd2hlbiB0aGUgcHJvcCBpc1xuICAgKiBsZWZ0IHVuc2V0LCBzbyBpdCdzIHRoZXJlIHdoZXRoZXIgb3Igbm90IHlvdSBhc2tlZCBmb3IgaXQuXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW5QYXRoKFxuICAgICAgYGh0dHBzOi8vJHt0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24uZG9tYWluTmFtZX1gLFxuICAgICAgdGhpcy5yZXNvbHZlZEJhc2VQYXRoLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zLFxuICAgICk7XG4gICAgaWYgKHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24oKSkge1xuICAgICAgdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbWFnZUZ1bmN0aW9uKFxuICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKTtcbiAgICB0aGlzLndpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk7XG4gICAgdGhpcy5uZXh0anNQb3N0RGVwbG95ID0gdGhpcy5jcmVhdGVOZXh0anNQb3N0RGVwbG95KCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBmdW5jdGlvbiBwZXJtaXNzaW9uIHRvIGludmFsaWRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgcGFzc2VzXG4gICAqIGFsb25nIGEgd2F5IHRvIGxvb2sgdXAgaXRzIElELCBzbyBvbi1kZW1hbmQgcmV2YWxpZGF0aW9uXG4gICAqIChyZXZhbGlkYXRlVGFnL3JldmFsaWRhdGVQYXRoKSBjYW4gZXZpY3Qgc3RhbGUgcmVzcG9uc2VzIGZyb20gdGhlIENETlxuICAgKiBlZGdlIGNhY2hlLCBub3QganVzdCB0aGUgb3JpZ2luJ3MgUzMvRHluYW1vREIgY2FjaGUuXG4gICAqXG4gICAqIFRoZSBkaXN0cmlidXRpb24gSUQgY2FuJ3QgYmUgcGFzc2VkIGFzIGEgcGxhaW4gZW52IHZhciBvciBzY29wZWQgSUFNXG4gICAqIHJlc291cmNlIEFSTjogdGhlIGRpc3RyaWJ1dGlvbidzIG9yaWdpbiByZWZlcmVuY2VzIHRoaXMgZnVuY3Rpb24ncyBVUkwsXG4gICAqIHNvIG1ha2luZyB0aGUgZnVuY3Rpb24ncyByb2xlL2Vudmlyb25tZW50IHJlZmVyZW5jZSB0aGUgZGlzdHJpYnV0aW9uJ3NcbiAgICogSUQgaW4gcmV0dXJuIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIENsb3VkRm9ybWF0aW9uIGRlcGVuZGVuY3kuIEluc3RlYWQsXG4gICAqIHRoZSBJRCBpcyBwdWJsaXNoZWQgdG8gYW4gU1NNIFBhcmFtZXRlciAod2hvc2UgKm5hbWUqIGlzIHN0YXRpYyBhbmQgc2FmZVxuICAgKiB0byBlbWJlZCkgdGhhdCB0aGUgZnVuY3Rpb24gcmVhZHMgYXQgcnVudGltZSwgYW5kIHRoZSBJQU0gZ3JhbnQgaXNcbiAgICogc2NvcGVkIHRvIGFsbCBkaXN0cmlidXRpb25zIGluIHRoaXMgYWNjb3VudC9yZWdpb24gcmF0aGVyIHRoYW4gdGhpc1xuICAgKiBzcGVjaWZpYyAobm90LXlldC1rbm93bi1hdC1zeW50aC10aW1lKSBkaXN0cmlidXRpb24uXG4gICAqL1xuICBwcml2YXRlIHdpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lID0gYGNkay1uZXh0anMtZGlzdHJpYnV0aW9uLWlkLSR7dGhpcy5ub2RlLmFkZHJ9YDtcblxuICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJEaXN0cmlidXRpb25JZFBhcmFtZXRlclwiLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICBzdHJpbmdWYWx1ZTogdGhpcy5uZXh0anNEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcInNzbVwiLFxuICAgICAgICAgICAgcmVzb3VyY2U6IFwicGFyYW1ldGVyXCIsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNsb3VkZnJvbnQ6Q3JlYXRlSW52YWxpZGF0aW9uXCJdLFxuICAgICAgICAvLyBDYW4ndCBzY29wZSB0aGlzIHRvIHRoZSBzcGVjaWZpYyBkaXN0cmlidXRpb246IHRoZSBkaXN0cmlidXRpb24nc1xuICAgICAgICAvLyBvcmlnaW4gYWxyZWFkeSBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb24gKHZpYSBpdHMgRnVuY3Rpb25VcmwpLCBzb1xuICAgICAgICAvLyByZWZlcmVuY2luZyB0aGUgZGlzdHJpYnV0aW9uJ3MgSUQgaGVyZSB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhclxuICAgICAgICAvLyBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5LiBIZW5jZSB0aGUgU1NNIHBhcmFtZXRlciBpbmRpcmVjdGlvblxuICAgICAgICAvLyBhYm92ZSBmb3IgbG9va2luZyB1cCB0aGUgSUQgYXQgcnVudGltZSBpbnN0ZWFkIG9mIHN5bnRoIHRpbWUuXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcImNsb3VkZnJvbnRcIixcbiAgICAgICAgICAgIHJlZ2lvbjogXCJcIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcImRpc3RyaWJ1dGlvblwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBcIipcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUVcIixcbiAgICAgIGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNEaXN0cmlidXRpb24odGhpcywgXCJOZXh0anNEaXN0cmlidXRpb25cIiwge1xuICAgICAgYXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5yZXNvbHZlZEJhc2VQYXRoLFxuICAgICAgZnVuY3Rpb25Vcmw6IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uVXJsLFxuICAgICAgaW1hZ2VGdW5jdGlvblVybDogdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uPy5mdW5jdGlvblVybCxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxGdW5jdGlvbnM/Lm5leHRqc0Rpc3RyaWJ1dGlvblByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNQb3N0RGVwbG95KCk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIHJldHVybiBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgZGlzdHJpYnV0aW9uOiB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24sXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzUG9zdERlcGxveVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -13,7 +13,7 @@ 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.5.15" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.6.0" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
19
  get url() {
@@ -1,11 +1,11 @@
1
1
  import { Construct } from "constructs";
2
2
  import { NextjsApi, NextjsApiOverrides, NextjsApiProps } from "../nextjs-api";
3
- import { NextjsBaseConstruct, NextjsBaseProps, NextjsBaseConstructOverrides, NextjsBaseOverrides } from "./nextjs-base-construct";
3
+ import { NextjsBaseConstruct, NextjsBaseProps, NextjsFunctionsConstructOverrides, NextjsBaseOverrides } from "./nextjs-base-construct";
4
4
  import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
5
- import { NextjsFunctions, NextjsFunctionsOverrides, NextjsFunctionsProps } from "../nextjs-compute/nextjs-functions";
5
+ import { NextjsFunctions, NextjsFunctionsOverrides } from "../nextjs-compute/nextjs-functions";
6
+ import { NextjsImageFunction, NextjsImageFunctionOverrides } from "../nextjs-compute/nextjs-image-function";
6
7
  import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
7
- export interface NextjsRegionalFunctionsConstructOverrides extends NextjsBaseConstructOverrides {
8
- readonly nextjsFunctionsProps?: NextjsFunctionsProps;
8
+ export interface NextjsRegionalFunctionsConstructOverrides extends NextjsFunctionsConstructOverrides {
9
9
  readonly nextjsApiProps?: NextjsApiProps;
10
10
  readonly nextjsPostDeployProps?: OptionalNextjsPostDeployProps;
11
11
  }
@@ -17,6 +17,7 @@ export interface NextjsRegionalFunctionsConstructOverrides extends NextjsBaseCon
17
17
  export interface NextjsRegionalFunctionsOverrides extends NextjsBaseOverrides {
18
18
  readonly nextjsRegionalFunctions?: NextjsRegionalFunctionsConstructOverrides;
19
19
  readonly nextjsFunctions?: NextjsFunctionsOverrides;
20
+ readonly nextjsImageFunction?: NextjsImageFunctionOverrides;
20
21
  readonly nextjsApi?: NextjsApiOverrides;
21
22
  readonly nextjsPostDeploy?: NextjsPostDeployOverrides;
22
23
  }
@@ -32,12 +33,17 @@ export interface NextjsRegionalFunctionsProps extends NextjsBaseProps {
32
33
  */
33
34
  export declare class NextjsRegionalFunctions extends NextjsBaseConstruct {
34
35
  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;
35
42
  nextjsApi: NextjsApi;
36
43
  nextjsPostDeploy: NextjsPostDeploy;
37
44
  get url(): string;
38
45
  private props;
39
46
  constructor(scope: Construct, id: string, props: NextjsRegionalFunctionsProps);
40
- private createNextjsFunctions;
41
47
  private createNextjsApi;
42
48
  private createNextjsPostDeploy;
43
49
  }
@@ -2,51 +2,47 @@
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 aws_cdk_lib_1 = require("aws-cdk-lib");
6
5
  const constants_1 = require("../constants");
7
6
  const nextjs_api_1 = require("../nextjs-api");
8
7
  const nextjs_base_construct_1 = require("./nextjs-base-construct");
9
- const nextjs_functions_1 = require("../nextjs-compute/nextjs-functions");
10
8
  const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
9
+ const experimental_flags_1 = require("../utils/experimental-flags");
11
10
  /**
12
11
  * Deploy Next.js regionally with functions. Uses API Gateway REST API
13
12
  * for routing requests and AWS Lambda Functions for server-side rendering.
14
13
  */
15
14
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.5.15" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.6.0" };
17
16
  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;
18
23
  nextjsApi;
19
24
  nextjsPostDeploy;
20
25
  get url() {
21
- return `https://${this.nextjsApi.api.restApiId}.execute-api.${aws_cdk_lib_1.Stack.of(this).region}.amazonaws.com/${this.nextjsApi.api.deploymentStage.stageName}`;
26
+ return this.nextjsApi.url;
22
27
  }
23
28
  props;
24
29
  constructor(scope, id, props) {
25
30
  super(scope, id, props, constants_1.NextjsType.REGIONAL_FUNCTIONS);
26
31
  this.props = props;
27
- this.nextjsFunctions = this.createNextjsFunctions();
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
+ }
28
36
  this.nextjsApi = this.createNextjsApi();
29
37
  this.nextjsPostDeploy = this.createNextjsPostDeploy();
30
38
  }
31
- createNextjsFunctions() {
32
- // Create functions with local build output
33
- return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
34
- ...this.computeBaseProps(),
35
- overrides: {
36
- ...this.props.overrides?.nextjsFunctions,
37
- dockerImageFunctionProps: {
38
- ...this.props.overrides?.nextjsFunctions?.dockerImageFunctionProps,
39
- vpc: this.baseProps.vpc,
40
- },
41
- },
42
- ...this.props.overrides?.nextjsRegionalFunctions?.nextjsFunctionsProps,
43
- });
44
- }
45
39
  createNextjsApi() {
46
40
  return new nextjs_api_1.NextjsApi(this, "NextjsApi", {
47
41
  staticAssetsBucket: this.nextjsStaticAssets.bucket,
42
+ staticAssetsKeyPrefix: this.nextjsStaticAssets.keyPrefix,
48
43
  serverFunction: this.nextjsFunctions.function,
49
- basePath: this.baseProps.basePath,
44
+ imageFunction: this.nextjsImageFunction?.function,
45
+ basePath: this.resolvedBasePath,
50
46
  overrides: this.props.overrides?.nextjsApi,
51
47
  publicDirEntries: this.nextjsBuild.publicDirEntries,
52
48
  ...this.props.overrides?.nextjsRegionalFunctions?.nextjsApiProps,
@@ -64,4 +60,4 @@ class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruc
64
60
  }
65
61
  }
66
62
  exports.NextjsRegionalFunctions = NextjsRegionalFunctions;
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LWNvbnN0cnVjdHMvbmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQW9DO0FBRXBDLDRDQUEwQztBQUMxQyw4Q0FBOEU7QUFDOUUsbUVBS2lDO0FBRWpDLHlFQUk0QztBQUM1Qyw4REFHK0I7QUEyQi9COzs7R0FHRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsMkNBQW1COztJQUM5RCxlQUFlLENBQWtCO0lBQ2pDLFNBQVMsQ0FBWTtJQUNyQixnQkFBZ0IsQ0FBbUI7SUFDbkMsSUFBSSxHQUFHO1FBQ0wsT0FBTyxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsZ0JBQWdCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0SixDQUFDO0lBRU8sS0FBSyxDQUErQjtJQUU1QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFtQztRQUVuQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsMkNBQTJDO1FBQzNDLE9BQU8sSUFBSSxrQ0FBZSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUNsRCxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlO2dCQUN4Qyx3QkFBd0IsRUFBRTtvQkFDeEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsd0JBQXdCO29CQUNsRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO2lCQUN4QjthQUNGO1lBQ0QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0I7U0FDdkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN0QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDbkQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxjQUFjO1NBQ2pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7WUFDekMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUI7WUFDckQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGdCQUFnQjtZQUNqRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLHFCQUFxQjtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTFESCwwREEyREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBOZXh0anNBcGksIE5leHRqc0FwaU92ZXJyaWRlcywgTmV4dGpzQXBpUHJvcHMgfSBmcm9tIFwiLi4vbmV4dGpzLWFwaVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxuICBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBOZXh0anNCYXNlT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbiAgTmV4dGpzRnVuY3Rpb25zUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtZnVuY3Rpb25zXCI7XG5pbXBvcnQge1xuICBOZXh0anNQb3N0RGVwbG95LFxuICBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zUHJvcHM/OiBOZXh0anNGdW5jdGlvbnNQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzQXBpUHJvcHM/OiBOZXh0anNBcGlQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzUG9zdERlcGxveVByb3BzPzogT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHM7XG59XG5cbi8qKlxuICogT3ZlcnJpZGVzIGZvciBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzUmVnaW9uYWxGdW5jdGlvbnM/OiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIHJlZ2lvbmFsbHkgd2l0aCBmdW5jdGlvbnMuIFVzZXMgQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAqIGZvciByb3V0aW5nIHJlcXVlc3RzIGFuZCBBV1MgTGFtYmRhIEZ1bmN0aW9ucyBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0IHtcbiAgbmV4dGpzRnVuY3Rpb25zOiBOZXh0anNGdW5jdGlvbnM7XG4gIG5leHRqc0FwaTogTmV4dGpzQXBpO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7dGhpcy5uZXh0anNBcGkuYXBpLnJlc3RBcGlJZH0uZXhlY3V0ZS1hcGkuJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb20vJHt0aGlzLm5leHRqc0FwaS5hcGkuZGVwbG95bWVudFN0YWdlLnN0YWdlTmFtZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMsIE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLm5leHRqc0Z1bmN0aW9ucyA9IHRoaXMuY3JlYXRlTmV4dGpzRnVuY3Rpb25zKCk7XG4gICAgdGhpcy5uZXh0anNBcGkgPSB0aGlzLmNyZWF0ZU5leHRqc0FwaSgpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNGdW5jdGlvbnMoKTogTmV4dGpzRnVuY3Rpb25zIHtcbiAgICAvLyBDcmVhdGUgZnVuY3Rpb25zIHdpdGggbG9jYWwgYnVpbGQgb3V0cHV0XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGdW5jdGlvbnModGhpcywgXCJOZXh0anNGdW5jdGlvbnNcIiwge1xuICAgICAgLi4udGhpcy5jb21wdXRlQmFzZVByb3BzKCksXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Z1bmN0aW9ucyxcbiAgICAgICAgZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzOiB7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Z1bmN0aW9ucz8uZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzLFxuICAgICAgICAgIHZwYzogdGhpcy5iYXNlUHJvcHMudnBjLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbEZ1bmN0aW9ucz8ubmV4dGpzRnVuY3Rpb25zUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0FwaSgpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0FwaSh0aGlzLCBcIk5leHRqc0FwaVwiLCB7XG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHNlcnZlckZ1bmN0aW9uOiB0aGlzLm5leHRqc0Z1bmN0aW9ucy5mdW5jdGlvbixcbiAgICAgIGJhc2VQYXRoOiB0aGlzLmJhc2VQcm9wcy5iYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0FwaSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbEZ1bmN0aW9ucz8ubmV4dGpzQXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LWNvbnN0cnVjdHMvbmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNENBQTBDO0FBQzFDLDhDQUE4RTtBQUM5RSxtRUFLaUM7QUFVakMsOERBRytCO0FBQy9CLG9FQUF3RTtBQTJCeEU7OztHQUdHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSwyQ0FBbUI7O0lBQzlELGVBQWUsQ0FBa0I7SUFDakM7Ozs7T0FJRztJQUNILG1CQUFtQixDQUF1QjtJQUMxQyxTQUFTLENBQVk7SUFDckIsZ0JBQWdCLENBQW1CO0lBQ25DLElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBK0I7SUFFNUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxJQUFBLDhDQUF5QixHQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FDMUMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN0QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztZQUN4RCxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQzdDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUTtZQUNqRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUztZQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGNBQWM7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixPQUFPLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN6QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtZQUNyRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ2pELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBMURILDBEQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTmV4dGpzQXBpLCBOZXh0anNBcGlPdmVycmlkZXMsIE5leHRqc0FwaVByb3BzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3QsXG4gIE5leHRqc0Jhc2VQcm9wcyxcbiAgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBOZXh0anNCYXNlT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0ltYWdlRnVuY3Rpb24sXG4gIE5leHRqc0ltYWdlRnVuY3Rpb25PdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtaW1hZ2UtZnVuY3Rpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1Bvc3REZXBsb3ksXG4gIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNBcGlQcm9wcz86IE5leHRqc0FwaVByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc2AuIE92ZXJyaWRlcyBhcmUgbG93ZXIgbGV2ZWwgdGhhblxuICogcHJvcHMgYW5kIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0RLIENvbnN0cnVjdHMgZ2l2aW5nIHlvdSBtb3JlIGNvbnRyb2wuIEl0J3NcbiAqIHJlY29tbWVuZGVkIHRvIHVzZSBjYXV0aW9uIGFuZCByZXZpZXcgc291cmNlIGNvZGUgc28geW91IGtub3cgaG93IHRoZXkncmUgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc092ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNSZWdpb25hbEZ1bmN0aW9ucz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNGdW5jdGlvbnM/OiBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIHJlZ2lvbmFsbHkgd2l0aCBmdW5jdGlvbnMuIFVzZXMgQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAqIGZvciByb3V0aW5nIHJlcXVlc3RzIGFuZCBBV1MgTGFtYmRhIEZ1bmN0aW9ucyBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0IHtcbiAgbmV4dGpzRnVuY3Rpb25zOiBOZXh0anNGdW5jdGlvbnM7XG4gIC8qKlxuICAgKiBPbmx5IGNyZWF0ZWQgd2hlbiB0aGUgKGV4cGVyaW1lbnRhbCwgdW5zdXBwb3J0ZWQpIGRlZGljYXRlZCBpbWFnZVxuICAgKiBvcHRpbWl6YXRpb24gTGFtYmRhIGlzIGVuYWJsZWQuIGBfbmV4dC9pbWFnZWAgaXMgb3RoZXJ3aXNlIHNlcnZlZCBieVxuICAgKiB7QGxpbmsgbmV4dGpzRnVuY3Rpb25zfS5cbiAgICovXG4gIG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uO1xuICBuZXh0anNBcGk6IE5leHRqc0FwaTtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5leHRqc0FwaS51cmw7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcywgTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zLFxuICAgICk7XG4gICAgaWYgKHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24oKSkge1xuICAgICAgdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbWFnZUZ1bmN0aW9uKFxuICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubmV4dGpzQXBpID0gdGhpcy5jcmVhdGVOZXh0anNBcGkoKTtcbiAgICB0aGlzLm5leHRqc1Bvc3REZXBsb3kgPSB0aGlzLmNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQXBpKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQXBpKHRoaXMsIFwiTmV4dGpzQXBpXCIsIHtcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgc3RhdGljQXNzZXRzS2V5UHJlZml4OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXgsXG4gICAgICBzZXJ2ZXJGdW5jdGlvbjogdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24sXG4gICAgICBpbWFnZUZ1bmN0aW9uOiB0aGlzLm5leHRqc0ltYWdlRnVuY3Rpb24/LmZ1bmN0aW9uLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0FwaSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbEZ1bmN0aW9ucz8ubmV4dGpzQXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { NextjsType } from "../constants";
2
+ /**
3
+ * Reduces a `basePath` to a bare path segment so values that address the same
4
+ * path ("/base", "base", "/base/") compare equal and can be concatenated
5
+ * without doubling separators.
6
+ */
7
+ export declare function normalizeBasePath(basePath?: string): string;
8
+ /**
9
+ * Joins path parts with a single "/", normalizing each (so no leading or
10
+ * trailing slash survives, including on the result) and dropping the empty
11
+ * ones, so an unset `basePath` or key prefix leaves the rest untouched.
12
+ */
13
+ export declare function joinPath(...parts: (string | undefined)[]): string;
14
+ /**
15
+ * Read the Next.js app's own `basePath` out of `required-server-files.json`,
16
+ * which `next build` writes into `.next` with the fully resolved config (so
17
+ * this picks up a `basePath` computed in `next.config.js`, not only a literal
18
+ * one). Normalized, empty when the app sets none.
19
+ *
20
+ * Degrades to `""` rather than throwing, since an unreadable file shouldn't
21
+ * fail a deployment that would otherwise work. It warns because `""` is
22
+ * indistinguishable from an app that genuinely sets no `basePath`: the
23
+ * `NextjsType`s that derive `basePath` from the app would quietly not derive
24
+ * it and 404 every static asset.
25
+ */
26
+ export declare function readNextConfigBasePath(dotNextPath: string): string;
27
+ /**
28
+ * Settles on the single `basePath` the infrastructure should be built around,
29
+ * given the CDK `basePath` prop and the Next.js app's own `basePath`
30
+ * (`NextjsBuild.nextConfigBasePath`), throwing at synth if the two can't serve
31
+ * the app together. Returns a normalized value, or `undefined` for no
32
+ * `basePath` at all; consumers that need a leading slash add their own.
33
+ *
34
+ * The two inputs are genuinely different things — the prop is where the
35
+ * infrastructure serves the app from (and which S3 key prefix the static assets
36
+ * land under), the config is the prefix the app emits its own links and asset
37
+ * hrefs under — so how strictly they have to line up, and whether one can stand
38
+ * in for the other, depends on how the `NextjsType` routes static requests.
39
+ */
40
+ export declare function resolveBasePath(nextjsType: NextjsType, propBasePath?: string, nextConfigBasePath?: string): string | undefined;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeBasePath = normalizeBasePath;
4
+ exports.joinPath = joinPath;
5
+ exports.readNextConfigBasePath = readNextConfigBasePath;
6
+ exports.resolveBasePath = resolveBasePath;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const constants_1 = require("../constants");
10
+ /**
11
+ * Reduces a `basePath` to a bare path segment so values that address the same
12
+ * path ("/base", "base", "/base/") compare equal and can be concatenated
13
+ * without doubling separators.
14
+ */
15
+ function normalizeBasePath(basePath) {
16
+ return (basePath || "").replace(/^\/+/, "").replace(/\/+$/, "");
17
+ }
18
+ /**
19
+ * Joins path parts with a single "/", normalizing each (so no leading or
20
+ * trailing slash survives, including on the result) and dropping the empty
21
+ * ones, so an unset `basePath` or key prefix leaves the rest untouched.
22
+ */
23
+ function joinPath(...parts) {
24
+ return parts.map(normalizeBasePath).filter(Boolean).join("/");
25
+ }
26
+ /**
27
+ * Read the Next.js app's own `basePath` out of `required-server-files.json`,
28
+ * which `next build` writes into `.next` with the fully resolved config (so
29
+ * this picks up a `basePath` computed in `next.config.js`, not only a literal
30
+ * one). Normalized, empty when the app sets none.
31
+ *
32
+ * Degrades to `""` rather than throwing, since an unreadable file shouldn't
33
+ * fail a deployment that would otherwise work. It warns because `""` is
34
+ * indistinguishable from an app that genuinely sets no `basePath`: the
35
+ * `NextjsType`s that derive `basePath` from the app would quietly not derive
36
+ * it and 404 every static asset.
37
+ */
38
+ function readNextConfigBasePath(dotNextPath) {
39
+ const requiredServerFiles = (0, node_path_1.join)(dotNextPath, "required-server-files.json");
40
+ const fallback = (reason) => {
41
+ console.warn(`${constants_1.LOG_PREFIX} ${reason}. Assuming your Next.js app sets no \`basePath\`: ` +
42
+ "if it does set one, static assets will 404 and any `basePath` prop " +
43
+ "mismatch reported at synth will name the wrong value.");
44
+ return "";
45
+ };
46
+ if (!(0, node_fs_1.existsSync)(requiredServerFiles)) {
47
+ return fallback(`"required-server-files.json" not found at ${requiredServerFiles}`);
48
+ }
49
+ try {
50
+ const { config } = JSON.parse((0, node_fs_1.readFileSync)(requiredServerFiles, "utf-8"));
51
+ return normalizeBasePath(config?.basePath);
52
+ }
53
+ catch (error) {
54
+ return fallback(`Could not read basePath from ${requiredServerFiles}: ${error}`);
55
+ }
56
+ }
57
+ function quote(basePath) {
58
+ return basePath ? `"/${basePath}"` : "unset";
59
+ }
60
+ /**
61
+ * Settles on the single `basePath` the infrastructure should be built around,
62
+ * given the CDK `basePath` prop and the Next.js app's own `basePath`
63
+ * (`NextjsBuild.nextConfigBasePath`), throwing at synth if the two can't serve
64
+ * the app together. Returns a normalized value, or `undefined` for no
65
+ * `basePath` at all; consumers that need a leading slash add their own.
66
+ *
67
+ * The two inputs are genuinely different things — the prop is where the
68
+ * infrastructure serves the app from (and which S3 key prefix the static assets
69
+ * land under), the config is the prefix the app emits its own links and asset
70
+ * hrefs under — so how strictly they have to line up, and whether one can stand
71
+ * in for the other, depends on how the `NextjsType` routes static requests.
72
+ */
73
+ function resolveBasePath(nextjsType, propBasePath, nextConfigBasePath) {
74
+ const prop = normalizeBasePath(propBasePath);
75
+ const config = normalizeBasePath(nextConfigBasePath);
76
+ if (prop === config) {
77
+ return prop || undefined;
78
+ }
79
+ const mismatch = `${constants_1.LOG_PREFIX} basePath mismatch for NextjsType.${nextjsType}: the \`basePath\` prop is ${quote(prop)} ` +
80
+ `but your Next.js app's config sets \`basePath\` to ${quote(config)}. `;
81
+ switch (nextjsType) {
82
+ case constants_1.NextjsType.GLOBAL_FUNCTIONS:
83
+ case constants_1.NextjsType.GLOBAL_CONTAINERS:
84
+ // `NextjsDistribution` builds its behaviors as `/${basePath}/_next/static*`
85
+ // and CloudFront hands an S3 origin the request path verbatim as the
86
+ // object key, so the only value that can serve the app is the prefix the
87
+ // app itself emits. That leaves the prop no room to differ, which makes
88
+ // the app's config the single source of truth worth deriving from.
89
+ if (!prop) {
90
+ return config;
91
+ }
92
+ throw new Error(mismatch +
93
+ "CloudFront serves static assets straight from S3 using the request path as the object key, so a mismatch means every `_next/static` and `public/` request 404s. " +
94
+ "Either set both to the same value, or drop the prop — left unset, it follows your app's `basePath`.");
95
+ case constants_1.NextjsType.REGIONAL_FUNCTIONS:
96
+ // Deliberately not derived: API Gateway mounts resources below the stage
97
+ // and strips it before invoking the app, so an app whose basePath is the
98
+ // stage name (or a custom domain base path mapping that gets stripped the
99
+ // same way) is correct precisely because the prop stays unset.
100
+ if (!prop) {
101
+ return undefined;
102
+ }
103
+ // The prop only has to be the tail of what the app emits, not all of it,
104
+ // because the stripped prefix is part of the app's `basePath` but never
105
+ // part of the resource path: an app at the `prod` stage nested under
106
+ // "/base" sets `basePath: "/prod/base"` and the prop to "/base". Checked
107
+ // on a path boundary so "/prod/base" doesn't accept a prop of "se".
108
+ if (config.endsWith(`/${prop}`)) {
109
+ return prop;
110
+ }
111
+ // Anything else never works: the prop moves every resource, including the
112
+ // `ANY` catch-all, under a path the app never links to.
113
+ throw new Error(mismatch +
114
+ "The `basePath` prop nests every API Gateway resource under that path, including the catch-all, so the app has to emit its links under the same prefix or every request 404s. " +
115
+ 'Either set your app\'s `basePath` to end with the prop (optionally prefixed by the stage or base path mapping API Gateway strips, e.g. `basePath: "/prod/base"` with a prop of "/base"), or leave the prop unset — unset is what you want when the app\'s `basePath` is the API Gateway stage name, since the stage isn\'t part of the resource path.');
116
+ case constants_1.NextjsType.REGIONAL_CONTAINERS:
117
+ // The ALB forwards every path to the container, which serves its own
118
+ // static assets, so here `basePath` only namespaces the S3 bucket and has
119
+ // no routing meaning that could disagree with the app.
120
+ return prop || undefined;
121
+ }
122
+ }
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Jhc2UtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhDQUVDO0FBT0QsNEJBRUM7QUFjRCx3REF1QkM7QUFtQkQsMENBNERDO0FBeElELHFDQUFtRDtBQUNuRCx5Q0FBaUM7QUFDakMsNENBQXNEO0FBRXREOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFpQjtJQUNqRCxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsV0FBbUI7SUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLGdCQUFJLEVBQUMsV0FBVyxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsSUFBSSxNQUFNLG9EQUFvRDtZQUN6RSxxRUFBcUU7WUFDckUsdURBQXVELENBQzFELENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUNiLDZDQUE2QyxtQkFBbUIsRUFBRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUEsc0JBQVksRUFBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxRQUFRLENBQ2IsZ0NBQWdDLG1CQUFtQixLQUFLLEtBQUssRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxRQUFnQjtJQUM3QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLFVBQXNCLEVBQ3RCLFlBQXFCLEVBQ3JCLGtCQUEyQjtJQUUzQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQ1osR0FBRyxzQkFBVSxxQ0FBcUMsVUFBVSw4QkFBOEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1FBQ3hHLHNEQUFzRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUUxRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxLQUFLLHNCQUFVLENBQUMsaUJBQWlCO1lBQy9CLDRFQUE0RTtZQUM1RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLFFBQVE7Z0JBQ04sa0tBQWtLO2dCQUNsSyxxR0FBcUcsQ0FDeEcsQ0FBQztRQUNKLEtBQUssc0JBQVUsQ0FBQyxrQkFBa0I7WUFDaEMseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSwwRUFBMEU7WUFDMUUsK0RBQStEO1lBQy9ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLG9FQUFvRTtZQUNwRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELDBFQUEwRTtZQUMxRSx3REFBd0Q7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYixRQUFRO2dCQUNOLCtLQUErSztnQkFDL0ssdVZBQXVWLENBQzFWLENBQUM7UUFDSixLQUFLLHNCQUFVLENBQUMsbUJBQW1CO1lBQ2pDLHFFQUFxRTtZQUNyRSwwRUFBMEU7WUFDMUUsdURBQXVEO1lBQ3ZELE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBSZWR1Y2VzIGEgYGJhc2VQYXRoYCB0byBhIGJhcmUgcGF0aCBzZWdtZW50IHNvIHZhbHVlcyB0aGF0IGFkZHJlc3MgdGhlIHNhbWVcbiAqIHBhdGggKFwiL2Jhc2VcIiwgXCJiYXNlXCIsIFwiL2Jhc2UvXCIpIGNvbXBhcmUgZXF1YWwgYW5kIGNhbiBiZSBjb25jYXRlbmF0ZWRcbiAqIHdpdGhvdXQgZG91Ymxpbmcgc2VwYXJhdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2VQYXRoKGJhc2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChiYXNlUGF0aCB8fCBcIlwiKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG59XG5cbi8qKlxuICogSm9pbnMgcGF0aCBwYXJ0cyB3aXRoIGEgc2luZ2xlIFwiL1wiLCBub3JtYWxpemluZyBlYWNoIChzbyBubyBsZWFkaW5nIG9yXG4gKiB0cmFpbGluZyBzbGFzaCBzdXJ2aXZlcywgaW5jbHVkaW5nIG9uIHRoZSByZXN1bHQpIGFuZCBkcm9wcGluZyB0aGUgZW1wdHlcbiAqIG9uZXMsIHNvIGFuIHVuc2V0IGBiYXNlUGF0aGAgb3Iga2V5IHByZWZpeCBsZWF2ZXMgdGhlIHJlc3QgdW50b3VjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblBhdGgoLi4ucGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFydHMubWFwKG5vcm1hbGl6ZUJhc2VQYXRoKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIi9cIik7XG59XG5cbi8qKlxuICogUmVhZCB0aGUgTmV4dC5qcyBhcHAncyBvd24gYGJhc2VQYXRoYCBvdXQgb2YgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCxcbiAqIHdoaWNoIGBuZXh0IGJ1aWxkYCB3cml0ZXMgaW50byBgLm5leHRgIHdpdGggdGhlIGZ1bGx5IHJlc29sdmVkIGNvbmZpZyAoc29cbiAqIHRoaXMgcGlja3MgdXAgYSBgYmFzZVBhdGhgIGNvbXB1dGVkIGluIGBuZXh0LmNvbmZpZy5qc2AsIG5vdCBvbmx5IGEgbGl0ZXJhbFxuICogb25lKS4gTm9ybWFsaXplZCwgZW1wdHkgd2hlbiB0aGUgYXBwIHNldHMgbm9uZS5cbiAqXG4gKiBEZWdyYWRlcyB0byBgXCJcImAgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNpbmNlIGFuIHVucmVhZGFibGUgZmlsZSBzaG91bGRuJ3RcbiAqIGZhaWwgYSBkZXBsb3ltZW50IHRoYXQgd291bGQgb3RoZXJ3aXNlIHdvcmsuIEl0IHdhcm5zIGJlY2F1c2UgYFwiXCJgIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFwcCB0aGF0IGdlbnVpbmVseSBzZXRzIG5vIGBiYXNlUGF0aGA6IHRoZVxuICogYE5leHRqc1R5cGVgcyB0aGF0IGRlcml2ZSBgYmFzZVBhdGhgIGZyb20gdGhlIGFwcCB3b3VsZCBxdWlldGx5IG5vdCBkZXJpdmVcbiAqIGl0IGFuZCA0MDQgZXZlcnkgc3RhdGljIGFzc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZE5leHRDb25maWdCYXNlUGF0aChkb3ROZXh0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVxdWlyZWRTZXJ2ZXJGaWxlcyA9IGpvaW4oZG90TmV4dFBhdGgsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIik7XG4gIGNvbnN0IGZhbGxiYWNrID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7TE9HX1BSRUZJWH0gJHtyZWFzb259LiBBc3N1bWluZyB5b3VyIE5leHQuanMgYXBwIHNldHMgbm8gXFxgYmFzZVBhdGhcXGA6IGAgK1xuICAgICAgICBcImlmIGl0IGRvZXMgc2V0IG9uZSwgc3RhdGljIGFzc2V0cyB3aWxsIDQwNCBhbmQgYW55IGBiYXNlUGF0aGAgcHJvcCBcIiArXG4gICAgICAgIFwibWlzbWF0Y2ggcmVwb3J0ZWQgYXQgc3ludGggd2lsbCBuYW1lIHRoZSB3cm9uZyB2YWx1ZS5cIixcbiAgICApO1xuICAgIHJldHVybiBcIlwiO1xuICB9O1xuICBpZiAoIWV4aXN0c1N5bmMocmVxdWlyZWRTZXJ2ZXJGaWxlcykpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiIG5vdCBmb3VuZCBhdCAke3JlcXVpcmVkU2VydmVyRmlsZXN9YCxcbiAgICApO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHJlcXVpcmVkU2VydmVyRmlsZXMsIFwidXRmLThcIikpO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChjb25maWc/LmJhc2VQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgQ291bGQgbm90IHJlYWQgYmFzZVBhdGggZnJvbSAke3JlcXVpcmVkU2VydmVyRmlsZXN9OiAke2Vycm9yfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBxdW90ZShiYXNlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJhc2VQYXRoID8gYFwiLyR7YmFzZVBhdGh9XCJgIDogXCJ1bnNldFwiO1xufVxuXG4vKipcbiAqIFNldHRsZXMgb24gdGhlIHNpbmdsZSBgYmFzZVBhdGhgIHRoZSBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgYnVpbHQgYXJvdW5kLFxuICogZ2l2ZW4gdGhlIENESyBgYmFzZVBhdGhgIHByb3AgYW5kIHRoZSBOZXh0LmpzIGFwcCdzIG93biBgYmFzZVBhdGhgXG4gKiAoYE5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aGApLCB0aHJvd2luZyBhdCBzeW50aCBpZiB0aGUgdHdvIGNhbid0IHNlcnZlXG4gKiB0aGUgYXBwIHRvZ2V0aGVyLiBSZXR1cm5zIGEgbm9ybWFsaXplZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vXG4gKiBgYmFzZVBhdGhgIGF0IGFsbDsgY29uc3VtZXJzIHRoYXQgbmVlZCBhIGxlYWRpbmcgc2xhc2ggYWRkIHRoZWlyIG93bi5cbiAqXG4gKiBUaGUgdHdvIGlucHV0cyBhcmUgZ2VudWluZWx5IGRpZmZlcmVudCB0aGluZ3Mg4oCUIHRoZSBwcm9wIGlzIHdoZXJlIHRoZVxuICogaW5mcmFzdHJ1Y3R1cmUgc2VydmVzIHRoZSBhcHAgZnJvbSAoYW5kIHdoaWNoIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHNcbiAqIGxhbmQgdW5kZXIpLCB0aGUgY29uZmlnIGlzIHRoZSBwcmVmaXggdGhlIGFwcCBlbWl0cyBpdHMgb3duIGxpbmtzIGFuZCBhc3NldFxuICogaHJlZnMgdW5kZXIg4oCUIHNvIGhvdyBzdHJpY3RseSB0aGV5IGhhdmUgdG8gbGluZSB1cCwgYW5kIHdoZXRoZXIgb25lIGNhbiBzdGFuZFxuICogaW4gZm9yIHRoZSBvdGhlciwgZGVwZW5kcyBvbiBob3cgdGhlIGBOZXh0anNUeXBlYCByb3V0ZXMgc3RhdGljIHJlcXVlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhc2VQYXRoKFxuICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICBwcm9wQmFzZVBhdGg/OiBzdHJpbmcsXG4gIG5leHRDb25maWdCYXNlUGF0aD86IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3AgPSBub3JtYWxpemVCYXNlUGF0aChwcm9wQmFzZVBhdGgpO1xuICBjb25zdCBjb25maWcgPSBub3JtYWxpemVCYXNlUGF0aChuZXh0Q29uZmlnQmFzZVBhdGgpO1xuICBpZiAocHJvcCA9PT0gY29uZmlnKSB7XG4gICAgcmV0dXJuIHByb3AgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWlzbWF0Y2ggPVxuICAgIGAke0xPR19QUkVGSVh9IGJhc2VQYXRoIG1pc21hdGNoIGZvciBOZXh0anNUeXBlLiR7bmV4dGpzVHlwZX06IHRoZSBcXGBiYXNlUGF0aFxcYCBwcm9wIGlzICR7cXVvdGUocHJvcCl9IGAgK1xuICAgIGBidXQgeW91ciBOZXh0LmpzIGFwcCdzIGNvbmZpZyBzZXRzIFxcYGJhc2VQYXRoXFxgIHRvICR7cXVvdGUoY29uZmlnKX0uIGA7XG5cbiAgc3dpdGNoIChuZXh0anNUeXBlKSB7XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlM6XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTOlxuICAgICAgLy8gYE5leHRqc0Rpc3RyaWJ1dGlvbmAgYnVpbGRzIGl0cyBiZWhhdmlvcnMgYXMgYC8ke2Jhc2VQYXRofS9fbmV4dC9zdGF0aWMqYFxuICAgICAgLy8gYW5kIENsb3VkRnJvbnQgaGFuZHMgYW4gUzMgb3JpZ2luIHRoZSByZXF1ZXN0IHBhdGggdmVyYmF0aW0gYXMgdGhlXG4gICAgICAvLyBvYmplY3Qga2V5LCBzbyB0aGUgb25seSB2YWx1ZSB0aGF0IGNhbiBzZXJ2ZSB0aGUgYXBwIGlzIHRoZSBwcmVmaXggdGhlXG4gICAgICAvLyBhcHAgaXRzZWxmIGVtaXRzLiBUaGF0IGxlYXZlcyB0aGUgcHJvcCBubyByb29tIHRvIGRpZmZlciwgd2hpY2ggbWFrZXNcbiAgICAgIC8vIHRoZSBhcHAncyBjb25maWcgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggd29ydGggZGVyaXZpbmcgZnJvbS5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJDbG91ZEZyb250IHNlcnZlcyBzdGF0aWMgYXNzZXRzIHN0cmFpZ2h0IGZyb20gUzMgdXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgb2JqZWN0IGtleSwgc28gYSBtaXNtYXRjaCBtZWFucyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3QgNDA0cy4gXCIgK1xuICAgICAgICAgIFwiRWl0aGVyIHNldCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLCBvciBkcm9wIHRoZSBwcm9wIOKAlCBsZWZ0IHVuc2V0LCBpdCBmb2xsb3dzIHlvdXIgYXBwJ3MgYGJhc2VQYXRoYC5cIixcbiAgICAgICk7XG4gICAgY2FzZSBOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUzpcbiAgICAgIC8vIERlbGliZXJhdGVseSBub3QgZGVyaXZlZDogQVBJIEdhdGV3YXkgbW91bnRzIHJlc291cmNlcyBiZWxvdyB0aGUgc3RhZ2VcbiAgICAgIC8vIGFuZCBzdHJpcHMgaXQgYmVmb3JlIGludm9raW5nIHRoZSBhcHAsIHNvIGFuIGFwcCB3aG9zZSBiYXNlUGF0aCBpcyB0aGVcbiAgICAgIC8vIHN0YWdlIG5hbWUgKG9yIGEgY3VzdG9tIGRvbWFpbiBiYXNlIHBhdGggbWFwcGluZyB0aGF0IGdldHMgc3RyaXBwZWQgdGhlXG4gICAgICAvLyBzYW1lIHdheSkgaXMgY29ycmVjdCBwcmVjaXNlbHkgYmVjYXVzZSB0aGUgcHJvcCBzdGF5cyB1bnNldC5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHByb3Agb25seSBoYXMgdG8gYmUgdGhlIHRhaWwgb2Ygd2hhdCB0aGUgYXBwIGVtaXRzLCBub3QgYWxsIG9mIGl0LFxuICAgICAgLy8gYmVjYXVzZSB0aGUgc3RyaXBwZWQgcHJlZml4IGlzIHBhcnQgb2YgdGhlIGFwcCdzIGBiYXNlUGF0aGAgYnV0IG5ldmVyXG4gICAgICAvLyBwYXJ0IG9mIHRoZSByZXNvdXJjZSBwYXRoOiBhbiBhcHAgYXQgdGhlIGBwcm9kYCBzdGFnZSBuZXN0ZWQgdW5kZXJcbiAgICAgIC8vIFwiL2Jhc2VcIiBzZXRzIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIGFuZCB0aGUgcHJvcCB0byBcIi9iYXNlXCIuIENoZWNrZWRcbiAgICAgIC8vIG9uIGEgcGF0aCBib3VuZGFyeSBzbyBcIi9wcm9kL2Jhc2VcIiBkb2Vzbid0IGFjY2VwdCBhIHByb3Agb2YgXCJzZVwiLlxuICAgICAgaWYgKGNvbmZpZy5lbmRzV2l0aChgLyR7cHJvcH1gKSkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgbmV2ZXIgd29ya3M6IHRoZSBwcm9wIG1vdmVzIGV2ZXJ5IHJlc291cmNlLCBpbmNsdWRpbmcgdGhlXG4gICAgICAvLyBgQU5ZYCBjYXRjaC1hbGwsIHVuZGVyIGEgcGF0aCB0aGUgYXBwIG5ldmVyIGxpbmtzIHRvLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJUaGUgYGJhc2VQYXRoYCBwcm9wIG5lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aCwgaW5jbHVkaW5nIHRoZSBjYXRjaC1hbGwsIHNvIHRoZSBhcHAgaGFzIHRvIGVtaXQgaXRzIGxpbmtzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCBvciBldmVyeSByZXF1ZXN0IDQwNHMuIFwiICtcbiAgICAgICAgICAnRWl0aGVyIHNldCB5b3VyIGFwcFxcJ3MgYGJhc2VQYXRoYCB0byBlbmQgd2l0aCB0aGUgcHJvcCAob3B0aW9uYWxseSBwcmVmaXhlZCBieSB0aGUgc3RhZ2Ugb3IgYmFzZSBwYXRoIG1hcHBpbmcgQVBJIEdhdGV3YXkgc3RyaXBzLCBlLmcuIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIHdpdGggYSBwcm9wIG9mIFwiL2Jhc2VcIiksIG9yIGxlYXZlIHRoZSBwcm9wIHVuc2V0IOKAlCB1bnNldCBpcyB3aGF0IHlvdSB3YW50IHdoZW4gdGhlIGFwcFxcJ3MgYGJhc2VQYXRoYCBpcyB0aGUgQVBJIEdhdGV3YXkgc3RhZ2UgbmFtZSwgc2luY2UgdGhlIHN0YWdlIGlzblxcJ3QgcGFydCBvZiB0aGUgcmVzb3VyY2UgcGF0aC4nLFxuICAgICAgKTtcbiAgICBjYXNlIE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUzpcbiAgICAgIC8vIFRoZSBBTEIgZm9yd2FyZHMgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93blxuICAgICAgLy8gc3RhdGljIGFzc2V0cywgc28gaGVyZSBgYmFzZVBhdGhgIG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGFuZCBoYXNcbiAgICAgIC8vIG5vIHJvdXRpbmcgbWVhbmluZyB0aGF0IGNvdWxkIGRpc2FncmVlIHdpdGggdGhlIGFwcC5cbiAgICAgIHJldHVybiBwcm9wIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};