ng-mocks 11.2.7 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +41 -3174
  3. package/dist/lib/common/core.helpers.d.ts +2 -2
  4. package/dist/lib/common/core.helpers.js +55 -27
  5. package/dist/lib/common/{core.reflect.body.d.ts → core.reflect.body-catch.d.ts} +0 -0
  6. package/dist/lib/common/core.reflect.body-catch.js +12 -0
  7. package/dist/lib/common/core.reflect.body-global.d.ts +3 -0
  8. package/dist/lib/common/core.reflect.body-global.js +11 -0
  9. package/dist/lib/common/core.reflect.directive-resolve.js +6 -4
  10. package/dist/lib/common/core.reflect.jit.d.ts +3 -0
  11. package/dist/lib/common/core.reflect.jit.js +11 -0
  12. package/dist/lib/common/core.reflect.module-resolve.js +6 -4
  13. package/dist/lib/common/core.reflect.pipe-resolve.js +6 -4
  14. package/dist/lib/common/core.tokens.d.ts +2 -2
  15. package/dist/lib/common/core.tokens.js +1 -1
  16. package/dist/lib/common/decorate.inputs.js +2 -2
  17. package/dist/lib/common/decorate.mock.d.ts +3 -0
  18. package/dist/lib/common/decorate.mock.js +13 -0
  19. package/dist/lib/common/decorate.outputs.js +2 -2
  20. package/dist/lib/common/decorate.queries.js +2 -2
  21. package/dist/lib/common/func.is-mock-control-value-accessor.js +2 -3
  22. package/dist/lib/common/func.is-mock-validator.js +2 -3
  23. package/dist/lib/common/func.is-ng-def.d.ts +7 -1
  24. package/dist/lib/common/func.is-ng-def.js +5 -1
  25. package/dist/lib/common/func.is-ng-injection-token.js +2 -3
  26. package/dist/lib/common/func.is-ng-module-def-with-providers.js +2 -3
  27. package/dist/lib/common/func.is-ng-type.d.ts +2 -2
  28. package/dist/lib/common/func.is-ng-type.js +6 -5
  29. package/dist/lib/common/mock-control-value-accessor.d.ts +3 -3
  30. package/dist/lib/common/mock-control-value-accessor.js +1 -1
  31. package/dist/lib/common/mock.js +31 -26
  32. package/dist/lib/common/ng-mocks-universe.d.ts +5 -0
  33. package/dist/lib/common/ng-mocks-universe.js +65 -7
  34. package/dist/lib/mock/clone-providers.js +23 -6
  35. package/dist/lib/mock/decorate-declaration.js +6 -6
  36. package/dist/lib/mock/to-existing-provider.d.ts +1 -1
  37. package/dist/lib/mock/to-factory-provider.d.ts +1 -1
  38. package/dist/lib/mock-builder/mock-builder-stash.js +3 -1
  39. package/dist/lib/mock-builder/mock-builder.js +2 -2
  40. package/dist/lib/mock-builder/mock-builder.performance.js +2 -2
  41. package/dist/lib/mock-builder/mock-builder.promise.js +4 -1
  42. package/dist/lib/mock-builder/promise/create-ng-mocks-overrides-token.js +2 -2
  43. package/dist/lib/mock-builder/promise/create-ng-mocks-touches-token.js +2 -2
  44. package/dist/lib/mock-builder/promise/get-override-meta.js +4 -4
  45. package/dist/lib/mock-builder/promise/get-root-provider-parameters.js +3 -3
  46. package/dist/lib/mock-builder/promise/init-module.js +2 -2
  47. package/dist/lib/mock-builder/promise/init-ng-modules.js +2 -2
  48. package/dist/lib/mock-component/mock-component.d.ts +1 -1
  49. package/dist/lib/mock-component/mock-component.js +9 -17
  50. package/dist/lib/mock-directive/mock-directive.d.ts +1 -1
  51. package/dist/lib/mock-directive/mock-directive.js +10 -23
  52. package/dist/lib/mock-helper/func.global-prepare.d.ts +2 -0
  53. package/dist/lib/mock-helper/func.global-prepare.js +9 -0
  54. package/dist/lib/mock-helper/mock-helper.auto-spy.js +2 -2
  55. package/dist/lib/mock-helper/mock-helper.d.ts +38 -0
  56. package/dist/lib/mock-helper/mock-helper.global-exclude.d.ts +4 -0
  57. package/dist/lib/mock-helper/mock-helper.global-exclude.js +9 -0
  58. package/dist/lib/mock-helper/mock-helper.global-keep.d.ts +4 -0
  59. package/dist/lib/mock-helper/mock-helper.global-keep.js +9 -0
  60. package/dist/lib/mock-helper/mock-helper.global-mock.d.ts +4 -0
  61. package/dist/lib/mock-helper/mock-helper.global-mock.js +9 -0
  62. package/dist/lib/mock-helper/mock-helper.global-replace.d.ts +3 -0
  63. package/dist/lib/mock-helper/mock-helper.global-replace.js +26 -0
  64. package/dist/lib/mock-helper/mock-helper.global-wipe.d.ts +4 -0
  65. package/dist/lib/mock-helper/mock-helper.global-wipe.js +11 -0
  66. package/dist/lib/mock-helper/mock-helper.guts.js +100 -37
  67. package/dist/lib/mock-helper/mock-helper.js +15 -1
  68. package/dist/lib/mock-helper/mock-helper.reset.js +2 -1
  69. package/dist/lib/mock-helper/mock-helper.stub-member.d.ts +2 -0
  70. package/dist/lib/mock-helper/mock-helper.stub-member.js +25 -0
  71. package/dist/lib/mock-helper/mock-helper.stub.js +2 -1
  72. package/dist/lib/mock-helper/mock-helper.throw-on-console.d.ts +2 -0
  73. package/dist/lib/mock-helper/mock-helper.throw-on-console.js +25 -0
  74. package/dist/lib/mock-instance/mock-instance.js +11 -7
  75. package/dist/lib/mock-module/mock-module.d.ts +2 -2
  76. package/dist/lib/mock-module/mock-module.js +7 -9
  77. package/dist/lib/mock-module/mock-ng-def.js +29 -12
  78. package/dist/lib/mock-pipe/mock-pipe.d.ts +2 -2
  79. package/dist/lib/mock-pipe/mock-pipe.js +18 -44
  80. package/dist/lib/mock-provider/mock-provider.d.ts +3 -3
  81. package/dist/lib/mock-provider/mock-provider.js +1 -1
  82. package/dist/lib/mock-render/func.generate-template.d.ts +2 -0
  83. package/dist/lib/mock-render/func.generate-template.js +87 -0
  84. package/dist/lib/mock-render/func.install-prop-reader.d.ts +2 -0
  85. package/dist/lib/mock-render/func.install-prop-reader.js +80 -0
  86. package/dist/lib/mock-render/mock-render.d.ts +16 -2
  87. package/dist/lib/mock-render/mock-render.js +111 -132
  88. package/dist/lib/mock-service/helper.resolve-provider.js +9 -12
  89. package/dist/lib/mock-service/helper.use-factory.js +3 -3
  90. package/dist/lib/mock-service/mock-provider.js +2 -1
  91. package/dist/lib/mock-service/mock-service.d.ts +4 -4
  92. package/dist/lib/mock-service/mock-service.js +1 -1
  93. package/examples/MockBuilder/test.deep.spec.ts +1 -1
  94. package/examples/MockBuilder/test.ng-mocks.spec.ts +1 -1
  95. package/examples/MockForms/test.spec.ts +2 -2
  96. package/examples/MockInstance/test.spec.ts +1 -1
  97. package/examples/MockObservable/test.spec.ts +7 -4
  98. package/examples/MockPipe/test.spec.ts +1 -1
  99. package/examples/MockProvider/test.spec.ts +5 -6
  100. package/examples/MockReactiveForms/test.spec.ts +2 -2
  101. package/examples/MockViewChild/test.spec.ts +3 -3
  102. package/examples/TestAttributeDirective/test.spec.ts +1 -1
  103. package/examples/TestHttpInterceptor/test.spec.ts +10 -4
  104. package/examples/TestHttpRequest/test.spec.ts +6 -4
  105. package/examples/TestLifecycleHooks/test.spec.ts +6 -2
  106. package/examples/TestLifecycleHooks/test.string.spec.ts +3 -2
  107. package/examples/TestLifecycleHooks/test.type-without-params.spec.ts +3 -2
  108. package/examples/TestMultiToken/test.spec.ts +3 -3
  109. package/examples/TestProvider/test.spec.ts +2 -3
  110. package/examples/TestProviderWithDependencies/test.spec.ts +7 -3
  111. package/examples/TestProviderWithUseClass/test.spec.ts +9 -3
  112. package/examples/TestProviderWithUseExisting/test.spec.ts +9 -3
  113. package/examples/TestProviderWithUseFactory/test.spec.ts +2 -3
  114. package/examples/TestProviderWithUseValue/test.spec.ts +4 -4
  115. package/examples/TestRoute/test.spec.ts +7 -7
  116. package/examples/TestRoutingGuard/test.spec.ts +8 -6
  117. package/examples/TestRoutingResolver/test.spec.ts +6 -4
  118. package/examples/TestToken/test.spec.ts +7 -6
  119. package/examples/main/test.spec.ts +2 -2
  120. package/examples/ngMocksFaster/test.spec.ts +2 -2
  121. package/package.json +2 -3
  122. package/dist/lib/common/core.reflect.body.js +0 -12
  123. package/dist/lib/common/core.reflect.d.ts +0 -6
  124. package/dist/lib/common/core.reflect.js +0 -10
  125. package/dist/lib/common/mock-of.d.ts +0 -3
  126. package/dist/lib/common/mock-of.js +0 -23
@@ -27,6 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.MockDirective = exports.MockDirectives = void 0;
28
28
  var core_1 = require("@angular/core");
29
29
  var testing_1 = require("@angular/core/testing");
30
+ var core_helpers_1 = require("../common/core.helpers");
30
31
  var core_reflect_directive_resolve_1 = require("../common/core.reflect.directive-resolve");
31
32
  var func_get_mocked_ng_def_of_1 = require("../common/func.get-mocked-ng-def-of");
32
33
  var mock_control_value_accessor_1 = require("../common/mock-control-value-accessor");
@@ -53,8 +54,8 @@ var DirectiveMockBase = /** @class */ (function (_super) {
53
54
  }
54
55
  };
55
56
  DirectiveMockBase.prototype.__ngMocksInstall = function (element, template, viewContainer) {
56
- // Basically any directive on ng-template is treated as structural, even it doesn't control render process.
57
- // In our case we don't if we should render it or not and due to this we do nothing.
57
+ // Basically any directive on ng-template is treated as structural, even it does not control render process.
58
+ // In our case we do not if we should render it or not and due to this we do nothing.
58
59
  this.__element = element;
59
60
  this.__template = template;
60
61
  this.__viewContainer = viewContainer;
@@ -69,23 +70,9 @@ var DirectiveMockBase = /** @class */ (function (_super) {
69
70
  };
70
71
  return DirectiveMockBase;
71
72
  }(mock_control_value_accessor_1.LegacyControlValueAccessor));
