cdk-nextjs 0.5.16 → 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 (42) hide show
  1. package/.jsii +290 -183
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +244 -4
  4. package/README.md +2 -2
  5. package/docs/breaking-changes.md +53 -0
  6. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +3 -0
  7. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  8. package/lib/image-optimization/handler-utils.d.ts +7 -5
  9. package/lib/image-optimization/handler-utils.js +17 -11
  10. package/lib/image-optimization/handler-utils.test.js +42 -6
  11. package/lib/image-optimization/handler.mjs +19 -5
  12. package/lib/nextjs-api.d.ts +26 -0
  13. package/lib/nextjs-api.js +41 -13
  14. package/lib/nextjs-api.test.d.ts +1 -0
  15. package/lib/nextjs-api.test.js +144 -0
  16. package/lib/nextjs-build/nextjs-build.d.ts +8 -0
  17. package/lib/nextjs-build/nextjs-build.js +12 -2
  18. package/lib/nextjs-cache.js +1 -1
  19. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  20. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  21. package/lib/nextjs-compute/nextjs-image-function.d.ts +10 -0
  22. package/lib/nextjs-compute/nextjs-image-function.js +3 -2
  23. package/lib/nextjs-distribution.d.ts +11 -0
  24. package/lib/nextjs-distribution.js +16 -10
  25. package/lib/nextjs-post-deploy.js +1 -1
  26. package/lib/nextjs-static-assets.d.ts +18 -0
  27. package/lib/nextjs-static-assets.js +33 -6
  28. package/lib/nextjs-static-assets.test.d.ts +1 -0
  29. package/lib/nextjs-static-assets.test.js +58 -0
  30. package/lib/root-constructs/nextjs-base-construct.d.ts +38 -1
  31. package/lib/root-constructs/nextjs-base-construct.js +41 -3
  32. package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
  33. package/lib/root-constructs/nextjs-global-containers.js +11 -5
  34. package/lib/root-constructs/nextjs-global-functions.d.ts +5 -0
  35. package/lib/root-constructs/nextjs-global-functions.js +10 -4
  36. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  37. package/lib/root-constructs/nextjs-regional-functions.js +5 -5
  38. package/lib/utils/base-path.d.ts +40 -0
  39. package/lib/utils/base-path.js +123 -0
  40. package/lib/utils/base-path.test.d.ts +1 -0
  41. package/lib/utils/base-path.test.js +163 -0
  42. package/package.json +1 -1
