truemark-cdk-lib 1.22.14 → 1.22.15
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.
|
@@ -4,6 +4,14 @@ import { DomainName } from '../../aws-route53/index';
|
|
|
4
4
|
export type TrailingSlashBehavior = 'None' | 'ForwardToIndex' | 'RedirectNoSlash';
|
|
5
5
|
export type NoFileIndexBehavior = 'None' | 'ForwardToIndex' | 'RedirectToSlash';
|
|
6
6
|
export type RobotsBehavior = 'None' | 'Allow' | 'Disallow';
|
|
7
|
+
/**
|
|
8
|
+
* Controls redirecting between the apex domain and the "www" subdomain.
|
|
9
|
+
*
|
|
10
|
+
* - "None" - no redirect is performed.
|
|
11
|
+
* - "RedirectToApex" - requests to "www.example.com" are redirected to "example.com".
|
|
12
|
+
* - "RedirectToWww" - requests to "example.com" are redirected to "www.example.com".
|
|
13
|
+
*/
|
|
14
|
+
export type WwwRedirectBehavior = 'None' | 'RedirectToApex' | 'RedirectToWww';
|
|
7
15
|
export interface RedirectFunctionProps {
|
|
8
16
|
/**
|
|
9
17
|
* Optional domain to redirect to if the host header does not match.
|
|
@@ -31,6 +39,26 @@ export interface RedirectFunctionProps {
|
|
|
31
39
|
* Sets the behavior for /robots.txt requests. Default is "Allow".
|
|
32
40
|
*/
|
|
33
41
|
readonly robotsBehavior?: RobotsBehavior;
|
|
42
|
+
/**
|
|
43
|
+
* Redirects between the apex domain and the "www" subdomain. Default is "None".
|
|
44
|
+
*
|
|
45
|
+
* Note that this is evaluated before `apexDomain`. Generally only one of
|
|
46
|
+
* `wwwRedirectBehavior` or `apexDomain` should be set. Combinations that
|
|
47
|
+
* would produce an infinite redirect loop ("RedirectToWww" with a non-www
|
|
48
|
+
* `apexDomain`, or "RedirectToApex" with a www `apexDomain`) throw at
|
|
49
|
+
* construction time.
|
|
50
|
+
*
|
|
51
|
+
* "RedirectToWww" only prepends "www." to the apex host. When `apexDomain`
|
|
52
|
+
* is set the apex is derived from it, so other subdomains (e.g.
|
|
53
|
+
* `api.example.com`) are not turned into non-resolving names like
|
|
54
|
+
* `www.api.example.com` and instead fall through to the `apexDomain`
|
|
55
|
+
* redirect. When `apexDomain` is not set there is no apex anchor, so this
|
|
56
|
+
* option assumes traffic only arrives on the apex and will prepend "www."
|
|
57
|
+
* to any non-www host.
|
|
58
|
+
*
|
|
59
|
+
* @default "None"
|
|
60
|
+
*/
|
|
61
|
+
readonly wwwRedirectBehavior?: WwwRedirectBehavior;
|
|
34
62
|
}
|
|
35
63
|
export declare class RedirectFunction extends Function {
|
|
36
64
|
constructor(scope: Construct, id: string, props: RedirectFunctionProps);
|
|
@@ -4,12 +4,48 @@ exports.RedirectFunction = void 0;
|
|
|
4
4
|
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
5
5
|
class RedirectFunction extends aws_cloudfront_1.Function {
|
|
6
6
|
constructor(scope, id, props) {
|
|
7
|
-
var _a, _b, _c, _d, _e, _f;
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
8
|
+
const apexDomain = (_b = (_a = props.apexDomain) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
|
|
9
|
+
const wwwRedirectBehavior = (_c = props.wwwRedirectBehavior) !== null && _c !== void 0 ? _c : 'None';
|
|
10
|
+
if (apexDomain !== '' && wwwRedirectBehavior !== 'None') {
|
|
11
|
+
const apexIsWww = apexDomain.startsWith('www.');
|
|
12
|
+
if (wwwRedirectBehavior === 'RedirectToWww' && !apexIsWww) {
|
|
13
|
+
throw new Error(`RedirectFunction: wwwRedirectBehavior "RedirectToWww" with a non-www apexDomain ("${apexDomain}") creates an infinite redirect loop (host -> www.host -> apexDomain -> ...). Set apexDomain to the www host or remove one of these options.`);
|
|
14
|
+
}
|
|
15
|
+
if (wwwRedirectBehavior === 'RedirectToApex' && apexIsWww) {
|
|
16
|
+
throw new Error(`RedirectFunction: wwwRedirectBehavior "RedirectToApex" with a www apexDomain ("${apexDomain}") creates an infinite redirect loop (www.host -> host -> apexDomain -> ...). Set apexDomain to the apex host or remove one of these options.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
8
19
|
super(scope, id, {
|
|
9
20
|
code: aws_cloudfront_1.FunctionCode.fromInline(`
|
|
10
21
|
function handler(event) {
|
|
11
22
|
var host = event.request.headers.host.value;
|
|
12
23
|
var uri = event.request.uri;
|
|
24
|
+
if ("WWW_REDIRECT_BEHAVIOR" === "RedirectToApex" && host.startsWith("www.")) {
|
|
25
|
+
return {
|
|
26
|
+
statusCode: 301,
|
|
27
|
+
statusDescription: "Permanently moved",
|
|
28
|
+
headers: {
|
|
29
|
+
"location": { "value": "https://" + host.substring(4) + uri }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if ("WWW_REDIRECT_BEHAVIOR" === "RedirectToWww" && !host.startsWith("www.")) {
|
|
34
|
+
// Only redirect the apex itself. Prepending "www." to an arbitrary host
|
|
35
|
+
// would produce non-resolving names like "www.api.example.com", so other
|
|
36
|
+
// subdomains are left for the apexDomain block below. When no apexDomain
|
|
37
|
+
// is configured there is no apex anchor, so we assume traffic only
|
|
38
|
+
// arrives on the apex and redirect unconditionally.
|
|
39
|
+
if ("APEX_DOMAIN" === "" || host === "APEX_DOMAIN".substring(4)) {
|
|
40
|
+
return {
|
|
41
|
+
statusCode: 301,
|
|
42
|
+
statusDescription: "Permanently moved",
|
|
43
|
+
headers: {
|
|
44
|
+
"location": { "value": "https://www." + host + uri }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
13
49
|
if ("APEX_DOMAIN" !== "" && host !== "APEX_DOMAIN") {
|
|
14
50
|
return {
|
|
15
51
|
statusCode: 301,
|
|
@@ -68,13 +104,14 @@ function handler(event) {
|
|
|
68
104
|
}
|
|
69
105
|
return event.request;
|
|
70
106
|
}`
|
|
71
|
-
.replace(/APEX_DOMAIN/g,
|
|
72
|
-
.replace(/INDEX_FILE/g, (
|
|
73
|
-
.replace(/NO_FILE_EXTENSION_BEHAVIOR/g, (
|
|
74
|
-
.replace(/TRAILING_SLASH_BEHAVIOR/g, (
|
|
75
|
-
.replace(/ROBOTS_BEHAVIOR/g, (
|
|
107
|
+
.replace(/APEX_DOMAIN/g, apexDomain)
|
|
108
|
+
.replace(/INDEX_FILE/g, (_d = props.indexFile) !== null && _d !== void 0 ? _d : 'index.html')
|
|
109
|
+
.replace(/NO_FILE_EXTENSION_BEHAVIOR/g, (_e = props.noFileExtensionBehavior) !== null && _e !== void 0 ? _e : 'None')
|
|
110
|
+
.replace(/TRAILING_SLASH_BEHAVIOR/g, (_f = props.trailingSlashBehavior) !== null && _f !== void 0 ? _f : 'ForwardToIndex')
|
|
111
|
+
.replace(/ROBOTS_BEHAVIOR/g, (_g = props.robotsBehavior) !== null && _g !== void 0 ? _g : 'Allow')
|
|
112
|
+
.replace(/WWW_REDIRECT_BEHAVIOR/g, wwwRedirectBehavior)),
|
|
76
113
|
});
|
|
77
114
|
}
|
|
78
115
|
}
|
|
79
116
|
exports.RedirectFunction = RedirectFunction;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLWNsb3VkZnJvbnQvbGliL3JlZGlyZWN0LWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUFrRTtBQThDbEUsTUFBYSxnQkFBaUIsU0FBUSx5QkFBUTtJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCOztRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSw2QkFBWSxDQUFDLFVBQVUsQ0FDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RE47aUJBQ1MsT0FBTyxDQUFDLGNBQWMsRUFBRSxNQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFLG1DQUFJLEVBQUUsQ0FBQztpQkFDM0QsT0FBTyxDQUFDLGFBQWEsRUFBRSxNQUFBLEtBQUssQ0FBQyxTQUFTLG1DQUFJLFlBQVksQ0FBQztpQkFDdkQsT0FBTyxDQUNOLDZCQUE2QixFQUM3QixNQUFBLEtBQUssQ0FBQyx1QkFBdUIsbUNBQUksTUFBTSxDQUN4QztpQkFDQSxPQUFPLENBQ04sMEJBQTBCLEVBQzFCLE1BQUEsS0FBSyxDQUFDLHFCQUFxQixtQ0FBSSxnQkFBZ0IsQ0FDaEQ7aUJBQ0EsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE1BQUEsS0FBSyxDQUFDLGNBQWMsbUNBQUksT0FBTyxDQUFDLENBQ2hFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaEZELDRDQWdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RnVuY3Rpb24sIEZ1bmN0aW9uQ29kZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtEb21haW5OYW1lfSBmcm9tICcuLi8uLi9hd3Mtcm91dGU1My9pbmRleCc7XG5cbmV4cG9ydCB0eXBlIFRyYWlsaW5nU2xhc2hCZWhhdmlvciA9XG4gIHwgJ05vbmUnXG4gIHwgJ0ZvcndhcmRUb0luZGV4J1xuICB8ICdSZWRpcmVjdE5vU2xhc2gnO1xuXG5leHBvcnQgdHlwZSBOb0ZpbGVJbmRleEJlaGF2aW9yID0gJ05vbmUnIHwgJ0ZvcndhcmRUb0luZGV4JyB8ICdSZWRpcmVjdFRvU2xhc2gnO1xuXG5leHBvcnQgdHlwZSBSb2JvdHNCZWhhdmlvciA9ICdOb25lJyB8ICdBbGxvdycgfCAnRGlzYWxsb3cnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0RnVuY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkb21haW4gdG8gcmVkaXJlY3QgdG8gaWYgdGhlIGhvc3QgaGVhZGVyIGRvZXMgbm90IG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBleERvbWFpbj86IHN0cmluZyB8IERvbWFpbk5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGZpbGUgdG8gcmVxdWVzdCB3aGVuIHRoZSBVUkkgZW5kcyB3aXRoIGEgJy8nLiBTZXQgdG8gZW4gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiaW5kZXguaHRtbFwiXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJlaGF2aW9yIG9mIHBhdGhzIHdpdGggdHJhaWxpbmcgc2xhc2hlcy4gRGVmYXVsdCBpcyBcIkZvcndhcmRUb0luZGV4XCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiRm9yd2FyZFRvSW5kZXhcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdTbGFzaEJlaGF2aW9yPzogVHJhaWxpbmdTbGFzaEJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiZWhhdmlvciBvZiBwYXRocyB3aXRoIG5vIGZpbGUgZXh0ZW5zaW9uLiBEZWZhdWx0IGlzIFwiTm9uZVwiXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiTm9uZVwiXG4gICAqL1xuICByZWFkb25seSBub0ZpbGVFeHRlbnNpb25CZWhhdmlvcj86IE5vRmlsZUluZGV4QmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJlaGF2aW9yIGZvciAvcm9ib3RzLnR4dCByZXF1ZXN0cy4gRGVmYXVsdCBpcyBcIkFsbG93XCIuXG4gICAqL1xuICByZWFkb25seSByb2JvdHNCZWhhdmlvcj86IFJvYm90c0JlaGF2aW9yO1xufVxuXG5leHBvcnQgY2xhc3MgUmVkaXJlY3RGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlZGlyZWN0RnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoXG4gICAgICAgIGBcbmZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgdmFyIGhvc3QgPSBldmVudC5yZXF1ZXN0LmhlYWRlcnMuaG9zdC52YWx1ZTtcbiAgdmFyIHVyaSA9IGV2ZW50LnJlcXVlc3QudXJpO1xuICBpZiAoXCJBUEVYX0RPTUFJTlwiICE9PSBcIlwiICYmIGhvc3QgIT09IFwiQVBFWF9ET01BSU5cIikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiAzMDEsXG4gICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJQZXJtYW5lbnRseSBtb3ZlZFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImxvY2F0aW9uXCI6IHsgXCJ2YWx1ZVwiOiBcImh0dHBzOi8vQVBFWF9ET01BSU5cIiArIHVyaSB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChcIklOREVYX0ZJTEVcIiAhPT0gXCJcIiAmJiBcIk5PX0ZJTEVfRVhURU5TSU9OX0JFSEFWSU9SXCIgIT09IFwiTm9uZVwiICYmIHVyaS5zcGxpdChcIi9cIikucG9wKCkuc3BsaXQoXCIuXCIpLmxlbmd0aCA8PSAxKSB7XG4gICAgaWYgKFwiTk9fRklMRV9FWFRFTlNJT05fQkVIQVZJT1JcIiA9PT0gXCJGb3J3YXJkVG9JbmRleFwiKSB7XG4gICAgICBldmVudC5yZXF1ZXN0LnVyaSA9IHVyaSArIFwiL0lOREVYX0ZJTEVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMzAxLFxuICAgICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJQZXJtYW5lbnRseSBtb3ZlZFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJsb2NhdGlvblwiOiB7IFwidmFsdWVcIjogdXJpICsgXCIvXCIgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChcIklOREVYX0ZJTEVcIiAhPT0gXCJcIiAmJiBcIlRSQUlMSU5HX1NMQVNIX0JFSEFWSU9SXCIgIT09IFwiTm9uZVwiICYmIHVyaS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICBpZiAoXCJUUkFJTElOR19TTEFTSF9CRUhBVklPUlwiID09PSBcIkZvcndhcmRUb0luZGV4XCIgfHwgdXJpID09PSBcIi9cIikge1xuICAgICAgZXZlbnQucmVxdWVzdC51cmkgPSB1cmkgKyBcIklOREVYX0ZJTEVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMzAxLFxuICAgICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJQZXJtYW5lbnRseSBtb3ZlZFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJsb2NhdGlvblwiOiB7IFwidmFsdWVcIjogdXJpLnJlcGxhY2UoLy4kLywgXCJcIikgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChldmVudC5yZXF1ZXN0LnVyaSA9PT0gXCIvcm9ib3RzLnR4dFwiICYmIFwiUk9CT1RTX0JFSEFWSU9SXCIgIT09IFwiTm9uZVwiKSB7XG4gICAgaWYgKFwiUk9CT1RTX0JFSEFWSU9SXCIgPT09IFwiQWxsb3dcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJPS1wiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiB7IFwidmFsdWVcIjogXCJ0ZXh0L3BsYWluXCIgfVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBcIlVzZXItYWdlbnQ6ICpcXFxcbkFsbG93OiAvXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBEaXNhbGxvd1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJPS1wiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiB7IFwidmFsdWVcIjogXCJ0ZXh0L3BsYWluXCIgfVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBcIlVzZXItYWdlbnQ6ICpcXFxcbkRpc2FsbG93OiAvXCJcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50LnJlcXVlc3Q7XG59YFxuICAgICAgICAgIC5yZXBsYWNlKC9BUEVYX0RPTUFJTi9nLCBwcm9wcy5hcGV4RG9tYWluPy50b1N0cmluZygpID8/ICcnKVxuICAgICAgICAgIC5yZXBsYWNlKC9JTkRFWF9GSUxFL2csIHByb3BzLmluZGV4RmlsZSA/PyAnaW5kZXguaHRtbCcpXG4gICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAvTk9fRklMRV9FWFRFTlNJT05fQkVIQVZJT1IvZyxcbiAgICAgICAgICAgIHByb3BzLm5vRmlsZUV4dGVuc2lvbkJlaGF2aW9yID8/ICdOb25lJyxcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAvVFJBSUxJTkdfU0xBU0hfQkVIQVZJT1IvZyxcbiAgICAgICAgICAgIHByb3BzLnRyYWlsaW5nU2xhc2hCZWhhdmlvciA/PyAnRm9yd2FyZFRvSW5kZXgnLFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbGFjZSgvUk9CT1RTX0JFSEFWSU9SL2csIHByb3BzLnJvYm90c0JlaGF2aW9yID8/ICdBbGxvdycpLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLWNsb3VkZnJvbnQvbGliL3JlZGlyZWN0LWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUFrRTtBQTRFbEUsTUFBYSxnQkFBaUIsU0FBUSx5QkFBUTtJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCOztRQUNwRSxNQUFNLFVBQVUsR0FBRyxNQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFLG1DQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLG1CQUFtQixHQUFHLE1BQUEsS0FBSyxDQUFDLG1CQUFtQixtQ0FBSSxNQUFNLENBQUM7UUFDaEUsSUFBSSxVQUFVLEtBQUssRUFBRSxJQUFJLG1CQUFtQixLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3hELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxtQkFBbUIsS0FBSyxlQUFlLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxRkFBcUYsVUFBVSw4SUFBOEksQ0FDOU8sQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLG1CQUFtQixLQUFLLGdCQUFnQixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksS0FBSyxDQUNiLGtGQUFrRixVQUFVLCtJQUErSSxDQUM1TyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSw2QkFBWSxDQUFDLFVBQVUsQ0FDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0ZOO2lCQUNTLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDO2lCQUNuQyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQUEsS0FBSyxDQUFDLFNBQVMsbUNBQUksWUFBWSxDQUFDO2lCQUN2RCxPQUFPLENBQ04sNkJBQTZCLEVBQzdCLE1BQUEsS0FBSyxDQUFDLHVCQUF1QixtQ0FBSSxNQUFNLENBQ3hDO2lCQUNBLE9BQU8sQ0FDTiwwQkFBMEIsRUFDMUIsTUFBQSxLQUFLLENBQUMscUJBQXFCLG1DQUFJLGdCQUFnQixDQUNoRDtpQkFDQSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBQSxLQUFLLENBQUMsY0FBYyxtQ0FBSSxPQUFPLENBQUM7aUJBQzVELE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUMxRDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpIRCw0Q0F5SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Z1bmN0aW9uLCBGdW5jdGlvbkNvZGV9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7RG9tYWluTmFtZX0gZnJvbSAnLi4vLi4vYXdzLXJvdXRlNTMvaW5kZXgnO1xuXG5leHBvcnQgdHlwZSBUcmFpbGluZ1NsYXNoQmVoYXZpb3IgPVxuICB8ICdOb25lJ1xuICB8ICdGb3J3YXJkVG9JbmRleCdcbiAgfCAnUmVkaXJlY3ROb1NsYXNoJztcblxuZXhwb3J0IHR5cGUgTm9GaWxlSW5kZXhCZWhhdmlvciA9ICdOb25lJyB8ICdGb3J3YXJkVG9JbmRleCcgfCAnUmVkaXJlY3RUb1NsYXNoJztcblxuZXhwb3J0IHR5cGUgUm9ib3RzQmVoYXZpb3IgPSAnTm9uZScgfCAnQWxsb3cnIHwgJ0Rpc2FsbG93JztcblxuLyoqXG4gKiBDb250cm9scyByZWRpcmVjdGluZyBiZXR3ZWVuIHRoZSBhcGV4IGRvbWFpbiBhbmQgdGhlIFwid3d3XCIgc3ViZG9tYWluLlxuICpcbiAqIC0gXCJOb25lXCIgLSBubyByZWRpcmVjdCBpcyBwZXJmb3JtZWQuXG4gKiAtIFwiUmVkaXJlY3RUb0FwZXhcIiAtIHJlcXVlc3RzIHRvIFwid3d3LmV4YW1wbGUuY29tXCIgYXJlIHJlZGlyZWN0ZWQgdG8gXCJleGFtcGxlLmNvbVwiLlxuICogLSBcIlJlZGlyZWN0VG9Xd3dcIiAtIHJlcXVlc3RzIHRvIFwiZXhhbXBsZS5jb21cIiBhcmUgcmVkaXJlY3RlZCB0byBcInd3dy5leGFtcGxlLmNvbVwiLlxuICovXG5leHBvcnQgdHlwZSBXd3dSZWRpcmVjdEJlaGF2aW9yID0gJ05vbmUnIHwgJ1JlZGlyZWN0VG9BcGV4JyB8ICdSZWRpcmVjdFRvV3d3JztcblxuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdEZ1bmN0aW9uUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZG9tYWluIHRvIHJlZGlyZWN0IHRvIGlmIHRoZSBob3N0IGhlYWRlciBkb2VzIG5vdCBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGFwZXhEb21haW4/OiBzdHJpbmcgfCBEb21haW5OYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBmaWxlIHRvIHJlcXVlc3Qgd2hlbiB0aGUgVVJJIGVuZHMgd2l0aCBhICcvJy4gU2V0IHRvIGVuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImluZGV4Lmh0bWxcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiZWhhdmlvciBvZiBwYXRocyB3aXRoIHRyYWlsaW5nIHNsYXNoZXMuIERlZmF1bHQgaXMgXCJGb3J3YXJkVG9JbmRleFwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkZvcndhcmRUb0luZGV4XCJcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nU2xhc2hCZWhhdmlvcj86IFRyYWlsaW5nU2xhc2hCZWhhdmlvcjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYmVoYXZpb3Igb2YgcGF0aHMgd2l0aCBubyBmaWxlIGV4dGVuc2lvbi4gRGVmYXVsdCBpcyBcIk5vbmVcIlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIk5vbmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgbm9GaWxlRXh0ZW5zaW9uQmVoYXZpb3I/OiBOb0ZpbGVJbmRleEJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiZWhhdmlvciBmb3IgL3JvYm90cy50eHQgcmVxdWVzdHMuIERlZmF1bHQgaXMgXCJBbGxvd1wiLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9ib3RzQmVoYXZpb3I/OiBSb2JvdHNCZWhhdmlvcjtcblxuICAvKipcbiAgICogUmVkaXJlY3RzIGJldHdlZW4gdGhlIGFwZXggZG9tYWluIGFuZCB0aGUgXCJ3d3dcIiBzdWJkb21haW4uIERlZmF1bHQgaXMgXCJOb25lXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGlzIGV2YWx1YXRlZCBiZWZvcmUgYGFwZXhEb21haW5gLiBHZW5lcmFsbHkgb25seSBvbmUgb2ZcbiAgICogYHd3d1JlZGlyZWN0QmVoYXZpb3JgIG9yIGBhcGV4RG9tYWluYCBzaG91bGQgYmUgc2V0LiBDb21iaW5hdGlvbnMgdGhhdFxuICAgKiB3b3VsZCBwcm9kdWNlIGFuIGluZmluaXRlIHJlZGlyZWN0IGxvb3AgKFwiUmVkaXJlY3RUb1d3d1wiIHdpdGggYSBub24td3d3XG4gICAqIGBhcGV4RG9tYWluYCwgb3IgXCJSZWRpcmVjdFRvQXBleFwiIHdpdGggYSB3d3cgYGFwZXhEb21haW5gKSB0aHJvdyBhdFxuICAgKiBjb25zdHJ1Y3Rpb24gdGltZS5cbiAgICpcbiAgICogXCJSZWRpcmVjdFRvV3d3XCIgb25seSBwcmVwZW5kcyBcInd3dy5cIiB0byB0aGUgYXBleCBob3N0LiBXaGVuIGBhcGV4RG9tYWluYFxuICAgKiBpcyBzZXQgdGhlIGFwZXggaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyBvdGhlciBzdWJkb21haW5zIChlLmcuXG4gICAqIGBhcGkuZXhhbXBsZS5jb21gKSBhcmUgbm90IHR1cm5lZCBpbnRvIG5vbi1yZXNvbHZpbmcgbmFtZXMgbGlrZVxuICAgKiBgd3d3LmFwaS5leGFtcGxlLmNvbWAgYW5kIGluc3RlYWQgZmFsbCB0aHJvdWdoIHRvIHRoZSBgYXBleERvbWFpbmBcbiAgICogcmVkaXJlY3QuIFdoZW4gYGFwZXhEb21haW5gIGlzIG5vdCBzZXQgdGhlcmUgaXMgbm8gYXBleCBhbmNob3IsIHNvIHRoaXNcbiAgICogb3B0aW9uIGFzc3VtZXMgdHJhZmZpYyBvbmx5IGFycml2ZXMgb24gdGhlIGFwZXggYW5kIHdpbGwgcHJlcGVuZCBcInd3dy5cIlxuICAgKiB0byBhbnkgbm9uLXd3dyBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIk5vbmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgd3d3UmVkaXJlY3RCZWhhdmlvcj86IFd3d1JlZGlyZWN0QmVoYXZpb3I7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWRpcmVjdEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVkaXJlY3RGdW5jdGlvblByb3BzKSB7XG4gICAgY29uc3QgYXBleERvbWFpbiA9IHByb3BzLmFwZXhEb21haW4/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgY29uc3Qgd3d3UmVkaXJlY3RCZWhhdmlvciA9IHByb3BzLnd3d1JlZGlyZWN0QmVoYXZpb3IgPz8gJ05vbmUnO1xuICAgIGlmIChhcGV4RG9tYWluICE9PSAnJyAmJiB3d3dSZWRpcmVjdEJlaGF2aW9yICE9PSAnTm9uZScpIHtcbiAgICAgIGNvbnN0IGFwZXhJc1d3dyA9IGFwZXhEb21haW4uc3RhcnRzV2l0aCgnd3d3LicpO1xuICAgICAgaWYgKHd3d1JlZGlyZWN0QmVoYXZpb3IgPT09ICdSZWRpcmVjdFRvV3d3JyAmJiAhYXBleElzV3d3KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUmVkaXJlY3RGdW5jdGlvbjogd3d3UmVkaXJlY3RCZWhhdmlvciBcIlJlZGlyZWN0VG9Xd3dcIiB3aXRoIGEgbm9uLXd3dyBhcGV4RG9tYWluIChcIiR7YXBleERvbWFpbn1cIikgY3JlYXRlcyBhbiBpbmZpbml0ZSByZWRpcmVjdCBsb29wIChob3N0IC0+IHd3dy5ob3N0IC0+IGFwZXhEb21haW4gLT4gLi4uKS4gU2V0IGFwZXhEb21haW4gdG8gdGhlIHd3dyBob3N0IG9yIHJlbW92ZSBvbmUgb2YgdGhlc2Ugb3B0aW9ucy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHd3d1JlZGlyZWN0QmVoYXZpb3IgPT09ICdSZWRpcmVjdFRvQXBleCcgJiYgYXBleElzV3d3KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUmVkaXJlY3RGdW5jdGlvbjogd3d3UmVkaXJlY3RCZWhhdmlvciBcIlJlZGlyZWN0VG9BcGV4XCIgd2l0aCBhIHd3dyBhcGV4RG9tYWluIChcIiR7YXBleERvbWFpbn1cIikgY3JlYXRlcyBhbiBpbmZpbml0ZSByZWRpcmVjdCBsb29wICh3d3cuaG9zdCAtPiBob3N0IC0+IGFwZXhEb21haW4gLT4gLi4uKS4gU2V0IGFwZXhEb21haW4gdG8gdGhlIGFwZXggaG9zdCBvciByZW1vdmUgb25lIG9mIHRoZXNlIG9wdGlvbnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShcbiAgICAgICAgYFxuZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICB2YXIgaG9zdCA9IGV2ZW50LnJlcXVlc3QuaGVhZGVycy5ob3N0LnZhbHVlO1xuICB2YXIgdXJpID0gZXZlbnQucmVxdWVzdC51cmk7XG4gIGlmIChcIldXV19SRURJUkVDVF9CRUhBVklPUlwiID09PSBcIlJlZGlyZWN0VG9BcGV4XCIgJiYgaG9zdC5zdGFydHNXaXRoKFwid3d3LlwiKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiAzMDEsXG4gICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJQZXJtYW5lbnRseSBtb3ZlZFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImxvY2F0aW9uXCI6IHsgXCJ2YWx1ZVwiOiBcImh0dHBzOi8vXCIgKyBob3N0LnN1YnN0cmluZyg0KSArIHVyaSB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChcIldXV19SRURJUkVDVF9CRUhBVklPUlwiID09PSBcIlJlZGlyZWN0VG9Xd3dcIiAmJiAhaG9zdC5zdGFydHNXaXRoKFwid3d3LlwiKSkge1xuICAgIC8vIE9ubHkgcmVkaXJlY3QgdGhlIGFwZXggaXRzZWxmLiBQcmVwZW5kaW5nIFwid3d3LlwiIHRvIGFuIGFyYml0cmFyeSBob3N0XG4gICAgLy8gd291bGQgcHJvZHVjZSBub24tcmVzb2x2aW5nIG5hbWVzIGxpa2UgXCJ3d3cuYXBpLmV4YW1wbGUuY29tXCIsIHNvIG90aGVyXG4gICAgLy8gc3ViZG9tYWlucyBhcmUgbGVmdCBmb3IgdGhlIGFwZXhEb21haW4gYmxvY2sgYmVsb3cuIFdoZW4gbm8gYXBleERvbWFpblxuICAgIC8vIGlzIGNvbmZpZ3VyZWQgdGhlcmUgaXMgbm8gYXBleCBhbmNob3IsIHNvIHdlIGFzc3VtZSB0cmFmZmljIG9ubHlcbiAgICAvLyBhcnJpdmVzIG9uIHRoZSBhcGV4IGFuZCByZWRpcmVjdCB1bmNvbmRpdGlvbmFsbHkuXG4gICAgaWYgKFwiQVBFWF9ET01BSU5cIiA9PT0gXCJcIiB8fCBob3N0ID09PSBcIkFQRVhfRE9NQUlOXCIuc3Vic3RyaW5nKDQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiAzMDEsXG4gICAgICAgIHN0YXR1c0Rlc2NyaXB0aW9uOiBcIlBlcm1hbmVudGx5IG1vdmVkXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcImxvY2F0aW9uXCI6IHsgXCJ2YWx1ZVwiOiBcImh0dHBzOi8vd3d3LlwiICsgaG9zdCArIHVyaSB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFwiQVBFWF9ET01BSU5cIiAhPT0gXCJcIiAmJiBob3N0ICE9PSBcIkFQRVhfRE9NQUlOXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogMzAxLFxuICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFwiUGVybWFuZW50bHkgbW92ZWRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJsb2NhdGlvblwiOiB7IFwidmFsdWVcIjogXCJodHRwczovL0FQRVhfRE9NQUlOXCIgKyB1cmkgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoXCJJTkRFWF9GSUxFXCIgIT09IFwiXCIgJiYgXCJOT19GSUxFX0VYVEVOU0lPTl9CRUhBVklPUlwiICE9PSBcIk5vbmVcIiAmJiB1cmkuc3BsaXQoXCIvXCIpLnBvcCgpLnNwbGl0KFwiLlwiKS5sZW5ndGggPD0gMSkge1xuICAgIGlmIChcIk5PX0ZJTEVfRVhURU5TSU9OX0JFSEFWSU9SXCIgPT09IFwiRm9yd2FyZFRvSW5kZXhcIikge1xuICAgICAgZXZlbnQucmVxdWVzdC51cmkgPSB1cmkgKyBcIi9JTkRFWF9GSUxFXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDMwMSxcbiAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFwiUGVybWFuZW50bHkgbW92ZWRcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwibG9jYXRpb25cIjogeyBcInZhbHVlXCI6IHVyaSArIFwiL1wiIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoXCJJTkRFWF9GSUxFXCIgIT09IFwiXCIgJiYgXCJUUkFJTElOR19TTEFTSF9CRUhBVklPUlwiICE9PSBcIk5vbmVcIiAmJiB1cmkuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgaWYgKFwiVFJBSUxJTkdfU0xBU0hfQkVIQVZJT1JcIiA9PT0gXCJGb3J3YXJkVG9JbmRleFwiIHx8IHVyaSA9PT0gXCIvXCIpIHtcbiAgICAgIGV2ZW50LnJlcXVlc3QudXJpID0gdXJpICsgXCJJTkRFWF9GSUxFXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDMwMSxcbiAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFwiUGVybWFuZW50bHkgbW92ZWRcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwibG9jYXRpb25cIjogeyBcInZhbHVlXCI6IHVyaS5yZXBsYWNlKC8uJC8sIFwiXCIpIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZXZlbnQucmVxdWVzdC51cmkgPT09IFwiL3JvYm90cy50eHRcIiAmJiBcIlJPQk9UU19CRUhBVklPUlwiICE9PSBcIk5vbmVcIikge1xuICAgIGlmIChcIlJPQk9UU19CRUhBVklPUlwiID09PSBcIkFsbG93XCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFwiT0tcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogeyBcInZhbHVlXCI6IFwidGV4dC9wbGFpblwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogXCJVc2VyLWFnZW50OiAqXFxcXG5BbGxvdzogL1wiXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gRGlzYWxsb3dcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFwiT0tcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogeyBcInZhbHVlXCI6IFwidGV4dC9wbGFpblwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogXCJVc2VyLWFnZW50OiAqXFxcXG5EaXNhbGxvdzogL1wiXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBldmVudC5yZXF1ZXN0O1xufWBcbiAgICAgICAgICAucmVwbGFjZSgvQVBFWF9ET01BSU4vZywgYXBleERvbWFpbilcbiAgICAgICAgICAucmVwbGFjZSgvSU5ERVhfRklMRS9nLCBwcm9wcy5pbmRleEZpbGUgPz8gJ2luZGV4Lmh0bWwnKVxuICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgL05PX0ZJTEVfRVhURU5TSU9OX0JFSEFWSU9SL2csXG4gICAgICAgICAgICBwcm9wcy5ub0ZpbGVFeHRlbnNpb25CZWhhdmlvciA/PyAnTm9uZScsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgL1RSQUlMSU5HX1NMQVNIX0JFSEFWSU9SL2csXG4gICAgICAgICAgICBwcm9wcy50cmFpbGluZ1NsYXNoQmVoYXZpb3IgPz8gJ0ZvcndhcmRUb0luZGV4JyxcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcGxhY2UoL1JPQk9UU19CRUhBVklPUi9nLCBwcm9wcy5yb2JvdHNCZWhhdmlvciA/PyAnQWxsb3cnKVxuICAgICAgICAgIC5yZXBsYWNlKC9XV1dfUkVESVJFQ1RfQkVIQVZJT1IvZywgd3d3UmVkaXJlY3RCZWhhdmlvciksXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "truemark-cdk-lib",
|
|
3
3
|
"description": "AWS CDK constructs created by TrueMark",
|
|
4
|
-
"version": "1.22.
|
|
4
|
+
"version": "1.22.15",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"typesVersions": {
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"prettier": "^3.8.1",
|
|
102
102
|
"ts-node": "^10.9.2",
|
|
103
103
|
"typescript": "~5.9.3",
|
|
104
|
-
"typescript-eslint": "^8.59.
|
|
104
|
+
"typescript-eslint": "^8.59.1",
|
|
105
105
|
"vitest": "4.1.5"
|
|
106
106
|
},
|
|
107
107
|
"peerDependencies": {
|