72
- var createMockClass = function () {
73
- var DirectiveMock = /** @class */ (function (_super) {
74
- __extends(DirectiveMock, _super);
75
- // istanbul ignore next
76
- function DirectiveMock(injector, element, template, viewContainer) {
77
- return _super.call(this, injector, element, template, viewContainer) || this;
78
- }
79
- return DirectiveMock;
80
- }(DirectiveMockBase));
81
- DirectiveMock.parameters = [
82
- core_1.Injector,
83
- [core_1.ElementRef, new core_1.Optional()],
84
- [core_1.TemplateRef, new core_1.Optional()],
85
- [core_1.ViewContainerRef, new core_1.Optional()],
86
- ];
87
- return DirectiveMock;
88
- };
73
+ Object.defineProperty(DirectiveMockBase, 'parameters', {
74
+ value: [[core_1.Injector], [core_1.ElementRef, new core_1.Optional()], [core_1.TemplateRef, new core_1.Optional()], [core_1.ViewContainerRef, new core_1.Optional()]],
75
+ });
89
76
  var decorateClass = function (directive, mock) {
90
77
  var meta = core_reflect_directive_resolve_1.default(directive);
91
78
  var selector = meta.selector, exportAs = meta.exportAs, inputs = meta.inputs, outputs = meta.outputs, queries = meta.queries, providers = meta.providers;
@@ -103,11 +90,11 @@ function MockDirectives() {
103
90
  }
104
91
  exports.MockDirectives = MockDirectives;
105
92
  /**
106
- * @see https://github.com/ike18t/ng-mocks#how-to-mock-a-directive
93
+ * @see https://github.com/ike18t/ng-mocks#how-to-mock-directives
107
94
  */
108
95
  function MockDirective(directive) {
109
96
  // We are inside of an 'it'.
110
- // It's fine to to return a mock copy or to throw an exception if it wasn't replaced with its mock copy in TestBed.
97
+ // It is fine to to return a mock copy or to throw an exception if it was not replaced with its mock copy in TestBed.
111
98
  if (testing_1.getTestBed()._instantiated) {
112
99
  try {
113
100
  return func_get_mocked_ng_def_of_1.getMockedNgDefOf(directive, 'd');
@@ -119,7 +106,7 @@ function MockDirective(directive) {
119
106
  if (ng_mocks_universe_1.default.flags.has('cacheDirective') && ng_mocks_universe_1.default.cacheDeclarations.has(directive)) {
120
107
  return ng_mocks_universe_1.default.cacheDeclarations.get(directive);
121
108
  }
122
- var mock = createMockClass();
109
+ var mock = core_helpers_1.extendClass(DirectiveMockBase);
123
110
  decorateClass(directive, mock);
124
111
  // istanbul ignore else
125
112
  if (ng_mocks_universe_1.default.flags.has('cacheDirective')) {
@@ -128,4 +115,4 @@ function MockDirective(directive) {
128
115
  return mock;
129
116
  }
130
117
  exports.MockDirective = MockDirective;
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1kaXJlY3RpdmUvbW9jay1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQWlIO0FBQ2pILGlEQUFtRDtBQUVuRCwyRkFBbUY7QUFFbkYsaUZBQXVFO0FBQ3ZFLHFGQUFtRjtBQUNuRixpRUFBMEQ7QUFDMUQscUVBQStEO0FBSS9EO0lBQWdDLHFDQUEwQjtJQUN4RCx1QkFBdUI7SUFDdkIsMkJBQ0UsUUFBa0IsRUFDbEIsT0FBb0IsRUFDcEIsUUFBMkIsRUFDM0IsYUFBZ0M7UUFKbEMsWUFNRSxrQkFBTSxRQUFRLENBQUMsU0FFaEI7UUFEQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQzs7SUFDMUQsQ0FBQztJQUVNLG9DQUFRLEdBQWY7UUFDRSxJQUFNLE1BQU0sR0FBSSxJQUFJLENBQUMsZUFBdUIsQ0FBQyxNQUFNLENBQUM7UUFDcEQsSUFBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxFQUFFO1lBQ1osSUFBQSxLQUNKLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSTtnQkFDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUNmLENBQUMsQ0FBQztvQkFDRSxTQUFTLEVBQUUsU0FBUztvQkFDcEIsU0FBUyxFQUFFLEVBQUU7aUJBQ2QsRUFOQyxTQUFTLGVBQUEsRUFBRSxTQUFTLGVBTXJCLENBQUM7WUFDUCxJQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFTyw0Q0FBZ0IsR0FBeEIsVUFBeUIsT0FBb0IsRUFBRSxRQUEyQixFQUFFLGFBQWdDO1FBQzFHLDJHQUEyRztRQUMzRyxvRkFBb0Y7UUFDbkYsSUFBWSxD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QUFJLDJCQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ25HLE9BQU8sMkJBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDekQ7SUFFRCxJQUFNLElBQUksR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUMvQixhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRS9CLHVCQUF1QjtJQUN2QixJQUFJLDJCQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQy9DLDJCQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4RDtJQUVELE9BQU8sSUFBVyxDQUFDO0FBQ3JCLENBQUM7QUF2QkQsc0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3RvciwgT25Jbml0LCBPcHRpb25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFRlc3RCZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuXG5pbXBvcnQgY29yZVJlZmxlY3REaXJlY3RpdmVSZXNvbHZlIGZyb20gJy4uL2NvbW1vbi9jb3JlLnJlZmxlY3QuZGlyZWN0aXZlLXJlc29sdmUnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9jb3JlLnR5cGVzJztcbmltcG9ydCB7IGdldE1vY2tlZE5nRGVmT2YgfSBmcm9tICcuLi9jb21tb24vZnVuYy5nZXQtbW9ja2VkLW5nLWRlZi1vZic7XG5pbXBvcnQgeyBMZWdhY3lDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4uL2NvbW1vbi9tb2NrLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IG5nTW9ja3NVbml2ZXJzZSBmcm9tICcuLi9jb21tb24vbmctbW9ja3MtdW5pdmVyc2UnO1xuaW1wb3J0IGRlY29yYXRlRGVjbGFyYXRpb24gZnJvbSAnLi4vbW9jay9kZWNvcmF0ZS1kZWNsYXJhdGlvbic7XG5cbmltcG9ydCB7IE1vY2tlZERpcmVjdGl2ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5jbGFzcyBEaXJlY3RpdmVNb2NrQmFzZSBleHRlbmRzIExlZ2FjeUNvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbGVtZW50PzogRWxlbWVudFJlZixcbiAgICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgdmlld0NvbnRhaW5lcj86IFZpZXdDb250YWluZXJSZWYsXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLl9fbmdNb2Nrc0luc3RhbGwoZWxlbWVudCwgdGVtcGxhdGUsIHZpZXdDb250YWluZXIpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9ICh0aGlzLl9fbmdNb2Nrc0NvbmZpZyBhcyBhbnkpLmNvbmZpZztcbiAgICBpZiAoY29uZmlnPy5yZW5kZXIpIHtcbiAgICAgIGNvbnN0IHsgJGltcGxpY2l0LCB2YXJpYWJsZXMgfSA9XG4gICAgICAgIGNvbmZpZy5yZW5kZXIgIT09IHRydWVcbiAgICAgICAgICA/IGNvbmZpZy5yZW5kZXJcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgKHRoaXMgYXMgYW55KS5fX3JlbmRlcigkaW1wbGljaXQsIHZhcmlhYmxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfX25nTW9ja3NJbnN0YWxsKGVsZW1lbnQ/OiBFbGVtZW50UmVmLCB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI/OiBWaWV3Q29udGFpbmVyUmVmKTogdm9pZCB7XG4gICAgLy8gQmFzaWNhbGx5IGFueSBkaXJlY3RpdmUgb24gbmctdGVtcGxhdGUgaXMgdHJlYXRlZCBhcyBzdHJ1Y3R1cmFsLCBldmVuIGl0IGRvZXNuJ3QgY29udHJvbCByZW5kZXIgcHJvY2Vzcy5cbiAgICAvLyBJbiBvdXIgY2FzZSB3ZSBkb24ndCBpZiB3ZSBzaG91bGQgcmVuZGVyIGl0IG9yIG5vdCBhbmQgZHVlIHRvIHRoaXMgd2UgZG8gbm90aGluZy5cbiAgICAodGhpcyBhcyBhbnkpLl9fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgKHRoaXMgYXMgYW55KS5fX3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgKHRoaXMgYXMgYW55KS5fX3ZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICh0aGlzIGFzIGFueSkuX19pc1N0cnVjdHVyYWwgPSB0ZW1wbGF0ZSAmJiB2aWV3Q29udGFpbmVyO1xuXG4gICAgLy8gUHJvdmlkaW5nIG1ldGhvZCB0byByZW5kZXIgbW9jayB2YWx1ZXMuXG4gICAgKHRoaXMgYXMgYW55KS5fX3JlbmRlciA9ICgkaW1wbGljaXQ/OiBhbnksIHZhcmlhYmxlcz86IFJlY29yZDxrZXlvZiBhbnksIGFueT4pID0+IHtcbiAgICAgIGlmICh2aWV3Q29udGFpbmVyICYmIHRlbXBsYXRlKSB7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIHsgLi4udmFyaWFibGVzLCAkaW1wbGljaXQgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVNb2NrQ2xhc3MgPSAoKTogVHlwZTxhbnk+ID0+IHtcbiAgY2xhc3MgRGlyZWN0aXZlTW9jayBleHRlbmRzIERpcmVjdGl2ZU1vY2tCYXNlIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgIGVsZW1lbnQ/OiBFbGVtZW50UmVmLFxuICAgICAgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgdmlld0NvbnRhaW5lcj86IFZpZXdDb250YWluZXJSZWYsXG4gICAgKSB7XG4gICAgICBzdXBlcihpbmplY3RvciwgZWxlbWVudCwgdGVtcGxhdGUsIHZpZXdDb250YWluZXIpO1xuICAgIH1cbiAgfVxuICAoRGlyZWN0aXZlTW9jayBhcyBhbnkpLnBhcmFtZXRlcnMgPSBbXG4gICAgSW5qZWN0b3IsXG4gICAgW0VsZW1lbnRSZWYsIG5ldyBPcHRpb25hbCgpXSxcbiAgICBbVGVtcGxhdGVSZWYsIG5ldyBPcHRpb25hbCgpXSxcbiAgICBbVmlld0NvbnRhaW5lclJlZiwgbmV3IE9wdGlvbmFsKCldLFxuICBdO1xuXG4gIHJldHVybiBEaXJlY3RpdmVNb2NrO1xufTtcblxuY29uc3QgZGVjb3JhdGVDbGFzcyA9IChkaXJlY3RpdmU6IFR5cGU8YW55PiwgbW9jazogVHlwZTxhbnk+KTogdm9pZCA9PiB7XG4gIGNvbnN0IG1ldGEgPSBjb3JlUmVmbGVjdERpcmVjdGl2ZVJlc29sdmUoZGlyZWN0aXZlKTtcbiAgY29uc3QgeyBzZWxlY3RvciwgZXhwb3J0QXMsIGlucHV0cywgb3V0cHV0cywgcXVlcmllcywgcHJvdmlkZXJzIH0gPSBtZXRhO1xuICBjb25zdCBtb2NrTWV0YSA9IHsgaW5wdXRzLCBvdXRwdXRzLCBwcm92aWRlcnMsIHF1ZXJpZXMgfTtcbiAgY29uc3QgbW9ja1BhcmFtcyA9IHsgZXhwb3J0QXMsIHNlbGVjdG9yIH07XG4gIGNvbnN0IG9wdGlvbnMgPSBkZWNvcmF0ZURlY2xhcmF0aW9uKGRpcmVjdGl2ZSwgbW9jaywgbW9ja01ldGEsIG1vY2tQYXJhbXMpO1xuICBEaXJlY3RpdmUob3B0aW9ucykobW9jayk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTW9ja0RpcmVjdGl2ZXMoLi4uZGlyZWN0aXZlczogQXJyYXk8VHlwZTxhbnk+Pik6IEFycmF5PFR5cGU8TW9ja2VkRGlyZWN0aXZlPGFueT4+PiB7XG4gIHJldHVybiBkaXJlY3RpdmVzLm1hcChNb2NrRGlyZWN0aXZlKTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pa2UxOHQvbmctbW9ja3MjaG93LXRvLW1vY2stYS1kaXJlY3RpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1vY2tEaXJlY3RpdmU8VERpcmVjdGl2ZT4oZGlyZWN0aXZlOiBUeXBlPFREaXJlY3RpdmU+KTogVHlwZTxNb2NrZWREaXJlY3RpdmU8VERpcmVjdGl2ZT4+IHtcbiAgLy8gV2UgYXJlIGluc2lkZSBvZiBhbiAnaXQnLlxuICAvLyBJdCdzIGZpbmUgdG8gdG8gcmV0dXJuIGEgbW9jayBjb3B5IG9yIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdCB3YXNuJ3QgcmVwbGFjZWQgd2l0aCBpdHMgbW9jayBjb3B5IGluIFRlc3RCZWQuXG4gIGlmICgoZ2V0VGVzdEJlZCgpIGFzIGFueSkuX2luc3RhbnRpYXRlZCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZ2V0TW9ja2VkTmdEZWZPZihkaXJlY3RpdmUsICdkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGxvb2tzIGxpa2UgYW4gaW4tdGVzdCBtb2NrLlxuICAgIH1cbiAgfVxuICBpZiAobmdNb2Nrc1VuaXZlcnNlLmZsYWdzLmhhcygnY2FjaGVEaXJlY3RpdmUnKSAmJiBuZ01vY2tzVW5pdmVyc2UuY2FjaGVEZWNsYXJhdGlvbnMuaGFzKGRpcmVjdGl2ZSkpIHtcbiAgICByZXR1cm4gbmdNb2Nrc1VuaXZlcnNlLmNhY2hlRGVjbGFyYXRpb25zLmdldChkaXJlY3RpdmUpO1xuICB9XG5cbiAgY29uc3QgbW9jayA9IGNyZWF0ZU1vY2tDbGFzcygpO1xuICBkZWNvcmF0ZUNsYXNzKGRpcmVjdGl2ZSwgbW9jayk7XG5cbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgaWYgKG5nTW9ja3NVbml2ZXJzZS5mbGFncy5oYXMoJ2NhY2hlRGlyZWN0aXZlJykpIHtcbiAgICBuZ01vY2tzVW5pdmVyc2UuY2FjaGVEZWNsYXJhdGlvbnMuc2V0KGRpcmVjdGl2ZSwgbW9jayk7XG4gIH1cblxuICByZXR1cm4gbW9jayBhcyBhbnk7XG59XG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1kaXJlY3RpdmUvbW9jay1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQWlIO0FBQ2pILGlEQUFtRDtBQUVuRCx1REFBcUQ7QUFDckQsMkZBQW1GO0FBRW5GLGlGQUF1RTtBQUN2RSxxRkFBbUY7QUFDbkYsaUVBQTBEO0FBQzFELHFFQUErRDtBQUkvRDtJQUFnQyxxQ0FBMEI7SUFDeEQsdUJBQXVCO0lBQ3ZCLDJCQUNFLFFBQWtCLEVBQ2xCLE9BQW9CLEVBQ3BCLFFBQTJCLEVBQzNCLGFBQWdDO1FBSmxDLFlBTUUsa0JBQU0sUUFBUSxDQUFDLFNBRWhCO1FBREMsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7O0lBQzFELENBQUM7SUFFTSxvQ0FBUSxHQUFmO1FBQ0UsSUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLGVBQXVCLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sRUFBRTtZQUNaLElBQUEsS0FDSixNQUFNLENBQUMsTUFBTSxLQUFLLElBQUk7Z0JBQ3BCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFDZixDQUFDLENBQUM7b0JBQ0UsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFNBQVMsRUFBRSxFQUFFO2lCQUNkLEVBTkMsU0FBUyxlQUFBLEVBQUUsU0FBUyxlQU1yQixDQUFDO1lBQ1AsSUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRU8sNENBQWdCLEdBQXhCLFVBQXlCLE9BQW9CLEVBQUUsUUFBMkIsRUFBRSxhQUFnQztRQUMxRyw0R0FBNEc7UUFDNUcscUZBQXFG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UyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRS9CLHVCQUF1QjtJQUN2QixJQUFJLDJCQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQy9DLDJCQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4RDtJQUVELE9BQU8sSUFBVyxDQUFDO0FBQ3JCLENBQUM7QUF2QkQsc0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3RvciwgT25Jbml0LCBPcHRpb25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFRlc3RCZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBleHRlbmRDbGFzcyB9IGZyb20gJy4uL2NvbW1vbi9jb3JlLmhlbHBlcnMnO1xuaW1wb3J0IGNvcmVSZWZsZWN0RGlyZWN0aXZlUmVzb2x2ZSBmcm9tICcuLi9jb21tb24vY29yZS5yZWZsZWN0LmRpcmVjdGl2ZS1yZXNvbHZlJztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuLi9jb21tb24vY29yZS50eXBlcyc7XG5pbXBvcnQgeyBnZXRNb2NrZWROZ0RlZk9mIH0gZnJvbSAnLi4vY29tbW9uL2Z1bmMuZ2V0LW1vY2tlZC1uZy1kZWYtb2YnO1xuaW1wb3J0IHsgTGVnYWN5Q29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi9jb21tb24vbW9jay1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcbmltcG9ydCBuZ01vY2tzVW5pdmVyc2UgZnJvbSAnLi4vY29tbW9uL25nLW1vY2tzLXVuaXZlcnNlJztcbmltcG9ydCBkZWNvcmF0ZURlY2xhcmF0aW9uIGZyb20gJy4uL21vY2svZGVjb3JhdGUtZGVjbGFyYXRpb24nO1xuXG5pbXBvcnQgeyBNb2NrZWREaXJlY3RpdmUgfSBmcm9tICcuL3R5cGVzJztcblxuY2xhc3MgRGlyZWN0aXZlTW9ja0Jhc2UgZXh0ZW5kcyBMZWdhY3lDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgZWxlbWVudD86IEVsZW1lbnRSZWYsXG4gICAgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHZpZXdDb250YWluZXI/OiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5fX25nTW9ja3NJbnN0YWxsKGVsZW1lbnQsIHRlbXBsYXRlLCB2aWV3Q29udGFpbmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSAodGhpcy5fX25nTW9ja3NDb25maWcgYXMgYW55KS5jb25maWc7XG4gICAgaWYgKGNvbmZpZz8ucmVuZGVyKSB7XG4gICAgICBjb25zdCB7ICRpbXBsaWNpdCwgdmFyaWFibGVzIH0gPVxuICAgICAgICBjb25maWcucmVuZGVyICE9PSB0cnVlXG4gICAgICAgICAgPyBjb25maWcucmVuZGVyXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB2YXJpYWJsZXM6IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICh0aGlzIGFzIGFueSkuX19yZW5kZXIoJGltcGxpY2l0LCB2YXJpYWJsZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX19uZ01vY2tzSW5zdGFsbChlbGVtZW50PzogRWxlbWVudFJlZiwgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+LCB2aWV3Q29udGFpbmVyPzogVmlld0NvbnRhaW5lclJlZik6IHZvaWQge1xuICAgIC8vIEJhc2ljYWxseSBhbnkgZGlyZWN0aXZlIG9uIG5nLXRlbXBsYXRlIGlzIHRyZWF0ZWQgYXMgc3RydWN0dXJhbCwgZXZlbiBpdCBkb2VzIG5vdCBjb250cm9sIHJlbmRlciBwcm9jZXNzLlxuICAgIC8vIEluIG91ciBjYXNlIHdlIGRvIG5vdCBpZiB3ZSBzaG91bGQgcmVuZGVyIGl0IG9yIG5vdCBhbmQgZHVlIHRvIHRoaXMgd2UgZG8gbm90aGluZy5cbiAgICAodGhpcyBhcyBhbnkpLl9fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgKHRoaXMgYXMgYW55KS5fX3RlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgKHRoaXMgYXMgYW55KS5fX3ZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICh0aGlzIGFzIGFueSkuX19pc1N0cnVjdHVyYWwgPSB0ZW1wbGF0ZSAmJiB2aWV3Q29udGFpbmVyO1xuXG4gICAgLy8gUHJvdmlkaW5nIG1ldGhvZCB0byByZW5kZXIgbW9jayB2YWx1ZXMuXG4gICAgKHRoaXMgYXMgYW55KS5fX3JlbmRlciA9ICgkaW1wbGljaXQ/OiBhbnksIHZhcmlhYmxlcz86IFJlY29yZDxrZXlvZiBhbnksIGFueT4pID0+IHtcbiAgICAgIGlmICh2aWV3Q29udGFpbmVyICYmIHRlbXBsYXRlKSB7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIHsgLi4udmFyaWFibGVzLCAkaW1wbGljaXQgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGlyZWN0aXZlTW9ja0Jhc2UsICdwYXJhbWV0ZXJzJywge1xuICB2YWx1ZTogW1tJbmplY3Rvcl0sIFtFbGVtZW50UmVmLCBuZXcgT3B0aW9uYWwoKV0sIFtUZW1wbGF0ZVJlZiwgbmV3IE9wdGlvbmFsKCldLCBbVmlld0NvbnRhaW5lclJlZiwgbmV3IE9wdGlvbmFsKCldXSxcbn0pO1xuXG5jb25zdCBkZWNvcmF0ZUNsYXNzID0gKGRpcmVjdGl2ZTogVHlwZTxhbnk+LCBtb2NrOiBUeXBlPGFueT4pOiB2b2lkID0+IHtcbiAgY29uc3QgbWV0YSA9IGNvcmVSZWZsZWN0RGlyZWN0aXZlUmVzb2x2ZShkaXJlY3RpdmUpO1xuICBjb25zdCB7IHNlbGVjdG9yLCBleHBvcnRBcywgaW5wdXRzLCBvdXRwdXRzLCBxdWVyaWVzLCBwcm92aWRlcnMgfSA9IG1ldGE7XG4gIGNvbnN0IG1vY2tNZXRhID0geyBpbnB1dHMsIG91dHB1dHMsIHByb3ZpZGVycywgcXVlcmllcyB9O1xuICBjb25zdCBtb2NrUGFyYW1zID0geyBleHBvcnRBcywgc2VsZWN0b3IgfTtcbiAgY29uc3Qgb3B0aW9ucyA9IGRlY29yYXRlRGVjbGFyYXRpb24oZGlyZWN0aXZlLCBtb2NrLCBtb2NrTWV0YSwgbW9ja1BhcmFtcyk7XG4gIERpcmVjdGl2ZShvcHRpb25zKShtb2NrKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2NrRGlyZWN0aXZlcyguLi5kaXJlY3RpdmVzOiBBcnJheTxUeXBlPGFueT4+KTogQXJyYXk8VHlwZTxNb2NrZWREaXJlY3RpdmU8YW55Pj4+IHtcbiAgcmV0dXJuIGRpcmVjdGl2ZXMubWFwKE1vY2tEaXJlY3RpdmUpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2lrZTE4dC9uZy1tb2NrcyNob3ctdG8tbW9jay1kaXJlY3RpdmVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNb2NrRGlyZWN0aXZlPFREaXJlY3RpdmU+KGRpcmVjdGl2ZTogVHlwZTxURGlyZWN0aXZlPik6IFR5cGU8TW9ja2VkRGlyZWN0aXZlPFREaXJlY3RpdmU+PiB7XG4gIC8vIFdlIGFyZSBpbnNpZGUgb2YgYW4gJ2l0Jy5cbiAgLy8gSXQgaXMgZmluZSB0byB0byByZXR1cm4gYSBtb2NrIGNvcHkgb3IgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0IHdhcyBub3QgcmVwbGFjZWQgd2l0aCBpdHMgbW9jayBjb3B5IGluIFRlc3RCZWQuXG4gIGlmICgoZ2V0VGVzdEJlZCgpIGFzIGFueSkuX2luc3RhbnRpYXRlZCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZ2V0TW9ja2VkTmdEZWZPZihkaXJlY3RpdmUsICdkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGxvb2tzIGxpa2UgYW4gaW4tdGVzdCBtb2NrLlxuICAgIH1cbiAgfVxuICBpZiAobmdNb2Nrc1VuaXZlcnNlLmZsYWdzLmhhcygnY2FjaGVEaXJlY3RpdmUnKSAmJiBuZ01vY2tzVW5pdmVyc2UuY2FjaGVEZWNsYXJhdGlvbnMuaGFzKGRpcmVjdGl2ZSkpIHtcbiAgICByZXR1cm4gbmdNb2Nrc1VuaXZlcnNlLmNhY2hlRGVjbGFyYXRpb25zLmdldChkaXJlY3RpdmUpO1xuICB9XG5cbiAgY29uc3QgbW9jayA9IGV4dGVuZENsYXNzKERpcmVjdGl2ZU1vY2tCYXNlKTtcbiAgZGVjb3JhdGVDbGFzcyhkaXJlY3RpdmUsIG1vY2spO1xuXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gIGlmIChuZ01vY2tzVW5pdmVyc2UuZmxhZ3MuaGFzKCdjYWNoZURpcmVjdGl2ZScpKSB7XG4gICAgbmdNb2Nrc1VuaXZlcnNlLmNhY2hlRGVjbGFyYXRpb25zLnNldChkaXJlY3RpdmUsIG1vY2spO1xuICB9XG5cbiAgcmV0dXJuIG1vY2sgYXMgYW55O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ declare const _default: () => void;
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
4
+ exports.default = (function () {
5
+ var _a;
6
+ ng_mocks_universe_1.default.cacheDeclarations.clear();
7
+ (_a = ng_mocks_universe_1.default.config.get('ngMocksDepsSkip')) === null || _a === void 0 ? void 0 : _a.clear();
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuYy5nbG9iYWwtcHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9tb2NrLWhlbHBlci9mdW5jLmdsb2JhbC1wcmVwYXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQTBEO0FBRTFELG1CQUFlOztJQUNiLDJCQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsTUFBQSwyQkFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsMENBQUUsS0FBSyxHQUFHO0FBQ3pELENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuZ01vY2tzVW5pdmVyc2UgZnJvbSAnLi4vY29tbW9uL25nLW1vY2tzLXVuaXZlcnNlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBuZ01vY2tzVW5pdmVyc2UuY2FjaGVEZWNsYXJhdGlvbnMuY2xlYXIoKTtcbiAgbmdNb2Nrc1VuaXZlcnNlLmNvbmZpZy5nZXQoJ25nTW9ja3NEZXBzU2tpcCcpPy5jbGVhcigpO1xufTtcbiJdfQ==
@@ -13,7 +13,7 @@ exports.default = (function (type) {
13
13
  if (action === 'jasmine') {
14
14
  return helper_mock_service_1.registerMockFunction(function (mockName) { return jasmine.createSpy(mockName); });
15
15
  }
16
- // istanbul ignore if: because it's run with jasmine
16
+ // istanbul ignore if: because it is run with jasmine
17
17
  if (action === 'jest') {
18
18
  return helper_mock_service_1.registerMockFunction(function (name) { return jest.fn().mockName(name); });
19
19
  }
@@ -22,4 +22,4 @@ exports.default = (function (type) {
22
22
  }
23
23
  return helper_mock_service_1.registerMockFunction(action);
24
24
  });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuYXV0by1zcHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuYXV0by1zcHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyRUFBMkU7QUFLM0UsSUFBTSxLQUFLLEdBQVksRUFBRSxDQUFDO0FBRTFCLG1CQUFlLFVBQUMsSUFBVztJQUN6QixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDcEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2I7U0FBTTtRQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEI7SUFDRCxJQUFNLE1BQU0sR0FBc0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE9BQU8sMENBQW9CLENBQUMsVUFBQSxRQUFRLElBQUksT0FBQSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUEzQixDQUEyQixDQUFDLENBQUM7S0FDdEU7SUFDRCxvREFBb0Q7SUFDcEQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQ3JCLE9BQU8sMENBQW9CLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUF4QixDQUF3QixDQUFDLENBQUM7S0FDL0Q7SUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtRQUN6RCxPQUFPLDBDQUFvQixFQUFFLENBQUM7S0FDL0I7SUFFRCxPQUFPLDBDQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyTW9ja0Z1bmN0aW9uIH0gZnJvbSAnLi4vbW9jay1zZXJ2aWNlL2hlbHBlci5tb2NrLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tTW9ja0Z1bmN0aW9uIH0gZnJvbSAnLi4vbW9jay1zZXJ2aWNlL3R5cGVzJztcblxudHlwZSBwYXJhbSA9ICdqYXNtaW5lJyB8ICdqZXN0JyB8ICdkZWZhdWx0JyB8ICdyZXNldCcgfCBDdXN0b21Nb2NrRnVuY3Rpb247XG5cbmNvbnN0IGNhbGxzOiBwYXJhbVtdID0gW107XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlOiBwYXJhbSkgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIGNhbGxzLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbGxzLnB1c2godHlwZSk7XG4gIH1cbiAgY29uc3QgYWN0aW9uOiBwYXJhbSB8IHVuZGVmaW5lZCA9IGNhbGxzW2NhbGxzLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChhY3Rpb24gPT09ICdqYXNtaW5lJykge1xuICAgIHJldHVybiByZWdpc3Rlck1vY2tGdW5jdGlvbihtb2NrTmFtZSA9PiBqYXNtaW5lLmNyZWF0ZVNweShtb2NrTmFtZSkpO1xuICB9XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZjogYmVjYXVzZSBpdCdzIHJ1biB3aXRoIGphc21pbmVcbiAgaWYgKGFjdGlvbiA9PT0gJ2plc3QnKSB7XG4gICAgcmV0dXJuIHJlZ2lzdGVyTW9ja0Z1bmN0aW9uKG5hbWUgPT4gamVzdC5mbigpLm1vY2tOYW1lKG5hbWUpKTtcbiAgfVxuICBpZiAoIWFjdGlvbiB8fCBhY3Rpb24gPT09ICdkZWZhdWx0JyB8fCBhY3Rpb24gPT09ICdyZXNldCcpIHtcbiAgICByZXR1cm4gcmVnaXN0ZXJNb2NrRnVuY3Rpb24oKTtcbiAgfVxuXG4gIHJldHVybiByZWdpc3Rlck1vY2tGdW5jdGlvbihhY3Rpb24pO1xufTtcbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuYXV0by1zcHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuYXV0by1zcHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyRUFBMkU7QUFLM0UsSUFBTSxLQUFLLEdBQVksRUFBRSxDQUFDO0FBRTFCLG1CQUFlLFVBQUMsSUFBVztJQUN6QixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDcEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2I7U0FBTTtRQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEI7SUFDRCxJQUFNLE1BQU0sR0FBc0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE9BQU8sMENBQW9CLENBQUMsVUFBQSxRQUFRLElBQUksT0FBQSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUEzQixDQUEyQixDQUFDLENBQUM7S0FDdEU7SUFDRCxxREFBcUQ7SUFDckQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQ3JCLE9BQU8sMENBQW9CLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUF4QixDQUF3QixDQUFDLENBQUM7S0FDL0Q7SUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtRQUN6RCxPQUFPLDBDQUFvQixFQUFFLENBQUM7S0FDL0I7SUFFRCxPQUFPLDBDQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyTW9ja0Z1bmN0aW9uIH0gZnJvbSAnLi4vbW9jay1zZXJ2aWNlL2hlbHBlci5tb2NrLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tTW9ja0Z1bmN0aW9uIH0gZnJvbSAnLi4vbW9jay1zZXJ2aWNlL3R5cGVzJztcblxudHlwZSBwYXJhbSA9ICdqYXNtaW5lJyB8ICdqZXN0JyB8ICdkZWZhdWx0JyB8ICdyZXNldCcgfCBDdXN0b21Nb2NrRnVuY3Rpb247XG5cbmNvbnN0IGNhbGxzOiBwYXJhbVtdID0gW107XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlOiBwYXJhbSkgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIGNhbGxzLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbGxzLnB1c2godHlwZSk7XG4gIH1cbiAgY29uc3QgYWN0aW9uOiBwYXJhbSB8IHVuZGVmaW5lZCA9IGNhbGxzW2NhbGxzLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChhY3Rpb24gPT09ICdqYXNtaW5lJykge1xuICAgIHJldHVybiByZWdpc3Rlck1vY2tGdW5jdGlvbihtb2NrTmFtZSA9PiBqYXNtaW5lLmNyZWF0ZVNweShtb2NrTmFtZSkpO1xuICB9XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZjogYmVjYXVzZSBpdCBpcyBydW4gd2l0aCBqYXNtaW5lXG4gIGlmIChhY3Rpb24gPT09ICdqZXN0Jykge1xuICAgIHJldHVybiByZWdpc3Rlck1vY2tGdW5jdGlvbihuYW1lID0+IGplc3QuZm4oKS5tb2NrTmFtZShuYW1lKSk7XG4gIH1cbiAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSAnZGVmYXVsdCcgfHwgYWN0aW9uID09PSAncmVzZXQnKSB7XG4gICAgcmV0dXJuIHJlZ2lzdGVyTW9ja0Z1bmN0aW9uKCk7XG4gIH1cblxuICByZXR1cm4gcmVnaXN0ZXJNb2NrRnVuY3Rpb24oYWN0aW9uKTtcbn07XG4iXX0=
@@ -116,6 +116,26 @@ export declare const ngMocks: {
116
116
  * @see https://github.com/ike18t/ng-mocks#ngmocksget
117
117
  */
118
118
  get<T, D>(debugNode: MockedDebugNode, directive: Type<T>, notFoundValue: D): D | T;
119
+ /**
120
+ * @see https://github.com/ike18t/ng-mocks#ngmocksglobalexclude
121
+ */
122
+ globalExclude(source: AnyType<any> | InjectionToken<any>): void;
123
+ /**
124
+ * @see https://github.com/ike18t/ng-mocks#ngmocksglobalkeep
125
+ */
126
+ globalKeep(source: AnyType<any> | InjectionToken<any>): void;
127
+ /**
128
+ * @see https://github.com/ike18t/ng-mocks#ngmocksglobalmock
129
+ */
130
+ globalMock(source: AnyType<any> | InjectionToken<any>): void;
131
+ /**
132
+ * @see https://github.com/ike18t/ng-mocks#ngmocksglobalreplace
133
+ */
134
+ globalReplace(source: AnyType<any>, destination: AnyType<any>): void;
135
+ /**
136
+ * @see https://github.com/ike18t/ng-mocks#ngmocksglobalwipe
137
+ */
138
+ globalWipe(source: AnyType<any> | InjectionToken<any>): void;
119
139
  /**
120
140
  * @see https://github.com/ike18t/ng-mocks#ngmocksguts
121
141
  */
@@ -148,4 +168,22 @@ export declare const ngMocks: {
148
168
  * @see https://github.com/ike18t/ng-mocks#ngmocksstub
149
169
  */
150
170
  stub<I extends object>(instance: I, overrides: Partial<I>): I;
171
+ /**
172
+ * @see https://github.com/ike18t/ng-mocks#ngmocksstubmember
173
+ */
174
+ stubMember<T extends object, K extends keyof T, S extends () => T[K]>(instance: T, name: K, stub: S, encapsulation: 'get'): S;
175
+ /**
176
+ * @see https://github.com/ike18t/ng-mocks#ngmocksstubmember
177
+ */
178
+ stubMember<T extends object, K extends keyof T, S extends (value: T[K]) => void>(instance: T, name: K, stub: S, encapsulation: 'set'): S;
179
+ /**
180
+ * @see https://github.com/ike18t/ng-mocks#ngmocksstubmember
181
+ */
182
+ stubMember<T extends object, K extends keyof T, S extends T[K]>(instance: T, name: K, stub: S): S;
183
+ /**
184
+ * Thanks Ivy, it does not throw an error and we have to use injector.
185
+ *
186
+ * @see https://github.com/ike18t/ng-mocks#ngmocksthrowonconsole
187
+ */
188
+ throwOnConsole(): void;
151
189
  };
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AnyType } from '../common/core.types';
3
+ declare const _default: (source: AnyType<any> | InjectionToken<any>) => void;
4
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
4
+ var func_global_prepare_1 = require("./func.global-prepare");
5
+ exports.default = (function (source) {
6
+ func_global_prepare_1.default();
7
+ ng_mocks_universe_1.default.getDefaults().set(source, ['exclude']);
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ2xvYmFsLWV4Y2x1ZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuZ2xvYmFsLWV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxpRUFBMEQ7QUFFMUQsNkRBQXNEO0FBRXRELG1CQUFlLFVBQUMsTUFBMEM7SUFDeEQsNkJBQWlCLEVBQUUsQ0FBQztJQUNwQiwyQkFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFueVR5cGUgfSBmcm9tICcuLi9jb21tb24vY29yZS50eXBlcyc7XG5pbXBvcnQgbmdNb2Nrc1VuaXZlcnNlIGZyb20gJy4uL2NvbW1vbi9uZy1tb2Nrcy11bml2ZXJzZSc7XG5cbmltcG9ydCBmdW5jR2xvYmFsUHJlcGFyZSBmcm9tICcuL2Z1bmMuZ2xvYmFsLXByZXBhcmUnO1xuXG5leHBvcnQgZGVmYXVsdCAoc291cmNlOiBBbnlUeXBlPGFueT4gfCBJbmplY3Rpb25Ub2tlbjxhbnk+KTogdm9pZCA9PiB7XG4gIGZ1bmNHbG9iYWxQcmVwYXJlKCk7XG4gIG5nTW9ja3NVbml2ZXJzZS5nZXREZWZhdWx0cygpLnNldChzb3VyY2UsIFsnZXhjbHVkZSddKTtcbn07XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AnyType } from '../common/core.types';
3
+ declare const _default: (source: AnyType<any> | InjectionToken<any>) => void;
4
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
4
+ var func_global_prepare_1 = require("./func.global-prepare");
5
+ exports.default = (function (source) {
6
+ func_global_prepare_1.default();
7
+ ng_mocks_universe_1.default.getDefaults().set(source, ['keep']);
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ2xvYmFsLWtlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuZ2xvYmFsLWtlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxpRUFBMEQ7QUFFMUQsNkRBQXNEO0FBRXRELG1CQUFlLFVBQUMsTUFBMEM7SUFDeEQsNkJBQWlCLEVBQUUsQ0FBQztJQUNwQiwyQkFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFueVR5cGUgfSBmcm9tICcuLi9jb21tb24vY29yZS50eXBlcyc7XG5pbXBvcnQgbmdNb2Nrc1VuaXZlcnNlIGZyb20gJy4uL2NvbW1vbi9uZy1tb2Nrcy11bml2ZXJzZSc7XG5cbmltcG9ydCBmdW5jR2xvYmFsUHJlcGFyZSBmcm9tICcuL2Z1bmMuZ2xvYmFsLXByZXBhcmUnO1xuXG5leHBvcnQgZGVmYXVsdCAoc291cmNlOiBBbnlUeXBlPGFueT4gfCBJbmplY3Rpb25Ub2tlbjxhbnk+KTogdm9pZCA9PiB7XG4gIGZ1bmNHbG9iYWxQcmVwYXJlKCk7XG4gIG5nTW9ja3NVbml2ZXJzZS5nZXREZWZhdWx0cygpLnNldChzb3VyY2UsIFsna2VlcCddKTtcbn07XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AnyType } from '../common/core.types';
3
+ declare const _default: (source: AnyType<any> | InjectionToken<any>) => void;
4
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
4
+ var func_global_prepare_1 = require("./func.global-prepare");
5
+ exports.default = (function (source) {
6
+ func_global_prepare_1.default();
7
+ ng_mocks_universe_1.default.getDefaults().set(source, ['mock']);
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ2xvYmFsLW1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuZ2xvYmFsLW1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxpRUFBMEQ7QUFFMUQsNkRBQXNEO0FBRXRELG1CQUFlLFVBQUMsTUFBMEM7SUFDeEQsNkJBQWlCLEVBQUUsQ0FBQztJQUNwQiwyQkFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFueVR5cGUgfSBmcm9tICcuLi9jb21tb24vY29yZS50eXBlcyc7XG5pbXBvcnQgbmdNb2Nrc1VuaXZlcnNlIGZyb20gJy4uL2NvbW1vbi9uZy1tb2Nrcy11bml2ZXJzZSc7XG5cbmltcG9ydCBmdW5jR2xvYmFsUHJlcGFyZSBmcm9tICcuL2Z1bmMuZ2xvYmFsLXByZXBhcmUnO1xuXG5leHBvcnQgZGVmYXVsdCAoc291cmNlOiBBbnlUeXBlPGFueT4gfCBJbmplY3Rpb25Ub2tlbjxhbnk+KTogdm9pZCA9PiB7XG4gIGZ1bmNHbG9iYWxQcmVwYXJlKCk7XG4gIG5nTW9ja3NVbml2ZXJzZS5nZXREZWZhdWx0cygpLnNldChzb3VyY2UsIFsnbW9jayddKTtcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { AnyType } from '../common/core.types';
2
+ declare const _default: (source: AnyType<any>, destination: AnyType<any>) => void;
3
+ export default _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var func_is_ng_def_1 = require("../common/func.is-ng-def");
4
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
5
+ var func_global_prepare_1 = require("./func.global-prepare");
6
+ exports.default = (function (source, destination) {
7
+ var fail = true;
8
+ if (func_is_ng_def_1.isNgDef(source, 'm') && func_is_ng_def_1.isNgDef(destination, 'm')) {
9
+ fail = false;
10
+ }
11
+ else if (func_is_ng_def_1.isNgDef(source, 'c') && func_is_ng_def_1.isNgDef(destination, 'c')) {
12
+ fail = false;
13
+ }
14
+ else if (func_is_ng_def_1.isNgDef(source, 'd') && func_is_ng_def_1.isNgDef(destination, 'd')) {
15
+ fail = false;
16
+ }
17
+ else if (func_is_ng_def_1.isNgDef(source, 'p') && func_is_ng_def_1.isNgDef(destination, 'p')) {
18
+ fail = false;
19
+ }
20
+ if (fail) {
21
+ throw new Error('Cannot replace the declaration, both have to be a Module, a Component, a Directive or a Pipe');
22
+ }
23
+ func_global_prepare_1.default();
24
+ ng_mocks_universe_1.default.getDefaults().set(source, ['replace', destination]);
25
+ });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ2xvYmFsLXJlcGxhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuZ2xvYmFsLXJlcGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwyREFBbUQ7QUFDbkQsaUVBQTBEO0FBRTFELDZEQUFzRDtBQUV0RCxtQkFBZSxVQUFDLE1BQW9CLEVBQUUsV0FBeUI7SUFDN0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLElBQUksd0JBQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksd0JBQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDckQsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUNkO1NBQU0sSUFBSSx3QkFBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSx3QkFBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUM1RCxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLHdCQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLHdCQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQzVELElBQUksR0FBRyxLQUFLLENBQUM7S0FDZDtTQUFNLElBQUksd0JBQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksd0JBQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDNUQsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxJQUFJLEVBQUU7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLDhGQUE4RixDQUFDLENBQUM7S0FDakg7SUFFRCw2QkFBaUIsRUFBRSxDQUFDO0lBQ3BCLDJCQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueVR5cGUgfSBmcm9tICcuLi9jb21tb24vY29yZS50eXBlcyc7XG5pbXBvcnQgeyBpc05nRGVmIH0gZnJvbSAnLi4vY29tbW9uL2Z1bmMuaXMtbmctZGVmJztcbmltcG9ydCBuZ01vY2tzVW5pdmVyc2UgZnJvbSAnLi4vY29tbW9uL25nLW1vY2tzLXVuaXZlcnNlJztcblxuaW1wb3J0IGZ1bmNHbG9iYWxQcmVwYXJlIGZyb20gJy4vZnVuYy5nbG9iYWwtcHJlcGFyZSc7XG5cbmV4cG9ydCBkZWZhdWx0IChzb3VyY2U6IEFueVR5cGU8YW55PiwgZGVzdGluYXRpb246IEFueVR5cGU8YW55Pik6IHZvaWQgPT4ge1xuICBsZXQgZmFpbCA9IHRydWU7XG4gIGlmIChpc05nRGVmKHNvdXJjZSwgJ20nKSAmJiBpc05nRGVmKGRlc3RpbmF0aW9uLCAnbScpKSB7XG4gICAgZmFpbCA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzTmdEZWYoc291cmNlLCAnYycpICYmIGlzTmdEZWYoZGVzdGluYXRpb24sICdjJykpIHtcbiAgICBmYWlsID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNOZ0RlZihzb3VyY2UsICdkJykgJiYgaXNOZ0RlZihkZXN0aW5hdGlvbiwgJ2QnKSkge1xuICAgIGZhaWwgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc05nRGVmKHNvdXJjZSwgJ3AnKSAmJiBpc05nRGVmKGRlc3RpbmF0aW9uLCAncCcpKSB7XG4gICAgZmFpbCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGZhaWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXBsYWNlIHRoZSBkZWNsYXJhdGlvbiwgYm90aCBoYXZlIHRvIGJlIGEgTW9kdWxlLCBhIENvbXBvbmVudCwgYSBEaXJlY3RpdmUgb3IgYSBQaXBlJyk7XG4gIH1cblxuICBmdW5jR2xvYmFsUHJlcGFyZSgpO1xuICBuZ01vY2tzVW5pdmVyc2UuZ2V0RGVmYXVsdHMoKS5zZXQoc291cmNlLCBbJ3JlcGxhY2UnLCBkZXN0aW5hdGlvbl0pO1xufTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AnyType } from '../common/core.types';
3
+ declare const _default: (source: AnyType<any> | InjectionToken<any>) => void;
4
+ export default _default;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
4
+ var func_global_prepare_1 = require("./func.global-prepare");
5
+ var mock_helper_default_mock_1 = require("./mock-helper.default-mock");
6
+ exports.default = (function (source) {
7
+ func_global_prepare_1.default();
8
+ ng_mocks_universe_1.default.getDefaults().delete(source);
9
+ mock_helper_default_mock_1.default(source);
10
+ });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ2xvYmFsLXdpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvbW9jay1oZWxwZXIvbW9jay1oZWxwZXIuZ2xvYmFsLXdpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxpRUFBMEQ7QUFFMUQsNkRBQXNEO0FBQ3RELHVFQUErRDtBQUUvRCxtQkFBZSxVQUFDLE1BQTBDO0lBQ3hELDZCQUFpQixFQUFFLENBQUM7SUFDcEIsMkJBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0Msa0NBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQW55VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9jb3JlLnR5cGVzJztcbmltcG9ydCBuZ01vY2tzVW5pdmVyc2UgZnJvbSAnLi4vY29tbW9uL25nLW1vY2tzLXVuaXZlcnNlJztcblxuaW1wb3J0IGZ1bmNHbG9iYWxQcmVwYXJlIGZyb20gJy4vZnVuYy5nbG9iYWwtcHJlcGFyZSc7XG5pbXBvcnQgbW9ja0hlbHBlckRlZmF1bHRNb2NrIGZyb20gJy4vbW9jay1oZWxwZXIuZGVmYXVsdC1tb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgKHNvdXJjZTogQW55VHlwZTxhbnk+IHwgSW5qZWN0aW9uVG9rZW48YW55Pik6IHZvaWQgPT4ge1xuICBmdW5jR2xvYmFsUHJlcGFyZSgpO1xuICBuZ01vY2tzVW5pdmVyc2UuZ2V0RGVmYXVsdHMoKS5kZWxldGUoc291cmNlKTtcbiAgbW9ja0hlbHBlckRlZmF1bHRNb2NrKHNvdXJjZSk7XG59O1xuIl19
@@ -33,6 +33,7 @@ var func_get_provider_1 = require("../common/func.get-provider");
33
33
  var func_is_ng_def_1 = require("../common/func.is-ng-def");
34
34
  var func_is_ng_injection_token_1 = require("../common/func.is-ng-injection-token");
35
35
  var func_is_ng_module_def_with_providers_1 = require("../common/func.is-ng-module-def-with-providers");
36
+ var ng_mocks_universe_1 = require("../common/ng-mocks-universe");
36
37
  var mock_component_1 = require("../mock-component/mock-component");
37
38
  var mock_directive_1 = require("../mock-directive/mock-directive");
38
39
  var mock_module_1 = require("../mock-module/mock-module");
@@ -45,28 +46,32 @@ var skipDef = function (def, skip, exclude) {
45
46
  skip.add(def);
46
47
  return exclude.has(def);
47
48
  };
49
+ var createMetaHandler = function (optional, proto, imports, declarations, providers) {
50
+ var def = optional.get(proto) || proto;
51
+ if (func_is_ng_def_1.isNgDef(def, 'm')) {
52
+ imports.push(def);
53
+ }
54
+ else if (func_is_ng_def_1.isNgDef(def, 'c') || func_is_ng_def_1.isNgDef(def, 'd')) {
55
+ declarations.push(def);
56
+ }
57
+ else if (func_is_ng_def_1.isNgDef(def, 'p')) {
58
+ declarations.push(def);
59
+ providers.push(def);
60
+ }
61
+ else if (!func_is_ng_injection_token_1.isNgInjectionToken(def)) {
62
+ providers.push(def);
63
+ }
64
+ };
48
65
  var createMeta = function (_a) {
49
66
  var e_1, _b;
50
- var keep = _a.keep, skip = _a.skip, exclude = _a.exclude, imports = _a.imports, declarations = _a.declarations, providers = _a.providers;
67
+ var keep = _a.keep, skip = _a.skip, optional = _a.optional, exclude = _a.exclude, imports = _a.imports, declarations = _a.declarations, providers = _a.providers;
51
68
  try {
52
69
  for (var keep_1 = __values(keep), keep_1_1 = keep_1.next(); !keep_1_1.done; keep_1_1 = keep_1.next()) {
53
- var def = keep_1_1.value;
54
- if (skip.has(def) || exclude.has(def)) {
70
+ var proto = keep_1_1.value;
71
+ if (skip.has(proto) || exclude.has(proto) || optional.has(proto)) {
55
72
  continue;
56
73
  }
57
- if (func_is_ng_def_1.isNgDef(def, 'm')) {
58
- imports.push(def);
59
- }
60
- else if (func_is_ng_def_1.isNgDef(def, 'c') || func_is_ng_def_1.isNgDef(def, 'd')) {
61
- declarations.push(def);
62
- }
63
- else if (func_is_ng_def_1.isNgDef(def, 'p')) {
64
- declarations.push(def);
65
- providers.push(def);
66
- }
67
- else if (!func_is_ng_injection_token_1.isNgInjectionToken(def)) {
68
- providers.push(def);
69
- }
74
+ createMetaHandler(optional, proto, imports, declarations, providers);
70
75
  }
71
76
  }
72
77
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -172,17 +177,12 @@ var resolveMap = {
172
177
  directive: mock_directive_1.MockDirective,
173
178
  pipe: mock_pipe_1.MockPipe,
174
179
  };
175
- var resolve = function (data, def, skipDestruction) {
176
- if (skipDestruction === void 0) { skipDestruction = true; }
177
- if (!def) {
178
- return;
179
- }
180
- var type = getType(def, data.keep);
180
+ var resolveHandler = function (data, type, def, skipDestruction) {
181
181
  if (type === 'module-with-providers') {
182
182
  handleModuleWithProviders(data, def);
183
183
  }
184
184
  else if (type === 'module-keep') {
185
- handleDeclaration(data, def, mock_module_1.MockModule, data.imports); // MockModule won't be called because the def is kept.
185
+ handleDeclaration(data, def, mock_module_1.MockModule, data.imports); // MockModule will not be called because the def is kept.
186
186
  }
187
187
  else if (type === 'module' && skipDestruction) {
188
188
  handleDeclaration(data, def, mock_module_1.MockModule, data.imports);
@@ -197,33 +197,96 @@ var resolve = function (data, def, skipDestruction) {
197
197
  resolveProvider(data, def);
198
198
  }
199
199
  };
200
- var generateData = function (keep, mock, exclude) { return ({
201
- declarations: [],
202
- exclude: new Set(core_helpers_1.flatten(exclude || [])),
203
- imports: [],
204
- keep: new Set(core_helpers_1.flatten(keep || [])),
205
- mock: new Set(core_helpers_1.flatten(mock || [])),
206
- providers: [],
207
- skip: new Set(),
208
- }); };
209
- exports.default = (function (keep, mock, exclude) {
200
+ var resolve = function (data, proto, skipDestruction) {
201
+ if (skipDestruction === void 0) { skipDestruction = true; }
202
+ if (!proto) {
203
+ return;
204
+ }
205
+ var type = getType(proto, data.keep);
206
+ var def;
207
+ // an attempt to replace declarations.
208
+ if (type !== 'module-with-providers') {
209
+ var value = data.optional.get(proto);
210
+ if (value && value !== proto) {
211
+ def = value;
212
+ data.keep.add(def);
213
+ }
214
+ }
215
+ if (!def) {
216
+ def = proto;
217
+ }
218
+ resolveHandler(data, type, def, skipDestruction);
219
+ };
220
+ var generateDataWithUniverse = function (keep, mock, exclude, optional) {
210
221
  var e_5, _a;
222
+ try {
223
+ for (var _b = __values(core_helpers_1.mapKeys(ng_mocks_universe_1.default.getDefaults())), _c = _b.next(); !_c.done; _c = _b.next()) {
224
+ var k = _c.value;
225
+ var v = ng_mocks_universe_1.default.getBuildDeclaration(k);
226
+ if (keep.has(k) || mock.has(k) || exclude.has(k)) {
227
+ continue;
228
+ }
229
+ optional.set(k, v);
230
+ if (v === null) {
231
+ exclude.add(k);
232
+ }
233
+ else if (v === undefined) {
234
+ mock.add(k);
235
+ }
236
+ else if (k === v) {
237
+ keep.add(k);
238
+ }
239
+ }
240
+ }
241
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
242
+ finally {
243
+ try {
244
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
245
+ }
246
+ finally { if (e_5) throw e_5.error; }
247
+ }
248
+ };
249
+ var generateData = function (protoKeep, protoMock, protoExclude) {
250
+ var keep = new Set(core_helpers_1.flatten(protoKeep || []));
251
+ var mock = new Set(core_helpers_1.flatten(protoMock || []));
252
+ var exclude = new Set(core_helpers_1.flatten(protoExclude || []));
253
+ var optional = new Map();
254
+ generateDataWithUniverse(keep, mock, exclude, optional);
255
+ return {
256
+ declarations: [],
257
+ exclude: exclude,
258
+ imports: [],
259
+ keep: keep,
260
+ mock: mock,
261
+ optional: optional,
262
+ providers: [],
263
+ skip: new Set(),
264
+ };
265
+ };
266
+ exports.default = (function (keep, mock, exclude) {
267
+ var e_6, _a;
211
268
  if (mock === void 0) { mock = null; }
212
269
  if (exclude === void 0) { exclude = null; }
213
270
  var data = generateData(keep, mock, exclude);
271
+ ng_mocks_universe_1.default.config.set('mockNgDefResolver', new Map());
214
272
  try {
215
273
  for (var _b = __values(core_helpers_1.mapValues(data.mock)), _c = _b.next(); !_c.done; _c = _b.next()) {
216
274
  var def = _c.value;
275
+ if (data.optional.has(def)) {
276
+ continue;
277
+ }
217
278
  resolve(data, def, false);
218
279
  }
219
280
  }
220
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
281
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
221
282
  finally {
222
283
  try {
223
284
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
224
285
  }
225
- finally { if (e_5) throw e_5.error; }
286
+ finally { if (e_6) throw e_6.error; }
226
287
  }
227
- return createMeta(data);
288
+ var meta = createMeta(data);
289
+ ng_mocks_universe_1.default.config.delete('mockNgDefResolver');
290
+ return meta;
228
291
  });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ3V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9tb2NrLWhlbHBlci9tb2NrLWhlbHBlci5ndXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsdURBQTREO0FBQzVELHFGQUE2RTtBQUM3RSxpRUFBMEQ7QUFDMUQsMkRBQW1EO0FBQ25ELG1GQUEwRTtBQUMxRSx1R0FBNEY7QUFDNUYsbUVBQWlFO0FBQ2pFLG1FQUFpRTtBQUNqRSwwREFBd0Q7QUFDeEQsb0RBQWtEO0FBQ2xELCtEQUF5RDtBQVl6RCxJQUFNLE9BQU8sR0FBRyxVQUFDLEdBQVEsRUFBRSxJQUFjLEVBQUUsT0FBaUI7SUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLElBQU0sVUFBVSxHQUFHLFVBQUMsRUFBK0Q7O1FBQTdELElBQUksVUFBQSxFQUFFLElBQUksVUFBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLFlBQVksa0JBQUEsRUFBRSxTQUFTLGVBQUE7O1FBQ3pFLEtBQWtCLElBQUEsU0FBQSxTQUFBLElBQUksQ0FBQSwwQkFBQSw0Q0FBRTtZQUFuQixJQUFNLEdBQUcsaUJBQUE7WUFDWixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckMsU0FBUzthQUNWO1lBQ0QsSUFBSSx3QkFBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDckIsT0FBTyxDQUFDLElBQUks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ZXRhZGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5cbmltcG9ydCB7IGZsYXR0ZW4sIG1hcFZhbHVlcyB9IGZyb20gJy4uL2NvbW1vbi9jb3JlLmhlbHBlcnMnO1xuaW1wb3J0IGNvcmVSZWZsZWN0TW9kdWxlUmVzb2x2ZSBmcm9tICcuLi9jb21tb24vY29yZS5yZWZsZWN0Lm1vZHVsZS1yZXNvbHZlJztcbmltcG9ydCBmdW5jR2V0UHJvdmlkZXIgZnJvbSAnLi4vY29tbW9uL2Z1bmMuZ2V0LXByb3ZpZGVyJztcbmltcG9ydCB7IGlzTmdEZWYgfSBmcm9tICcuLi9jb21tb24vZnVuYy5pcy1uZy1kZWYnO1xuaW1wb3J0IHsgaXNOZ0luamVjdGlvblRva2VuIH0gZnJvbSAnLi4vY29tbW9uL2Z1bmMuaXMtbmctaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7IGlzTmdNb2R1bGVEZWZXaXRoUHJvdmlkZXJzIH0gZnJvbSAnLi4vY29tbW9uL2Z1bmMuaXMtbmctbW9kdWxlLWRlZi13aXRoLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBNb2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9jay1jb21wb25lbnQvbW9jay1jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9ja0RpcmVjdGl2ZSB9IGZyb20gJy4uL21vY2stZGlyZWN0aXZlL21vY2stZGlyZWN0aXZlJztcbmltcG9ydCB7IE1vY2tNb2R1bGUgfSBmcm9tICcuLi9tb2NrLW1vZHVsZS9tb2NrLW1vZHVsZSc7XG5pbXBvcnQgeyBNb2NrUGlwZSB9IGZyb20gJy4uL21vY2stcGlwZS9tb2NrLXBpcGUnO1xuaW1wb3J0IG1vY2tQcm92aWRlciBmcm9tICcuLi9tb2NrLXNlcnZpY2UvbW9jay1wcm92aWRlcic7XG5cbnR5cGUgRGF0YSA9IHtcbiAgZGVjbGFyYXRpb25zOiBhbnlbXTtcbiAgZXhjbHVkZTogU2V0PGFueT47XG4gIGltcG9ydHM6IGFueVtdO1xuICBrZWVwOiBTZXQ8YW55PjtcbiAgbW9jazogU2V0PGFueT47XG4gIHByb3ZpZGVyczogYW55W107XG4gIHNraXA6IFNldDxhbnk+O1xufTtcblxuY29uc3Qgc2tpcERlZiA9IChkZWY6IGFueSwgc2tpcDogU2V0PGFueT4sIGV4Y2x1ZGU6IFNldDxhbnk+KTogYm9vbGVhbiA9PiB7XG4gIGlmIChza2lwLmhhcyhkZWYpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc2tpcC5hZGQoZGVmKTtcblxuICByZXR1cm4gZXhjbHVkZS5oYXMoZGVmKTtcbn07XG5cbmNvbnN0IGNyZWF0ZU1ldGEgPSAoeyBrZWVwLCBza2lwLCBleGNsdWRlLCBpbXBvcnRzLCBkZWNsYXJhdGlvbnMsIHByb3ZpZGVycyB9OiBEYXRhKTogVGVzdE1vZHVsZU1ldGFkYXRhID0+IHtcbiAgZm9yIChjb25zdCBkZWYgb2Yga2VlcCkge1xuICAgIGlmIChza2lwLmhhcyhkZWYpIHx8IGV4Y2x1ZGUuaGFzKGRlZikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNOZ0RlZihkZWYsICdtJykpIHtcbiAgICAgIGltcG9ydHMucHVzaChkZWYpO1xuICAgIH0gZWxzZSBpZiAoaXNOZ0RlZihkZWYsICdjJykgfHwgaXNOZ0RlZihkZWYsICdkJykpIHtcbiAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKGRlZik7XG4gICAgfSBlbHNlIGlmIChpc05nRGVmKGRlZiwgJ3AnKSkge1xuICAgICAgZGVjbGFyYXRpb25zLnB1c2goZGVmKTtcbiAgICAgIHByb3ZpZGVycy5wdXNoKGRlZik7XG4gICAgfSBlbHNlIGlmICghaXNOZ0luamVjdGlvblRva2VuKGRlZikpIHtcbiAgICAgIHByb3ZpZGVycy5wdXNoKGRlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZGVjbGFyYXRpb25zLCBpbXBvcnRzLCBwcm92aWRlcnMgfTtcbn07XG5cbmNvbnN0IHR5cGVNYXA6IEFycmF5PFthbnksIHN0cmluZ10+ID0gW1xuICBbJ20nLCAnbW9kdWxlJ10sXG4gIFsnYycsICdjb21wb25lbnQnXSxcbiAgWydkJywgJ2RpcmVjdGl2ZSddLFxuICBbJ3AnLCAncGlwZSddLFxuXTtcblxuY29uc3QgZ2V0VHlwZSA9IChkZWY6IGFueSwga2VlcDogU2V0PGFueT4pOiBzdHJpbmcgPT4ge1xuICBpZiAoaXNOZ01vZHVsZURlZldpdGhQcm92aWRlcnMoZGVmKSkge1xuICAgIHJldHVybiAnbW9kdWxlLXdpdGgtcHJvdmlkZXJzJztcbiAgfVxuICBmb3IgKGNvbnN0IFtmbGFnLCB2YWx1ZV0gb2YgdHlwZU1hcCkge1xuICAgIGlmIChpc05nRGVmKGRlZiwgZmxhZykpIHtcbiAgICAgIHJldHVybiBmbGFnID09PSAnbScgJiYga2VlcC5oYXMoZGVmKSA/IGAke3ZhbHVlfS1rZWVwYCA6IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbmNvbnN0IGhhbmRsZU1vZHVsZVdpdGhQcm92aWRlcnMgPSAoZGF0YTogRGF0YSwgZGVmOiBhbnkpOiB2b2lkID0+IHtcbiAgaWYgKGRhdGEuc2tpcC5oYXMoZGVmLm5nTW9kdWxlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkYXRhLnNraXAuYWRkKGRlZi5uZ01vZHVsZSk7XG4gIGlmIChkYXRhLmV4Y2x1ZGUuaGFzKGRlZi5uZ01vZHVsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkYXRhLmltcG9ydHMucHVzaChkYXRhLmtlZXAuaGFzKGRlZi5uZ01vZHVsZSkgPyBkZWYgOiBNb2NrTW9kdWxlKGRlZikpO1xufTtcblxuY29uc3QgaGFuZGxlRGVjbGFyYXRpb24gPSAoZGF0YTogRGF0YSwgZGVmOiBhbnksIGNhbGxiYWNrOiBhbnksIGJ1Y2tldDogYW55W10pOiB2b2lkID0+IHtcbiAgaWYgKHNraXBEZWYoZGVmLCBkYXRhLnNraXAsIGRhdGEuZXhjbHVkZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBidWNrZXQucHVzaChkYXRhLmtlZXAuaGFzKGRlZikgPyBkZWYgOiBjYWxsYmFjayhkZWYpKTtcbn07XG5cbmNvbnN0IGhhbmRsZURlc3RydWN0dXJpbmcgPSAoZGF0YTogRGF0YSwgZGVmOiBhbnksIGNhbGxiYWNrOiBhbnkpOiB2b2lkID0+IHtcbiAgaWYgKHNraXBEZWYoZGVmLCBkYXRhLnNraXAsIGRhdGEuZXhjbHVkZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtZXRhID0gY29yZVJlZmxlY3RNb2R1bGVSZXNvbHZlKGRlZik7XG4gIGZvciAoY29uc3QgdG9Nb2NrIG9mIGZsYXR0ZW4oW21ldGEuZGVjbGFyYXRpb25zLCBtZXRhLmltcG9ydHNdKSkge1xuICAgIGNhbGxiYWNrKGRhdGEsIHRvTW9jayk7XG4gIH1cbiAgZm9yIChjb25zdCB0b01vY2sgb2YgbWV0YS5wcm92aWRlcnMgPyBmbGF0dGVuKG1ldGEucHJvdmlkZXJzKSA6IFtdKSB7XG4gICAgcmVzb2x2ZVByb3ZpZGVyKGRhdGEsIHRvTW9jayk7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVQcm92aWRlciA9ICh7IHNraXAsIGtlZXAsIHByb3ZpZGVycywgZXhjbHVkZSB9OiBEYXRhLCBkZWY6IGFueSk6IHZvaWQgPT4ge1xuICBjb25zdCBwcm92aWRlciA9IGZ1bmNHZXRQcm92aWRlcihkZWYpO1xuICBza2lwLmFkZChwcm92aWRlcik7XG4gIGlmIChleGNsdWRlLmhhcyhwcm92aWRlcikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm92aWRlckRlZiA9IGtlZXAuaGFzKHByb3ZpZGVyKSA/IGRlZiA6IG1vY2tQcm92aWRlcihkZWYpO1xuICBpZiAocHJvdmlkZXJEZWYpIHtcbiAgICBwcm92aWRlcnMucHVzaChwcm92aWRlckRlZik7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gIGNvbXBvbmVudDogTW9ja0NvbXBvbmVudCxcbiAgZGlyZWN0aXZlOiBNb2NrRGlyZWN0aXZlLFxuICBwaXBlOiBNb2NrUGlwZSxcbn07XG5cbmNvbnN0IHJlc29sdmUgPSAoZGF0YTogRGF0YSwgZGVmOiBhbnksIHNraXBEZXN0cnVjdGlvbiA9IHRydWUpOiB2b2lkID0+IHtcbiAgaWYgKCFkZWYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlID0gZ2V0VHlwZShkZWYsIGRhdGEua2VlcCk7XG5cbiAgaWYgKHR5cGUgPT09ICdtb2R1bGUtd2l0aC1wcm92aWRlcnMnKSB7XG4gICAgaGFuZGxlTW9kdWxlV2l0aFByb3ZpZGVycyhkYXRhLCBkZWYpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb2R1bGUta2VlcCcpIHtcbiAgICBoYW5kbGVEZWNsYXJhdGlvbihkYXRhLCBkZWYsIE1vY2tNb2R1bGUsIGRhdGEuaW1wb3J0cyk7IC8vIE1vY2tNb2R1bGUgd29uJ3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhlIGRlZiBpcyBrZXB0LlxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb2R1bGUnICYmIHNraXBEZXN0cnVjdGlvbikge1xuICAgIGhhbmRsZURlY2xhcmF0aW9uKGRhdGEsIGRlZiwgTW9ja01vZHVsZSwgZGF0YS5pbXBvcnRzKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbW9kdWxlJykge1xuICAgIGhhbmRsZURlc3RydWN0dXJpbmcoZGF0YSwgZGVmLCByZXNvbHZlKTtcbiAgfSBlbHNlIGlmIChyZXNvbHZlTWFwW3R5cGVdKSB7XG4gICAgaGFuZGxlRGVjbGFyYXRpb24oZGF0YSwgZGVmLCByZXNvbHZlTWFwW3R5cGVdLCBkYXRhLmRlY2xhcmF0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzb2x2ZVByb3ZpZGVyKGRhdGEsIGRlZik7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlRGF0YSA9IChrZWVwOiBhbnksIG1vY2s6IGFueSwgZXhjbHVkZTogYW55KTogRGF0YSA9PiAoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBleGNsdWRlOiBuZXcgU2V0KGZsYXR0ZW4oZXhjbHVkZSB8fCBbXSkpLFxuICBpbXBvcnRzOiBbXSxcbiAga2VlcDogbmV3IFNldChmbGF0dGVuKGtlZXAgfHwgW10pKSxcbiAgbW9jazogbmV3IFNldChmbGF0dGVuKG1vY2sgfHwgW10pKSxcbiAgcHJvdmlkZXJzOiBbXSxcbiAgc2tpcDogbmV3IFNldCgpLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IChrZWVwOiBhbnksIG1vY2s6IGFueSA9IG51bGwsIGV4Y2x1ZGU6IGFueSA9IG51bGwpOiBUZXN0TW9kdWxlTWV0YWRhdGEgPT4ge1xuICBjb25zdCBkYXRhOiBEYXRhID0gZ2VuZXJhdGVEYXRhKGtlZXAsIG1vY2ssIGV4Y2x1ZGUpO1xuXG4gIGZvciAoY29uc3QgZGVmIG9mIG1hcFZhbHVlcyhkYXRhLm1vY2spKSB7XG4gICAgcmVzb2x2ZShkYXRhLCBkZWYsIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVNZXRhKGRhdGEpO1xufTtcbiJdfQ==
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1oZWxwZXIuZ3V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9tb2NrLWhlbHBlci9tb2NrLWhlbHBlci5ndXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsdURBQXFFO0FBQ3JFLHFGQUE2RTtBQUM3RSxpRUFBMEQ7QUFDMUQsMkRBQW1EO0FBQ25ELG1GQUEwRTtBQUMxRSx1R0FBNEY7QUFDNUYsaUVBQTBEO0FBQzFELG1FQUFpRTtBQUNqRSxtRUFBaUU7QUFDakUsMERBQXdEO0FBQ3hELG9EQUFrRDtBQUNsRCwrREFBeUQ7QUFhekQsSUFBTSxPQUFPLEdBQUcsVUFBQyxHQUFRLEVBQUUsSUFBYyxFQUFFLE9BQWlCO0lBQzFELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVkLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUM7QUFFRixJQUFNLGlCQUFpQixHQUFHLFVBQ3hCLFFBQXVCLEVBQ3ZCLEtBQVUsRUFDVixPQUFjLEVBQ2QsWUFBbUIsRUFDbkIsU0FBZ0I7SUFFaEIsSUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7SUFFekMsSUFBSSx3QkFBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ25CO1NBQU0sSUFBSSx3QkFBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSx3QkFBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLEdB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bnRlbnQiOlsiaW1wb3J0IHsgVGVzdE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgZmxhdHRlbiwgbWFwS2V5cywgbWFwVmFsdWVzIH0gZnJvbSAnLi4vY29tbW9uL2NvcmUuaGVscGVycyc7XG5pbXBvcnQgY29yZVJlZmxlY3RNb2R1bGVSZXNvbHZlIGZyb20gJy4uL2NvbW1vbi9jb3JlLnJlZmxlY3QubW9kdWxlLXJlc29sdmUnO1xuaW1wb3J0IGZ1bmNHZXRQcm92aWRlciBmcm9tICcuLi9jb21tb24vZnVuYy5nZXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgaXNOZ0RlZiB9IGZyb20gJy4uL2NvbW1vbi9mdW5jLmlzLW5nLWRlZic7XG5pbXBvcnQgeyBpc05nSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi9jb21tb24vZnVuYy5pcy1uZy1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHsgaXNOZ01vZHVsZURlZldpdGhQcm92aWRlcnMgfSBmcm9tICcuLi9jb21tb24vZnVuYy5pcy1uZy1tb2R1bGUtZGVmLXdpdGgtcHJvdmlkZXJzJztcbmltcG9ydCBuZ01vY2tzVW5pdmVyc2UgZnJvbSAnLi4vY29tbW9uL25nLW1vY2tzLXVuaXZlcnNlJztcbmltcG9ydCB7IE1vY2tDb21wb25lbnQgfSBmcm9tICcuLi9tb2NrLWNvbXBvbmVudC9tb2NrLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2NrRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW9jay1kaXJlY3RpdmUvbW9jay1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTW9ja01vZHVsZSB9IGZyb20gJy4uL21vY2stbW9kdWxlL21vY2stbW9kdWxlJztcbmltcG9ydCB7IE1vY2tQaXBlIH0gZnJvbSAnLi4vbW9jay1waXBlL21vY2stcGlwZSc7XG5pbXBvcnQgbW9ja1Byb3ZpZGVyIGZyb20gJy4uL21vY2stc2VydmljZS9tb2NrLXByb3ZpZGVyJztcblxudHlwZSBEYXRhID0ge1xuICBkZWNsYXJhdGlvbnM6IGFueVtdO1xuICBleGNsdWRlOiBTZXQ8YW55PjtcbiAgaW1wb3J0czogYW55W107XG4gIGtlZXA6IFNldDxhbnk+O1xuICBtb2NrOiBTZXQ8YW55PjtcbiAgb3B0aW9uYWw6IE1hcDxhbnksIGFueT47XG4gIHByb3ZpZGVyczogYW55W107XG4gIHNraXA6IFNldDxhbnk+O1xufTtcblxuY29uc3Qgc2tpcERlZiA9IChkZWY6IGFueSwgc2tpcDogU2V0PGFueT4sIGV4Y2x1ZGU6IFNldDxhbnk+KTogYm9vbGVhbiA9PiB7XG4gIGlmIChza2lwLmhhcyhkZWYpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc2tpcC5hZGQoZGVmKTtcblxuICByZXR1cm4gZXhjbHVkZS5oYXMoZGVmKTtcbn07XG5cbmNvbnN0IGNyZWF0ZU1ldGFIYW5kbGVyID0gKFxuICBvcHRpb25hbDogTWFwPGFueSwgYW55PixcbiAgcHJvdG86IGFueSxcbiAgaW1wb3J0czogYW55W10sXG4gIGRlY2xhcmF0aW9uczogYW55W10sXG4gIHByb3ZpZGVyczogYW55W10sXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgZGVmID0gb3B0aW9uYWwuZ2V0KHByb3RvKSB8fCBwcm90bztcblxuICBpZiAoaXNOZ0RlZihkZWYsICdtJykpIHtcbiAgICBpbXBvcnRzLnB1c2goZGVmKTtcbiAgfSBlbHNlIGlmIChpc05nRGVmKGRlZiwgJ2MnKSB8fCBpc05nRGVmKGRlZiwgJ2QnKSkge1xuICAgIGRlY2xhcmF0aW9ucy5wdXNoKGRlZik7XG4gIH0gZWxzZSBpZiAoaXNOZ0RlZihkZWYsICdwJykpIHtcbiAgICBkZWNsYXJhdGlvbnMucHVzaChkZWYpO1xuICAgIHByb3ZpZGVycy5wdXNoKGRlZik7XG4gIH0gZWxzZSBpZiAoIWlzTmdJbmplY3Rpb25Ub2tlbihkZWYpKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goZGVmKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlTWV0YSA9ICh7IGtlZXAsIHNraXAsIG9wdGlvbmFsLCBleGNsdWRlLCBpbXBvcnRzLCBkZWNsYXJhdGlvbnMsIHByb3ZpZGVycyB9OiBEYXRhKTogVGVzdE1vZHVsZU1ldGFkYXRhID0+IHtcbiAgZm9yIChjb25zdCBwcm90byBvZiBrZWVwKSB7XG4gICAgaWYgKHNraXAuaGFzKHByb3RvKSB8fCBleGNsdWRlLmhhcyhwcm90bykgfHwgb3B0aW9uYWwuaGFzKHByb3RvKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNyZWF0ZU1ldGFIYW5kbGVyKG9wdGlvbmFsLCBwcm90bywgaW1wb3J0cywgZGVjbGFyYXRpb25zLCBwcm92aWRlcnMpO1xuICB9XG5cbiAgcmV0dXJuIHsgZGVjbGFyYXRpb25zLCBpbXBvcnRzLCBwcm92aWRlcnMgfTtcbn07XG5cbmNvbnN0IHR5cGVNYXA6IEFycmF5PFthbnksIHN0cmluZ10+ID0gW1xuICBbJ20nLCAnbW9kdWxlJ10sXG4gIFsnYycsICdjb21wb25lbnQnXSxcbiAgWydkJywgJ2RpcmVjdGl2ZSddLFxuICBbJ3AnLCAncGlwZSddLFxuXTtcblxuY29uc3QgZ2V0VHlwZSA9IChkZWY6IGFueSwga2VlcDogU2V0PGFueT4pOiBzdHJpbmcgPT4ge1xuICBpZiAoaXNOZ01vZHVsZURlZldpdGhQcm92aWRlcnMoZGVmKSkge1xuICAgIHJldHVybiAnbW9kdWxlLXdpdGgtcHJvdmlkZXJzJztcbiAgfVxuICBmb3IgKGNvbnN0IFtmbGFnLCB2YWx1ZV0gb2YgdHlwZU1hcCkge1xuICAgIGlmIChpc05nRGVmKGRlZiwgZmxhZykpIHtcbiAgICAgIHJldHVybiBmbGFnID09PSAnbScgJiYga2VlcC5oYXMoZGVmKSA/IGAke3ZhbHVlfS1rZWVwYCA6IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbmNvbnN0IGhhbmRsZU1vZHVsZVdpdGhQcm92aWRlcnMgPSAoZGF0YTogRGF0YSwgZGVmOiBhbnkpOiB2b2lkID0+IHtcbiAgaWYgKGRhdGEuc2tpcC5oYXMoZGVmLm5nTW9kdWxlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkYXRhLnNraXAuYWRkKGRlZi5uZ01vZHVsZSk7XG4gIGlmIChkYXRhLmV4Y2x1ZGUuaGFzKGRlZi5uZ01vZHVsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkYXRhLmltcG9ydHMucHVzaChkYXRhLmtlZXAuaGFzKGRlZi5uZ01vZHVsZSkgPyBkZWYgOiBNb2NrTW9kdWxlKGRlZikpO1xufTtcblxuY29uc3QgaGFuZGxlRGVjbGFyYXRpb24gPSAoZGF0YTogRGF0YSwgZGVmOiBhbnksIGNhbGxiYWNrOiBhbnksIGJ1Y2tldDogYW55W10pOiB2b2lkID0+IHtcbiAgaWYgKHNraXBEZWYoZGVmLCBkYXRhLnNraXAsIGRhdGEuZXhjbHVkZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBidWNrZXQucHVzaChkYXRhLmtlZXAuaGFzKGRlZikgPyBkZWYgOiBjYWxsYmFjayhkZWYpKTtcbn07XG5cbmNvbnN0IGhhbmRsZURlc3RydWN0dXJpbmcgPSAoZGF0YTogRGF0YSwgZGVmOiBhbnksIGNhbGxiYWNrOiBhbnkpOiB2b2lkID0+IHtcbiAgaWYgKHNraXBEZWYoZGVmLCBkYXRhLnNraXAsIGRhdGEuZXhjbHVkZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtZXRhID0gY29yZVJlZmxlY3RNb2R1bGVSZXNvbHZlKGRlZik7XG4gIGZvciAoY29uc3QgdG9Nb2NrIG9mIGZsYXR0ZW4oW21ldGEuZGVjbGFyYXRpb25zLCBtZXRhLmltcG9ydHNdKSkge1xuICAgIGNhbGxiYWNrKGRhdGEsIHRvTW9jayk7XG4gIH1cbiAgZm9yIChjb25zdCB0b01vY2sgb2YgbWV0YS5wcm92aWRlcnMgPyBmbGF0dGVuKG1ldGEucHJvdmlkZXJzKSA6IFtdKSB7XG4gICAgcmVzb2x2ZVByb3ZpZGVyKGRhdGEsIHRvTW9jayk7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVQcm92aWRlciA9ICh7IHNraXAsIGtlZXAsIHByb3ZpZGVycywgZXhjbHVkZSB9OiBEYXRhLCBkZWY6IGFueSk6IHZvaWQgPT4ge1xuICBjb25zdCBwcm92aWRlciA9IGZ1bmNHZXRQcm92aWRlcihkZWYpO1xuICBza2lwLmFkZChwcm92aWRlcik7XG4gIGlmIChleGNsdWRlLmhhcyhwcm92aWRlcikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm92aWRlckRlZiA9IGtlZXAuaGFzKHByb3ZpZGVyKSA/IGRlZiA6IG1vY2tQcm92aWRlcihkZWYpO1xuICBpZiAocHJvdmlkZXJEZWYpIHtcbiAgICBwcm92aWRlcnMucHVzaChwcm92aWRlckRlZik7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gIGNvbXBvbmVudDogTW9ja0NvbXBvbmVudCxcbiAgZGlyZWN0aXZlOiBNb2NrRGlyZWN0aXZlLFxuICBwaXBlOiBNb2NrUGlwZSxcbn07XG5cbmNvbnN0IHJlc29sdmVIYW5kbGVyID0gKGRhdGE6IERhdGEsIHR5cGU6IHN0cmluZywgZGVmOiBhbnksIHNraXBEZXN0cnVjdGlvbjogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBpZiAodHlwZSA9PT0gJ21vZHVsZS13aXRoLXByb3ZpZGVycycpIHtcbiAgICBoYW5kbGVNb2R1bGVXaXRoUHJvdmlkZXJzKGRhdGEsIGRlZik7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vZHVsZS1rZWVwJykge1xuICAgIGhhbmRsZURlY2xhcmF0aW9uKGRhdGEsIGRlZiwgTW9ja01vZHVsZSwgZGF0YS5pbXBvcnRzKTsgLy8gTW9ja01vZHVsZSB3aWxsIG5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGUgZGVmIGlzIGtlcHQuXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vZHVsZScgJiYgc2tpcERlc3RydWN0aW9uKSB7XG4gICAgaGFuZGxlRGVjbGFyYXRpb24oZGF0YSwgZGVmLCBNb2NrTW9kdWxlLCBkYXRhLmltcG9ydHMpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb2R1bGUnKSB7XG4gICAgaGFuZGxlRGVzdHJ1Y3R1cmluZyhkYXRhLCBkZWYsIHJlc29sdmUpO1xuICB9IGVsc2UgaWYgKHJlc29sdmVNYXBbdHlwZV0pIHtcbiAgICBoYW5kbGVEZWNsYXJhdGlvbihkYXRhLCBkZWYsIHJlc29sdmVNYXBbdHlwZV0sIGRhdGEuZGVjbGFyYXRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvbHZlUHJvdmlkZXIoZGF0YSwgZGVmKTtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZSA9IChkYXRhOiBEYXRhLCBwcm90bzogYW55LCBza2lwRGVzdHJ1Y3Rpb24gPSB0cnVlKTogdm9pZCA9PiB7XG4gIGlmICghcHJvdG8pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlID0gZ2V0VHlwZShwcm90bywgZGF0YS5rZWVwKTtcbiAgbGV0IGRlZjogYW55O1xuXG4gIC8vIGFuIGF0dGVtcHQgdG8gcmVwbGFjZSBkZWNsYXJhdGlvbnMuXG4gIGlmICh0eXBlICE9PSAnbW9kdWxlLXdpdGgtcHJvdmlkZXJzJykge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YS5vcHRpb25hbC5nZXQocHJvdG8pO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gcHJvdG8pIHtcbiAgICAgIGRlZiA9IHZhbHVlO1xuICAgICAgZGF0YS5rZWVwLmFkZChkZWYpO1xuICAgIH1cbiAgfVxuICBpZiAoIWRlZikge1xuICAgIGRlZiA9IHByb3RvO1xuICB9XG5cbiAgcmVzb2x2ZUhhbmRsZXIoZGF0YSwgdHlwZSwgZGVmLCBza2lwRGVzdHJ1Y3Rpb24pO1xufTtcblxuY29uc3QgZ2VuZXJhdGVEYXRhV2l0aFVuaXZlcnNlID0gKGtlZXA6IFNldDxhbnk+LCBtb2NrOiBTZXQ8YW55PiwgZXhjbHVkZTogU2V0PGFueT4sIG9wdGlvbmFsOiBNYXA8YW55LCBhbnk+KTogdm9pZCA9PiB7XG4gIGZvciAoY29uc3QgayBvZiBtYXBLZXlzKG5nTW9ja3NVbml2ZXJzZS5nZXREZWZhdWx0cygpKSkge1xuICAgIGNvbnN0IHYgPSBuZ01vY2tzVW5pdmVyc2UuZ2V0QnVpbGREZWNsYXJhdGlvbihrKTtcbiAgICBpZiAoa2VlcC5oYXMoaykgfHwgbW9jay5oYXMoaykgfHwgZXhjbHVkZS5oYXMoaykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvcHRpb25hbC5zZXQoaywgdik7XG5cbiAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgZXhjbHVkZS5hZGQoayk7XG4gICAgfSBlbHNlIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vY2suYWRkKGspO1xuICAgIH0gZWxzZSBpZiAoayA9PT0gdikge1xuICAgICAga2VlcC5hZGQoayk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZW5lcmF0ZURhdGEgPSAocHJvdG9LZWVwOiBhbnksIHByb3RvTW9jazogYW55LCBwcm90b0V4Y2x1ZGU6IGFueSk6IERhdGEgPT4ge1xuICBjb25zdCBrZWVwID0gbmV3IFNldChmbGF0dGVuKHByb3RvS2VlcCB8fCBbXSkpO1xuICBjb25zdCBtb2NrID0gbmV3IFNldChmbGF0dGVuKHByb3RvTW9jayB8fCBbXSkpO1xuICBjb25zdCBleGNsdWRlID0gbmV3IFNldChmbGF0dGVuKHByb3RvRXhjbHVkZSB8fCBbXSkpO1xuICBjb25zdCBvcHRpb25hbCA9IG5ldyBNYXAoKTtcbiAgZ2VuZXJhdGVEYXRhV2l0aFVuaXZlcnNlKGtlZXAsIG1vY2ssIGV4Y2x1ZGUsIG9wdGlvbmFsKTtcblxuICByZXR1cm4ge1xuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgZXhjbHVkZSxcbiAgICBpbXBvcnRzOiBbXSxcbiAgICBrZWVwLFxuICAgIG1vY2ssXG4gICAgb3B0aW9uYWwsXG4gICAgcHJvdmlkZXJzOiBbXSxcbiAgICBza2lwOiBuZXcgU2V0KCksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoa2VlcDogYW55LCBtb2NrOiBhbnkgPSBudWxsLCBleGNsdWRlOiBhbnkgPSBudWxsKTogVGVzdE1vZHVsZU1ldGFkYXRhID0+IHtcbiAgY29uc3QgZGF0YTogRGF0YSA9IGdlbmVyYXRlRGF0YShrZWVwLCBtb2NrLCBleGNsdWRlKTtcblxuICBuZ01vY2tzVW5pdmVyc2UuY29uZmlnLnNldCgnbW9ja05nRGVmUmVzb2x2ZXInLCBuZXcgTWFwKCkpO1xuICBmb3IgKGNvbnN0IGRlZiBvZiBtYXBWYWx1ZXMoZGF0YS5tb2NrKSkge1xuICAgIGlmIChkYXRhLm9wdGlvbmFsLmhhcyhkZWYpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVzb2x2ZShkYXRhLCBkZWYsIGZhbHNlKTtcbiAgfVxuICBjb25zdCBtZXRhID0gY3JlYXRlTWV0YShkYXRhKTtcbiAgbmdNb2Nrc1VuaXZlcnNlLmNvbmZpZy5kZWxldGUoJ21vY2tOZ0RlZlJlc29sdmVyJyk7XG5cbiAgcmV0dXJuIG1ldGE7XG59O1xuIl19