@aws-cdk/toolkit-lib 0.3.3 → 0.3.4

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 (126) hide show
  1. package/api-extractor.json +3 -0
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/private/helpers.js +3 -3
  5. package/lib/actions/diff/index.d.ts +1 -1
  6. package/lib/actions/diff/index.js +1 -1
  7. package/lib/actions/diff/private/helpers.js +8 -8
  8. package/lib/actions/refactor/index.d.ts +12 -0
  9. package/lib/actions/refactor/index.js +1 -1
  10. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  11. package/lib/api/aws-auth/credential-plugins.js +2 -2
  12. package/lib/api/aws-auth/sdk-provider.js +2 -2
  13. package/lib/api/aws-auth/sdk.js +2 -2
  14. package/lib/api/bootstrap/bootstrap-environment.js +2 -2
  15. package/lib/api/cloud-assembly/environment.js +1 -1
  16. package/lib/api/cloud-assembly/index.d.ts +1 -1
  17. package/lib/api/cloud-assembly/index.js +3 -2
  18. package/lib/api/cloud-assembly/private/context-aware-source.js +3 -3
  19. package/lib/api/cloud-assembly/private/exec.js +3 -3
  20. package/lib/api/cloud-assembly/private/prepare-source.js +4 -4
  21. package/lib/api/cloud-assembly/private/source-builder.d.ts +10 -8
  22. package/lib/api/cloud-assembly/private/source-builder.js +36 -19
  23. package/lib/api/cloud-assembly/private/stack-assembly.js +7 -7
  24. package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
  25. package/lib/api/cloud-assembly/source-builder.js +1 -1
  26. package/lib/api/cloud-assembly/stack-collection.js +2 -2
  27. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +1 -1
  28. package/lib/api/cloudformation/evaluate-cloudformation-template.js +2 -2
  29. package/lib/api/cloudformation/stack-helpers.js +2 -2
  30. package/lib/api/cloudformation/template-body-parameter.js +2 -2
  31. package/lib/api/context.js +2 -2
  32. package/lib/api/deployments/asset-publishing.js +2 -2
  33. package/lib/api/deployments/assets.js +5 -6
  34. package/lib/api/deployments/cfn-api.js +3 -3
  35. package/lib/api/deployments/checks.js +2 -2
  36. package/lib/api/deployments/deploy-stack.js +2 -2
  37. package/lib/api/deployments/deployment-result.js +2 -2
  38. package/lib/api/deployments/deployments.js +3 -3
  39. package/lib/api/diff/diff-formatter.js +2 -2
  40. package/lib/api/environment/environment-access.js +2 -2
  41. package/lib/api/environment/environment-resources.js +2 -2
  42. package/lib/api/environment/placeholders.js +1 -1
  43. package/lib/api/garbage-collection/garbage-collector.js +2 -2
  44. package/lib/api/garbage-collection/progress-printer.js +2 -2
  45. package/lib/api/garbage-collection/stack-refresh.js +2 -2
  46. package/lib/api/hotswap/appsync-mapping-templates.js +2 -2
  47. package/lib/api/hotswap/common.js +2 -2
  48. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  49. package/lib/api/hotswap/lambda-functions.js +2 -2
  50. package/lib/api/index.d.ts +0 -1
  51. package/lib/api/index.js +1 -2
  52. package/lib/api/io/private/level-priority.js +1 -1
  53. package/lib/api/io/private/sdk-logger.d.ts +1 -1
  54. package/lib/api/io/private/sdk-logger.js +6 -6
  55. package/lib/api/io/private/span.js +1 -1
  56. package/lib/api/logs-monitor/logs-monitor.js +2 -2
  57. package/lib/api/notices/cached-data-source.d.ts +13 -0
  58. package/lib/api/notices/cached-data-source.js +77 -0
  59. package/lib/api/notices/filter.d.ts +59 -0
  60. package/lib/api/notices/filter.js +189 -0
  61. package/lib/api/notices/index.d.ts +1 -0
  62. package/lib/api/notices/index.js +18 -0
  63. package/lib/api/notices/notices.d.ts +111 -0
  64. package/lib/api/notices/notices.js +131 -0
  65. package/lib/api/notices/types.d.ts +37 -0
  66. package/lib/api/notices/types.js +3 -0
  67. package/lib/api/notices/web-data-source.d.ts +9 -0
  68. package/lib/api/notices/web-data-source.js +70 -0
  69. package/lib/api/plugin/context-provider-plugin.js +1 -1
  70. package/lib/api/plugin/plugin.d.ts +0 -2
  71. package/lib/api/plugin/plugin.js +4 -9
  72. package/lib/api/refactoring/cloudformation.d.ts +23 -0
  73. package/lib/api/refactoring/cloudformation.js +54 -1
  74. package/lib/api/refactoring/exclude.d.ts +29 -0
  75. package/lib/api/refactoring/exclude.js +94 -0
  76. package/lib/api/refactoring/index.d.ts +4 -23
  77. package/lib/api/refactoring/index.js +28 -60
  78. package/lib/api/resource-import/importer.js +2 -2
  79. package/lib/api/rwlock.js +2 -2
  80. package/lib/api/settings.js +2 -2
  81. package/lib/api/shared-private.js +31 -6186
  82. package/lib/api/toolkit-info.js +2 -2
  83. package/lib/api/work-graph/work-graph-builder.js +3 -3
  84. package/lib/api/work-graph/work-graph.js +2 -2
  85. package/lib/context-providers/ami.js +2 -2
  86. package/lib/context-providers/cc-api-provider.js +2 -2
  87. package/lib/context-providers/hosted-zones.js +2 -2
  88. package/lib/context-providers/index.js +4 -4
  89. package/lib/context-providers/keys.js +2 -2
  90. package/lib/context-providers/load-balancers.js +2 -2
  91. package/lib/context-providers/security-groups.js +2 -2
  92. package/lib/context-providers/ssm-parameters.js +2 -2
  93. package/lib/context-providers/vpcs.js +3 -3
  94. package/lib/index.d.ts +3 -1
  95. package/lib/index.js +4 -2
  96. package/lib/index_bg.wasm +0 -0
  97. package/lib/payloads/deploy.d.ts +7 -0
  98. package/lib/payloads/deploy.js +1 -1
  99. package/lib/payloads/hotswap.d.ts +1 -0
  100. package/lib/payloads/hotswap.js +1 -1
  101. package/lib/private/activity-printer/base.js +1 -1
  102. package/lib/toolkit/non-interactive-io-host.js +5 -4
  103. package/lib/toolkit/toolkit.d.ts +2 -2
  104. package/lib/toolkit/toolkit.js +40 -27
  105. package/lib/util/directories.js +2 -2
  106. package/lib/util/index.d.ts +1 -0
  107. package/lib/util/index.js +2 -1
  108. package/lib/util/json.js +1 -1
  109. package/lib/util/net.d.ts +9 -0
  110. package/lib/util/net.js +60 -0
  111. package/lib/util/objects.js +2 -2
  112. package/lib/util/types.js +1 -1
  113. package/lib/util/version-range.js +2 -2
  114. package/package.json +25 -26
  115. package/tsdoc.json +15 -0
  116. package/lib/api/notices.d.ts +0 -210
  117. package/lib/api/notices.js +0 -430
  118. package/lib/api/shared-private.js.map +0 -7
  119. package/lib/api/shared-public.d.ts +0 -2139
  120. package/lib/api/shared-public.js +0 -3272
  121. package/lib/api/shared-public.js.map +0 -7
  122. package/lib/private/util.d.ts +0 -1
  123. package/lib/private/util.js +0 -787
  124. package/lib/private/util.js.map +0 -7
  125. /package/lib/{api → toolkit}/toolkit-error.d.ts +0 -0
  126. /package/lib/{api → toolkit}/toolkit-error.js +0 -0