@@ -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 {};
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_fs_1 = require("node:fs");
4
+ const node_os_1 = require("node:os");
5
+ const node_path_1 = require("node:path");
6
+ const constants_1 = require("../constants");
7
+ const base_path_1 = require("./base-path");
8
+ const GLOBAL = [constants_1.NextjsType.GLOBAL_FUNCTIONS, constants_1.NextjsType.GLOBAL_CONTAINERS];
9
+ describe("normalizeBasePath", () => {
10
+ it("reduces values addressing the same path to the same segment", () => {
11
+ expect((0, base_path_1.normalizeBasePath)("/base")).toBe("base");
12
+ expect((0, base_path_1.normalizeBasePath)("base")).toBe("base");
13
+ expect((0, base_path_1.normalizeBasePath)("/base/")).toBe("base");
14
+ expect((0, base_path_1.normalizeBasePath)("//base//")).toBe("base");
15
+ });
16
+ it("maps undefined and empty values to an empty string", () => {
17
+ expect((0, base_path_1.normalizeBasePath)(undefined)).toBe("");
18
+ expect((0, base_path_1.normalizeBasePath)("")).toBe("");
19
+ expect((0, base_path_1.normalizeBasePath)("/")).toBe("");
20
+ });
21
+ it("keeps interior slashes of a nested basePath", () => {
22
+ expect((0, base_path_1.normalizeBasePath)("/team/app/")).toBe("team/app");
23
+ });
24
+ });
25
+ describe("joinPath", () => {
26
+ const origin = "https://d111111abcdef8.cloudfront.net";
27
+ it("drops empty parts", () => {
28
+ expect((0, base_path_1.joinPath)(origin)).toBe(origin);
29
+ expect((0, base_path_1.joinPath)(origin, "")).toBe(origin);
30
+ expect((0, base_path_1.joinPath)(origin, undefined)).toBe(origin);
31
+ expect((0, base_path_1.joinPath)(origin, "/")).toBe(origin);
32
+ expect((0, base_path_1.joinPath)("", "base", undefined, "_next/static")).toBe("base/_next/static");
33
+ });
34
+ it("joins with exactly one slash regardless of each part's slashes", () => {
35
+ expect((0, base_path_1.joinPath)(origin, "/base")).toBe(`${origin}/base`);
36
+ expect((0, base_path_1.joinPath)(origin, "base/")).toBe(`${origin}/base`);
37
+ expect((0, base_path_1.joinPath)(origin, "/team/app/")).toBe(`${origin}/team/app`);
38
+ expect((0, base_path_1.joinPath)("/base/", "/_next/static/{key}")).toBe("base/_next/static/{key}");
39
+ });
40
+ it("returns an empty string when every part is empty", () => {
41
+ expect((0, base_path_1.joinPath)()).toBe("");
42
+ expect((0, base_path_1.joinPath)(undefined, "", "/")).toBe("");
43
+ });
44
+ });
45
+ describe("readNextConfigBasePath", () => {
46
+ let dotNextPath;
47
+ let warn;
48
+ beforeEach(() => {
49
+ dotNextPath = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "base-path-"));
50
+ warn = jest.spyOn(console, "warn").mockImplementation(() => { });
51
+ });
52
+ afterEach(() => {
53
+ warn.mockRestore();
54
+ (0, node_fs_1.rmSync)(dotNextPath, { recursive: true, force: true });
55
+ });
56
+ function writeRequiredServerFiles(contents) {
57
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dotNextPath, "required-server-files.json"), contents);
58
+ }
59
+ it("reads the app's basePath and strips the leading slash", () => {
60
+ writeRequiredServerFiles(JSON.stringify({ config: { basePath: "/prod" } }));
61
+ expect((0, base_path_1.readNextConfigBasePath)(dotNextPath)).toBe("prod");
62
+ expect(warn).not.toHaveBeenCalled();
63
+ });
64
+ it("returns an empty string when the app sets no basePath", () => {
65
+ // `next build` writes basePath: "" rather than omitting it.
66
+ writeRequiredServerFiles(JSON.stringify({ config: { basePath: "" } }));
67
+ expect((0, base_path_1.readNextConfigBasePath)(dotNextPath)).toBe("");
68
+ expect(warn).not.toHaveBeenCalled();
69
+ });
70
+ // Degrading to "" is deliberate, but it's indistinguishable from an app that
71
+ // sets no basePath, so it has to be visible: the Global constructs derive
72
+ // their basePath from this value and would otherwise 404 every static asset
73
+ // with nothing but a silent fallback to explain it.
74
+ it("warns when required-server-files.json is missing", () => {
75
+ expect((0, base_path_1.readNextConfigBasePath)(dotNextPath)).toBe("");
76
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining("required-server-files.json"));
77
+ });
78
+ it("warns when the file isn't valid JSON", () => {
79
+ writeRequiredServerFiles("not json");
80
+ expect((0, base_path_1.readNextConfigBasePath)(dotNextPath)).toBe("");
81
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining("Could not read basePath"));
82
+ });
83
+ it("returns an empty string when the file has no config key", () => {
84
+ writeRequiredServerFiles(JSON.stringify({ files: [] }));
85
+ expect((0, base_path_1.readNextConfigBasePath)(dotNextPath)).toBe("");
86
+ });
87
+ });
88
+ describe("resolveBasePath", () => {
89
+ describe.each(Object.values(constants_1.NextjsType))("%s", (nextjsType) => {
90
+ it("resolves to undefined when both are unset", () => {
91
+ expect((0, base_path_1.resolveBasePath)(nextjsType)).toBeUndefined();
92
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "", "")).toBeUndefined();
93
+ // Normalizes to empty, so it's the same as unset rather than a prefix.
94
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "/")).toBeUndefined();
95
+ });
96
+ // One shape out, whatever shape came in: consumers that need a leading
97
+ // slash (only `NextjsDistribution`'s path patterns) add their own, so
98
+ // nothing downstream has to re-normalize.
99
+ it("normalizes the prop when it matches the app", () => {
100
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "/base", "/base")).toBe("base");
101
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "base", "/base")).toBe("base");
102
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "/base/", "/base")).toBe("base");
103
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "base//", "/base")).toBe("base");
104
+ });
105
+ });
106
+ describe.each(GLOBAL)("%s", (nextjsType) => {
107
+ // CloudFront uses the request path verbatim as the S3 object key, so the
108
+ // prop has to be the prefix the app emits — there's exactly one valid value,
109
+ // which makes the app's config the source of truth.
110
+ it("derives the prop from the app's basePath", () => {
111
+ expect((0, base_path_1.resolveBasePath)(nextjsType, undefined, "/base")).toBe("base");
112
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "", "base")).toBe("base");
113
+ expect((0, base_path_1.resolveBasePath)(nextjsType, undefined, "/team/app/")).toBe("team/app");
114
+ });
115
+ it("rejects the prop setting a basePath the app doesn't", () => {
116
+ expect(() => (0, base_path_1.resolveBasePath)(nextjsType, "/base")).toThrow(/CloudFront serves static assets straight from S3/);
117
+ });
118
+ it("rejects two different values", () => {
119
+ expect(() => (0, base_path_1.resolveBasePath)(nextjsType, "/a", "/b")).toThrow('prop is "/a" but your Next.js app\'s config sets `basePath` to "/b"');
120
+ });
121
+ });
122
+ describe(constants_1.NextjsType.REGIONAL_FUNCTIONS, () => {
123
+ // API Gateway strips the stage before matching resources, so an app served
124
+ // at the default `prod` stage sets basePath: "/prod" and leaves the prop
125
+ // unset. Same shape as a custom domain base path mapping. Deriving here
126
+ // would nest every resource under a path the stage already consumed.
127
+ it("does not derive the app's basePath", () => {
128
+ expect((0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, undefined, "/prod")).toBeUndefined();
129
+ });
130
+ // The stripped prefix is part of what the app emits but never part of the
131
+ // resource path, so an app at the `prod` stage nested under "/base" sets
132
+ // basePath: "/prod/base" and the prop to "/base".
133
+ it("accepts an app basePath that ends with the prop", () => {
134
+ expect((0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, "/base", "/prod/base")).toBe("base");
135
+ });
136
+ it("only accepts the prop as a whole trailing path segment", () => {
137
+ expect(() => (0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, "/se", "/prod/base")).toThrow(/nests every API Gateway resource under that path/);
138
+ // Leading, not trailing: API Gateway strips the stage, so the app would
139
+ // emit "/prod/..." while the resources live under "/prod/base/...".
140
+ expect(() => (0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, "/prod", "/prod/base")).toThrow(/nests every API Gateway resource under that path/);
141
+ });
142
+ // The reverse is never right: the prop nests every resource, including the
143
+ // catch-all, under a path the app never links to.
144
+ it("rejects the prop setting a basePath the app doesn't", () => {
145
+ expect(() => (0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, "/base")).toThrow(/nests every API Gateway resource under that path/);
146
+ });
147
+ it("rejects two different values", () => {
148
+ expect(() => (0, base_path_1.resolveBasePath)(constants_1.NextjsType.REGIONAL_FUNCTIONS, "/a", "/b")).toThrow(/nests every API Gateway resource under that path/);
149
+ });
150
+ });
151
+ describe(constants_1.NextjsType.REGIONAL_CONTAINERS, () => {
152
+ // basePath only namespaces the S3 bucket here: the ALB forwards every path
153
+ // to the container, which serves its own static assets. So any combination
154
+ // is valid, and the app's basePath is never derived into the bucket prefix.
155
+ it("accepts any combination, always keeping the prop", () => {
156
+ const nextjsType = constants_1.NextjsType.REGIONAL_CONTAINERS;
157
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "/a", "/b")).toBe("a");
158
+ expect((0, base_path_1.resolveBasePath)(nextjsType, "/a")).toBe("a");
159
+ expect((0, base_path_1.resolveBasePath)(nextjsType, undefined, "/b")).toBeUndefined();
160
+ });
161
+ });
162
+ });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYmFzZS1wYXRoLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBNkQ7QUFDN0QscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw0Q0FBMEM7QUFDMUMsMkNBS3FCO0FBRXJCLE1BQU0sTUFBTSxHQUFHLENBQUMsc0JBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFM0UsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxDQUFDLElBQUEsNkJBQWlCLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLHVDQUF1QyxDQUFDO0lBRXZELEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDM0IsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtRQUN4RSxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxJQUFBLG9CQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUNsRSxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwRCx5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUMxRCxNQUFNLENBQUMsSUFBQSxvQkFBUSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLElBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFdBQVcsR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFBLGdCQUFNLEVBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsd0JBQXdCLENBQUMsUUFBZ0I7UUFDaEQsSUFBQSx1QkFBYSxFQUFDLElBQUEsZ0JBQUksRUFBQyxXQUFXLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sQ0FBQyxJQUFBLGtDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsNERBQTREO1FBQzVELHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkUsTUFBTSxDQUFDLElBQUEsa0NBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsb0RBQW9EO0lBQ3BELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsTUFBTSxDQUFDLElBQUEsa0NBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5Qyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyQyxNQUFNLENBQUMsSUFBQSxrQ0FBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1FBQ2pFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhELE1BQU0sQ0FBQyxJQUFBLGtDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUM1RCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1RCx1RUFBdUU7WUFDdkUsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsMENBQTBDO1FBQzFDLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQ3pDLHlFQUF5RTtRQUN6RSw2RUFBNkU7UUFDN0Usb0RBQW9EO1FBQ3BELEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9ELFVBQVUsQ0FDWCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RCxrREFBa0QsQ0FDbkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzNELHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUMzQywyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLENBQ0osSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUNuRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLENBQ0osSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUN0RSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsMkJBQWUsRUFBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FDcEUsQ0FBQyxPQUFPLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUM5RCx3RUFBd0U7WUFDeEUsb0VBQW9FO1lBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLDJCQUFlLEVBQUMsc0JBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQ3RFLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0Usa0RBQWtEO1FBQ2xELEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsMkJBQWUsRUFBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUN4RCxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUMzRCxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0JBQVUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDNUMsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxzQkFBVSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGpvaW5QYXRoLFxuICBub3JtYWxpemVCYXNlUGF0aCxcbiAgcmVhZE5leHRDb25maWdCYXNlUGF0aCxcbiAgcmVzb2x2ZUJhc2VQYXRoLFxufSBmcm9tIFwiLi9iYXNlLXBhdGhcIjtcblxuY29uc3QgR0xPQkFMID0gW05leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUywgTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU107XG5cbmRlc2NyaWJlKFwibm9ybWFsaXplQmFzZVBhdGhcIiwgKCkgPT4ge1xuICBpdChcInJlZHVjZXMgdmFsdWVzIGFkZHJlc3NpbmcgdGhlIHNhbWUgcGF0aCB0byB0aGUgc2FtZSBzZWdtZW50XCIsICgpID0+IHtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiL2Jhc2UvXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvL2Jhc2UvL1wiKSkudG9CZShcImJhc2VcIik7XG4gIH0pO1xuXG4gIGl0KFwibWFwcyB1bmRlZmluZWQgYW5kIGVtcHR5IHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aCh1bmRlZmluZWQpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcIlwiKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvXCIpKS50b0JlKFwiXCIpO1xuICB9KTtcblxuICBpdChcImtlZXBzIGludGVyaW9yIHNsYXNoZXMgb2YgYSBuZXN0ZWQgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcIi90ZWFtL2FwcC9cIikpLnRvQmUoXCJ0ZWFtL2FwcFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJqb2luUGF0aFwiLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbiA9IFwiaHR0cHM6Ly9kMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldFwiO1xuXG4gIGl0KFwiZHJvcHMgZW1wdHkgcGFydHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4pKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCJcIikpLnRvQmUob3JpZ2luKTtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luLCB1bmRlZmluZWQpKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCIvXCIpKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKFwiXCIsIFwiYmFzZVwiLCB1bmRlZmluZWQsIFwiX25leHQvc3RhdGljXCIpKS50b0JlKFxuICAgICAgXCJiYXNlL19uZXh0L3N0YXRpY1wiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiam9pbnMgd2l0aCBleGFjdGx5IG9uZSBzbGFzaCByZWdhcmRsZXNzIG9mIGVhY2ggcGFydCdzIHNsYXNoZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4sIFwiL2Jhc2VcIikpLnRvQmUoYCR7b3JpZ2lufS9iYXNlYCk7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCJiYXNlL1wiKSkudG9CZShgJHtvcmlnaW59L2Jhc2VgKTtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luLCBcIi90ZWFtL2FwcC9cIikpLnRvQmUoYCR7b3JpZ2lufS90ZWFtL2FwcGApO1xuICAgIGV4cGVjdChqb2luUGF0aChcIi9iYXNlL1wiLCBcIi9fbmV4dC9zdGF0aWMve2tleX1cIikpLnRvQmUoXG4gICAgICBcImJhc2UvX25leHQvc3RhdGljL3trZXl9XCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIGV2ZXJ5IHBhcnQgaXMgZW1wdHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aCgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdChqb2luUGF0aCh1bmRlZmluZWQsIFwiXCIsIFwiL1wiKSkudG9CZShcIlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoXCIsICgpID0+IHtcbiAgbGV0IGRvdE5leHRQYXRoOiBzdHJpbmc7XG4gIGxldCB3YXJuOiBqZXN0LlNweUluc3RhbmNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGRvdE5leHRQYXRoID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJiYXNlLXBhdGgtXCIpKTtcbiAgICB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgcm1TeW5jKGRvdE5leHRQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyaXRlUmVxdWlyZWRTZXJ2ZXJGaWxlcyhjb250ZW50czogc3RyaW5nKSB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGRvdE5leHRQYXRoLCBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLCBjb250ZW50cyk7XG4gIH1cblxuICBpdChcInJlYWRzIHRoZSBhcHAncyBiYXNlUGF0aCBhbmQgc3RyaXBzIHRoZSBsZWFkaW5nIHNsYXNoXCIsICgpID0+IHtcbiAgICB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoSlNPTi5zdHJpbmdpZnkoeyBjb25maWc6IHsgYmFzZVBhdGg6IFwiL3Byb2RcIiB9IH0pKTtcblxuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcInByb2RcIik7XG4gICAgZXhwZWN0KHdhcm4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgYXBwIHNldHMgbm8gYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIC8vIGBuZXh0IGJ1aWxkYCB3cml0ZXMgYmFzZVBhdGg6IFwiXCIgcmF0aGVyIHRoYW4gb21pdHRpbmcgaXQuXG4gICAgd3JpdGVSZXF1aXJlZFNlcnZlckZpbGVzKEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIlwiIH0gfSkpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICAvLyBEZWdyYWRpbmcgdG8gXCJcIiBpcyBkZWxpYmVyYXRlLCBidXQgaXQncyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFwcCB0aGF0XG4gIC8vIHNldHMgbm8gYmFzZVBhdGgsIHNvIGl0IGhhcyB0byBiZSB2aXNpYmxlOiB0aGUgR2xvYmFsIGNvbnN0cnVjdHMgZGVyaXZlXG4gIC8vIHRoZWlyIGJhc2VQYXRoIGZyb20gdGhpcyB2YWx1ZSBhbmQgd291bGQgb3RoZXJ3aXNlIDQwNCBldmVyeSBzdGF0aWMgYXNzZXRcbiAgLy8gd2l0aCBub3RoaW5nIGJ1dCBhIHNpbGVudCBmYWxsYmFjayB0byBleHBsYWluIGl0LlxuICBpdChcIndhcm5zIHdoZW4gcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb24gaXMgbWlzc2luZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJucyB3aGVuIHRoZSBmaWxlIGlzbid0IHZhbGlkIEpTT05cIiwgKCkgPT4ge1xuICAgIHdyaXRlUmVxdWlyZWRTZXJ2ZXJGaWxlcyhcIm5vdCBqc29uXCIpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiQ291bGQgbm90IHJlYWQgYmFzZVBhdGhcIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBmaWxlIGhhcyBubyBjb25maWcga2V5XCIsICgpID0+IHtcbiAgICB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoSlNPTi5zdHJpbmdpZnkoeyBmaWxlczogW10gfSkpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVCYXNlUGF0aFwiLCAoKSA9PiB7XG4gIGRlc2NyaWJlLmVhY2goT2JqZWN0LnZhbHVlcyhOZXh0anNUeXBlKSkoXCIlc1wiLCAobmV4dGpzVHlwZSkgPT4ge1xuICAgIGl0KFwicmVzb2x2ZXMgdG8gdW5kZWZpbmVkIHdoZW4gYm90aCBhcmUgdW5zZXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIlwiLCBcIlwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgLy8gTm9ybWFsaXplcyB0byBlbXB0eSwgc28gaXQncyB0aGUgc2FtZSBhcyB1bnNldCByYXRoZXIgdGhhbiBhIHByZWZpeC5cbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBPbmUgc2hhcGUgb3V0LCB3aGF0ZXZlciBzaGFwZSBjYW1lIGluOiBjb25zdW1lcnMgdGhhdCBuZWVkIGEgbGVhZGluZ1xuICAgIC8vIHNsYXNoIChvbmx5IGBOZXh0anNEaXN0cmlidXRpb25gJ3MgcGF0aCBwYXR0ZXJucykgYWRkIHRoZWlyIG93biwgc29cbiAgICAvLyBub3RoaW5nIGRvd25zdHJlYW0gaGFzIHRvIHJlLW5vcm1hbGl6ZS5cbiAgICBpdChcIm5vcm1hbGl6ZXMgdGhlIHByb3Agd2hlbiBpdCBtYXRjaGVzIHRoZSBhcHBcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9iYXNlXCIsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcImJhc2VcIiwgXCIvYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgICBleHBlY3QocmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIFwiL2Jhc2UvXCIsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcImJhc2UvL1wiLCBcIi9iYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUuZWFjaChHTE9CQUwpKFwiJXNcIiwgKG5leHRqc1R5cGUpID0+IHtcbiAgICAvLyBDbG91ZEZyb250IHVzZXMgdGhlIHJlcXVlc3QgcGF0aCB2ZXJiYXRpbSBhcyB0aGUgUzMgb2JqZWN0IGtleSwgc28gdGhlXG4gICAgLy8gcHJvcCBoYXMgdG8gYmUgdGhlIHByZWZpeCB0aGUgYXBwIGVtaXRzIOKAlCB0aGVyZSdzIGV4YWN0bHkgb25lIHZhbGlkIHZhbHVlLFxuICAgIC8vIHdoaWNoIG1ha2VzIHRoZSBhcHAncyBjb25maWcgdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAgICBpdChcImRlcml2ZXMgdGhlIHByb3AgZnJvbSB0aGUgYXBwJ3MgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCB1bmRlZmluZWQsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIlwiLCBcImJhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCB1bmRlZmluZWQsIFwiL3RlYW0vYXBwL1wiKSkudG9CZShcbiAgICAgICAgXCJ0ZWFtL2FwcFwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB0aGUgcHJvcCBzZXR0aW5nIGEgYmFzZVBhdGggdGhlIGFwcCBkb2Vzbid0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYmFzZVwiKSkudG9UaHJvdyhcbiAgICAgICAgL0Nsb3VkRnJvbnQgc2VydmVzIHN0YXRpYyBhc3NldHMgc3RyYWlnaHQgZnJvbSBTMy8sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWplY3RzIHR3byBkaWZmZXJlbnQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYVwiLCBcIi9iXCIpKS50b1Rocm93KFxuICAgICAgICAncHJvcCBpcyBcIi9hXCIgYnV0IHlvdXIgTmV4dC5qcyBhcHBcXCdzIGNvbmZpZyBzZXRzIGBiYXNlUGF0aGAgdG8gXCIvYlwiJyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCAoKSA9PiB7XG4gICAgLy8gQVBJIEdhdGV3YXkgc3RyaXBzIHRoZSBzdGFnZSBiZWZvcmUgbWF0Y2hpbmcgcmVzb3VyY2VzLCBzbyBhbiBhcHAgc2VydmVkXG4gICAgLy8gYXQgdGhlIGRlZmF1bHQgYHByb2RgIHN0YWdlIHNldHMgYmFzZVBhdGg6IFwiL3Byb2RcIiBhbmQgbGVhdmVzIHRoZSBwcm9wXG4gICAgLy8gdW5zZXQuIFNhbWUgc2hhcGUgYXMgYSBjdXN0b20gZG9tYWluIGJhc2UgcGF0aCBtYXBwaW5nLiBEZXJpdmluZyBoZXJlXG4gICAgLy8gd291bGQgbmVzdCBldmVyeSByZXNvdXJjZSB1bmRlciBhIHBhdGggdGhlIHN0YWdlIGFscmVhZHkgY29uc3VtZWQuXG4gICAgaXQoXCJkb2VzIG5vdCBkZXJpdmUgdGhlIGFwcCdzIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCB1bmRlZmluZWQsIFwiL3Byb2RcIiksXG4gICAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzdHJpcHBlZCBwcmVmaXggaXMgcGFydCBvZiB3aGF0IHRoZSBhcHAgZW1pdHMgYnV0IG5ldmVyIHBhcnQgb2YgdGhlXG4gICAgLy8gcmVzb3VyY2UgcGF0aCwgc28gYW4gYXBwIGF0IHRoZSBgcHJvZGAgc3RhZ2UgbmVzdGVkIHVuZGVyIFwiL2Jhc2VcIiBzZXRzXG4gICAgLy8gYmFzZVBhdGg6IFwiL3Byb2QvYmFzZVwiIGFuZCB0aGUgcHJvcCB0byBcIi9iYXNlXCIuXG4gICAgaXQoXCJhY2NlcHRzIGFuIGFwcCBiYXNlUGF0aCB0aGF0IGVuZHMgd2l0aCB0aGUgcHJvcFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgXCIvYmFzZVwiLCBcIi9wcm9kL2Jhc2VcIiksXG4gICAgICApLnRvQmUoXCJiYXNlXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJvbmx5IGFjY2VwdHMgdGhlIHByb3AgYXMgYSB3aG9sZSB0cmFpbGluZyBwYXRoIHNlZ21lbnRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgXCIvc2VcIiwgXCIvcHJvZC9iYXNlXCIpLFxuICAgICAgKS50b1Rocm93KC9uZXN0cyBldmVyeSBBUEkgR2F0ZXdheSByZXNvdXJjZSB1bmRlciB0aGF0IHBhdGgvKTtcbiAgICAgIC8vIExlYWRpbmcsIG5vdCB0cmFpbGluZzogQVBJIEdhdGV3YXkgc3RyaXBzIHRoZSBzdGFnZSwgc28gdGhlIGFwcCB3b3VsZFxuICAgICAgLy8gZW1pdCBcIi9wcm9kLy4uLlwiIHdoaWxlIHRoZSByZXNvdXJjZXMgbGl2ZSB1bmRlciBcIi9wcm9kL2Jhc2UvLi4uXCIuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCBcIi9wcm9kXCIsIFwiL3Byb2QvYmFzZVwiKSxcbiAgICAgICkudG9UaHJvdygvbmVzdHMgZXZlcnkgQVBJIEdhdGV3YXkgcmVzb3VyY2UgdW5kZXIgdGhhdCBwYXRoLyk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgcmV2ZXJzZSBpcyBuZXZlciByaWdodDogdGhlIHByb3AgbmVzdHMgZXZlcnkgcmVzb3VyY2UsIGluY2x1ZGluZyB0aGVcbiAgICAvLyBjYXRjaC1hbGwsIHVuZGVyIGEgcGF0aCB0aGUgYXBwIG5ldmVyIGxpbmtzIHRvLlxuICAgIGl0KFwicmVqZWN0cyB0aGUgcHJvcCBzZXR0aW5nIGEgYmFzZVBhdGggdGhlIGFwcCBkb2Vzbid0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL2Jhc2VcIiksXG4gICAgICApLnRvVGhyb3coL25lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWplY3RzIHR3byBkaWZmZXJlbnQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL2FcIiwgXCIvYlwiKSxcbiAgICAgICkudG9UaHJvdygvbmVzdHMgZXZlcnkgQVBJIEdhdGV3YXkgcmVzb3VyY2UgdW5kZXIgdGhhdCBwYXRoLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUywgKCkgPT4ge1xuICAgIC8vIGJhc2VQYXRoIG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGhlcmU6IHRoZSBBTEIgZm9yd2FyZHMgZXZlcnkgcGF0aFxuICAgIC8vIHRvIHRoZSBjb250YWluZXIsIHdoaWNoIHNlcnZlcyBpdHMgb3duIHN0YXRpYyBhc3NldHMuIFNvIGFueSBjb21iaW5hdGlvblxuICAgIC8vIGlzIHZhbGlkLCBhbmQgdGhlIGFwcCdzIGJhc2VQYXRoIGlzIG5ldmVyIGRlcml2ZWQgaW50byB0aGUgYnVja2V0IHByZWZpeC5cbiAgICBpdChcImFjY2VwdHMgYW55IGNvbWJpbmF0aW9uLCBhbHdheXMga2VlcGluZyB0aGUgcHJvcFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBuZXh0anNUeXBlID0gTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9hXCIsIFwiL2JcIikpLnRvQmUoXCJhXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9hXCIpKS50b0JlKFwiYVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgdW5kZWZpbmVkLCBcIi9iXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
package/package.json CHANGED
@@ -81,7 +81,7 @@
81
81
  "publishConfig": {
82
82
  "access": "public"
83
83
  },
84
- "version": "0.5.16",
84
+ "version": "0.6.0",
85
85
  "jest": {
86
86
  "coverageProvider": "v8",
87
87
  "testPathIgnorePatterns": [