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, (_b = (_a = props.apexDomain) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '')
72
- .replace(/INDEX_FILE/g, (_c = props.indexFile) !== null && _c !== void 0 ? _c : 'index.html')
73
- .replace(/NO_FILE_EXTENSION_BEHAVIOR/g, (_d = props.noFileExtensionBehavior) !== null && _d !== void 0 ? _d : 'None')
74
- .replace(/TRAILING_SLASH_BEHAVIOR/g, (_e = props.trailingSlashBehavior) !== null && _e !== void 0 ? _e : 'ForwardToIndex')
75
- .replace(/ROBOTS_BEHAVIOR/g, (_f = props.robotsBehavior) !== null && _f !== void 0 ? _f : 'Allow')),
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.14",
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.0",
104
+ "typescript-eslint": "^8.59.1",
105
105
  "vitest": "4.1.5"
106
106
  },
107
107
  "peerDependencies": {