@@ -4,4 +4,4 @@ exports.isContextProviderPlugin = isContextProviderPlugin;
4
4
  function isContextProviderPlugin(x) {
5
5
  return typeof x === 'object' && !!x && !!x.getValue;
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1wcm92aWRlci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250ZXh0LXByb3ZpZGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDBEQUVDO0FBRkQsU0FBZ0IsdUJBQXVCLENBQUMsQ0FBVTtJQUNoRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFTLENBQUMsUUFBUSxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXJQbHVnaW4oeDogdW5rbm93bik6IHggaXMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAhIXggJiYgISEoeCBhcyBhbnkpLmdldFZhbHVlO1xufVxuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1wcm92aWRlci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250ZXh0LXByb3ZpZGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDBEQUVDO0FBRkQsU0FBZ0IsdUJBQXVCLENBQUMsQ0FBVTtJQUNoRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFTLENBQUMsUUFBUSxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGdldFZhbHVlKGFyZ3M6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBQcm9taXNlPGFueT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlclBsdWdpbih4OiB1bmtub3duKTogeCBpcyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmICEheCAmJiAhISh4IGFzIGFueSkuZ2V0VmFsdWU7XG59XG4iXX0=
@@ -1,8 +1,6 @@
1
1
  import type { CredentialProviderSource, IPluginHost } from '@aws-cdk/cli-plugin-contract';
2
2
  import { type ContextProviderPlugin } from './context-provider-plugin';
3
3
  import type { IIoHost } from '../io';
4
- export declare let TESTING: boolean;
5
- export declare function markTesting(): void;
6
4
  /**
7
5
  * Class to manage a plugin collection
8
6
  *
@@ -1,15 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PluginHost = exports.TESTING = void 0;
4
- exports.markTesting = markTesting;
3
+ exports.PluginHost = void 0;
5
4
  const util_1 = require("util");
6
5
  const context_provider_plugin_1 = require("./context-provider-plugin");
7
- const private_1 = require("../private");
8
- const toolkit_error_1 = require("../toolkit-error");
9
- exports.TESTING = false;
10
- function markTesting() {
11
- exports.TESTING = true;
12
- }
6
+ const toolkit_error_1 = require("../../toolkit/toolkit-error");
7
+ const private_1 = require("../io/private");
13
8
  /**
14
9
  * Class to manage a plugin collection
15
10
  *
@@ -129,4 +124,4 @@ class PluginHost {
129
124
  }
130
125
  }
131
126
  exports.PluginHost = PluginHost;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLGtDQUVDO0FBWEQsK0JBQStCO0FBRS9CLHVFQUFnRztBQUVoRyx3Q0FBeUQ7QUFDekQsb0RBQWdEO0FBRXJDLFFBQUEsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUUzQixTQUFnQixXQUFXO0lBQ3pCLGVBQU8sR0FBRyxJQUFJLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7O09BR0c7SUFDYSx5QkFBeUIsR0FBRyxJQUFJLEtBQUssRUFBNEIsQ0FBQztJQUVsRSxzQkFBc0IsR0FBMEMsRUFBRSxDQUFDO0lBRTVFLE1BQU0sQ0FBVztJQUVQLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRW5EOzs7Ozs7Ozs7T0FTRztJQUNJLElBQUksQ0FBQyxVQUFrQixFQUFFLE1BQWdCO1FBQzlDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLDJCQUFpQixDQUFDLGtCQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxTQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdEgsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQiwrRUFBK0U7WUFDL0UseUVBQXlFO1lBQ3pFLGdGQUFnRjtZQUNoRix3RUFBd0U7WUFDeEUsTUFBTSxJQUFJLDRCQUFZLENBQUMsa0RBQWtELFVBQVUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU87WUFDVCxDQUFDO1lBRUQsMERBQTBEO1lBQzFELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksNEJBQVksQ0FBQyxVQUFVLFFBQVEseURBQXlELENBQUMsQ0FBQztZQUN0RyxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sNEJBQVksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFNO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQ0FBZ0MsQ0FBQyxNQUFnQztRQUN0RSx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0ErQkc7SUFDSSw0QkFBNEIsQ0FBQyxrQkFBMEIsRUFBRSxRQUErQjtRQUM3RixJQUFJLENBQUMsSUFBQSxpREFBdUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSw0QkFBWSxDQUFDLGtFQUFrRSxJQUFBLGNBQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUF0SEQsZ0NBc0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UsIElQbHVnaW5Ib3N0LCBQbHVnaW4gfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB7IHR5cGUgQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBpc0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci1wbHVnaW4nO1xuaW1wb3J0IHR5cGUgeyBJSW9Ib3N0IH0gZnJvbSAnLi4vaW8nO1xuaW1wb3J0IHsgSW9EZWZhdWx0TWVzc2FnZXMsIElvSGVscGVyIH0gZnJvbSAnLi4vcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGxldCBURVNUSU5HID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrVGVzdGluZygpIHtcbiAgVEVTVElORyA9IHRydWU7XG59XG5cbi8qKlxuICogQ2xhc3MgdG8gbWFuYWdlIGEgcGx1Z2luIGNvbGxlY3Rpb25cbiAqXG4gKiBJdCBwcm92aWRlcyBhIGBsb2FkKClgIGZ1bmN0aW9uIHRoYXQgbG9hZHMgYSBKYXZhU2NyaXB0XG4gKiBtb2R1bGUgZnJvbSBkaXNrLCBhbmQgZ2l2ZXMgaXQgYWNjZXNzIHRvIHRoZSBgSVBsdWdpbkhvc3RgIGludGVyZmFjZVxuICogdG8gcmVnaXN0ZXIgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luSG9zdCBpbXBsZW1lbnRzIElQbHVnaW5Ib3N0IHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy4gTmV3IHNvdXJjZXMgY2FuXG4gICAqIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlICtyZWdpc3RlckNyZWRlbnRpYWxQcm92aWRlclNvdXJjZSsgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMgPSBuZXcgQXJyYXk8Q3JlZGVudGlhbFByb3ZpZGVyU291cmNlPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0UHJvdmlkZXJQbHVnaW5zOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0UHJvdmlkZXJQbHVnaW4+ID0ge307XG5cbiAgcHVibGljIGlvSG9zdD86IElJb0hvc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbHJlYWR5TG9hZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgcGx1Zy1pbiBpbnRvIHRoaXMgUGx1Z2luSG9zdC5cbiAgICpcbiAgICogV2lsbCB1c2UgYHJlcXVpcmUucmVzb2x2ZSgpYCB0byBnZXQgdGhlIG1vc3QgYWNjdXJhdGUgcmVwcmVzZW50YXRpb24gb2Ygd2hhdFxuICAgKiBjb2RlIHdpbGwgZ2V0IGxvYWRlZCBpbiBlcnJvciBtZXNzYWdlcy4gQXMgc3VjaCwgaXQgd2lsbCBub3Qgd29yayBpblxuICAgKiB1bml0IHRlc3RzIHdpdGggSmVzdCB2aXJ0dWFsIG1vZHVsZXMgYmVjYXVhc2Ugb2YgPGh0dHBzOi8vZ2l0aHViLmNvbS9qZXN0anMvamVzdC9pc3N1ZXMvOTU0Mz4uXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVTcGVjIHRoZSBzcGVjaWZpY2F0aW9uIChwYXRoIG9yIG5hbWUpIG9mIHRoZSBwbHVnLWluIG1vZHVsZSB0byBiZSBsb2FkZWQuXG4gICAqIEBwYXJhbSBpb0hvc3QgdGhlIEkvTyBob3N0IHRvIHVzZSBmb3IgcHJpbnRpbmcgcHJvZ3Jlc3MgaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBsb2FkKG1vZHVsZVNwZWM6IHN0cmluZywgaW9Ib3N0PzogSUlvSG9zdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlcXVpcmUucmVzb2x2ZShtb2R1bGVTcGVjKTtcbiAgICAgIGlmIChpb0hvc3QpIHtcbiAgICAgICAgbmV3IElvRGVmYXVsdE1lc3NhZ2VzKElvSGVscGVyLmZyb21Jb0hvc3QoaW9Ib3N0LCAnaW5pdCcpKS5kZWJ1ZyhgTG9hZGluZyBwbHVnLWluOiAke3Jlc29sdmVkfSBmcm9tICR7bW9kdWxlU3BlY31gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9kb0xvYWQocmVzb2x2ZWQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gYWNjb3JkaW5nIHRvIE5vZGUuanMgZG9jcyBgTU9EVUxFX05PVF9GT1VORGAgaXMgdGhlIG9ubHkgcG9zc2libGUgZXJyb3IgaGVyZVxuICAgICAgLy8gQHNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL21vZHVsZXMuaHRtbCNyZXF1aXJlcmVzb2x2ZXJlcXVlc3Qtb3B0aW9uc1xuICAgICAgLy8gTm90IHVzaW5nIGB3aXRoQ2F1c2UoKWAgaGVyZSwgc2luY2UgdGhlIG5vZGUgZXJyb3IgY29udGFpbnMgYSBcIlJlcXVpcmUgU3RhY2tcIlxuICAgICAgLy8gYXMgcGFydCBvZiB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IGlzIGluaGVyZW50bHkgdXNlbGVzcyB0byBvdXIgdXNlcnMuXG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBwbHVnLWluOiBDYW5ub3QgZmluZCBtb2R1bGUgJyR7bW9kdWxlU3BlY30nOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERvIHRoZSBsb2FkaW5nIGdpdmVuIGFuIGFscmVhZHktcmVzb2x2ZWQgbW9kdWxlIG5hbWVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2RvTG9hZChyZXNvbHZlZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmFscmVhZHlMb2FkZWQuaGFzKHJlc29sdmVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgIGNvbnN0IHBsdWdpbiA9IHJlcXVpcmUocmVzb2x2ZWQpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgaWYgKCFpc1BsdWdpbihwbHVnaW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE1vZHVsZSAke3Jlc29sdmVkfSBpcyBub3QgYSB2YWxpZCBwbHVnLWluLCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbi5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwbHVnaW4uaW5pdCkge1xuICAgICAgICBwbHVnaW4uaW5pdCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbHJlYWR5TG9hZGVkLmFkZChyZXNvbHZlZCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBUb29sa2l0RXJyb3Iud2l0aENhdXNlKGBVbmFibGUgdG8gbG9hZCBwbHVnLWluICcke3Jlc29sdmVkfSdgLCBlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1BsdWdpbih4OiBhbnkpOiB4IGlzIFBsdWdpbiB7XG4gICAgICByZXR1cm4geCAhPSBudWxsICYmIHgudmVyc2lvbiA9PT0gJzEnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgcGx1Zy1pbnMgdG8gcmVnaXN0ZXIgbmV3IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2UgYSBuZXcgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlIHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKHNvdXJjZTogQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKSB7XG4gICAgLy8gRm9yd2FyZCB0byB0aGUgcmlnaHQgY3JlZGVudGlhbHMtcmVsYXRlZCBwbHVnaW4gaG9zdFxuICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogKEVYUEVSSU1FTlRBTCkgQWxsb3cgcGx1Z2lucyB0byByZWdpc3RlciBjb250ZXh0IHByb3ZpZGVyc1xuICAgKlxuICAgKiBDb250ZXh0IHByb3ZpZGVycyBhcmUgb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAgIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICAgKiBgYGBcbiAgICpcbiAgICogQ3VycmVudGx5LCB0aGV5IGNhbm5vdCByZXVzZSB0aGUgQ0RLJ3MgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcywgc28gdGhleVxuICAgKiBtdXN0IGJlIHByZXBhcmVkIHRvIGVpdGhlciBub3QgbWFrZSBBV1MgY2FsbHMgb3IgdXNlIHRoZWlyIG93biBzb3VyY2Ugb2ZcbiAgICogQVdTIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBhbmQgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGludGVybmFsbHkgYXQgQW1hem9uXG4gICAqIGFzIGEgdHJpYWwuXG4gICAqXG4gICAqIEFmdGVyIHJlZ2lzdGVyaW5nIHdpdGggJ215LXBsdWdpbi1uYW1lJywgdGhlIHByb3ZpZGVyIG11c3QgYmUgYWRkcmVzc2VkIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IHZhbHVlID0gQ29udGV4dFByb3ZpZGVyLmdldFZhbHVlKHRoaXMsIHtcbiAgICogICBwcm92aWRlck5hbWU6ICdwbHVnaW4nLFxuICAgKiAgIHByb3BzOiB7XG4gICAqICAgICBwbHVnaW5OYW1lOiAnbXktcGx1Z2luLW5hbWUnLFxuICAgKiAgICAgbXlQYXJhbWV0ZXIxOiAneHl6JyxcbiAgICogICB9LFxuICAgKiAgIGluY2x1ZGVFbnZpcm9ubWVudDogdHJ1ZSB8IGZhbHNlLFxuICAgKiAgIGR1bW15VmFsdWU6ICd3aGF0LXRvLXJldHVybi1vbi10aGUtZmlyc3QtcGFzcycsXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYShwbHVnaW5Qcm92aWRlck5hbWU6IHN0cmluZywgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlclBsdWdpbikge1xuICAgIGlmICghaXNDb250ZXh0UHJvdmlkZXJQbHVnaW4ocHJvdmlkZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBPYmplY3QgeW91IGdhdmUgbWUgZG9lcyBub3QgbG9vayBsaWtlIGEgQ29udGV4dFByb3ZpZGVyUGx1Z2luOiAke2luc3BlY3QocHJvdmlkZXIpfWApO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHRQcm92aWRlclBsdWdpbnNbcGx1Z2luUHJvdmlkZXJOYW1lXSA9IHByb3ZpZGVyO1xuICB9XG59XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQix1RUFBZ0c7QUFDaEcsK0RBQTJEO0FBRTNELDJDQUE0RDtBQUU1RDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7OztPQUdHO0lBQ2EseUJBQXlCLEdBQUcsSUFBSSxLQUFLLEVBQTRCLENBQUM7SUFFbEUsc0JBQXNCLEdBQTBDLEVBQUUsQ0FBQztJQUU1RSxNQUFNLENBQVc7SUFFUCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVuRDs7Ozs7Ozs7O09BU0c7SUFDSSxJQUFJLENBQUMsVUFBa0IsRUFBRSxNQUFnQjtRQUM5QyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSwyQkFBaUIsQ0FBQyxrQkFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLFFBQVEsU0FBUyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3RILENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsK0VBQStFO1lBQy9FLHlFQUF5RTtZQUN6RSxnRkFBZ0Y7WUFDaEYsd0VBQXdFO1lBQ3hFLE1BQU0sSUFBSSw0QkFBWSxDQUFDLGtEQUFrRCxVQUFVLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUVELDBEQUEwRDtZQUMxRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLDRCQUFZLENBQUMsVUFBVSxRQUFRLHlEQUF5RCxDQUFDLENBQUM7WUFDdEcsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLDRCQUFZLENBQUMsU0FBUyxDQUFDLDJCQUEyQixRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtZQUN0QixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0NBQWdDLENBQUMsTUFBZ0M7UUFDdEUsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BK0JHO0lBQ0ksNEJBQTRCLENBQUMsa0JBQTBCLEVBQUUsUUFBK0I7UUFDN0YsSUFBSSxDQUFDLElBQUEsaURBQXVCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksNEJBQVksQ0FBQyxrRUFBa0UsSUFBQSxjQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDN0QsQ0FBQztDQUNGO0FBdEhELGdDQXNIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlLCBJUGx1Z2luSG9zdCwgUGx1Z2luIH0gZnJvbSAnQGF3cy1jZGsvY2xpLXBsdWdpbi1jb250cmFjdCc7XG5pbXBvcnQgeyB0eXBlIENvbnRleHRQcm92aWRlclBsdWdpbiwgaXNDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXItcGx1Z2luJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IElJb0hvc3QgfSBmcm9tICcuLi9pbyc7XG5pbXBvcnQgeyBJb0RlZmF1bHRNZXNzYWdlcywgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuLyoqXG4gKiBDbGFzcyB0byBtYW5hZ2UgYSBwbHVnaW4gY29sbGVjdGlvblxuICpcbiAqIEl0IHByb3ZpZGVzIGEgYGxvYWQoKWAgZnVuY3Rpb24gdGhhdCBsb2FkcyBhIEphdmFTY3JpcHRcbiAqIG1vZHVsZSBmcm9tIGRpc2ssIGFuZCBnaXZlcyBpdCBhY2Nlc3MgdG8gdGhlIGBJUGx1Z2luSG9zdGAgaW50ZXJmYWNlXG4gKiB0byByZWdpc3RlciBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Ib3N0IGltcGxlbWVudHMgSVBsdWdpbkhvc3Qge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzLiBOZXcgc291cmNlcyBjYW5cbiAgICogYmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgK3JlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcyA9IG5ldyBBcnJheTxDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2U+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRQcm92aWRlclBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIENvbnRleHRQcm92aWRlclBsdWdpbj4gPSB7fTtcblxuICBwdWJsaWMgaW9Ib3N0PzogSUlvSG9zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFscmVhZHlMb2FkZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwbHVnLWluIGludG8gdGhpcyBQbHVnaW5Ib3N0LlxuICAgKlxuICAgKiBXaWxsIHVzZSBgcmVxdWlyZS5yZXNvbHZlKClgIHRvIGdldCB0aGUgbW9zdCBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbiBvZiB3aGF0XG4gICAqIGNvZGUgd2lsbCBnZXQgbG9hZGVkIGluIGVycm9yIG1lc3NhZ2VzLiBBcyBzdWNoLCBpdCB3aWxsIG5vdCB3b3JrIGluXG4gICAqIHVuaXQgdGVzdHMgd2l0aCBKZXN0IHZpcnR1YWwgbW9kdWxlcyBiZWNhdWFzZSBvZiA8aHR0cHM6Ly9naXRodWIuY29tL2plc3Rqcy9qZXN0L2lzc3Vlcy85NTQzPi5cbiAgICpcbiAgICogQHBhcmFtIG1vZHVsZVNwZWMgdGhlIHNwZWNpZmljYXRpb24gKHBhdGggb3IgbmFtZSkgb2YgdGhlIHBsdWctaW4gbW9kdWxlIHRvIGJlIGxvYWRlZC5cbiAgICogQHBhcmFtIGlvSG9zdCB0aGUgSS9PIGhvc3QgdG8gdXNlIGZvciBwcmludGluZyBwcm9ncmVzcyBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIGxvYWQobW9kdWxlU3BlYzogc3RyaW5nLCBpb0hvc3Q/OiBJSW9Ib3N0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVxdWlyZS5yZXNvbHZlKG1vZHVsZVNwZWMpO1xuICAgICAgaWYgKGlvSG9zdCkge1xuICAgICAgICBuZXcgSW9EZWZhdWx0TWVzc2FnZXMoSW9IZWxwZXIuZnJvbUlvSG9zdChpb0hvc3QsICdpbml0JykpLmRlYnVnKGBMb2FkaW5nIHBsdWctaW46ICR7cmVzb2x2ZWR9IGZyb20gJHttb2R1bGVTcGVjfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2RvTG9hZChyZXNvbHZlZCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBhY2NvcmRpbmcgdG8gTm9kZS5qcyBkb2NzIGBNT0RVTEVfTk9UX0ZPVU5EYCBpcyB0aGUgb25seSBwb3NzaWJsZSBlcnJvciBoZXJlXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI3JlcXVpcmVyZXNvbHZlcmVxdWVzdC1vcHRpb25zXG4gICAgICAvLyBOb3QgdXNpbmcgYHdpdGhDYXVzZSgpYCBoZXJlLCBzaW5jZSB0aGUgbm9kZSBlcnJvciBjb250YWlucyBhIFwiUmVxdWlyZSBTdGFja1wiXG4gICAgICAvLyBhcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgaXMgaW5oZXJlbnRseSB1c2VsZXNzIHRvIG91ciB1c2Vycy5cbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIHBsdWctaW46IENhbm5vdCBmaW5kIG1vZHVsZSAnJHttb2R1bGVTcGVjfSc6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG8gdGhlIGxvYWRpbmcgZ2l2ZW4gYW4gYWxyZWFkeS1yZXNvbHZlZCBtb2R1bGUgbmFtZVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfZG9Mb2FkKHJlc29sdmVkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuYWxyZWFkeUxvYWRlZC5oYXMocmVzb2x2ZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShyZXNvbHZlZCk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICBpZiAoIWlzUGx1Z2luKHBsdWdpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgTW9kdWxlICR7cmVzb2x2ZWR9IGlzIG5vdCBhIHZhbGlkIHBsdWctaW4sIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uLmApO1xuICAgICAgfVxuICAgICAgaWYgKHBsdWdpbi5pbml0KSB7XG4gICAgICAgIHBsdWdpbi5pbml0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFscmVhZHlMb2FkZWQuYWRkKHJlc29sdmVkKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IFRvb2xraXRFcnJvci53aXRoQ2F1c2UoYFVuYWJsZSB0byBsb2FkIHBsdWctaW4gJyR7cmVzb2x2ZWR9J2AsIGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGx1Z2luKHg6IGFueSk6IHggaXMgUGx1Z2luIHtcbiAgICAgIHJldHVybiB4ICE9IG51bGwgJiYgeC52ZXJzaW9uID09PSAnMSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBwbHVnLWlucyB0byByZWdpc3RlciBuZXcgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSBhIG5ldyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2Uoc291cmNlOiBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UpIHtcbiAgICAvLyBGb3J3YXJkIHRvIHRoZSByaWdodCBjcmVkZW50aWFscy1yZWxhdGVkIHBsdWdpbiBob3N0XG4gICAgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzLnB1c2goc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAoRVhQRVJJTUVOVEFMKSBBbGxvdyBwbHVnaW5zIHRvIHJlZ2lzdGVyIGNvbnRleHQgcHJvdmlkZXJzXG4gICAqXG4gICAqIENvbnRleHQgcHJvdmlkZXJzIGFyZSBvYmplY3RzIHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2Q6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqICAgZ2V0VmFsdWUoYXJnczoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT47XG4gICAqIGBgYFxuICAgKlxuICAgKiBDdXJyZW50bHksIHRoZXkgY2Fubm90IHJldXNlIHRoZSBDREsncyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLCBzbyB0aGV5XG4gICAqIG11c3QgYmUgcHJlcGFyZWQgdG8gZWl0aGVyIG5vdCBtYWtlIEFXUyBjYWxscyBvciB1c2UgdGhlaXIgb3duIHNvdXJjZSBvZlxuICAgKiBBV1MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltZW50YWwsIGFuZCBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgaW50ZXJuYWxseSBhdCBBbWF6b25cbiAgICogYXMgYSB0cmlhbC5cbiAgICpcbiAgICogQWZ0ZXIgcmVnaXN0ZXJpbmcgd2l0aCAnbXktcGx1Z2luLW5hbWUnLCB0aGUgcHJvdmlkZXIgbXVzdCBiZSBhZGRyZXNzZWQgYXMgZm9sbG93czpcbiAgICpcbiAgICogYGBgdHNcbiAgICogY29uc3QgdmFsdWUgPSBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUodGhpcywge1xuICAgKiAgIHByb3ZpZGVyTmFtZTogJ3BsdWdpbicsXG4gICAqICAgcHJvcHM6IHtcbiAgICogICAgIHBsdWdpbk5hbWU6ICdteS1wbHVnaW4tbmFtZScsXG4gICAqICAgICBteVBhcmFtZXRlcjE6ICd4eXonLFxuICAgKiAgIH0sXG4gICAqICAgaW5jbHVkZUVudmlyb25tZW50OiB0cnVlIHwgZmFsc2UsXG4gICAqICAgZHVtbXlWYWx1ZTogJ3doYXQtdG8tcmV0dXJuLW9uLXRoZS1maXJzdC1wYXNzJyxcbiAgICogfSlcbiAgICogYGBgXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckNvbnRleHRQcm92aWRlckFscGhhKHBsdWdpblByb3ZpZGVyTmFtZTogc3RyaW5nLCBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyUGx1Z2luKSB7XG4gICAgaWYgKCFpc0NvbnRleHRQcm92aWRlclBsdWdpbihwcm92aWRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE9iamVjdCB5b3UgZ2F2ZSBtZSBkb2VzIG5vdCBsb29rIGxpa2UgYSBDb250ZXh0UHJvdmlkZXJQbHVnaW46ICR7aW5zcGVjdChwcm92aWRlcil9YCk7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dFByb3ZpZGVyUGx1Z2luc1twbHVnaW5Qcm92aWRlck5hbWVdID0gcHJvdmlkZXI7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import type { TypedMapping } from '@aws-cdk/cloudformation-diff';
1
2
  import type * as cxapi from '@aws-cdk/cx-api';
2
3
  export interface CloudFormationTemplate {
3
4
  Resources?: {
@@ -13,3 +14,25 @@ export interface CloudFormationStack {
13
14
  readonly stackName: string;
14
15
  readonly template: CloudFormationTemplate;
15
16
  }
17
+ /**
18
+ * This class mirrors the `ResourceLocation` interface from CloudFormation,
19
+ * but is richer, since it has a reference to the stack object, rather than
20
+ * merely the stack name.
21
+ */
22
+ export declare class ResourceLocation {
23
+ readonly stack: CloudFormationStack;
24
+ readonly logicalResourceId: string;
25
+ constructor(stack: CloudFormationStack, logicalResourceId: string);
26
+ toPath(): string;
27
+ getType(): string;
28
+ equalTo(other: ResourceLocation): boolean;
29
+ }
30
+ /**
31
+ * A mapping between a source and a destination location.
32
+ */
33
+ export declare class ResourceMapping {
34
+ readonly source: ResourceLocation;
35
+ readonly destination: ResourceLocation;
36
+ constructor(source: ResourceLocation, destination: ResourceLocation);
37
+ toTypedMapping(): TypedMapping;
38
+ }
@@ -1,3 +1,56 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uVGVtcGxhdGUge1xuICBSZXNvdXJjZXM/OiB7XG4gICAgW2xvZ2ljYWxJZDogc3RyaW5nXToge1xuICAgICAgVHlwZTogc3RyaW5nO1xuICAgICAgUHJvcGVydGllcz86IGFueTtcbiAgICAgIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uU3RhY2sge1xuICByZWFkb25seSBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZW1wbGF0ZTogQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZTtcbn1cbiJdfQ==
3
+ exports.ResourceMapping = exports.ResourceLocation = void 0;
4
+ /**
5
+ * This class mirrors the `ResourceLocation` interface from CloudFormation,
6
+ * but is richer, since it has a reference to the stack object, rather than
7
+ * merely the stack name.
8
+ */
9
+ class ResourceLocation {
10
+ stack;
11
+ logicalResourceId;
12
+ constructor(stack, logicalResourceId) {
13
+ this.stack = stack;
14
+ this.logicalResourceId = logicalResourceId;
15
+ }
16
+ toPath() {
17
+ const stack = this.stack;
18
+ const resource = stack.template.Resources?.[this.logicalResourceId];
19
+ const result = resource?.Metadata?.['aws:cdk:path'];
20
+ if (result != null) {
21
+ return result;
22
+ }
23
+ // If the path is not available, we can use stack name and logical ID
24
+ return `${stack.stackName}.${this.logicalResourceId}`;
25
+ }
26
+ getType() {
27
+ const resource = this.stack.template.Resources?.[this.logicalResourceId ?? ''];
28
+ return resource?.Type ?? 'Unknown';
29
+ }
30
+ equalTo(other) {
31
+ return this.logicalResourceId === other.logicalResourceId && this.stack.stackName === other.stack.stackName;
32
+ }
33
+ }
34
+ exports.ResourceLocation = ResourceLocation;
35
+ /**
36
+ * A mapping between a source and a destination location.
37
+ */
38
+ class ResourceMapping {
39
+ source;
40
+ destination;
41
+ constructor(source, destination) {
42
+ this.source = source;
43
+ this.destination = destination;
44
+ }
45
+ toTypedMapping() {
46
+ return {
47
+ // the type is the same in both source and destination,
48
+ // so we can use either one
49
+ type: this.source.getType(),
50
+ sourcePath: this.source.toPath(),
51
+ destinationPath: this.destination.toPath(),
52
+ };
53
+ }
54
+ }
55
+ exports.ResourceMapping = ResourceMapping;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtQkE7Ozs7R0FJRztBQUNILE1BQWEsZ0JBQWdCO0lBQ0M7SUFBNEM7SUFBeEUsWUFBNEIsS0FBMEIsRUFBa0IsaUJBQXlCO1FBQXJFLFVBQUssR0FBTCxLQUFLLENBQXFCO1FBQWtCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtJQUNqRyxDQUFDO0lBRU0sTUFBTTtRQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFcEQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELHFFQUFxRTtRQUNyRSxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sT0FBTztRQUNaLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLFFBQVEsRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBdUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzlHLENBQUM7Q0FDRjtBQXpCRCw0Q0F5QkM7QUFFRDs7R0FFRztBQUNILE1BQWEsZUFBZTtJQUNFO0lBQTBDO0lBQXRFLFlBQTRCLE1BQXdCLEVBQWtCLFdBQTZCO1FBQXZFLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQWtCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUNuRyxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPO1lBQ0wsdURBQXVEO1lBQ3ZELDJCQUEyQjtZQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtTQUMzQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBYkQsMENBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGVkTWFwcGluZyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uVGVtcGxhdGUge1xuICBSZXNvdXJjZXM/OiB7XG4gICAgW2xvZ2ljYWxJZDogc3RyaW5nXToge1xuICAgICAgVHlwZTogc3RyaW5nO1xuICAgICAgUHJvcGVydGllcz86IGFueTtcbiAgICAgIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uU3RhY2sge1xuICByZWFkb25seSBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZW1wbGF0ZTogQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1pcnJvcnMgdGhlIGBSZXNvdXJjZUxvY2F0aW9uYCBpbnRlcmZhY2UgZnJvbSBDbG91ZEZvcm1hdGlvbixcbiAqIGJ1dCBpcyByaWNoZXIsIHNpbmNlIGl0IGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgc3RhY2sgb2JqZWN0LCByYXRoZXIgdGhhblxuICogbWVyZWx5IHRoZSBzdGFjayBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VMb2NhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjaywgcHVibGljIHJlYWRvbmx5IGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgfVxuXG4gIHB1YmxpYyB0b1BhdGgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXM/Llt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICBjb25zdCByZXN1bHQgPSByZXNvdXJjZT8uTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG5cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHBhdGggaXMgbm90IGF2YWlsYWJsZSwgd2UgY2FuIHVzZSBzdGFjayBuYW1lIGFuZCBsb2dpY2FsIElEXG4gICAgcmV0dXJuIGAke3N0YWNrLnN0YWNrTmFtZX0uJHt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXM/Llt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnXTtcbiAgICByZXR1cm4gcmVzb3VyY2U/LlR5cGUgPz8gJ1Vua25vd24nO1xuICB9XG5cbiAgcHVibGljIGVxdWFsVG8ob3RoZXI6IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpY2FsUmVzb3VyY2VJZCA9PT0gb3RoZXIubG9naWNhbFJlc291cmNlSWQgJiYgdGhpcy5zdGFjay5zdGFja05hbWUgPT09IG90aGVyLnN0YWNrLnN0YWNrTmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbWFwcGluZyBiZXR3ZWVuIGEgc291cmNlIGFuZCBhIGRlc3RpbmF0aW9uIGxvY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYXBwaW5nIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNvdXJjZTogUmVzb3VyY2VMb2NhdGlvbiwgcHVibGljIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKSB7XG4gIH1cblxuICBwdWJsaWMgdG9UeXBlZE1hcHBpbmcoKTogVHlwZWRNYXBwaW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gdGhlIHR5cGUgaXMgdGhlIHNhbWUgaW4gYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLFxuICAgICAgLy8gc28gd2UgY2FuIHVzZSBlaXRoZXIgb25lXG4gICAgICB0eXBlOiB0aGlzLnNvdXJjZS5nZXRUeXBlKCksXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZS50b1BhdGgoKSxcbiAgICAgIGRlc3RpbmF0aW9uUGF0aDogdGhpcy5kZXN0aW5hdGlvbi50b1BhdGgoKSxcbiAgICB9O1xuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import type { AssemblyManifest } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { ResourceLocation } from './cloudformation';
3
+ export interface ExcludeList {
4
+ isExcluded(location: ResourceLocation): boolean;
5
+ }
6
+ export declare class ManifestExcludeList implements ExcludeList {
7
+ private readonly excludedLocations;
8
+ constructor(manifest: AssemblyManifest);
9
+ private getExcludedLocations;
10
+ isExcluded(location: ResourceLocation): boolean;
11
+ }
12
+ export declare class InMemoryExcludeList implements ExcludeList {
13
+ private readonly excludedLocations;
14
+ private readonly excludedPaths;
15
+ constructor(items: string[]);
16
+ isExcluded(location: ResourceLocation): boolean;
17
+ }
18
+ export declare class UnionExcludeList implements ExcludeList {
19
+ private readonly excludeLists;
20
+ constructor(excludeLists: ExcludeList[]);
21
+ isExcluded(location: ResourceLocation): boolean;
22
+ }
23
+ export declare class NeverExclude implements ExcludeList {
24
+ isExcluded(_location: ResourceLocation): boolean;
25
+ }
26
+ export declare class AlwaysExclude implements ExcludeList {
27
+ isExcluded(_location: ResourceLocation): boolean;
28
+ }
29
+ export declare function fromManifestAndExclusionList(manifest: AssemblyManifest, exclude?: string[]): ExcludeList;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlwaysExclude = exports.NeverExclude = exports.UnionExcludeList = exports.InMemoryExcludeList = exports.ManifestExcludeList = void 0;
4
+ exports.fromManifestAndExclusionList = fromManifestAndExclusionList;
5
+ const cloud_assembly_schema_1 = require("@aws-cdk/cloud-assembly-schema");
6
+ class ManifestExcludeList {
7
+ excludedLocations;
8
+ constructor(manifest) {
9
+ this.excludedLocations = this.getExcludedLocations(manifest);
10
+ }
11
+ getExcludedLocations(asmManifest) {
12
+ // First, we need to filter the artifacts to only include CloudFormation stacks
13
+ const stackManifests = Object.entries(asmManifest.artifacts ?? {}).filter(([_, manifest]) => manifest.type === cloud_assembly_schema_1.ArtifactType.AWS_CLOUDFORMATION_STACK);
14
+ const result = [];
15
+ for (let [stackName, manifest] of stackManifests) {
16
+ const locations = Object.values(manifest.metadata ?? {})
17
+ // Then pick only the resources in each stack marked with DO_NOT_REFACTOR
18
+ .filter((entries) => entries.some((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.DO_NOT_REFACTOR && entry.data === true))
19
+ // Finally, get the logical ID of each resource
20
+ .map((entries) => {
21
+ const logicalIdEntry = entries.find((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.LOGICAL_ID);
22
+ const location = {
23
+ StackName: stackName,
24
+ LogicalResourceId: logicalIdEntry.data,
25
+ };
26
+ return location;
27
+ });
28
+ result.push(...locations);
29
+ }
30
+ return result;
31
+ }
32
+ isExcluded(location) {
33
+ return this.excludedLocations.some((loc) => loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId);
34
+ }
35
+ }
36
+ exports.ManifestExcludeList = ManifestExcludeList;
37
+ class InMemoryExcludeList {
38
+ excludedLocations;
39
+ excludedPaths;
40
+ constructor(items) {
41
+ this.excludedLocations = [];
42
+ this.excludedPaths = [];
43
+ if (items.length === 0) {
44
+ return;
45
+ }
46
+ const locationRegex = /^[A-Za-z0-9]+\.[A-Za-z0-9]+$/;
47
+ items.forEach((item) => {
48
+ if (locationRegex.test(item)) {
49
+ const [stackName, logicalId] = item.split('.');
50
+ this.excludedLocations.push({
51
+ StackName: stackName,
52
+ LogicalResourceId: logicalId,
53
+ });
54
+ }
55
+ else {
56
+ this.excludedPaths.push(item);
57
+ }
58
+ });
59
+ }
60
+ isExcluded(location) {
61
+ const containsLocation = this.excludedLocations.some((loc) => {
62
+ return loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId;
63
+ });
64
+ const containsPath = this.excludedPaths.some((path) => location.toPath() === path);
65
+ return containsLocation || containsPath;
66
+ }
67
+ }
68
+ exports.InMemoryExcludeList = InMemoryExcludeList;
69
+ class UnionExcludeList {
70
+ excludeLists;
71
+ constructor(excludeLists) {
72
+ this.excludeLists = excludeLists;
73
+ }
74
+ isExcluded(location) {
75
+ return this.excludeLists.some((excludeList) => excludeList.isExcluded(location));
76
+ }
77
+ }
78
+ exports.UnionExcludeList = UnionExcludeList;
79
+ class NeverExclude {
80
+ isExcluded(_location) {
81
+ return false;
82
+ }
83
+ }
84
+ exports.NeverExclude = NeverExclude;
85
+ class AlwaysExclude {
86
+ isExcluded(_location) {
87
+ return true;
88
+ }
89
+ }
90
+ exports.AlwaysExclude = AlwaysExclude;
91
+ function fromManifestAndExclusionList(manifest, exclude) {
92
+ return new UnionExcludeList([new ManifestExcludeList(manifest), new InMemoryExcludeList(exclude ?? [])]);
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNEdBLG9FQUVDO0FBN0dELDBFQUF5RjtBQVF6RixNQUFhLG1CQUFtQjtJQUNiLGlCQUFpQixDQUF3QjtJQUUxRCxZQUFZLFFBQTBCO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQTZCO1FBQ3hELCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLENBQzNFLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN0RCx5RUFBeUU7aUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaURBQXlCLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQ3pHO2dCQUNELCtDQUErQztpQkFDOUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUks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LENBQUMsU0FBMkI7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFKRCxvQ0FJQztBQUVELE1BQWEsYUFBYTtJQUN4QixVQUFVLENBQUMsU0FBMkI7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFKRCxzQ0FJQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLFFBQTBCLEVBQUUsT0FBa0I7SUFDekYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLG1CQUFtQixDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXNzZW1ibHlNYW5pZmVzdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLCBBcnRpZmFjdFR5cGUgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIGFzIENmblJlc291cmNlTG9jYXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RXhjbHVkZUxpc3QgaW1wbGVtZW50cyBFeGNsdWRlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWRMb2NhdGlvbnM6IENmblJlc291cmNlTG9jYXRpb25bXTtcblxuICBjb25zdHJ1Y3RvcihtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSB0aGlzLmdldEV4Y2x1ZGVkTG9jYXRpb25zKG1hbmlmZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhjbHVkZWRMb2NhdGlvbnMoYXNtTWFuaWZlc3Q6IEFzc2VtYmx5TWFuaWZlc3QpOiBDZm5SZXNvdXJjZUxvY2F0aW9uW10ge1xuICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIGZpbHRlciB0aGUgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSBDbG91ZEZvcm1hdGlvbiBzdGFja3NcbiAgICBjb25zdCBzdGFja01hbmlmZXN0cyA9IE9iamVjdC5lbnRyaWVzKGFzbU1hbmlmZXN0LmFydGlmYWN0cyA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFtfLCBtYW5pZmVzdF0pID0+IG1hbmlmZXN0LnR5cGUgPT09IEFydGlmYWN0VHlwZS5BV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0ssXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdID0gW107XG4gICAgZm9yIChsZXQgW3N0YWNrTmFtZSwgbWFuaWZlc3RdIG9mIHN0YWNrTWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKG1hbmlmZXN0Lm1ldGFkYXRhID8/IHt9KVxuICAgICAgICAvLyBUaGVuIHBpY2sgb25seSB0aGUgcmVzb3VyY2VzIGluIGVhY2ggc3RhY2sgbWFya2VkIHdpdGggRE9fTk9UX1JFRkFDVE9SXG4gICAgICAgIC5maWx0ZXIoKGVudHJpZXMpID0+XG4gICAgICAgICAgZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5ET19OT1RfUkVGQUNUT1IgJiYgZW50cnkuZGF0YSA9PT0gdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLy8gRmluYWxseSwgZ2V0IHRoZSBsb2dpY2FsIElEIG9mIGVhY2ggcmVzb3VyY2VcbiAgICAgICAgLm1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZEVudHJ5ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbjogQ2ZuUmVzb3VyY2VMb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZEVudHJ5IS5kYXRhISBhcyBzdHJpbmcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgIH0pO1xuICAgICAgcmVzdWx0LnB1c2goLi4ubG9jYXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlZExvY2F0aW9ucy5zb21lKFxuICAgICAgKGxvYykgPT4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlFeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSBbXTtcbiAgICB0aGlzLmV4Y2x1ZGVkUGF0aHMgPSBbXTtcblxuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvblJlZ2V4ID0gL15bQS1aYS16MC05XStcXC5bQS1aYS16MC05XSskLztcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGxvY2F0aW9uUmVnZXgudGVzdChpdGVtKSkge1xuICAgICAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gaXRlbS5zcGxpdCgnLicpO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkTG9jYXRpb25zLnB1c2goe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBsb2dpY2FsSWQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFBhdGhzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGFpbnNMb2NhdGlvbiA9IHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMuc29tZSgobG9jKSA9PiB7XG4gICAgICByZXR1cm4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250YWluc1BhdGggPSB0aGlzLmV4Y2x1ZGVkUGF0aHMuc29tZSgocGF0aCkgPT4gbG9jYXRpb24udG9QYXRoKCkgPT09IHBhdGgpO1xuICAgIHJldHVybiBjb250YWluc0xvY2F0aW9uIHx8IGNvbnRhaW5zUGF0aDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pb25FeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBleGNsdWRlTGlzdHM6IEV4Y2x1ZGVMaXN0W10pIHtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlTGlzdHMuc29tZSgoZXhjbHVkZUxpc3QpID0+IGV4Y2x1ZGVMaXN0LmlzRXhjbHVkZWQobG9jYXRpb24pKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV2ZXJFeGNsdWRlIGltcGxlbWVudHMgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKF9sb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWx3YXlzRXhjbHVkZSBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgaXNFeGNsdWRlZChfbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hbmlmZXN0QW5kRXhjbHVzaW9uTGlzdChtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCwgZXhjbHVkZT86IHN0cmluZ1tdKTogRXhjbHVkZUxpc3Qge1xuICByZXR1cm4gbmV3IFVuaW9uRXhjbHVkZUxpc3QoW25ldyBNYW5pZmVzdEV4Y2x1ZGVMaXN0KG1hbmlmZXN0KSwgbmV3IEluTWVtb3J5RXhjbHVkZUxpc3QoZXhjbHVkZSA/PyBbXSldKTtcbn1cblxuIl19
@@ -1,6 +1,9 @@
1
1
  import type { TypedMapping } from '@aws-cdk/cloudformation-diff';
2
2
  import type { SdkProvider } from '../aws-auth/private';
3
3
  import type { CloudFormationStack } from './cloudformation';
4
+ import { ResourceMapping, ResourceLocation } from './cloudformation';
5
+ import { type ExcludeList } from './exclude';
6
+ export * from './exclude';
4
7
  /**
5
8
  * Represents a set of possible movements of a resource from one location
6
9
  * to another. In the ideal case, there is only one source and only one
@@ -12,28 +15,6 @@ export declare class AmbiguityError extends Error {
12
15
  constructor(movements: ResourceMovement[]);
13
16
  paths(): [string[], string[]][];
14
17
  }
15
- /**
16
- * This class mirrors the `ResourceLocation` interface from CloudFormation,
17
- * but is richer, since it has a reference to the stack object, rather than
18
- * merely the stack name.
19
- */
20
- export declare class ResourceLocation {
21
- readonly stack: CloudFormationStack;
22
- readonly logicalResourceId: string;
23
- constructor(stack: CloudFormationStack, logicalResourceId: string);
24
- toPath(): string;
25
- getType(): string;
26
- equalTo(other: ResourceLocation): boolean;
27
- }
28
- /**
29
- * A mapping between a source and a destination location.
30
- */
31
- export declare class ResourceMapping {
32
- readonly source: ResourceLocation;
33
- readonly destination: ResourceLocation;
34
- constructor(source: ResourceLocation, destination: ResourceLocation);
35
- toTypedMapping(): TypedMapping;
36
- }
37
18
  export declare function resourceMovements(before: CloudFormationStack[], after: CloudFormationStack[]): ResourceMovement[];
38
19
  export declare function ambiguousMovements(movements: ResourceMovement[]): ResourceMovement[];
39
20
  /**
@@ -46,6 +27,6 @@ export declare function resourceMappings(movements: ResourceMovement[], stacks?:
46
27
  * that were moved from one location (stack + logical ID) to another. The comparison
47
28
  * is done per environment.
48
29
  */
49
- export declare function findResourceMovements(stacks: CloudFormationStack[], sdkProvider: SdkProvider): Promise<ResourceMovement[]>;
30
+ export declare function findResourceMovements(stacks: CloudFormationStack[], sdkProvider: SdkProvider, exclude?: ExcludeList): Promise<ResourceMovement[]>;
50
31
  export declare function formatTypedMappings(mappings: TypedMapping[]): string;
51
32
  export declare function formatAmbiguousMappings(paths: [string[], string[]][]): string;
@@ -1,6 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceMapping = exports.ResourceLocation = exports.AmbiguityError = void 0;
17
+ exports.AmbiguityError = void 0;
4
18
  exports.resourceMovements = resourceMovements;
5
19
  exports.ambiguousMovements = ambiguousMovements;
6
20
  exports.resourceMappings = resourceMappings;
@@ -11,7 +25,10 @@ const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
11
25
  const util_1 = require("../../util");
12
26
  const plugin_1 = require("../plugin");
13
27
  const streams_1 = require("../streams");
28
+ const cloudformation_1 = require("./cloudformation");
14
29
  const digest_1 = require("./digest");
30
+ const exclude_1 = require("./exclude");
31
+ __exportStar(require("./exclude"), exports);
15
32
  class AmbiguityError extends Error {
16
33
  movements;
17
34
  constructor(movements) {
@@ -26,58 +43,6 @@ class AmbiguityError extends Error {
26
43
  }
27
44
  }
28
45
  exports.AmbiguityError = AmbiguityError;
29
- /**
30
- * This class mirrors the `ResourceLocation` interface from CloudFormation,
31
- * but is richer, since it has a reference to the stack object, rather than
32
- * merely the stack name.
33
- */
34
- class ResourceLocation {
35
- stack;
36
- logicalResourceId;
37
- constructor(stack, logicalResourceId) {
38
- this.stack = stack;
39
- this.logicalResourceId = logicalResourceId;
40
- }
41
- toPath() {
42
- const stack = this.stack;
43
- const resource = stack.template.Resources?.[this.logicalResourceId];
44
- const result = resource?.Metadata?.['aws:cdk:path'];
45
- if (result != null) {
46
- return result;
47
- }
48
- // If the path is not available, we can use stack name and logical ID
49
- return `${stack.stackName}.${this.logicalResourceId}`;
50
- }
51
- getType() {
52
- const resource = this.stack.template.Resources?.[this.logicalResourceId ?? ''];
53
- return resource?.Type ?? 'Unknown';
54
- }
55
- equalTo(other) {
56
- return this.logicalResourceId === other.logicalResourceId && this.stack.stackName === other.stack.stackName;
57
- }
58
- }
59
- exports.ResourceLocation = ResourceLocation;
60
- /**
61
- * A mapping between a source and a destination location.
62
- */
63
- class ResourceMapping {
64
- source;
65
- destination;
66
- constructor(source, destination) {
67
- this.source = source;
68
- this.destination = destination;
69
- }
70
- toTypedMapping() {
71
- return {
72
- // the type is the same in both source and destination,
73
- // so we can use either one
74
- type: this.source.getType(),
75
- sourcePath: this.source.toPath(),
76
- destinationPath: this.destination.toPath(),
77
- };
78
- }
79
- }
80
- exports.ResourceMapping = ResourceMapping;
81
46
  function groupByKey(entries) {
82
47
  const result = {};
83
48
  for (const [hash, location] of entries) {
@@ -106,7 +71,7 @@ function ambiguousMovements(movements) {
106
71
  *
107
72
  */
108
73
  function resourceMappings(movements, stacks) {
109
- const predicate = stacks == null
74
+ const stacksPredicate = stacks == null
110
75
  ? () => true
111
76
  : (m) => {
112
77
  // Any movement that involves one of the selected stacks (either moving from or to)
@@ -116,8 +81,8 @@ function resourceMappings(movements, stacks) {
116
81
  };
117
82
  return movements
118
83
  .filter(([pre, post]) => pre.length === 1 && post.length === 1 && !pre[0].equalTo(post[0]))
119
- .map(([pre, post]) => new ResourceMapping(pre[0], post[0]))
120
- .filter(predicate);
84
+ .map(([pre, post]) => new cloudformation_1.ResourceMapping(pre[0], post[0]))
85
+ .filter(stacksPredicate);
121
86
  }
122
87
  function removeUnmovedResources(m) {
123
88
  const result = {};
@@ -157,7 +122,7 @@ function zip(m1, m2) {
157
122
  function resourceDigests(stack) {
158
123
  const digests = (0, digest_1.computeResourceDigests)(stack.template);
159
124
  return Object.entries(digests).map(([logicalId, digest]) => {
160
- const location = new ResourceLocation(stack, logicalId);
125
+ const location = new cloudformation_1.ResourceLocation(stack, logicalId);
161
126
  return [digest, location];
162
127
  });
163
128
  }
@@ -166,7 +131,7 @@ function resourceDigests(stack) {
166
131
  * that were moved from one location (stack + logical ID) to another. The comparison
167
132
  * is done per environment.
168
133
  */
169
- async function findResourceMovements(stacks, sdkProvider) {
134
+ async function findResourceMovements(stacks, sdkProvider, exclude = new exclude_1.NeverExclude()) {
170
135
  const stackGroups = new Map();
171
136
  // Group stacks by environment
172
137
  for (const stack of stacks) {
@@ -185,7 +150,10 @@ async function findResourceMovements(stacks, sdkProvider) {
185
150
  for (const [_, [before, after]] of stackGroups) {
186
151
  result.push(...resourceMovements(before, after));
187
152
  }
188
- return result;
153
+ return result.filter(mov => {
154
+ const after = mov[1];
155
+ return after.every(l => !exclude.isExcluded(l));
156
+ });
189
157
  }
190
158
  async function getDeployedStacks(sdkProvider, environment) {
191
159
  const cfn = (await sdkProvider.forEnvironment(environment, plugin_1.Mode.ForReading)).sdk.cloudFormation();
@@ -220,4 +188,4 @@ function formatAmbiguousMappings(paths) {
220
188
  (0, cloudformation_diff_1.formatAmbiguousMappings)(stream, paths);
221
189
  return stream.toString();
222
190
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtR0EsOENBTUM7QUFFRCxnREFPQztBQU1ELDRDQWNDO0FBNkRELHNEQXdCQztBQWdDRCxrREFJQztBQUVELDBEQUlDO0FBcFFELHNFQUdzQztBQUd0QyxxQ0FBa0Q7QUFFbEQsc0NBQWlDO0FBQ2pDLHdDQUErQztBQUUvQyxxQ0FBOEQ7QUFTOUQsTUFBYSxjQUFlLFNBQVEsS0FBSztJQUNYO0lBQTVCLFlBQTRCLFNBQTZCO1FBQ3ZELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRFgsY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFFekQsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsU0FBUyxPQUFPLENBQUMsU0FBNkI7WUFDNUMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBWkQsd0NBWUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDQztJQUE0QztJQUF4RSxZQUE0QixLQUEwQixFQUFrQixpQkFBeUI7UUFBckUsVUFBSyxHQUFMLEtBQUssQ0FBcUI7UUFBa0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO0lBQ2pHLENBQUM7SUFFTSxNQUFNO1FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFB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QU0sU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFxQixFQUFFLEVBQUU7UUFDaEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxRQUFRLEdBQUcsSUFBQSwyQkFBb0IsRUFBQyxxQkFBcUIsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbEYsT0FBTztZQUNMLFdBQVc7WUFDWCxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVU7WUFDN0IsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDLENBQUM7SUFFRix3RUFBd0U7SUFDeEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsUUFBd0I7SUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBaUIsRUFBRSxDQUFDO0lBQ3ZDLElBQUEseUNBQWdCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxLQUE2QjtJQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7SUFDdkMsSUFBQSw2Q0FBb0IsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZWRNYXBwaW5nIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQge1xuICBmb3JtYXRBbWJpZ3VvdXNNYXBwaW5ncyBhcyBmbXRBbWJpZ3VvdXNNYXBwaW5ncyxcbiAgZm9ybWF0VHlwZWRNYXBwaW5ncyBhcyBmbXRUeXBlZE1hcHBpbmdzLFxufSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgU3RhY2tTdW1tYXJ5IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGRlc2VyaWFsaXplU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcbmltcG9ydCB7IFN0cmluZ1dyaXRlU3RyZWFtIH0gZnJvbSAnLi4vc3RyZWFtcyc7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMsIGhhc2hPYmplY3QgfSBmcm9tICcuL2RpZ2VzdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNldCBvZiBwb3NzaWJsZSBtb3ZlbWVudHMgb2YgYSByZXNvdXJjZSBmcm9tIG9uZSBsb2NhdGlvblxuICogdG8gYW5vdGhlci4gSW4gdGhlIGlkZWFsIGNhc2UsIHRoZXJlIGlzIG9ubHkgb25lIHNvdXJjZSBhbmQgb25seSBvbmVcbiAqIGRlc3RpbmF0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZU1vdmVtZW50ID0gW1Jlc291cmNlTG9jYXRpb25bXSwgUmVzb3VyY2VMb2NhdGlvbltdXTtcblxuZXhwb3J0IGNsYXNzIEFtYmlndWl0eUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbW92ZW1lbnRzOiBSZXNvdXJjZU1vdmVtZW50W10pIHtcbiAgICBzdXBlcignQW1iaWd1b3VzIHJlc291cmNlIG1hcHBpbmdzJyk7XG4gIH1cblxuICBwdWJsaWMgcGF0aHMoKTogW3N0cmluZ1tdLCBzdHJpbmdbXV1bXSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZW1lbnRzLm1hcCgoW2EsIGJdKSA9PiBbY29udmVydChhKSwgY29udmVydChiKV0pO1xuXG4gICAgZnVuY3Rpb24gY29udmVydChsb2NhdGlvbnM6IFJlc291cmNlTG9jYXRpb25bXSk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiBsb2NhdGlvbnMubWFwKChsKSA9PiBsLnRvUGF0aCgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1pcnJvcnMgdGhlIGBSZXNvdXJjZUxvY2F0aW9uYCBpbnRlcmZhY2UgZnJvbSBDbG91ZEZvcm1hdGlvbixcbiAqIGJ1dCBpcyByaWNoZXIsIHNpbmNlIGl0IGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgc3RhY2sgb2JqZWN0LCByYXRoZXIgdGhhblxuICogbWVyZWx5IHRoZSBzdGFjayBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VMb2NhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzdGFjazogQ2xvdWRGb3JtYXRpb25TdGFjaywgcHVibGljIHJlYWRvbmx5IGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgfVxuXG4gIHB1YmxpYyB0b1BhdGgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXM/Llt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICBjb25zdCByZXN1bHQgPSByZXNvdXJjZT8uTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG5cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHBhdGggaXMgbm90IGF2YWlsYWJsZSwgd2UgY2FuIHVzZSBzdGFjayBuYW1lIGFuZCBsb2dpY2FsIElEXG4gICAgcmV0dXJuIGAke3N0YWNrLnN0YWNrTmFtZX0uJHt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXM/Llt0aGlzLmxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnXTtcbiAgICByZXR1cm4gcmVzb3VyY2U/LlR5cGUgPz8gJ1Vua25vd24nO1xuICB9XG5cbiAgcHVibGljIGVxdWFsVG8ob3RoZXI6IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpY2FsUmVzb3VyY2VJZCA9PT0gb3RoZXIubG9naWNhbFJlc291cmNlSWQgJiYgdGhpcy5zdGFjay5zdGFja05hbWUgPT09IG90aGVyLnN0YWNrLnN0YWNrTmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbWFwcGluZyBiZXR3ZWVuIGEgc291cmNlIGFuZCBhIGRlc3RpbmF0aW9uIGxvY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYXBwaW5nIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNvdXJjZTogUmVzb3VyY2VMb2NhdGlvbiwgcHVibGljIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKSB7XG4gIH1cblxuICBwdWJsaWMgdG9UeXBlZE1hcHBpbmcoKTogVHlwZWRNYXBwaW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gdGhlIHR5cGUgaXMgdGhlIHNhbWUgaW4gYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLFxuICAgICAgLy8gc28gd2UgY2FuIHVzZSBlaXRoZXIgb25lXG4gICAgICB0eXBlOiB0aGlzLnNvdXJjZS5nZXRUeXBlKCksXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZS50b1BhdGgoKSxcbiAgICAgIGRlc3RpbmF0aW9uUGF0aDogdGhpcy5kZXN0aW5hdGlvbi50b1BhdGgoKSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdyb3VwQnlLZXk8QT4oZW50cmllczogW3N0cmluZywgQV1bXSk6IFJlY29yZDxzdHJpbmcsIEFbXT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFbXT4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbl0gb2YgZW50cmllcykge1xuICAgIGlmIChoYXNoIGluIHJlc3VsdCkge1xuICAgICAgcmVzdWx0W2hhc2hdLnB1c2gobG9jYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25dO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZU1vdmVtZW50cyhiZWZvcmU6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgYWZ0ZXI6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IFJlc291cmNlTW92ZW1lbnRbXSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFxuICAgIHJlbW92ZVVubW92ZWRSZXNvdXJjZXMoXG4gICAgICB6aXAoZ3JvdXBCeUtleShiZWZvcmUuZmxhdE1hcChyZXNvdXJjZURpZ2VzdHMpKSwgZ3JvdXBCeUtleShhZnRlci5mbGF0TWFwKHJlc291cmNlRGlnZXN0cykpKSxcbiAgICApLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW1iaWd1b3VzTW92ZW1lbnRzKG1vdmVtZW50czogUmVzb3VyY2VNb3ZlbWVudFtdKSB7XG4gIC8vIEEgbW92ZW1lbnQgaXMgY29uc2lkZXJlZCBhbWJpZ3VvdXMgaWYgdGhlc2UgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgLy8gIDEuIEJvdGggc2lkZXMgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYWRkaXRpb24gb3IgZGVsZXRpb24pXG4gIC8vICAyLiBBdCBsZWFzdCBvbmUgc2lkZSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50XG4gIHJldHVybiBtb3ZlbWVudHNcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA+IDAgJiYgcG9zdC5sZW5ndGggPiAwKVxuICAgIC5maWx0ZXIoKFtwcmUsIHBvc3RdKSA9PiBwcmUubGVuZ3RoID4gMSB8fCBwb3N0Lmxlbmd0aCA+IDEpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbGlzdCBvZiB1bmFtYmlndW91cyByZXNvdXJjZSBtb3ZlbWVudHMgaW50byBhIGxpc3Qgb2YgcmVzb3VyY2UgbWFwcGluZ3MuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VNYXBwaW5ncyhtb3ZlbWVudHM6IFJlc291cmNlTW92ZW1lbnRbXSwgc3RhY2tzPzogQ2xvdWRGb3JtYXRpb25TdGFja1tdKTogUmVzb3VyY2VNYXBwaW5nW10ge1xuICBjb25zdCBwcmVkaWNhdGUgPSBzdGFja3MgPT0gbnVsbFxuICAgID8gKCkgPT4gdHJ1ZVxuICAgIDogKG06IFJlc291cmNlTWFwcGluZykgPT4ge1xuICAgICAgLy8gQW55IG1vdmVtZW50IHRoYXQgaW52b2x2ZXMgb25lIG9mIHRoZSBzZWxlY3RlZCBzdGFja3MgKGVpdGhlciBtb3ZpbmcgZnJvbSBvciB0bylcbiAgICAgIC8vIGlzIGNvbnNpZGVyZWQgYSBjYW5kaWRhdGUgZm9yIHJlZmFjdG9yaW5nLlxuICAgICAgY29uc3Qgc3RhY2tOYW1lcyA9IFttLnNvdXJjZS5zdGFjay5zdGFja05hbWUsIG0uZGVzdGluYXRpb24uc3RhY2suc3RhY2tOYW1lXTtcbiAgICAgIHJldHVybiBzdGFja3Muc29tZSgoc3RhY2spID0+IHN0YWNrTmFtZXMuaW5jbHVkZXMoc3RhY2suc3RhY2tOYW1lKSk7XG4gICAgfTtcblxuICByZXR1cm4gbW92ZW1lbnRzXG4gICAgLmZpbHRlcigoW3ByZSwgcG9zdF0pID0+IHByZS5sZW5ndGggPT09IDEgJiYgcG9zdC5sZW5ndGggPT09IDEgJiYgIXByZVswXS5lcXVhbFRvKHBvc3RbMF0pKVxuICAgIC5tYXAoKFtwcmUsIHBvc3RdKSA9PiBuZXcgUmVzb3VyY2VNYXBwaW5nKHByZVswXSwgcG9zdFswXSkpXG4gICAgLmZpbHRlcihwcmVkaWNhdGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKFxuICBtOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmVtZW50Pixcbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmVtZW50PiA9IHt9O1xuICBmb3IgKGNvbnN0IFtoYXNoLCBbYmVmb3JlLCBhZnRlcl1dIG9mIE9iamVjdC5lbnRyaWVzKG0pKSB7XG4gICAgY29uc3QgY29tbW9uID0gYmVmb3JlLmZpbHRlcigoYikgPT4gYWZ0ZXIuc29tZSgoYSkgPT4gYS5lcXVhbFRvKGIpKSk7XG4gICAgcmVzdWx0W2hhc2hdID0gW1xuICAgICAgYmVmb3JlLmZpbHRlcigoYikgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBiLmVxdWFsVG8oYykpKSxcbiAgICAgIGFmdGVyLmZpbHRlcigoYSkgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBhLmVxdWFsVG8oYykpKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGb3IgZWFjaCBoYXNoLCBpZGVudGlmeWluZyBhIHNpbmdsZSByZXNvdXJjZSwgemlwIHRoZSB0d28gbGlzdHMgb2YgbG9jYXRpb25zLFxuICogcHJvZHVjaW5nIGEgcmVzb3VyY2UgbW92ZW1lbnRcbiAqL1xuZnVuY3Rpb24gemlwKFxuICBtMTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbiAgbTI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmVtZW50PiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlbWVudD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0xKSkge1xuICAgIGlmIChoYXNoIGluIG0yKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBtMltoYXNoXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtsb2NhdGlvbnMsIFtdXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0yKSkge1xuICAgIGlmICghKGhhc2ggaW4gbTEpKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbW10sIGxvY2F0aW9uc107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGxpc3Qgb2YgcGFpcnMgW2RpZ2VzdCwgbG9jYXRpb25dIGZvciBlYWNoIHJlc291cmNlIGluIHRoZSBzdGFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb3VyY2VEaWdlc3RzKHN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrKTogW3N0cmluZywgUmVzb3VyY2VMb2NhdGlvbl1bXSB7XG4gIGNvbnN0IGRpZ2VzdHMgPSBjb21wdXRlUmVzb3VyY2VEaWdlc3RzKHN0YWNrLnRlbXBsYXRlKTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGlnZXN0cykubWFwKChbbG9naWNhbElkLCBkaWdlc3RdKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24gPSBuZXcgUmVzb3VyY2VMb2NhdGlvbihzdGFjaywgbG9naWNhbElkKTtcbiAgICByZXR1cm4gW2RpZ2VzdCwgbG9jYXRpb25dO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0aGUgZGVwbG95ZWQgc3RhdGUgdG8gdGhlIGNsb3VkIGFzc2VtYmx5IHN0YXRlLCBhbmQgZmluZHMgYWxsIHJlc291cmNlc1xuICogdGhhdCB3ZXJlIG1vdmVkIGZyb20gb25lIGxvY2F0aW9uIChzdGFjayArIGxvZ2ljYWwgSUQpIHRvIGFub3RoZXIuIFRoZSBjb21wYXJpc29uXG4gKiBpcyBkb25lIHBlciBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRSZXNvdXJjZU1vdmVtZW50cyhcbiAgc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbik6IFByb21pc2U8UmVzb3VyY2VNb3ZlbWVudFtdPiB7XG4gIGNvbnN0IHN0YWNrR3JvdXBzOiBNYXA8c3RyaW5nLCBbQ2xvdWRGb3JtYXRpb25TdGFja1tdLCBDbG91ZEZvcm1hdGlvblN0YWNrW11dPiA9IG5ldyBNYXAoKTtcblxuICAvLyBHcm91cCBzdGFja3MgYnkgZW52aXJvbm1lbnRcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHN0YWNrLmVudmlyb25tZW50O1xuICAgIGNvbnN0IGtleSA9IGhhc2hPYmplY3QoZW52aXJvbm1lbnQpO1xuICAgIGlmIChzdGFja0dyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgc3RhY2tHcm91cHMuZ2V0KGtleSkhWzFdLnB1c2goc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgZmlyc3QgdGltZSB3ZSBzZWUgYW4gZW52aXJvbm1lbnQsIHdlIG5lZWQgdG8gZmV0Y2ggYWxsIHN0YWNrcyBkZXBsb3llZCB0byBpdC5cbiAgICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCk7XG4gICAgICBzdGFja0dyb3Vwcy5zZXQoa2V5LCBbYmVmb3JlLCBbc3RhY2tdXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZXNvdXJjZU1vdmVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBbXywgW2JlZm9yZSwgYWZ0ZXJdXSBvZiBzdGFja0dyb3Vwcykge1xuICAgIHJlc3VsdC5wdXNoKC4uLnJlc291cmNlTW92ZW1lbnRzKGJlZm9yZSwgYWZ0ZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZXBsb3llZFN0YWNrcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2tbXT4ge1xuICBjb25zdCBjZm4gPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIE1vZGUuRm9yUmVhZGluZykpLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IHN1bW1hcmllcyA9IGF3YWl0IGNmbi5wYWdpbmF0ZWRMaXN0U3RhY2tzKHtcbiAgICBTdGFja1N0YXR1c0ZpbHRlcjogW1xuICAgICAgJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAnVVBEQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgICAgJ0lNUE9SVF9DT01QTEVURScsXG4gICAgICAnUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgIF0sXG4gIH0pO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGFzeW5jIChzdW1tYXJ5OiBTdGFja1N1bW1hcnkpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoeyBTdGFja05hbWU6IHN1bW1hcnkuU3RhY2tOYW1lISB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRlc2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlQ29tbWFuZE91dHB1dC5UZW1wbGF0ZUJvZHkgPz8gJ3t9Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgc3RhY2tOYW1lOiBzdW1tYXJ5LlN0YWNrTmFtZSEsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICByZXR1cm4gUHJvbWlzZS5hbGwoc3VtbWFyaWVzLm1hcChub3JtYWxpemUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFR5cGVkTWFwcGluZ3MobWFwcGluZ3M6IFR5cGVkTWFwcGluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdFR5cGVkTWFwcGluZ3Moc3RyZWFtLCBtYXBwaW5ncyk7XG4gIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFtYmlndW91c01hcHBpbmdzKHBhdGhzOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdEFtYmlndW91c01hcHBpbmdzKHN0cmVhbSwgcGF0aHMpO1xuICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7XG59XG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQXFEQSw4Q0FNQztBQUVELGdEQU9DO0FBTUQsNENBa0JDO0FBMkRELHNEQTZCQztBQWdDRCxrREFJQztBQUVELDBEQUlDO0FBN05ELHNFQUdzQztBQUd0QyxxQ0FBa0Q7QUFFbEQsc0NBQWlDO0FBQ2pDLHdDQUErQztBQUUvQyxxREFBcUU7QUFDckUscUNBQThEO0FBQzlELHVDQUEyRDtBQUUzRCw0Q0FBMEI7QUFTMUIsTUFBYSxjQUFlLFNBQVEsS0FBSztJQUNYO0lBQTVCLFlBQTRCLFNBQTZCO1FBQ3ZELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRFgsY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFFekQsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsU0FBUyxPQUFPLENBQUMsU0FBNkI7WUFDNUMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBWkQsd0NBWUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxPQUFzQjtJQUMzQyxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBRXZDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMs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TSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQXFCLEVBQUUsRUFBRTtRQUNoRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVSxFQUFFLENBQUMsQ0FBQztRQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFvQixFQUFDLHFCQUFxQixDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsV0FBVztZQUNYLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVTtZQUM3QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxRQUF3QjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7SUFDdkMsSUFBQSx5Q0FBZ0IsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLEtBQTZCO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQWlCLEVBQUUsQ0FBQztJQUN2QyxJQUFBLDZDQUFvQixFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUeXBlZE1hcHBpbmcgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7XG4gIGZvcm1hdEFtYmlndW91c01hcHBpbmdzIGFzIGZtdEFtYmlndW91c01hcHBpbmdzLFxuICBmb3JtYXRUeXBlZE1hcHBpbmdzIGFzIGZtdFR5cGVkTWFwcGluZ3MsXG59IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBTdGFja1N1bW1hcnkgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgZGVzZXJpYWxpemVTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHsgU3RyaW5nV3JpdGVTdHJlYW0gfSBmcm9tICcuLi9zdHJlYW1zJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VNYXBwaW5nLCBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBjb21wdXRlUmVzb3VyY2VEaWdlc3RzLCBoYXNoT2JqZWN0IH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHsgTmV2ZXJFeGNsdWRlLCB0eXBlIEV4Y2x1ZGVMaXN0IH0gZnJvbSAnLi9leGNsdWRlJztcblxuZXhwb3J0ICogZnJvbSAnLi9leGNsdWRlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIG1vdmVtZW50cyBvZiBhIHJlc291cmNlIGZyb20gb25lIGxvY2F0aW9uXG4gKiB0byBhbm90aGVyLiBJbiB0aGUgaWRlYWwgY2FzZSwgdGhlcmUgaXMgb25seSBvbmUgc291cmNlIGFuZCBvbmx5IG9uZVxuICogZGVzdGluYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlTW92ZW1lbnQgPSBbUmVzb3VyY2VMb2NhdGlvbltdLCBSZXNvdXJjZUxvY2F0aW9uW11dO1xuXG5leHBvcnQgY2xhc3MgQW1iaWd1aXR5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBtb3ZlbWVudHM6IFJlc291cmNlTW92ZW1lbnRbXSkge1xuICAgIHN1cGVyKCdBbWJpZ3VvdXMgcmVzb3VyY2UgbWFwcGluZ3MnKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRocygpOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlbWVudHMubWFwKChbYSwgYl0pID0+IFtjb252ZXJ0KGEpLCBjb252ZXJ0KGIpXSk7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0KGxvY2F0aW9uczogUmVzb3VyY2VMb2NhdGlvbltdKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIGxvY2F0aW9ucy5tYXAoKGwpID0+IGwudG9QYXRoKCkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBncm91cEJ5S2V5PEE+KGVudHJpZXM6IFtzdHJpbmcsIEFdW10pOiBSZWNvcmQ8c3RyaW5nLCBBW10+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25dIG9mIGVudHJpZXMpIHtcbiAgICBpZiAoaGFzaCBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdFtoYXNoXS5wdXNoKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9uXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VNb3ZlbWVudHMoYmVmb3JlOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGFmdGVyOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBSZXNvdXJjZU1vdmVtZW50W10ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhcbiAgICByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKFxuICAgICAgemlwKGdyb3VwQnlLZXkoYmVmb3JlLmZsYXRNYXAocmVzb3VyY2VEaWdlc3RzKSksIGdyb3VwQnlLZXkoYWZ0ZXIuZmxhdE1hcChyZXNvdXJjZURpZ2VzdHMpKSksXG4gICAgKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFtYmlndW91c01vdmVtZW50cyhtb3ZlbWVudHM6IFJlc291cmNlTW92ZW1lbnRbXSkge1xuICAvLyBBIG1vdmVtZW50IGlzIGNvbnNpZGVyZWQgYW1iaWd1b3VzIGlmIHRoZXNlIHR3byBjb25kaXRpb25zIGFyZSBtZXQ6XG4gIC8vICAxLiBCb3RoIHNpZGVzIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgKG90aGVyd2lzZSwgaXQncyBqdXN0IGFkZGl0aW9uIG9yIGRlbGV0aW9uKVxuICAvLyAgMi4gQXQgbGVhc3Qgb25lIHNpZGUgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudFxuICByZXR1cm4gbW92ZW1lbnRzXG4gICAgLmZpbHRlcigoW3ByZSwgcG9zdF0pID0+IHByZS5sZW5ndGggPiAwICYmIHBvc3QubGVuZ3RoID4gMClcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA+IDEgfHwgcG9zdC5sZW5ndGggPiAxKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGxpc3Qgb2YgdW5hbWJpZ3VvdXMgcmVzb3VyY2UgbW92ZW1lbnRzIGludG8gYSBsaXN0IG9mIHJlc291cmNlIG1hcHBpbmdzLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlTWFwcGluZ3MoXG4gIG1vdmVtZW50czogUmVzb3VyY2VNb3ZlbWVudFtdLFxuICBzdGFja3M/OiBDbG91ZEZvcm1hdGlvblN0YWNrW10sXG4pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIGNvbnN0IHN0YWNrc1ByZWRpY2F0ZSA9XG4gICAgc3RhY2tzID09IG51bGxcbiAgICAgID8gKCkgPT4gdHJ1ZVxuICAgICAgOiAobTogUmVzb3VyY2VNYXBwaW5nKSA9PiB7XG4gICAgICAgIC8vIEFueSBtb3ZlbWVudCB0aGF0IGludm9sdmVzIG9uZSBvZiB0aGUgc2VsZWN0ZWQgc3RhY2tzIChlaXRoZXIgbW92aW5nIGZyb20gb3IgdG8pXG4gICAgICAgIC8vIGlzIGNvbnNpZGVyZWQgYSBjYW5kaWRhdGUgZm9yIHJlZmFjdG9yaW5nLlxuICAgICAgICBjb25zdCBzdGFja05hbWVzID0gW20uc291cmNlLnN0YWNrLnN0YWNrTmFtZSwgbS5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWVdO1xuICAgICAgICByZXR1cm4gc3RhY2tzLnNvbWUoKHN0YWNrKSA9PiBzdGFja05hbWVzLmluY2x1ZGVzKHN0YWNrLnN0YWNrTmFtZSkpO1xuICAgICAgfTtcblxuICByZXR1cm4gbW92ZW1lbnRzXG4gICAgLmZpbHRlcigoW3ByZSwgcG9zdF0pID0+IHByZS5sZW5ndGggPT09IDEgJiYgcG9zdC5sZW5ndGggPT09IDEgJiYgIXByZVswXS5lcXVhbFRvKHBvc3RbMF0pKVxuICAgIC5tYXAoKFtwcmUsIHBvc3RdKSA9PiBuZXcgUmVzb3VyY2VNYXBwaW5nKHByZVswXSwgcG9zdFswXSkpXG4gICAgLmZpbHRlcihzdGFja3NQcmVkaWNhdGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKG06IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+KTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlbWVudD4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+ID0ge307XG4gIGZvciAoY29uc3QgW2hhc2gsIFtiZWZvcmUsIGFmdGVyXV0gb2YgT2JqZWN0LmVudHJpZXMobSkpIHtcbiAgICBjb25zdCBjb21tb24gPSBiZWZvcmUuZmlsdGVyKChiKSA9PiBhZnRlci5zb21lKChhKSA9PiBhLmVxdWFsVG8oYikpKTtcbiAgICByZXN1bHRbaGFzaF0gPSBbXG4gICAgICBiZWZvcmUuZmlsdGVyKChiKSA9PiAhY29tbW9uLnNvbWUoKGMpID0+IGIuZXF1YWxUbyhjKSkpLFxuICAgICAgYWZ0ZXIuZmlsdGVyKChhKSA9PiAhY29tbW9uLnNvbWUoKGMpID0+IGEuZXF1YWxUbyhjKSkpLFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZvciBlYWNoIGhhc2gsIGlkZW50aWZ5aW5nIGEgc2luZ2xlIHJlc291cmNlLCB6aXAgdGhlIHR3byBsaXN0cyBvZiBsb2NhdGlvbnMsXG4gKiBwcm9kdWNpbmcgYSByZXNvdXJjZSBtb3ZlbWVudFxuICovXG5mdW5jdGlvbiB6aXAoXG4gIG0xOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LFxuICBtMjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmVtZW50PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW2hhc2gsIGxvY2F0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMobTEpKSB7XG4gICAgaWYgKGhhc2ggaW4gbTIpIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtsb2NhdGlvbnMsIG0yW2hhc2hdXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9ucywgW11dO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2hhc2gsIGxvY2F0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMobTIpKSB7XG4gICAgaWYgKCEoaGFzaCBpbiBtMSkpIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtbXSwgbG9jYXRpb25zXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIGEgbGlzdCBvZiBwYWlycyBbZGlnZXN0LCBsb2NhdGlvbl0gZm9yIGVhY2ggcmVzb3VyY2UgaW4gdGhlIHN0YWNrLlxuICovXG5mdW5jdGlvbiByZXNvdXJjZURpZ2VzdHMoc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2spOiBbc3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uXVtdIHtcbiAgY29uc3QgZGlnZXN0cyA9IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMoc3RhY2sudGVtcGxhdGUpO1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWdlc3RzKS5tYXAoKFtsb2dpY2FsSWQsIGRpZ2VzdF0pID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbiA9IG5ldyBSZXNvdXJjZUxvY2F0aW9uKHN0YWNrLCBsb2dpY2FsSWQpO1xuICAgIHJldHVybiBbZGlnZXN0LCBsb2NhdGlvbl07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHRoZSBkZXBsb3llZCBzdGF0ZSB0byB0aGUgY2xvdWQgYXNzZW1ibHkgc3RhdGUsIGFuZCBmaW5kcyBhbGwgcmVzb3VyY2VzXG4gKiB0aGF0IHdlcmUgbW92ZWQgZnJvbSBvbmUgbG9jYXRpb24gKHN0YWNrICsgbG9naWNhbCBJRCkgdG8gYW5vdGhlci4gVGhlIGNvbXBhcmlzb25cbiAqIGlzIGRvbmUgcGVyIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFJlc291cmNlTW92ZW1lbnRzKFxuICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBleGNsdWRlOiBFeGNsdWRlTGlzdCA9IG5ldyBOZXZlckV4Y2x1ZGUoKSxcbik6IFByb21pc2U8UmVzb3VyY2VNb3ZlbWVudFtdPiB7XG4gIGNvbnN0IHN0YWNrR3JvdXBzOiBNYXA8c3RyaW5nLCBbQ2xvdWRGb3JtYXRpb25TdGFja1tdLCBDbG91ZEZvcm1hdGlvblN0YWNrW11dPiA9IG5ldyBNYXAoKTtcblxuICAvLyBHcm91cCBzdGFja3MgYnkgZW52aXJvbm1lbnRcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHN0YWNrLmVudmlyb25tZW50O1xuICAgIGNvbnN0IGtleSA9IGhhc2hPYmplY3QoZW52aXJvbm1lbnQpO1xuICAgIGlmIChzdGFja0dyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgc3RhY2tHcm91cHMuZ2V0KGtleSkhWzFdLnB1c2goc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgZmlyc3QgdGltZSB3ZSBzZWUgYW4gZW52aXJvbm1lbnQsIHdlIG5lZWQgdG8gZmV0Y2ggYWxsIHN0YWNrcyBkZXBsb3llZCB0byBpdC5cbiAgICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCk7XG4gICAgICBzdGFja0dyb3Vwcy5zZXQoa2V5LCBbYmVmb3JlLCBbc3RhY2tdXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZXNvdXJjZU1vdmVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBbXywgW2JlZm9yZSwgYWZ0ZXJdXSBvZiBzdGFja0dyb3Vwcykge1xuICAgIHJlc3VsdC5wdXNoKC4uLnJlc291cmNlTW92ZW1lbnRzKGJlZm9yZSwgYWZ0ZXIpKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuZmlsdGVyKG1vdiA9PiB7XG4gICAgY29uc3QgYWZ0ZXIgPSBtb3ZbMV07XG4gICAgcmV0dXJuIGFmdGVyLmV2ZXJ5KGwgPT4gIWV4Y2x1ZGUuaXNFeGNsdWRlZChsKSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZXBsb3llZFN0YWNrcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2tbXT4ge1xuICBjb25zdCBjZm4gPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIE1vZGUuRm9yUmVhZGluZykpLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IHN1bW1hcmllcyA9IGF3YWl0IGNmbi5wYWdpbmF0ZWRMaXN0U3RhY2tzKHtcbiAgICBTdGFja1N0YXR1c0ZpbHRlcjogW1xuICAgICAgJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAnVVBEQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgICAgJ0lNUE9SVF9DT01QTEVURScsXG4gICAgICAnUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgIF0sXG4gIH0pO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGFzeW5jIChzdW1tYXJ5OiBTdGFja1N1bW1hcnkpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoeyBTdGFja05hbWU6IHN1bW1hcnkuU3RhY2tOYW1lISB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRlc2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlQ29tbWFuZE91dHB1dC5UZW1wbGF0ZUJvZHkgPz8gJ3t9Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgc3RhY2tOYW1lOiBzdW1tYXJ5LlN0YWNrTmFtZSEsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICByZXR1cm4gUHJvbWlzZS5hbGwoc3VtbWFyaWVzLm1hcChub3JtYWxpemUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFR5cGVkTWFwcGluZ3MobWFwcGluZ3M6IFR5cGVkTWFwcGluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdFR5cGVkTWFwcGluZ3Moc3RyZWFtLCBtYXBwaW5ncyk7XG4gIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFtYmlndW91c01hcHBpbmdzKHBhdGhzOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdEFtYmlndW91c01hcHBpbmdzKHN0cmVhbSwgcGF0aHMpO1xuICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7XG59XG4iXX0=