ng-mocks 14.2.0 → 14.2.2
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.
- package/README.md +1 -0
- package/index.d.ts +5 -4
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -1
- package/index.mjs.map +1 -1
- package/package.json +6 -6
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.define-property.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.helpers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.parameters-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.tokens.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-global.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-injection-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-universe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.stub-member.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.stub.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance-apply.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.create-clone.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.define-property-descriptor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-methods-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-properties-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-property-descriptor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock-function.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.replace-with-mocks.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock-service.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.create-mock-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.resolve-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.use-factory.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-func.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/mock-service.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-class.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-inst.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/resolve/collect-declarations.ts","webpack://ng-mocks/external module \"@angular/core\"","webpack://ng-mocks/external module \"@angular/core/testing\"","webpack://ng-mocks/webpack/bootstrap","webpack://ng-mocks/webpack/runtime/define property getters","webpack://ng-mocks/webpack/runtime/global","webpack://ng-mocks/webpack/runtime/hasOwnProperty shorthand","webpack://ng-mocks/webpack/runtime/make namespace object","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-stack.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/func.extract-tokens.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-module-def-with-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-type.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-def.ts","webpack://ng-mocks/external module \"@angular/forms\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.form.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-jest-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.jest-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.body-catch.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.empty-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.missing-decorators.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.directive-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock-control-value-accessor-proxy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock-control-value-accessor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.inputs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.queries.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/to-existing-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/to-factory-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/clone-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/decorate-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.outputs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.import-exists.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-ng-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/get-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/render/generate-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/render/get-key.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/mock-component.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-directive/mock-directive.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.pipe-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-pipe/mock-pipe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.module-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mock-module.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/create-resolvers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mark-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mock-ng-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-override-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-debug-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-find-args-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-fixture.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-last-fixture.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/func.parse-find-args.ts","webpack://ng-mocks/external module \"@angular/platform-browser\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-source-of-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/func.parse-find-term.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/mock-helper.find.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-text-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-compare.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-get-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.injector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-get-parent.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check-children.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check-parent.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.crawl.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-find-args.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-provider-tokens-directives.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.get-public-provider-keys.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.parse-inputs-and-requires-attributes.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-selectors-from-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-attribute.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-attribute-in-selectors.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-attribute-value.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-id.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-tag-name-in-selectors.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-crawler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-tag-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.is-valid-reveal-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.reveal.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-control-value-accessor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-html-element.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.event.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.trigger.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/func.get-vca.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/mock-helper.change.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/mock-helper.touch.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-element.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-scan.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-ivy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-standard.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-injector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/func.is-valid-find-instance-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/mock-helper.find-instance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/mock-helper.find-all.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/format-handler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/handle-array.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/handle-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/mock-helper.format-html.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/mock-helper.format-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.auto-spy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console-ignore.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console-throw.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.default-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.faster-install.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.flush-test-bed.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.faster.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.get.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.global-prepare.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.guts.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.attributes.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/func.find-deep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/func.parse-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/detect-crawler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/detect-template-ref.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/func.is-valid-template-ref-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/mock-helper.find-template-ref.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.object.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.click.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.default-config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/mock-helper.find-instances.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/mock-helper.find-template-refs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-exclude.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-keep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-replace.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-wipe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/mock-helper.hide.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.input.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.output.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/mock-helper.render.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.reset.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.reveal-all.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-provider/mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.meta.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.provided-in.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-global-overrides.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mocked-ng-def-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-mocked-ng-def-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-validator.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance-forgot-reset.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-ng-type.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-standalone.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder-stash.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/add-requested-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-override.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-entry-components.ts","webpack://ng-mocks/external module \"@angular/common\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-dep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/add-def-to-root-provider-parameters.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/check-root-provider-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/extract-dep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-provided-in-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-root-provider-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-ng-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-module.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.extract-deps.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/try-mock-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/try-mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/parse-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.promise.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-render-defs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-variables.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-config-params.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-render-configs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-maps.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-sets.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/required-metadata.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.performance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-keep-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-replace-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-exclude-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-mock-declarations.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-root-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-root-provider-parameters.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-root-providers-data.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/apply-platform-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-touches-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-overrides-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/parse-mock-arguments.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/get-empty-config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-declaration/mock-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.generate-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.create-wrapper.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.install-prop-reader.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/mock-render-factory.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.reflect-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/mock-render.ts"],"sourcesContent":["export default {\n flags: ['cacheModule', 'cacheComponent', 'cacheDirective', 'cacheProvider', 'correctModuleExports'],\n mockRenderCacheSize: 25,\n neverMockModule: ['ApplicationModule', 'CommonModule', 'BrowserModule'],\n neverMockProvidedFunction: [\n 'DomRendererFactory2',\n 'EventManager',\n 'Injector', // ivy only\n 'RendererFactory2',\n\n // https://github.com/help-me-mom/ng-mocks/issues/538\n 'Sanitizer',\n 'DomSanitizer',\n\n // ApplicationModule, A14 made them global at root level\n 'ApplicationInitStatus',\n 'ApplicationRef',\n 'Compiler',\n 'IterableDiffers',\n 'KeyValueDiffers',\n ],\n neverMockToken: [\n 'InjectionToken Set Injector scope.', // INJECTOR_SCOPE // ivy only\n 'InjectionToken EventManagerPlugins', // EVENT_MANAGER_PLUGINS\n 'InjectionToken HammerGestureConfig', // HAMMER_GESTURE_CONFIG\n\n // ApplicationModule, A14 made them global at root level\n 'InjectionToken AppId', // APP_ID\n 'InjectionToken DefaultCurrencyCode', // DEFAULT_CURRENCY_CODE\n 'InjectionToken LocaleId', // LOCALE_ID\n 'InjectionToken SCHEDULER_TOKEN', // SCHEDULER\n ],\n onMockBuilderMissingDependency: 'throw',\n onMockInstanceRestoreNeed: 'warn',\n onTestBedFlushNeed: 'warn',\n\n dependencies: [\n 'declarations',\n 'entryComponents',\n 'bootstrap',\n 'providers',\n 'viewProviders',\n 'imports',\n 'exports',\n ] as const,\n};\n","import helperMockService from '../mock-service/helper.mock-service';\n\nexport default (instance: any, property: keyof any, value: any, enumerable = false) => {\n helperMockService.definePropertyDescriptor(instance, property, {\n configurable: true,\n enumerable,\n value,\n writable: true,\n });\n};\n","import { getTestBed } from '@angular/core/testing';\n\nimport coreDefineProperty from './core.define-property';\nimport coreReflectParametersResolve from './core.reflect.parameters-resolve';\nimport { AnyDeclaration, AnyType, Type } from './core.types';\nimport funcGetGlobal from './func.get-global';\nimport funcGetName from './func.get-name';\n\n/**\n * It will be removed from public interface with the next release: A14\n *\n * @deprecated\n * @internal\n */\nexport const getTestBedInjection = <I>(token: AnyDeclaration<I>): I | undefined => {\n try {\n // istanbul ignore next\n return getInjection(token);\n } catch {\n return undefined;\n }\n};\n\n/**\n * It will be removed from public interface with the next release: A14\n *\n * @deprecated\n * @internal\n */\nexport const getInjection = <I>(token: AnyDeclaration<I>): I => {\n const testBed: any = getTestBed();\n\n // istanbul ignore next\n return testBed.inject ? testBed.inject(token) : testBed.get(token);\n};\n\nexport const flatten = <T>(values: T | T[], result: T[] = []): T[] => {\n if (Array.isArray(values)) {\n for (const value of values) {\n flatten(value, result);\n }\n } else {\n result.push(values);\n }\n\n return result;\n};\n\nexport const mapKeys = <T>(set: Map<T, any>): T[] => {\n const result: T[] = [];\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((_, value: T) => result.push(value));\n\n return result;\n};\n\nexport const mapValues = <T>(set: { forEach(a1: (value: T) => void): void }, destination?: Set<T>): T[] => {\n const result: T[] = [];\n if (destination) {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T) => {\n destination.add(value);\n });\n } else {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T) => {\n result.push(value);\n });\n }\n\n return result;\n};\n\nexport const mapEntries = <K, T>(set: Map<K, T>, destination?: Map<K, T>): Array<[K, T]> => {\n const result: Array<[K, T]> = [];\n\n if (destination) {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T, key: K) => destination.set(key, value));\n } else {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T, key: K) => result.push([key, value]));\n }\n\n return result;\n};\n\nconst extractDependencyArray = (deps: any[], set: Set<any>): void => {\n for (const flag of deps) {\n const name = flag && typeof flag === 'object' ? flag.ngMetadataName : undefined;\n if (name === 'Optional' || name === 'SkipSelf' || name === 'Self') {\n continue;\n }\n set.add(flag);\n }\n};\n\n// Accepts an array of dependencies from providers, skips injections flags,\n// and adds the providers to the set.\nexport const extractDependency = (deps: any[], set?: Set<any>): void => {\n if (!set) {\n return;\n }\n for (const dep of deps) {\n if (!Array.isArray(dep)) {\n set.add(dep);\n continue;\n }\n extractDependencyArray(dep, set);\n }\n};\n\nexport const extendClassicClass = <I>(base: AnyType<I>): Type<I> => {\n let child: any;\n const glb = funcGetGlobal();\n\n // First we try to eval es2015 style and if it fails to use es5 transpilation in the catch block.\n // The next step is to respect constructor parameters as the parent class via jitReflector.\n glb.ngMocksParent = base;\n // istanbul ignore next\n try {\n eval(`\n var glb = typeof window === 'undefined' ? global : window;\n class MockMiddleware extends glb.ngMocksParent {}\n glb.ngMocksResult = MockMiddleware\n `);\n child = glb.ngMocksResult;\n } catch {\n class MockMiddleware extends glb.ngMocksParent {}\n child = MockMiddleware;\n }\n glb.ngMocksParent = undefined;\n\n return child;\n};\n\nexport const extendClass = <I>(base: AnyType<I>): Type<I> => {\n const child: Type<I> = extendClassicClass(base);\n coreDefineProperty(child, 'name', `MockMiddleware${funcGetName(base)}`, true);\n\n const parameters = coreReflectParametersResolve(base);\n if (parameters.length > 0) {\n coreDefineProperty(child, 'parameters', [...parameters]);\n }\n\n return child;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nexport default (def: any): any[] => {\n const declaration = collectDeclarations(def);\n\n return declaration.parameters ?? [];\n};\n","import { InjectionToken } from '@angular/core';\nimport { MetadataOverride } from '@angular/core/testing';\n\nimport { AnyType } from './core.types';\n\n/**\n * NG_MOCKS token is a map from a declaration to its mock copy.\n *\n * @internal\n *\n * ```ts\n * const MockClass = TestBed.inject(NG_MOCKS).get(RealClass);\n * ```\n */\nexport const NG_MOCKS = new InjectionToken<Map<any, any>>('NG_MOCKS');\n(NG_MOCKS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_TOUCHES token is a set of all touched declarations during mock process.\n *\n * @internal\n *\n * ```ts\n * const touched = TestBed.inject(NG_MOCKS_TOUCHES).has(RealClass);\n * ```\n */\nexport const NG_MOCKS_TOUCHES = new InjectionToken<Set<any>>('NG_MOCKS_TOUCHES');\n(NG_MOCKS_TOUCHES as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_OVERRIDES token contains overrides for:\n * - TestBed.overrideModule\n * - TestBed.overrideComponent\n * - TestBed.overrideDirective\n * - TestBed.overrideProvider\n *\n * It is used when there is no way to provide a mock copy and an override is required.\n * For example, if we want to keep a component, but to override one of its local providers.\n *\n * @internal\n */\nexport const NG_MOCKS_OVERRIDES = new InjectionToken<Map<AnyType<any>, MetadataOverride<any>>>('NG_MOCKS_OVERRIDES');\n(NG_MOCKS_OVERRIDES as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_GUARDS token influences on provided guards in MockBuilder.\n * More info by the links below.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_guards-token\n * @see https://ng-mocks.sudo.eu/guides/routing-guard\n */\nexport const NG_MOCKS_GUARDS = new InjectionToken<void>('NG_MOCKS_GUARDS');\n(NG_MOCKS_GUARDS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_INTERCEPTORS token influences on provided interceptors in MockBuilder.\n * More info by the links below.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_interceptors-token\n * @see https://ng-mocks.sudo.eu/guides/http-interceptor\n */\nexport const NG_MOCKS_INTERCEPTORS = new InjectionToken<void>('NG_MOCKS_INTERCEPTORS');\n(NG_MOCKS_INTERCEPTORS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_ROOT_PROVIDERS token influences on root providers in MockBuilder,\n * which aren't provided in specified modules.\n * It helps to mock or keep them automatically.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_root_providers-token\n */\nexport const NG_MOCKS_ROOT_PROVIDERS = new InjectionToken<void>('NG_MOCKS_ROOT_PROVIDERS');\n(NG_MOCKS_ROOT_PROVIDERS as any).__ngMocksSkip = true;\n","export default (): Record<keyof any, any> => {\n // istanbul ignore if\n if (typeof window === 'undefined') {\n return global;\n }\n\n return window;\n};\n","const badCharacters = new RegExp('[^0-9a-z]+', 'mgi');\n\nexport default (value: any): string => {\n let result: string | undefined;\n\n if (typeof value === 'function' && value.name) {\n result = value.name;\n } else if (typeof value === 'function') {\n result = 'arrowFunction';\n } else if (typeof value === 'object' && value && value.ngMetadataName === 'InjectionToken') {\n result = value._desc;\n } else if (typeof value === 'object' && value && typeof value.constructor === 'function') {\n result = value.constructor.name;\n }\n\n result ||= 'unknown';\n\n return result.replace(badCharacters, '_');\n};\n","export default (provider: any): any => {\n return provider && typeof provider === 'object' && provider.provide ? provider.provide : provider;\n};\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Checks whether a variable is an Angular token.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgInjectionToken\n *\n * ```ts\n * isNgInjectionToken(APP_ID); // returns true\n * isNgInjectionToken(arbitraryVariable); // returns false\n * ```\n */\nexport const isNgInjectionToken = (token: any): token is InjectionToken<any> =>\n token && typeof token === 'object' && token.ngMetadataName === 'InjectionToken';\n","import { IMockBuilderConfig } from '../mock-builder/types';\n\nimport coreConfig from './core.config';\nimport { AnyDeclaration } from './core.types';\nimport funcGetGlobal from './func.get-global';\nimport funcGetName from './func.get-name';\n\nconst globalMap = (key: string) => () => {\n if (!ngMocksUniverse.global.has(key)) {\n ngMocksUniverse.global.set(key, new Map());\n }\n\n return ngMocksUniverse.global.get(key);\n};\n\ninterface NgMocksUniverse {\n builtDeclarations: Map<any, any>;\n builtProviders: Map<any, any>;\n cacheDeclarations: Map<any, any>;\n cacheProviders: Map<any, any>;\n config: Map<any, any>;\n configInstance: Map<any, any>;\n flags: Set<string>;\n getBuildDeclaration: (def: any) => any | undefined;\n getConfigMock: () => Map<any, IMockBuilderConfig>;\n getDefaults: () => Map<any, ['mock' | 'keep' | 'replace' | 'exclude', any?]>;\n getLocalMocks: () => Array<[any, any]>;\n getOverrides: () => Map<any, any>;\n getResolution: (def: any) => undefined | 'mock' | 'keep' | 'replace' | 'exclude';\n global: Map<any, any>;\n hasBuildDeclaration: (def: any) => boolean;\n isExcludedDef: (def: any) => boolean;\n isProvidedDef: (def: any) => boolean;\n touches: Set<AnyDeclaration<any> | string>;\n}\n\nfuncGetGlobal().ngMocksUniverse = funcGetGlobal().ngMocksUniverse || {};\nconst ngMocksUniverse: NgMocksUniverse = funcGetGlobal().ngMocksUniverse;\n\nngMocksUniverse.builtDeclarations = new Map();\nngMocksUniverse.builtProviders = new Map();\nngMocksUniverse.cacheDeclarations = new Map();\nngMocksUniverse.cacheProviders = new Map();\nngMocksUniverse.config = new Map();\nngMocksUniverse.configInstance = new Map();\nngMocksUniverse.flags = new Set(coreConfig.flags);\nngMocksUniverse.global = new Map();\nngMocksUniverse.touches = new Set();\n\nngMocksUniverse.global.set('flags', {\n // @deprecated and will be changed in A13 to 'throw'\n onMockBuilderMissingDependency: coreConfig.onMockBuilderMissingDependency,\n // @deprecated and will be changed in A13 to 'throw'\n onMockInstanceRestoreNeed: coreConfig.onMockInstanceRestoreNeed,\n // @deprecated and will be changed in A13 to 'throw'\n onTestBedFlushNeed: coreConfig.onTestBedFlushNeed,\n});\n\nngMocksUniverse.getOverrides = globalMap('overrides');\nngMocksUniverse.getDefaults = globalMap('defaults');\nngMocksUniverse.getConfigMock = globalMap('configMock');\n\nconst getDefaults = (def: any): [] | ['mock' | 'keep' | 'replace' | 'exclude', any?] => {\n {\n const defValue = ngMocksUniverse.getDefaults().get(def);\n if (defValue) {\n return defValue;\n }\n }\n\n {\n const defValue = typeof def === 'function' ? ngMocksUniverse.getDefaults().get(`@${funcGetName(def)}`) : undefined;\n if (defValue) {\n return defValue;\n }\n }\n\n return [];\n};\n\nngMocksUniverse.getResolution = (def: any): undefined | 'mock' | 'keep' | 'replace' | 'exclude' => {\n const set = ngMocksUniverse.config.get('ngMocksDepsResolution');\n if (set?.has(def)) {\n return set.get(def);\n }\n const [value] = getDefaults(def);\n\n return value;\n};\n\nngMocksUniverse.getBuildDeclaration = (def: any): undefined | null | any => {\n if (ngMocksUniverse.builtDeclarations.has(def)) {\n return ngMocksUniverse.builtDeclarations.get(def);\n }\n const [mode, replacement] = getDefaults(def);\n\n if (mode === 'exclude') {\n return null;\n }\n if (mode === 'keep') {\n return def;\n }\n if (mode === 'replace') {\n return replacement;\n }\n};\n\nngMocksUniverse.hasBuildDeclaration = (def: any): boolean => {\n if (ngMocksUniverse.builtDeclarations.has(def)) {\n return true;\n }\n const [mode] = getDefaults(def);\n\n return !!mode && mode !== 'mock';\n};\n\nconst hasBuildDeclaration = (def: any): boolean => ngMocksUniverse.hasBuildDeclaration(def);\nconst getBuildDeclaration = (def: any): any => ngMocksUniverse.getBuildDeclaration(def);\n\nngMocksUniverse.isExcludedDef = (def: any): boolean => {\n const resolution = ngMocksUniverse.getResolution(def);\n if (resolution && resolution !== 'exclude') {\n return false;\n }\n\n return hasBuildDeclaration(def) && getBuildDeclaration(def) === null;\n};\n\nngMocksUniverse.isProvidedDef = (def: any): boolean => hasBuildDeclaration(def) && getBuildDeclaration(def) !== null;\n\n// excluding StoreDevtoolsModule by default\nngMocksUniverse.getDefaults().set('@StoreDevtoolsModule', ['exclude']);\n\nexport default ((): NgMocksUniverse => ngMocksUniverse)();\n","import helperExtractPropertyDescriptor from '../mock-service/helper.extract-property-descriptor';\n\nexport default <T extends object>(\n instance: T & { __ngMocks__source?: object },\n key: any,\n value: any,\n encapsulation?: 'get' | 'set',\n): any => {\n const def = helperExtractPropertyDescriptor(instance, key) ?? {};\n\n if (!encapsulation && def.set && (def.set as any).__ngMocksProxy) {\n def.set(value);\n\n return value;\n }\n\n const descriptor: PropertyDescriptor = {\n configurable: true,\n enumerable: true,\n };\n if (encapsulation === 'get' && def.set) {\n descriptor.set = def.set;\n } else if (encapsulation === 'set' && def.get) {\n descriptor.get = def.get;\n }\n if (encapsulation) {\n descriptor[encapsulation] = value;\n } else {\n descriptor.writable = true;\n descriptor.value = value;\n }\n\n Object.defineProperty(instance, key, descriptor);\n\n return value;\n};\n","import helperMockService from '../mock-service/helper.mock-service';\nimport { MockedFunction } from '../mock-service/types';\n\nexport default <T = MockedFunction>(instance: any, override: any, style?: 'get' | 'set'): T => {\n if (typeof override === 'string') {\n return helperMockService.mock(instance, override, style);\n }\n\n // if someone is giving us a function, then we should swap instance and overrides.\n // so in the end the function can be called, but it also has all desired properties.\n let correctInstance = instance;\n let applyOverrides = override;\n const skipProps = ['__zone_symbol__unconfigurables'];\n if (typeof override === 'function') {\n correctInstance = helperMockService.createClone(override);\n applyOverrides = instance;\n skipProps.push(...Object.getOwnPropertyNames(correctInstance));\n }\n\n for (const key of Object.getOwnPropertyNames(applyOverrides)) {\n const desc = skipProps.indexOf(key) === -1 ? Object.getOwnPropertyDescriptor(applyOverrides, key) : undefined;\n helperMockService.definePropertyDescriptor(correctInstance, key, desc);\n }\n\n return correctInstance;\n};\n","import ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockHelperStubMember from '../mock-helper/mock-helper.stub-member';\n\nexport default (def: any): any[] => {\n const callbacks = [];\n\n const config = ngMocksUniverse.configInstance.get(def);\n if (config?.overloads) {\n for (const [name, stub, encapsulation] of config.overloads) {\n if (name) {\n callbacks.push((instance: any) => {\n mockHelperStubMember(instance, name, stub, encapsulation);\n });\n } else {\n callbacks.push(stub);\n }\n }\n }\n\n return callbacks;\n};\n","import helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from './helper.extract-methods-from-prototype';\nimport helperExtractPropertiesFromPrototype from './helper.extract-properties-from-prototype';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\n\nexport default (service: any, bindFrom?: object, bindTo?: object, mock?: any): any => {\n const instance = function (...args: any[]) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (mock || service).apply(bindFrom === this ? bindTo : this, args);\n };\n\n for (const prop of [\n ...helperExtractMethodsFromPrototype(service),\n ...helperExtractPropertiesFromPrototype(service),\n ]) {\n const desc = helperExtractPropertyDescriptor(service, prop);\n helperDefinePropertyDescriptor(instance, prop, desc);\n }\n\n return instance;\n};\n","import helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\n\nexport default (instance: any, prop: keyof any, desc?: PropertyDescriptor): boolean => {\n if (!desc || !instance) {\n return false;\n }\n\n // istanbul ignore else\n if (Object.defineProperty) {\n const sourceDesc = helperExtractPropertyDescriptor(instance, prop);\n if (sourceDesc?.configurable === false) {\n return false;\n }\n\n Object.defineProperty(instance, prop, {\n ...desc,\n configurable: true,\n ...((desc.get === undefined && desc.set === undefined) || desc.writable === false ? { writable: true } : {}),\n });\n } else {\n instance[prop] = desc.value;\n }\n\n return true;\n};\n","import funcGetName from '../common/func.get-name';\n\nconst sanitizerMethods = [\n 'sanitize',\n 'bypassSecurityTrustHtml',\n 'bypassSecurityTrustStyle',\n 'bypassSecurityTrustScript',\n 'bypassSecurityTrustUrl',\n 'bypassSecurityTrustResourceUrl',\n];\n\nconst extraMethods: Record<string, undefined | string[]> = {\n DomSanitizer: sanitizerMethods,\n Sanitizer: sanitizerMethods,\n};\n\nconst getOwnPropertyNames = (prototype: any): string[] => {\n const result: string[] = Object.getOwnPropertyNames(prototype);\n for (const method of extraMethods[funcGetName(prototype)] ?? []) {\n result.push(method);\n }\n\n return result;\n};\n\nexport default <T>(service: T): string[] => {\n const result: string[] = [];\n\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n for (const method of getOwnPropertyNames(prototype)) {\n if ((method as any) === 'constructor') {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, method);\n const isGetterSetter = descriptor && (descriptor.get || descriptor.set);\n if (isGetterSetter || result.indexOf(method) !== -1) {\n continue;\n }\n result.push(method);\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return result;\n};\n","export default <T>(service: T): string[] => {\n const result: string[] = [];\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n for (const prop of Object.getOwnPropertyNames(prototype)) {\n if ((prop as any) === 'constructor') {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n const isGetterSetter = descriptor && (descriptor.get || descriptor.set);\n if (!isGetterSetter || result.indexOf(prop) !== -1) {\n continue;\n }\n result.push(prop);\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return result;\n};\n","export default <T>(service: T, prop: keyof any): PropertyDescriptor | undefined => {\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n if (descriptor) {\n return descriptor;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return undefined;\n};\n","import funcGetName from '../common/func.get-name';\n\nimport helperMockService from './helper.mock-service';\nimport { MockedFunction } from './types';\n\n// istanbul ignore next\nconst createName = (name: string, mockName?: string, instance?: any, accessType?: string) =>\n `${mockName ?? (typeof instance.prototype === 'function' ? instance.prototype.name : funcGetName(instance))}.${name}${\n accessType ?? ''\n }`;\n\nconst generateMockDef = (def: any, mock: any, accessType?: string): PropertyDescriptor => ({\n ...(accessType === 'get' && def && def.set\n ? {\n set: def.set,\n }\n : {}),\n\n ...(accessType === 'set' && def && def.get\n ? {\n get: def.get,\n }\n : {}),\n\n ...(accessType\n ? {}\n : {\n writable: true,\n }),\n\n [accessType || 'value']: mock,\n configurable: true,\n enumerable: true,\n});\n\nconst parseArgs = (\n args: any[],\n): {\n accessType?: 'get' | 'set';\n mockName?: string;\n} => {\n let accessType: 'get' | 'set' | undefined;\n let mockName: string | undefined;\n\n if (args.length > 0 && args[0] !== 'get' && args[0] !== 'set') {\n mockName = args[0];\n } else if (args.length > 0 && (args[0] === 'get' || args[0] === 'set')) {\n accessType = args[0];\n mockName = args[1];\n }\n\n return { accessType, mockName };\n};\n\nexport default <T = MockedFunction>(instance: any, name: string, ...args: Array<string | undefined>): T => {\n const { accessType, mockName } = parseArgs(args);\n\n const def = Object.getOwnPropertyDescriptor(instance, name);\n if (def && def[accessType || 'value']) {\n return def[accessType || 'value'];\n }\n\n const detectedMockName = createName(name, mockName, instance, accessType);\n const mock: any = helperMockService.mockFunction(detectedMockName, !!accessType);\n\n const mockDef = generateMockDef(def, mock, accessType);\n if (mockDef.get && mockDef.set && (mockDef.get as any).__ngMocks && (mockDef.set as any).__ngMocks) {\n (mockDef.set as any).__ngMocksSet((val: any) => (mockDef.get as any).__ngMocksGet(val));\n }\n\n Object.defineProperty(instance, name, mockDef);\n\n return mock;\n};\n","import coreDefineProperty from '../common/core.define-property';\n\nimport { CustomMockFunction, MockedFunction } from './types';\n\nconst mockFunction: {\n (mockName: string, original?: boolean): MockedFunction;\n customMockFunction?: CustomMockFunction;\n} = (mockName: string, original = false): MockedFunction => {\n // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary\n const func =\n mockFunction.customMockFunction && !original\n ? mockFunction.customMockFunction(mockName)\n : (val: any) => {\n if (setValue) {\n setValue(val);\n }\n\n return value;\n };\n\n // magic to make getters / setters working\n\n let value: any;\n let setValue: any;\n\n coreDefineProperty(func, '__ngMocks', true);\n coreDefineProperty(func, '__ngMocksSet', (newSetValue: any) => (setValue = newSetValue));\n coreDefineProperty(func, '__ngMocksGet', (newValue: any) => (value = newValue));\n\n return func;\n};\n\nexport default (() => mockFunction)();\n","import { NG_MOCKS_GUARDS } from '../common/core.tokens';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nconst handleSection = (section: any[]) => {\n const guards: any[] = [];\n\n for (const guard of section) {\n if (ngMocksUniverse.isProvidedDef(guard)) {\n guards.push(guard);\n continue;\n }\n if (ngMocksUniverse.isExcludedDef(NG_MOCKS_GUARDS)) {\n continue;\n }\n guards.push(guard);\n }\n\n return guards;\n};\n\nconst handleArray = (value: any[], callback: any): [boolean, any[]] => {\n const mock = [];\n let updated = false;\n\n for (const valueItem of value) {\n if (ngMocksUniverse.isExcludedDef(valueItem)) {\n updated = updated || true;\n continue;\n }\n mock.push(callback(valueItem));\n updated = updated || mock[mock.length - 1] !== valueItem;\n }\n\n return [updated, mock];\n};\n\nconst handleItemKeys = ['canActivate', 'canActivateChild', 'canDeactivate', 'canLoad'];\nconst handleItemGetGuards = (mock: any, section: string) =>\n Array.isArray(mock[section]) ? handleSection(mock[section]) : mock[section];\n\nconst handleItem = (value: Record<keyof any, any>, callback: any): [boolean, Record<keyof any, any>] => {\n let mock: Record<keyof any, any> = {};\n let updated = false;\n\n for (const key of Object.keys(value)) {\n if (ngMocksUniverse.isExcludedDef(value[key])) {\n updated = updated || true;\n continue;\n }\n mock[key] = callback(value[key]);\n updated = updated || mock[key] !== value[key];\n }\n\n // Removal of guards.\n for (const section of handleItemKeys) {\n const guards: any[] = handleItemGetGuards(mock, section);\n if (guards && mock[section].length !== guards.length) {\n updated = updated || true;\n mock = { ...mock, [section]: guards };\n }\n }\n\n return [updated, mock];\n};\n\nconst replaceWithMocks = (value: any): any => {\n if (ngMocksUniverse.cacheDeclarations.has(value)) {\n return ngMocksUniverse.cacheDeclarations.get(value);\n }\n if (typeof value !== 'object') {\n return value;\n }\n\n let mock: any;\n let updated = false;\n\n if (Array.isArray(value)) {\n [updated, mock] = handleArray(value, replaceWithMocks);\n } else if (value) {\n [updated, mock] = handleItem(value, replaceWithMocks);\n }\n\n if (updated) {\n Object.setPrototypeOf(mock, Object.getPrototypeOf(value));\n\n return mock;\n }\n\n return value;\n};\n\nexport default (() => replaceWithMocks)();\n","import funcGetGlobal from '../common/func.get-global';\n\nimport helperCreateClone from './helper.create-clone';\nimport helperCreateMockFromPrototype from './helper.create-mock-from-prototype';\nimport helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from './helper.extract-methods-from-prototype';\nimport helperExtractPropertiesFromPrototype from './helper.extract-properties-from-prototype';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\nimport helperMock from './helper.mock';\nimport helperMockFunction from './helper.mock-function';\nimport helperReplaceWithMocks from './helper.replace-with-mocks';\nimport helperResolveProvider from './helper.resolve-provider';\nimport helperUseFactory from './helper.use-factory';\nimport { CustomMockFunction } from './types';\n\n// We need a single pointer to the object among all environments.\nfuncGetGlobal().ngMockshelperMockService = funcGetGlobal().ngMockshelperMockService || {\n mockFunction: helperMockFunction,\n\n registerMockFunction: (func: CustomMockFunction | undefined) => {\n funcGetGlobal().ngMockshelperMockService.mockFunction.customMockFunction = func;\n },\n\n createClone: helperCreateClone,\n createMockFromPrototype: helperCreateMockFromPrototype,\n definePropertyDescriptor: helperDefinePropertyDescriptor,\n extractMethodsFromPrototype: helperExtractMethodsFromPrototype,\n extractPropertiesFromPrototype: helperExtractPropertiesFromPrototype,\n extractPropertyDescriptor: helperExtractPropertyDescriptor,\n mock: helperMock,\n replaceWithMocks: helperReplaceWithMocks,\n resolveProvider: helperResolveProvider,\n useFactory: helperUseFactory,\n};\n\nexport default ((): {\n createClone: typeof helperCreateClone;\n createMockFromPrototype: typeof helperCreateMockFromPrototype;\n definePropertyDescriptor: typeof helperDefinePropertyDescriptor;\n extractMethodsFromPrototype: typeof helperExtractMethodsFromPrototype;\n extractPropertiesFromPrototype: typeof helperExtractPropertiesFromPrototype;\n extractPropertyDescriptor: typeof helperExtractPropertyDescriptor;\n mock: typeof helperMock;\n mockFunction: typeof helperMockFunction;\n registerMockFunction: (func: CustomMockFunction | undefined) => void;\n replaceWithMocks: typeof helperReplaceWithMocks;\n resolveProvider: typeof helperResolveProvider;\n useFactory: typeof helperUseFactory;\n} => funcGetGlobal().ngMockshelperMockService)();\n\nexport function registerMockFunction(func?: CustomMockFunction | undefined): void {\n funcGetGlobal().ngMockshelperMockService.registerMockFunction(func);\n}\n","import coreDefineProperty from '../common/core.define-property';\nimport funcGetName from '../common/func.get-name';\n\nimport helperMockService from './helper.mock-service';\nimport { MockedFunction } from './types';\n\nexport default (service: any): { [key in keyof any]: MockedFunction } => {\n const mockName = funcGetName(service);\n const value: any = {};\n coreDefineProperty(value, '__ngMocks', true);\n\n const methods = helperMockService.extractMethodsFromPrototype(service);\n for (const method of methods) {\n helperMockService.mock(value, method, mockName);\n }\n\n const properties = helperMockService.extractPropertiesFromPrototype(service);\n for (const property of properties) {\n helperMockService.mock(value, property, 'get', mockName);\n helperMockService.mock(value, property, 'set', mockName);\n }\n Object.setPrototypeOf(value, service);\n\n return value;\n};\n","import { extractDependency } from '../common/core.helpers';\nimport { NG_MOCKS_INTERCEPTORS } from '../common/core.tokens';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport helperMockService from './helper.mock-service';\nimport mockProvider from './mock-provider';\n\nconst anyDiffers = (a: any, b: any, ...keys: string[]): boolean => {\n for (const key of keys) {\n if (a[key] !== b[key]) {\n return true;\n }\n }\n\n return false;\n};\n\nconst createFromResolution = (provide: any, resolution: any) => {\n let mockDef = resolution;\n\n const existingMock = ngMocksUniverse.builtProviders.get(provide);\n if (existingMock) {\n mockDef = existingMock;\n }\n\n // A case when a provider is actually a component, directive, pipe.\n if (typeof mockDef === 'function') {\n mockDef = {\n provide,\n useClass: mockDef,\n };\n }\n\n return mockDef;\n};\n\nconst isSuitableProvider = (provider: any, provide: any): boolean =>\n ngMocksUniverse.builtProviders.has(NG_MOCKS_INTERCEPTORS) &&\n ngMocksUniverse.builtProviders.get(NG_MOCKS_INTERCEPTORS) === null &&\n isNgInjectionToken(provide) &&\n provide.toString() === 'InjectionToken HTTP_INTERCEPTORS' &&\n provide !== provider;\n\nconst excludeInterceptors = (provider: any, provide: any): boolean => {\n if (isSuitableProvider(provider, provide)) {\n if (provider.useFactory || provider.useValue) {\n return true;\n }\n const interceptor = provider.useExisting || provider.useClass;\n if (!ngMocksUniverse.builtProviders.has(interceptor) || ngMocksUniverse.builtProviders.get(interceptor) === null) {\n return true;\n }\n }\n\n return false;\n};\n\nconst parseProvider = (\n provider: any,\n callback: any,\n): {\n change: () => void;\n multi: boolean;\n provide: any;\n} => {\n const provide = funcGetProvider(provider);\n const multi = provider !== provide && !!provider.multi;\n\n return {\n change: () => {\n if (callback) {\n callback();\n }\n },\n multi,\n provide,\n };\n};\n\n// if the provider is a value, we need to go through the value and to replace all mock instances.\nconst replaceWithMocks = (provider: any, provide: any, mockDef: any) => {\n if (provide !== provider && mockDef && mockDef.useValue) {\n const useValue = helperMockService.replaceWithMocks(mockDef.useValue);\n\n return useValue === mockDef.useValue\n ? mockDef\n : {\n ...mockDef,\n useValue,\n };\n }\n\n return mockDef;\n};\n\nconst createPredefinedMockProvider = (provider: any, provide: any): any => {\n // Then we check decisions whether we should keep or replace a provider.\n if (ngMocksUniverse.builtProviders.has(provide)) {\n const mockDef = ngMocksUniverse.builtProviders.get(provide);\n if (mockDef === provide) {\n return provider;\n }\n\n return mockDef;\n }\n\n return undefined;\n};\n\nconst createMockProvider = (provider: any, provide: any, change: () => void) => {\n let mockDef = createPredefinedMockProvider(provider, provide);\n\n if (!mockDef && ngMocksUniverse.flags.has('skipMock') && ngMocksUniverse.getResolution(provide) !== 'mock') {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(provide);\n mockDef = provider;\n }\n if (!mockDef) {\n mockDef = mockProvider(provider);\n }\n\n mockDef = replaceWithMocks(provider, provide, mockDef);\n if (!areEqualDefs(mockDef, provider, provide)) {\n change();\n }\n // Touching only when we really provide a value.\n if (mockDef) {\n ngMocksUniverse.touches.add(provide);\n }\n\n return mockDef;\n};\n\nconst areEqualDefs = (mockDef: any, provider: any, provide: any): boolean => {\n let providerDiffers = false;\n let defDiffers = !mockDef;\n if (provider && mockDef && !defDiffers) {\n defDiffers = anyDiffers(provider, mockDef, 'provide', 'useValue', 'useClass', 'useExisting', 'useFactory', 'deps');\n }\n if (provider === provide && mockDef !== provider) {\n providerDiffers = true;\n } else if (provider !== provide && defDiffers) {\n providerDiffers = true;\n }\n\n return !providerDiffers;\n};\n\nconst isPreconfiguredDependency = (provider: any, provide: any): boolean => {\n // we should not touch excluded providers.\n if (ngMocksUniverse.builtProviders.has(provide) && ngMocksUniverse.builtProviders.get(provide) === null) {\n return true;\n }\n\n if (provide !== provider && provider.deps) {\n extractDependency(provider.deps, ngMocksUniverse.config.get('ngMocksDeps'));\n }\n\n return excludeInterceptors(provider, provide);\n};\n\n// tries to resolve a provider based on current universe state.\nexport default (provider: any, resolutions: Map<any, any>, changed?: () => void) => {\n const { provide, multi, change } = parseProvider(provider, changed);\n // we should not touch our system providers.\n if (provider && typeof provider === 'object' && provider.useExisting && provider.useExisting.mockOf) {\n return provider;\n }\n if (isPreconfiguredDependency(provider, provide)) {\n return change();\n }\n if (resolutions.has(provide)) {\n return createFromResolution(provide, resolutions.get(provide));\n }\n\n const mockDef = createMockProvider(provider, provide, change);\n\n return multi && typeof mockDef === 'object' ? { ...mockDef, multi } : mockDef;\n};\n","import { FactoryProvider, Injector } from '@angular/core';\n\nimport { mapValues } from '../common/core.helpers';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport mockInstanceApply from '../mock-instance/mock-instance-apply';\n\nimport { MockService } from './mock-service';\n\nconst applyCallbackToken = (def: any): boolean => isNgInjectionToken(def) || typeof def === 'string';\n\nconst applyCallback = (def: any, inst: any, callbacks: any[], injector?: Injector, overrides?: any): void => {\n let instance: any = inst;\n\n for (const callback of callbacks) {\n const override = callback(instance, injector);\n if (applyCallbackToken(def)) {\n instance = override;\n continue;\n }\n\n // overrides return real value.\n if (callback === overrides) {\n instance = override;\n continue;\n }\n\n if (!override) {\n continue;\n }\n\n instance = mockHelperStub(instance, override);\n }\n\n return instance;\n};\n\nexport default <D, I>(\n def: D,\n init?: () => I,\n overrides?: (instance: I, injector: Injector) => I | Partial<I>,\n): FactoryProvider => ({\n deps: [Injector],\n provide: def,\n useFactory: (injector?: Injector) => {\n const instance = init ? init() : MockService(def as any);\n\n const configGlobal: Set<any> | undefined = ngMocksUniverse.getOverrides().get(def);\n const callbacks = configGlobal ? mapValues(configGlobal) : [];\n if (overrides) {\n callbacks.push(overrides);\n }\n callbacks.push(...mockInstanceApply(def));\n\n return applyCallback(def, instance, callbacks, injector, overrides);\n },\n});\n","import { Provider } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport { Type } from '../common/core.types';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\nimport helperUseFactory from './helper.use-factory';\nimport { MockService } from './mock-service';\n\nconst { neverMockProvidedFunction, neverMockToken } = coreConfig;\n\nconst applyMissingClassProperties = (instance: any, useClass: Type<any>) => {\n const existing = Object.getOwnPropertyNames(instance);\n const child = MockService(useClass);\n\n for (const name of Object.getOwnPropertyNames(child)) {\n if (existing.indexOf(name) !== -1) {\n continue;\n }\n const def = helperExtractPropertyDescriptor(child, name);\n helperDefinePropertyDescriptor(instance, name, def);\n }\n};\n\nconst createFactoryProvider = (provider: any, provide: any) =>\n helperUseFactory(provide, () => {\n const instance = MockService(provide);\n // Magic below adds missed properties to the instance to\n // fulfill missed abstract methods.\n if (provide !== provider && Object.keys(provider).indexOf('useClass') !== -1) {\n applyMissingClassProperties(instance, provider.useClass);\n }\n\n return instance;\n });\n\nconst normalizePrimitivesMap: Array<[(value: any) => boolean, any]> = [\n [value => typeof value === 'boolean', false],\n [value => typeof value === 'number', 0],\n [value => typeof value === 'string', ''],\n [value => value === null, null],\n];\n\nconst normalizePrimitives = (value: any): any => {\n for (const [check, result] of normalizePrimitivesMap) {\n if (check(value)) {\n return result;\n }\n }\n\n return undefined;\n};\n\nconst createValueProvider = (provider: any, provide: any) =>\n helperUseFactory(provide, () =>\n provider.useValue && typeof provider.useValue === 'object'\n ? MockService(provider.useValue)\n : normalizePrimitives(provider.useValue),\n );\n\nconst createClassProvider = (provider: any, provide: any) =>\n ngMocksUniverse.builtProviders.has(provider.useClass) &&\n ngMocksUniverse.builtProviders.get(provider.useClass) === provider.useClass\n ? provider\n : helperUseFactory(provide, () => MockService(provider.useClass));\n\nconst createMockProvider = (provider: any, provide: any, cacheProviders?: Map<any, any>): Provider | undefined => {\n let mockProvider: Provider | undefined;\n if (typeof provide === 'function') {\n mockProvider = createFactoryProvider(provider, provide);\n }\n if (provide === provider && mockProvider && cacheProviders) {\n cacheProviders.set(provide, mockProvider);\n }\n\n return mockProvider;\n};\n\n// Tokens are special subject, we can skip adding them because in a mock module they are useless.\n// The main problem is that providing undefined to HTTP_INTERCEPTORS and others breaks their code.\n// If a testing module / component requires omitted tokens then they should be provided manually\n// during creation of TestBed module.\nconst handleProvider = (provider: any, provide: any, useFactory: boolean) => {\n if (provide === provider) {\n return useFactory ? helperUseFactory(provider, () => undefined) : undefined;\n }\n if (provider.multi) {\n ngMocksUniverse.config.get('ngMocksMulti')?.add(provide);\n\n return undefined;\n }\n\n let mockProvider: any;\n // istanbul ignore else\n if (Object.keys(provider).indexOf('useValue') !== -1) {\n mockProvider = createValueProvider(provider, provide);\n } else if (Object.keys(provider).indexOf('useExisting') !== -1) {\n mockProvider = provider;\n } else if (Object.keys(provider).indexOf('useClass') !== -1) {\n mockProvider = createClassProvider(provider, provide);\n } else if (Object.keys(provider).indexOf('useFactory') !== -1) {\n mockProvider = helperUseFactory(provide, () => ({}));\n }\n\n return mockProvider;\n};\n\nconst isNeverMockFunction = (provide: any): boolean =>\n typeof provide === 'function' && neverMockProvidedFunction.indexOf(provide.name) !== -1;\n\nconst isNeverMockToken = (provide: any): boolean =>\n isNgInjectionToken(provide) && neverMockToken.indexOf(provide.toString()) !== -1;\n\nexport default (provider: any, useFactory = false): Provider | undefined => {\n const provide = funcGetProvider(provider);\n\n if (ngMocksUniverse.getResolution(provide) === 'mock') {\n // nothing to do\n } else if (isNeverMockFunction(provide)) {\n return provider;\n } else if (isNeverMockToken(provide)) {\n return undefined;\n }\n\n // Only pure provides should be cached to avoid their influence on\n // another different declarations.\n const cacheProviders = ngMocksUniverse.flags.has('cacheProvider')\n ? ngMocksUniverse.cacheProviders\n : /* istanbul ignore next */ undefined;\n if (provide === provider && cacheProviders && cacheProviders.has(provide)) {\n return cacheProviders.get(provide);\n }\n\n return createMockProvider(provider, provide, cacheProviders) || handleProvider(provider, provide, useFactory);\n};\n","const isAngularClass = (value: Record<keyof any, unknown>): boolean => {\n if (value.ɵprov) {\n return true;\n }\n if (value.__annotations__) {\n return true;\n }\n if (value.__parameters__) {\n return true;\n }\n if (value.parameters) {\n return true;\n }\n\n return false;\n};\n\nconst guessClass = (name: string, proto: string, value: any): boolean => {\n // unnamed classes can be class_N\n if (name.match(/^class/) !== null) {\n return true;\n }\n\n // let's consider an existing 'prototype' as a class\n if (Object.keys(value.prototype).length > 0) {\n return true;\n }\n\n // let's consider a capital name and 'this' usage as a class\n const clsCode = name.codePointAt(0);\n if (clsCode && clsCode >= 65 && clsCode <= 90 && proto.match(/\\bthis\\./gm) !== null) {\n return true;\n }\n\n // webpack es5 class\n const regEx = new RegExp(`\\\\(this,\\\\s*${name}\\\\)`, 'mg');\n // istanbul ignore if\n if (proto.match(regEx) !== null) {\n return true;\n }\n\n return false;\n};\n\nexport default (value: any): boolean => {\n if (typeof value !== 'function') {\n return false;\n }\n if (!value.prototype) {\n return true;\n }\n if (isAngularClass(value)) {\n return false;\n }\n\n const proto = value.toString();\n\n // es2015 class\n // istanbul ignore if\n if (proto.match(/^class\\b/) !== null) {\n return false;\n }\n\n const cls = proto.match(/^function\\s+([^\\s(]+)\\(/);\n if (cls === null) {\n return true;\n }\n if (guessClass(cls[1], proto, value)) {\n return false;\n }\n\n return true;\n};\n","import { AnyType } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\n\nimport checkIsClass from './check.is-class';\nimport checkIsFunc from './check.is-func';\nimport checkIsInst from './check.is-inst';\nimport helperMockService from './helper.mock-service';\n\nconst mockVariableMap: Array<\n [(def: any) => boolean, (service: any, prefix: string, callback: typeof MockService) => any]\n> = [\n [checkIsClass, (service: any) => helperMockService.createMockFromPrototype(service.prototype)],\n [\n checkIsFunc,\n (service: any, prefix: string) => helperMockService.mockFunction(`func:${prefix || funcGetName(service)}`),\n ],\n [def => Array.isArray(def), () => []],\n [\n checkIsInst,\n (service, prefix, callback) => {\n const value = helperMockService.createMockFromPrototype(service.constructor.prototype);\n for (const property of Object.keys(service)) {\n const mock: any = callback(service[property], `${prefix || 'instance'}.${property}`);\n if (mock !== undefined) {\n value[property] = mock;\n }\n }\n Object.setPrototypeOf(value, Object.getPrototypeOf(service));\n\n return value;\n },\n ],\n];\n\nconst mockVariable = (service: any, prefix: string, callback: typeof MockService) => {\n for (const [check, createMock] of mockVariableMap) {\n if (!check(service)) {\n continue;\n }\n\n return createMock(service, prefix, callback);\n }\n};\n\n/**\n * MockService creates a mock instance out of an object or a class.\n * Primitives are converted to undefined.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n */\nexport function MockService(service: boolean | number | string | null | undefined): undefined;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n * The second parameter can be used as overrides.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const service = MockService(AuthService, {\n * loggedIn: true,\n * });\n * service.login(); // does nothing, it's dummy.\n * ```\n */\nexport function MockService<T>(service: AnyType<T>, overrides?: Partial<T>, mockNamePrefix?: string): T;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const service = MockService(AuthService);\n * service.login(); // does nothing, it's dummy.\n */\nexport function MockService<T>(service: AnyType<T>, mockNamePrefix?: string): T;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const mockUser = MockService(currentUser);\n * mockUser.save(); // does nothing, it's dummy.\n */\nexport function MockService<T = any>(service: object, mockNamePrefix?: string): T;\n\nexport function MockService(service: any, ...args: any[]): any {\n // mocking all methods / properties of a class / object.\n\n const mockNamePrefix = args.length > 0 && typeof args[0] === 'string' ? args[0] : args[1];\n const overrides = args.length > 0 && args[0] && typeof args[0] === 'object' ? args[0] : undefined;\n\n const value: any = mockVariable(service, mockNamePrefix, MockService);\n\n if (overrides) {\n mockHelperStub(value, overrides);\n }\n\n return value;\n}\n","import checkIsFunc from './check.is-func';\n\nexport default (value: any): boolean => {\n if (typeof value !== 'function') {\n return false;\n }\n\n return !checkIsFunc(value);\n};\n","export default (value: any): boolean => {\n if (value === null) {\n return false;\n }\n if (typeof value !== 'object') {\n return false;\n }\n if (value.ngMetadataName === 'InjectionToken') {\n return false;\n }\n\n return typeof Object.getPrototypeOf(value) === 'object';\n};\n","import { ɵReflectionCapabilities as ReflectionCapabilities } from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport { AnyDeclaration } from '../common/core.types';\n\ninterface Declaration {\n host: Record<string, string | undefined>;\n hostBindings: Array<[string, string?, ...any[]]>;\n hostListeners: Array<[string, string?, ...any[]]>;\n attributes: string[];\n inputs: string[];\n outputs: string[];\n propDecorators: Record<string, any[]>;\n queries: Record<string, any>;\n decorators: Array<'Injectable' | 'Pipe' | 'Directive' | 'Component' | 'NgModule'>;\n [key: string]: any;\n}\n\nconst pushDecorator = (decorators: string[], decorator: string): void => {\n const deleteIndex = decorators.indexOf(decorator);\n if (deleteIndex !== -1) {\n decorators.splice(deleteIndex, 1);\n }\n if (\n decorator === 'Injectable' ||\n decorator === 'Pipe' ||\n decorator === 'Directive' ||\n decorator === 'Component' ||\n decorator === 'NgModule'\n ) {\n decorators.push(decorator);\n }\n};\n\nconst getAllKeys = <T>(instance: T): Array<keyof T> => {\n const props: string[] = [];\n for (const key of Object.keys(instance)) {\n props.push(key);\n }\n\n return props as never;\n};\n\nconst createDeclarations = (parent: Partial<Declaration>): Declaration => ({\n host: parent.host ? { ...parent.host } : {},\n hostBindings: parent.hostBindings ? [...parent.hostBindings] : [],\n hostListeners: parent.hostListeners ? [...parent.hostListeners] : [],\n attributes: parent.attributes ? [...parent.attributes] : [],\n inputs: parent.inputs ? [...parent.inputs] : [],\n outputs: parent.outputs ? [...parent.outputs] : [],\n propDecorators: parent.propDecorators ? { ...parent.propDecorators } : {},\n queries: parent.queries ? { ...parent.queries } : {},\n decorators: parent.decorators ? [...parent.decorators] : [],\n});\n\nconst parseParameters = (\n def: {\n __parameters__?: Array<null | Array<\n | {\n attributeName: string;\n ngMetadataName: 'Attribute';\n }\n | {\n token: AnyDeclaration<any>;\n ngMetadataName: 'Inject';\n }\n | {\n ngMetadataName: 'Optional';\n }\n >>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__parameters__') && def.__parameters__) {\n for (const decorators of def.__parameters__) {\n for (const decorator of decorators || []) {\n if (\n decorator.ngMetadataName === 'Attribute' &&\n declaration.attributes.indexOf(decorator.attributeName) === -1\n ) {\n declaration.attributes.push(decorator.attributeName);\n }\n }\n }\n }\n};\n\nconst parseAnnotations = (\n def: {\n __annotations__?: Array<{\n ngMetadataName?: string;\n }>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__annotations__') && def.__annotations__) {\n for (const annotation of def.__annotations__) {\n const ngMetadataName = annotation?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n declaration[ngMetadataName] = { ...annotation, attributes: declaration.attributes };\n pushDecorator(declaration.decorators, ngMetadataName);\n }\n }\n};\n\nconst parseDecorators = (\n def: {\n decorators?: Array<{\n args?: [any];\n type?: {\n prototype?: {\n ngMetadataName?: string;\n };\n };\n }>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, 'decorators') && def.decorators) {\n for (const decorator of def.decorators) {\n const ngMetadataName = decorator?.type?.prototype?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n declaration[ngMetadataName] = decorator.args ? { ...decorator.args[0] } : {};\n pushDecorator(declaration.decorators, ngMetadataName);\n }\n }\n};\n\nconst parsePropDecoratorsParserFactoryProp =\n (key: 'inputs' | 'outputs') =>\n (\n _: string,\n prop: string,\n decorator: {\n args?: [string];\n },\n declaration: Declaration,\n ): void => {\n const value = prop + (decorator.args?.[0] ? `: ${decorator.args[0]}` : '');\n if (declaration[key].indexOf(value) === -1) {\n declaration[key].unshift(value);\n }\n };\nconst parsePropDecoratorsParserInput = parsePropDecoratorsParserFactoryProp('inputs');\nconst parsePropDecoratorsParserOutput = parsePropDecoratorsParserFactoryProp('outputs');\n\nconst parsePropDecoratorsParserFactoryQuery =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n args: [string] | [string, any];\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.args[0],\n ...decorator.args[1],\n };\n }\n };\nconst parsePropDecoratorsParserContent = parsePropDecoratorsParserFactoryQuery(false);\nconst parsePropDecoratorsParserView = parsePropDecoratorsParserFactoryQuery(true);\n\nconst parsePropDecoratorsParserHostBinding = (\n _: string,\n prop: string,\n decorator: {\n args?: [string] | [string, any[]];\n },\n declaration: Declaration,\n): void => {\n const key = `[${decorator.args?.[0] || prop}]`;\n if (!declaration.host[key]) {\n declaration.host[key] = prop;\n }\n declaration.hostBindings.push([prop, ...(decorator.args || [])]);\n};\n\nconst parsePropDecoratorsParserHostListener = (\n _: string,\n prop: string,\n decorator: {\n args?: any[];\n },\n declaration: Declaration,\n): void => {\n const key = `(${decorator.args?.[0] || prop})`;\n if (!declaration.host[key]) {\n declaration.host[key] = `${prop}($event)`;\n }\n declaration.hostListeners.push([prop, ...(decorator.args || [])]);\n};\n\nconst parsePropDecoratorsMap: any = {\n ContentChild: parsePropDecoratorsParserContent,\n ContentChildren: parsePropDecoratorsParserContent,\n HostBinding: parsePropDecoratorsParserHostBinding,\n HostListener: parsePropDecoratorsParserHostListener,\n Input: parsePropDecoratorsParserInput,\n Output: parsePropDecoratorsParserOutput,\n ViewChild: parsePropDecoratorsParserView,\n ViewChildren: parsePropDecoratorsParserView,\n};\n\nconst parsePropDecorators = (\n def: {\n propDecorators?: Record<\n string,\n Array<{\n args: any;\n type?: {\n prototype?: {\n ngMetadataName?: string;\n };\n };\n }>\n >;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, 'propDecorators') && def.propDecorators) {\n for (const prop of getAllKeys(def.propDecorators)) {\n declaration.propDecorators[prop] = [...(declaration.propDecorators[prop] || []), ...def.propDecorators[prop]];\n for (const decorator of def.propDecorators[prop]) {\n const ngMetadataName = decorator?.type?.prototype?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n parsePropDecoratorsMap[ngMetadataName]?.(ngMetadataName, prop, decorator, declaration);\n }\n }\n }\n};\n\nconst parsePropMetadataParserFactoryProp =\n (key: 'inputs' | 'outputs') =>\n (\n _: string,\n prop: string,\n decorator: {\n bindingPropertyName?: string;\n },\n declaration: Declaration,\n ): void => {\n const value = prop + (decorator.bindingPropertyName ? `: ${decorator.bindingPropertyName}` : '');\n if (declaration[key].indexOf(value) === -1) {\n declaration[key].unshift(value);\n }\n };\nconst parsePropMetadataParserInput = parsePropMetadataParserFactoryProp('inputs');\nconst parsePropMetadataParserOutput = parsePropMetadataParserFactoryProp('outputs');\n\nconst parsePropMetadataParserFactoryQueryChild =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n read?: any;\n selector: string;\n static?: boolean;\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.selector,\n ...(decorator.read !== undefined ? { read: decorator.read } : {}),\n ...(decorator.static !== undefined ? { static: decorator.static } : {}),\n };\n }\n };\nconst parsePropMetadataParserContentChild = parsePropMetadataParserFactoryQueryChild(false);\nconst parsePropMetadataParserViewChild = parsePropMetadataParserFactoryQueryChild(true);\n\nconst parsePropMetadataParserFactoryQueryChildren =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n descendants?: any;\n emitDistinctChangesOnly?: boolean;\n read?: any;\n selector: string;\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.selector,\n ...(decorator.descendants !== undefined ? { descendants: decorator.descendants } : {}),\n ...(decorator.emitDistinctChangesOnly !== undefined\n ? { emitDistinctChangesOnly: decorator.emitDistinctChangesOnly }\n : {}),\n ...(decorator.read !== undefined ? { read: decorator.read } : {}),\n };\n }\n };\nconst parsePropMetadataParserContentChildren = parsePropMetadataParserFactoryQueryChildren(false);\nconst parsePropMetadataParserViewChildren = parsePropMetadataParserFactoryQueryChildren(true);\n\nconst parsePropMetadataParserHostBinding = (\n _: string,\n prop: string,\n decorator: {\n args?: any;\n hostPropertyName?: string;\n },\n declaration: Declaration,\n): void => {\n const key = `[${decorator.hostPropertyName || prop}]`;\n if (!declaration.host[key]) {\n declaration.host[key] = prop;\n }\n declaration.hostBindings.push([\n prop,\n decorator.hostPropertyName || prop,\n ...(decorator.args ? [decorator.args] : []),\n ]);\n};\n\nconst parsePropMetadataParserHostListener = (\n _: string,\n prop: string,\n decorator: {\n args?: any;\n eventName?: string;\n },\n declaration: Declaration,\n): void => {\n const key = `(${decorator.eventName || prop})`;\n if (!declaration.host[key]) {\n declaration.host[key] = `${prop}($event)`;\n }\n declaration.hostListeners.push([prop, decorator.eventName || prop, ...(decorator.args ? [decorator.args] : [])]);\n};\n\nconst parsePropMetadataMap: any = {\n ContentChild: parsePropMetadataParserContentChild,\n ContentChildren: parsePropMetadataParserContentChildren,\n HostBinding: parsePropMetadataParserHostBinding,\n HostListener: parsePropMetadataParserHostListener,\n Input: parsePropMetadataParserInput,\n Output: parsePropMetadataParserOutput,\n ViewChild: parsePropMetadataParserViewChild,\n ViewChildren: parsePropMetadataParserViewChildren,\n};\n\nconst parsePropMetadata = (\n def: {\n __prop__metadata__?: Record<keyof any, any[]>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__prop__metadata__') && def.__prop__metadata__) {\n for (const prop of getAllKeys(def.__prop__metadata__)) {\n const decorators: Array<{\n ngMetadataName?: string;\n }> = def.__prop__metadata__[prop];\n for (const decorator of decorators) {\n const ngMetadataName = decorator?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n parsePropMetadataMap[ngMetadataName]?.(ngMetadataName, prop, decorator, declaration);\n }\n }\n }\n};\n\nconst buildDeclaration = (def: any | undefined, declaration: Declaration): void => {\n if (def) {\n def.inputs = def.inputs || [];\n for (const input of declaration.inputs) {\n if (def.inputs.indexOf(input) === -1) {\n def.inputs.push(input);\n }\n }\n\n def.outputs = def.outputs || [];\n for (const output of declaration.outputs) {\n if (def.outputs.indexOf(output) === -1) {\n def.outputs.push(output);\n }\n }\n\n def.queries = {\n ...(def.queries || []),\n ...declaration.queries,\n };\n\n def.hostBindings = declaration.hostBindings;\n def.hostListeners = declaration.hostListeners;\n }\n};\n\nconst reflectionCapabilities = new ReflectionCapabilities();\n\nconst parse = (def: any): any => {\n if (typeof def !== 'function' && typeof def !== 'object') {\n return {};\n }\n\n if (Object.prototype.hasOwnProperty.call(def, '__ngMocksParsed')) {\n return def.__ngMocksDeclarations;\n }\n\n const parent = Object.getPrototypeOf(def);\n const parentDeclarations = parent ? parse(parent) : {};\n const declaration = createDeclarations(parentDeclarations);\n coreDefineProperty(def, '__ngMocksParsed', true);\n parseParameters(def, declaration);\n parseAnnotations(def, declaration);\n parseDecorators(def, declaration);\n parsePropDecorators(def, declaration);\n parsePropMetadata(def, declaration);\n buildDeclaration(declaration.Directive, declaration);\n buildDeclaration(declaration.Component, declaration);\n\n coreDefineProperty(def, '__ngMocksDeclarations', {\n ...parentDeclarations,\n ...declaration,\n parameters: reflectionCapabilities.parameters(def),\n });\n\n return def.__ngMocksDeclarations;\n};\n\nexport default ((): ((def: any) => Declaration) => parse)();\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = x({ [\"ChangeDetectorRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ChangeDetectorRef, [\"Component\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Component, [\"ComponentFactoryResolver\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ComponentFactoryResolver, [\"ContentChild\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ContentChild, [\"ContentChildren\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ContentChildren, [\"DebugElement\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.DebugElement, [\"Directive\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Directive, [\"ElementRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ElementRef, [\"EventEmitter\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.EventEmitter, [\"InjectionToken\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.InjectionToken, [\"Injector\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Injector, [\"Input\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Input, [\"NgModule\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.NgModule, [\"Optional\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Optional, [\"Output\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Output, [\"Pipe\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Pipe, [\"QueryList\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.QueryList, [\"Self\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Self, [\"TemplateRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.TemplateRef, [\"ViewChild\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewChild, [\"ViewChildren\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewChildren, [\"ViewContainerRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewContainerRef, [\"ɵReflectionCapabilities\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__[\"ɵReflectionCapabilities\"], [\"ɵivyEnabled\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__[\"ɵivyEnabled\"] });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = x({ [\"TestBed\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__.TestBed, [\"getTestBed\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__.getTestBed });","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import ngMocksUniverse from './ng-mocks-universe';\n\nexport interface NgMocksStack {\n id: object;\n level: 'root' | 'runtime';\n mockInstance?: any[];\n}\n\ntype NgMocksStackCallback = (state: NgMocksStack, stack: NgMocksStack[]) => void;\n\nconst stackRoot: NgMocksStack = { id: {}, level: 'root' };\nconst stack: NgMocksStack[] = ngMocksUniverse.global.get('reporter-stack') || [{ ...stackRoot }];\nngMocksUniverse.global.set('reporter-stack', stack);\nconst current = () => stack[stack.length - 1];\n\n// istanbul ignore next\nconst listenersPush: NgMocksStackCallback[] = ngMocksUniverse.global.get('reporter-stack-push') ?? [];\nngMocksUniverse.global.set('reporter-stack-push', listenersPush);\n\n// istanbul ignore next\nconst listenersPop: NgMocksStackCallback[] = ngMocksUniverse.global.get('reporter-stack-pop') ?? [];\nngMocksUniverse.global.set('reporter-stack-pop', listenersPop);\n\nconst stackPush = () => {\n const id = {};\n ngMocksUniverse.global.set('reporter-stack-id', id);\n const state: NgMocksStack = { id, level: 'runtime' };\n stack.push(state);\n\n for (const callback of listenersPush) {\n callback(state, stack);\n }\n};\nconst stackPop = () => {\n const state = stack.pop();\n\n // this code is actually needed for jest tests.\n // istanbul ignore if\n if (stack.length === 0) {\n stack.push(state?.level === 'root' ? state : { ...stackRoot });\n }\n\n // istanbul ignore else\n if (state && state.level !== 'root') {\n for (const callback of listenersPop) {\n callback(state, stack);\n }\n }\n\n ngMocksUniverse.global.set('reporter-stack-id', stack[stack.length - 1].id);\n};\n\n// istanbul ignore next\nconst subscribePush = (callback: NgMocksStackCallback) => {\n if (listenersPush.indexOf(callback)) {\n listenersPush.push(callback);\n }\n if (stack.length > 0) {\n callback(stack[stack.length - 1], stack);\n }\n};\n\n// istanbul ignore next\nconst subscribePop = (callback: NgMocksStackCallback) => {\n if (listenersPop.indexOf(callback) === -1) {\n listenersPop.push(callback);\n }\n};\n\n// istanbul ignore next\nconst unsubscribePush = (callback: NgMocksStackCallback) => {\n const index = listenersPush.indexOf(callback);\n if (index !== -1) {\n listenersPush.splice(index, 1);\n }\n};\n\n// istanbul ignore next\nconst unsubscribePop = (callback: NgMocksStackCallback) => {\n const index = listenersPop.indexOf(callback);\n if (index !== -1) {\n listenersPop.splice(index, 1);\n }\n};\n\nexport default {\n current,\n stackPop,\n stackPush,\n subscribePop,\n subscribePush,\n unsubscribePop,\n unsubscribePush,\n};\n","import { MetadataOverride } from '@angular/core/testing';\n\nimport { flatten } from '../common/core.helpers';\nimport { NG_MOCKS, NG_MOCKS_OVERRIDES, NG_MOCKS_TOUCHES } from '../common/core.tokens';\nimport { AnyType } from '../common/core.types';\n\nexport default (\n providers: any,\n): {\n mocks?: Map<any, any>;\n overrides?: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]>;\n touches?: Set<any>;\n} => {\n let mocks: Map<any, any> | undefined;\n let overrides: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]> | undefined;\n let touches: Set<any> | undefined;\n\n for (const provide of flatten(providers || [])) {\n if (typeof provide !== 'object') {\n continue;\n }\n if (provide.provide === NG_MOCKS) {\n mocks = provide.useValue;\n }\n if (provide.provide === NG_MOCKS_OVERRIDES) {\n overrides = provide.useValue;\n }\n if (provide.provide === NG_MOCKS_TOUCHES) {\n touches = provide.useValue;\n }\n }\n\n return {\n mocks,\n overrides,\n touches,\n };\n};\n","import { Provider } from '@angular/core';\n\nimport { Type } from './core.types';\n\n/**\n * NgModuleWithProviders helps to support ModuleWithProviders in all angular versions.\n * In A5 it was without the generic type.\n *\n * @internal remove after removal of A5 support\n */\nexport interface NgModuleWithProviders<T = any> {\n ngModule: Type<T>;\n providers?: Provider[];\n}\n\n/**\n * isNgModuleDefWithProviders checks if an object implements ModuleWithProviders.\n *\n * @internal\n */\nexport const isNgModuleDefWithProviders = (declaration: any): declaration is NgModuleWithProviders =>\n declaration && typeof declaration === 'object' && typeof declaration.ngModule === 'function';\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { AnyType } from './core.types';\n\n/**\n * Checks whether a class has been decorated with a specific Angular decorator.\n * Due to the extension / multi decoration, we rely on the last used decorator.\n *\n * @internal\n *\n * ```ts\n * isNgType(MockModule, 'NgModule'); // returns true\n * isNgType(RealComponent, 'Component'); // returns true\n * isNgType(ArbitraryClass, 'Directive'); // returns false\n * isNgType(ArbitraryClass, 'Injectable'); // returns false\n * ```\n */\nexport const isNgType = (declaration: AnyType<any>, type: string): boolean => {\n const { decorators } = collectDeclarations(declaration);\n if (decorators.length === 0) {\n return false;\n }\n\n let offset = 1;\n\n // Injectable works well if the declaration is in providers.\n if (type === 'Injectable' && decorators.indexOf('Injectable') !== -1) {\n return true;\n }\n\n // Skipping Injectable.\n while (decorators[decorators.length - offset] === 'Injectable') {\n offset += 1;\n }\n\n return decorators[decorators.length - offset] === type;\n};\n","import { InjectionToken, PipeTransform } from '@angular/core';\n\nimport { Type } from './core.types';\nimport { isNgInjectionToken } from './func.is-ng-injection-token';\nimport { isNgType } from './func.is-ng-type';\n\nconst isModuleCheck = (def: any, ngType?: string): boolean => (!ngType || ngType === 'm') && isNgType(def, 'NgModule');\nconst isComponentCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'c') && isNgType(def, 'Component');\nconst isDirectiveCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'd') && isNgType(def, 'Directive');\nconst isPipeCheck = (def: any, ngType?: string): boolean => (!ngType || ngType === 'p') && isNgType(def, 'Pipe');\nconst isInjectableCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'i') && isNgType(def, 'Injectable');\n\n/**\n * Checks whether a class has been decorated by @NgModule.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealModule, 'm'); // returns true\n * isNgDef(MockModule, 'm'); // returns true\n * isNgDef(ArbitraryModule, 'm'); // returns true\n * isNgDef(ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'm'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealComponent, 'c'); // returns true\n * isNgDef(MockComponent, 'c'); // returns true\n * isNgDef(ArbitraryComponent, 'c'); // returns true\n * isNgDef(ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'c'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealDirective, 'd'); // returns true\n * isNgDef(MockDirective, 'd'); // returns true\n * isNgDef(ArbitraryDirective, 'd'); // returns true\n * isNgDef(ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'd'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealPipe, 'p'); // returns true\n * isNgDef(MockPipe, 'p'); // returns true\n * isNgDef(ArbitraryPipe, 'p'); // returns true\n * isNgDef(ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'p'): declaration is Type<PipeTransform>;\n\n/**\n * Checks whether a class has been decorated by @Injectable.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealService, 'i'); // returns true\n * isNgDef(MockService, 'i'); // returns true\n * isNgDef(ArbitraryService, 'i'); // returns true\n * isNgDef(ArbitraryClass, 'i'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'i'): declaration is Type<any>;\n\n/**\n * Checks whether a variable is a token.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(realToken, 't'); // returns true\n * isNgDef(mockToken, 't'); // returns true\n * isNgDef(arbitraryToken, 't'); // returns true\n * isNgDef(arbitraryObject, 't'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 't'): declaration is InjectionToken<any>;\n\n/**\n * Checks whether a class or variable has been decorated by a ng type.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealModule); // returns true\n * isNgDef(MockComponent); // returns true\n * isNgDef(ArbitraryDirective); // returns true\n * isNgDef(token); // returns true\n * isNgDef(ArbitraryClass); // returns false\n * ```\n */\nexport function isNgDef(declaration: any): declaration is Type<any>;\n\nexport function isNgDef(declaration: any, ngType?: string): declaration is Type<any> {\n if (ngType === 't') {\n return isNgInjectionToken(declaration);\n }\n if (typeof declaration !== 'function') {\n return false;\n }\n\n const isModule = isModuleCheck(declaration, ngType);\n const isComponent = isComponentCheck(declaration, ngType);\n const isDirective = isDirectiveCheck(declaration, ngType);\n const isPipe = isPipeCheck(declaration, ngType);\n const isInjectable = isInjectableCheck(declaration, ngType);\n\n return isModule || isComponent || isDirective || isPipe || isInjectable;\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"AbstractControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.AbstractControl, [\"DefaultValueAccessor\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.DefaultValueAccessor, [\"FormControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.FormControl, [\"FormControlDirective\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.FormControlDirective, [\"NG_ASYNC_VALIDATORS\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_ASYNC_VALIDATORS, [\"NG_VALIDATORS\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_VALIDATORS, [\"NG_VALUE_ACCESSOR\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_VALUE_ACCESSOR, [\"NgControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NgControl, [\"NgModel\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NgModel });","import * as module from '@angular/forms';\n\nconst AbstractControl = module.AbstractControl;\nconst DefaultValueAccessor = module.DefaultValueAccessor;\nconst FormControl = module.FormControl;\nconst FormControlDirective = module.FormControlDirective;\nconst NG_ASYNC_VALIDATORS = module.NG_ASYNC_VALIDATORS;\nconst NG_VALIDATORS = module.NG_VALIDATORS;\nconst NG_VALUE_ACCESSOR = module.NG_VALUE_ACCESSOR;\nconst NgControl = module.NgControl;\nconst NgModel = module.NgModel;\n\nexport default {\n AbstractControl,\n DefaultValueAccessor,\n FormControl,\n FormControlDirective,\n NG_ASYNC_VALIDATORS,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgModel,\n};\n","export default (def: any): boolean => {\n if (!def) {\n return false;\n }\n\n if (typeof def !== 'function' && typeof def !== 'object') {\n return false;\n }\n\n if (def._isMockFunction && def.mockName && def.__annotations__) {\n return true;\n }\n\n return false;\n};\n","import funcGetName from './func.get-name';\nimport funcIsJestMock from './func.is-jest-mock';\n\nexport default (def: any): void => {\n if (funcIsJestMock(def)) {\n throw new Error(\n [\n `ng-mocks got ${funcGetName(def)} which has been already mocked by jest.mock().`,\n 'It is not possible to produce correct mocks for it, because jest.mock() removes Angular decorators.',\n `To fix this, please avoid jest.mock() on the file which exports ${funcGetName(\n def,\n )} or add jest.dontMock() on it.`,\n 'The same should be done for all related dependencies.',\n ].join(' '),\n );\n }\n};\n","import errorEmptyDef from './error.empty-def';\nimport errorJestMock from './error.jest-mock';\nimport errorMissingDecorators from './error.missing-decorators';\n\nexport default (callback: any) => (def: any) => {\n errorEmptyDef(def);\n\n try {\n return callback(def);\n } catch {\n errorJestMock(def);\n errorMissingDecorators(def);\n }\n};\n","export default (def: any): void => {\n if (!def) {\n throw new Error(\n [\n 'undefined / null has been passed into ng-mocks as a declaration / provider.',\n 'Please ensure that the current test file has correct imports:',\n 'imported files exist and imported declarations have been exported in the file.',\n ].join(' '),\n );\n }\n};\n","import funcGetName from './func.get-name';\n\nexport default (def: any): void => {\n throw new Error(\n [\n `${funcGetName(def)} declaration has been passed into ng-mocks without Angular decorators.`,\n 'Therefore, it cannot be properly handled.',\n 'Highly likely,',\n typeof jest === 'undefined' ? '' : /* istanbul ignore next */ 'jest.mock() has been used on its file, or',\n 'ng-mocks is imported in production code, or got a class without Angular decoration.',\n 'Otherwise, please create an issue on github: https://github.com/help-me-mom/ng-mocks/issues/new?title=False%20positive%20ng-mocks%20not%20in%20JIT.',\n 'Thank you in advance for support.',\n ].join(' '),\n );\n};\n","import { Component, Directive } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): Directive & Partial<Component> & { standalone?: boolean } =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.Component) {\n return declaration.Component;\n }\n if (declaration.Directive) {\n return declaration.Directive;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { Injector, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { MockConfig } from './mock';\n\nexport default <T>(\n value: T,\n): value is T &\n MockConfig & {\n __ngMocksInjector?: Injector;\n __template?: TemplateRef<any>;\n __vcr?: ViewContainerRef;\n } => {\n return value && typeof value === 'object' && !!(value as any).__ngMocksConfig;\n};\n","import { AsyncValidator, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\n\nimport { AnyType } from './core.types';\nimport { MockControlValueAccessor, MockValidator } from './mock-control-value-accessor';\n\nconst applyProxy = (proxy: any, method: string, value: any, storage?: string) => {\n if (proxy.instance && storage) {\n proxy.instance[storage] = value;\n }\n if (proxy.instance && proxy.instance[method]) {\n return proxy.instance[method](value);\n }\n};\n\nexport class MockControlValueAccessorProxy implements ControlValueAccessor {\n public instance?: Partial<MockControlValueAccessor & ControlValueAccessor>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnChange(fn: any): void {\n applyProxy(this, 'registerOnChange', fn, '__simulateChange');\n }\n\n public registerOnTouched(fn: any): void {\n applyProxy(this, 'registerOnTouched', fn, '__simulateTouch');\n }\n\n public setDisabledState(isDisabled: boolean): void {\n applyProxy(this, 'setDisabledState', isDisabled);\n }\n\n public writeValue(value: any): void {\n applyProxy(this, 'writeValue', value);\n }\n}\n\nexport class MockValidatorProxy implements Validator {\n public instance?: Partial<MockValidator & Validator>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnValidatorChange(fn: any): void {\n applyProxy(this, 'registerOnValidatorChange', fn, '__simulateValidatorChange');\n }\n\n public validate(control: any): ValidationErrors | null {\n if (this.instance && this.instance.validate) {\n return this.instance.validate(control);\n }\n\n return null;\n }\n}\n\nexport class MockAsyncValidatorProxy implements AsyncValidator {\n public instance?: Partial<MockValidator & AsyncValidator>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnValidatorChange(fn: any): void {\n applyProxy(this, 'registerOnValidatorChange', fn, '__simulateValidatorChange');\n }\n\n public validate(control: any): any {\n if (this.instance && this.instance.validate) {\n const result: any = this.instance.validate(control);\n\n return result === undefined ? Promise.resolve(null) : result;\n }\n\n return Promise.resolve(null);\n }\n}\n","import { EventEmitter, Injector, Optional, Self } from '@angular/core';\n\nimport { IMockBuilderConfig } from '../mock-builder/types';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport mockInstanceApply from '../mock-instance/mock-instance-apply';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport coreDefineProperty from './core.define-property';\nimport coreForm from './core.form';\nimport { mapValues } from './core.helpers';\nimport { AnyType } from './core.types';\nimport funcIsMock from './func.is-mock';\nimport { MockControlValueAccessorProxy } from './mock-control-value-accessor-proxy';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst setValueAccessor = (instance: any, ngControl?: any) => {\n if (ngControl && !ngControl.valueAccessor && instance.__ngMocksConfig.setControlValueAccessor) {\n try {\n ngControl.valueAccessor = new MockControlValueAccessorProxy(instance.__ngMocksCtor);\n } catch {\n // nothing to do.\n }\n }\n};\n\n// connecting to NG_VALUE_ACCESSOR\nconst installValueAccessor = (ngControl: any, instance: any) => {\n if (!ngControl.valueAccessor.instance && ngControl.valueAccessor.target === instance.__ngMocksCtor) {\n ngControl.valueAccessor.instance = instance;\n helperMockService.mock(instance, 'registerOnChange');\n helperMockService.mock(instance, 'registerOnTouched');\n helperMockService.mock(instance, 'setDisabledState');\n helperMockService.mock(instance, 'writeValue');\n instance.__ngMocksConfig.isControlValueAccessor = true;\n }\n};\n\n// connecting to NG_VALIDATORS\n// connecting to NG_ASYNC_VALIDATORS\nconst installValidator = (validators: any[], instance: any) => {\n for (const validator of validators) {\n if (!validator.instance && validator.target === instance.__ngMocksCtor) {\n validator.instance = instance;\n helperMockService.mock(instance, 'registerOnValidatorChange');\n helperMockService.mock(instance, 'validate');\n instance.__ngMocksConfig.isValidator = true;\n }\n }\n};\n\nconst applyNgValueAccessor = (instance: any, ngControl: any) => {\n setValueAccessor(instance, ngControl);\n\n try {\n // istanbul ignore else\n if (ngControl) {\n installValueAccessor(ngControl, instance);\n installValidator(ngControl._rawValidators, instance);\n installValidator(ngControl._rawAsyncValidators, instance);\n }\n } catch {\n // nothing to do.\n }\n};\n\nconst applyOutputs = (instance: MockConfig & Record<keyof any, any>) => {\n const mockOutputs = [];\n for (const output of instance.__ngMocksConfig.outputs || []) {\n mockOutputs.push(output.split(':')[0]);\n }\n\n for (const output of mockOutputs) {\n if (instance[output] || Object.getOwnPropertyDescriptor(instance, output)) {\n continue;\n }\n instance[output] = new EventEmitter<any>();\n }\n};\n\nconst applyPrototype = (instance: Mock, prototype: AnyType<any>) => {\n for (const prop of [\n ...helperMockService.extractMethodsFromPrototype(prototype),\n ...helperMockService.extractPropertiesFromPrototype(prototype),\n ]) {\n const descriptor = helperMockService.extractPropertyDescriptor(prototype, prop);\n helperMockService.definePropertyDescriptor(instance, prop, descriptor);\n }\n};\n\nconst applyMethods = (instance: Mock & Record<keyof any, any>, prototype: AnyType<any>) => {\n for (const method of helperMockService.extractMethodsFromPrototype(prototype)) {\n if (instance[method] || Object.getOwnPropertyDescriptor(instance, method)) {\n continue;\n }\n helperMockService.mock(instance, method);\n }\n};\n\nconst applyProps = (instance: Mock & Record<keyof any, any>, prototype: AnyType<any>) => {\n for (const prop of helperMockService.extractPropertiesFromPrototype(prototype)) {\n if (instance[prop] || Object.getOwnPropertyDescriptor(instance, prop)) {\n continue;\n }\n helperMockService.mock(instance, prop, 'get');\n helperMockService.mock(instance, prop, 'set');\n }\n};\n\nexport type ngMocksMockConfig = {\n config?: IMockBuilderConfig;\n hostBindings?: string[];\n hostListeners?: string[];\n init?: (instance: any) => void;\n isControlValueAccessor?: boolean;\n isValidator?: boolean;\n outputs?: string[];\n queryScanKeys?: string[];\n setControlValueAccessor?: boolean;\n};\n\nconst applyOverrides = (instance: any, mockOf: any, injector?: Injector): void => {\n const configGlobal: Set<any> | undefined = ngMocksUniverse.getOverrides().get(mockOf);\n const callbacks = configGlobal ? mapValues(configGlobal) : [];\n if (instance.__ngMocksConfig.init) {\n callbacks.push(instance.__ngMocksConfig.init);\n }\n callbacks.push(...mockInstanceApply(mockOf));\n\n for (const callback of callbacks) {\n const overrides = callback(instance, injector);\n if (!overrides) {\n continue;\n }\n mockHelperStub(instance, overrides);\n }\n};\n\nexport interface MockConfig {\n __ngMocksConfig: ngMocksMockConfig;\n}\n\n/**\n * Mock class is the base class for each mock.\n * Usually, it should not be used directly.\n */\nexport class Mock {\n protected __ngMocksConfig!: ngMocksMockConfig;\n\n public constructor(\n injector: Injector | null = null,\n ngControl: any | null = null, // NgControl\n ) {\n const mockOf = (this.constructor as any).mockOf;\n coreDefineProperty(this, '__ngMocks', true);\n coreDefineProperty(this, '__ngMocksInjector', injector);\n coreDefineProperty(this, '__ngMocksCtor', this.constructor);\n for (const key of this.__ngMocksConfig.queryScanKeys || /* istanbul ignore next */ []) {\n coreDefineProperty(this, `__ngMocksVcr_${key}`, undefined);\n }\n for (const key of this.__ngMocksConfig.hostBindings || /* istanbul ignore next */ []) {\n helperMockService.mock(this, key, 'get');\n helperMockService.mock(this, key, 'set');\n }\n for (const key of this.__ngMocksConfig.hostListeners || /* istanbul ignore next */ []) {\n helperMockService.mock(this, key);\n }\n\n // istanbul ignore else\n if (funcIsMock(this)) {\n applyNgValueAccessor(this, ngControl);\n applyOutputs(this);\n applyPrototype(this, Object.getPrototypeOf(this));\n applyMethods(this, mockOf.prototype);\n applyProps(this, mockOf.prototype);\n }\n\n // and faking prototype\n Object.setPrototypeOf(this, mockOf.prototype);\n\n applyOverrides(this, mockOf, injector ?? undefined);\n }\n}\n\ncoreDefineProperty(Mock, 'parameters', [\n [Injector, new Optional()],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n]);\n","import { Mock } from './mock';\n\n/**\n * LegacyControlValueAccessor was used to be a way to manipulate a mock ControlValueAccessor.\n *\n * @deprecated use isMockControlValueAccessor or isMockValidator instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport class LegacyControlValueAccessor extends Mock {\n /**\n * @deprecated use isMockControlValueAccessor instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\n public __simulateChange(value: any): void;\n // istanbul ignore next\n public __simulateChange() {\n // nothing to do.\n }\n\n // istanbul ignore next\n /**\n * @deprecated use isMockControlValueAccessor instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\n public __simulateTouch() {\n // nothing to do.\n }\n\n // istanbul ignore next\n /**\n * @deprecated use isMockValidator instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\n public __simulateValidatorChange() {\n // nothing to do.\n }\n}\n\n/**\n * MockControlValueAccessor exposes access to a mock ControlValueAccessor.\n * It should be used in a combination with isMockControlValueAccessor.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\nexport interface MockControlValueAccessor {\n /**\n * It simulates an external change of the value.\n * Please consider usage of ngMocks.change().\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n */\n __simulateChange(value: any): void;\n\n /**\n * It simulates an external touch.\n * Please consider usage of ngMocks.touch().\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\n __simulateTouch(): void;\n}\n\n/**\n * MockValidator exposes access to a mock Validator.\n * It should be used in a combination with isMockValidator.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport interface MockValidator {\n /**\n * it simulates an external validation change.\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n */\n __simulateValidatorChange(): void;\n}\n","import { Input } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, inputs?: string[], exclude?: string[]) => {\n // istanbul ignore else\n if (inputs) {\n for (const input of inputs) {\n const [key, alias] = input.split(': ');\n if (exclude && exclude.indexOf(key) !== -1) {\n continue;\n }\n Input(alias)(cls.prototype, key);\n }\n }\n};\n","import coreDefineProperty from './core.define-property';\nimport { AnyType } from './core.types';\nimport funcGetName from './func.get-name';\nimport { ngMocksMockConfig } from './mock';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nexport default (mock: AnyType<any>, source: AnyType<any>, configInput: ngMocksMockConfig = {}): void => {\n coreDefineProperty(mock, 'mockOf', source);\n coreDefineProperty(mock, 'nameConstructor', funcGetName(mock));\n coreDefineProperty(mock, 'name', `MockOf${funcGetName(source)}`, true);\n const config = ngMocksUniverse.getConfigMock().has(source)\n ? {\n ...configInput,\n config: {\n ...ngMocksUniverse.getConfigMock().get(source),\n ...configInput.config,\n },\n }\n : configInput;\n coreDefineProperty(mock.prototype, '__ngMocksConfig', config);\n};\n","import { ContentChild, ContentChildren, Query, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\nconst map: any = {\n ContentChild,\n ContentChildren,\n ViewChild,\n ViewChildren,\n};\n\nconst isInternalKey = (key: string): boolean => {\n return key.indexOf('__mock') === 0;\n};\n\nconst cloneVcrQuery = (query: Query & { ngMetadataName?: string }) => ({\n ...query,\n ngMetadataName: query.ngMetadataName,\n read: ViewContainerRef,\n});\n\nconst generateFinalQueries = (queries: {\n [key: string]: Query;\n}): [Array<[string, Query & { ngMetadataName?: string }]>, string[]] => {\n const final: Array<[string, Query & { ngMetadataName?: string }]> = [];\n const scanKeys: string[] = [];\n\n for (const key of Object.keys(queries)) {\n const query: Query & { ngMetadataName?: string } = queries[key];\n final.push([key, query]);\n\n if (!query.isViewQuery && !isInternalKey(key)) {\n scanKeys.push(key);\n final.push([`__ngMocksVcr_${key}`, cloneVcrQuery(query)]);\n }\n }\n\n return [final, scanKeys];\n};\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also, we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, queries?: { [key: string]: Query }): string[] => {\n // istanbul ignore if\n if (!queries) {\n return [];\n }\n const [final, keys] = generateFinalQueries(queries);\n\n for (const [key, query] of final) {\n // istanbul ignore else\n if (query.ngMetadataName) {\n const decorator = map[query.ngMetadataName];\n decorator(query.selector, query)(cls.prototype, key);\n }\n }\n\n return keys;\n};\n","import { AnyType } from '../common/core.types';\n\nexport default (provide: AnyType<any>, useExisting: AnyType<any>) => ({\n provide,\n useExisting,\n});\n","import { AnyType } from '../common/core.types';\n\nexport default (provide: AnyType<any>, useFactory: any) => ({\n multi: true,\n provide,\n useFactory,\n});\n","import { Provider } from '@angular/core';\n\nimport coreForm from '../common/core.form';\nimport { flatten } from '../common/core.helpers';\nimport { AnyType } from '../common/core.types';\nimport funcGetProvider from '../common/func.get-provider';\nimport {\n MockAsyncValidatorProxy,\n MockControlValueAccessorProxy,\n MockValidatorProxy,\n} from '../common/mock-control-value-accessor-proxy';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport toExistingProvider from './to-existing-provider';\nimport toFactoryProvider from './to-factory-provider';\n\nconst processTokens = (mockType: AnyType<any>, provider: any) => {\n const provide = funcGetProvider(provider);\n if (coreForm.NG_VALIDATORS && provide === coreForm.NG_VALIDATORS) {\n return toFactoryProvider(provide, () => new MockValidatorProxy(mockType));\n }\n if (coreForm.NG_ASYNC_VALIDATORS && provide === coreForm.NG_ASYNC_VALIDATORS) {\n return toFactoryProvider(provide, () => new MockAsyncValidatorProxy(mockType));\n }\n if (coreForm.NG_VALUE_ACCESSOR && provide === coreForm.NG_VALUE_ACCESSOR) {\n return toFactoryProvider(provide, () => new MockControlValueAccessorProxy(mockType));\n }\n\n return undefined;\n};\n\nconst processOwnUseExisting = (sourceType: AnyType<any>, mockType: AnyType<any>, provider: any) => {\n const provide = funcGetProvider(provider);\n\n // Check tests/issue-302/test.spec.ts\n if (provide === coreForm.NgControl || provide === coreForm.FormControlDirective) {\n return undefined;\n }\n\n if (provider !== provide && provider.useExisting === sourceType) {\n return toExistingProvider(provide, mockType);\n }\n if (\n provider !== provide &&\n provider.useExisting &&\n provider.useExisting.__forward_ref__ &&\n provider.useExisting() === sourceType\n ) {\n return toExistingProvider(provide, mockType);\n }\n\n return undefined;\n};\n\nconst processProvider = (\n sourceType: AnyType<any>,\n mockType: AnyType<any>,\n provider: any,\n resolutions: Map<any, any>,\n): any => {\n const token = processTokens(mockType, provider);\n if (token) {\n return token;\n }\n\n const ownUseExisting = processOwnUseExisting(sourceType, mockType, provider);\n if (ownUseExisting) {\n return ownUseExisting;\n }\n\n return helperMockService.resolveProvider(provider, resolutions);\n};\n\nexport default (\n sourceType: AnyType<any>,\n mockType: AnyType<any>,\n providers?: any[],\n): {\n providers: Provider[];\n setControlValueAccessor?: boolean;\n} => {\n const result: Provider[] = [];\n let setControlValueAccessor: boolean | undefined;\n const resolutions = new Map();\n\n for (const provider of flatten(providers || /* istanbul ignore next */ [])) {\n const provide = funcGetProvider(provider);\n if (provide === coreForm.NG_VALUE_ACCESSOR) {\n setControlValueAccessor = false;\n }\n const mock = processProvider(sourceType, mockType, provider, resolutions);\n if (mock) {\n result.push(mock);\n }\n }\n\n return {\n providers: result,\n setControlValueAccessor,\n };\n};\n","import { Component, Directive, NgModule, Provider, ViewChild } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\nimport decorateInputs from '../common/decorate.inputs';\nimport decorateMock from '../common/decorate.mock';\nimport decorateOutputs from '../common/decorate.outputs';\nimport decorateQueries from '../common/decorate.queries';\nimport { ngMocksMockConfig } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockNgDef from '../mock-module/mock-ng-def';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport cloneProviders from './clone-providers';\nimport toExistingProvider from './to-existing-provider';\n\nconst buildConfig = (\n source: AnyType<any>,\n meta: {\n inputs?: string[];\n outputs?: string[];\n providers?: Provider[];\n queries?: Record<string, ViewChild>;\n },\n setControlValueAccessor: boolean,\n) => {\n return {\n config: ngMocksUniverse.config.get(source),\n outputs: meta.outputs,\n queryScanKeys: [],\n setControlValueAccessor: setControlValueAccessor,\n };\n};\n\nexport default <T extends Component & Directive>(\n source: AnyType<any>,\n mock: AnyType<any>,\n meta: Component &\n Directive &\n NgModule & {\n hostBindings?: Array<[string, any]>;\n hostListeners?: Array<[string, any, any]>;\n imports?: any[];\n standalone?: boolean;\n },\n params: T,\n): Component & Directive => {\n const options: T & { imports?: any[]; standalone?: boolean } = {\n ...params,\n };\n\n if (meta.exportAs !== undefined) {\n options.exportAs = meta.exportAs;\n }\n if (meta.selector !== undefined) {\n options.selector = meta.selector;\n }\n if (meta.standalone !== undefined) {\n options.standalone = meta.standalone;\n }\n\n const { setControlValueAccessor, providers } = cloneProviders(source, mock, meta.providers || []);\n providers.push(toExistingProvider(source, mock));\n options.providers = providers;\n\n const { providers: viewProviders } = cloneProviders(source, mock, meta.viewProviders || []);\n if (viewProviders.length > 0) {\n options.viewProviders = viewProviders;\n }\n\n if (meta.standalone && meta.imports) {\n const { imports } = mockNgDef({ imports: meta.imports })[1];\n if (imports?.length) {\n options.imports = imports as never;\n }\n }\n\n const config: ngMocksMockConfig = buildConfig(\n source,\n meta,\n setControlValueAccessor ??\n helperMockService.extractMethodsFromPrototype(source.prototype).indexOf('writeValue') !== -1,\n );\n decorateMock(mock, source, config);\n\n // istanbul ignore else\n if (meta.queries) {\n decorateInputs(mock, meta.inputs, Object.keys(meta.queries));\n }\n decorateOutputs(mock, meta.outputs);\n config.queryScanKeys = decorateQueries(mock, meta.queries);\n\n config.hostBindings = [];\n for (const [key] of meta.hostBindings || /* istanbul ignore next */ []) {\n // mock declarations should not have side effects based on host bindings.\n // HostBinding(...args)(mock.prototype, key);\n if (config.hostBindings.indexOf(key) === -1) {\n config.hostBindings.push(key);\n }\n }\n\n config.hostListeners = [];\n for (const [key] of meta.hostListeners || /* istanbul ignore next */ []) {\n // mock declarations should not have side effects based on host bindings.\n // HostListener(...args)(mock.prototype, key);\n if (config.hostListeners.indexOf(key) === -1) {\n config.hostListeners.push(key);\n }\n }\n\n return options;\n};\n","import { Output } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, outputs?: string[]) => {\n // istanbul ignore else\n if (outputs) {\n for (const output of outputs) {\n const [key, alias] = output.split(': ');\n Output(alias)(cls.prototype, key);\n }\n }\n};\n","import funcGetName from './func.get-name';\nimport { isNgDef } from './func.is-ng-def';\n\nconst getType = (value: any): string =>\n isNgDef(value, 'p')\n ? 'pipe'\n : isNgDef(value, 'd')\n ? 'directive'\n : isNgDef(value, 'c')\n ? 'component'\n : isNgDef(value, 'm')\n ? 'module'\n : isNgDef(value, 'i')\n ? 'service'\n : isNgDef(value, 't')\n ? 'token'\n : '';\n\nexport default (value: any, funcName: string) => {\n if (value === undefined || value === null) {\n throw new Error(`null / undefined has been passed into ${funcName}. Please check that its import is correct.`);\n }\n\n if (funcName === 'MockPipe' && isNgDef(value, 'p')) {\n return;\n }\n if (funcName === 'MockDirective' && isNgDef(value, 'd')) {\n return;\n }\n if (funcName === 'MockComponent' && isNgDef(value, 'c')) {\n return;\n }\n if (funcName === 'MockModule' && isNgDef(value, 'm')) {\n return;\n }\n\n const type = getType(value);\n\n if (type && funcName === 'MockPipe') {\n throw new Error(`${funcName} accepts pipes, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockDirective') {\n throw new Error(`${funcName} accepts directives, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockComponent') {\n throw new Error(`${funcName} accepts components, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockModule') {\n throw new Error(`${funcName} accepts modules, whereas ${funcGetName(value)} is a ${type}.`);\n }\n};\n","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { AnyType, Type } from './core.types';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * isMockNgDef verifies whether a class is a mock component class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockComponent, 'c'); // returns true\n * isMockNgDef(RealComponent, 'c'); // returns false\n * isMockNgDef(ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(component: AnyType<T>, ngType: 'c'): component is Type<MockedComponent<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock directive class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockDirective, 'd'); // returns true\n * isMockNgDef(RealDirective, 'd'); // returns false\n * isMockNgDef(ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(directive: AnyType<T>, ngType: 'd'): directive is Type<MockedDirective<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock pipe class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockPipe, 'p'); // returns true\n * isMockNgDef(RealPipe, 'p'); // returns false\n * isMockNgDef(ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(pipe: AnyType<T>, ngType: 'p'): pipe is Type<MockedPipe<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock module class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockModule, 'm'); // returns true\n * isMockNgDef(RealModule, 'm'); // returns false\n * isMockNgDef(ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(module: AnyType<T>, ngType: 'm'): module is Type<MockedModule<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockComponent); // returns true\n * isMockNgDef(RealModule); // returns false\n * isMockNgDef(ArbitraryClass); // returns false\n * ```\n */\nexport function isMockNgDef<T>(module: Type<T>): module is Type<T>;\n\nexport function isMockNgDef<TComponent>(\n component: AnyType<TComponent> & { mockOf?: any },\n type?: 'c' | 'd' | 'p' | 'm',\n): component is Type<TComponent> {\n if (!(component as any).mockOf) {\n return false;\n }\n if (!type) {\n return true;\n }\n\n return isNgDef(component.mockOf, type as never);\n}\n","import { extendClass } from '../common/core.helpers';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (def: any, type: any, func: string, cacheFlag: string, base: any, decorator: any) => {\n funcImportExists(def, func);\n\n if (isMockNgDef(def, type)) {\n return def;\n }\n\n if (ngMocksUniverse.flags.has(cacheFlag) && ngMocksUniverse.cacheDeclarations.has(def)) {\n return ngMocksUniverse.cacheDeclarations.get(def);\n }\n\n const hasNgMocksDepsResolution = ngMocksUniverse.config.has('ngMocksDepsResolution');\n if (!hasNgMocksDepsResolution) {\n ngMocksUniverse.config.set('ngMocksDepsResolution', new Map());\n }\n\n const mock = extendClass(base);\n decorator(def, mock);\n\n // istanbul ignore else\n if (ngMocksUniverse.flags.has(cacheFlag)) {\n ngMocksUniverse.cacheDeclarations.set(def, mock);\n }\n\n if (!hasNgMocksDepsResolution) {\n ngMocksUniverse.config.delete('ngMocksDepsResolution');\n }\n\n return mock as any;\n};\n","import { Query, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\n\nconst viewChildArgs: any = { read: ViewContainerRef, static: false };\n\nconst viewChildTemplate = (selector: string, key: string): string =>\n `<div *ngIf=\"ngMocksRender_${key}_${selector}\" data-${key}=\"${selector}\"><ng-template #${key}_${selector}></ng-template></div>`;\n\nconst isTemplateRefQuery = (query: Query): boolean => {\n if (query.isViewQuery) {\n return false; // ignoring all internal @ViewChild\n }\n if (query.read && query.read !== TemplateRef) {\n return false; // ignoring read of instances\n }\n if (typeof query.selector !== 'string' && !query.read) {\n return false; // ignoring class selectors if they do not read TemplateRef\n }\n\n return true;\n};\n\nexport default (queries?: Record<keyof any, any>): string => {\n const parts = ['<ng-content></ng-content>'];\n // istanbul ignore if\n if (!queries) {\n return parts.join('');\n }\n\n for (const key of Object.keys(queries)) {\n const query: Query = queries[key];\n if (!isTemplateRefQuery(query)) {\n continue;\n }\n if (typeof query.selector === 'string') {\n const selector = query.selector.replace(new RegExp('\\\\W', 'mg'), '_');\n queries[`__mockView_key_${selector}`] = new ViewChild(`key_${selector}`, viewChildArgs);\n queries[`__mockTpl_key_${selector}`] = query;\n parts.push(viewChildTemplate(selector, 'key'));\n }\n queries[`__mockView_prop_${key}`] = new ViewChild(`prop_${key}`, viewChildArgs);\n parts.push(viewChildTemplate(key, 'prop'));\n }\n\n return parts.join('');\n};\n","export default (\n contentChildSelector: string | [string, ...number[]],\n): [string, string, string, undefined | number[]] => {\n if (typeof contentChildSelector === 'string') {\n return ['key', `__mockTpl_key_${contentChildSelector}`, contentChildSelector, undefined];\n }\n\n const [key, ...indices] = contentChildSelector;\n\n return ['prop', key, key, indices.length > 0 ? indices : undefined];\n};\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n EmbeddedViewRef,\n Injector,\n Optional,\n QueryList,\n Self,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport coreForm from '../common/core.form';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { Type } from '../common/core.types';\nimport funcIsMock from '../common/func.is-mock';\nimport { MockConfig } from '../common/mock';\nimport { LegacyControlValueAccessor } from '../common/mock-control-value-accessor';\nimport decorateDeclaration from '../mock/decorate-declaration';\nimport getMock from '../mock/get-mock';\n\nimport generateTemplate from './render/generate-template';\nimport getKey from './render/get-key';\nimport { MockedComponent } from './types';\n\nconst mixRenderPrepareVcr = (\n instance: MockConfig & Record<keyof any, any>,\n type: string,\n selector: string,\n cdr: ChangeDetectorRef,\n): ViewContainerRef | undefined => {\n if (!instance[`ngMocksRender_${type}_${selector}`]) {\n instance[`ngMocksRender_${type}_${selector}`] = true;\n cdr.detectChanges();\n }\n\n return instance[`__mockView_${type}_${selector}`];\n};\n\nconst mixRenderReorderViews = (\n viewContainer: ViewContainerRef,\n views: Array<EmbeddedViewRef<any>>,\n index: number,\n): void => {\n for (const view of views.splice(index + 1)) {\n view.destroy();\n }\n\n let viewIndex = 0;\n for (const view of views) {\n if (!view) {\n continue;\n }\n viewContainer.move(view, viewIndex);\n viewIndex += 1;\n }\n};\n\nconst mixRenderApplyContext = (view: EmbeddedViewRef<any>, context: Record<any, any>): void => {\n for (const contextKey of Object.keys(view.context)) {\n view.context[contextKey] = undefined;\n }\n for (const contextKey of Object.keys(context)) {\n view.context[contextKey] = (context as any)[contextKey];\n }\n view.markForCheck();\n};\n\nconst mixRenderHandleViews = (\n vcr: ViewContainerRef,\n cdr: ChangeDetectorRef,\n templates: any[],\n views: Array<EmbeddedViewRef<any>>,\n indices: undefined | number[],\n context: Record<any, any>,\n): number => {\n let index = -1;\n\n for (const templateRef of templates) {\n index += 1;\n views[index] = views[index] || undefined;\n if ((indices && indices.indexOf(index) === -1) || !templateRef) {\n continue;\n }\n if (!(templateRef instanceof TemplateRef)) {\n throw new Error(`Cannot find TemplateRef`);\n }\n if (!views[index]) {\n views[index] = vcr.createEmbeddedView(templateRef, {});\n }\n mixRenderApplyContext(views[index], context);\n }\n cdr.detectChanges();\n\n return index;\n};\n\nconst mixRender = (instance: MockConfig & Record<keyof any, any>, cdr: ChangeDetectorRef): void => {\n // Providing a method to render any @ContentChild based on its selector.\n coreDefineProperty(\n instance,\n '__render',\n (contentChildSelector: string | [string, ...number[]], $implicit?: any, variables?: Record<keyof any, any>) => {\n const [type, key, selector, indices] = getKey(contentChildSelector);\n\n const vcr = mixRenderPrepareVcr(instance, type, selector, cdr);\n if (!vcr) {\n return;\n }\n\n const property: any = instance[key];\n const templates = property instanceof QueryList ? property.toArray() : [property];\n\n const views = instance[`ngMocksRender_${type}_${selector}_views`] || [];\n const index = mixRenderHandleViews(vcr, cdr, templates, views, indices, { ...variables, $implicit });\n\n mixRenderReorderViews(vcr, views, index);\n instance[`ngMocksRender_${type}_${selector}_views`] = views;\n cdr.detectChanges();\n },\n );\n};\n\nconst mixHideHandler = (\n instance: MockConfig & Record<keyof any, any>,\n type: string,\n selector: string,\n indices: undefined | number[],\n) => {\n const views = instance[`ngMocksRender_${type}_${selector}_views`];\n let index = -1;\n for (const view of views) {\n index += 1;\n if ((indices && indices.indexOf(index) === -1) || !view) {\n continue;\n }\n view.destroy();\n views[index] = undefined;\n }\n};\n\nconst mixHide = (instance: MockConfig & Record<keyof any, any>, changeDetector: ChangeDetectorRef): void => {\n // Providing method to hide any @ContentChild based on its selector.\n coreDefineProperty(instance, '__hide', (contentChildSelector: string | [string, ...number[]]) => {\n const [type, , selector, indices] = getKey(contentChildSelector);\n\n if (!instance[`ngMocksRender_${type}_${selector}`]) {\n return;\n }\n mixHideHandler(instance, type, selector, indices);\n\n if (!indices) {\n instance[`ngMocksRender_${type}_${selector}`] = false;\n }\n changeDetector.detectChanges();\n });\n};\n\nclass ComponentMockBase extends LegacyControlValueAccessor implements AfterContentInit {\n // istanbul ignore next\n public constructor(\n injector: Injector,\n ngControl: any, // NgControl\n changeDetector: ChangeDetectorRef,\n ) {\n super(injector, ngControl);\n if (funcIsMock(this)) {\n mixRender(this, changeDetector);\n mixHide(this, changeDetector);\n }\n }\n\n public ngAfterContentInit(): void {\n const config = (this.__ngMocksConfig as any).config;\n if (!(this as any).__rendered && config && config.render) {\n for (const block of Object.keys(config.render)) {\n const { $implicit, variables } =\n config.render[block] !== true\n ? config.render[block]\n : {\n $implicit: undefined,\n variables: {},\n };\n (this as any).__render(block, $implicit, variables);\n }\n (this as any).__rendered = true;\n }\n }\n}\n\ncoreDefineProperty(ComponentMockBase, 'parameters', [\n [Injector],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n [ChangeDetectorRef],\n]);\n\nconst decorateClass = (component: Type<any>, mock: Type<any>): void => {\n const meta = coreReflectDirectiveResolve(component);\n Component(\n decorateDeclaration(component, mock, meta, {\n template: generateTemplate(meta.queries),\n }),\n )(mock);\n};\n\n/**\n * MockComponents creates an array of mock component classes out of components passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockComponents(\n * Dep1Component,\n * Dep2Component,\n * ),\n * });\n * ```\n */\nexport function MockComponents(...components: Array<Type<any>>): Array<Type<MockedComponent<any>>> {\n return components.map(MockComponent);\n}\n\n/**\n * MockComponent creates a mock component class out of an arbitrary component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockComponent(Dep1Component),\n * MockComponent(Dep2Component),\n * ],\n * });\n * ```\n */\nexport function MockComponent<TComponent>(component: Type<TComponent>): Type<MockedComponent<TComponent>> {\n return getMock(component, 'c', 'MockComponent', 'cacheComponent', ComponentMockBase, decorateClass);\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Injector,\n OnInit,\n Optional,\n Self,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport coreForm from '../common/core.form';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { Type } from '../common/core.types';\nimport { LegacyControlValueAccessor } from '../common/mock-control-value-accessor';\nimport decorateDeclaration from '../mock/decorate-declaration';\nimport getMock from '../mock/get-mock';\n\nimport { MockedDirective } from './types';\n\nclass DirectiveMockBase extends LegacyControlValueAccessor implements OnInit {\n // istanbul ignore next\n public constructor(\n injector: Injector,\n ngControl: any, // NgControl\n cdr: ChangeDetectorRef,\n vcr: ViewContainerRef,\n element: ElementRef | null = null,\n template: TemplateRef<any> | null = null,\n ) {\n super(injector, ngControl);\n this.__ngMocksInstall(vcr, cdr, element, template);\n }\n\n public ngOnInit(): void {\n const config = (this.__ngMocksConfig as any).config;\n if (config?.render) {\n const { $implicit, variables } =\n config.render !== true\n ? config.render\n : {\n $implicit: undefined,\n variables: {},\n };\n (this as any).__render($implicit, variables);\n }\n }\n\n private __ngMocksInstall(\n vcr: ViewContainerRef,\n cdr: ChangeDetectorRef,\n element: ElementRef | null,\n template: TemplateRef<any> | null,\n ): void {\n // Basically any directive on ng-template is treated as structural, even it does not control render process.\n // In our case we do not if we should render it or not and due to this we do nothing.\n coreDefineProperty(this, '__element', element);\n coreDefineProperty(this, '__template', template);\n coreDefineProperty(this, '__viewContainer', vcr);\n coreDefineProperty(this, '__vcr', vcr);\n coreDefineProperty(this, '__cdr', cdr);\n coreDefineProperty(this, '__isStructural', template && vcr);\n\n // Providing method to render mock values.\n coreDefineProperty(this, '__render', ($implicit?: any, variables?: Record<keyof any, any>) => {\n if (vcr && template) {\n vcr.clear();\n vcr.createEmbeddedView(template, { ...variables, $implicit });\n cdr.detectChanges();\n }\n });\n }\n}\n\ncoreDefineProperty(DirectiveMockBase, 'parameters', [\n [Injector],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n [ChangeDetectorRef],\n [ViewContainerRef],\n [ElementRef, new Optional(), new Self()],\n [TemplateRef, new Optional(), new Self()],\n]);\n\nconst decorateClass = (directive: Type<any>, mock: Type<any>): void => {\n const meta = coreReflectDirectiveResolve(directive);\n const options = decorateDeclaration(directive, mock, meta, {});\n Directive(options)(mock);\n};\n\n/**\n * MockDirectives creates an array of mock directive classes out of directives passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockDirectives(\n * Dep1Directive,\n * Dep2Directive,\n * ),\n * });\n * ```\n */\nexport function MockDirectives(...directives: Array<Type<any>>): Array<Type<MockedDirective<any>>> {\n return directives.map(MockDirective);\n}\n\n/**\n * MockDirective creates a mock directive class out of an arbitrary directive.\n *\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockDirective(Dep1Directive),\n * MockDirective(Dep2Directive),\n * ],\n * });\n * ```\n */\nexport function MockDirective<TDirective>(directive: Type<TDirective>): Type<MockedDirective<TDirective>> {\n return getMock(directive, 'd', 'MockDirective', 'cacheDirective', DirectiveMockBase, decorateClass);\n}\n","import { Pipe } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): Pipe & { standalone?: boolean } =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.Pipe) {\n return declaration.Pipe;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectPipeResolve from '../common/core.reflect.pipe-resolve';\nimport { Type } from '../common/core.types';\nimport decorateMock from '../common/decorate.mock';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport { Mock } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport { MockedPipe } from './types';\n\n/**\n * MockPipes creates an array of mock pipe classes out of pipes passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockPipes(\n * Dep1Pipe,\n * Dep2Pipe,\n * ),\n * });\n * ```\n */\nexport function MockPipes(...pipes: Array<Type<PipeTransform>>): Array<Type<PipeTransform>> {\n return pipes.map(pipe => MockPipe(pipe, undefined));\n}\n\nconst getMockClass = (pipe: Type<any>, transform?: PipeTransform['transform']): Type<any> => {\n const mock = extendClass(Mock);\n Pipe(coreReflectPipeResolve(pipe))(mock);\n decorateMock(mock, pipe, {\n init: (instance: PipeTransform) => {\n if (transform) {\n instance.transform = transform;\n }\n if (!instance.transform) {\n helperMockService.mock(instance, 'transform', `${funcGetName(instance)}.transform`);\n }\n },\n });\n\n return mock;\n};\n\n/**\n * MockPipe creates a mock pipe class out of an arbitrary pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockPipe(Dep1Pipe),\n * MockPipe(Dep2Pipe),\n * ],\n * });\n * ```\n */\nexport function MockPipe<TPipe extends PipeTransform>(\n pipe: Type<TPipe>,\n transform?: TPipe['transform'],\n): Type<MockedPipe<TPipe>>;\n\nexport function MockPipe<TPipe extends PipeTransform>(\n pipe: Type<TPipe>,\n transform?: TPipe['transform'],\n): Type<MockedPipe<TPipe>> {\n funcImportExists(pipe, 'MockPipe');\n\n if (isMockNgDef(pipe, 'p')) {\n return pipe;\n }\n\n // istanbul ignore next\n if (ngMocksUniverse.flags.has('cachePipe') && ngMocksUniverse.cacheDeclarations.has(pipe)) {\n return ngMocksUniverse.cacheDeclarations.get(pipe);\n }\n\n const mock = getMockClass(pipe, transform);\n if (ngMocksUniverse.flags.has('cachePipe')) {\n ngMocksUniverse.cacheDeclarations.set(pipe, mock);\n }\n\n return mock as any;\n}\n","import { NgModule } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): NgModule =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.NgModule) {\n return declaration.NgModule;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { NgModule, Provider } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectModuleResolve from '../common/core.reflect.module-resolve';\nimport { AnyType, Type } from '../common/core.types';\nimport decorateMock from '../common/decorate.mock';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders, NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { Mock } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockNgDef from './mock-ng-def';\n\nconst flagMock = (resolution?: string): boolean => resolution === 'mock' && ngMocksUniverse.flags.has('skipMock');\n\nconst flagKeep = (resolution?: string): boolean => resolution === 'keep' && !ngMocksUniverse.flags.has('skipMock');\n\nconst flagReplace = (resolution?: string): boolean =>\n resolution === 'replace' && !ngMocksUniverse.flags.has('skipMock');\n\nconst flagNever = (ngModule?: any): boolean =>\n coreConfig.neverMockModule.indexOf(funcGetName(ngModule)) !== -1 && !ngMocksUniverse.flags.has('skipMock');\n\nconst preProcessFlags = (ngModule: AnyType<any>): { isRootModule: boolean; toggleSkipMockFlag: boolean } => {\n let toggleSkipMockFlag = false;\n let isRootModule = true;\n\n if (ngMocksUniverse.flags.has('hasRootModule')) {\n isRootModule = false;\n } else {\n ngMocksUniverse.flags.add('hasRootModule');\n }\n\n const resolution = ngMocksUniverse.getResolution(ngModule);\n if (flagMock(resolution)) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.delete('skipMock');\n }\n if (flagNever(ngModule)) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.add('skipMock');\n }\n if (!isRootModule && (flagKeep(resolution) || flagReplace(resolution))) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.add('skipMock');\n }\n\n return {\n isRootModule,\n toggleSkipMockFlag,\n };\n};\n\nconst postProcessFlags = ({\n isRootModule,\n toggleSkipMockFlag,\n}: {\n isRootModule: boolean;\n toggleSkipMockFlag: boolean;\n}): void => {\n if (toggleSkipMockFlag && ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.flags.delete('skipMock');\n } else if (toggleSkipMockFlag && !ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.flags.add('skipMock');\n }\n if (isRootModule) {\n ngMocksUniverse.flags.delete('hasRootModule');\n }\n};\n\nconst extractModuleAndProviders = (\n module: any,\n): {\n ngModule: Type<any>;\n ngModuleProviders: Provider[] | undefined;\n} => {\n let ngModule: Type<any>;\n let ngModuleProviders: Provider[] | undefined;\n\n if (isNgModuleDefWithProviders(module)) {\n ngModule = module.ngModule;\n if (module.providers) {\n ngModuleProviders = module.providers;\n }\n } else {\n ngModule = module;\n }\n\n return {\n ngModule,\n ngModuleProviders,\n };\n};\n\nconst getExistingMockModule = (ngModule: Type<any>, isRootModule: boolean): Type<any> | undefined => {\n if (isMockNgDef(ngModule, 'm')) {\n return ngModule;\n }\n\n // Every module should be replaced with its mock copy only once to avoid errors like:\n // Failed: Type ...Component is part of the declarations of 2 modules: ...Module and ...Module...\n if (ngMocksUniverse.flags.has('cacheModule') && ngMocksUniverse.cacheDeclarations.has(ngModule)) {\n return ngMocksUniverse.cacheDeclarations.get(ngModule);\n }\n\n // Now we check if we need to keep the original module or to replace it with some other.\n // and there is no override in its resolution.\n if (isRootModule || ngMocksUniverse.config.get('ngMocksDepsResolution')?.get(ngModule) === 'mock') {\n return undefined;\n }\n if (ngMocksUniverse.hasBuildDeclaration(ngModule)) {\n const instance = ngMocksUniverse.getBuildDeclaration(ngModule);\n if (isNgDef(instance, 'm') && instance !== ngModule) {\n return instance;\n }\n }\n\n return undefined;\n};\n\nconst getMockModuleDef = (ngModule: Type<any>, mockModule?: Type<any>): NgModule | undefined => {\n if (!mockModule) {\n const meta = coreReflectModuleResolve(ngModule);\n const [changed, ngModuleDef] = mockNgDef(meta, ngModule);\n if (changed) {\n return ngModuleDef;\n }\n }\n\n return undefined;\n};\n\nconst detectMockModule = (ngModule: Type<any>, mockModule?: Type<any>): Type<any> => {\n const mockModuleDef = getMockModuleDef(ngModule, mockModule);\n\n if (mockModuleDef) {\n const parent = ngMocksUniverse.flags.has('skipMock') ? ngModule : Mock;\n const mock = extendClass(parent);\n\n // the last thing is to apply decorators.\n NgModule(mockModuleDef)(mock);\n decorateMock(mock, ngModule);\n\n return mock;\n }\n\n return mockModule || ngModule;\n};\n\nconst getMockProviders = (ngModuleProviders: Provider[] | undefined): Provider[] | undefined => {\n if (ngModuleProviders) {\n const [changed, ngModuleDef] = mockNgDef({ providers: ngModuleProviders });\n\n return changed ? ngModuleDef.providers : ngModuleProviders;\n }\n\n return undefined;\n};\n\nconst generateReturn = (\n module: any,\n ngModule: AnyType<any>,\n ngModuleProviders: Provider[] | undefined,\n mockModule: AnyType<any>,\n mockModuleProviders: Provider[] | undefined,\n): any =>\n mockModule === ngModule && mockModuleProviders === ngModuleProviders\n ? module\n : isNgModuleDefWithProviders(module)\n ? { ngModule: mockModule, ...(mockModuleProviders ? { providers: mockModuleProviders } : {}) }\n : mockModule;\n\n/**\n * MockModule creates a mock module class out of an arbitrary module.\n * All declarations, imports, exports and providers will be mocked too.\n *\n * @see https://ng-mocks.sudo.eu/api/MockModule\n *\n * ```ts\n * TestBed.configureTestingModule({\n * imports: [\n * MockModule(SharedModule),\n * ],\n * });\n * ```\n */\nexport function MockModule<T>(ngModule: Type<T>): Type<T>;\n\n/**\n * MockModule creates a mock module class with mock provides out of an arbitrary module with providers.\n * All declarations, imports, exports and providers will be mocked too.\n *\n * @see https://ng-mocks.sudo.eu/api/MockModule\n *\n * ```ts\n * TestBed.configureTestingModule({\n * imports: [\n * MockModule(StoreModule.forRoot()),\n * ],\n * });\n * ```\n */\nexport function MockModule<T>(ngModule: NgModuleWithProviders<T>): NgModuleWithProviders<T>;\n\nexport function MockModule(def: any): any {\n funcImportExists(def, 'MockModule');\n\n const { ngModule, ngModuleProviders } = extractModuleAndProviders(def);\n const flags = preProcessFlags(ngModule);\n try {\n const mockModule = detectMockModule(ngModule, getExistingMockModule(ngModule, flags.isRootModule));\n // istanbul ignore else\n if (ngMocksUniverse.flags.has('cacheModule')) {\n ngMocksUniverse.cacheDeclarations.set(ngModule, mockModule);\n }\n if (ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(mockModule);\n }\n const mockModuleProviders = getMockProviders(ngModuleProviders);\n\n return generateReturn(def, ngModule, ngModuleProviders, mockModule, mockModuleProviders);\n } finally {\n postProcessFlags(flags);\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport { MockModule } from './mock-module';\n\nconst processDefMap: Array<[any, any]> = [\n ['c', MockComponent],\n ['d', MockDirective],\n ['p', MockPipe],\n];\n\nconst processDef = (def: any) => {\n if (isNgDef(def, 'm') || isNgModuleDefWithProviders(def)) {\n return MockModule(def as any);\n }\n if (ngMocksUniverse.hasBuildDeclaration(def)) {\n return ngMocksUniverse.getBuildDeclaration(def);\n }\n if (ngMocksUniverse.flags.has('skipMock') && ngMocksUniverse.getResolution(def) !== 'mock') {\n return def;\n }\n for (const [flag, func] of processDefMap) {\n if (isNgDef(def, flag)) {\n return func(def);\n }\n }\n};\n\n// resolveProvider is a special case because of the def structure.\nconst createResolveProvider =\n (resolutions: Map<any, any>, change: () => void): ((def: Provider) => any) =>\n (def: Provider) =>\n helperMockService.resolveProvider(def, resolutions, change);\n\nconst createResolveWithProviders = (def: any, mockDef: any): boolean =>\n mockDef && mockDef.ngModule && isNgModuleDefWithProviders(def);\n\nconst createResolveExisting = (def: any, resolutions: Map<any, any>, change: (flag?: boolean) => void): any => {\n const mockDef = resolutions.get(def);\n if (def !== mockDef) {\n change();\n }\n\n return mockDef;\n};\n\nconst createResolveExcluded = (def: any, resolutions: Map<any, any>, change: (flag?: boolean) => void): void => {\n resolutions.set(def, undefined);\n\n change();\n};\n\nconst createResolve =\n (resolutions: Map<any, any>, change: (flag?: boolean) => void): ((def: any) => any) =>\n (def: any) => {\n if (resolutions.has(def)) {\n return createResolveExisting(def, resolutions, change);\n }\n\n const detectedDef = isNgModuleDefWithProviders(def) ? def.ngModule : def;\n if (ngMocksUniverse.isExcludedDef(detectedDef)) {\n return createResolveExcluded(def, resolutions, change);\n }\n ngMocksUniverse.touches.add(detectedDef);\n\n const mockDef = processDef(def);\n if (createResolveWithProviders(def, mockDef)) {\n resolutions.set(def.ngModule, mockDef.ngModule);\n }\n if (ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(mockDef);\n }\n resolutions.set(def, mockDef);\n change(mockDef !== def);\n\n return mockDef;\n };\n\nexport default (\n change: () => void,\n resolutions: Map<any, any>,\n): {\n resolve: (def: any) => any;\n resolveProvider: (def: Provider) => any;\n} => {\n const resolve = createResolve(resolutions, change);\n const resolveProvider = createResolveProvider(resolutions, change);\n\n return {\n resolve,\n resolveProvider,\n };\n};\n","import { flatten } from '../common/core.helpers';\nimport funcGetProvider from '../common/func.get-provider';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (providers?: any[]): void => {\n for (const provider of flatten(providers ?? [])) {\n const provide = funcGetProvider(provider);\n\n const config = ngMocksUniverse.configInstance.get(provide) ?? {};\n config.exported = true;\n ngMocksUniverse.configInstance.set(provide, config);\n }\n};\n","import { Component, Directive, NgModule, Pipe, Provider } from '@angular/core';\n\nimport { flatten } from '../common/core.helpers';\nimport { dependencyKeys, Type } from '../common/core.types';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport createResolvers from './create-resolvers';\nimport markProviders from './mark-providers';\n\nconst flatToExisting = <T, R>(data: T | T[], callback: (arg: T) => R | undefined): R[] =>\n flatten(data)\n .map(callback)\n .filter((item): item is R => !!item);\n\nconst configureProcessMetaKeys = (\n resolve: (def: any) => any,\n resolveProvider: (def: Provider) => any,\n): Array<[dependencyKeys, (def: any) => any]> => [\n ['declarations', resolve],\n ['entryComponents', resolve],\n ['bootstrap', resolve],\n ['providers', resolveProvider],\n ['viewProviders', resolveProvider],\n ['imports', resolve],\n ['exports', resolve],\n];\n\nconst processMeta = (\n ngModule: Partial<Record<dependencyKeys, any>> & {\n skipMarkProviders?: boolean;\n },\n resolve: (def: any) => any,\n resolveProvider: (def: Provider) => any,\n): NgModule => {\n const mockModuleDef: Partial<NgModule & Component & Directive & Pipe> = {};\n const keys = configureProcessMetaKeys(resolve, resolveProvider);\n\n const cachePipe = ngMocksUniverse.flags.has('cachePipe');\n if (!cachePipe) {\n ngMocksUniverse.flags.add('cachePipe');\n }\n for (const [key, callback] of keys) {\n if (ngModule[key]?.length) {\n mockModuleDef[key] = flatToExisting(ngModule[key], callback);\n }\n }\n if (!ngModule.skipMarkProviders) {\n markProviders(mockModuleDef.providers);\n markProviders(mockModuleDef.viewProviders);\n }\n\n if (!cachePipe) {\n ngMocksUniverse.flags.delete('cachePipe');\n }\n\n return mockModuleDef;\n};\n\nconst resolveDefForExport = (\n def: any,\n resolve: (def: any) => any,\n correctExports: boolean,\n ngModule?: Type<any>,\n): Type<any> | undefined => {\n const moduleConfig = ngMocksUniverse.config.get(ngModule) || {};\n const instance = isNgModuleDefWithProviders(def) ? def.ngModule : def;\n const mockDef = resolve(instance);\n if (!mockDef) {\n return undefined;\n }\n\n // If we export a declaration, then we have to export its module too.\n const config = ngMocksUniverse.config.get(instance);\n if (config?.export && ngModule && !moduleConfig.export) {\n ngMocksUniverse.config.set(ngModule, {\n ...moduleConfig,\n export: true,\n });\n }\n\n if (correctExports && !moduleConfig.exportAll && !config?.export) {\n return undefined;\n }\n\n return mockDef;\n};\n\nconst skipAddExports = (mockDef: any, mockModuleDef: NgModule): mockDef is undefined =>\n !mockDef || (!!mockModuleDef.exports && mockModuleDef.exports.indexOf(mockDef) !== -1);\n\n// if we are in the skipMock mode we need to export only the default exports.\n// if we are in the correctModuleExports mode we need to export only default exports.\nconst addExports = (\n resolve: (def: any) => any,\n change: () => void,\n ngModuleDef: NgModule,\n mockModuleDef: NgModule,\n ngModule?: Type<any>,\n): void => {\n const correctExports = ngMocksUniverse.flags.has('skipMock') || ngMocksUniverse.flags.has('correctModuleExports');\n for (const def of flatten([ngModuleDef.imports || [], ngModuleDef.declarations || []])) {\n const mockDef = resolveDefForExport(def, resolve, correctExports, ngModule);\n if (skipAddExports(mockDef, mockModuleDef)) {\n continue;\n }\n\n change();\n mockModuleDef.exports = mockModuleDef.exports || [];\n mockModuleDef.exports.push(mockDef);\n }\n};\n\nexport default (\n ngModuleDef: NgModule & {\n skipMarkProviders?: boolean;\n },\n ngModule?: Type<any>,\n): [boolean, NgModule] => {\n const hasResolver = ngMocksUniverse.config.has('mockNgDefResolver');\n if (!hasResolver) {\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n }\n let changed = !ngMocksUniverse.flags.has('skipMock');\n const change = (flag = true) => {\n changed = changed || flag;\n };\n const { resolve, resolveProvider } = createResolvers(change, ngMocksUniverse.config.get('mockNgDefResolver'));\n const mockModuleDef = processMeta(ngModuleDef, resolve, resolveProvider);\n addExports(resolve, change, ngModuleDef, mockModuleDef, ngModule);\n\n if (!hasResolver) {\n ngMocksUniverse.config.delete('mockNgDefResolver');\n }\n\n return [changed, mockModuleDef];\n};\n","import { Directive, NgModule } from '@angular/core';\n\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport mockNgDef from '../../mock-module/mock-ng-def';\n\nexport default (meta?: Directive | NgModule): NgModule | undefined => {\n if (!meta) {\n return undefined;\n }\n\n const skipMock = ngMocksUniverse.flags.has('skipMock');\n // istanbul ignore else\n if (!skipMock) {\n ngMocksUniverse.flags.add('skipMock');\n }\n const [changed, def] = mockNgDef(meta);\n // istanbul ignore else\n if (!skipMock) {\n ngMocksUniverse.flags.delete('skipMock');\n }\n if (!changed) {\n return undefined;\n }\n\n return def;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (value: any): value is MockedDebugNode => {\n return !!value?.nativeElement || !!value?.nativeNode;\n};\n","import { AnyType, DebugNodeSelector } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nexport default (selector: AnyType<any> | DebugNodeSelector): string => {\n if (typeof selector === 'string') {\n return selector;\n }\n if (typeof selector === 'function') {\n return selector.name;\n }\n if (isNgDef(selector, 't')) {\n return (selector as any)._desc;\n }\n if (Array.isArray(selector)) {\n return selector[0];\n }\n if (!selector) {\n return '<EMPTY>';\n }\n\n return '<UNKNOWN>';\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (value: any): value is { debugElement: MockedDebugNode } => {\n return !!value && typeof value === 'object' && value.debugElement !== undefined;\n};\n","import { ComponentFixture, getTestBed } from '@angular/core/testing';\n\nexport default () => {\n const fixtures: Array<ComponentFixture<any>> = (getTestBed() as any)._activeFixtures;\n\n return fixtures[fixtures.length - 1];\n};\n","import { DebugElement } from '@angular/core';\n\nimport isFixture from '../format/is-fixture';\nimport funcGetLastFixture from '../func.get-last-fixture';\n\nconst findDebugElement = (el: any): DebugElement | undefined => {\n if (isFixture(el)) {\n return findDebugElement(el.debugElement);\n }\n if (el && el.injector && el.query) {\n return el;\n }\n\n return undefined;\n};\n\nexport default (args: any[], defaultNotFoundValue?: any): [any, any, any] => {\n let el;\n let sel;\n let notFoundValue = defaultNotFoundValue;\n if (args.length === 3) {\n el = findDebugElement(args[0]);\n sel = args[1];\n notFoundValue = args[2];\n } else if (args.length === 1) {\n el = findDebugElement(funcGetLastFixture());\n [sel] = args;\n } else if (!args[0]) {\n sel = args[1];\n } else {\n el = findDebugElement(args[0]);\n if (el) {\n sel = args[1];\n } else {\n el = findDebugElement(funcGetLastFixture());\n [sel, notFoundValue] = args;\n }\n }\n sel = findDebugElement(sel) ?? sel;\n\n return [el, sel, notFoundValue];\n};\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"By\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_platform_browser_bc6fa964__.By });","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { AnyType, Type } from './core.types';\n\n/**\n * Returns the original class of a mock module class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockModule); // returns RealModule\n * getSourceOfMock(RealModule); // returns RealModule\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedModule<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock component class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockComponent); // returns RealComponent\n * getSourceOfMock(RealComponent); // returns RealComponent\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedComponent<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock directive class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockDirective); // returns RealDirective\n * getSourceOfMock(RealDirective); // returns RealDirective\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedDirective<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock pipe class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockPipe); // returns RealPipe\n * getSourceOfMock(RealPipe); // returns RealPipe\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedPipe<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockClass); // returns RealClass\n * getSourceOfMock(RealClass); // returns RealClass\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<T>): Type<T>;\n\nexport function getSourceOfMock<T>(declaration: any): Type<T> {\n return typeof declaration === 'function' && declaration.mockOf ? declaration.mockOf : declaration;\n}\n","import { DebugElement, Predicate } from '@angular/core';\nimport { By } from '@angular/platform-browser';\n\nimport { AnyType } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\n\nexport default (selector: string | AnyType<any> | [string] | [string, any]): Predicate<DebugElement> => {\n return Array.isArray(selector)\n ? By.css(selector.length === 1 ? `[${selector[0]}]` : `[${selector[0]}=\"${selector[1]}\"]`)\n : typeof selector === 'string'\n ? By.css(selector)\n : By.directive(getSourceOfMock(selector));\n};\n","import { DebugElement } from '@angular/core';\n\nimport isDebugNode from '../format/is-debug-node';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcParseFindArgs from './func.parse-find-args';\nimport funcParseFindTerm from './func.parse-find-term';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]): DebugElement => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, defaultNotFoundValue);\n const result = isDebugNode(sel) ? sel : el?.query(funcParseFindTerm(sel));\n if (result) {\n return result;\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find an element via ngMocks.find(${funcParseFindArgsName(sel)})`);\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (node: MockedDebugNode): boolean => {\n return node.nativeNode.nodeName === '#text';\n};\n","export default (a: any, b: any): boolean => {\n if (!a || !b) {\n return false;\n }\n\n return a === b;\n};\n","import detectTextNode from './detect-text-node';\n\nexport default (node: any) => {\n return detectTextNode(node)\n ? undefined\n : node.injector._tNode || // ivy\n node.injector.elDef || // classic\n undefined;\n};\n","import { Injector } from '@angular/core';\n\nimport { getTestBedInjection } from './core.helpers';\n\nconst defaultInjector: any = {};\n\nexport default (declaration: any, injector: Injector = defaultInjector): any => {\n if (injector === defaultInjector) {\n return getTestBedInjection(declaration);\n }\n try {\n return injector.get(declaration);\n } catch {\n return undefined;\n }\n};\n","import { DebugElement, ViewContainerRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\n\nimport elDefGetNode from './el-def-get-node';\n\nconst getVcr = (node: any, child: any): undefined | ViewContainerRef => {\n if (node === child) {\n return undefined;\n }\n if (child.nativeNode.nodeName !== '#comment') {\n return undefined;\n }\n\n return coreInjector(ViewContainerRef, child.injector);\n};\n\nconst getScanViewRefRootNodes = (node: any, child: any): Array<[number, any]> => {\n const vcr = getVcr(node, child);\n if (!vcr) {\n return [];\n }\n\n const result: Array<[number, any]> = [];\n for (let vrIndex = 0; vrIndex < vcr.length; vrIndex += 1) {\n const vr = vcr.get(vrIndex);\n for (let rnIndex = 0; rnIndex < (vr as any).rootNodes.length; rnIndex += 1) {\n result.push([rnIndex, (vr as any).rootNodes[rnIndex]]);\n }\n }\n\n return result;\n};\n\nconst scanViewRef = (node: DebugElement) => {\n let result: any;\n let index: any;\n\n for (const child of node.parent?.childNodes || []) {\n for (const [rnIndex, rootNode] of getScanViewRefRootNodes(node, child)) {\n if (rootNode === node.nativeNode && (index === undefined || rnIndex < index)) {\n result = elDefGetNode(child);\n index = rnIndex;\n }\n }\n }\n\n return result;\n};\n\nexport default (node: any) => {\n return (\n node.injector._tNode?.parent || // ivy\n node.injector.elDef?.parent || // classic\n scanViewRef(node) ||\n node.parent?.injector._tNode || // ivy\n node.parent?.injector.elDef || // classic\n undefined\n );\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectTextNode from './detect-text-node';\nimport elDefCompare from './el-def-compare';\nimport elDefGetNode from './el-def-get-node';\nimport elDefGetParent from './el-def-get-parent';\n\nexport default (node: MockedDebugNode): MockedDebugNode[] => {\n const elDef = elDefGetNode(node);\n if (!elDef || detectTextNode(node)) {\n return [];\n }\n\n const isDirect = (node as any).childNodes !== undefined;\n const children: MockedDebugNode[] = [];\n for (const childNode of (node as any).childNodes || node.parent?.childNodes || []) {\n const childNodeParent = elDefGetParent(childNode);\n\n if (!isDirect && !elDefCompare(elDef, childNodeParent)) {\n continue;\n }\n if (childNodeParent && !elDefCompare(elDef, childNodeParent)) {\n continue;\n }\n\n children.push(childNode);\n }\n\n if ((node as any).parent?.name === 'BODY') {\n const childNodes: any[] = (node as any).parent.childNodes;\n let start = childNodes.length;\n let end = 0;\n for (let i = childNodes.length - 1; i >= 0; i -= 1) {\n const childNode = childNodes[i];\n if (childNode.nativeNode.nodeName === '#comment') {\n end = i;\n } else if (childNode.nativeNode === node.nativeNode) {\n start = i + 1;\n break;\n }\n }\n for (let i = start; i < end; i += 1) {\n children.push(childNodes[i]);\n }\n }\n\n return children;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport elDefCompare from './el-def-compare';\nimport elDefGetNode from './el-def-get-node';\nimport elDefGetParent from './el-def-get-parent';\n\nconst detectParent = (node: MockedDebugNode, parent: MockedDebugNode | undefined): MockedDebugNode | undefined => {\n if (parent) {\n return parent;\n }\n\n const expected = elDefGetParent(node);\n const currentParent = node.parent ? elDefGetNode(node.parent) : undefined;\n if (node.parent && elDefCompare(expected, currentParent)) {\n return node.parent;\n }\n for (const childNode of node.parent?.childNodes || []) {\n const childElDef = elDefGetNode(childNode);\n if (elDefCompare(expected, childElDef)) {\n return childNode;\n }\n }\n\n return undefined;\n};\n\nexport default ((): typeof detectParent => detectParent)();\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectTextNode from './detect-text-node';\nimport nestedCheckChildren from './nested-check-children';\nimport nestedCheckParent from './nested-check-parent';\n\nconst nestedCheck = (\n node: MockedDebugNode | null | undefined,\n parent: MockedDebugNode | undefined,\n check: (node: MockedDebugNode, parent?: MockedDebugNode) => void | boolean,\n includeTextNode = false,\n): boolean => {\n if (!node) {\n return false;\n }\n if (!includeTextNode && detectTextNode(node)) {\n return false;\n }\n if (check(node, nestedCheckParent(node, parent))) {\n return true;\n }\n\n for (const childNode of nestedCheckChildren(node)) {\n if (nestedCheck(childNode, node, check, includeTextNode)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default ((): typeof nestedCheck => nestedCheck)();\n","import { DebugNode } from '@angular/core';\n\nimport { DebugNodeSelector } from '../../common/core.types';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\n\nimport nestedCheck from './nested-check';\n\nexport default (\n sel: DebugNode | DebugNodeSelector,\n callback: (node: DebugNode, parent?: DebugNode) => void | boolean,\n includeTextNode = false,\n): void => {\n const el = mockHelperFind(funcGetLastFixture(), sel, undefined);\n nestedCheck(el, undefined, callback, includeTextNode);\n};\n","import isDebugNode from './format/is-debug-node';\nimport isFixture from './format/is-fixture';\nimport funcGetLastFixture from './func.get-last-fixture';\n\nconst isSelector = (value: any): boolean => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n if (isFixture(value)) {\n return true;\n }\n if (isDebugNode(value)) {\n return true;\n }\n\n return true;\n};\n\nexport default (args: any[], isValidValue: (value: any) => boolean, defaultNotFoundValue?: any): [any, any, any] => {\n let el;\n let sel;\n let notFoundValue = defaultNotFoundValue;\n if (args.length === 3) {\n [el, sel, notFoundValue] = args;\n } else if (args.length === 1) {\n el = funcGetLastFixture();\n [sel] = args;\n } else if (isValidValue(args[1]) && isSelector(args[0])) {\n [el, sel] = args;\n } else {\n el = funcGetLastFixture();\n [sel, notFoundValue] = args;\n }\n\n return [el, sel, notFoundValue];\n};\n","import { DebugNode, Directive } from '@angular/core';\n\nimport coreInjector from '../common/core.injector';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport funcGetProvider from '../common/func.get-provider';\n\nconst getMeta = (token: any): Directive | undefined => {\n try {\n return coreReflectDirectiveResolve(token);\n } catch {\n return undefined;\n }\n};\n\nexport default (el: DebugNode | null | undefined, token: any): Directive | undefined => {\n // istanbul ignore if\n if (!el) {\n return undefined;\n }\n\n try {\n const provider = funcGetProvider(token);\n const instance = coreInjector(provider, el.injector);\n\n return getMeta(instance.constructor);\n } catch {\n return undefined;\n }\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (node: MockedDebugNode): string[] => {\n return (node.injector as any).elDef ? Object.keys((node.injector as any).elDef.element.publicProviders) : [];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\nimport funcParseProviderTokensDirectives from '../func.parse-provider-tokens-directives';\n\nexport default (node: MockedDebugNode, key: string): [string[], string[], number] => {\n const config = (node.injector as any).elDef.element.publicProviders[key];\n const token = config.provider.value;\n if (!token) {\n return [[], [], 0];\n }\n const meta = funcParseProviderTokensDirectives(node, token);\n\n const requiredAttributes = config.bindings.map((binding: any) => binding.nonMinifiedName || binding.name);\n\n return [meta?.inputs || [], requiredAttributes, config.nodeIndex];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\nimport funcParseProviderTokensDirectives from '../func.parse-provider-tokens-directives';\n\nimport funcGetPublicProviderKeys from './func.get-public-provider-keys';\nimport funcParseInputsAndRequiresAttributes from './func.parse-inputs-and-requires-attributes';\n\nconst collectSelectors = (node: MockedDebugNode): string[] => {\n const selectors: string[] = [];\n\n for (const token of node.providerTokens) {\n const meta = funcParseProviderTokensDirectives(node, token);\n if (meta?.selector && selectors.indexOf(meta.selector) === -1) {\n selectors.push(meta.selector);\n }\n }\n\n return selectors;\n};\n\nconst collectAttributesClassic = (node: MockedDebugNode): string[] => {\n const result: string[] = [];\n\n for (const key of funcGetPublicProviderKeys(node)) {\n const [inputs, expectedAttributes] = funcParseInputsAndRequiresAttributes(node, key);\n for (const input of inputs) {\n const [prop, alias] = input.split(': ');\n const attr = alias || prop;\n if (expectedAttributes.indexOf(prop) !== -1 && result.indexOf(attr) === -1) {\n result.push(attr);\n }\n }\n }\n\n return result;\n};\n\nconst collectAttributesIvy = (node: MockedDebugNode): string[] => {\n const result: string[] = [];\n\n const attrs = (node.injector as any)._tNode?.attrs || [];\n let step = 2;\n for (let index = 0; index < attrs.length; index += step) {\n // 3 is a divider between static and dynamic bindings\n if (typeof attrs[index] === 'number') {\n step = 1;\n continue;\n }\n const attr = attrs[index];\n if ((node.injector as any)._tNode.inputs?.[attr] && result.indexOf(attr) === -1) {\n result.push(attr);\n }\n }\n\n return result;\n};\n\nexport default (node: MockedDebugNode): [string[], string[]] => {\n const selectors = collectSelectors(node);\n const attributes = [...collectAttributesClassic(node), ...collectAttributesIvy(node)];\n\n return [selectors, attributes];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectAttributeInSelectors from './detect-attribute-in-selectors';\nimport detectSelectorsFromNode from './detect-selectors-from-node';\n\nexport default (attribute: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n const [selectors, attributes] = detectSelectorsFromNode(node);\n\n if (attributes.indexOf(attribute) !== -1) {\n return true;\n }\n\n if (detectAttributeInSelectors(selectors, attribute)) {\n return true;\n }\n\n return false;\n };\n","export default (selectors: string[], query: string): boolean => {\n for (const selector of selectors) {\n const attributes = selector.match(/\\[([^=\\]]+)/g);\n if (!attributes) {\n continue;\n }\n\n for (const attribute of attributes) {\n if (attribute === `[${query}`) {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport funcGetPublicProviderKeys from './func.get-public-provider-keys';\nimport funcParseInputsAndRequiresAttributes from './func.parse-inputs-and-requires-attributes';\n\nconst detectInClassic = (node: MockedDebugNode, attribute: string, value: any): boolean => {\n for (const key of funcGetPublicProviderKeys(node)) {\n const [inputs, expectedAttributes, nodeIndex] = funcParseInputsAndRequiresAttributes(node, key);\n for (const input of inputs) {\n const [prop, alias] = input.split(': ');\n if (attribute !== (alias || prop) || expectedAttributes.indexOf(prop) === -1) {\n continue;\n }\n if (value === (node.injector as any).view.nodes[nodeIndex].instance[prop]) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst detectInIvy = (node: MockedDebugNode, attribute: string, value: any): boolean => {\n const attrs = (node.injector as any)._tNode?.attrs || [];\n let step = 2;\n for (let index = 0; index < attrs.length; index += step) {\n // 3 is a divider between static and dynamic bindings\n if (typeof attrs[index] === 'number') {\n step = 1;\n continue;\n }\n const attr = attrs[index];\n if (attr !== attribute || !(node.injector as any)._tNode.inputs?.[attr]) {\n continue;\n }\n const [attrIndex, attrProp] = (node.injector as any)._tNode.inputs[attr];\n\n if (value === (node.injector as any)._lView?.[attrIndex][attrProp]) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (attribute: string, value: any): ((node: MockedDebugNode) => boolean) =>\n node => {\n if (detectInIvy(node, attribute, value)) {\n return true;\n }\n\n return detectInClassic(node, attribute, value);\n };\n","import coreInjector from '../../common/core.injector';\nimport { AnyType } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { MockedDebugNode } from '../../mock-render/types';\n\nexport default (declaration: AnyType<any>): ((node: MockedDebugNode) => boolean) => {\n const source = getSourceOfMock(declaration);\n\n return node =>\n !!node && node.providerTokens.indexOf(source) !== -1 && coreInjector(source, node.injector) !== undefined;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (id: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n return !!node.references[id];\n };\n","const regExp = new RegExp('\\\\[.*?\\\\]', 'g');\n\nexport default (selectors: string[], query: string): boolean => {\n for (const selector of selectors) {\n const attributes = selector.replace(regExp, '').split(',');\n\n for (const attribute of attributes) {\n if (attribute.trim() === query) {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { AnyType } from '../../common/core.types';\nimport { MockedDebugNode } from '../../mock-render/types';\n\nimport crawlByAttribute from './crawl-by-attribute';\nimport crawlByAttributeValue from './crawl-by-attribute-value';\nimport crawlByDeclaration from './crawl-by-declaration';\nimport crawlById from './crawl-by-id';\nimport crawlByTagName from './crawl-by-tag-name';\n\ntype SELECTOR = string | AnyType<any> | [any] | [any, any];\n\nconst isCrawlByAttribute = (selector: SELECTOR): selector is [string] => {\n return Array.isArray(selector) && selector.length === 1 && typeof selector[0] === 'string';\n};\n\nconst isCrawlByAttributeValue = (selector: SELECTOR): selector is [string, any] => {\n return Array.isArray(selector) && selector.length === 2 && typeof selector[0] === 'string';\n};\n\nconst isCrawlById = (selector: SELECTOR): selector is string => {\n return typeof selector === 'string' && selector.indexOf('#') === 0 && selector.length > 1;\n};\n\nconst isCrawlByTagName = (selector: SELECTOR): selector is string => {\n return typeof selector === 'string' && selector.indexOf('#') !== 0 && selector.length > 0;\n};\n\nconst isCrawlByDeclaration = (selector: SELECTOR): selector is AnyType<any> => {\n return typeof selector === 'function';\n};\n\nexport default (selector: SELECTOR): ((node: MockedDebugNode) => boolean) => {\n if (isCrawlByAttribute(selector)) {\n return crawlByAttribute(selector[0]);\n }\n if (isCrawlByAttributeValue(selector)) {\n return crawlByAttributeValue(selector[0], selector[1]);\n }\n if (isCrawlById(selector)) {\n return crawlById(selector.slice(1));\n }\n if (isCrawlByTagName(selector)) {\n return crawlByTagName(selector);\n }\n if (isCrawlByDeclaration(selector)) {\n return crawlByDeclaration(selector);\n }\n\n throw new Error('Unknown selector');\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectSelectorsFromNode from './detect-selectors-from-node';\nimport detectTagNameInSelectors from './detect-tag-name-in-selectors';\n\nexport default (attribute: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n const [selectors] = detectSelectorsFromNode(node);\n\n return detectTagNameInSelectors(selectors, attribute);\n };\n","export default (value: any) => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n\n return typeof value === 'function';\n};\n","import mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport detectCrawler from './detect-crawler';\nimport detectTextNode from './detect-text-node';\nimport funcIsValidRevealSelector from './func.is-valid-reveal-selector';\nimport mockHelperCrawl from './mock-helper.crawl';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]): any => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidRevealSelector, defaultNotFoundValue);\n const root = mockHelperFind(funcGetLastFixture(), el, undefined);\n\n const detector = detectCrawler(sel);\n\n let result;\n mockHelperCrawl(root, node => {\n if (node !== root && !detectTextNode(node) && detector(node)) {\n result = node;\n\n return true;\n }\n\n return false;\n });\n if (result) {\n return result;\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n\n throw new Error(`Cannot find a DebugElement via ngMocks.reveal(${funcParseFindArgsName(sel)})`);\n};\n","import funcIsMock from './func.is-mock';\nimport { MockControlValueAccessor } from './mock-control-value-accessor';\n\n/**\n * isMockControlValueAccessor helps to assert that an instance is a mock ControlValueAccessor\n * to perform valueChange or touch simulations.\n * Usually, it is used in if statements.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\nexport const isMockControlValueAccessor = <T>(value: T): value is T & MockControlValueAccessor => {\n if (!funcIsMock(value)) {\n return false;\n }\n\n return !!value.__ngMocksConfig.isControlValueAccessor;\n};\n","export default (value: any): value is HTMLElement => {\n return !!value && typeof value === 'object' && value.innerHTML !== undefined;\n};\n","import mockHelperStub from '../mock-helper.stub';\n\n/**\n * @see https://developer.mozilla.org/de/docs/Web/Events\n */\nconst preventBubble = ['focus', 'blur', 'load', 'unload', 'change', 'reset', 'scroll'];\n\n// istanbul ignore next\nconst customEvent = (event: string, params?: EventInit) => {\n const initParams = {\n bubbles: false,\n cancelable: false,\n ...params,\n };\n const eventObj = document.createEvent('CustomEvent');\n eventObj.initCustomEvent(event, initParams.bubbles, initParams.cancelable, null);\n\n return eventObj;\n};\n\nconst eventCtor =\n typeof (Event as any) === 'function'\n ? (event: string, init?: EventInit): CustomEvent => new CustomEvent(event, init)\n : /* istanbul ignore next */ customEvent;\n\nconst keyMap: Record<string, object> = {\n alt: {\n altKey: true,\n code: 'AltLeft',\n key: 'Alt',\n location: 1,\n which: 18,\n },\n arrowdown: {\n code: 'ArrowDown',\n key: 'ArrowDown',\n location: 0,\n which: 40,\n },\n arrowleft: {\n code: 'ArrowLeft',\n key: 'ArrowLeft',\n location: 0,\n which: 37,\n },\n arrowright: {\n code: 'ArrowRight',\n key: 'ArrowRight',\n location: 0,\n which: 39,\n },\n arrowup: {\n code: 'ArrowUp',\n key: 'ArrowUp',\n location: 0,\n which: 38,\n },\n backspace: {\n code: 'Backspace',\n key: 'Backspace',\n location: 0,\n which: 8,\n },\n control: {\n code: 'ControlLeft',\n ctrlKey: true,\n key: 'Control',\n location: 1,\n which: 17,\n },\n enter: {\n code: 'Enter',\n key: 'Enter',\n location: 0,\n which: 13,\n },\n esc: {\n code: 'Escape',\n key: 'Escape',\n location: 0,\n which: 27,\n },\n meta: {\n code: 'MetaLeft',\n key: 'Meta',\n location: 1,\n metaKey: true,\n which: 91,\n },\n shift: {\n code: 'ShiftLeft',\n key: 'Shift',\n location: 1,\n shiftKey: true,\n which: 16,\n },\n space: {\n code: 'Space',\n key: ' ',\n location: 0,\n which: 32,\n },\n tab: {\n code: 'Tab',\n key: 'Tab',\n location: 0,\n which: 9,\n },\n};\nfor (let f = 1; f <= 12; f += 1) {\n keyMap[`f${f}`] = {\n code: `F${f}`,\n key: `F${f}`,\n location: 0,\n which: f + 111,\n };\n}\n\nconst getCode = (char: string): string => {\n const code = char.codePointAt(0);\n // a-z\n if (code && code >= 97 && code <= 122) {\n return `Key${char.toUpperCase()}`;\n }\n // A-Z\n if (code && code >= 65 && code <= 90) {\n return `Key${char.toUpperCase()}`;\n }\n // A-Z\n if (code && code >= 48 && code <= 57) {\n return `Digit${char}`;\n }\n\n return 'Unknown';\n};\n\nconst applyPayload = (event: Event, payload?: string): void => {\n const keyData: object = {};\n for (const key of payload ? payload.split('.') : []) {\n let map = keyMap[key];\n if (!map && key.length === 1) {\n map = {\n code: getCode(key),\n key,\n };\n }\n\n if (!map) {\n throw new Error(`Unknown event part ${key}`);\n }\n\n mockHelperStub(keyData, map);\n }\n\n if (payload) {\n mockHelperStub(event, keyData);\n }\n};\n\nexport default (\n event: string,\n init?: EventInit,\n overrides?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n): CustomEvent => {\n const dot = event.indexOf('.');\n const [eventName, eventPayload] = dot === -1 ? [event] : [event.slice(0, Math.max(0, dot)), event.slice(dot + 1)];\n const eventObj = eventCtor(eventName, {\n bubbles: preventBubble.indexOf(event) === -1,\n cancelable: true,\n ...init,\n });\n applyPayload(eventObj, eventPayload);\n\n if (overrides) {\n mockHelperStub(eventObj, overrides);\n }\n\n return eventObj;\n};\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\n\nimport { DebugNodeSelector } from '../../common/core.types';\nimport mockHelperFind from '../find/mock-helper.find';\nimport isDebugNode from '../format/is-debug-node';\nimport isFixture from '../format/is-fixture';\nimport isHtmlElement from '../format/is-html-element';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport mockHelperStub from '../mock-helper.stub';\n\nimport mockHelperEvent from './mock-helper.event';\n\n/**\n * @see https://developer.mozilla.org/de/docs/Web/Events\n */\nconst preventBubble = ['focus', 'blur', 'load', 'unload', 'change', 'reset', 'scroll'];\n\nconst toEventObj = (event: string | UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event): Event => {\n return typeof event === 'string'\n ? mockHelperEvent(event, {\n bubbles: preventBubble.indexOf(event) === -1,\n cancelable: true,\n })\n : event;\n};\n\nconst getNativeElement = (\n debugElement: DebugElement | HTMLElement | ComponentFixture<any> | undefined | null,\n): HTMLElement | undefined => {\n if (isDebugNode(debugElement) || isFixture(debugElement)) {\n return debugElement.nativeElement;\n }\n if (isHtmlElement(debugElement)) {\n return debugElement;\n }\n\n return undefined;\n};\n\nexport default (\n selector: DebugElement | HTMLElement | ComponentFixture<any> | DebugNodeSelector,\n eventName: string | UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event,\n payload?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n) => {\n const debugElement = isHtmlElement(selector) ? selector : mockHelperFind(funcGetLastFixture(), selector, undefined);\n const nativeElement = getNativeElement(debugElement);\n\n if (!nativeElement) {\n throw new Error(\n `Cannot trigger ${typeof eventName === 'string' ? eventName : eventName.type} event undefined element`,\n );\n }\n\n // nothing to emit on disabled elements\n if ((nativeElement as HTMLInputElement).disabled) {\n return;\n }\n\n const event = toEventObj(eventName);\n if (!event.target) {\n mockHelperStub(event, {\n target: nativeElement,\n });\n }\n if (payload) {\n mockHelperStub(event, payload);\n }\n nativeElement.dispatchEvent(event);\n};\n","import { DebugNode } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport coreInjector from '../../common/core.injector';\n\nconst message = [\n 'Cannot find ControlValueAccessor on the element.',\n 'If it is a mock input with [formControlName],',\n 'you need either to avoid mocking ReactiveFormsModule',\n 'or to avoid accessing the control in such a way,',\n 'because this tests ReactiveFormsModule instead of own implementation.',\n].join(' ');\n\nexport default (el: DebugNode): Record<keyof any, any> => {\n const ngControl = coreForm && coreInjector(coreForm.NgControl, el.injector);\n const valueAccessor = ngControl?.valueAccessor;\n if (valueAccessor) {\n return valueAccessor;\n }\n\n const formControlDirective = coreForm && coreInjector(coreForm.FormControlDirective, el.injector);\n if (formControlDirective?.form) {\n return formControlDirective.form;\n }\n\n const ngModel = coreForm && coreInjector(coreForm.NgModel, el.injector);\n if (ngModel) {\n return ngModel;\n }\n\n throw new Error(message);\n};\n","import { DebugElement } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport { DebugNodeSelector } from '../../common/core.types';\nimport { isMockControlValueAccessor } from '../../common/func.is-mock-control-value-accessor';\nimport helperDefinePropertyDescriptor from '../../mock-service/helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from '../../mock-service/helper.extract-methods-from-prototype';\nimport mockHelperTrigger from '../events/mock-helper.trigger';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\nimport mockHelperStubMember from '../mock-helper.stub-member';\n\nimport funcGetVca from './func.get-vca';\n\n// default html behavior\nconst triggerInput = (el: DebugElement, value: any): void => {\n mockHelperTrigger(el, 'focus');\n\n const descriptor = Object.getOwnPropertyDescriptor(el.nativeElement, 'value');\n mockHelperStubMember(el.nativeElement, 'value', value);\n mockHelperTrigger(el, 'input');\n mockHelperTrigger(el, 'change');\n if (descriptor) {\n helperDefinePropertyDescriptor(el.nativeElement, 'value', descriptor);\n el.nativeElement.value = value;\n }\n\n mockHelperTrigger(el, 'blur');\n};\n\nconst handleKnown = (valueAccessor: any, value: any): boolean => {\n if (coreForm && valueAccessor instanceof coreForm.AbstractControl) {\n valueAccessor.setValue(value);\n\n return true;\n }\n\n if (coreForm && valueAccessor instanceof coreForm.NgModel) {\n valueAccessor.update.emit(value);\n\n return true;\n }\n\n if (isMockControlValueAccessor(valueAccessor.instance)) {\n valueAccessor.instance.__simulateChange(value);\n\n return true;\n }\n\n return false;\n};\n\nconst hasListener = (el: DebugElement): boolean =>\n el.listeners.some(listener => listener.name === 'input' || listener.name === 'change');\n\nconst keys = [\n 'onChange',\n 'onChangeCallback',\n 'onChangeCb',\n 'onChangeClb',\n 'onChangeFn',\n\n '_onChange',\n '_onChangeCallback',\n '_onChangeCb',\n '_onChangeClb',\n '_onChangeFn',\n\n 'changeFn',\n '_changeFn',\n\n 'onModelChange',\n\n 'cvaOnChange',\n 'cvaOnChangeCallback',\n 'cvaOnChangeCb',\n 'cvaOnChangeClb',\n 'cvaOnChangeFn',\n\n '_cvaOnChange',\n '_cvaOnChangeCallback',\n '_cvaOnChangeCb',\n '_cvaOnChangeClb',\n '_cvaOnChangeFn',\n];\n\nexport default (selector: DebugNodeSelector, value: any, methodName?: string): void => {\n const el = mockHelperFind(funcGetLastFixture(), selector, undefined);\n if (!el) {\n throw new Error(`Cannot find an element via ngMocks.change(${funcParseFindArgsName(selector)})`);\n }\n\n const valueAccessor = funcGetVca(el);\n if (handleKnown(valueAccessor, value) || hasListener(el)) {\n triggerInput(el, value);\n\n return;\n }\n\n for (const key of methodName ? [methodName] : keys) {\n if (typeof valueAccessor[key] === 'function') {\n valueAccessor.writeValue(value);\n valueAccessor[key](value);\n\n return;\n }\n }\n\n const methods = helperExtractMethodsFromPrototype(valueAccessor);\n throw new Error(\n [\n 'Unsupported type of ControlValueAccessor,',\n `please ensure it has '${methodName || 'onChange'}' method.`,\n `If it is a 3rd-party library, please provide the correct name of the method in the 'methodName' parameter.`,\n 'Possible Names: ' + methods.join(', ') + '.',\n ].join(' '),\n );\n};\n","import { DebugElement } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport { DebugNodeSelector } from '../../common/core.types';\nimport { isMockControlValueAccessor } from '../../common/func.is-mock-control-value-accessor';\nimport helperExtractMethodsFromPrototype from '../../mock-service/helper.extract-methods-from-prototype';\nimport mockHelperTrigger from '../events/mock-helper.trigger';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcGetVca from './func.get-vca';\n\n// default html behavior\nconst triggerTouch = (el: DebugElement): void => {\n mockHelperTrigger(el, 'focus');\n mockHelperTrigger(el, 'blur');\n};\n\nconst handleKnown = (valueAccessor: any): boolean => {\n if (coreForm && valueAccessor instanceof coreForm.AbstractControl) {\n valueAccessor.markAsTouched();\n\n return true;\n }\n\n if (isMockControlValueAccessor(valueAccessor.instance)) {\n valueAccessor.instance.__simulateTouch();\n\n return true;\n }\n\n return false;\n};\n\nconst hasListener = (el: DebugElement): boolean =>\n el.listeners.some(listener => listener.name === 'focus' || listener.name === 'blur');\n\nconst keys = [\n 'onTouched',\n 'onTouchedCallback',\n 'onTouchedCb',\n 'onTouchedClb',\n 'onTouchedFn',\n\n '_onTouched',\n '_onTouchedCallback',\n '_onTouchedCb',\n '_onTouchedClb',\n '_onTouchedFn',\n\n 'markAsTouched',\n '_markAsTouched',\n\n 'onModelTouched',\n\n 'cvaOnTouch',\n 'cvaOnTouchCallback',\n 'cvaOnTouchCb',\n 'cvaOnTouchClb',\n 'cvaOnTouchFn',\n\n '_cvaOnTouch',\n '_cvaOnTouchCallback',\n '_cvaOnTouchCb',\n '_cvaOnTouchClb',\n '_cvaOnTouchFn',\n];\n\nexport default (sel: DebugElement | DebugNodeSelector, methodName?: string): void => {\n const el = mockHelperFind(funcGetLastFixture(), sel, undefined);\n if (!el) {\n throw new Error(`Cannot find an element via ngMocks.touch(${funcParseFindArgsName(sel)})`);\n }\n\n const valueAccessor = funcGetVca(el);\n if (handleKnown(valueAccessor) || hasListener(el)) {\n triggerTouch(el);\n\n return;\n }\n\n for (const key of methodName ? [methodName] : keys) {\n if (typeof valueAccessor[key] === 'function') {\n valueAccessor[key]();\n\n return;\n }\n }\n\n const methods = helperExtractMethodsFromPrototype(valueAccessor);\n throw new Error(\n [\n 'Unsupported type of ControlValueAccessor,',\n `please ensure it has '${methodName || 'onTouched'}' method.`,\n `If it is a 3rd-party library, please provide the correct name of the method in the 'methodName' parameter.`,\n 'Possible Names: ' + methods.join(', ') + '.',\n ].join(' '),\n );\n};\n","import { DebugNode } from '@angular/core';\n\nexport default (node: DebugNode): DebugNode =>\n node.nativeNode?.nodeName === '#text' && node.parent ? node.parent : node;\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nconst detectGatherFlag = (gather: boolean, el: DebugNode | null, node: any): boolean => {\n // LContainer for structural directives can be a trigger for pipes.\n if (\n el &&\n el.nativeNode &&\n el.nativeNode.nodeName === '#comment' &&\n Array.isArray(node) &&\n node[0] === el.nativeNode\n ) {\n return true;\n }\n\n // LContainer should stop the scan.\n if (Array.isArray(node)) {\n return false;\n }\n\n if (!el || !node.nodeName) {\n return gather;\n }\n\n // checking if a commentNode belongs to the current element.\n // it comes from structural directives.\n if (node.nodeName === '#comment') {\n return node === el.nativeNode;\n }\n\n // checking if a textNode belongs to the current element.\n if (node.nodeName === '#text') {\n return node.parentNode === el.nativeNode;\n }\n\n return false;\n};\n\nconst isNotObject = (node: any): boolean => !node || typeof node !== 'object';\n\nconst shouldBeScanned = (scanned: any[], node: any): boolean => scanned.indexOf(node) === -1 && Array.isArray(node);\n\nconst scan = <T>(\n {\n result,\n el,\n nodes,\n normalize,\n proto,\n }: {\n el: DebugNode | null;\n nodes: any[];\n normalize: (item: any) => any;\n proto: AnyType<T>;\n result: T[];\n },\n gatherDefault: boolean,\n scanned: any[] = [],\n): void => {\n scanned.push(nodes);\n let gather = gatherDefault;\n\n let nodesLength = nodes.length;\n if (nodes.length > 1 && nodes[1] && typeof nodes[1] === 'object' && nodes[1].bindingStartIndex) {\n nodesLength = nodes[1].bindingStartIndex;\n }\n\n for (let index = 0; index < nodesLength; index += 1) {\n const node = normalize(nodes[index]);\n if (isNotObject(node)) {\n continue;\n }\n\n if (shouldBeScanned(scanned, node)) {\n scan({ result, el, nodes: node, normalize, proto }, gather, scanned);\n }\n\n gather = detectGatherFlag(gather, el, node);\n if (!gather) {\n continue;\n }\n\n if (result.indexOf(node) === -1 && node instanceof proto) {\n result.push(node);\n }\n }\n};\n\nexport default (() => scan)();\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nimport { Node } from './func.get-from-node';\nimport funcGetFromNodeElement from './func.get-from-node-element';\nimport funcGetFromNodeScan from './func.get-from-node-scan';\n\nconst detectContextByIndex = (rootView: any, index: number) => {\n if (typeof rootView[1] === 'object' && rootView[20] === index) {\n return rootView;\n }\n\n for (let i = 21; i < rootView.length; i += 1) {\n const item = rootView[i];\n if (Array.isArray(item) && typeof item[1] === 'object' && item[20] === index) {\n return item;\n }\n }\n\n return undefined;\n};\n\nconst detectContext = (node: DebugNode): any => {\n let current = node;\n let context = current.nativeNode?.__ngContext__;\n while (context === undefined && current.parent) {\n current = current.parent;\n context = current.nativeNode.__ngContext__;\n }\n if (typeof context !== 'number') {\n return context;\n }\n // welcome to A12 and its optimization\n // https://github.com/angular/angular/pull/41358\n\n const rootView = (current.injector as any)._lView;\n if (Array.isArray(rootView)) {\n return detectContextByIndex(rootView, context);\n }\n\n return undefined;\n};\n\nconst contextToNodes = (context: any): any => (Array.isArray(context) ? context : context?.lView);\n\nexport default <T>(result: T[], node: (DebugNode & Node) | null | undefined, proto: AnyType<T>): void => {\n if (!node || node._debugContext) {\n return;\n }\n\n const el = funcGetFromNodeElement(node);\n funcGetFromNodeScan(\n {\n el,\n nodes: contextToNodes(detectContext(node)) || [],\n normalize: item => item,\n proto,\n result,\n },\n true,\n );\n};\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nimport { Node } from './func.get-from-node';\nimport funcGetFromNodeElement from './func.get-from-node-element';\nimport funcGetFromNodeScan from './func.get-from-node-scan';\n\nconst normalize = (item: any): any => {\n if (!item || typeof item !== 'object') {\n return item;\n }\n\n for (const key of ['renderElement', 'renderText', 'instance']) {\n if (item[key]) {\n return item[key];\n }\n }\n\n return null;\n};\n\nexport default <T>(result: T[], node: (DebugNode & Node) | null | undefined, proto: AnyType<T>): void => {\n if (!node || !node._debugContext) {\n return;\n }\n\n const el = funcGetFromNodeElement(node);\n\n funcGetFromNodeScan(\n {\n el,\n nodes: node._debugContext.view.nodes,\n normalize,\n proto,\n result,\n },\n true,\n );\n};\n","import { DebugNode } from '@angular/core';\n\nimport { AnyDeclaration } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nimport funcGetFromNodeInjector from './func.get-from-node-injector';\nimport funcGetFromNodeIvy from './func.get-from-node-ivy';\nimport funcGetFromNodeStandard from './func.get-from-node-standard';\n\nexport interface Node {\n _debugContext?: {\n elDef: {\n nodeIndex: number;\n };\n nodeDef: {\n nodeIndex: number;\n };\n nodeIndex: number;\n view: {\n nodes: Array<{\n instance?: any;\n renderElement?: any;\n renderText?: any;\n value?: any;\n }>;\n };\n };\n parent?: (DebugNode & Node) | null;\n}\n\nexport default <T>(result: T[], node: DebugNode & Node, proto: AnyDeclaration<T>): T[] => {\n funcGetFromNodeInjector(result, node, proto);\n if (!isNgDef(proto, 't') && typeof proto !== 'string') {\n funcGetFromNodeStandard(result, node, proto);\n funcGetFromNodeIvy(result, node, proto);\n }\n\n return result;\n};\n","import { DebugNode, Injector } from '@angular/core';\n\nimport coreInjector from '../common/core.injector';\nimport { AnyDeclaration } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nimport { Node } from './func.get-from-node';\n\nconst getParentWithInjector = (node: (DebugNode & Node) | null): Injector | undefined => {\n let parent: DebugNode | null = node;\n while (parent?.injector.constructor.name === 'NullInjector') {\n parent = parent.parent;\n }\n\n if (parent) {\n return parent.injector;\n }\n\n return undefined;\n};\n\nexport default <T>(result: T[], node: DebugNode & Node, proto: AnyDeclaration<T>): void => {\n if (!node.injector || node.injector.constructor.name === 'NullInjector') {\n return;\n }\n\n const parentInjector = getParentWithInjector(node.parent);\n const parentInstance = parentInjector ? coreInjector(proto, parentInjector) : undefined;\n const instance = coreInjector(proto, node.injector);\n // a way to avoid inherited injections\n if (parentInstance === instance) {\n return;\n }\n\n if (isNgDef(proto, 't') && instance !== undefined) {\n result.push(instance);\n } else if (instance !== undefined && result.indexOf(instance) === -1) {\n result.push(instance);\n }\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\n\nexport default (value: any): boolean => {\n return typeof value === 'function' || isNgDef(value, 't');\n};\n","import { getInjection } from '../../common/core.helpers';\nimport { Type } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport mockHelperCrawl from '../crawl/mock-helper.crawl';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetFromNode from '../func.get-from-node';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcIsValidFindInstanceSelector from './func.is-valid-find-instance-selector';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default <T>(...args: any[]): T => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidFindInstanceSelector, defaultNotFoundValue);\n if (typeof sel !== 'function' && !isNgDef(sel, 't') && typeof sel !== 'string') {\n throw new Error('Only classes or tokens are accepted');\n }\n\n const declaration: Type<T> = getSourceOfMock(sel);\n const result: T[] = [];\n const fixture = funcGetLastFixture();\n if (fixture) {\n mockHelperCrawl(\n mockHelperFind(fixture, el, undefined),\n (node, parent) => {\n funcGetFromNode(result, node, declaration);\n if (result.length === 0 && parent && parent.nativeNode.nodeName === '#comment') {\n funcGetFromNode(result, parent, declaration);\n }\n\n return result.length > 0;\n },\n true,\n );\n } else {\n try {\n result.push(getInjection(declaration));\n } catch {\n // nothing to do\n }\n }\n\n if (result.length > 0) {\n return result[0];\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find an instance via ngMocks.findInstance(${funcParseFindArgsName(sel)})`);\n};\n","import { DebugElement } from '@angular/core';\n\nimport isDebugNode from '../format/is-debug-node';\n\nimport funcParseFindArgs from './func.parse-find-args';\nimport funcParseFindTerm from './func.parse-find-term';\n\nexport default (...args: any[]): DebugElement[] => {\n const [el, sel] = funcParseFindArgs(args);\n if (isDebugNode(sel)) {\n return [sel as any];\n }\n\n return el?.queryAll(funcParseFindTerm(sel)) || [];\n};\n","import nestedCheckChildren from '../crawl/nested-check-children';\n\nimport handleArray from './handle-array';\nimport isDebugNode from './is-debug-node';\nimport isFixture from './is-fixture';\nimport { FORMAT_SET, FORMAT_SINGLE } from './types';\n\nexport default (handlePrimitives: any) =>\n (html: any, outer = false) => {\n const format = (value: Text | Comment | FORMAT_SINGLE | FORMAT_SET, innerOuter = false): any => {\n if (Array.isArray(value)) {\n return handleArray(format, value);\n }\n if (isFixture(value)) {\n return format(value.debugElement, outer);\n }\n const result = handlePrimitives(format, value, innerOuter);\n if (result !== undefined) {\n return result;\n }\n\n if (isDebugNode(value) && value.nativeNode.nodeName === '#comment') {\n return format(nestedCheckChildren(value), true);\n }\n\n return isDebugNode(value) ? format(value.nativeNode, innerOuter) : '';\n };\n\n return Array.isArray(html) ? html.map((item: any) => format(item, outer)) : format(html, outer);\n };\n","export default (format: any, html: any) => {\n return format((html as any[]).map(item => format(item, true)).join(''));\n};\n","export default (html: Text): string => html.nodeValue ?? html.textContent ?? html.wholeText;\n","export default (value: any): value is Text => {\n return !!value && typeof value === 'object' && value.nodeName === '#text';\n};\n","import formatHandler from './format-handler';\nimport handleText from './handle-text';\nimport isHtmlElement from './is-html-element';\nimport isText from './is-text';\n\nconst normalizeValue = (html: string | undefined): string =>\n html\n ? html // lgtm [js/incomplete-multi-character-sanitization]\n .replace(new RegExp('\\\\s+', 'mg'), ' ')\n .replace(new RegExp('<!--.*?-->', 'mg'), '')\n .replace(new RegExp('\\\\s+', 'mg'), ' ')\n .replace(new RegExp('>\\\\s+<', 'mg'), '><')\n .replace(new RegExp('\"\\\\s+>', 'mg'), '\">')\n : '';\n\nconst normalizeText = (text: string): string =>\n text\n .replace(new RegExp('&', 'mg'), '&')\n .replace(new RegExp('\"', 'mg'), '"')\n .replace(new RegExp('<', 'mg'), '<')\n .replace(new RegExp('>', 'mg'), '>')\n .replace(new RegExp(\"'\", 'mg'), ''');\n\nconst getElementValue = (element: HTMLElement, outer: boolean): string =>\n outer ? element.outerHTML : element.innerHTML;\n\nconst handlePrimitives = (format: any, value: any, outer: boolean): string | undefined => {\n if (typeof value === 'string' || value === undefined) {\n const result = normalizeValue(value);\n\n return outer ? result : result.trim();\n }\n if (isHtmlElement(value)) {\n return format(getElementValue(value, outer));\n }\n if (isText(value)) {\n return handlePrimitives(format, normalizeText(handleText(value)), outer);\n }\n\n return undefined;\n};\n\nexport default (() => formatHandler(handlePrimitives))();\n","import formatHandler from './format-handler';\nimport handleText from './handle-text';\nimport isHtmlElement from './is-html-element';\nimport isText from './is-text';\n\nconst normalizeValue = (html: string | undefined): string => (html ? html.replace(new RegExp('\\\\s+', 'mg'), ' ') : '');\n\nconst getElementValue = (element: HTMLElement, outer: boolean): string => {\n const value = element.textContent ?? '';\n\n return outer ? value : value.trim();\n};\n\nconst handlePrimitives = (format: any, value: any, outer: boolean): string | undefined => {\n if (typeof value === 'string' || value === undefined) {\n const result = normalizeValue(value);\n\n return outer ? result : result.trim();\n }\n if (isHtmlElement(value)) {\n return format(getElementValue(value, outer));\n }\n if (isText(value)) {\n return handlePrimitives(format, handleText(value), outer);\n }\n\n return undefined;\n};\n\nexport default (() => formatHandler(handlePrimitives))();\n","import { registerMockFunction } from '../mock-service/helper.mock-service';\nimport { CustomMockFunction } from '../mock-service/types';\n\ntype param = 'jasmine' | 'jest' | 'default' | 'reset' | CustomMockFunction;\n\nconst calls: param[] = [];\n\nexport default (type: param) => {\n if (type === 'reset') {\n calls.pop();\n } else {\n calls.push(type);\n }\n const action: param | undefined = calls[calls.length - 1];\n\n if (action === 'jasmine') {\n return registerMockFunction(mockName => jasmine.createSpy(mockName));\n }\n // istanbul ignore if: because it is run with jasmine\n if (action === 'jest') {\n return registerMockFunction(name => jest.fn().mockName(name));\n }\n if (!action || action === 'default' || action === 'reset') {\n return registerMockFunction();\n }\n\n return registerMockFunction(action);\n};\n","/* eslint-disable no-console */\n\nimport coreDefineProperty from '../common/core.define-property';\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default (defaultMethods: Array<keyof typeof console>, factory: (name: string) => any) =>\n (...methods: Array<keyof typeof console>): void => {\n const backup: Array<keyof typeof console> = [];\n\n beforeEach(() => {\n for (const method of defaultMethods) {\n if (methods.indexOf(method) === -1) {\n methods.push(method);\n }\n }\n\n for (const method of methods) {\n coreDefineProperty(console, `__ngMocksBackup_${method}`, (console as any)[`__ngMocksBackup_${method}`] || []);\n (console as any)[`__ngMocksBackup_${method}`].push(console[method]);\n backup.push(method);\n console[method] = factory(method) as never;\n }\n });\n\n afterEach(() => {\n for (const method of backup) {\n console[method] = (console as any)[`__ngMocksBackup_${method}`].pop();\n }\n backup.splice(0, backup.length);\n });\n };\n","import helperMockService from '../mock-service/helper.mock-service';\n\nimport mockHelperConsole from './mock-helper.console';\n\nconst factory = (propName: string) => helperMockService.mockFunction(`console.${propName}`);\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default mockHelperConsole(['log'], factory);\n","import coreDefineProperty from '../common/core.define-property';\n\nimport mockHelperConsole from './mock-helper.console';\n\nconst factory =\n (propName: string) =>\n (...args: any[]) => {\n const error = new Error(args.join(' '));\n coreDefineProperty(error, 'ngMocksConsoleCatch', propName);\n throw error;\n };\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default mockHelperConsole(['warn', 'error'], factory);\n","import { Injector } from '@angular/core';\n\nimport { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default <T>(\n def: AnyDeclaration<T> | string | Array<AnyDeclaration<T> | string>,\n callback?: (instance: undefined | T, injector: Injector) => void | Partial<T>,\n): void => {\n const map = ngMocksUniverse.getOverrides();\n for (const item of flatten(def)) {\n if (callback) {\n const set: Set<any> = map.has(item) ? map.get(item) : new Set();\n set.add(callback);\n map.set(item, set);\n } else {\n map.delete(item);\n }\n }\n};\n","import { TestBed, TestBedStatic, TestModuleMetadata } from '@angular/core/testing';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nconst hooks: {\n after: Array<(original: TestBedStatic['resetTestingModule']) => TestBedStatic['resetTestingModule']>;\n before: Array<(original: TestBedStatic['configureTestingModule']) => TestBedStatic['configureTestingModule']>;\n} = ngMocksUniverse.global.get('faster-hooks') || {\n after: [],\n before: [],\n};\nngMocksUniverse.global.set('faster-hooks', hooks);\n\nconst configureTestingModule =\n (original: TestBedStatic['configureTestingModule']): TestBedStatic['configureTestingModule'] =>\n (moduleDef: TestModuleMetadata) => {\n ngMocksUniverse.global.set('bullet:customized', true);\n\n let final = original;\n for (const callback of hooks.before) {\n final = callback(final);\n }\n\n return final.call(TestBed, moduleDef);\n };\n\nconst resetTestingModule =\n (original: TestBedStatic['resetTestingModule']): TestBedStatic['resetTestingModule'] =>\n () => {\n if (ngMocksUniverse.global.has('bullet')) {\n if (ngMocksUniverse.global.has('bullet:customized')) {\n ngMocksUniverse.global.set('bullet:reset', true);\n }\n\n return TestBed;\n }\n ngMocksUniverse.global.delete('bullet:customized');\n ngMocksUniverse.global.delete('bullet:reset');\n let final = original;\n for (const callback of hooks.after) {\n final = callback(final);\n }\n\n return final.call(TestBed);\n };\n\nexport default () => {\n if (!(TestBed as any).ngMocksFasterInstalled) {\n TestBed.configureTestingModule = configureTestingModule(TestBed.configureTestingModule);\n TestBed.resetTestingModule = resetTestingModule(TestBed.resetTestingModule);\n coreDefineProperty(TestBed, 'ngMocksFasterInstalled', true);\n }\n\n return hooks;\n};\n","import { getTestBed } from '@angular/core/testing';\n\nexport default (): void => {\n const testBed: any = getTestBed();\n testBed._instantiated = false;\n testBed._moduleFactory = undefined;\n testBed._testModuleRef = null;\n};\n","import { ComponentFixture, getTestBed, TestBed } from '@angular/core/testing';\n\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockHelperFasterInstall from './mock-helper.faster-install';\nimport mockHelperFlushTestBed from './mock-helper.flush-test-bed';\n\nconst resetFixtures = (id: never) => {\n const activeFixtures: Array<ComponentFixture<any> & { ngMocksStackId?: any }> =\n (getTestBed() as any)._activeFixtures || /* istanbul ignore next */ [];\n\n let active = 0;\n for (let i = activeFixtures.length - 1; i >= 0; i -= 1) {\n if (!activeFixtures[i].ngMocksStackId || activeFixtures[i].ngMocksStackId === id) {\n activeFixtures[i].ngMocksStackId = undefined;\n activeFixtures[i].destroy();\n activeFixtures.splice(i, 1);\n } else {\n active += 1;\n }\n }\n if (active === 0) {\n mockHelperFlushTestBed();\n }\n};\n\nconst idAdd = (id: any) => {\n const bulletStack: any[] = ngMocksUniverse.global.get('bullet:stack') ?? [];\n bulletStack.push(id);\n ngMocksUniverse.global.set('bullet:stack', bulletStack);\n ngMocksUniverse.global.set('bullet:stack:id', id);\n};\nconst idRemove = (id: any) => {\n const bulletStack: any[] = ngMocksUniverse.global.get('bullet:stack');\n bulletStack.splice(bulletStack.indexOf(id), 1);\n if (bulletStack.length > 0) {\n ngMocksUniverse.global.set('bullet:stack:id', bulletStack[bulletStack.length - 1]);\n } else {\n ngMocksUniverse.global.delete('bullet:stack:id');\n }\n\n resetFixtures(id as never);\n};\n\nexport default () => {\n mockHelperFasterInstall();\n\n const idAll = {};\n const idEach = {};\n\n beforeAll(() => {\n if (ngMocksUniverse.global.has('bullet:customized')) {\n TestBed.resetTestingModule();\n }\n ngMocksUniverse.global.set('bullet', true);\n idAdd(idAll);\n });\n\n beforeEach(() => {\n idAdd(idEach);\n });\n afterEach(() => {\n idRemove(idEach);\n });\n\n afterAll(() => {\n idRemove(idAll);\n ngMocksUniverse.global.delete('bullet');\n if (ngMocksUniverse.global.has('bullet:reset')) {\n TestBed.resetTestingModule();\n }\n });\n};\n","import { DebugElement } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\n\nimport { Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport { getSourceOfMock } from '../common/func.get-source-of-mock';\nimport { MockedDebugElement } from '../mock-render/types';\n\nimport nestedCheckParent from './crawl/nested-check-parent';\nimport mockHelperFind from './find/mock-helper.find';\nimport funcGetFromNode from './func.get-from-node';\nimport funcGetLastFixture from './func.get-last-fixture';\nimport funcParseFindArgsName from './func.parse-find-args-name';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nconst parseArgs = <T>(\n args: any[],\n): {\n el: MockedDebugElement | null | undefined;\n notFoundValue: any;\n sel: Type<T>;\n} => ({\n el: args[0],\n notFoundValue: args.length === 3 ? args[2] : defaultNotFoundValue,\n sel: args[1],\n});\n\nexport default <T>(...args: any[]) => {\n if (args.length === 1) {\n try {\n return TestBed.inject ? TestBed.inject(args[0]) : /* istanbul ignore next */ TestBed.get(args[0]);\n } catch {\n throw new Error(`Cannot find an instance via ngMocks.get(${funcParseFindArgsName(args[0])})`);\n }\n }\n\n const { el, sel, notFoundValue } = parseArgs<T>(args);\n const root: DebugElement | undefined = mockHelperFind(funcGetLastFixture(), el, undefined);\n const source = getSourceOfMock(sel);\n\n // Looking in the root.\n if (root) {\n const result = funcGetFromNode([], root, source);\n if (result.length > 0) {\n return result[0];\n }\n }\n\n // Looking for a related structural directive.\n if (root) {\n const parent = nestedCheckParent(root, undefined);\n if (parent && parent.nativeNode.nodeName === '#comment') {\n const result = funcGetFromNode([], parent, source);\n if (result.length > 0) {\n return result[0];\n }\n }\n }\n\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find ${funcGetName(sel)} instance via ngMocks.get`);\n};\n","import ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default () => {\n ngMocksUniverse.cacheDeclarations.clear();\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.clear();\n};\n","import { TestModuleMetadata } from '@angular/core/testing';\n\nimport { flatten, mapKeys, mapValues } from '../common/core.helpers';\nimport coreReflectModuleResolve from '../common/core.reflect.module-resolve';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockModule } from '../mock-module/mock-module';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport mockProvider from '../mock-service/mock-provider';\n\ntype Data = {\n declarations: any[];\n exclude: Set<any>;\n imports: any[];\n keep: Set<any>;\n mock: Set<any>;\n optional: Map<any, any>;\n providers: any[];\n skip: Set<any>;\n};\n\nconst skipDef = (def: any, skip: Set<any>, exclude: Set<any>): boolean => {\n if (skip.has(def)) {\n return true;\n }\n skip.add(def);\n\n return exclude.has(def);\n};\n\nconst createMetaHandler = (\n optional: Map<any, any>,\n proto: any,\n imports: any[],\n declarations: any[],\n providers: any[],\n): void => {\n const def = optional.get(proto) || proto;\n\n if (isNgDef(def, 'm')) {\n imports.push(def);\n } else if (isNgDef(def, 'c') || isNgDef(def, 'd')) {\n declarations.push(def);\n } else if (isNgDef(def, 'p')) {\n declarations.push(def);\n providers.push(def);\n } else if (!isNgInjectionToken(def)) {\n providers.push(def);\n }\n};\n\nconst createMeta = ({ keep, skip, optional, exclude, imports, declarations, providers }: Data): TestModuleMetadata => {\n for (const proto of keep) {\n if (skip.has(proto) || exclude.has(proto) || optional.has(proto)) {\n continue;\n }\n createMetaHandler(optional, proto, imports, declarations, providers);\n }\n\n return { declarations, imports, providers };\n};\n\nconst typeMap: Array<[any, string]> = [\n ['m', 'module'],\n ['c', 'component'],\n ['d', 'directive'],\n ['p', 'pipe'],\n];\n\nconst getType = (def: any, keep: Set<any>): string => {\n if (isNgModuleDefWithProviders(def)) {\n return 'module-with-providers';\n }\n for (const [flag, value] of typeMap) {\n if (isNgDef(def, flag)) {\n return flag === 'm' && keep.has(def) ? `${value}-keep` : value;\n }\n }\n\n return '';\n};\n\nconst handleModuleWithProviders = (data: Data, def: any): void => {\n if (data.skip.has(def.ngModule)) {\n return;\n }\n data.skip.add(def.ngModule);\n if (data.exclude.has(def.ngModule)) {\n return;\n }\n\n data.imports.push(data.keep.has(def.ngModule) ? def : MockModule(def));\n};\n\nconst handleDeclaration = (data: Data, def: any, callback: any, bucket: any[]): void => {\n if (skipDef(def, data.skip, data.exclude)) {\n return;\n }\n\n bucket.push(data.keep.has(def) ? def : callback(def));\n};\n\nconst handleDestructuring = (data: Data, def: any, callback: any): void => {\n if (skipDef(def, data.skip, data.exclude)) {\n return;\n }\n\n const meta = coreReflectModuleResolve(def);\n for (const toMock of flatten([meta.declarations, meta.imports])) {\n callback(data, toMock);\n }\n for (const toMock of meta.providers ? flatten(meta.providers) : []) {\n resolveProvider(data, toMock);\n }\n};\n\nconst resolveProvider = ({ skip, keep, providers, exclude }: Data, def: any): void => {\n const provider = funcGetProvider(def);\n skip.add(provider);\n if (exclude.has(provider)) {\n return;\n }\n\n const providerDef = keep.has(provider) ? def : mockProvider(def);\n if (providerDef) {\n providers.push(providerDef);\n }\n};\n\nconst resolveMap: Record<string, any> = {\n component: MockComponent,\n directive: MockDirective,\n pipe: MockPipe,\n};\n\nconst resolveHandler = (data: Data, type: string, def: any, skipDestruction: boolean): void => {\n if (type === 'module-with-providers') {\n handleModuleWithProviders(data, def);\n } else if (type === 'module-keep') {\n handleDeclaration(data, def, MockModule, data.imports); // MockModule will not be called because the def is kept.\n } else if (type === 'module' && skipDestruction) {\n handleDeclaration(data, def, MockModule, data.imports);\n } else if (type === 'module') {\n handleDestructuring(data, def, resolve);\n } else if (resolveMap[type]) {\n handleDeclaration(data, def, resolveMap[type], data.declarations);\n } else {\n resolveProvider(data, def);\n }\n};\n\nconst resolve = (data: Data, proto: any, skipDestruction = true): void => {\n if (!proto) {\n return;\n }\n\n const type = getType(proto, data.keep);\n let def: any;\n\n // an attempt to replace declarations.\n if (type !== 'module-with-providers') {\n const value = data.optional.get(proto);\n if (value && value !== proto) {\n def = value;\n data.keep.add(def);\n }\n }\n if (!def) {\n def = proto;\n }\n\n resolveHandler(data, type, def, skipDestruction);\n};\n\nconst generateDataWithUniverse = (keep: Set<any>, mock: Set<any>, exclude: Set<any>, optional: Map<any, any>): void => {\n for (const k of mapKeys(ngMocksUniverse.getDefaults())) {\n const v = ngMocksUniverse.getBuildDeclaration(k);\n if (keep.has(k) || mock.has(k) || exclude.has(k)) {\n continue;\n }\n optional.set(k, v);\n\n if (v === null) {\n exclude.add(k);\n } else if (v === undefined) {\n mock.add(k);\n } else if (k === v) {\n keep.add(k);\n }\n }\n};\n\nconst generateData = (protoKeep: any, protoMock: any, protoExclude: any): Data => {\n const keep = new Set(flatten(protoKeep || []));\n const mock = new Set(flatten(protoMock || []));\n const exclude = new Set(flatten(protoExclude || []));\n const optional = new Map();\n generateDataWithUniverse(keep, mock, exclude, optional);\n\n return {\n declarations: [],\n exclude,\n imports: [],\n keep,\n mock,\n optional,\n providers: [],\n skip: new Set(),\n };\n};\n\nexport default (keep: any, mock: any = null, exclude: any = null): TestModuleMetadata => {\n const data: Data = generateData(keep, mock, exclude);\n\n const resolutions = new Map();\n ngMocksUniverse.config.set('ngMocksDepsResolution', resolutions);\n for (const mockDef of mapValues(data.keep)) {\n resolutions.set(mockDef, 'keep');\n }\n for (const mockDef of mapValues(data.exclude)) {\n resolutions.set(mockDef, 'exclude');\n }\n\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n for (const def of mapValues(data.mock)) {\n resolutions.set(def, 'mock');\n if (data.optional.has(def)) {\n continue;\n }\n resolve(data, def, false);\n }\n const meta = createMeta(data);\n ngMocksUniverse.config.delete('mockNgDefResolver');\n ngMocksUniverse.config.delete('ngMocksDepsResolution');\n\n return meta;\n};\n","import { MockedDebugElement } from '../mock-render/types';\n\nimport mockHelperFind from './find/mock-helper.find';\nimport funcGetLastFixture from './func.get-last-fixture';\nimport funcParseProviderTokensDirectives from './func.parse-provider-tokens-directives';\nimport mockHelperGet from './mock-helper.get';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nconst parseArgs = (args: any[]): [MockedDebugElement | null | undefined, string, any] => [\n args[0],\n args[1],\n args.length === 3 ? args[2] : defaultNotFoundValue,\n];\n\nconst attrMatches = (attribute: string, selector: string): string | undefined => {\n const [prop, alias = ''] = attribute.split(':', 2).map(v => v.trim());\n\n if ((!alias && prop === selector) || (!!alias && alias === selector)) {\n return prop;\n }\n\n return undefined;\n};\n\nconst detectAttribute = (el: MockedDebugElement | null | undefined, attr: 'inputs' | 'outputs', sel: string) => {\n for (const token of el?.providerTokens || []) {\n const meta = funcParseProviderTokensDirectives(el, token);\n if (!meta) {\n continue;\n }\n\n for (const attrDef of meta[attr] || /* istanbul ignore next */ []) {\n const prop = attrMatches(attrDef, sel);\n if (prop) {\n return mockHelperGet(el, token)[prop];\n }\n }\n }\n\n throw new Error('Not found');\n};\n\nexport default (label: string, attr: 'inputs' | 'outputs', ...args: any[]) => {\n const [el, sel, notFoundValue] = parseArgs(args);\n\n try {\n return detectAttribute(mockHelperFind(funcGetLastFixture(), el, undefined), attr, sel);\n } catch {\n // nothing to do\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find ${sel} ${label} via ngMocks.${label}`);\n};\n","import { QueryList, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport funcIsMock from '../../common/func.is-mock';\nimport { MockConfig } from '../../common/mock';\n\nconst getValVcr = (entryPoint: MockConfig): Array<[any, ViewContainerRef]> => {\n const result: Array<[any, ViewContainerRef]> = [];\n\n for (const key of entryPoint.__ngMocksConfig.queryScanKeys || /* istanbul ignore next */ []) {\n const value = (entryPoint as any)[key];\n const vcr = (entryPoint as any)[`__ngMocksVcr_${key}`];\n\n const scanValue = value instanceof QueryList ? value.toArray() : [value];\n const scanVcr = vcr instanceof QueryList ? vcr.toArray() : [vcr];\n\n for (let index = 0; index < scanValue.length; index += 1) {\n result.push([scanValue[index], scanVcr[index]]);\n }\n }\n\n return result;\n};\n\nconst handleDirective = (\n entryPoint: {\n __template?: TemplateRef<any>;\n __vcr?: ViewContainerRef;\n },\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n callback: (vcr: ViewContainerRef, tpl: TemplateRef<any>) => boolean,\n): boolean => {\n return (\n !!entryPoint.__template &&\n !!entryPoint.__vcr &&\n isExpectedTemplate(entryPoint.__template) &&\n callback(entryPoint.__vcr, entryPoint.__template)\n );\n};\n\nconst isRightTemplate = (\n localVcr: ViewContainerRef | undefined,\n localValue: any,\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n): boolean => {\n return !!localVcr && localValue instanceof TemplateRef && isExpectedTemplate(localValue);\n};\n\nconst findDeep = (\n entryPoint: object,\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n callback: (vcr: ViewContainerRef, tpl: TemplateRef<any>) => boolean,\n): boolean => {\n if (!funcIsMock(entryPoint)) {\n throw new Error('Only instances of mock declarations are accepted');\n }\n\n // structural directive\n if (handleDirective(entryPoint, isExpectedTemplate, callback)) {\n return true;\n }\n\n for (const [localValue, localVcr] of getValVcr(entryPoint)) {\n if (funcIsMock(localValue) && findDeep(localValue, isExpectedTemplate, callback)) {\n return true;\n }\n if (isRightTemplate(localVcr, localValue, isExpectedTemplate)) {\n return callback(localVcr, localValue);\n }\n }\n\n return false;\n};\n\nexport default ((): typeof findDeep => findDeep)();\n","import { TemplateRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\nimport funcIsMock from '../../common/func.is-mock';\n\nexport default (param: any): TemplateRef<any> => {\n if (param instanceof TemplateRef) {\n return param;\n }\n if (funcIsMock(param) && param.__template) {\n return param.__template;\n }\n\n const injector = param?.nativeNode && param.injector;\n if (injector) {\n const template = coreInjector(TemplateRef, injector);\n\n if (template) {\n return template;\n }\n }\n\n const error = new Error(\n 'Unknown template has been passed, only TemplateRef or a mock structural directive are supported',\n );\n (error as any).param = param;\n\n throw error;\n};\n","import { Type } from '../../common/core.types';\nimport crawlByAttribute from '../crawl/crawl-by-attribute';\nimport crawlByAttributeValue from '../crawl/crawl-by-attribute-value';\nimport crawlByDeclaration from '../crawl/crawl-by-declaration';\nimport crawlById from '../crawl/crawl-by-id';\n\nexport default (selector: string | Type<any> | [string] | [string, any] | any) => {\n if (typeof selector === 'string') {\n return crawlById(selector);\n }\n if (Array.isArray(selector) && selector.length === 1 && typeof selector[0] === 'string') {\n return crawlByAttribute(selector[0]);\n }\n if (Array.isArray(selector) && selector.length === 2 && typeof selector[0] === 'string') {\n return crawlByAttributeValue(selector[0], selector[1]);\n }\n if (typeof selector === 'function') {\n return crawlByDeclaration(selector);\n }\n\n throw new Error('Unknown selector');\n};\n","import { TemplateRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\nimport { MockedDebugNode } from '../../mock-render/types';\nimport detectTextNode from '../crawl/detect-text-node';\n\nexport default (\n result: Array<TemplateRef<any>>,\n detector: (node: MockedDebugNode) => boolean,\n limit = 0,\n ): ((node: MockedDebugNode) => boolean) =>\n node => {\n try {\n const instance = !detectTextNode(node) && detector(node) ? coreInjector(TemplateRef, node.injector) : undefined;\n if (instance) {\n result.push(instance);\n }\n } catch {\n // nothing to do\n }\n\n return !!limit && result.length === limit;\n };\n","export default (value: any): boolean => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n if (typeof value === 'function') {\n return true;\n }\n\n return false;\n};\n","import { TemplateRef } from '@angular/core';\n\nimport nestedCheck from '../crawl/nested-check';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport detectCrawler from './detect-crawler';\nimport detectTemplateRef from './detect-template-ref';\nimport funcIsValidTemplateRefSelector from './func.is-valid-template-ref-selector';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]) => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidTemplateRefSelector, defaultNotFoundValue);\n\n const result: Array<TemplateRef<any>> = [];\n const detector = detectCrawler(sel);\n nestedCheck(mockHelperFind(funcGetLastFixture(), el, undefined), undefined, detectTemplateRef(result, detector, 1));\n if (result.length > 0) {\n return result[0];\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n\n throw new Error(`Cannot find a TemplateRef via ngMocks.findTemplateRef(${funcParseFindArgsName(sel)})`);\n};\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockHelperCrawl from './crawl/mock-helper.crawl';\nimport mockHelperReveal from './crawl/mock-helper.reveal';\nimport mockHelperRevealAll from './crawl/mock-helper.reveal-all';\nimport mockHelperChange from './cva/mock-helper.change';\nimport mockHelperTouch from './cva/mock-helper.touch';\nimport mockHelperClick from './events/mock-helper.click';\nimport mockHelperEvent from './events/mock-helper.event';\nimport mockHelperTrigger from './events/mock-helper.trigger';\nimport mockHelperFindInstance from './find-instance/mock-helper.find-instance';\nimport mockHelperFindInstances from './find-instance/mock-helper.find-instances';\nimport mockHelperFind from './find/mock-helper.find';\nimport mockHelperFindAll from './find/mock-helper.find-all';\nimport mockHelperFormatHtml from './format/mock-helper.format-html';\nimport mockHelperFormatText from './format/mock-helper.format-text';\nimport mockHelperAutoSpy from './mock-helper.auto-spy';\nimport mockHelperConsoleIgnore from './mock-helper.console-ignore';\nimport mockHelperConsoleThrow from './mock-helper.console-throw';\nimport mockHelperDefaultConfig from './mock-helper.default-config';\nimport mockHelperDefaultMock from './mock-helper.default-mock';\nimport mockHelperFaster from './mock-helper.faster';\nimport mockHelperFlushTestBed from './mock-helper.flush-test-bed';\nimport mockHelperGet from './mock-helper.get';\nimport mockHelperGlobalExclude from './mock-helper.global-exclude';\nimport mockHelperGlobalKeep from './mock-helper.global-keep';\nimport mockHelperGlobalMock from './mock-helper.global-mock';\nimport mockHelperGlobalReplace from './mock-helper.global-replace';\nimport mockHelperGlobalWipe from './mock-helper.global-wipe';\nimport mockHelperGuts from './mock-helper.guts';\nimport mockHelperInput from './mock-helper.input';\nimport mockHelperOutput from './mock-helper.output';\nimport mockHelperReset from './mock-helper.reset';\nimport mockHelperStub from './mock-helper.stub';\nimport mockHelperStubMember from './mock-helper.stub-member';\nimport mockHelperHide from './render/mock-helper.hide';\nimport mockHelperRender from './render/mock-helper.render';\nimport mockHelperFindTemplateRef from './template-ref/mock-helper.find-template-ref';\nimport mockHelperFindTemplateRefs from './template-ref/mock-helper.find-template-refs';\n\nconst flagNames = ['onMockBuilderMissingDependency', 'onMockInstanceRestoreNeed', 'onTestBedFlushNeed'] as const;\n\nexport default {\n autoSpy: mockHelperAutoSpy,\n change: mockHelperChange,\n click: mockHelperClick,\n config: (config: {\n mockRenderCacheSize?: number | null;\n onMockBuilderMissingDependency?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onMockInstanceRestoreNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onTestBedFlushNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n }) => {\n const flags = ngMocksUniverse.global.get('flags');\n for (const flag of flagNames) {\n if (config[flag] === null) {\n flags[flag] = coreConfig[flag];\n } else if (config[flag] !== undefined) {\n flags[flag] = config[flag];\n }\n }\n if (config.mockRenderCacheSize === null) {\n ngMocksUniverse.global.delete('mockRenderCacheSize');\n } else if (config.mockRenderCacheSize !== undefined) {\n ngMocksUniverse.global.set('mockRenderCacheSize', config.mockRenderCacheSize);\n }\n },\n crawl: mockHelperCrawl,\n defaultConfig: mockHelperDefaultConfig,\n defaultMock: mockHelperDefaultMock,\n event: mockHelperEvent,\n faster: mockHelperFaster,\n find: mockHelperFind,\n findAll: mockHelperFindAll,\n findInstance: mockHelperFindInstance,\n findInstances: mockHelperFindInstances,\n findTemplateRef: mockHelperFindTemplateRef,\n findTemplateRefs: mockHelperFindTemplateRefs,\n flushTestBed: mockHelperFlushTestBed,\n formatHtml: mockHelperFormatHtml,\n formatText: mockHelperFormatText,\n get: mockHelperGet,\n globalExclude: mockHelperGlobalExclude,\n globalKeep: mockHelperGlobalKeep,\n globalMock: mockHelperGlobalMock,\n globalReplace: mockHelperGlobalReplace,\n globalWipe: mockHelperGlobalWipe,\n guts: mockHelperGuts,\n hide: mockHelperHide,\n ignoreOnConsole: mockHelperConsoleIgnore,\n input: mockHelperInput,\n output: mockHelperOutput,\n render: mockHelperRender,\n reset: mockHelperReset,\n reveal: mockHelperReveal,\n revealAll: mockHelperRevealAll,\n stub: mockHelperStub,\n stubMember: mockHelperStubMember,\n throwOnConsole: mockHelperConsoleThrow,\n touch: mockHelperTouch,\n trigger: mockHelperTrigger,\n};\n","import { DebugNodeSelector } from '../../common/core.types';\n\nimport mockHelperTrigger from './mock-helper.trigger';\n\nexport default (selector: DebugNodeSelector, payload?: object) => {\n mockHelperTrigger(selector, 'click', payload);\n};\n","import { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { IMockBuilderConfig } from '../mock-builder/types';\n\nexport default <T>(\n def: AnyDeclaration<T> | string | Array<AnyDeclaration<T> | string>,\n config?: IMockBuilderConfig,\n): void => {\n const map = ngMocksUniverse.getConfigMock();\n for (const item of flatten(def)) {\n if (config) {\n map.set(item, config);\n } else {\n map.delete(item);\n }\n }\n};\n","import { getInjection } from '../../common/core.helpers';\nimport { Type } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport mockHelperCrawl from '../crawl/mock-helper.crawl';\nimport mockHelperFindAll from '../find/mock-helper.find-all';\nimport funcGetFromNode from '../func.get-from-node';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport funcIsValidFindInstanceSelector from './func.is-valid-find-instance-selector';\n\nexport default <T>(...args: any[]): T[] => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidFindInstanceSelector);\n if (typeof sel !== 'function' && !isNgDef(sel, 't') && typeof sel !== 'string') {\n throw new Error('Only classes or tokens are accepted');\n }\n\n const declaration: Type<T> = getSourceOfMock(sel);\n const result: T[] = [];\n const scanned: any[] = [];\n const fixture = funcGetLastFixture();\n if (fixture) {\n const elements = mockHelperFindAll(fixture, el, undefined);\n for (const element of elements) {\n mockHelperCrawl(\n element,\n (node, parent) => {\n if (scanned.indexOf(node) === -1) {\n funcGetFromNode(result, node, declaration);\n scanned.push(node);\n }\n if (parent && parent.nativeNode.nodeName === '#comment' && scanned.indexOf(parent) === -1) {\n funcGetFromNode(result, parent, declaration);\n scanned.push(parent);\n }\n },\n true,\n );\n }\n } else {\n try {\n result.push(getInjection(declaration));\n } catch {\n // nothing to do\n }\n }\n\n return result;\n};\n","import { TemplateRef } from '@angular/core';\n\nimport nestedCheck from '../crawl/nested-check';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport detectCrawler from './detect-crawler';\nimport detectTemplateRef from './detect-template-ref';\nimport funcIsValidTemplateRefSelector from './func.is-valid-template-ref-selector';\n\nexport default (...args: any[]): Array<TemplateRef<any>> => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidTemplateRefSelector);\n\n const result: Array<TemplateRef<any>> = [];\n const detector = detectCrawler(sel);\n nestedCheck(mockHelperFind(funcGetLastFixture(), el, undefined), undefined, detectTemplateRef(result, detector));\n\n return result;\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['exclude']);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['keep']);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['mock']);\n};\n","import { AnyType } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyType<any>, destination: AnyType<any>): void => {\n let fail = true;\n if (isNgDef(source, 'm') && isNgDef(destination, 'm')) {\n fail = false;\n } else if (isNgDef(source, 'c') && isNgDef(destination, 'c')) {\n fail = false;\n } else if (isNgDef(source, 'd') && isNgDef(destination, 'd')) {\n fail = false;\n } else if (isNgDef(source, 'p') && isNgDef(destination, 'p')) {\n fail = false;\n }\n\n if (fail) {\n throw new Error('Cannot replace the declaration, both have to be a Module, a Component, a Directive or a Pipe');\n }\n\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['replace', destination]);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\nimport mockHelperDefaultMock from './mock-helper.default-mock';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().delete(source);\n mockHelperDefaultMock(source);\n};\n","import funcFindDeep from './func.find-deep';\nimport funcParseTemplate from './func.parse-template';\n\nexport default (instance: object, param?: object) => {\n const template = param ? funcParseTemplate(param) : undefined;\n\n let result = false;\n funcFindDeep(\n instance,\n tpl => {\n if (!template) {\n return true;\n }\n\n return tpl.elementRef.nativeElement === template.elementRef.nativeElement;\n },\n vcr => {\n vcr.clear();\n result = true;\n\n return false;\n },\n );\n\n if (!result) {\n throw new Error('Cannot find path to the TemplateRef');\n }\n};\n","import mockHelperAttributes from './mock-helper.attributes';\n\nexport default (...args: any[]) => mockHelperAttributes('input', 'inputs', ...args);\n","import mockHelperAttributes from './mock-helper.attributes';\n\nexport default (...args: any[]) => mockHelperAttributes('output', 'outputs', ...args);\n","import funcFindDeep from './func.find-deep';\nimport funcParseTemplate from './func.parse-template';\n\nexport default (instance: object, param: object, $implicit?: any, variables?: Record<keyof any, any>) => {\n const template = funcParseTemplate(param);\n\n const result = funcFindDeep(\n instance,\n tpl => tpl.elementRef.nativeElement === template.elementRef.nativeElement,\n (vcr, tpl) => {\n const context = {\n ...variables,\n $implicit,\n };\n vcr.clear();\n vcr.createEmbeddedView(tpl, context).detectChanges();\n\n return true;\n },\n );\n\n if (!result) {\n throw new Error('Cannot find path to the TemplateRef');\n }\n};\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (): void => {\n ngMocksUniverse.builtDeclarations = new Map();\n ngMocksUniverse.builtProviders = new Map();\n ngMocksUniverse.cacheDeclarations = new Map();\n ngMocksUniverse.cacheProviders = new Map();\n ngMocksUniverse.config = new Map();\n ngMocksUniverse.configInstance = new Map();\n ngMocksUniverse.flags = new Set(coreConfig.flags);\n ngMocksUniverse.touches = new Set();\n};\n","import mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport detectCrawler from './detect-crawler';\nimport detectTextNode from './detect-text-node';\nimport funcIsValidRevealSelector from './func.is-valid-reveal-selector';\nimport mockHelperCrawl from './mock-helper.crawl';\n\nexport default (...args: any[]): any[] => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidRevealSelector);\n const root = mockHelperFind(funcGetLastFixture(), el, undefined);\n\n const detector = detectCrawler(sel);\n\n const result: any[] = [];\n mockHelperCrawl(root, node => {\n if (node !== root && !detectTextNode(node) && detector(node)) {\n result.push(node);\n }\n });\n\n return result;\n};\n","/* eslint-disable max-lines */\n\nimport { DebugNode, EventEmitter, InjectionToken, Injector, Provider, TemplateRef } from '@angular/core';\nimport { ComponentFixture, TestModuleMetadata } from '@angular/core/testing';\n\nimport { AnyDeclaration, AnyType, DebugNodeSelector, Type } from '../common/core.types';\nimport { NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { IMockBuilderConfig } from '../mock-builder/types';\nimport { MockedDebugElement, MockedDebugNode } from '../mock-render/types';\nimport { CustomMockFunction, MockedFunction } from '../mock-service/types';\n\nimport { FORMAT_SET, FORMAT_SINGLE } from './format/types';\nimport mockHelperObject from './mock-helper.object';\n\n/**\n * ngMocks provides a lot of tools to simply testing.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks\n */\nexport const ngMocks: {\n /**\n * ngMocks.autoSpy installs proper spies instead of empty functions.\n *\n * @see https://ng-mocks.sudo.eu/extra/auto-spy\n */\n autoSpy(type: 'jasmine' | 'jest' | 'default' | 'reset'): void;\n\n /**\n * ngMocks.autoSpy installs proper spies instead of empty functions.\n *\n * @see https://ng-mocks.sudo.eu/extra/auto-spy\n */\n autoSpy(type: CustomMockFunction): void;\n\n /**\n * ngMocks.defaultConfig sets the default config of declarations for MockBuilder.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultConfig\n */\n defaultConfig<T>(token: string | AnyDeclaration<T>, config?: IMockBuilderConfig): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T>(\n token: InjectionToken<T>,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock string tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T = any>(\n token: string,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock declarations.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T>(\n def: AnyType<T>,\n handler?: (value: T, injector: Injector) => void | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock declarations and tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T = any>(\n defs: Array<AnyDeclaration<T>>,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.globalExclude configures which declarations, providers and tokens\n * should be excluded from mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalExclude\n *\n * ```ts\n * ngMocks.globalExclude(TranslationModule);\n * ```\n */\n globalExclude(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalKeep configures which declarations, providers and tokens\n * should not be mocked and will stay as they are in mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalKeep\n *\n * ```ts\n * ngMocks.globalKeep(TranslationModule);\n * ```\n */\n globalKeep(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalMock configures which declarations, providers and tokens\n * should be mocked in kept declarations.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalMock\n *\n * ```ts\n * ngMocks.globalMock(TranslationModule);\n * ```\n */\n globalMock(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalReplace configures which declarations, providers and tokens\n * should be substituted in mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalReplace\n *\n * ```ts\n * ngMocks.globalReplace(BrowserAnimationsModule, NoopAnimationsModule);\n * ```\n */\n globalReplace(source: AnyType<any>, destination: AnyType<any>): void;\n\n /**\n * ngMocks.globalWipe resets all customizations of ngMocks.global* and mgMocks.default* functions.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalWipe\n *\n * ```ts\n * ngMocks.globalWipe(TranslationModule);\n * ngMocks.globalWipe(BrowserAnimationsModule);\n * ```\n */\n globalWipe(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.change triggers ControlValueAccessor update.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n */\n change(elSelector: DebugNodeSelector, value: any, methodName?: string): void;\n\n /**\n * ngMocks.touch triggers ControlValueAccessor touch.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\n touch(elSelector: DebugNode | DebugNodeSelector, methodName?: string): void;\n\n /**\n * ngMocks.click properly simulates a click on an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/click\n */\n click(elSelector: HTMLElement | DebugNodeSelector, payload?: Partial<MouseEvent>): void;\n\n /**\n * ngMocks.trigger lets trigger custom events on DebugElements.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/trigger\n *\n * ```ts\n * ngMocks.trigger(el, new CustomEvent('my-event'));\n * ```\n */\n trigger(elSelector: DebugNodeSelector, event: Event): void;\n\n /**\n * ngMocks.trigger lets trigger custom events on DebugElements.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/trigger\n *\n * ```ts\n * ngMocks.trigger(el, 'click');\n * ngMocks.trigger(el, 'keydown.control.shift.z');\n * ```\n */\n trigger(\n elSelector: HTMLElement | DebugNodeSelector,\n event: string,\n payload?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent>,\n ): void;\n\n /**\n * ngMocks.event builds correct event objects.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/event\n */\n event(\n event: string,\n init?: EventInit,\n overrides?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n ): Event;\n\n /**\n * ngMocks.render renders a templateRef or DebugElement.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/render\n *\n * ```ts\n * ngMocks.header(component, headerEl);\n * ```\n */\n render(\n instance: object,\n template: TemplateRef<any> | DebugNode,\n $implicit?: any,\n variables?: Record<keyof any, any>,\n ): void;\n\n /**\n * ngMocks.render renders a structural directive.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/render\n *\n * ```ts\n * ngMocks.render(component, directiveInstance);\n * ```\n */\n render(instance: object, directive: object, $implicit?: any, variables?: Record<keyof any, any>): void;\n\n /**\n * ngMocks.hide hides a rendered templateRef or DebugElement.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/hide\n *\n * ```ts\n * ngMocks.hide(component, headerEl);\n * ```\n */\n hide(instance: object, tpl?: TemplateRef<any> | DebugNode): void;\n\n /**\n * ngMocks.hide hides a rendered structural directive.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/hide\n *\n * ```ts\n * ngMocks.hide(component, directiveInstance);\n * ```\n */\n hide(instance: object, directive: object): void;\n\n /**\n * ngMocks.input allows to get an input value without knowing\n * which component / directive it belongs to.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/input\n *\n * ```ts\n * const input = ngMocks.input('app-component', 'version');\n * ```\n */\n input<T = any>(elSelector: DebugNodeSelector, input: string): T;\n\n /**\n * ngMocks.input allows to get an input value without knowing\n * which component / directive it belongs to, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/input\n *\n * ```ts\n * const input = ngMocks.input('app-component', 'version', undefined);\n * ```\n */\n input<T = any, D = undefined>(elSelector: DebugNodeSelector, input: string, notFoundValue: D): D | T;\n\n /**\n * ngMocks.output allows to get an output emitter without knowing\n * which component / directive it belongs to.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/output\n *\n * ```ts\n * const outputEmitter = ngMocks.output('app-component', 'update');\n * ```\n */\n output<T = any>(elSelector: DebugNodeSelector, output: string): EventEmitter<T>;\n\n /**\n * ngMocks.output allows to get an output emitter without knowing\n * which component / directive it belongs to, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/output\n *\n * ```ts\n * const outputEmitter = ngMocks.output('app-component', 'update', undefined);\n * ```\n */\n output<T = any, D = undefined>(elSelector: DebugNodeSelector, output: string, notFoundValue: D): D | EventEmitter<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component,\n * and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(MyComponent);\n * ```\n */\n find<T>(component: Type<T>): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component\n * starting from an element, and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, MyComponent);\n * ```\n */\n find<T>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n ): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component,\n * and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(MyComponent, undefined);\n * ```\n */\n find<T, D>(component: Type<T>, notFoundValue: D): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component\n * starting from an element, and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture, MyComponent, undefined);\n * ```\n */\n find<T, D>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector,\n * and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find('.header');\n * const el = ngMocks.find('[data-key=5]');\n * const el = ngMocks.find(['data-key', 5]);\n * ```\n */\n find<T = any>(cssSelector: string | [string] | [string, string | number]): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector\n * starting from an element, and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, '.header');\n * const el = ngMocks.find(fixture, '[data-key=5]');\n * const el = ngMocks.find(debugElement, ['data-key', 5]);\n * ```\n */\n find<T = any>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n ): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector,\n * and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find('.header', undefined);\n * const el = ngMocks.find('[data-key=5]', null);\n * const el = ngMocks.find(['data-key', 5], null);\n * ```\n */\n find<T = any, D = undefined>(\n cssSelector: string | [string] | [string, string | number],\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector\n * starting from an element, and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, '.header', undefined);\n * const el = ngMocks.find(fixture, '[data-key=5]', null);\n * const el = ngMocks.find(debugElement, ['data-key', 5], null);\n * ```\n */\n find<T = any, D = undefined>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.findAll searches for all DebugElements of a particular component,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(MyComponent);\n * ```\n */\n findAll<T>(component: Type<T>): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements of a particular component\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(fixture.debugElement, MyComponent);\n * ```\n */\n findAll<T>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n ): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements based on css selector,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll('.header');\n * const all = ngMocks.findAll('[data-key=5]');\n * const all = ngMocks.findAll(['data-key', 5]);\n * ```\n */\n findAll<T = any>(cssSelector: string | [string] | [string, string | number]): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements based on css selector\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(fixture.debugElement, '.header');\n * const all = ngMocks.findAll(fixture, '[data-key=5]');\n * const all = ngMocks.findAll(debugElement, ['data-key', 5]);\n * ```\n */\n findAll<T = any>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n ): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(HeaderComponent);\n * ```\n */\n reveal<T>(selector: AnyType<T>): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('header', HeaderComponent);\n * ```\n */\n reveal<T>(elSelector: DebugNodeSelector, selector: AnyType<T>): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(['tpl', 'header']);\n * ```\n */\n reveal<T = any>(selector: string | [string] | [string, any]): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('header', ['tpl', 'header']);\n * ```\n */\n reveal<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n ): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template,\n * otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(HeaderComponent, undefined);\n * ```\n */\n reveal<T, D>(selector: AnyType<T>, notFoundValue: D): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('sidebar', HeaderComponent, undefined);\n * ```\n */\n reveal<T, D>(\n elSelector: DebugNodeSelector,\n selector: AnyType<T>,\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template,\n * otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(['tpl', 'header'], undefined);\n * ```\n */\n reveal<T = any, D = undefined>(\n selector: string | [string] | [string, any],\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('sidebar', ['tpl', 'header'], undefined);\n * ```\n */\n reveal<T = any, D = undefined>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.revealAll allows finding all DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll(HeaderComponent);\n * ```\n */\n revealAll<T>(selector: AnyType<T>): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll(['tpl', 'header']);\n * ```\n */\n revealAll<T = any>(selector: string | [string] | [string, any]): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll('sidebar', HeaderComponent);\n * ```\n */\n revealAll<T>(elSelector: DebugNodeSelector, selector: AnyType<T>): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll('sidebar', ['tpl', 'header']);\n * ```\n */\n revealAll<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n ): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.get tries to get an instance of declaration, provider or token\n * from the element which is matching a selector.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get('my-component', MyComponent);\n * const myDirective = ngMocks.get('my-component', MyDirective);\n * ```\n */\n get<T>(elSelector: DebugNodeSelector, provider: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.get tries to get an instance of declaration, provider or token\n * from the element which is matching a selector, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get('my-component', MyComponent, undefined);\n * const myDirective = ngMocks.get('my-component', MyDirective, null);\n * ```\n */\n get<T, D>(elSelector: DebugNodeSelector, provider: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.get tries to get an instance of provider or token for TestBed.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get(MyComponent);\n * const myDirective = ngMocks.get(MyDirective);\n * ```\n */\n get<T>(provider: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token,\n * and returns the first one.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(SidebarComponent);\n * const service = ngMocks.findInstance(AuthService);\n * const config = ngMocks.findInstance(APP_CONFIG);\n * ```\n */\n findInstance<T>(instanceClass: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token\n * starting from an element, and returns the first one.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(fixture, SidebarComponent);\n * const service = ngMocks.findInstance('header', AuthService);\n * const config = ngMocks.findInstance(debugElement, APP_CONFIG);\n * ```\n */\n findInstance<T>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token,\n * and returns the first one, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(SidebarComponent, undefined);\n * const service = ngMocks.findInstance(AuthService, null);\n * const config = ngMocks.findInstance(APP_CONFIG, false);\n */\n findInstance<T, D>(instanceClass: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token\n * starting from an element, and returns the first one, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(fixture, SidebarComponent, undefined);\n * const service = ngMocks.findInstance('header', AuthService, null);\n * const config = ngMocks.findInstance(debugElement, APP_CONFIG, false);\n * ```\n */\n findInstance<T, D>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.findInstances searches for all instances of declaration, provider or token,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstances\n *\n * ```ts\n * const components = ngMocks.findInstances(SidebarComponent);\n * const services = ngMocks.findInstances(AuthService);\n * const configs = ngMocks.findInstances(APP_CONFIG);\n * ```\n */\n findInstances<T>(instanceClass: AnyDeclaration<T>): T[];\n\n /**\n * ngMocks.findInstances searches for all instances of declaration, provider or token\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstances\n *\n * ```ts\n * const components = ngMocks.findInstances(fixture, SidebarComponent);\n * const services = ngMocks.findInstances('header', AuthService);\n * const configs = ngMocks.findInstances(debugElement, APP_CONFIG);\n * ```\n */\n findInstances<T>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>): T[];\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found, otherwise the notFoundValue.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef('sidebar', StructuralDirective, undefined);\n * ```\n */\n findTemplateRef<T = any, D = undefined>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n notFoundValue: D,\n ): D | TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef('sidebar', StructuralDirective);\n * ```\n */\n findTemplateRef<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n ): TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found, otherwise the notFoundValue.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef(['mat-row'], null);\n * ```\n */\n findTemplateRef<T = any, D = undefined>(\n selector: string | [string] | [string, any] | AnyType<any>,\n notFoundValue: D,\n ): D | TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef(['mat-row']);\n * ```\n */\n findTemplateRef<T = any>(selector: string | [string] | [string, any] | AnyType<any>): TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRefs searches for all TemplateRefs which is matching the selector\n * starting from an element, and returns an array of them.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRefs\n *\n * ```ts\n * const templateRefs = ngMocks.findTemplateRefs('header', StructuralDirective);\n * ```\n */\n findTemplateRefs<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n ): Array<TemplateRef<T>>;\n\n /**\n * ngMocks.findTemplateRefs searches for all TemplateRefs which is matching the selector,\n * and returns an array of them.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRefs\n *\n * ```ts\n * const templateRefs = ngMocks.findTemplateRefs(['mat-row']);\n * ```\n */\n findTemplateRefs<T = any>(selector: string | [string] | [string, any] | AnyType<any>): Array<TemplateRef<T>>;\n\n /**\n * ngMocks.crawl correctly crawls through Angular DOM with respect of TemplateRefs and ng-containers.\n * Usually, it's used internally.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/crawl\n */\n crawl(\n elSelector: DebugNodeSelector,\n callback: (\n node: MockedDebugNode | MockedDebugElement,\n parent?: MockedDebugNode | MockedDebugElement,\n ) => boolean | void,\n includeTextNodes?: boolean,\n ): void;\n\n /**\n * ngMocks.stub lets replace a method, getter or setter with a dummy callback.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stub\n *\n * ```ts\n * ngMocks.stub(instance, 'save'); // save is an empty callback now.\n * ngMocks.stub(instance, 'user', 'get'); // getter is an empty callback now.\n * ngMocks.stub(instance, 'user', 'set'); // setter is an empty callback now.\n * ```\n */\n stub<T = MockedFunction, I = any>(instance: I, name: keyof I, style?: 'get' | 'set'): T;\n\n /**\n * ngMocks.stub lets apply partial customizations to an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stub\n *\n * ```ts\n * ngMocks.stub(instance, {\n * save: () => undefined,\n * user: null,\n * });\n * ```\n */\n stub<I extends object>(instance: I, overrides: Partial<I>): I;\n\n /**\n * ngMocks.stubMember lets inject spies it to getters of properties of an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'user', jasmine.createSpy(), 'get')\n * .and.returnValue(null);\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends () => T[K]>(\n instance: T,\n name: K,\n stub: S,\n encapsulation: 'get',\n ): S;\n\n /**\n * ngMocks.stubMember lets inject spies it to setters of properties of an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'user', jasmine.createSpy(), 'set')\n * .and.throwError('setter is forbidden');\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends (value: T[K]) => void>(\n instance: T,\n name: K,\n stub: S,\n encapsulation: 'set',\n ): S;\n\n /**\n * ngMocks.stubMember lets inject spies it to an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'save', jasmine.createSpy());\n * ngMocks.stubMember(instance, 'user', null);\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends T[K]>(instance: T, name: K, stub: S): S;\n\n /**\n * ngMocks.guts provides a simple way to configure complex mocks.\n * Please check documentation.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/guts\n */\n guts(\n keep: AnyDeclaration<any> | Provider | Array<AnyDeclaration<any> | Provider> | null | undefined,\n mock?:\n | AnyDeclaration<any>\n | NgModuleWithProviders\n | Provider\n | Array<AnyDeclaration<any> | NgModuleWithProviders | Provider>\n | null\n | undefined,\n exclude?: AnyDeclaration<any> | Array<AnyDeclaration<any>> | null | undefined,\n ): TestModuleMetadata;\n\n /**\n * ngMocks.faster lets reuse the same TestBed between tests instead of resetting it.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/faster\n */\n faster(): void;\n\n /**\n * ignoreOnConsole suppresses any log calls, other methods can be suppressed too.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/ignoreOnConsole\n */\n ignoreOnConsole(...args: Array<keyof typeof console>): void;\n\n /**\n * Thanks Ivy, it does not throw an error, and we have to use injector.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/throwOnConsole\n */\n throwOnConsole(...args: Array<keyof typeof console>): void;\n\n /**\n * ngMocks.formatHtml normalizes html for a DebugElement, fixture or html string.\n * It removes redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatHtml\n *\n * ```ts\n * const html = ngMocks.formatHTML(fixture);\n * const html = ngMocks.formatHTML(debugElement);\n * const html = ngMocks.formatHTML('<div> </div>');\n * ```\n */\n formatHtml(html: FORMAT_SINGLE, outer?: boolean): string;\n\n /**\n * ngMocks.formatHtml normalizes html for an array of DebugElements, fixtures or html strings.\n * It removes redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatHtml\n *\n * const [html1, html2] = ngMocks.formatHTML([fixture1, fixture2]);\n * const htmlStrings = ngMocks.formatHTML(debugElements);\n */\n formatHtml(html: FORMAT_SET, outer?: boolean): string[];\n\n /**\n * ngMocks.formatText normalizes text for a DebugElement, fixture or html string.\n * It removes tags, redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatText\n *\n * ```ts\n * const txt = ngMocks.formatText(fixture);\n * const txt = ngMocks.formatText(debugElement);\n * const txt = ngMocks.formatText('<div> </div>');\n * ```\n */\n formatText(text: FORMAT_SINGLE, outer?: boolean): string;\n\n /**\n * ngMocks.formatText normalizes text for an array of DebugElements, fixtures or html strings.\n * It removes tags, redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatText\n *\n * const [txt1, txt2] = ngMocks.formatText([fixture1, fixture2]);\n * const txtStrings = ngMocks.formatText(debugElements);\n */\n formatText(text: FORMAT_SET, outer?: boolean): string[];\n\n /**\n * ngMocks.flushTestBed resets TestBed.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/flushTestBed\n */\n flushTestBed(): void;\n\n /**\n * ngMocks.reset resets cache of ng-mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reset\n */\n reset(): void;\n\n /**\n * ngMocks.config lets customize default behavior of error reporting.\n */\n config(config: {\n mockRenderCacheSize?: number | null;\n onMockBuilderMissingDependency?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onMockInstanceRestoreNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onTestBedFlushNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n }): void;\n} = mockHelperObject;\n","import {\n ClassProvider,\n ExistingProvider,\n FactoryProvider,\n InjectionToken,\n Provider,\n StaticClassProvider,\n ValueProvider,\n} from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\nimport funcImportExists from '../common/func.import-exists';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport helperUseFactory from '../mock-service/helper.use-factory';\nimport { MockService } from '../mock-service/mock-service';\n\nconst defaultValue = {};\n\n/**\n * MockProviders creates an array of mock providers out of passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: MockProviders(\n * Dep1Service,\n * Dep2Service,\n * ),\n * });\n * ```\n */\nexport function MockProviders(...providers: Array<AnyDeclaration<any>>): FactoryProvider[] {\n return providers.map((provider: any) => MockProvider(provider, defaultValue));\n}\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary service.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(Dep1Service),\n * MockProvider(Dep2Service, {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I extends object>(instance: AnyType<I>, overrides?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(APP_ID),\n * MockProvider(WEB_SOCKET, {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(provider: InjectionToken<I>, useValue?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary string token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider('web_socket', {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I = any>(provider: string, useValue?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider generates useValue based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useValue\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, {isLoggedIn: true}, 'useValue'),\n * MockProvider(APP_ROUTES, 5, 'useValue', true), // multi flag\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: ValueProvider['useValue'],\n style: 'useValue',\n multi?: ValueProvider['multi'],\n): ValueProvider;\n\n/**\n * MockProvider generates useExisting based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useExisting\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, MockAuthService, 'useExisting', true),\n * MockProvider(APP_ROUTES, MOCK_ROUTES, 'useExisting', true), // multi flag\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: ExistingProvider['useExisting'],\n style: 'useExisting',\n multi?: ExistingProvider['multi'],\n): ExistingProvider;\n\n/**\n * MockProvider generates useClass based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useClass\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, MockAuthService, 'useClass', [ctorDep1, ctorDep2]),\n * MockProvider(UserService, MockUserService, 'useClass', {\n * multi: true, // multi flag\n * deps: [ctorDep1, ctorDep2],\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: StaticClassProvider['useClass'],\n style: 'useClass',\n multiDeps?:\n | StaticClassProvider['multi']\n | StaticClassProvider['deps']\n | {\n multi?: StaticClassProvider['multi'];\n deps?: StaticClassProvider['deps'];\n },\n): ClassProvider;\n\n/**\n * MockProvider generates useFactory based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useFactory\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, (dep1, dep2) => {\n * // ...\n * }, 'useFactory', [ctorDep1, ctorDep2]),\n * MockProvider(UserService, (dep1, dep2) => {\n * // ...\n * }, 'useFactory', {\n * multi: true, // multi flag\n * deps: [ctorDep1, ctorDep2],\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: FactoryProvider['useFactory'],\n style: 'useFactory',\n multiDeps?:\n | FactoryProvider['multi']\n | FactoryProvider['deps']\n | {\n multi?: FactoryProvider['multi'];\n deps?: FactoryProvider['deps'];\n },\n): FactoryProvider;\n\nexport function MockProvider(\n provide: any,\n overrides: any = defaultValue,\n style?: 'useValue' | 'useExisting' | 'useClass' | 'useFactory',\n flags:\n | boolean\n | any[]\n | {\n deps?: any[];\n multi?: boolean;\n } = {},\n): Provider {\n funcImportExists(provide, 'MockProvider');\n\n const { deps, multi } =\n typeof flags === 'boolean'\n ? { deps: undefined, multi: flags }\n : Array.isArray(flags)\n ? {\n deps: flags,\n multi: undefined,\n }\n : flags;\n\n if (style) {\n return {\n provide,\n [style]: overrides,\n deps,\n multi,\n };\n }\n\n return helperUseFactory(\n provide,\n () => MockService(provide),\n value => {\n if (overrides === defaultValue) {\n return value;\n }\n if (!value) {\n return overrides;\n }\n\n return mockHelperStub(value, overrides);\n },\n );\n}\n","import coreReflectDirectiveResolve from './core.reflect.directive-resolve';\nimport coreReflectModuleResolve from './core.reflect.module-resolve';\nimport { isNgDef } from './func.is-ng-def';\n\nexport default (value: any): any => {\n if (isNgDef(value, 'c')) {\n return coreReflectDirectiveResolve(value);\n }\n if (isNgDef(value, 'd')) {\n return coreReflectDirectiveResolve(value);\n }\n if (isNgDef(value, 'm')) {\n return coreReflectModuleResolve(value);\n }\n\n return undefined;\n};\n","import { AnyType } from './core.types';\n\nexport default (declaration: any): undefined | AnyType<any> | string => {\n if (!declaration || (typeof declaration !== 'object' && typeof declaration !== 'function')) {\n return undefined;\n }\n\n return declaration.ɵprov?.providedIn ?? declaration.ngInjectableDef?.providedIn;\n};\n","import { ViewContainerRef } from '@angular/core';\nimport { getTestBed, MetadataOverride, TestBed, TestBedStatic, TestModuleMetadata } from '@angular/core/testing';\n\nimport funcExtractTokens from '../mock-builder/func.extract-tokens';\nimport getOverrideDef from '../mock-builder/promise/get-override-def';\nimport { ngMocks } from '../mock-helper/mock-helper';\nimport mockHelperFasterInstall from '../mock-helper/mock-helper.faster-install';\nimport { MockProvider } from '../mock-provider/mock-provider';\nimport helperCreateClone from '../mock-service/helper.create-clone';\n\nimport coreConfig from './core.config';\nimport coreDefineProperty from './core.define-property';\nimport { flatten, mapEntries, mapValues } from './core.helpers';\nimport coreInjector from './core.injector';\nimport coreReflectMeta from './core.reflect.meta';\nimport coreReflectModuleResolve from './core.reflect.module-resolve';\nimport coreReflectProvidedIn from './core.reflect.provided-in';\nimport { NG_MOCKS, NG_MOCKS_TOUCHES } from './core.tokens';\nimport { AnyType, dependencyKeys } from './core.types';\nimport funcGetProvider from './func.get-provider';\nimport { isNgDef } from './func.is-ng-def';\nimport { isNgModuleDefWithProviders } from './func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst applyOverride = (def: any, override: any) => {\n if (isNgDef(def, 'c')) {\n TestBed.overrideComponent(def, override);\n } else if (isNgDef(def, 'd')) {\n TestBed.overrideDirective(def, override);\n } else if (isNgDef(def, 'm')) {\n TestBed.overrideModule(def, override);\n }\n if (isNgDef(def, 't')) {\n TestBed.overrideProvider(def, override);\n } else if (isNgDef(def, 'i')) {\n TestBed.overrideProvider(def, override);\n }\n};\n\nconst applyOverrides = (overrides: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]>): void => {\n for (const [def, [override, original]] of mapEntries(overrides)) {\n (TestBed as any).ngMocksOverrides.set(def, {\n ...original,\n override,\n });\n applyOverride(def, override);\n }\n};\n\n// Thanks Ivy and its TestBed.override - it does not clean up leftovers.\nconst applyNgMocksOverrides = (testBed: TestBedStatic & { ngMocksOverrides?: Map<any, any> }): void => {\n if (testBed.ngMocksOverrides?.size) {\n ngMocks.flushTestBed();\n for (const [def, original] of mapEntries(testBed.ngMocksOverrides)) {\n applyOverride(def, original);\n }\n }\n testBed.ngMocksOverrides = undefined;\n};\n\nconst initTestBed = () => {\n if (!(TestBed as any).ngMocksSelectors) {\n coreDefineProperty(TestBed, 'ngMocksSelectors', new Map());\n }\n // istanbul ignore else\n if (!(TestBed as any).ngMocksOverrides) {\n coreDefineProperty(TestBed, 'ngMocksOverrides', new Map());\n }\n};\n\nconst generateTouches = (moduleDef: Partial<Record<dependencyKeys, any>>, touches: Set<any>): void => {\n for (const key of coreConfig.dependencies) {\n for (const item of moduleDef[key] ? flatten(moduleDef[key]) : []) {\n let def = funcGetProvider(item);\n if (isNgModuleDefWithProviders(def)) {\n generateTouches(def, touches);\n def = def.ngModule;\n }\n if (touches.has(def)) {\n continue;\n }\n touches.add(def);\n if (typeof def !== 'function') {\n continue;\n }\n\n if (!Object.prototype.hasOwnProperty.call(def, '__ngMocksTouches')) {\n const local = new Set<any>();\n const meta = coreReflectMeta(def);\n coreDefineProperty(def, '__ngMocksTouches', local, false);\n if (meta) {\n generateTouches(meta, local);\n }\n }\n\n mapValues(def.__ngMocksTouches, touches);\n }\n }\n};\n\nconst defineTouches = (testBed: TestBed, moduleDef: TestModuleMetadata, knownTouches?: Set<any>) => {\n let touches = knownTouches;\n\n if (!touches && ngMocksUniverse.getDefaults().size > 0) {\n touches = funcExtractTokens(\n (testBed as any)._providers || /* istanbul ignore next Ivy part */ (testBed as any)._compiler?.providers,\n ).touches;\n if (!touches) {\n touches = new Set();\n moduleDef.providers = moduleDef.providers || [];\n moduleDef.providers.push({ provide: NG_MOCKS_TOUCHES, useValue: touches });\n }\n generateTouches(moduleDef, touches);\n }\n\n return touches;\n};\n\nconst applyPlatformOverrideDef = (def: any) => {\n const ngModule = isNgModuleDefWithProviders(def) ? /* istanbul ignore next */ def.ngModule : def;\n if ((TestBed as any).ngMocksOverrides.has(ngModule)) {\n return;\n }\n\n const original = coreReflectModuleResolve(ngModule);\n const set = getOverrideDef(original);\n if (set) {\n (TestBed as any).ngMocksOverrides.set(ngModule, { set: original });\n TestBed.overrideModule(ngModule, { set });\n }\n};\n\nconst applyPlatformOverridesBasedOnProvidedIn = (provide: any, touches: Set<any>) => {\n const providedIn = coreReflectProvidedIn(provide);\n if (!providedIn) {\n return;\n }\n // knownTouches present from MockBuilder and we can rely on it,\n // otherwise we have to override the provider always.\n if (typeof providedIn !== 'string' && !touches.has(providedIn)) {\n return;\n }\n (TestBed as any).ngMocksOverrides.set(provide, {});\n TestBed.overrideProvider(provide, MockProvider(provide as never));\n};\n\nconst applyPlatformOverridesBasedOnDefaults = (touches: Set<any>) => {\n for (const [provide, [config]] of mapEntries(ngMocksUniverse.getDefaults())) {\n if (config !== 'mock') {\n continue;\n }\n if (!isNgDef(provide, 'i') && !isNgDef(provide, 't')) {\n continue;\n }\n if (touches.has(provide)) {\n continue;\n }\n if ((TestBed as any).ngMocksOverrides.has(provide)) {\n continue;\n }\n applyPlatformOverridesBasedOnProvidedIn(provide, touches);\n }\n};\n\nconst applyPlatformOverrides = (testBed: TestBed, touches: Set<any>) => {\n // istanbul ignore else\n if ((TestBed as any).ngMocksOverrides) {\n const backup = ngMocksUniverse.touches;\n ngMocksUniverse.touches = touches;\n for (const def of flatten(testBed.ngModule || /* istanbul ignore next */ [])) {\n applyPlatformOverrideDef(def);\n }\n applyPlatformOverridesBasedOnDefaults(touches);\n ngMocksUniverse.touches = backup;\n }\n};\n\nconst configureTestingModule =\n (original: TestBedStatic['configureTestingModule']): TestBedStatic['configureTestingModule'] =>\n (moduleDef: TestModuleMetadata) => {\n initTestBed();\n\n const testBed = getTestBed();\n\n const providers = funcExtractTokens(moduleDef.providers);\n const { mocks, overrides } = providers;\n // touches are important,\n // therefore we are trying to fetch them from the known providers.\n const touches = defineTouches(testBed, moduleDef, providers.touches);\n\n if (mocks) {\n ngMocks.flushTestBed();\n }\n\n // istanbul ignore else\n if (overrides) {\n applyOverrides(overrides);\n }\n // _testModuleRef exists only after the 1st call,\n // so we shouldn't override platform again.\n if (touches && !(testBed as any)._instantiated && !(testBed as any)._testModuleRef) {\n applyPlatformOverrides(testBed, touches);\n }\n\n return original.call(TestBed, moduleDef);\n };\n\nconst resetTestingModule =\n (original: TestBedStatic['resetTestingModule']): TestBedStatic['resetTestingModule'] =>\n () => {\n ngMocksUniverse.global.delete('builder:config');\n ngMocksUniverse.global.delete('builder:module');\n (TestBed as any).ngMocksSelectors = undefined;\n applyNgMocksOverrides(TestBed);\n\n return original.call(TestBed);\n };\n\nconst viewContainerInstall = () => {\n const vcr: any = ViewContainerRef;\n\n // istanbul ignore else\n if (!vcr.ngMocksOverridesInstalled) {\n const ngElementId = vcr.__NG_ELEMENT_ID__;\n\n // istanbul ignore else\n if (ngElementId) {\n coreDefineProperty(\n vcr,\n '__NG_ELEMENT_ID__',\n helperCreateClone(ngElementId, undefined, undefined, (...ngElementIdArgs: any[]) => {\n const vcrInstance = ngElementId.apply(ngElementId, ngElementIdArgs);\n\n const createComponent = vcrInstance.createComponent;\n coreDefineProperty(\n vcrInstance,\n 'createComponent',\n helperCreateClone(\n createComponent,\n undefined,\n undefined,\n (component: any, ...createComponentArgs: any[]) => {\n const map = coreInjector(NG_MOCKS, vcrInstance.injector);\n\n return createComponent.apply(vcrInstance, [\n map?.get(component) ?? component,\n ...createComponentArgs,\n ] as any);\n },\n ),\n true,\n );\n\n return vcrInstance;\n }),\n true,\n );\n }\n\n coreDefineProperty(ViewContainerRef, 'ngMocksOverridesInstalled', true);\n }\n};\n\nconst install = () => {\n // istanbul ignore else\n if (!(TestBed as any).ngMocksOverridesInstalled) {\n const hooks = mockHelperFasterInstall();\n viewContainerInstall();\n\n // istanbul ignore else\n if (hooks.before.indexOf(configureTestingModule) === -1) {\n hooks.before.push(configureTestingModule);\n }\n // istanbul ignore else\n if (hooks.after.indexOf(resetTestingModule) === -1) {\n hooks.after.push(resetTestingModule);\n }\n\n coreDefineProperty(TestBed, 'ngMocksOverridesInstalled', true);\n }\n};\n\ninstall();\n","import { PipeTransform } from '@angular/core';\n\nimport { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { Type } from './core.types';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * Checks whether a declaration is the mock class of a module.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockModule, RealModule, 'm'); // returns true\n * isMockedNgDefOf(MockModule, ArbitraryModule, 'm'); // returns false\n * isMockedNgDefOf(MockModule, ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>, ngType: 'm'): declaration is Type<MockedModule<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockComponent, RealComponent, 'c'); // returns true\n * isMockedNgDefOf(MockComponent, ArbitraryComponent, 'c'); // returns false\n * isMockedNgDefOf(MockComponent, ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(\n declaration: any,\n type: Type<T>,\n ngType: 'c',\n): declaration is Type<MockedComponent<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockDirective, RealDirective, 'd'); // returns true\n * isMockedNgDefOf(MockDirective, ArbitraryDirective, 'd'); // returns false\n * isMockedNgDefOf(MockDirective, ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(\n declaration: any,\n type: Type<T>,\n ngType: 'd',\n): declaration is Type<MockedDirective<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockPipe, RealPipe, 'p'); // returns true\n * isMockedNgDefOf(MockPipe, ArbitraryPipe, 'p'); // returns false\n * isMockedNgDefOf(MockPipe, ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T extends PipeTransform>(\n declaration: any,\n type: Type<T>,\n ngType: 'p',\n): declaration is Type<MockedPipe<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a thing.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockPipe, RealPipe); // returns true\n * isMockedNgDefOf(MockComponent, ArbitraryComponent); // returns false\n * isMockedNgDefOf(MockPipe, ArbitraryClass); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>): declaration is Type<T>;\n\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>, ngType?: any): declaration is Type<T> {\n return (\n typeof declaration === 'function' && declaration.mockOf === type && (ngType ? isNgDef(declaration, ngType) : true)\n );\n}\n","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport coreInjector from './core.injector';\nimport { NG_MOCKS } from './core.tokens';\nimport { AnyType, Type } from './core.types';\nimport funcGetName from './func.get-name';\nimport { isMockedNgDefOf } from './func.is-mocked-ng-def-of';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst getMock = (declaration: any, source: any, mocks?: Map<any, any>) => {\n if (mocks && !mocks.has(source)) {\n throw new Error(`There is no mock for ${funcGetName(source)}`);\n }\n let mock = mocks ? mocks.get(source) : undefined;\n if (mock === source) {\n mock = undefined;\n }\n\n // If we are not in the MockBuilder env we can rely on the current cache.\n if (!mock && source !== declaration) {\n mock = declaration;\n } else if (!mock && ngMocksUniverse.cacheDeclarations.has(source)) {\n mock = ngMocksUniverse.cacheDeclarations.get(source);\n }\n\n return mock;\n};\n\n/**\n * Returns the mock class of a mock module based on a mock module or a source module.\n * It works in runtime if the module has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealModule, 'm'); // returns MockModule\n * getMockedNgDefOf(MockModule, 'm'); // returns MockModule\n * getMockedNgDefOf(ArbitraryClass, 'm'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'm'): Type<MockedModule<T>>;\n\n/**\n * Returns the mock class of a mock component based on a mock component or a source component.\n * It works in runtime if the component has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealComponent, 'c'); // returns MockComponent\n * getMockedNgDefOf(MockComponent, 'c'); // returns MockComponent\n * getMockedNgDefOf(ArbitraryClass, 'c'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'c'): Type<MockedComponent<T>>;\n\n/**\n * Returns the mock class of a mock directive based on a mock directive or a source directive.\n * It works in runtime if the directive has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealDirective, 'd'); // returns MockDirective\n * getMockedNgDefOf(MockDirective, 'd'); // returns MockDirective\n * getMockedNgDefOf(ArbitraryClass, 'd'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'd'): Type<MockedDirective<T>>;\n\n/**\n * Returns the mock class of a mock pipe based on a mock pipe or a source pipe.\n * It works in runtime if the pipe has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealPipe, 'p'); // returns MockPipe\n * getMockedNgDefOf(MockPipe, 'p'); // returns MockPipe\n * getMockedNgDefOf(ArbitraryClass, 'p'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'p'): Type<MockedPipe<T>>;\n\n/**\n * Returns the mock class of a thing based on a mock class or a source class.\n * It works in runtime if the thing has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealComponent); // returns MockComponent\n * getMockedNgDefOf(MockPipe); // returns MockPipe\n * getMockedNgDefOf(ArbitraryClass); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>): Type<T>;\n\nexport function getMockedNgDefOf(declaration: any, type?: any): any {\n const source = declaration.mockOf ?? declaration;\n const mocks = coreInjector(NG_MOCKS);\n\n const mock = getMock(declaration, source, mocks);\n if (mock && !type) {\n return mock;\n }\n if (mock && type && isMockedNgDefOf(mock, source, type)) {\n return mock;\n }\n\n throw new Error(`There is no mock for ${funcGetName(source)}`);\n}\n","import { PipeTransform } from '@angular/core';\n\nimport { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { Type } from './core.types';\nimport funcIsMock from './func.is-mock';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * Checks whether the instance derives from a mock module.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(moduleInstance, RealModule, 'm'); // returns true\n * isMockOf(moduleInstance, ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'm'): instance is MockedModule<T>;\n\n/**\n * Checks whether the instance derives from a mock component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(componentInstance, RealComponent, 'c'); // returns true\n * isMockOf(componentInstance, ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'c'): instance is MockedComponent<T>;\n\n/**\n * Checks whether the instance derives from a mock directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(directiveInstance, RealDirective, 'd'); // returns true\n * isMockOf(directiveInstance, ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'd'): instance is MockedDirective<T>;\n\n/**\n * Checks whether the instance derives from a mock pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(pipeInstance, RealPipe, 'p'); // returns true\n * isMockOf(pipeInstance, ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockOf<T extends PipeTransform>(\n instance: any,\n declaration: Type<T>,\n ngType: 'p',\n): instance is MockedPipe<T>;\n\n/**\n * Checks whether the instance derives from a mock type.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(componentInstance, RealComponent); // returns true\n * isMockOf(pipeInstance, RealPipe); // returns true\n * isMockOf(pipeInstance, ArbitraryClass); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>): instance is T;\n\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType?: any): instance is T {\n return (\n funcIsMock(instance) &&\n instance.constructor === declaration &&\n (ngType ? isNgDef(instance.constructor, ngType) : isNgDef(instance.constructor))\n );\n}\n","import funcIsMock from './func.is-mock';\nimport { MockValidator } from './mock-control-value-accessor';\n\n/**\n * isMockValidator helps to assert that an instance is a mock Validator\n * to perform validationChange simulations.\n * Usually, it is used in if statements.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport const isMockValidator = <T>(value: T): value is T & MockValidator => {\n if (!funcIsMock(value)) {\n return false;\n }\n\n return !!(value as any).__ngMocksConfig.isValidator;\n};\n","import { InjectionToken, Injector } from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\nimport funcImportExists from '../common/func.import-exists';\nimport ngMocksStack, { NgMocksStack } from '../common/ng-mocks-stack';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockInstanceForgotReset from './mock-instance-forgot-reset';\n\nlet currentStack: NgMocksStack;\nngMocksStack.subscribePush(state => {\n currentStack = state;\n});\nngMocksStack.subscribePop((state, stack) => {\n for (const declaration of state.mockInstance || /* istanbul ignore next */ []) {\n if (ngMocksUniverse.configInstance.has(declaration)) {\n const universeConfig = ngMocksUniverse.configInstance.get(declaration);\n universeConfig.overloads.pop();\n ngMocksUniverse.configInstance.set(declaration, {\n ...universeConfig,\n });\n }\n }\n currentStack = stack[stack.length - 1];\n});\n\ninterface MockInstanceArgs {\n accessor?: 'get' | 'set';\n data?: any;\n key?: string;\n value?: any;\n}\n\nconst parseMockInstanceArgs = (args: any[]): MockInstanceArgs => {\n const set: MockInstanceArgs = {};\n\n if (typeof args[0] === 'string') {\n set.key = args[0];\n set.value = args[1];\n set.accessor = args[2];\n } else {\n set.value = args[0];\n if (set.value && typeof set.value === 'object') {\n set.value = set.value.init;\n }\n }\n\n return set;\n};\n\nconst checkReset: Array<[any, any, any?]> = [];\nlet checkCollect = false;\n\n// istanbul ignore else: maybe a different runner is used\nif (typeof beforeEach !== 'undefined') {\n beforeEach(() => (checkCollect = true));\n beforeEach(() => mockInstanceForgotReset(checkReset));\n afterEach(() => (checkCollect = false));\n}\n\nconst mockInstanceConfig = <T>(\n declaration: AnyDeclaration<T>,\n name: string | undefined,\n stub: any,\n encapsulation?: 'get' | 'set',\n) => {\n const config = ngMocksUniverse.configInstance.has(declaration) ? ngMocksUniverse.configInstance.get(declaration) : {};\n const overloads = config.overloads || [];\n overloads.push([name, stub, encapsulation]);\n config.overloads = overloads;\n ngMocksUniverse.configInstance.set(declaration, {\n ...config,\n });\n const mockInstances = currentStack.mockInstance ?? [];\n mockInstances.push(declaration);\n currentStack.mockInstance = mockInstances;\n\n if (checkCollect) {\n checkReset.push([declaration, ngMocksUniverse.configInstance.get(declaration), currentStack]);\n }\n\n return stub;\n};\n\n/**\n * This signature of MockInstance lets customize the getter of a property.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, 'currentUser$', () => mockUser$, 'get');\n * MockInstance(ArbitraryService, 'enabled', () => false, 'get');\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends () => T[K]>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n encapsulation: 'get',\n): S;\n\n/**\n * This signature of MockInstance lets customize the setters of a property.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * const currentUserSetterSpy = jasmine.createSpy();\n * MockInstance(ArbitraryComponent, 'currentUser', currentUserSetterSpy, 'set');\n *\n * let relServiceEnabled: boolean;\n * MockInstance(ArbitraryService, 'enabled', value => relServiceEnabled = value, 'set');\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends (value: T[K]) => void>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n encapsulation: 'set',\n): S;\n\n/**\n * This signature of MockInstance lets customize the properties and methods.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, 'onInit', onInitSpy);\n * MockInstance(ArbitraryDirective, 'onDestroy', () => {});\n * MockInstance(ArbitraryService, 'currentDate', new Date());\n * MockInstance(ArbitraryModule, 'currentUser', mockUser);\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends T[K]>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n): S;\n\n/**\n * This signature of MockInstance lets customize tokens with a callback.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(webSocketToken, () => mockWebSocket);\n * ```\n */\nexport function MockInstance<T>(\n declaration: InjectionToken<T>,\n init?: (instance: T | undefined, injector: Injector | undefined) => Partial<T>,\n): void;\n\n/**\n * This signature of MockInstance lets customize tokens with a callback.\n *\n * @deprecated please pass the callback directly instead of config.\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(webSocketToken, {\n * init: () => mockWebSocket,\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: InjectionToken<T>,\n config?: {\n init?: (instance: T | undefined, injector: Injector | undefined) => Partial<T>;\n },\n): void;\n\n/**\n * This signature of MockInstance lets customize the instances of mock classes with a callback.\n * You can return a shape or change the instance.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, (instance, injector) => {\n * instance.enabled = true;\n * instance.db = injector.get(DatabaseService);\n * });\n * MockInstance(ArbitraryDirective, () => {\n * return {\n * someProperty: true,\n * };\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: AnyType<T>,\n init?: (instance: T, injector: Injector | undefined) => void | Partial<T>,\n): void;\n\n/**\n * This signature of MockInstance lets customize the instances of mock classes with a callback.\n * You can return a shape or change the instance.\n *\n * @deprecated please pass the callback directly instead of config.\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, {\n * init: (instance, injector) => {\n * instance.enabled = true;\n * instance.db = injector.get(DatabaseService);\n * },\n * });\n * MockInstance(ArbitraryDirective, {\n * init: () => {\n * return {\n * someProperty: true,\n * };\n * },\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: AnyType<T>,\n config?: {\n init?: (instance: T, injector: Injector | undefined) => void | Partial<T>;\n },\n): void;\n\nexport function MockInstance<T>(declaration: AnyDeclaration<T>, ...args: any[]) {\n funcImportExists(declaration, 'MockInstance');\n\n if (args.length > 0) {\n const { key, value, accessor } = parseMockInstanceArgs(args);\n\n return mockInstanceConfig(declaration, key, value, accessor);\n }\n\n const config = ngMocksUniverse.configInstance.get(declaration) || /* istanbul ignore next */ {};\n\n ngMocksUniverse.configInstance.set(declaration, {\n ...config,\n overloads: [],\n });\n\n // When we are calling MockInstance without a config we need to reset it from the checks too.\n for (let i = checkReset.length - 1; i >= 0; i -= 1) {\n if (checkReset[i][0] === declaration && checkReset[i][2] === currentStack) {\n checkReset.splice(i, 1);\n }\n }\n}\n\n/**\n * Interface describes how to configure scopes for MockInstance.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#customization-scopes\n */\n// istanbul ignore next: issue in istanbul https://github.com/istanbuljs/nyc/issues/1209\nexport namespace MockInstance {\n /**\n * Creates a scope which remembers all future customizations of MockInstance.\n * It allows to reset them afterwards.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#remember\n */\n export function remember() {\n ngMocksStack.stackPush();\n }\n\n /**\n * Resets all changes in the current scope.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#restore\n */\n export function restore() {\n ngMocksStack.stackPop();\n }\n\n /**\n * Creates a local scope in `beforeEach` and `afterEach`.\n * If `suite` has been passed, then `beforeAll` and `afterAll` are used.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#scope\n */\n export function scope(scope: 'all' | 'suite' | 'case' = 'case') {\n if (scope === 'all' || scope === 'suite') {\n beforeAll(MockInstance.remember);\n afterAll(MockInstance.restore);\n }\n if (scope === 'all' || scope === 'case') {\n beforeEach(MockInstance.remember);\n afterEach(MockInstance.restore);\n }\n }\n}\n\n/**\n * MockReset resets everything what has been configured in MockInstance.\n * Please consider using MockInstance.scope() instead,\n * which respects customizations between tests.\n *\n * https://ng-mocks.sudo.eu/api/MockInstance#resetting-customization\n * https://ng-mocks.sudo.eu/api/MockInstance#scope\n */\nexport function MockReset() {\n ngMocksUniverse.configInstance.clear();\n}\n","import funcGetName from '../common/func.get-name';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (checkReset: Array<[any, any, any?]>) => {\n const showError: string[] = [];\n\n // istanbul ignore next: because of the installed global scope switcher we cannot test this part\n while (checkReset.length > 0) {\n const [declaration, config] = checkReset.pop() || /* istanbul ignore next */ [];\n if (config === ngMocksUniverse.configInstance.get(declaration)) {\n showError.push(typeof declaration === 'function' ? funcGetName(declaration) : declaration);\n }\n }\n\n // istanbul ignore if: because of the installed global scope switcher we cannot test this part\n if (showError.length > 0) {\n const globalFlags = ngMocksUniverse.global.get('flags');\n const errorMessage = [\n `MockInstance: side effects have been detected (${showError.join(', ')}).`,\n 'Forgot to add MockInstance.scope() or to call MockInstance.restore()?',\n ].join(' ');\n if (globalFlags.onMockInstanceRestoreNeed === 'warn') {\n console.warn(errorMessage);\n } else if (globalFlags.onMockInstanceRestoreNeed === 'throw') {\n throw new Error(errorMessage);\n }\n }\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { AnyDeclaration } from './core.types';\nimport { isNgInjectionToken } from './func.is-ng-injection-token';\nimport { NgModuleWithProviders } from './func.is-ng-module-def-with-providers';\n\n/**\n * Returns how the class has been decorated.\n * It doesn't work well, because multi decorations and extensions of decorated classes can bring strange behavior.\n * Because of that, we simply take the last decoration as the expected, if the decorator is not Injectable.\n * Services have the lowest priority.\n *\n * @internal\n *\n * ```ts\n * getNgType(MockModule); // returns 'NgModule' | 'Component' | 'Directive' | 'Pipe' | 'Injectable'\n * ```\n */\nexport const getNgType = (\n declaration: AnyDeclaration<any> | NgModuleWithProviders<any>,\n): 'NgModule' | 'Component' | 'Directive' | 'Pipe' | 'Injectable' | undefined => {\n if (typeof declaration === 'string') {\n return undefined;\n }\n if (isNgInjectionToken(declaration)) {\n return 'Injectable';\n }\n\n const { decorators } = collectDeclarations(declaration);\n\n for (let index = decorators.length - 1; index >= 0; index -= 1) {\n if (decorators[index] === 'Injectable') {\n continue;\n }\n\n return decorators[index];\n }\n\n if (decorators.length > 0) {\n return 'Injectable';\n }\n\n return undefined;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { getNgType } from './func.get-ng-type';\n\n/**\n * Checks whether a class has been decorated with the standalone flag.\n */\nexport function isStandalone(declaration: any): boolean {\n const type = getNgType(declaration);\n if (!type || type === 'Injectable') {\n return false;\n }\n\n return collectDeclarations(declaration)[type].standalone === true;\n}\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport class MockBuilderStash {\n protected data: Record<keyof any, any> = {};\n\n public backup(): void {\n this.data = {\n builtDeclarations: ngMocksUniverse.builtDeclarations,\n builtProviders: ngMocksUniverse.builtProviders,\n cacheDeclarations: ngMocksUniverse.cacheDeclarations,\n cacheProviders: ngMocksUniverse.cacheProviders,\n config: ngMocksUniverse.config,\n configInstance: ngMocksUniverse.configInstance,\n flags: ngMocksUniverse.flags,\n touches: ngMocksUniverse.touches,\n };\n\n ngMocksUniverse.builtDeclarations = new Map();\n ngMocksUniverse.builtProviders = new Map();\n ngMocksUniverse.cacheDeclarations = new Map();\n ngMocksUniverse.cacheProviders = new Map();\n ngMocksUniverse.config = new Map();\n ngMocksUniverse.configInstance = new Map();\n ngMocksUniverse.flags = new Set(coreConfig.flags);\n ngMocksUniverse.touches = new Set();\n }\n\n public restore(): void {\n for (const key of Object.keys(this.data)) {\n (ngMocksUniverse as any)[key] = (this.data as any)[key];\n }\n }\n}\n","import { extractDependency, flatten, mapValues } from '../../common/core.helpers';\nimport funcGetProvider from '../../common/func.get-provider';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData, NgMeta } from './types';\n\nexport default (ngModule: NgMeta, { providerDef }: BuilderData): void => {\n // Adding requested providers to test bed.\n for (const provider of mapValues(providerDef)) {\n ngModule.providers.push(provider);\n }\n\n // Analyzing providers.\n for (const provider of flatten(ngModule.providers)) {\n const provide = funcGetProvider(provider);\n ngMocksUniverse.touches.add(provide);\n\n if (provide !== provider && (provider as any).deps) {\n extractDependency((provider as any).deps, ngMocksUniverse.config.get('ngMocksDeps'));\n }\n }\n};\n","import ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData } from './types';\n\nexport default (\n replaceDef: BuilderData['replaceDef'],\n defValue: BuilderData['defValue'],\n source: any,\n value: any,\n): boolean => {\n // no reason to touch mocks\n if (ngMocksUniverse.cacheDeclarations.has(value)) {\n return true;\n }\n\n // no customizations in replacements\n if (replaceDef.has(source) && value === defValue.get(source)) {\n return true;\n }\n\n return false;\n};\n","import * as module from '@angular/core';\n\nlet isIvy = false;\ntry {\n isIvy = module.ɵivyEnabled;\n} catch {\n // nothing to do\n}\n\nimport coreDefineProperty from '../../common/core.define-property';\nimport { extendClass } from '../../common/core.helpers';\nimport { NG_MOCKS } from '../../common/core.tokens';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport helperCreateClone from '../../mock-service/helper.create-clone';\n\nimport { NgMeta } from './types';\n\nclass EntryComponentsModule {\n protected originCFR: module.ComponentFactoryResolver['resolveComponentFactory'];\n\n public constructor(map: Map<any, any>, protected componentFactoryResolver: module.ComponentFactoryResolver) {\n this.originCFR = componentFactoryResolver.resolveComponentFactory;\n componentFactoryResolver.resolveComponentFactory = helperCreateClone(\n this.originCFR,\n undefined,\n undefined,\n (component: any, ...args: any[]) =>\n this.originCFR.apply(componentFactoryResolver, [map.get(component) ?? component, ...args] as any),\n );\n }\n}\ncoreDefineProperty(EntryComponentsModule, 'parameters', [[NG_MOCKS], [module.ComponentFactoryResolver]]);\n\nexport default (ngModule: NgMeta): void => {\n const entryComponents: any[] = [];\n for (const declaration of ngModule.declarations) {\n if (isNgDef(declaration, 'c')) {\n entryComponents.push(declaration);\n }\n }\n // the way to cause entryComponents to do its work\n const entryModule = extendClass(EntryComponentsModule);\n module.NgModule({\n // Ivy knows how to make any component an entry point,\n // but we still would like to patch resolveComponentFactory in order to provide mocks.\n entryComponents: isIvy ? [] : /* istanbul ignore next */ entryComponents,\n })(entryModule);\n ngModule.imports.push(entryModule);\n};\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"DOCUMENT\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_common_d12e0fe1__.DOCUMENT });","import { DOCUMENT } from '@angular/common';\n\nimport coreConfig from '../../common/core.config';\nimport coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nconst skipResolution = (provide: any): boolean | undefined => {\n const resolution = ngMocksUniverse.getResolution(provide);\n if (resolution === 'keep' || resolution === 'exclude') {\n return true;\n }\n if (resolution === 'mock') {\n return false;\n }\n\n return undefined;\n};\n\nconst skipSystem = (provide: any): boolean => {\n if (!provide || provide === DOCUMENT || ngMocksUniverse.touches.has(provide)) {\n return true;\n }\n const skipByResolution = skipResolution(provide);\n if (skipByResolution !== undefined) {\n return skipByResolution;\n }\n\n if (typeof provide === 'function' && coreConfig.neverMockProvidedFunction.indexOf(provide.name) !== -1) {\n return true;\n }\n // istanbul ignore if because we mock BrowserModule\n if (isNgInjectionToken(provide) && coreConfig.neverMockToken.indexOf(provide.toString()) !== -1) {\n return true;\n }\n\n return false;\n};\n\n// Checks if we should avoid mocking of the provider.\nexport default (provide: any): boolean => {\n if (skipSystem(provide)) {\n return true;\n }\n\n // Empty providedIn or things for a platform have to be skipped.\n const providedIn = coreReflectProvidedIn(provide);\n const skip = !providedIn || providedIn === 'platform';\n if (typeof provide === 'function' && skip) {\n return true;\n }\n\n return false;\n};\n","import { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport skipDep from './skip-dep';\nimport { BuilderData } from './types';\n\nexport default (parameters: Set<any>, mockDef: BuilderData['mockDef'], def: any): void => {\n if (\n !skipDep(def) &&\n (mockDef.has(NG_MOCKS_ROOT_PROVIDERS) || !ngMocksUniverse.config.get('ngMocksDepsSkip').has(def))\n ) {\n parameters.add(def);\n }\n};\n","export default (provide: any, bucket: any[], touched: any[]): void => {\n if (typeof provide === 'function' && touched.indexOf(provide) === -1) {\n touched.push(provide);\n bucket.push(provide);\n }\n};\n","// Extracts dependency among flags of parameters.\n\nconst detectForwardRed = (provide: any): any => {\n if (typeof provide === 'function' && provide.__forward_ref__) {\n return provide();\n }\n\n return provide;\n};\n\nexport default (decorators?: any[]): any => {\n if (!decorators) {\n return;\n }\n\n let provide: any;\n for (const decorator of decorators) {\n if (decorator && typeof decorator === 'object' && decorator.token) {\n provide = decorator.token;\n }\n if (!provide && decorator && (typeof decorator !== 'object' || !decorator.ngMetadataName)) {\n provide = decorator;\n }\n }\n\n return detectForwardRed(provide);\n};\n","import coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (provide: any): void => {\n if (ngMocksUniverse.touches.has(provide)) {\n return;\n }\n\n const providedIn = coreReflectProvidedIn(provide);\n if (!providedIn) {\n return;\n }\n\n if (ngMocksUniverse.config.get('ngMocksDepsSkip').has(providedIn)) {\n ngMocksUniverse.config.get('ngMocksDepsSkip').add(provide);\n }\n};\n","import ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport skipDep from './skip-dep';\n\nexport default (provide: any): boolean => {\n if (skipDep(provide)) {\n return true;\n }\n\n return ngMocksUniverse.config.get('ngMocksDepsSkip').has(provide);\n};\n","import { flatten, mapValues } from '../../common/core.helpers';\nimport coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport { AnyDeclaration } from '../../common/core.types';\nimport errorJestMock from '../../common/error.jest-mock';\nimport funcGetName from '../../common/func.get-name';\nimport funcGetProvider from '../../common/func.get-provider';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport { isStandalone } from '../../common/func.is-standalone';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport markProviders from '../../mock-module/mark-providers';\n\nimport initModule from './init-module';\nimport { BuilderData, NgMeta } from './types';\n\nconst skipDef = (def: any): boolean =>\n ngMocksUniverse.touches.has(def) || isNgDef(def) || isNgInjectionToken(def) || typeof def === 'string';\n\nconst handleDef = ({ imports, declarations, providers }: NgMeta, def: any, defProviders: Map<any, any>): void => {\n if (!skipDef(def)) {\n errorJestMock(def);\n }\n\n let touched = false;\n\n if (isNgDef(def, 'm')) {\n const extendedDef = initModule(def, defProviders);\n imports.push(extendedDef);\n touched = true;\n\n // adding providers to touches\n if (typeof extendedDef === 'object' && extendedDef.providers) {\n for (const provider of flatten(extendedDef.providers)) {\n ngMocksUniverse.touches.add(funcGetProvider(provider));\n }\n }\n }\n\n if (isNgDef(def, 'c') || isNgDef(def, 'd') || isNgDef(def, 'p')) {\n (isStandalone(def) ? imports : declarations).push(ngMocksUniverse.getBuildDeclaration(def));\n touched = true;\n }\n\n if (isNgDef(def, 'i') || !isNgDef(def)) {\n const mock = ngMocksUniverse.builtProviders.get(def);\n if (mock && typeof mock !== 'string' && isNgDef(mock, 't') === false) {\n providers.push(mock);\n touched = true;\n }\n }\n\n if (touched) {\n ngMocksUniverse.touches.add(def);\n }\n};\n\nexport default (\n { configDef, configDefault, keepDef, mockDef, replaceDef }: BuilderData,\n defProviders: Map<any, any>,\n): NgMeta => {\n const meta: NgMeta = { imports: [], declarations: [], providers: [] };\n\n const forgotten: AnyDeclaration<any>[] = [];\n\n // Adding suitable leftovers.\n for (const def of [...mapValues(mockDef), ...mapValues(keepDef), ...mapValues(replaceDef)]) {\n const configInstance = ngMocksUniverse.configInstance.get(def);\n const config = configDef.get(def);\n\n if (!config.dependency && config.export && !configInstance?.exported && (isNgDef(def, 'i') || !isNgDef(def))) {\n handleDef(meta, def, defProviders);\n markProviders([def]);\n } else if (!ngMocksUniverse.touches.has(def) && !config.dependency) {\n handleDef(meta, def, defProviders);\n } else if (\n config.dependency &&\n configDefault.dependency &&\n coreReflectProvidedIn(def) !== 'root' &&\n (typeof def !== 'object' || !(def as any).__ngMocksSkip)\n ) {\n forgotten.push(def);\n }\n }\n\n // Checking missing dependencies\n const globalFlags = ngMocksUniverse.global.get('flags');\n for (const def of forgotten) {\n if (ngMocksUniverse.touches.has(def)) {\n continue;\n }\n\n const errorMessage = [\n `MockBuilder has found a missing dependency: ${funcGetName(def)}.`,\n 'It means no module provides it.',\n 'Please, use the \"export\" flag if you want to add it explicitly.',\n 'https://ng-mocks.sudo.eu/api/MockBuilder#export-flag',\n ].join(' ');\n\n if (globalFlags.onMockBuilderMissingDependency === 'warn') {\n console.warn(errorMessage);\n } else if (globalFlags.onMockBuilderMissingDependency === 'throw') {\n throw new Error(errorMessage);\n }\n }\n\n return meta;\n};\n","import { ModuleWithProviders } from '@angular/core';\n\nimport { Type } from '../../common/core.types';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData } from './types';\n\nexport default (def: Type<any>, defProviders: BuilderData['defProviders']): Type<any> | ModuleWithProviders<any> => {\n const loModule = ngMocksUniverse.getBuildDeclaration(def);\n const loProviders = defProviders.has(def) ? defProviders.get(def) : undefined;\n\n return loProviders\n ? {\n ngModule: loModule,\n providers: loProviders,\n }\n : loModule;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport coreConfig from './core.config';\nimport { flatten } from './core.helpers';\nimport { AnyDeclaration } from './core.types';\nimport { getNgType } from './func.get-ng-type';\nimport funcGetProvider from './func.get-provider';\nimport { isNgModuleDefWithProviders } from './func.is-ng-module-def-with-providers';\n\nexport const funcExtractDeps = (def: any, result: Set<AnyDeclaration<any>>): Set<AnyDeclaration<any>> => {\n const meta = collectDeclarations(def);\n const type = getNgType(def);\n // istanbul ignore if\n if (!type) {\n return result;\n }\n\n const decorator = meta[type];\n for (const field of coreConfig.dependencies) {\n if (!decorator[field]) {\n continue;\n }\n\n for (const item of flatten(decorator[field])) {\n // istanbul ignore if: it is here for standalone things, however they don't support modules with providers.\n if (isNgModuleDefWithProviders(item)) {\n result.add(item.ngModule);\n } else {\n result.add(funcGetProvider(item));\n }\n }\n }\n\n return result;\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport { MockComponent } from '../../mock-component/mock-component';\nimport { MockDirective } from '../../mock-directive/mock-directive';\nimport { MockPipe } from '../../mock-pipe/mock-pipe';\n\nexport default (def: any, defValue: Map<any, any>): void => {\n if (isNgDef(def, 'c')) {\n ngMocksUniverse.builtDeclarations.set(def, MockComponent(def));\n }\n if (isNgDef(def, 'd')) {\n ngMocksUniverse.builtDeclarations.set(def, MockDirective(def));\n }\n if (isNgDef(def, 'p')) {\n const instance = defValue.get(def);\n ngMocksUniverse.builtDeclarations.set(\n def,\n typeof instance?.transform === 'function' ? MockPipe(def, instance.transform) : MockPipe(def),\n );\n }\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport mockHelperStub from '../../mock-helper/mock-helper.stub';\nimport helperUseFactory from '../../mock-service/helper.use-factory';\nimport mockProvider from '../../mock-service/mock-provider';\nimport { IMockBuilderConfigMock } from '../types';\n\nconst createInstance = (existing: any, params: any, config: IMockBuilderConfigMock): any => {\n if (config.precise) {\n return params;\n }\n\n return mockHelperStub(existing, params);\n};\n\nexport default (def: any, defValue: Map<any, any>): void => {\n if (isNgDef(def, 'i') && defValue.has(def)) {\n const config: IMockBuilderConfigMock = ngMocksUniverse.config.get(def);\n const instance = defValue.get(def);\n ngMocksUniverse.builtProviders.set(\n def,\n helperUseFactory(def, undefined, existing => createInstance(existing, instance, config)),\n );\n } else if (isNgDef(def, 'i')) {\n ngMocksUniverse.builtProviders.set(def, mockProvider(def, true));\n }\n\n if (!isNgDef(def) && defValue.has(def)) {\n const instance = defValue.get(def);\n ngMocksUniverse.builtProviders.set(\n def,\n helperUseFactory(def, undefined, () => instance),\n );\n } else if (!isNgDef(def)) {\n ngMocksUniverse.builtProviders.set(def, mockProvider(def, true));\n }\n};\n","import funcGetProvider from '../../common/func.get-provider';\n\nexport default (\n provider: any,\n): {\n multi: boolean;\n provide: any;\n} => {\n const provide = funcGetProvider(provider);\n const multi = provide !== provider && provider.multi;\n\n return {\n multi,\n provide,\n };\n};\n","import { Provider } from '@angular/core';\nimport { TestBed, TestModuleMetadata } from '@angular/core/testing';\n\nimport { flatten, mapValues } from '../common/core.helpers';\nimport { Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport { MockBuilderStash } from './mock-builder-stash';\nimport addRequestedProviders from './promise/add-requested-providers';\nimport applyPlatformModules from './promise/apply-platform-modules';\nimport createNgMocksOverridesToken from './promise/create-ng-mocks-overrides-token';\nimport createNgMocksToken from './promise/create-ng-mocks-token';\nimport createNgMocksTouchesToken from './promise/create-ng-mocks-touches-token';\nimport handleEntryComponents from './promise/handle-entry-components';\nimport handleRootProviders from './promise/handle-root-providers';\nimport initNgModules from './promise/init-ng-modules';\nimport initUniverse from './promise/init-universe';\nimport parseMockArguments from './promise/parse-mock-arguments';\nimport parseProvider from './promise/parse-provider';\nimport { BuilderData } from './promise/types';\nimport { IMockBuilder, IMockBuilderConfig, IMockBuilderConfigAll, IMockBuilderResult } from './types';\n\nconst normaliseModule = (\n module: any,\n): {\n def: Type<any>;\n providers?: Provider[];\n} =>\n isNgModuleDefWithProviders(module)\n ? { def: module.ngModule, providers: module.providers }\n : { def: module, providers: undefined };\n\nconst generateProviderValue = (provider: any, existing: any, multi: boolean): any =>\n multi ? [...(Array.isArray(existing) ? existing : /* istanbul ignore next */ []), provider] : provider;\n\nconst defaultMock = {}; // simulating Symbol\n\nexport interface MockBuilderPromise {\n [Symbol.toStringTag]: 'Promise';\n}\n\nexport class MockBuilderPromise implements IMockBuilder {\n protected beforeCC: Set<(testBed: typeof TestBed) => void> = new Set();\n protected configDef: BuilderData['configDef'] = new Map();\n protected defProviders: BuilderData['defProviders'] = new Map();\n protected defValue: BuilderData['defValue'] = new Map();\n protected excludeDef: BuilderData['excludeDef'] = new Set();\n protected keepDef: BuilderData['keepDef'] = new Set();\n protected mockDef: BuilderData['mockDef'] = new Set();\n protected providerDef: BuilderData['providerDef'] = new Map();\n protected replaceDef: BuilderData['replaceDef'] = new Set();\n protected stash: MockBuilderStash = new MockBuilderStash();\n\n public constructor(protected configDefault: IMockBuilderConfigAll) {\n // istanbul ignore else\n if (typeof Symbol !== 'undefined') {\n (this as any)[Symbol.toStringTag] = 'Promise';\n }\n }\n\n public beforeCompileComponents(callback: (testBed: typeof TestBed) => void): this {\n this.beforeCC.add(callback);\n\n return this;\n }\n\n public build(): TestModuleMetadata {\n this.stash.backup();\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n ngMocksUniverse.flags.add('hasRootModule');\n\n try {\n const params = this.combineParams();\n\n const ngModule = initNgModules(params, initUniverse(params));\n addRequestedProviders(ngModule, params);\n handleRootProviders(ngModule, params);\n handleEntryComponents(ngModule);\n applyPlatformModules();\n\n ngModule.providers.push(\n createNgMocksToken(),\n createNgMocksTouchesToken(),\n createNgMocksOverridesToken(this.replaceDef, this.defValue),\n );\n\n return ngModule;\n } finally {\n ngMocksUniverse.flags.delete('hasRootModule');\n ngMocksUniverse.config.delete('mockNgDefResolver');\n this.stash.restore();\n }\n }\n\n // istanbul ignore next\n public async catch(reject?: ((reason: any) => PromiseLike<never>) | undefined | null): Promise<IMockBuilderResult> {\n return this.then().catch(reject);\n }\n\n public exclude(def: any): this {\n this.wipe(def);\n this.excludeDef.add(def);\n\n return this;\n }\n\n // istanbul ignore next\n public async finally(callback?: (() => void) | null | undefined): Promise<IMockBuilderResult> {\n return this.then().finally(callback);\n }\n\n public keep(input: any, config?: IMockBuilderConfig): this {\n const { def, providers } = normaliseModule(input);\n\n const existing = this.keepDef.has(def) ? this.defProviders.get(def) : [];\n this.wipe(def);\n this.keepDef.add(def);\n\n // a magic to support modules with providers.\n if (providers) {\n this.defProviders.set(def, [...(existing || /* istanbul ignore next */ []), ...providers]);\n }\n\n this.setConfigDef(def, config);\n\n return this;\n }\n\n public mock(input: any, a1: any = defaultMock, a2?: any): this {\n const { def, providers } = normaliseModule(input);\n\n const { config, mock } = parseMockArguments(def, a1, a2, defaultMock);\n if (isNgDef(mock) && isNgDef(input) && !isNgDef(input, 't')) {\n throw new Error(\n [\n `MockBuilder.mock(${funcGetName(input)}) received a class when its shape is expected.`,\n 'Please try ngMocks.defaultMock instead.',\n ].join(' '),\n );\n }\n\n const existing = this.mockDef.has(def) ? this.defProviders.get(def) : [];\n this.wipe(def);\n this.mockDef.add(def);\n\n // a magic to support modules with providers.\n if (providers) {\n this.defProviders.set(def, [...(existing || /* istanbul ignore next */ []), ...providers]);\n }\n\n this.setDefValue(def, mock);\n this.setConfigDef(def, config);\n\n return this;\n }\n\n public provide(def: Provider): this {\n for (const provider of flatten(def)) {\n const { provide, multi } = parseProvider(provider);\n const existing = this.providerDef.has(provide) ? this.providerDef.get(provide) : [];\n this.providerDef.set(provide, generateProviderValue(provider, existing, multi));\n }\n\n return this;\n }\n\n public replace(source: Type<any>, destination: Type<any>, config?: IMockBuilderConfig): this {\n if (!isNgDef(destination) || !isNgDef(source) || isNgDef(destination, 'i') || isNgDef(source, 'i')) {\n throw new Error(\n 'Cannot replace the declaration, both have to be a Module, a Component, a Directive or a Pipe, for Providers use `.mock` or `.provide`',\n );\n }\n\n this.wipe(source);\n this.replaceDef.add(source);\n this.defValue.set(source, destination);\n this.setConfigDef(source, config);\n\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-thenable\n public async then<TResult1 = IMockBuilderResult>(\n fulfill?: ((value: IMockBuilderResult) => PromiseLike<TResult1>) | undefined | null,\n reject?: ((reason: any) => PromiseLike<any>) | undefined | null,\n ): Promise<TResult1> {\n const promise = new Promise((resolve: (value: IMockBuilderResult) => void): void => {\n const testBed = TestBed.configureTestingModule(this.build());\n for (const callback of mapValues(this.beforeCC)) {\n callback(testBed);\n }\n const testBedPromise = testBed.compileComponents();\n testBedPromise.then(() => {\n resolve({ testBed });\n });\n });\n\n return promise.then(fulfill, reject);\n }\n\n private combineParams(): BuilderData {\n return {\n configDef: this.configDef,\n configDefault: this.configDefault,\n defProviders: this.defProviders,\n defValue: this.defValue,\n excludeDef: this.excludeDef,\n keepDef: this.keepDef,\n mockDef: this.mockDef,\n providerDef: this.providerDef,\n replaceDef: this.replaceDef,\n };\n }\n\n private setConfigDef(def: any, config: any): void {\n if (config || !this.configDef.has(def)) {\n this.configDef.set(def, config ?? this.configDefault);\n }\n }\n\n private setDefValue(def: any, mock: any): void {\n if (mock !== defaultMock) {\n this.defValue.set(def, mock);\n } else {\n this.defValue.delete(def);\n }\n }\n\n private wipe(def: Type<any>): void {\n this.defProviders.delete(def);\n this.defValue.delete(def);\n this.excludeDef.delete(def);\n this.keepDef.delete(def);\n this.mockDef.delete(def);\n this.providerDef.delete(def);\n this.replaceDef.delete(def);\n }\n}\n","import equalVariables from './equal-variables';\n\nexport default (prototype: any, source: any): boolean => {\n if (prototype === source) {\n return true;\n }\n if ((typeof prototype === 'boolean' || typeof source === 'boolean') && prototype !== source) {\n return false;\n }\n\n return prototype.$implicit === source.$implicit && equalVariables(prototype.variables, source.variables);\n};\n","const objectsDiffer = (prototype: any, source: any): boolean => {\n const prototypeKeys = Object.keys(prototype);\n const sourceKeys = Object.keys(source);\n if (prototypeKeys.length !== sourceKeys.length) {\n return true;\n }\n for (const key of prototypeKeys) {\n if (prototype[key] !== source[key]) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (prototype: any, source: any): boolean => {\n if (prototype === source) {\n return true;\n }\n if ((prototype && !source) || (!prototype && source)) {\n return false;\n }\n if (objectsDiffer(prototype, source)) {\n return false;\n }\n\n return true;\n};\n","import equalRenderConfigs from './equal-render-configs';\n\nexport default (source: any, destination: any): boolean => {\n if (destination === source) {\n return true;\n }\n if (destination.dependency !== source.dependency) {\n return false;\n }\n if (destination.export !== source.export) {\n return false;\n }\n if (destination.exportAll !== source.exportAll) {\n return false;\n }\n if (!equalRenderConfigs(source.render, destination.render)) {\n return false;\n }\n\n return true;\n};\n","import equalRenderDefs from './equal-render-defs';\n\nconst objectsDiffer = (destination: any, source: any): boolean => {\n if (Object.keys(destination).length !== Object.keys(source).length) {\n return true;\n }\n for (const key of Object.keys(destination)) {\n if (!equalRenderDefs(destination[key], source[key])) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (source: any, destination: any): boolean => {\n if (!equalRenderDefs(destination, source)) {\n return false;\n }\n if (typeof destination !== 'object' || typeof source !== 'object') {\n return true;\n }\n if (objectsDiffer(destination, source)) {\n return false;\n }\n\n return true;\n};\n","import { mapKeys } from '../../common/core.helpers';\n\nexport default (source: Map<any, any>, destination: Map<any, any>, compare = (a: any, b: any) => a === b): boolean => {\n if (!destination || destination.size !== source.size) {\n return false;\n }\n for (const value of mapKeys(source)) {\n if (!destination.has(value)) {\n return false;\n }\n if (!compare(destination.get(value), source.get(value))) {\n return false;\n }\n }\n\n return true;\n};\n","import { flatten } from '../../common/core.helpers';\n\nconst areEqualProviderDefs = (thisDef: any, prototypeDef: any, ...keys: string[]) => {\n for (const key of keys) {\n if (prototypeDef && thisDef && prototypeDef[key] && thisDef[key] && prototypeDef[key] === thisDef[key]) {\n return true;\n }\n }\n\n return prototypeDef === thisDef;\n};\n\nexport default (prototype: any, source: any): boolean => {\n if (Array.isArray(prototype) !== Array.isArray(source)) {\n return false;\n }\n\n const [prototypeDefs, thisDefs] = [flatten(prototype), flatten(source)];\n if (prototypeDefs.length !== thisDefs.length) {\n return false;\n }\n\n for (let index = 0; index < prototypeDefs.length; index += 1) {\n const [prototypeDef, thisDef] = [prototypeDefs[index], thisDefs[index]];\n\n if (prototypeDef && thisDef && prototypeDef.multi !== thisDef.multi) {\n return false;\n }\n if (areEqualProviderDefs(thisDef, prototypeDef, 'useValue', 'useClass', 'useFactory', 'useExisting')) {\n continue;\n }\n\n return false;\n }\n\n return true;\n};\n","import { mapValues } from '../../common/core.helpers';\n\nexport default (source: Set<any>, destination: Set<any>): boolean => {\n if (!destination || destination.size !== source.size) {\n return false;\n }\n for (const value of mapValues(source)) {\n if (!destination.has(value)) {\n return false;\n }\n }\n\n return true;\n};\n","import { TestModuleMetadata } from '@angular/core/testing';\n\nexport default (\n ngModule: TestModuleMetadata,\n): {\n declarations: any[];\n imports: any[];\n providers: any[];\n} => ({\n declarations: [...(ngModule.declarations || /* istanbul ignore next */ [])],\n imports: [...(ngModule.imports || /* istanbul ignore next */ [])],\n providers: [...(ngModule.providers || /* istanbul ignore next */ [])],\n});\n","import { TestBed, TestModuleMetadata } from '@angular/core/testing';\n\nimport { mapEntries, mapValues } from '../common/core.helpers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport { MockBuilderPromise } from './mock-builder.promise';\nimport areEqualConfigParams from './performance/are-equal-config-params';\nimport areEqualMaps from './performance/are-equal-maps';\nimport areEqualProviders from './performance/are-equal-providers';\nimport areEqualSets from './performance/are-equal-sets';\nimport getEmptyConfig from './performance/get-empty-config';\nimport requiredMetadata from './performance/required-metadata';\nimport { IMockBuilderResult } from './types';\n\nexport class MockBuilderPerformance extends MockBuilderPromise {\n public build(): TestModuleMetadata {\n const global = ngMocksUniverse.global;\n\n // avoiding influences on cache when users extend the testing module.\n if (global.has('builder:module') && global.has('builder:config') && this.equalsTo(global.get('builder:config'))) {\n return requiredMetadata(global.get('builder:module'));\n }\n\n // removal of cached promise in case of mismatch\n if (global.has('builder:module')) {\n global.delete(global.get('builder:module'));\n }\n\n const clone = this.cloneConfig();\n const ngModule = super.build();\n global.set('builder:config', clone);\n global.set('builder:module', ngModule);\n\n // avoiding influences on cache when users extend the testing module.\n return requiredMetadata(ngModule);\n }\n\n // eslint-disable-next-line unicorn/no-thenable\n public async then<TResult1 = IMockBuilderResult>(\n fulfill?: ((value: IMockBuilderResult) => PromiseLike<TResult1>) | undefined | null,\n reject?: ((reason: any) => PromiseLike<never>) | undefined | null,\n ): Promise<TResult1> {\n const global = ngMocksUniverse.global;\n\n const flags = global.has('bullet') && global.has('builder:module') && global.has('builder:config');\n if (flags && this.equalsTo(global.get('builder:config'))) {\n return global.get(global.get('builder:module')).then(fulfill, reject);\n }\n\n // we need to reset testing module in case if we are in bullet mode but current module does not match.\n if (global.has('bullet') && global.has('bullet:reset')) {\n console.warn('ngMocks.faster has zero effect due to changes in testing module between runs');\n global.delete('bullet');\n TestBed.resetTestingModule();\n global.set('bullet', true);\n }\n\n const promise = super.then(fulfill, reject);\n global.set(global.get('builder:module'), promise);\n\n return promise;\n }\n\n private cloneConfig() {\n const config = getEmptyConfig();\n\n mapValues(this.beforeCC, config.beforeCC);\n mapValues(this.excludeDef, config.excludeDef);\n mapValues(this.keepDef, config.keepDef);\n mapValues(this.mockDef, config.mockDef);\n mapValues(this.replaceDef, config.replaceDef);\n\n mapEntries(this.configDef, config.configDef);\n mapEntries(this.defProviders, config.defProviders);\n mapEntries(this.defValue, config.defValue);\n mapEntries(this.providerDef, config.providerDef);\n\n return config;\n }\n\n private equalsTo(prototype: Record<any, any>): boolean {\n for (const key of ['beforeCC', 'keepDef', 'replaceDef', 'excludeDef', 'mockDef']) {\n if (!areEqualSets((this as any)[key], prototype[key])) {\n return false;\n }\n }\n for (const key of ['defValue']) {\n if (!areEqualMaps((this as any)[key], prototype[key])) {\n return false;\n }\n }\n for (const key of ['providerDef', 'defProviders']) {\n if (!areEqualMaps((this as any)[key], prototype[key], areEqualProviders)) {\n return false;\n }\n }\n\n return areEqualMaps(this.configDef, prototype.configDef, areEqualConfigParams);\n }\n}\n","import { mapEntries, mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport initExcludeDef from './init-exclude-def';\nimport initKeepDef from './init-keep-def';\nimport initMockDeclarations from './init-mock-declarations';\nimport initModules from './init-modules';\nimport initReplaceDef from './init-replace-def';\nimport { BuilderData } from './types';\n\nexport default ({\n configDef,\n defProviders,\n defValue,\n excludeDef,\n keepDef,\n mockDef,\n replaceDef,\n}: BuilderData): Map<any, any> => {\n ngMocksUniverse.flags.add('cachePipe');\n\n // collecting multi flags of providers.\n ngMocksUniverse.config.set('ngMocksMulti', new Set());\n // collecting all deps of providers.\n ngMocksUniverse.config.set('ngMocksDeps', new Set());\n // collecting all declarations of kept modules.\n ngMocksUniverse.config.set('ngMocksDepsSkip', new Set());\n // flags to understand how to mock nested declarations.\n ngMocksUniverse.config.set('ngMocksDepsResolution', new Map());\n\n const dependencies = initKeepDef(keepDef, configDef);\n for (const dependency of mapValues(dependencies)) {\n // MockBuilder has instruction about the dependency, skipping it.\n if (configDef.has(dependency)) {\n continue;\n }\n\n // Checking global configuration for the dependency.\n const resolution = ngMocksUniverse.getResolution(dependency);\n if (resolution === 'replace') {\n replaceDef.add(dependency);\n defValue.set(dependency, ngMocksUniverse.getBuildDeclaration(dependency));\n } else if (resolution === 'keep') {\n keepDef.add(dependency);\n } else if (resolution === 'exclude') {\n excludeDef.add(dependency);\n } else {\n mockDef.add(dependency);\n }\n\n configDef.set(dependency, {\n dependency: true,\n });\n }\n\n for (const [k, v] of mapEntries(configDef)) {\n ngMocksUniverse.config.set(k, {\n ...ngMocksUniverse.getConfigMock().get(k),\n ...v,\n });\n }\n\n initReplaceDef(replaceDef, defValue);\n initExcludeDef(excludeDef);\n initMockDeclarations(mockDef, defValue);\n\n return initModules(keepDef, mockDef, replaceDef, defProviders);\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { funcExtractDeps } from '../../common/func.extract-deps';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (keepDef: Set<any>, configDef: Map<any, any>): Set<any> => {\n const dependencies = new Set<any>();\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const builtProviders = ngMocksUniverse.builtProviders;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(keepDef)) {\n builtDeclarations.set(def, def);\n builtProviders.set(def, def);\n resolutions.set(def, 'keep');\n\n const config = configDef.get(def);\n if (config.shallow) {\n funcExtractDeps(def, dependencies);\n }\n }\n\n return dependencies;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (replaceDef: Set<any>, defValue: Map<any, any>): void => {\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(replaceDef)) {\n builtDeclarations.set(def, defValue.get(def));\n resolutions.set(def, 'replace');\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (excludeDef: Set<any>): void => {\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const builtProviders = ngMocksUniverse.builtProviders;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(excludeDef)) {\n builtDeclarations.set(def, null);\n builtProviders.set(def, null);\n resolutions.set(def, 'exclude');\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport tryMockDeclaration from './try-mock-declaration';\nimport tryMockProvider from './try-mock-provider';\n\nexport default (mockDef: Set<any>, defValue: Map<any, any>): void => {\n const resolutions: Map<any, string> = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(mockDef)) {\n resolutions.set(def, 'mock');\n tryMockDeclaration(def, defValue);\n tryMockProvider(def, defValue);\n\n ngMocksUniverse.touches.delete(def);\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport { MockModule } from '../../mock-module/mock-module';\nimport mockNgDef from '../../mock-module/mock-ng-def';\nimport collectDeclarations from '../../resolve/collect-declarations';\n\nexport default (\n keepDef: Set<any>,\n mockDef: Set<any>,\n replaceDef: Set<any>,\n defProviders: Map<any, any>,\n): Map<any, any> => {\n const loProviders = new Map();\n\n for (const def of [...mapValues(keepDef), ...mapValues(mockDef), ...mapValues(replaceDef)]) {\n const meta = collectDeclarations(def);\n const providers = [\n ...(defProviders.get(def) ?? []),\n ...(meta.Component?.providers ?? []),\n ...(meta.Directive?.providers ?? []),\n ];\n\n const deleteTouch = !ngMocksUniverse.touches.has(def);\n if (!mockDef.has(def)) {\n ngMocksUniverse.flags.add('skipMock');\n }\n\n const isModule = isNgDef(def, 'm');\n if (providers.length > 0) {\n const [, loDef] = mockNgDef({ providers, skipMarkProviders: !isModule });\n loProviders.set(def, loDef.providers);\n }\n if (isModule) {\n ngMocksUniverse.builtDeclarations.set(def, MockModule(def));\n }\n\n ngMocksUniverse.flags.delete('skipMock');\n if (deleteTouch) {\n ngMocksUniverse.touches.delete(def);\n }\n }\n\n return loProviders;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport helperResolveProvider from '../../mock-service/helper.resolve-provider';\nimport helperUseFactory from '../../mock-service/helper.use-factory';\n\nimport getRootProviderParameters from './get-root-provider-parameters';\nimport { BuilderData, NgMeta } from './types';\n\n// Mocking root providers.\nexport default (ngModule: NgMeta, { keepDef, mockDef }: BuilderData): void => {\n // Adding missed providers.\n const parameters = keepDef.has(NG_MOCKS_ROOT_PROVIDERS) ? new Set() : getRootProviderParameters(mockDef);\n if (parameters.size > 0) {\n const parametersMap = new Map();\n for (const parameter of mapValues(parameters)) {\n const mock = helperResolveProvider(parameter, parametersMap);\n if (mock) {\n ngModule.providers.push(mock);\n } else if (isNgInjectionToken(parameter)) {\n const multi =\n ngMocksUniverse.config.has('ngMocksMulti') && ngMocksUniverse.config.get('ngMocksMulti').has(parameter);\n ngModule.providers.push(helperUseFactory(parameter, () => (multi ? [] : undefined)));\n }\n }\n }\n};\n","import coreReflectParametersResolve from '../../common/core.reflect.parameters-resolve';\nimport { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport addDefToRootProviderParameters from './add-def-to-root-provider-parameters';\nimport checkRootProviderDependency from './check-root-provider-dependency';\nimport extractDep from './extract-dep';\nimport getRootProvidersData from './get-root-providers-data';\nimport handleProvidedInDependency from './handle-provided-in-dependency';\nimport skipRootProviderDependency from './skip-root-provider-dependency';\nimport { BuilderData } from './types';\n\nexport default (mockDef: BuilderData['mockDef']): Set<any> => {\n const parameters = new Set();\n const { buckets, touched } = getRootProvidersData();\n\n for (const bucket of buckets) {\n for (const def of bucket) {\n addDefToRootProviderParameters(parameters, mockDef, def);\n\n for (const decorators of coreReflectParametersResolve(def)) {\n const provide: any = extractDep(decorators);\n handleProvidedInDependency(provide);\n if (skipRootProviderDependency(provide)) {\n continue;\n }\n checkRootProviderDependency(provide, touched, bucket);\n if (mockDef.has(NG_MOCKS_ROOT_PROVIDERS) || !ngMocksUniverse.config.get('ngMocksDepsSkip').has(def)) {\n parameters.add(provide);\n } else {\n ngMocksUniverse.config.get('ngMocksDepsSkip').add(provide);\n }\n }\n }\n }\n\n return parameters;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): {\n buckets: any[];\n touched: any[];\n} => {\n // We need buckets here to process first all depsSkip, then deps and only after that all other defs.\n const buckets: any[] = [\n mapValues(ngMocksUniverse.config.get('ngMocksDepsSkip')),\n mapValues(ngMocksUniverse.config.get('ngMocksDeps')),\n mapValues(ngMocksUniverse.touches),\n ];\n\n // Also, we need to track what has been touched to check params recursively, but avoiding duplicates.\n const touched: any[] = [].concat(...buckets);\n\n return {\n buckets,\n touched,\n };\n};\n","import { getTestBed } from '@angular/core/testing';\n\nimport { flatten } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default () => {\n const testBed = getTestBed();\n // istanbul ignore else\n if (testBed.ngModule) {\n for (const def of flatten<any>(testBed.ngModule)) {\n // istanbul ignore if\n if (typeof def === 'object' && /* istanbul ignore next */ def.ngModule) {\n ngMocksUniverse.touches.add(def.ngModule);\n } else {\n ngMocksUniverse.touches.add(def);\n }\n }\n }\n};\n","import { ValueProvider } from '@angular/core';\n\nimport { mapEntries } from '../../common/core.helpers';\nimport { NG_MOCKS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): ValueProvider => {\n const mocks = new Map();\n for (const [key, value] of [\n ...mapEntries(ngMocksUniverse.builtProviders),\n ...mapEntries(ngMocksUniverse.builtDeclarations),\n ...mapEntries(ngMocksUniverse.cacheDeclarations),\n ...mapEntries(ngMocksUniverse.cacheProviders),\n ]) {\n if (mocks.has(key)) {\n continue;\n }\n mocks.set(key, value);\n }\n\n return {\n provide: NG_MOCKS,\n useValue: mocks,\n };\n};\n","import { ValueProvider } from '@angular/core';\n\nimport { mapValues } from '../../common/core.helpers';\nimport { NG_MOCKS_TOUCHES } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): ValueProvider => {\n // Redefining providers for kept declarations.\n const touches = new Set();\n for (const proto of mapValues(ngMocksUniverse.touches)) {\n const source: any = proto;\n let value = ngMocksUniverse.getBuildDeclaration(source);\n\n // kept declarations should be based on their source.\n if (value === undefined) {\n value = source;\n }\n\n touches.add(source);\n touches.add(value);\n }\n\n return {\n provide: NG_MOCKS_TOUCHES,\n useValue: touches,\n };\n};\n","import { ValueProvider } from '@angular/core';\nimport { MetadataOverride } from '@angular/core/testing';\n\nimport { mapValues } from '../../common/core.helpers';\nimport coreReflectMeta from '../../common/core.reflect.meta';\nimport { NG_MOCKS_OVERRIDES } from '../../common/core.tokens';\nimport { Type } from '../../common/core.types';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport getOverrideDef from './get-override-def';\nimport skipOverride from './skip-override';\n\nexport default (replaceDef: Set<any>, defValue: Map<any, any>): ValueProvider => {\n const overrides: Map<Type<any>, [MetadataOverride<any>, MetadataOverride<any>]> = new Map();\n for (const proto of mapValues(ngMocksUniverse.touches)) {\n const source: any = proto;\n const value = ngMocksUniverse.getBuildDeclaration(source) || source;\n if (skipOverride(replaceDef, defValue, source, value)) {\n continue;\n }\n\n const original = coreReflectMeta(value);\n const override = getOverrideDef(original);\n if (!override) {\n continue;\n }\n\n // We need to delete standalone, because Angular was too lazy to check whether it has been really changed.\n const patchedOriginal: Partial<typeof original> = {};\n for (const key of Object.keys(override)) {\n patchedOriginal[key] = original[key];\n }\n\n overrides.set(value, [{ set: override }, { set: patchedOriginal }]);\n }\n\n return {\n provide: NG_MOCKS_OVERRIDES,\n useValue: overrides,\n };\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\n\nexport default (\n def: any,\n a1: any,\n a2: any,\n defaultMockValue: any,\n): {\n config: any;\n mock: any;\n} => {\n let mock: any = def === a1 ? defaultMockValue : a1;\n let config: any = a2 ?? (a1 !== defaultMockValue && typeof a1 === 'object' ? a1 : undefined);\n if (isNgDef(def, 'p') && typeof a1 === 'function' && a1 !== def && !isNgDef(a1, 'p')) {\n mock = {\n transform: a1,\n };\n config = a2;\n } else if (isNgDef(def, 'i') || !isNgDef(def)) {\n config = a2;\n }\n mock = mock === config ? defaultMockValue : mock;\n\n return {\n config,\n mock,\n };\n};\n","export default () => ({\n beforeCC: new Set(),\n configDef: new Map(),\n defProviders: new Map(),\n defValue: new Map(),\n excludeDef: new Set(),\n keepDef: new Set(),\n mockDef: new Set(),\n providerDef: new Map(),\n replaceDef: new Set(),\n});\n","import { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport { NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { isStandalone } from '../common/func.is-standalone';\n\nimport { MockBuilderPerformance } from './mock-builder.performance';\nimport { IMockBuilder } from './types';\n\nexport type MockBuilderParam = string | AnyDeclaration<any> | NgModuleWithProviders;\n\n/**\n * MockBuilder provides reach and simple interfaces of chain functions\n * to build desired mock environment for tests.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder\n */\nexport function MockBuilder(\n keepDeclaration?: MockBuilderParam | MockBuilderParam[] | null | undefined,\n itsModuleToMock?: MockBuilderParam | MockBuilderParam[] | null | undefined,\n): IMockBuilder;\n\nexport function MockBuilder(...args: Array<MockBuilderParam | MockBuilderParam[] | null | undefined>): IMockBuilder {\n const [keepDeclaration, itsModuleToMock] = args;\n\n const instance = new MockBuilderPerformance(args.length < 2 ? { export: true } : { dependency: true });\n\n if (keepDeclaration) {\n for (const declaration of flatten(keepDeclaration)) {\n instance.keep(declaration, {\n export: true,\n shallow: isStandalone(declaration),\n });\n }\n }\n if (itsModuleToMock) {\n for (const declaration of flatten(itsModuleToMock)) {\n instance.mock(declaration, declaration, {\n export: true,\n exportAll: true,\n });\n }\n }\n\n return instance;\n}\n","import { Type } from '../common/core.types';\nimport errorJestMock from '../common/error.jest-mock';\nimport funcGetName from '../common/func.get-name';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockedComponent } from '../mock-component/types';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport { MockedPipe } from '../mock-pipe/types';\n\n/**\n * MockDeclarations creates an array of mock declaration classes out of declarations passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockDeclarations(\n * Dep1Component,\n * Dep2Directive,\n * Dep3Pipe,\n * ),\n * });\n * ```\n */\nexport function MockDeclarations(...declarations: Array<Type<any>>): Array<Type<any>> {\n return declarations.map(MockDeclaration);\n}\n\n/**\n * MockDeclaration creates a mock declaration class out of an arbitrary declaration.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockDeclaration(Dep1Component),\n * MockDeclaration(Dep2Directive),\n * MockDeclaration(Dep3Pipe),\n * ],\n * });\n * ```\n */\nexport function MockDeclaration<T>(declaration: Type<T>): Type<MockedPipe<T> | MockedDirective<T> | MockedComponent<T>>;\n\nexport function MockDeclaration<T>(\n declaration: Type<T>,\n): Type<MockedPipe<T> | MockedDirective<T> | MockedComponent<T>> {\n if (isNgDef(declaration, 'p')) {\n return MockPipe(declaration);\n }\n if (isNgDef(declaration, 'c')) {\n return MockComponent(declaration);\n }\n if (isNgDef(declaration, 'd')) {\n return MockDirective(declaration);\n }\n\n errorJestMock(declaration);\n throw new Error(\n [\n 'MockDeclaration does not know how to mock',\n typeof declaration === 'function' ? funcGetName(declaration) : declaration,\n ].join(' '),\n );\n}\n","import coreReflectPipeResolve from '../common/core.reflect.pipe-resolve';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nconst generateTemplateAttrWrap = (prop: string, type: 'i' | 'o') => (type === 'i' ? `[${prop}]` : `(${prop})`);\n\nconst generateTemplateAttrWithParams = (prop: string, type: 'i' | 'o'): string => {\n let tpl = ` ${generateTemplateAttrWrap(prop, type)}=\"`;\n tpl += type === 'i' ? prop : `__ngMocksOutput('${prop}', $event)`;\n tpl += '\"';\n\n return tpl;\n};\n\nconst generateTemplateAttr = (bindings: null | undefined | any[], attr: any, type: 'i' | 'o') => {\n // unprovided params for inputs should render empty placeholders\n if (!bindings && type === 'o') {\n return '';\n }\n\n let mockTemplate = '';\n const keys = bindings ?? attr;\n for (const definition of attr) {\n const [property, alias] = definition.split(': ');\n mockTemplate +=\n keys.indexOf(alias || property) === -1 ? '' : generateTemplateAttrWithParams(alias || property, type);\n }\n\n return mockTemplate;\n};\n\nexport default (declaration: any, { selector, bindings, inputs, outputs }: any): string => {\n let mockTemplate = '';\n\n // istanbul ignore else\n if (typeof declaration === 'string') {\n mockTemplate = declaration;\n } else if (isNgDef(declaration, 'p') && bindings && bindings.indexOf('$implicit') !== -1) {\n mockTemplate = `{{ $implicit | ${coreReflectPipeResolve(declaration).name} }}`;\n } else if (selector) {\n mockTemplate += `<${selector}`;\n mockTemplate += generateTemplateAttr(bindings, inputs, 'i');\n mockTemplate += generateTemplateAttr(bindings, outputs, 'o');\n mockTemplate += `></${selector}>`;\n }\n\n return mockTemplate;\n};\n","import { Component, Directive } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport coreDefineProperty from '../common/core.define-property';\nimport { Type } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\n\nimport funcGenerateTemplate from './func.generate-template';\n\nconst generateWrapperOutput =\n (instance: any) =>\n (prop: keyof any, event: any): void => {\n if (typeof instance[prop] === 'function') {\n return instance[prop](event);\n }\n if (instance[prop] && typeof instance[prop] === 'object' && typeof instance[prop].emit === 'function') {\n return instance[prop].emit(event);\n }\n if (instance[prop] && typeof instance[prop] === 'object' && typeof instance[prop].next === 'function') {\n return instance[prop].next(event);\n }\n\n instance[prop] = event;\n };\n\nconst generateWrapperComponent = ({ bindings, options, inputs }: any) => {\n class MockRenderComponent {\n public constructor() {\n coreDefineProperty(this, '__ngMocksOutput', generateWrapperOutput(this));\n\n if (!bindings) {\n for (const input of inputs || []) {\n let value: any = null;\n helperDefinePropertyDescriptor(this, input, {\n get: () => value,\n set: (newValue: any) => (value = newValue),\n });\n }\n }\n }\n }\n Component(options)(MockRenderComponent);\n\n return MockRenderComponent;\n};\n\nconst generateWrapperDirective = ({ selector, options }: any) => {\n class MockRenderDirective {}\n Directive({\n selector,\n providers: options.providers,\n })(MockRenderDirective);\n\n return MockRenderDirective;\n};\n\nconst getCache = () => {\n const caches: Array<Type<any> & Record<'cacheKey', any[]>> = ngMocksUniverse.config.get('MockRenderCaches') ?? [];\n if (caches.length === 0) {\n ngMocksUniverse.config.set('MockRenderCaches', caches);\n }\n\n return caches;\n};\n\nconst checkCache = (caches: Array<Type<any> & Record<'cacheKey', any[]>>, cacheKey: any[]): undefined | Type<any> => {\n for (const cache of caches) {\n if (cache.cacheKey.length !== cacheKey.length) {\n continue;\n }\n let isValid = true;\n for (let i = 0; i < cacheKey.length; i += 1) {\n if (cache.cacheKey[i] !== cacheKey[i]) {\n isValid = false;\n break;\n }\n }\n if (isValid) {\n return cache;\n }\n }\n\n return undefined;\n};\n\nexport default (\n template: any,\n meta: Directive,\n bindings: undefined | null | any[],\n flags: Record<keyof any, any>,\n): Type<any> => {\n const caches = getCache();\n\n // nulls help to detect defaults\n const cacheKey = [\n template,\n ...(bindings ?? [null]),\n ...(flags.providers ?? [null]),\n ...(flags.viewProviders ?? [null]),\n ];\n let ctor = checkCache(caches, cacheKey);\n if (ctor) {\n return ctor;\n }\n\n const mockTemplate = funcGenerateTemplate(template, { ...meta, bindings });\n const options: Component = {\n providers: flags.providers,\n selector: 'mock-render',\n template: mockTemplate,\n viewProviders: flags.viewProviders,\n };\n\n ctor = generateWrapperComponent({ ...meta, bindings, options });\n coreDefineProperty(ctor, 'cacheKey', cacheKey);\n coreDefineProperty(ctor, 'tpl', mockTemplate);\n\n if (meta.selector && options.providers) {\n const dir = generateWrapperDirective({ ...meta, bindings, options });\n coreDefineProperty(ctor, 'providers', dir);\n }\n\n caches.unshift(ctor as any);\n caches.splice(ngMocksUniverse.global.get('mockRenderCacheSize') ?? coreConfig.mockRenderCacheSize);\n\n return ctor;\n};\n","import coreDefineProperty from '../common/core.define-property';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nconst createPropertyGet = (key: keyof any & string, reader: Record<keyof any, any>, source: Record<keyof any, any>) => {\n const handler = () => {\n if (typeof source[key] === 'function') {\n if (reader[`__ngMocks_${key}__origin`] !== source[key]) {\n const clone = helperMockService.createClone(source[key], reader, source);\n coreDefineProperty(reader, `__ngMocks_${key}`, clone);\n coreDefineProperty(reader, `__ngMocks_${key}__origin`, source[key]);\n }\n\n return reader[`__ngMocks_${key}`];\n }\n\n return source[key];\n };\n coreDefineProperty(handler, '__ngMocksProxy', true);\n\n return handler;\n};\n\nconst createPropertySet = (key: keyof any & string, reader: Record<keyof any, any>, source: Record<keyof any, any>) => {\n const handler = (newValue: any) => {\n if (reader[`__ngMocks_${key}`]) {\n reader[`__ngMocks_${key}`] = undefined;\n }\n if (reader[`__ngMocks_${key}__origin`]) {\n reader[`__ngMocks_${key}__origin`] = undefined;\n }\n source[key] = newValue;\n };\n coreDefineProperty(handler, '__ngMocksProxy', true);\n\n return handler;\n};\n\nconst extractAllKeys = (instance: object) => [\n ...helperMockService.extractPropertiesFromPrototype(Object.getPrototypeOf(instance)),\n ...helperMockService.extractMethodsFromPrototype(Object.getPrototypeOf(instance)),\n ...Object.keys(instance),\n];\n\nconst extractOwnKeys = (instance: object) => [...Object.getOwnPropertyNames(instance), ...Object.keys(instance)];\n\nexport default (\n reader: Record<keyof any, any>,\n source: Record<keyof any, any> | undefined,\n extra: string[],\n force = false,\n): void => {\n if (!source) {\n return;\n }\n coreDefineProperty(reader, '__ngMocks__source', source);\n const exists = extractOwnKeys(reader);\n const fields = [...extractAllKeys(source), ...extra];\n for (const key of fields) {\n if (!force && exists.indexOf(key) !== -1) {\n continue;\n }\n helperDefinePropertyDescriptor(reader, key, {\n get: createPropertyGet(key, reader, source),\n set: createPropertySet(key, reader, source),\n });\n exists.push(key);\n }\n};\n","import { DebugElement, Directive, InjectionToken } from '@angular/core';\nimport { getTestBed, TestBed } from '@angular/core/testing';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport { getInjection } from '../common/core.helpers';\nimport { AnyDeclaration, AnyType, Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport ngMocksStack from '../common/ng-mocks-stack';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { ngMocks } from '../mock-helper/mock-helper';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\nimport { MockService } from '../mock-service/mock-service';\n\nimport funcCreateWrapper from './func.create-wrapper';\nimport funcInstallPropReader from './func.install-prop-reader';\nimport funcReflectTemplate from './func.reflect-template';\nimport { IMockRenderFactoryOptions, MockedComponentFixture } from './types';\n\nexport interface MockRenderFactory<C = any, F extends keyof any = keyof C> {\n bindings: keyof F;\n configureTestBed: () => void;\n declaration: AnyType<never>;\n <T extends Record<F, any>>(params?: Partial<T>, detectChanges?: boolean): MockedComponentFixture<C, T>;\n}\n\nconst renderDeclaration = (fixture: any, template: any, params: any): void => {\n fixture.point =\n fixture.debugElement.children[0] &&\n fixture.debugElement.children[0].nativeElement.nodeName !== '#text' &&\n fixture.debugElement.children[0].nativeElement.nodeName !== '#comment'\n ? fixture.debugElement.children[0]\n : fixture.debugElement;\n if (isNgDef(template, 'd')) {\n helperDefinePropertyDescriptor(fixture.point, 'componentInstance', {\n get: () => ngMocks.get(fixture.point, template),\n });\n } else if (isNgDef(template, 'p')) {\n helperDefinePropertyDescriptor(fixture.point, 'componentInstance', {\n get: () => ngMocks.findInstance(fixture.point, template),\n });\n }\n tryWhen(!params, () => funcInstallPropReader(fixture.componentInstance, fixture.point.componentInstance, []));\n};\n\nconst renderInjection = (fixture: any, template: any, params: any): void => {\n let instance: any;\n try {\n instance = getInjection(template);\n } catch (error) {\n if (isNgDef(template, 'p')) {\n throw new Error(\n [\n `Cannot render ${funcGetName(template)}.`,\n 'Did you forget to set $implicit param, or add the pipe to providers?',\n 'https://ng-mocks.sudo.eu/guides/pipe',\n ].join(' '),\n );\n }\n throw error;\n }\n if (params) {\n ngMocks.stub(instance, params);\n }\n fixture.point = MockService(DebugElement, {\n childNodes: [],\n children: [],\n componentInstance: instance,\n nativeElement: MockService(HTMLElement),\n });\n funcInstallPropReader(fixture.componentInstance, fixture.point.componentInstance, [], true);\n};\n\nconst tryWhen = (flag: boolean, callback: () => void) => {\n if (!flag) {\n return;\n }\n try {\n // ivy throws Error: Expecting instance of DOM Element\n callback();\n } catch {\n // nothing to do\n }\n};\n\nconst fixtureMessage = [\n 'Forgot to flush TestBed?',\n 'MockRender cannot be used without a reset after TestBed.get / TestBed.inject / TestBed.createComponent and another MockRender in the same test.',\n 'If you want to mock a service before rendering, consider usage of MockRenderFactory or MockInstance.',\n 'To flush TestBed, add a call of ngMocks.flushTestBed() before the call of MockRender, or pass `reset: true` to MockRender options.',\n].join(' ');\n\nconst handleFixtureError = (e: any) => {\n const error = new Error(fixtureMessage);\n coreDefineProperty(error, 'parent', e);\n throw error;\n};\n\nconst flushTestBed = (flags: Record<string, any>): void => {\n const globalFlags = ngMocksUniverse.global.get('flags');\n const testBed: any = getTestBed();\n if (flags.reset || (!testBed._instantiated && !testBed._testModuleRef)) {\n ngMocks.flushTestBed();\n } else if (globalFlags.onTestBedFlushNeed !== 'throw' && (testBed._instantiated || testBed._testModuleRef)) {\n if (globalFlags.onTestBedFlushNeed === 'warn') {\n console.warn(fixtureMessage);\n }\n ngMocks.flushTestBed();\n }\n};\n\nconst generateFactoryInstall =\n (ctor: AnyType<any> & { providers?: AnyType<any> }, options: IMockRenderFactoryOptions) => () => {\n const testBed: TestBed & {\n _compiler?: {\n declarations?: Array<AnyType<any>>;\n };\n _declarations?: Array<AnyType<any>>;\n declarations?: Array<AnyType<any>>;\n } = getTestBed();\n // istanbul ignore next\n const existing = testBed._compiler?.declarations || testBed.declarations || testBed._declarations;\n if (!existing || existing.indexOf(ctor) === -1) {\n flushTestBed(options);\n try {\n const declarations: Array<AnyType<any>> = [];\n if (ctor.providers) {\n declarations.push(ctor.providers);\n }\n declarations.push(ctor);\n TestBed.configureTestingModule({\n declarations,\n });\n } catch (error) {\n handleFixtureError(error);\n }\n }\n };\n\nconst generateFactory = (\n componentCtor: Type<any> & { tpl?: string },\n bindings: undefined | null | string[],\n template: any,\n options: IMockRenderFactoryOptions,\n) => {\n const result = (params: any, detectChanges?: boolean) => {\n result.configureTestBed();\n const fixture: any = TestBed.createComponent(componentCtor);\n\n funcInstallPropReader(fixture.componentInstance, params ?? {}, bindings ?? []);\n coreDefineProperty(fixture, 'ngMocksStackId', ngMocksUniverse.global.get('bullet:stack:id'));\n\n if (detectChanges === undefined || detectChanges) {\n fixture.detectChanges();\n }\n\n if (\n typeof template === 'string' ||\n isNgDef(template, 'c') ||\n isNgDef(template, 'd') ||\n (componentCtor.tpl && isNgDef(template, 'p'))\n ) {\n renderDeclaration(fixture, template, params);\n } else {\n renderInjection(fixture, template, params);\n }\n\n return fixture;\n };\n result.declaration = componentCtor;\n result.bindings = bindings;\n result.configureTestBed = generateFactoryInstall(componentCtor, options);\n\n return result;\n};\n\n/**\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: InjectionToken<MComponent>,\n bindings?: undefined | null,\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, never>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: AnyType<MComponent>,\n bindings: undefined | null,\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, keyof MComponent>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent, TKeys extends keyof any>(\n template: AnyType<MComponent>,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent, TKeys extends keyof any = keyof any>(\n template: AnyType<MComponent>,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\n/**\n * Without params we should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: AnyType<MComponent>,\n): MockRenderFactory<MComponent, keyof MComponent>;\n\n/**\n * An empty string does not have point.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory(template: ''): MockRenderFactory<void, never>;\n\n/**\n * Without params we should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent = void>(template: string): MockRenderFactory<MComponent>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent = void, TKeys extends keyof any = keyof any>(\n template: string,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\nexport function MockRenderFactory<MComponent, TKeys extends string>(\n template: string | AnyDeclaration<MComponent>,\n bindings?: undefined | null | TKeys[],\n options: IMockRenderFactoryOptions = {},\n): any {\n funcImportExists(template, 'MockRender');\n\n const meta: Directive = typeof template === 'string' || isNgDef(template, 't') ? {} : funcReflectTemplate(template);\n const componentCtor: any = funcCreateWrapper(template, meta, bindings, options);\n const factory = generateFactory(componentCtor, bindings, template, options);\n if (ngMocksStack.current().level !== 'root' && options.configureTestBed !== false) {\n factory.configureTestBed();\n }\n\n return factory;\n}\n","import { Component, Directive } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\n\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { AnyType } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nconst registerTemplateMiddleware = (template: AnyType<any>, meta: Directive): void => {\n const child = extendClass(template);\n\n const alias = {\n provide: template,\n useExisting: child,\n };\n const providers = [...(meta.providers || []), alias];\n meta.providers = providers;\n\n if (isNgDef(template, 'c')) {\n Component(meta)(child);\n } else {\n Directive(meta)(child);\n }\n TestBed.configureTestingModule({\n declarations: [child],\n });\n\n // https://github.com/help-me-mom/ng-mocks/issues/1876\n // We need to apply overrides to our cloned declaration.\n try {\n const ngMocksOverrides: Map<any, any> = (TestBed as any).ngMocksOverrides;\n const { override } = ngMocksOverrides.get(template);\n const { set } = override;\n ngMocksOverrides.set(child, { set: meta });\n TestBed.overrideComponent(child, {\n set: {\n ...set,\n providers: [...set.providers, alias],\n },\n });\n } catch {\n // nothing to do\n }\n};\n\nexport default (template: AnyType<any>): Directive => {\n if (!isNgDef(template, 'c') && !isNgDef(template, 'd')) {\n return {};\n }\n\n const meta = { ...coreReflectDirectiveResolve(template) };\n\n if (meta.selector && /[\\s,[\\]]/.test(meta.selector)) {\n meta.selector = '';\n }\n\n if (!meta.selector) {\n // istanbul ignore next\n meta.selector = (TestBed as any).ngMocksSelectors?.get(template) || '';\n if (!meta.selector) {\n meta.selector = `ng-mocks-${template.name}`;\n registerTemplateMiddleware(template, meta);\n // istanbul ignore else\n if ((TestBed as any).ngMocksSelectors) {\n (TestBed as any).ngMocksSelectors.set(template, meta.selector);\n }\n }\n }\n\n return meta;\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\n\nimport { MockRenderFactory } from './mock-render-factory';\nimport { IMockRenderOptions, MockedComponentFixture } from './types';\n\n/**\n * This signature of MockRender lets create an empty fixture.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender(): MockedComponentFixture<void, void>;\n\n/**\n * This signature of MockRender lets create a fixture to access a token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(\n template: InjectionToken<MComponent>,\n params?: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, void>;\n\n/**\n * This signature of MockRender lets create a fixture to access a component without parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(\n template: AnyType<MComponent>,\n params: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, MComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends object>(\n template: AnyType<MComponent>,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends object = Record<keyof any, any>>(\n template: AnyType<MComponent>,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender without params should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(template: AnyType<MComponent>): MockedComponentFixture<MComponent, MComponent>;\n\n/**\n * This signature of MockRender without params should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void>(template: string): MockedComponentFixture<MComponent>;\n\n/**\n * This signature of MockRender lets create a fixture based on string template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void>(\n template: string,\n params: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, void>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a string based template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void, TComponent extends Record<keyof any, any> = Record<keyof any, any>>(\n template: string,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a string based template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends Record<keyof any, any> = Record<keyof any, any>>(\n template: string,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\nexport function MockRender<MComponent, TComponent extends Record<keyof any, any>>(\n template?: string | AnyDeclaration<MComponent>,\n params?: TComponent,\n flags: boolean | IMockRenderOptions = true,\n): any {\n const tpl = arguments.length === 0 ? '' : template;\n const bindings = params && typeof params === 'object' ? Object.keys(params) : params;\n const options = typeof flags === 'boolean' ? { detectChanges: flags } : { ...flags };\n const factory = (MockRenderFactory as any)(tpl, bindings, options);\n\n return factory(params, options.detectChanges);\n}\n"],"names":["flags","mockRenderCacheSize","neverMockModule","neverMockProvidedFunction","neverMockToken","onMockBuilderMissingDependency","onMockInstanceRestoreNeed","onTestBedFlushNeed","dependencies","instance","property","value","enumerable","configurable","writable","getTestBedInjection","token","getInjection","testBed","getTestBed","inject","get","flatten","values","result","Array","isArray","push","mapKeys","set","forEach","_","mapValues","destination","add","mapEntries","key","extractDependencyArray","deps","flag","name","ngMetadataName","undefined","extractDependency","dep","extendClassicClass","base","child","glb","ngMocksParent","eval","ngMocksResult","MockMiddleware","extendClass","parameters","length","def","NG_MOCKS","InjectionToken","__ngMocksSkip","NG_MOCKS_TOUCHES","NG_MOCKS_OVERRIDES","NG_MOCKS_GUARDS","NG_MOCKS_INTERCEPTORS","NG_MOCKS_ROOT_PROVIDERS","window","g","badCharacters","RegExp","_desc","constructor","replace","provider","provide","isNgInjectionToken","globalMap","ngMocksUniverse","global","has","Map","builtDeclarations","builtProviders","cacheDeclarations","cacheProviders","config","configInstance","Set","touches","getOverrides","getDefaults","getConfigMock","defValue","getResolution","getBuildDeclaration","mode","replacement","hasBuildDeclaration","isExcludedDef","resolution","isProvidedDef","encapsulation","__ngMocksProxy","descriptor","Object","defineProperty","override","style","correctInstance","applyOverrides","skipProps","getOwnPropertyNames","desc","indexOf","getOwnPropertyDescriptor","callbacks","overloads","stub","service","bindFrom","bindTo","mock","args","apply","this","prop","sourceDesc","sanitizerMethods","extraMethods","DomSanitizer","Sanitizer","prototype","method","getPrototypeOf","mockFunction","mockName","original","func","customMockFunction","val","setValue","newSetValue","newValue","handleItemKeys","handleItemGetGuards","section","guards","guard","handleSection","replaceWithMocks","updated","callback","valueItem","handleArray","keys","handleItem","setPrototypeOf","ngMockshelperMockService","registerMockFunction","createClone","createMockFromPrototype","methods","properties","definePropertyDescriptor","extractMethodsFromPrototype","extractPropertiesFromPrototype","extractPropertyDescriptor","accessType","parseArgs","detectedMockName","createName","mockDef","generateMockDef","__ngMocks","__ngMocksSet","__ngMocksGet","resolveProvider","useFactory","areEqualDefs","providerDiffers","defDiffers","a","b","anyDiffers","resolutions","changed","multi","change","parseProvider","useExisting","mockOf","i","toString","isSuitableProvider","useValue","interceptor","useClass","excludeInterceptors","isPreconfiguredDependency","existingMock","createFromResolution","createPredefinedMockProvider","createMockProvider","applyCallbackToken","init","overrides","Injector","injector","configGlobal","inst","applyCallback","normalizePrimitivesMap","handleProvider","mockProvider","check","normalizePrimitives","createValueProvider","createClassProvider","isNeverMockFunction","isNeverMockToken","existing","applyMissingClassProperties","createFactoryProvider","__annotations__","__parameters__","isAngularClass","proto","match","cls","clsCode","codePointAt","regEx","guessClass","mockVariableMap","prefix","MockService","mockNamePrefix","createMock","mockVariable","pushDecorator","decorators","decorator","deleteIndex","splice","getAllKeys","props","parsePropDecoratorsParserFactoryProp","declaration","unshift","parsePropDecoratorsParserInput","parsePropDecoratorsParserOutput","parsePropDecoratorsParserFactoryQuery","isViewQuery","queries","selector","parsePropDecoratorsParserContent","parsePropDecoratorsParserView","parsePropDecoratorsMap","ContentChild","ContentChildren","HostBinding","host","hostBindings","HostListener","hostListeners","Input","Output","ViewChild","ViewChildren","parsePropMetadataParserFactoryProp","bindingPropertyName","parsePropMetadataParserInput","parsePropMetadataParserOutput","parsePropMetadataParserFactoryQueryChild","read","static","parsePropMetadataParserContentChild","parsePropMetadataParserViewChild","parsePropMetadataParserFactoryQueryChildren","descendants","emitDistinctChangesOnly","parsePropMetadataMap","hostPropertyName","eventName","buildDeclaration","inputs","input","outputs","output","reflectionCapabilities","parse","hasOwnProperty","call","__ngMocksDeclarations","parent","parentDeclarations","attributes","propDecorators","createDeclarations","attributeName","parseParameters","annotation","parseAnnotations","type","parseDecorators","parsePropDecorators","__prop__metadata__","parsePropMetadata","Directive","Component","y","x","module","exports","__WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__","ChangeDetectorRef","ComponentFactoryResolver","DebugElement","ElementRef","EventEmitter","NgModule","Optional","Pipe","QueryList","Self","TemplateRef","ViewContainerRef","__webpack_require__","d","__WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__","TestBed","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","definition","o","globalThis","Function","e","obj","r","Symbol","toStringTag","stackRoot","id","level","stack","listenersPush","listenersPop","providers","mocks","isNgModuleDefWithProviders","ngModule","isNgType","offset","isNgDef","ngType","isModule","isModuleCheck","isComponent","isComponentCheck","isDirective","isDirectiveCheck","isPipe","isPipeCheck","isInjectable","isInjectableCheck","__WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__","AbstractControl","DefaultValueAccessor","FormControl","FormControlDirective","NG_ASYNC_VALIDATORS","NG_VALIDATORS","NG_VALUE_ACCESSOR","NgControl","NgModel","_isMockFunction","Error","join","jest","arg","__ngMocksConfig","applyProxy","proxy","storage","MockControlValueAccessorProxy","target","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","writeValue","MockValidatorProxy","registerOnValidatorChange","validate","control","MockAsyncValidatorProxy","Promise","resolve","installValidator","validators","validator","__ngMocksCtor","isValidator","Mock","ngControl","queryScanKeys","valueAccessor","setControlValueAccessor","setValueAccessor","isControlValueAccessor","installValueAccessor","_rawValidators","_rawAsyncValidators","applyNgValueAccessor","mockOutputs","split","applyOutputs","applyPrototype","applyMethods","applyProps","LegacyControlValueAccessor","__simulateChange","__simulateTouch","__simulateValidatorChange","source","configInput","map","isInternalKey","cloneVcrQuery","query","processProvider","sourceType","mockType","processTokens","ownUseExisting","__forward_ref__","processOwnUseExisting","meta","params","options","exportAs","standalone","viewProviders","imports","buildConfig","exclude","alias","final","scanKeys","generateFinalQueries","funcName","getType","isMockNgDef","component","cacheFlag","hasNgMocksDepsResolution","viewChildArgs","viewChildTemplate","isTemplateRefQuery","parts","contentChildSelector","indices","mixRenderApplyContext","view","context","contextKey","markForCheck","ComponentMockBase","changeDetector","cdr","super","$implicit","variables","vcr","detectChanges","mixRenderPrepareVcr","templates","toArray","views","index","templateRef","createEmbeddedView","mixRenderHandleViews","viewContainer","destroy","viewIndex","move","mixRenderReorderViews","mixHideHandler","mixHide","ngAfterContentInit","__rendered","render","block","__render","decorateClass","template","MockComponents","components","MockComponent","DirectiveMockBase","element","__ngMocksInstall","ngOnInit","clear","directive","MockDirectives","directives","MockDirective","MockPipes","pipes","pipe","MockPipe","transform","getMockClass","MockModule","ngModuleProviders","extractModuleAndProviders","toggleSkipMockFlag","isRootModule","flagMock","flagNever","flagKeep","flagReplace","preProcessFlags","mockModule","mockModuleDef","ngModuleDef","getMockModuleDef","detectMockModule","getExistingMockModule","mockModuleProviders","getMockProviders","generateReturn","postProcessFlags","processDefMap","createResolveExisting","detectedDef","createResolveExcluded","processDef","createResolveWithProviders","createResolve","createResolveProvider","exported","flatToExisting","data","filter","item","resolveDefForExport","correctExports","moduleConfig","export","exportAll","skipAddExports","hasResolver","configureProcessMetaKeys","cachePipe","skipMarkProviders","processMeta","declarations","addExports","skipMock","nativeElement","nativeNode","debugElement","fixtures","_activeFixtures","findDebugElement","el","defaultNotFoundValue","sel","notFoundValue","__WEBPACK_EXTERNAL_MODULE__angular_platform_browser_bc6fa964__","By","getSourceOfMock","node","nodeName","_tNode","elDef","defaultInjector","getScanViewRefRootNodes","getVcr","vrIndex","vr","rnIndex","rootNodes","childNodes","rootNode","scanViewRef","isDirect","children","childNode","childNodeParent","start","end","expected","currentParent","childElDef","nestedCheck","includeTextNode","isValidValue","getMeta","publicProviders","requiredAttributes","bindings","binding","nonMinifiedName","nodeIndex","collectAttributesClassic","expectedAttributes","attr","collectAttributesIvy","attrs","step","selectors","providerTokens","collectSelectors","attribute","attrIndex","attrProp","_lView","detectInIvy","nodes","detectInClassic","references","regExp","isCrawlByAttribute","isCrawlByAttributeValue","isCrawlById","slice","isCrawlByTagName","trim","isCrawlByDeclaration","isMockControlValueAccessor","innerHTML","preventBubble","eventCtor","Event","event","CustomEvent","initParams","bubbles","cancelable","eventObj","document","createEvent","initCustomEvent","keyMap","alt","altKey","code","location","which","arrowdown","arrowleft","arrowright","arrowup","backspace","ctrlKey","enter","esc","metaKey","shift","shiftKey","space","tab","f","getCode","char","toUpperCase","dot","eventPayload","Math","max","payload","keyData","applyPayload","disabled","toEventObj","dispatchEvent","message","formControlDirective","form","ngModel","detectGatherFlag","gather","parentNode","isNotObject","shouldBeScanned","scanned","scan","normalize","gatherDefault","nodesLength","bindingStartIndex","detectContext","current","__ngContext__","rootView","detectContextByIndex","parentInjector","getParentWithInjector","parentInstance","_debugContext","lView","queryAll","handlePrimitives","html","outer","format","innerOuter","nodeValue","textContent","wholeText","outerHTML","getElementValue","calls","defaultMethods","factory","backup","beforeEach","console","afterEach","pop","propName","error","delete","hooks","after","before","moduleDef","resetTestingModule","_instantiated","_moduleFactory","_testModuleRef","idAdd","bulletStack","idRemove","activeFixtures","active","ngMocksStackId","resetFixtures","root","skipDef","skip","createMetaHandler","optional","typeMap","handleDeclaration","bucket","keep","providerDef","resolveMap","skipDestruction","handleModuleWithProviders","toMock","handleDestructuring","resolveHandler","attrMatches","v","label","attrDef","detectAttribute","isRightTemplate","localVcr","localValue","isExpectedTemplate","findDeep","entryPoint","__template","__vcr","handleDirective","scanValue","scanVcr","getValVcr","param","detector","limit","flagNames","autoSpy","action","jasmine","createSpy","methodName","update","emit","handleKnown","listeners","some","listener","hasListener","triggerInput","click","crawl","defaultConfig","defaultMock","faster","idAll","idEach","beforeAll","afterAll","find","findAll","findInstance","fixture","findInstances","elements","findTemplateRef","findTemplateRefs","flushTestBed","formatHtml","formatText","globalExclude","globalKeep","globalMock","globalReplace","fail","globalWipe","guts","protoKeep","protoMock","protoExclude","k","generateDataWithUniverse","generateData","createMeta","hide","tpl","elementRef","ignoreOnConsole","reset","reveal","revealAll","stubMember","throwOnConsole","touch","markAsTouched","triggerTouch","trigger","ngMocks","defaultValue","MockProviders","MockProvider","providedIn","ngInjectableDef","applyOverride","generateTouches","local","__ngMocksTouches","applyPlatformOverrideDef","applyPlatformOverridesBasedOnProvidedIn","knownTouches","size","_providers","_compiler","defineTouches","applyPlatformOverridesBasedOnDefaults","applyPlatformOverrides","ngMocksOverrides","applyNgMocksOverrides","isMockedNgDefOf","getMockedNgDefOf","getMock","isMockOf","ngMocksOverridesInstalled","ngElementId","__NG_ELEMENT_ID__","ngElementIdArgs","vcrInstance","createComponent","createComponentArgs","viewContainerInstall","install","isMockValidator","currentStack","state","mockInstance","universeConfig","checkReset","checkCollect","MockInstance","accessor","parseMockInstanceArgs","mockInstances","mockInstanceConfig","MockReset","showError","globalFlags","errorMessage","warn","remember","restore","scope","getNgType","isStandalone","MockBuilderStash","replaceDef","isIvy","EntryComponentsModule","componentFactoryResolver","originCFR","resolveComponentFactory","__WEBPACK_EXTERNAL_MODULE__angular_common_d12e0fe1__","DOCUMENT","skipByResolution","skipResolution","skipSystem","touched","detectForwardRed","handleDef","defProviders","extendedDef","loModule","loProviders","funcExtractDeps","field","precise","createInstance","normaliseModule","generateProviderValue","prototypeKeys","sourceKeys","objectsDiffer","dependency","compare","areEqualProviderDefs","thisDef","prototypeDef","prototypeDefs","thisDefs","MockBuilderPerformance","configDefault","beforeCC","configDef","excludeDef","keepDef","stash","beforeCompileComponents","build","combineParams","forgotten","shallow","deleteTouch","loDef","buckets","concat","parametersMap","parameter","entryComponents","entryModule","patchedOriginal","catch","reject","then","wipe","finally","setConfigDef","a1","a2","defaultMockValue","setDefValue","fulfill","promise","compileComponents","equalsTo","clone","cloneConfig","MockBuilder","keepDeclaration","itsModuleToMock","MockDeclarations","MockDeclaration","generateTemplateAttrWithParams","generateTemplateAttrWrap","generateTemplateAttr","mockTemplate","generateWrapperComponent","MockRenderComponent","next","createPropertyGet","reader","handler","createPropertySet","extractAllKeys","extra","force","exists","fields","fixtureMessage","generateFactory","componentCtor","configureTestBed","componentInstance","point","tryWhen","renderDeclaration","HTMLElement","renderInjection","ctor","_declarations","handleFixtureError","generateFactoryInstall","MockRenderFactory","test","registerTemplateMiddleware","caches","getCache","cacheKey","cache","isValid","checkCache","dir","MockRenderDirective","generateWrapperDirective","MockRender","arguments"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.define-property.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.helpers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.parameters-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.tokens.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-global.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-injection-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-universe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.stub-member.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.stub.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance-apply.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.create-clone.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.define-property-descriptor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-methods-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-properties-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.extract-property-descriptor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock-function.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.replace-with-mocks.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.mock-service.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.create-mock-from-prototype.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.resolve-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/helper.use-factory.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-func.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/mock-service.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-class.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-service/check.is-inst.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/resolve/collect-declarations.ts","webpack://ng-mocks/external module \"@angular/core\"","webpack://ng-mocks/external module \"@angular/core/testing\"","webpack://ng-mocks/webpack/bootstrap","webpack://ng-mocks/webpack/runtime/define property getters","webpack://ng-mocks/webpack/runtime/global","webpack://ng-mocks/webpack/runtime/hasOwnProperty shorthand","webpack://ng-mocks/webpack/runtime/make namespace object","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-stack.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/func.extract-tokens.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-module-def-with-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-type.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-ng-def.ts","webpack://ng-mocks/external module \"@angular/forms\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.form.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-jest-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.jest-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.body-catch.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.empty-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/error.missing-decorators.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.directive-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock-control-value-accessor-proxy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/mock-control-value-accessor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.inputs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.queries.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/to-existing-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/to-factory-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/clone-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/decorate-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/decorate.outputs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.import-exists.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-ng-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock/get-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/render/generate-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/render/get-key.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-component/mock-component.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-directive/mock-directive.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.pipe-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-pipe/mock-pipe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.module-resolve.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mock-module.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/create-resolvers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mark-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-module/mock-ng-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-override-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-debug-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-find-args-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-fixture.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-last-fixture.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/func.parse-find-args.ts","webpack://ng-mocks/external module \"@angular/platform-browser\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-source-of-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/func.parse-find-term.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/mock-helper.find.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-text-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-compare.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-get-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.injector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/el-def-get-parent.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check-children.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check-parent.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/nested-check.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.crawl.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-find-args.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.parse-provider-tokens-directives.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.get-public-provider-keys.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.parse-inputs-and-requires-attributes.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-selectors-from-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-attribute.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-attribute-in-selectors.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-attribute-value.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-id.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-tag-name-in-selectors.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/detect-crawler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/crawl-by-tag-name.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/func.is-valid-reveal-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.reveal.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-control-value-accessor.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-html-element.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.event.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.trigger.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/func.get-vca.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/mock-helper.change.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/cva/mock-helper.touch.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-element.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-scan.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-ivy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-standard.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.get-from-node-injector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/func.is-valid-find-instance-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/mock-helper.find-instance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find/mock-helper.find-all.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/format-handler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/handle-array.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/handle-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/is-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/mock-helper.format-html.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/format/mock-helper.format-text.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.auto-spy.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console-ignore.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.console-throw.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.default-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.faster-install.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.flush-test-bed.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.faster.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.get.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/func.global-prepare.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.guts.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.attributes.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/func.find-deep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/func.parse-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/detect-crawler.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/detect-template-ref.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/func.is-valid-template-ref-selector.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/mock-helper.find-template-ref.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.object.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/events/mock-helper.click.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.default-config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/find-instance/mock-helper.find-instances.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/template-ref/mock-helper.find-template-refs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-exclude.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-keep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-mock.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-replace.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.global-wipe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/mock-helper.hide.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.input.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.output.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/render/mock-helper.render.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.reset.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/crawl/mock-helper.reveal-all.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-helper/mock-helper.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-provider/mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.meta.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/core.reflect.provided-in.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/ng-mocks-global-overrides.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mocked-ng-def-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-mocked-ng-def-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-of.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-mock-validator.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-instance/mock-instance-forgot-reset.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.get-ng-type.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.is-standalone.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder-stash.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/add-requested-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-override.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-entry-components.ts","webpack://ng-mocks/external module \"@angular/common\"","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-dep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/add-def-to-root-provider-parameters.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/check-root-provider-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/extract-dep.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-provided-in-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/skip-root-provider-dependency.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-ng-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-module.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/common/func.extract-deps.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/try-mock-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/try-mock-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/parse-provider.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.promise.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-render-defs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-variables.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-config-params.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/equal-render-configs.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-maps.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/are-equal-sets.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/required-metadata.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.performance.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-keep-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-replace-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-exclude-def.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-mock-declarations.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/init-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/handle-root-providers.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-root-provider-parameters.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/get-root-providers-data.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/apply-platform-modules.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-touches-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/create-ng-mocks-overrides-token.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/promise/parse-mock-arguments.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/performance/get-empty-config.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-builder/mock-builder.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-declaration/mock-declaration.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.generate-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.create-wrapper.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.install-prop-reader.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/mock-render-factory.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/func.reflect-template.ts","webpack://ng-mocks/./libs/ng-mocks/src/lib/mock-render/mock-render.ts"],"sourcesContent":["export default {\n flags: ['cacheModule', 'cacheComponent', 'cacheDirective', 'cacheProvider', 'correctModuleExports'],\n mockRenderCacheSize: 25,\n neverMockModule: ['ApplicationModule', 'CommonModule', 'BrowserModule'],\n neverMockProvidedFunction: [\n 'DomRendererFactory2',\n 'EventManager',\n 'Injector', // ivy only\n 'RendererFactory2',\n\n // https://github.com/help-me-mom/ng-mocks/issues/538\n 'Sanitizer',\n 'DomSanitizer',\n\n // ApplicationModule, A14 made them global at root level\n 'ApplicationInitStatus',\n 'ApplicationRef',\n 'Compiler',\n 'IterableDiffers',\n 'KeyValueDiffers',\n ],\n neverMockToken: [\n 'InjectionToken Set Injector scope.', // INJECTOR_SCOPE // ivy only\n 'InjectionToken EventManagerPlugins', // EVENT_MANAGER_PLUGINS\n 'InjectionToken HammerGestureConfig', // HAMMER_GESTURE_CONFIG\n\n // ApplicationModule, A14 made them global at root level\n 'InjectionToken AppId', // APP_ID\n 'InjectionToken DefaultCurrencyCode', // DEFAULT_CURRENCY_CODE\n 'InjectionToken LocaleId', // LOCALE_ID\n 'InjectionToken SCHEDULER_TOKEN', // SCHEDULER\n ],\n onMockBuilderMissingDependency: 'throw',\n onMockInstanceRestoreNeed: 'warn',\n onTestBedFlushNeed: 'warn',\n\n dependencies: [\n 'declarations',\n 'entryComponents',\n 'bootstrap',\n 'providers',\n 'viewProviders',\n 'imports',\n 'exports',\n ] as const,\n};\n","import helperMockService from '../mock-service/helper.mock-service';\n\nexport default (instance: any, property: keyof any, value: any, enumerable = false) => {\n helperMockService.definePropertyDescriptor(instance, property, {\n configurable: true,\n enumerable,\n value,\n writable: true,\n });\n};\n","import { getTestBed } from '@angular/core/testing';\n\nimport coreDefineProperty from './core.define-property';\nimport coreReflectParametersResolve from './core.reflect.parameters-resolve';\nimport { AnyDeclaration, AnyType, Type } from './core.types';\nimport funcGetGlobal from './func.get-global';\nimport funcGetName from './func.get-name';\n\n/**\n * It will be removed from public interface with the next release: A14\n * Use ngMocks.get(token) instead.\n *\n * @deprecated\n * @internal\n */\nexport const getTestBedInjection = <I>(token: AnyDeclaration<I>): I | undefined => {\n try {\n // istanbul ignore next\n return getInjection(token);\n } catch {\n return undefined;\n }\n};\n\n/**\n * It will be removed from public interface with the next release: A14\n *\n * @deprecated\n * @internal\n */\nexport const getInjection = <I>(token: AnyDeclaration<I>): I => {\n const testBed: any = getTestBed();\n\n // istanbul ignore next\n return testBed.inject ? testBed.inject(token) : testBed.get(token);\n};\n\nexport const flatten = <T>(values: T | T[], result: T[] = []): T[] => {\n if (Array.isArray(values)) {\n for (const value of values) {\n flatten(value, result);\n }\n } else {\n result.push(values);\n }\n\n return result;\n};\n\nexport const mapKeys = <T>(set: Map<T, any>): T[] => {\n const result: T[] = [];\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((_, value: T) => result.push(value));\n\n return result;\n};\n\nexport const mapValues = <T>(set: { forEach(a1: (value: T) => void): void }, destination?: Set<T>): T[] => {\n const result: T[] = [];\n if (destination) {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T) => {\n destination.add(value);\n });\n } else {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T) => {\n result.push(value);\n });\n }\n\n return result;\n};\n\nexport const mapEntries = <K, T>(set: Map<K, T>, destination?: Map<K, T>): Array<[K, T]> => {\n const result: Array<[K, T]> = [];\n\n if (destination) {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T, key: K) => destination.set(key, value));\n } else {\n // eslint-disable-next-line unicorn/no-array-for-each\n set.forEach((value: T, key: K) => result.push([key, value]));\n }\n\n return result;\n};\n\nconst extractDependencyArray = (deps: any[], set: Set<any>): void => {\n for (const flag of deps) {\n const name = flag && typeof flag === 'object' ? flag.ngMetadataName : undefined;\n if (name === 'Optional' || name === 'SkipSelf' || name === 'Self') {\n continue;\n }\n set.add(flag);\n }\n};\n\n// Accepts an array of dependencies from providers, skips injections flags,\n// and adds the providers to the set.\nexport const extractDependency = (deps: any[], set?: Set<any>): void => {\n if (!set) {\n return;\n }\n for (const dep of deps) {\n if (!Array.isArray(dep)) {\n set.add(dep);\n continue;\n }\n extractDependencyArray(dep, set);\n }\n};\n\nexport const extendClassicClass = <I>(base: AnyType<I>): Type<I> => {\n let child: any;\n const glb = funcGetGlobal();\n\n // First we try to eval es2015 style and if it fails to use es5 transpilation in the catch block.\n // The next step is to respect constructor parameters as the parent class via jitReflector.\n glb.ngMocksParent = base;\n // istanbul ignore next\n try {\n eval(`\n var glb = typeof window === 'undefined' ? global : window;\n class MockMiddleware extends glb.ngMocksParent {}\n glb.ngMocksResult = MockMiddleware\n `);\n child = glb.ngMocksResult;\n } catch {\n class MockMiddleware extends glb.ngMocksParent {}\n child = MockMiddleware;\n }\n glb.ngMocksParent = undefined;\n\n return child;\n};\n\nexport const extendClass = <I>(base: AnyType<I>): Type<I> => {\n const child: Type<I> = extendClassicClass(base);\n coreDefineProperty(child, 'name', `MockMiddleware${funcGetName(base)}`, true);\n\n const parameters = coreReflectParametersResolve(base);\n if (parameters.length > 0) {\n coreDefineProperty(child, 'parameters', [...parameters]);\n }\n\n return child;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nexport default (def: any): any[] => {\n const declaration = collectDeclarations(def);\n\n return declaration.parameters ?? [];\n};\n","import { InjectionToken } from '@angular/core';\nimport { MetadataOverride } from '@angular/core/testing';\n\nimport { AnyType } from './core.types';\n\n/**\n * NG_MOCKS token is a map from a declaration to its mock copy.\n *\n * @internal\n *\n * ```ts\n * const MockClass = TestBed.inject(NG_MOCKS).get(RealClass);\n * ```\n */\nexport const NG_MOCKS = new InjectionToken<Map<any, any>>('NG_MOCKS');\n(NG_MOCKS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_TOUCHES token is a set of all touched declarations during mock process.\n *\n * @internal\n *\n * ```ts\n * const touched = TestBed.inject(NG_MOCKS_TOUCHES).has(RealClass);\n * ```\n */\nexport const NG_MOCKS_TOUCHES = new InjectionToken<Set<any>>('NG_MOCKS_TOUCHES');\n(NG_MOCKS_TOUCHES as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_OVERRIDES token contains overrides for:\n * - TestBed.overrideModule\n * - TestBed.overrideComponent\n * - TestBed.overrideDirective\n * - TestBed.overrideProvider\n *\n * It is used when there is no way to provide a mock copy and an override is required.\n * For example, if we want to keep a component, but to override one of its local providers.\n *\n * @internal\n */\nexport const NG_MOCKS_OVERRIDES = new InjectionToken<Map<AnyType<any>, MetadataOverride<any>>>('NG_MOCKS_OVERRIDES');\n(NG_MOCKS_OVERRIDES as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_GUARDS token influences on provided guards in MockBuilder.\n * More info by the links below.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_guards-token\n * @see https://ng-mocks.sudo.eu/guides/routing-guard\n */\nexport const NG_MOCKS_GUARDS = new InjectionToken<void>('NG_MOCKS_GUARDS');\n(NG_MOCKS_GUARDS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_INTERCEPTORS token influences on provided interceptors in MockBuilder.\n * More info by the links below.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_interceptors-token\n * @see https://ng-mocks.sudo.eu/guides/http-interceptor\n */\nexport const NG_MOCKS_INTERCEPTORS = new InjectionToken<void>('NG_MOCKS_INTERCEPTORS');\n(NG_MOCKS_INTERCEPTORS as any).__ngMocksSkip = true;\n\n/**\n * NG_MOCKS_ROOT_PROVIDERS token influences on root providers in MockBuilder,\n * which aren't provided in specified modules.\n * It helps to mock or keep them automatically.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder#ng_mocks_root_providers-token\n */\nexport const NG_MOCKS_ROOT_PROVIDERS = new InjectionToken<void>('NG_MOCKS_ROOT_PROVIDERS');\n(NG_MOCKS_ROOT_PROVIDERS as any).__ngMocksSkip = true;\n","export default (): Record<keyof any, any> => {\n // istanbul ignore if\n if (typeof window === 'undefined') {\n return global;\n }\n\n return window;\n};\n","const badCharacters = new RegExp('[^0-9a-z]+', 'mgi');\n\nexport default (value: any): string => {\n let result: string | undefined;\n\n if (typeof value === 'function' && value.name) {\n result = value.name;\n } else if (typeof value === 'function') {\n result = 'arrowFunction';\n } else if (typeof value === 'object' && value && value.ngMetadataName === 'InjectionToken') {\n result = value._desc;\n } else if (typeof value === 'object' && value && typeof value.constructor === 'function') {\n result = value.constructor.name;\n }\n\n result ||= 'unknown';\n\n return result.replace(badCharacters, '_');\n};\n","export default (provider: any): any => {\n return provider && typeof provider === 'object' && provider.provide ? provider.provide : provider;\n};\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Checks whether a variable is an Angular token.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgInjectionToken\n *\n * ```ts\n * isNgInjectionToken(APP_ID); // returns true\n * isNgInjectionToken(arbitraryVariable); // returns false\n * ```\n */\nexport const isNgInjectionToken = (token: any): token is InjectionToken<any> =>\n token && typeof token === 'object' && token.ngMetadataName === 'InjectionToken';\n","import { IMockBuilderConfig } from '../mock-builder/types';\n\nimport coreConfig from './core.config';\nimport { AnyDeclaration } from './core.types';\nimport funcGetGlobal from './func.get-global';\nimport funcGetName from './func.get-name';\n\nconst globalMap = (key: string) => () => {\n if (!ngMocksUniverse.global.has(key)) {\n ngMocksUniverse.global.set(key, new Map());\n }\n\n return ngMocksUniverse.global.get(key);\n};\n\ninterface NgMocksUniverse {\n builtDeclarations: Map<any, any>;\n builtProviders: Map<any, any>;\n cacheDeclarations: Map<any, any>;\n cacheProviders: Map<any, any>;\n config: Map<any, any>;\n configInstance: Map<any, any>;\n flags: Set<string>;\n getBuildDeclaration: (def: any) => any | undefined;\n getConfigMock: () => Map<any, IMockBuilderConfig>;\n getDefaults: () => Map<any, ['mock' | 'keep' | 'replace' | 'exclude', any?]>;\n getLocalMocks: () => Array<[any, any]>;\n getOverrides: () => Map<any, any>;\n getResolution: (def: any) => undefined | 'mock' | 'keep' | 'replace' | 'exclude';\n global: Map<any, any>;\n hasBuildDeclaration: (def: any) => boolean;\n isExcludedDef: (def: any) => boolean;\n isProvidedDef: (def: any) => boolean;\n touches: Set<AnyDeclaration<any> | string>;\n}\n\nfuncGetGlobal().ngMocksUniverse = funcGetGlobal().ngMocksUniverse || {};\nconst ngMocksUniverse: NgMocksUniverse = funcGetGlobal().ngMocksUniverse;\n\nngMocksUniverse.builtDeclarations = new Map();\nngMocksUniverse.builtProviders = new Map();\nngMocksUniverse.cacheDeclarations = new Map();\nngMocksUniverse.cacheProviders = new Map();\nngMocksUniverse.config = new Map();\nngMocksUniverse.configInstance = new Map();\nngMocksUniverse.flags = new Set(coreConfig.flags);\nngMocksUniverse.global = new Map();\nngMocksUniverse.touches = new Set();\n\nngMocksUniverse.global.set('flags', {\n // @deprecated and will be changed in A13 to 'throw'\n onMockBuilderMissingDependency: coreConfig.onMockBuilderMissingDependency,\n // @deprecated and will be changed in A13 to 'throw'\n onMockInstanceRestoreNeed: coreConfig.onMockInstanceRestoreNeed,\n // @deprecated and will be changed in A13 to 'throw'\n onTestBedFlushNeed: coreConfig.onTestBedFlushNeed,\n});\n\nngMocksUniverse.getOverrides = globalMap('overrides');\nngMocksUniverse.getDefaults = globalMap('defaults');\nngMocksUniverse.getConfigMock = globalMap('configMock');\n\nconst getDefaults = (def: any): [] | ['mock' | 'keep' | 'replace' | 'exclude', any?] => {\n {\n const defValue = ngMocksUniverse.getDefaults().get(def);\n if (defValue) {\n return defValue;\n }\n }\n\n {\n const defValue = typeof def === 'function' ? ngMocksUniverse.getDefaults().get(`@${funcGetName(def)}`) : undefined;\n if (defValue) {\n return defValue;\n }\n }\n\n return [];\n};\n\nngMocksUniverse.getResolution = (def: any): undefined | 'mock' | 'keep' | 'replace' | 'exclude' => {\n const set = ngMocksUniverse.config.get('ngMocksDepsResolution');\n if (set?.has(def)) {\n return set.get(def);\n }\n const [value] = getDefaults(def);\n\n return value;\n};\n\nngMocksUniverse.getBuildDeclaration = (def: any): undefined | null | any => {\n if (ngMocksUniverse.builtDeclarations.has(def)) {\n return ngMocksUniverse.builtDeclarations.get(def);\n }\n const [mode, replacement] = getDefaults(def);\n\n if (mode === 'exclude') {\n return null;\n }\n if (mode === 'keep') {\n return def;\n }\n if (mode === 'replace') {\n return replacement;\n }\n};\n\nngMocksUniverse.hasBuildDeclaration = (def: any): boolean => {\n if (ngMocksUniverse.builtDeclarations.has(def)) {\n return true;\n }\n const [mode] = getDefaults(def);\n\n return !!mode && mode !== 'mock';\n};\n\nconst hasBuildDeclaration = (def: any): boolean => ngMocksUniverse.hasBuildDeclaration(def);\nconst getBuildDeclaration = (def: any): any => ngMocksUniverse.getBuildDeclaration(def);\n\nngMocksUniverse.isExcludedDef = (def: any): boolean => {\n const resolution = ngMocksUniverse.getResolution(def);\n if (resolution && resolution !== 'exclude') {\n return false;\n }\n\n return hasBuildDeclaration(def) && getBuildDeclaration(def) === null;\n};\n\nngMocksUniverse.isProvidedDef = (def: any): boolean => hasBuildDeclaration(def) && getBuildDeclaration(def) !== null;\n\n// excluding StoreDevtoolsModule by default\nngMocksUniverse.getDefaults().set('@StoreDevtoolsModule', ['exclude']);\n\nexport default ((): NgMocksUniverse => ngMocksUniverse)();\n","import helperExtractPropertyDescriptor from '../mock-service/helper.extract-property-descriptor';\n\nexport default <T extends object>(\n instance: T & { __ngMocks__source?: object },\n key: any,\n value: any,\n encapsulation?: 'get' | 'set',\n): any => {\n const def = helperExtractPropertyDescriptor(instance, key) ?? {};\n\n if (!encapsulation && def.set && (def.set as any).__ngMocksProxy) {\n def.set(value);\n\n return value;\n }\n\n const descriptor: PropertyDescriptor = {\n configurable: true,\n enumerable: true,\n };\n if (encapsulation === 'get' && def.set) {\n descriptor.set = def.set;\n } else if (encapsulation === 'set' && def.get) {\n descriptor.get = def.get;\n }\n if (encapsulation) {\n descriptor[encapsulation] = value;\n } else {\n descriptor.writable = true;\n descriptor.value = value;\n }\n\n Object.defineProperty(instance, key, descriptor);\n\n return value;\n};\n","import helperMockService from '../mock-service/helper.mock-service';\nimport { MockedFunction } from '../mock-service/types';\n\nexport default <T = MockedFunction>(instance: any, override: any, style?: 'get' | 'set'): T => {\n if (typeof override === 'string') {\n return helperMockService.mock(instance, override, style);\n }\n\n // if someone is giving us a function, then we should swap instance and overrides.\n // so in the end the function can be called, but it also has all desired properties.\n let correctInstance = instance;\n let applyOverrides = override;\n const skipProps = ['__zone_symbol__unconfigurables'];\n if (typeof override === 'function') {\n correctInstance = helperMockService.createClone(override);\n applyOverrides = instance;\n skipProps.push(...Object.getOwnPropertyNames(correctInstance));\n }\n\n for (const key of Object.getOwnPropertyNames(applyOverrides)) {\n const desc = skipProps.indexOf(key) === -1 ? Object.getOwnPropertyDescriptor(applyOverrides, key) : undefined;\n helperMockService.definePropertyDescriptor(correctInstance, key, desc);\n }\n\n return correctInstance;\n};\n","import ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockHelperStubMember from '../mock-helper/mock-helper.stub-member';\n\nexport default (def: any): any[] => {\n const callbacks = [];\n\n const config = ngMocksUniverse.configInstance.get(def);\n if (config?.overloads) {\n for (const [name, stub, encapsulation] of config.overloads) {\n if (name) {\n callbacks.push((instance: any) => {\n mockHelperStubMember(instance, name, stub, encapsulation);\n });\n } else {\n callbacks.push(stub);\n }\n }\n }\n\n return callbacks;\n};\n","import helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from './helper.extract-methods-from-prototype';\nimport helperExtractPropertiesFromPrototype from './helper.extract-properties-from-prototype';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\n\nexport default (service: any, bindFrom?: object, bindTo?: object, mock?: any): any => {\n const instance = function (...args: any[]) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (mock || service).apply(bindFrom === this ? bindTo : this, args);\n };\n\n for (const prop of [\n ...helperExtractMethodsFromPrototype(service),\n ...helperExtractPropertiesFromPrototype(service),\n ]) {\n const desc = helperExtractPropertyDescriptor(service, prop);\n helperDefinePropertyDescriptor(instance, prop, desc);\n }\n\n return instance;\n};\n","import helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\n\nexport default (instance: any, prop: keyof any, desc?: PropertyDescriptor): boolean => {\n if (!desc || !instance) {\n return false;\n }\n\n // istanbul ignore else\n if (Object.defineProperty) {\n const sourceDesc = helperExtractPropertyDescriptor(instance, prop);\n if (sourceDesc?.configurable === false) {\n return false;\n }\n\n Object.defineProperty(instance, prop, {\n ...desc,\n configurable: true,\n ...((desc.get === undefined && desc.set === undefined) || desc.writable === false ? { writable: true } : {}),\n });\n } else {\n instance[prop] = desc.value;\n }\n\n return true;\n};\n","import funcGetName from '../common/func.get-name';\n\nconst sanitizerMethods = [\n 'sanitize',\n 'bypassSecurityTrustHtml',\n 'bypassSecurityTrustStyle',\n 'bypassSecurityTrustScript',\n 'bypassSecurityTrustUrl',\n 'bypassSecurityTrustResourceUrl',\n];\n\nconst extraMethods: Record<string, undefined | string[]> = {\n DomSanitizer: sanitizerMethods,\n Sanitizer: sanitizerMethods,\n};\n\nconst getOwnPropertyNames = (prototype: any): string[] => {\n const result: string[] = Object.getOwnPropertyNames(prototype);\n for (const method of extraMethods[funcGetName(prototype)] ?? []) {\n result.push(method);\n }\n\n return result;\n};\n\nexport default <T>(service: T): string[] => {\n const result: string[] = [];\n\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n for (const method of getOwnPropertyNames(prototype)) {\n if ((method as any) === 'constructor') {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, method);\n const isGetterSetter = descriptor && (descriptor.get || descriptor.set);\n if (isGetterSetter || result.indexOf(method) !== -1) {\n continue;\n }\n result.push(method);\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return result;\n};\n","export default <T>(service: T): string[] => {\n const result: string[] = [];\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n for (const prop of Object.getOwnPropertyNames(prototype)) {\n if ((prop as any) === 'constructor') {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n const isGetterSetter = descriptor && (descriptor.get || descriptor.set);\n if (!isGetterSetter || result.indexOf(prop) !== -1) {\n continue;\n }\n result.push(prop);\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return result;\n};\n","export default <T>(service: T, prop: keyof any): PropertyDescriptor | undefined => {\n let prototype = service;\n while (prototype && Object.getPrototypeOf(prototype) !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n if (descriptor) {\n return descriptor;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return undefined;\n};\n","import funcGetName from '../common/func.get-name';\n\nimport helperMockService from './helper.mock-service';\nimport { MockedFunction } from './types';\n\n// istanbul ignore next\nconst createName = (name: string, mockName?: string, instance?: any, accessType?: string) =>\n `${mockName ?? (typeof instance.prototype === 'function' ? instance.prototype.name : funcGetName(instance))}.${name}${\n accessType ?? ''\n }`;\n\nconst generateMockDef = (def: any, mock: any, accessType?: string): PropertyDescriptor => ({\n ...(accessType === 'get' && def && def.set\n ? {\n set: def.set,\n }\n : {}),\n\n ...(accessType === 'set' && def && def.get\n ? {\n get: def.get,\n }\n : {}),\n\n ...(accessType\n ? {}\n : {\n writable: true,\n }),\n\n [accessType || 'value']: mock,\n configurable: true,\n enumerable: true,\n});\n\nconst parseArgs = (\n args: any[],\n): {\n accessType?: 'get' | 'set';\n mockName?: string;\n} => {\n let accessType: 'get' | 'set' | undefined;\n let mockName: string | undefined;\n\n if (args.length > 0 && args[0] !== 'get' && args[0] !== 'set') {\n mockName = args[0];\n } else if (args.length > 0 && (args[0] === 'get' || args[0] === 'set')) {\n accessType = args[0];\n mockName = args[1];\n }\n\n return { accessType, mockName };\n};\n\nexport default <T = MockedFunction>(instance: any, name: string, ...args: Array<string | undefined>): T => {\n const { accessType, mockName } = parseArgs(args);\n\n const def = Object.getOwnPropertyDescriptor(instance, name);\n if (def && def[accessType || 'value']) {\n return def[accessType || 'value'];\n }\n\n const detectedMockName = createName(name, mockName, instance, accessType);\n const mock: any = helperMockService.mockFunction(detectedMockName, !!accessType);\n\n const mockDef = generateMockDef(def, mock, accessType);\n if (mockDef.get && mockDef.set && (mockDef.get as any).__ngMocks && (mockDef.set as any).__ngMocks) {\n (mockDef.set as any).__ngMocksSet((val: any) => (mockDef.get as any).__ngMocksGet(val));\n }\n\n Object.defineProperty(instance, name, mockDef);\n\n return mock;\n};\n","import coreDefineProperty from '../common/core.define-property';\n\nimport { CustomMockFunction, MockedFunction } from './types';\n\nconst mockFunction: {\n (mockName: string, original?: boolean): MockedFunction;\n customMockFunction?: CustomMockFunction;\n} = (mockName: string, original = false): MockedFunction => {\n // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary\n const func =\n mockFunction.customMockFunction && !original\n ? mockFunction.customMockFunction(mockName)\n : (val: any) => {\n if (setValue) {\n setValue(val);\n }\n\n return value;\n };\n\n // magic to make getters / setters working\n\n let value: any;\n let setValue: any;\n\n coreDefineProperty(func, '__ngMocks', true);\n coreDefineProperty(func, '__ngMocksSet', (newSetValue: any) => (setValue = newSetValue));\n coreDefineProperty(func, '__ngMocksGet', (newValue: any) => (value = newValue));\n\n return func;\n};\n\nexport default (() => mockFunction)();\n","import { NG_MOCKS_GUARDS } from '../common/core.tokens';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nconst handleSection = (section: any[]) => {\n const guards: any[] = [];\n\n for (const guard of section) {\n if (ngMocksUniverse.isProvidedDef(guard)) {\n guards.push(guard);\n continue;\n }\n if (ngMocksUniverse.isExcludedDef(NG_MOCKS_GUARDS)) {\n continue;\n }\n guards.push(guard);\n }\n\n return guards;\n};\n\nconst handleArray = (value: any[], callback: any): [boolean, any[]] => {\n const mock = [];\n let updated = false;\n\n for (const valueItem of value) {\n if (ngMocksUniverse.isExcludedDef(valueItem)) {\n updated = updated || true;\n continue;\n }\n mock.push(callback(valueItem));\n updated = updated || mock[mock.length - 1] !== valueItem;\n }\n\n return [updated, mock];\n};\n\nconst handleItemKeys = ['canActivate', 'canActivateChild', 'canDeactivate', 'canLoad'];\nconst handleItemGetGuards = (mock: any, section: string) =>\n Array.isArray(mock[section]) ? handleSection(mock[section]) : mock[section];\n\nconst handleItem = (value: Record<keyof any, any>, callback: any): [boolean, Record<keyof any, any>] => {\n let mock: Record<keyof any, any> = {};\n let updated = false;\n\n for (const key of Object.keys(value)) {\n if (ngMocksUniverse.isExcludedDef(value[key])) {\n updated = updated || true;\n continue;\n }\n mock[key] = callback(value[key]);\n updated = updated || mock[key] !== value[key];\n }\n\n // Removal of guards.\n for (const section of handleItemKeys) {\n const guards: any[] = handleItemGetGuards(mock, section);\n if (guards && mock[section].length !== guards.length) {\n updated = updated || true;\n mock = { ...mock, [section]: guards };\n }\n }\n\n return [updated, mock];\n};\n\nconst replaceWithMocks = (value: any): any => {\n if (ngMocksUniverse.cacheDeclarations.has(value)) {\n return ngMocksUniverse.cacheDeclarations.get(value);\n }\n if (typeof value !== 'object') {\n return value;\n }\n\n let mock: any;\n let updated = false;\n\n if (Array.isArray(value)) {\n [updated, mock] = handleArray(value, replaceWithMocks);\n } else if (value) {\n [updated, mock] = handleItem(value, replaceWithMocks);\n }\n\n if (updated) {\n Object.setPrototypeOf(mock, Object.getPrototypeOf(value));\n\n return mock;\n }\n\n return value;\n};\n\nexport default (() => replaceWithMocks)();\n","import funcGetGlobal from '../common/func.get-global';\n\nimport helperCreateClone from './helper.create-clone';\nimport helperCreateMockFromPrototype from './helper.create-mock-from-prototype';\nimport helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from './helper.extract-methods-from-prototype';\nimport helperExtractPropertiesFromPrototype from './helper.extract-properties-from-prototype';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\nimport helperMock from './helper.mock';\nimport helperMockFunction from './helper.mock-function';\nimport helperReplaceWithMocks from './helper.replace-with-mocks';\nimport helperResolveProvider from './helper.resolve-provider';\nimport helperUseFactory from './helper.use-factory';\nimport { CustomMockFunction } from './types';\n\n// We need a single pointer to the object among all environments.\nfuncGetGlobal().ngMockshelperMockService = funcGetGlobal().ngMockshelperMockService || {\n mockFunction: helperMockFunction,\n\n registerMockFunction: (func: CustomMockFunction | undefined) => {\n funcGetGlobal().ngMockshelperMockService.mockFunction.customMockFunction = func;\n },\n\n createClone: helperCreateClone,\n createMockFromPrototype: helperCreateMockFromPrototype,\n definePropertyDescriptor: helperDefinePropertyDescriptor,\n extractMethodsFromPrototype: helperExtractMethodsFromPrototype,\n extractPropertiesFromPrototype: helperExtractPropertiesFromPrototype,\n extractPropertyDescriptor: helperExtractPropertyDescriptor,\n mock: helperMock,\n replaceWithMocks: helperReplaceWithMocks,\n resolveProvider: helperResolveProvider,\n useFactory: helperUseFactory,\n};\n\nexport default ((): {\n createClone: typeof helperCreateClone;\n createMockFromPrototype: typeof helperCreateMockFromPrototype;\n definePropertyDescriptor: typeof helperDefinePropertyDescriptor;\n extractMethodsFromPrototype: typeof helperExtractMethodsFromPrototype;\n extractPropertiesFromPrototype: typeof helperExtractPropertiesFromPrototype;\n extractPropertyDescriptor: typeof helperExtractPropertyDescriptor;\n mock: typeof helperMock;\n mockFunction: typeof helperMockFunction;\n registerMockFunction: (func: CustomMockFunction | undefined) => void;\n replaceWithMocks: typeof helperReplaceWithMocks;\n resolveProvider: typeof helperResolveProvider;\n useFactory: typeof helperUseFactory;\n} => funcGetGlobal().ngMockshelperMockService)();\n\nexport function registerMockFunction(func?: CustomMockFunction | undefined): void {\n funcGetGlobal().ngMockshelperMockService.registerMockFunction(func);\n}\n","import coreDefineProperty from '../common/core.define-property';\nimport funcGetName from '../common/func.get-name';\n\nimport helperMockService from './helper.mock-service';\nimport { MockedFunction } from './types';\n\nexport default (service: any): { [key in keyof any]: MockedFunction } => {\n const mockName = funcGetName(service);\n const value: any = {};\n coreDefineProperty(value, '__ngMocks', true);\n\n const methods = helperMockService.extractMethodsFromPrototype(service);\n for (const method of methods) {\n helperMockService.mock(value, method, mockName);\n }\n\n const properties = helperMockService.extractPropertiesFromPrototype(service);\n for (const property of properties) {\n helperMockService.mock(value, property, 'get', mockName);\n helperMockService.mock(value, property, 'set', mockName);\n }\n Object.setPrototypeOf(value, service);\n\n return value;\n};\n","import { extractDependency } from '../common/core.helpers';\nimport { NG_MOCKS_INTERCEPTORS } from '../common/core.tokens';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport helperMockService from './helper.mock-service';\nimport mockProvider from './mock-provider';\n\nconst anyDiffers = (a: any, b: any, ...keys: string[]): boolean => {\n for (const key of keys) {\n if (a[key] !== b[key]) {\n return true;\n }\n }\n\n return false;\n};\n\nconst createFromResolution = (provide: any, resolution: any) => {\n let mockDef = resolution;\n\n const existingMock = ngMocksUniverse.builtProviders.get(provide);\n if (existingMock) {\n mockDef = existingMock;\n }\n\n // A case when a provider is actually a component, directive, pipe.\n if (typeof mockDef === 'function') {\n mockDef = {\n provide,\n useClass: mockDef,\n };\n }\n\n return mockDef;\n};\n\nconst isSuitableProvider = (provider: any, provide: any): boolean =>\n ngMocksUniverse.builtProviders.has(NG_MOCKS_INTERCEPTORS) &&\n ngMocksUniverse.builtProviders.get(NG_MOCKS_INTERCEPTORS) === null &&\n isNgInjectionToken(provide) &&\n provide.toString() === 'InjectionToken HTTP_INTERCEPTORS' &&\n provide !== provider;\n\nconst excludeInterceptors = (provider: any, provide: any): boolean => {\n if (isSuitableProvider(provider, provide)) {\n if (provider.useFactory || provider.useValue) {\n return true;\n }\n const interceptor = provider.useExisting || provider.useClass;\n if (!ngMocksUniverse.builtProviders.has(interceptor) || ngMocksUniverse.builtProviders.get(interceptor) === null) {\n return true;\n }\n }\n\n return false;\n};\n\nconst parseProvider = (\n provider: any,\n callback: any,\n): {\n change: () => void;\n multi: boolean;\n provide: any;\n} => {\n const provide = funcGetProvider(provider);\n const multi = provider !== provide && !!provider.multi;\n\n return {\n change: () => {\n if (callback) {\n callback();\n }\n },\n multi,\n provide,\n };\n};\n\n// if the provider is a value, we need to go through the value and to replace all mock instances.\nconst replaceWithMocks = (provider: any, provide: any, mockDef: any) => {\n if (provide !== provider && mockDef && mockDef.useValue) {\n const useValue = helperMockService.replaceWithMocks(mockDef.useValue);\n\n return useValue === mockDef.useValue\n ? mockDef\n : {\n ...mockDef,\n useValue,\n };\n }\n\n return mockDef;\n};\n\nconst createPredefinedMockProvider = (provider: any, provide: any): any => {\n // Then we check decisions whether we should keep or replace a provider.\n if (ngMocksUniverse.builtProviders.has(provide)) {\n const mockDef = ngMocksUniverse.builtProviders.get(provide);\n if (mockDef === provide) {\n return provider;\n }\n\n return mockDef;\n }\n\n return undefined;\n};\n\nconst createMockProvider = (provider: any, provide: any, change: () => void) => {\n let mockDef = createPredefinedMockProvider(provider, provide);\n\n if (!mockDef && ngMocksUniverse.flags.has('skipMock') && ngMocksUniverse.getResolution(provide) !== 'mock') {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(provide);\n mockDef = provider;\n }\n if (!mockDef) {\n mockDef = mockProvider(provider);\n }\n\n mockDef = replaceWithMocks(provider, provide, mockDef);\n if (!areEqualDefs(mockDef, provider, provide)) {\n change();\n }\n // Touching only when we really provide a value.\n if (mockDef) {\n ngMocksUniverse.touches.add(provide);\n }\n\n return mockDef;\n};\n\nconst areEqualDefs = (mockDef: any, provider: any, provide: any): boolean => {\n let providerDiffers = false;\n let defDiffers = !mockDef;\n if (provider && mockDef && !defDiffers) {\n defDiffers = anyDiffers(provider, mockDef, 'provide', 'useValue', 'useClass', 'useExisting', 'useFactory', 'deps');\n }\n if (provider === provide && mockDef !== provider) {\n providerDiffers = true;\n } else if (provider !== provide && defDiffers) {\n providerDiffers = true;\n }\n\n return !providerDiffers;\n};\n\nconst isPreconfiguredDependency = (provider: any, provide: any): boolean => {\n // we should not touch excluded providers.\n if (ngMocksUniverse.builtProviders.has(provide) && ngMocksUniverse.builtProviders.get(provide) === null) {\n return true;\n }\n\n if (provide !== provider && provider.deps) {\n extractDependency(provider.deps, ngMocksUniverse.config.get('ngMocksDeps'));\n }\n\n return excludeInterceptors(provider, provide);\n};\n\n// tries to resolve a provider based on current universe state.\nexport default (provider: any, resolutions: Map<any, any>, changed?: () => void) => {\n const { provide, multi, change } = parseProvider(provider, changed);\n // we should not touch our system providers.\n if (provider && typeof provider === 'object' && provider.useExisting && provider.useExisting.mockOf) {\n return provider;\n }\n if (isPreconfiguredDependency(provider, provide)) {\n return change();\n }\n if (resolutions.has(provide)) {\n return createFromResolution(provide, resolutions.get(provide));\n }\n\n const mockDef = createMockProvider(provider, provide, change);\n\n return multi && typeof mockDef === 'object' ? { ...mockDef, multi } : mockDef;\n};\n","import { FactoryProvider, Injector } from '@angular/core';\n\nimport { mapValues } from '../common/core.helpers';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport mockInstanceApply from '../mock-instance/mock-instance-apply';\n\nimport { MockService } from './mock-service';\n\nconst applyCallbackToken = (def: any): boolean => isNgInjectionToken(def) || typeof def === 'string';\n\nconst applyCallback = (def: any, inst: any, callbacks: any[], injector?: Injector, overrides?: any): void => {\n let instance: any = inst;\n\n for (const callback of callbacks) {\n const override = callback(instance, injector);\n if (applyCallbackToken(def)) {\n instance = override;\n continue;\n }\n\n // overrides return real value.\n if (callback === overrides) {\n instance = override;\n continue;\n }\n\n if (!override) {\n continue;\n }\n\n instance = mockHelperStub(instance, override);\n }\n\n return instance;\n};\n\nexport default <D, I>(\n def: D,\n init?: () => I,\n overrides?: (instance: I, injector: Injector) => I | Partial<I>,\n): FactoryProvider => ({\n deps: [Injector],\n provide: def,\n useFactory: (injector?: Injector) => {\n const instance = init ? init() : MockService(def as any);\n\n const configGlobal: Set<any> | undefined = ngMocksUniverse.getOverrides().get(def);\n const callbacks = configGlobal ? mapValues(configGlobal) : [];\n if (overrides) {\n callbacks.push(overrides);\n }\n callbacks.push(...mockInstanceApply(def));\n\n return applyCallback(def, instance, callbacks, injector, overrides);\n },\n});\n","import { Provider } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport { Type } from '../common/core.types';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport helperDefinePropertyDescriptor from './helper.define-property-descriptor';\nimport helperExtractPropertyDescriptor from './helper.extract-property-descriptor';\nimport helperUseFactory from './helper.use-factory';\nimport { MockService } from './mock-service';\n\nconst { neverMockProvidedFunction, neverMockToken } = coreConfig;\n\nconst applyMissingClassProperties = (instance: any, useClass: Type<any>) => {\n const existing = Object.getOwnPropertyNames(instance);\n const child = MockService(useClass);\n\n for (const name of Object.getOwnPropertyNames(child)) {\n if (existing.indexOf(name) !== -1) {\n continue;\n }\n const def = helperExtractPropertyDescriptor(child, name);\n helperDefinePropertyDescriptor(instance, name, def);\n }\n};\n\nconst createFactoryProvider = (provider: any, provide: any) =>\n helperUseFactory(provide, () => {\n const instance = MockService(provide);\n // Magic below adds missed properties to the instance to\n // fulfill missed abstract methods.\n if (provide !== provider && Object.keys(provider).indexOf('useClass') !== -1) {\n applyMissingClassProperties(instance, provider.useClass);\n }\n\n return instance;\n });\n\nconst normalizePrimitivesMap: Array<[(value: any) => boolean, any]> = [\n [value => typeof value === 'boolean', false],\n [value => typeof value === 'number', 0],\n [value => typeof value === 'string', ''],\n [value => value === null, null],\n];\n\nconst normalizePrimitives = (value: any): any => {\n for (const [check, result] of normalizePrimitivesMap) {\n if (check(value)) {\n return result;\n }\n }\n\n return undefined;\n};\n\nconst createValueProvider = (provider: any, provide: any) =>\n helperUseFactory(provide, () =>\n provider.useValue && typeof provider.useValue === 'object'\n ? MockService(provider.useValue)\n : normalizePrimitives(provider.useValue),\n );\n\nconst createClassProvider = (provider: any, provide: any) =>\n ngMocksUniverse.builtProviders.has(provider.useClass) &&\n ngMocksUniverse.builtProviders.get(provider.useClass) === provider.useClass\n ? provider\n : helperUseFactory(provide, () => MockService(provider.useClass));\n\nconst createMockProvider = (provider: any, provide: any, cacheProviders?: Map<any, any>): Provider | undefined => {\n let mockProvider: Provider | undefined;\n if (typeof provide === 'function') {\n mockProvider = createFactoryProvider(provider, provide);\n }\n if (provide === provider && mockProvider && cacheProviders) {\n cacheProviders.set(provide, mockProvider);\n }\n\n return mockProvider;\n};\n\n// Tokens are special subject, we can skip adding them because in a mock module they are useless.\n// The main problem is that providing undefined to HTTP_INTERCEPTORS and others breaks their code.\n// If a testing module / component requires omitted tokens then they should be provided manually\n// during creation of TestBed module.\nconst handleProvider = (provider: any, provide: any, useFactory: boolean) => {\n if (provide === provider) {\n return useFactory ? helperUseFactory(provider, () => undefined) : undefined;\n }\n if (provider.multi) {\n ngMocksUniverse.config.get('ngMocksMulti')?.add(provide);\n\n return undefined;\n }\n\n let mockProvider: any;\n // istanbul ignore else\n if (Object.keys(provider).indexOf('useValue') !== -1) {\n mockProvider = createValueProvider(provider, provide);\n } else if (Object.keys(provider).indexOf('useExisting') !== -1) {\n mockProvider = provider;\n } else if (Object.keys(provider).indexOf('useClass') !== -1) {\n mockProvider = createClassProvider(provider, provide);\n } else if (Object.keys(provider).indexOf('useFactory') !== -1) {\n mockProvider = helperUseFactory(provide, () => ({}));\n }\n\n return mockProvider;\n};\n\nconst isNeverMockFunction = (provide: any): boolean =>\n typeof provide === 'function' && neverMockProvidedFunction.indexOf(provide.name) !== -1;\n\nconst isNeverMockToken = (provide: any): boolean =>\n isNgInjectionToken(provide) && neverMockToken.indexOf(provide.toString()) !== -1;\n\nexport default (provider: any, useFactory = false): Provider | undefined => {\n const provide = funcGetProvider(provider);\n\n if (ngMocksUniverse.getResolution(provide) === 'mock') {\n // nothing to do\n } else if (isNeverMockFunction(provide)) {\n return provider;\n } else if (isNeverMockToken(provide)) {\n return undefined;\n }\n\n // Only pure provides should be cached to avoid their influence on\n // another different declarations.\n const cacheProviders = ngMocksUniverse.flags.has('cacheProvider')\n ? ngMocksUniverse.cacheProviders\n : /* istanbul ignore next */ undefined;\n if (provide === provider && cacheProviders && cacheProviders.has(provide)) {\n return cacheProviders.get(provide);\n }\n\n return createMockProvider(provider, provide, cacheProviders) || handleProvider(provider, provide, useFactory);\n};\n","const isAngularClass = (value: Record<keyof any, unknown>): boolean => {\n if (value.ɵprov) {\n return true;\n }\n if (value.__annotations__) {\n return true;\n }\n if (value.__parameters__) {\n return true;\n }\n if (value.parameters) {\n return true;\n }\n\n return false;\n};\n\nconst guessClass = (name: string, proto: string, value: any): boolean => {\n // unnamed classes can be class_N\n if (name.match(/^class/) !== null) {\n return true;\n }\n\n // let's consider an existing 'prototype' as a class\n if (Object.keys(value.prototype).length > 0) {\n return true;\n }\n\n // let's consider a capital name and 'this' usage as a class\n const clsCode = name.codePointAt(0);\n if (clsCode && clsCode >= 65 && clsCode <= 90 && proto.match(/\\bthis\\./gm) !== null) {\n return true;\n }\n\n // webpack es5 class\n const regEx = new RegExp(`\\\\(this,\\\\s*${name}\\\\)`, 'mg');\n // istanbul ignore if\n if (proto.match(regEx) !== null) {\n return true;\n }\n\n return false;\n};\n\nexport default (value: any): boolean => {\n if (typeof value !== 'function') {\n return false;\n }\n if (!value.prototype) {\n return true;\n }\n if (isAngularClass(value)) {\n return false;\n }\n\n const proto = value.toString();\n\n // es2015 class\n // istanbul ignore if\n if (proto.match(/^class\\b/) !== null) {\n return false;\n }\n\n const cls = proto.match(/^function\\s+([^\\s(]+)\\(/);\n if (cls === null) {\n return true;\n }\n if (guessClass(cls[1], proto, value)) {\n return false;\n }\n\n return true;\n};\n","import { AnyType } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\n\nimport checkIsClass from './check.is-class';\nimport checkIsFunc from './check.is-func';\nimport checkIsInst from './check.is-inst';\nimport helperMockService from './helper.mock-service';\n\nconst mockVariableMap: Array<\n [(def: any) => boolean, (service: any, prefix: string, callback: typeof MockService) => any]\n> = [\n [checkIsClass, (service: any) => helperMockService.createMockFromPrototype(service.prototype)],\n [\n checkIsFunc,\n (service: any, prefix: string) => helperMockService.mockFunction(`func:${prefix || funcGetName(service)}`),\n ],\n [def => Array.isArray(def), () => []],\n [\n checkIsInst,\n (service, prefix, callback) => {\n const value = helperMockService.createMockFromPrototype(service.constructor.prototype);\n for (const property of Object.keys(service)) {\n const mock: any = callback(service[property], `${prefix || 'instance'}.${property}`);\n if (mock !== undefined) {\n value[property] = mock;\n }\n }\n Object.setPrototypeOf(value, Object.getPrototypeOf(service));\n\n return value;\n },\n ],\n];\n\nconst mockVariable = (service: any, prefix: string, callback: typeof MockService) => {\n for (const [check, createMock] of mockVariableMap) {\n if (!check(service)) {\n continue;\n }\n\n return createMock(service, prefix, callback);\n }\n};\n\n/**\n * MockService creates a mock instance out of an object or a class.\n * Primitives are converted to undefined.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n */\nexport function MockService(service: boolean | number | string | null | undefined): undefined;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n * The second parameter can be used as overrides.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const service = MockService(AuthService, {\n * loggedIn: true,\n * });\n * service.login(); // does nothing, it's dummy.\n * ```\n */\nexport function MockService<T>(service: AnyType<T>, overrides?: Partial<T>, mockNamePrefix?: string): T;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const service = MockService(AuthService);\n * service.login(); // does nothing, it's dummy.\n */\nexport function MockService<T>(service: AnyType<T>, mockNamePrefix?: string): T;\n\n/**\n * MockService creates a mock instance out of an object or a class.\n *\n * @see https://ng-mocks.sudo.eu/api/MockService\n *\n * ```ts\n * const mockUser = MockService(currentUser);\n * mockUser.save(); // does nothing, it's dummy.\n */\nexport function MockService<T = any>(service: object, mockNamePrefix?: string): T;\n\nexport function MockService(service: any, ...args: any[]): any {\n // mocking all methods / properties of a class / object.\n\n const mockNamePrefix = args.length > 0 && typeof args[0] === 'string' ? args[0] : args[1];\n const overrides = args.length > 0 && args[0] && typeof args[0] === 'object' ? args[0] : undefined;\n\n const value: any = mockVariable(service, mockNamePrefix, MockService);\n\n if (overrides) {\n mockHelperStub(value, overrides);\n }\n\n return value;\n}\n","import checkIsFunc from './check.is-func';\n\nexport default (value: any): boolean => {\n if (typeof value !== 'function') {\n return false;\n }\n\n return !checkIsFunc(value);\n};\n","export default (value: any): boolean => {\n if (value === null) {\n return false;\n }\n if (typeof value !== 'object') {\n return false;\n }\n if (value.ngMetadataName === 'InjectionToken') {\n return false;\n }\n\n return typeof Object.getPrototypeOf(value) === 'object';\n};\n","import { ɵReflectionCapabilities as ReflectionCapabilities } from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport { AnyDeclaration } from '../common/core.types';\n\ninterface Declaration {\n host: Record<string, string | undefined>;\n hostBindings: Array<[string, string?, ...any[]]>;\n hostListeners: Array<[string, string?, ...any[]]>;\n attributes: string[];\n inputs: string[];\n outputs: string[];\n propDecorators: Record<string, any[]>;\n queries: Record<string, any>;\n decorators: Array<'Injectable' | 'Pipe' | 'Directive' | 'Component' | 'NgModule'>;\n [key: string]: any;\n}\n\nconst pushDecorator = (decorators: string[], decorator: string): void => {\n const deleteIndex = decorators.indexOf(decorator);\n if (deleteIndex !== -1) {\n decorators.splice(deleteIndex, 1);\n }\n if (\n decorator === 'Injectable' ||\n decorator === 'Pipe' ||\n decorator === 'Directive' ||\n decorator === 'Component' ||\n decorator === 'NgModule'\n ) {\n decorators.push(decorator);\n }\n};\n\nconst getAllKeys = <T extends Record<keyof any, any>>(instance: T): Array<keyof T> => {\n const props: string[] = [];\n for (const key of Object.keys(instance)) {\n props.push(key);\n }\n\n return props as never;\n};\n\nconst createDeclarations = (parent: Partial<Declaration>): Declaration => ({\n host: parent.host ? { ...parent.host } : {},\n hostBindings: parent.hostBindings ? [...parent.hostBindings] : [],\n hostListeners: parent.hostListeners ? [...parent.hostListeners] : [],\n attributes: parent.attributes ? [...parent.attributes] : [],\n inputs: parent.inputs ? [...parent.inputs] : [],\n outputs: parent.outputs ? [...parent.outputs] : [],\n propDecorators: parent.propDecorators ? { ...parent.propDecorators } : {},\n queries: parent.queries ? { ...parent.queries } : {},\n decorators: parent.decorators ? [...parent.decorators] : [],\n});\n\nconst parseParameters = (\n def: {\n __parameters__?: Array<null | Array<\n | {\n attributeName: string;\n ngMetadataName: 'Attribute';\n }\n | {\n token: AnyDeclaration<any>;\n ngMetadataName: 'Inject';\n }\n | {\n ngMetadataName: 'Optional';\n }\n >>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__parameters__') && def.__parameters__) {\n for (const decorators of def.__parameters__) {\n for (const decorator of decorators || []) {\n if (\n decorator.ngMetadataName === 'Attribute' &&\n declaration.attributes.indexOf(decorator.attributeName) === -1\n ) {\n declaration.attributes.push(decorator.attributeName);\n }\n }\n }\n }\n};\n\nconst parseAnnotations = (\n def: {\n __annotations__?: Array<{\n ngMetadataName?: string;\n }>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__annotations__') && def.__annotations__) {\n for (const annotation of def.__annotations__) {\n const ngMetadataName = annotation?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n declaration[ngMetadataName] = { ...annotation, attributes: declaration.attributes };\n pushDecorator(declaration.decorators, ngMetadataName);\n }\n }\n};\n\nconst parseDecorators = (\n def: {\n decorators?: Array<{\n args?: [any];\n type?: {\n prototype?: {\n ngMetadataName?: string;\n };\n };\n }>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, 'decorators') && def.decorators) {\n for (const decorator of def.decorators) {\n const ngMetadataName = decorator?.type?.prototype?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n declaration[ngMetadataName] = decorator.args ? { ...decorator.args[0] } : {};\n pushDecorator(declaration.decorators, ngMetadataName);\n }\n }\n};\n\nconst parsePropDecoratorsParserFactoryProp =\n (key: 'inputs' | 'outputs') =>\n (\n _: string,\n prop: string,\n decorator: {\n args?: [string];\n },\n declaration: Declaration,\n ): void => {\n const value = prop + (decorator.args?.[0] ? `: ${decorator.args[0]}` : '');\n if (declaration[key].indexOf(value) === -1) {\n declaration[key].unshift(value);\n }\n };\nconst parsePropDecoratorsParserInput = parsePropDecoratorsParserFactoryProp('inputs');\nconst parsePropDecoratorsParserOutput = parsePropDecoratorsParserFactoryProp('outputs');\n\nconst parsePropDecoratorsParserFactoryQuery =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n args: [string] | [string, any];\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.args[0],\n ...decorator.args[1],\n };\n }\n };\nconst parsePropDecoratorsParserContent = parsePropDecoratorsParserFactoryQuery(false);\nconst parsePropDecoratorsParserView = parsePropDecoratorsParserFactoryQuery(true);\n\nconst parsePropDecoratorsParserHostBinding = (\n _: string,\n prop: string,\n decorator: {\n args?: [string] | [string, any[]];\n },\n declaration: Declaration,\n): void => {\n const key = `[${decorator.args?.[0] || prop}]`;\n if (!declaration.host[key]) {\n declaration.host[key] = prop;\n }\n declaration.hostBindings.push([prop, ...(decorator.args || [])]);\n};\n\nconst parsePropDecoratorsParserHostListener = (\n _: string,\n prop: string,\n decorator: {\n args?: any[];\n },\n declaration: Declaration,\n): void => {\n const key = `(${decorator.args?.[0] || prop})`;\n if (!declaration.host[key]) {\n declaration.host[key] = `${prop}($event)`;\n }\n declaration.hostListeners.push([prop, ...(decorator.args || [])]);\n};\n\nconst parsePropDecoratorsMap: any = {\n ContentChild: parsePropDecoratorsParserContent,\n ContentChildren: parsePropDecoratorsParserContent,\n HostBinding: parsePropDecoratorsParserHostBinding,\n HostListener: parsePropDecoratorsParserHostListener,\n Input: parsePropDecoratorsParserInput,\n Output: parsePropDecoratorsParserOutput,\n ViewChild: parsePropDecoratorsParserView,\n ViewChildren: parsePropDecoratorsParserView,\n};\n\nconst parsePropDecorators = (\n def: {\n propDecorators?: Record<\n string,\n Array<{\n args: any;\n type?: {\n prototype?: {\n ngMetadataName?: string;\n };\n };\n }>\n >;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, 'propDecorators') && def.propDecorators) {\n for (const prop of getAllKeys(def.propDecorators)) {\n declaration.propDecorators[prop] = [...(declaration.propDecorators[prop] || []), ...def.propDecorators[prop]];\n for (const decorator of def.propDecorators[prop]) {\n const ngMetadataName = decorator?.type?.prototype?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n parsePropDecoratorsMap[ngMetadataName]?.(ngMetadataName, prop, decorator, declaration);\n }\n }\n }\n};\n\nconst parsePropMetadataParserFactoryProp =\n (key: 'inputs' | 'outputs') =>\n (\n _: string,\n prop: string,\n decorator: {\n bindingPropertyName?: string;\n },\n declaration: Declaration,\n ): void => {\n const value = prop + (decorator.bindingPropertyName ? `: ${decorator.bindingPropertyName}` : '');\n if (declaration[key].indexOf(value) === -1) {\n declaration[key].unshift(value);\n }\n };\nconst parsePropMetadataParserInput = parsePropMetadataParserFactoryProp('inputs');\nconst parsePropMetadataParserOutput = parsePropMetadataParserFactoryProp('outputs');\n\nconst parsePropMetadataParserFactoryQueryChild =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n read?: any;\n selector: string;\n static?: boolean;\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.selector,\n ...(decorator.read !== undefined ? { read: decorator.read } : {}),\n ...(decorator.static !== undefined ? { static: decorator.static } : {}),\n };\n }\n };\nconst parsePropMetadataParserContentChild = parsePropMetadataParserFactoryQueryChild(false);\nconst parsePropMetadataParserViewChild = parsePropMetadataParserFactoryQueryChild(true);\n\nconst parsePropMetadataParserFactoryQueryChildren =\n (isViewQuery: boolean) =>\n (\n ngMetadataName: string,\n prop: string,\n decorator: {\n descendants?: any;\n emitDistinctChangesOnly?: boolean;\n read?: any;\n selector: string;\n },\n declaration: Declaration,\n ): void => {\n if (!declaration.queries[prop]) {\n declaration.queries[prop] = {\n isViewQuery,\n ngMetadataName,\n selector: decorator.selector,\n ...(decorator.descendants !== undefined ? { descendants: decorator.descendants } : {}),\n ...(decorator.emitDistinctChangesOnly !== undefined\n ? { emitDistinctChangesOnly: decorator.emitDistinctChangesOnly }\n : {}),\n ...(decorator.read !== undefined ? { read: decorator.read } : {}),\n };\n }\n };\nconst parsePropMetadataParserContentChildren = parsePropMetadataParserFactoryQueryChildren(false);\nconst parsePropMetadataParserViewChildren = parsePropMetadataParserFactoryQueryChildren(true);\n\nconst parsePropMetadataParserHostBinding = (\n _: string,\n prop: string,\n decorator: {\n args?: any;\n hostPropertyName?: string;\n },\n declaration: Declaration,\n): void => {\n const key = `[${decorator.hostPropertyName || prop}]`;\n if (!declaration.host[key]) {\n declaration.host[key] = prop;\n }\n declaration.hostBindings.push([\n prop,\n decorator.hostPropertyName || prop,\n ...(decorator.args ? [decorator.args] : []),\n ]);\n};\n\nconst parsePropMetadataParserHostListener = (\n _: string,\n prop: string,\n decorator: {\n args?: any;\n eventName?: string;\n },\n declaration: Declaration,\n): void => {\n const key = `(${decorator.eventName || prop})`;\n if (!declaration.host[key]) {\n declaration.host[key] = `${prop}($event)`;\n }\n declaration.hostListeners.push([prop, decorator.eventName || prop, ...(decorator.args ? [decorator.args] : [])]);\n};\n\nconst parsePropMetadataMap: any = {\n ContentChild: parsePropMetadataParserContentChild,\n ContentChildren: parsePropMetadataParserContentChildren,\n HostBinding: parsePropMetadataParserHostBinding,\n HostListener: parsePropMetadataParserHostListener,\n Input: parsePropMetadataParserInput,\n Output: parsePropMetadataParserOutput,\n ViewChild: parsePropMetadataParserViewChild,\n ViewChildren: parsePropMetadataParserViewChildren,\n};\n\nconst parsePropMetadata = (\n def: {\n __prop__metadata__?: Record<keyof any, any[]>;\n },\n declaration: Declaration,\n): void => {\n if (Object.prototype.hasOwnProperty.call(def, '__prop__metadata__') && def.__prop__metadata__) {\n for (const prop of getAllKeys(def.__prop__metadata__)) {\n const decorators: Array<{\n ngMetadataName?: string;\n }> = def.__prop__metadata__[prop];\n for (const decorator of decorators) {\n const ngMetadataName = decorator?.ngMetadataName;\n if (!ngMetadataName) {\n continue;\n }\n parsePropMetadataMap[ngMetadataName]?.(ngMetadataName, prop, decorator, declaration);\n }\n }\n }\n};\n\nconst buildDeclaration = (def: any | undefined, declaration: Declaration): void => {\n if (def) {\n def.inputs = def.inputs || [];\n for (const input of declaration.inputs) {\n if (def.inputs.indexOf(input) === -1) {\n def.inputs.push(input);\n }\n }\n\n def.outputs = def.outputs || [];\n for (const output of declaration.outputs) {\n if (def.outputs.indexOf(output) === -1) {\n def.outputs.push(output);\n }\n }\n\n def.queries = {\n ...(def.queries || []),\n ...declaration.queries,\n };\n\n def.hostBindings = declaration.hostBindings;\n def.hostListeners = declaration.hostListeners;\n }\n};\n\nconst reflectionCapabilities = new ReflectionCapabilities();\n\nconst parse = (def: any): any => {\n if (typeof def !== 'function' && typeof def !== 'object') {\n return {};\n }\n\n if (Object.prototype.hasOwnProperty.call(def, '__ngMocksParsed')) {\n return def.__ngMocksDeclarations;\n }\n\n const parent = Object.getPrototypeOf(def);\n const parentDeclarations = parent ? parse(parent) : {};\n const declaration = createDeclarations(parentDeclarations);\n coreDefineProperty(def, '__ngMocksParsed', true);\n parseParameters(def, declaration);\n parseAnnotations(def, declaration);\n parseDecorators(def, declaration);\n parsePropDecorators(def, declaration);\n parsePropMetadata(def, declaration);\n buildDeclaration(declaration.Directive, declaration);\n buildDeclaration(declaration.Component, declaration);\n\n coreDefineProperty(def, '__ngMocksDeclarations', {\n ...parentDeclarations,\n ...declaration,\n parameters: reflectionCapabilities.parameters(def),\n });\n\n return def.__ngMocksDeclarations;\n};\n\nexport default ((): ((def: any) => Declaration) => parse)();\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = x({ [\"ChangeDetectorRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ChangeDetectorRef, [\"Component\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Component, [\"ComponentFactoryResolver\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ComponentFactoryResolver, [\"ContentChild\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ContentChild, [\"ContentChildren\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ContentChildren, [\"DebugElement\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.DebugElement, [\"Directive\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Directive, [\"ElementRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ElementRef, [\"EventEmitter\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.EventEmitter, [\"InjectionToken\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.InjectionToken, [\"Injector\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Injector, [\"Input\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Input, [\"NgModule\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.NgModule, [\"Optional\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Optional, [\"Output\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Output, [\"Pipe\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Pipe, [\"QueryList\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.QueryList, [\"Self\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.Self, [\"TemplateRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.TemplateRef, [\"ViewChild\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewChild, [\"ViewChildren\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewChildren, [\"ViewContainerRef\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__.ViewContainerRef, [\"ɵReflectionCapabilities\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__[\"ɵReflectionCapabilities\"], [\"ɵivyEnabled\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__[\"ɵivyEnabled\"] });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = x({ [\"TestBed\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__.TestBed, [\"getTestBed\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__.getTestBed });","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import ngMocksUniverse from './ng-mocks-universe';\n\nexport interface NgMocksStack {\n id: object;\n level: 'root' | 'runtime';\n mockInstance?: any[];\n}\n\ntype NgMocksStackCallback = (state: NgMocksStack, stack: NgMocksStack[]) => void;\n\nconst stackRoot: NgMocksStack = { id: {}, level: 'root' };\nconst stack: NgMocksStack[] = ngMocksUniverse.global.get('reporter-stack') || [{ ...stackRoot }];\nngMocksUniverse.global.set('reporter-stack', stack);\nconst current = () => stack[stack.length - 1];\n\n// istanbul ignore next\nconst listenersPush: NgMocksStackCallback[] = ngMocksUniverse.global.get('reporter-stack-push') ?? [];\nngMocksUniverse.global.set('reporter-stack-push', listenersPush);\n\n// istanbul ignore next\nconst listenersPop: NgMocksStackCallback[] = ngMocksUniverse.global.get('reporter-stack-pop') ?? [];\nngMocksUniverse.global.set('reporter-stack-pop', listenersPop);\n\nconst stackPush = () => {\n const id = {};\n ngMocksUniverse.global.set('reporter-stack-id', id);\n const state: NgMocksStack = { id, level: 'runtime' };\n stack.push(state);\n\n for (const callback of listenersPush) {\n callback(state, stack);\n }\n};\nconst stackPop = () => {\n const state = stack.pop();\n\n // this code is actually needed for jest tests.\n // istanbul ignore if\n if (stack.length === 0) {\n stack.push(state?.level === 'root' ? state : { ...stackRoot });\n }\n\n // istanbul ignore else\n if (state && state.level !== 'root') {\n for (const callback of listenersPop) {\n callback(state, stack);\n }\n }\n\n ngMocksUniverse.global.set('reporter-stack-id', stack[stack.length - 1].id);\n};\n\n// istanbul ignore next\nconst subscribePush = (callback: NgMocksStackCallback) => {\n if (listenersPush.indexOf(callback)) {\n listenersPush.push(callback);\n }\n if (stack.length > 0) {\n callback(stack[stack.length - 1], stack);\n }\n};\n\n// istanbul ignore next\nconst subscribePop = (callback: NgMocksStackCallback) => {\n if (listenersPop.indexOf(callback) === -1) {\n listenersPop.push(callback);\n }\n};\n\n// istanbul ignore next\nconst unsubscribePush = (callback: NgMocksStackCallback) => {\n const index = listenersPush.indexOf(callback);\n if (index !== -1) {\n listenersPush.splice(index, 1);\n }\n};\n\n// istanbul ignore next\nconst unsubscribePop = (callback: NgMocksStackCallback) => {\n const index = listenersPop.indexOf(callback);\n if (index !== -1) {\n listenersPop.splice(index, 1);\n }\n};\n\nexport default {\n current,\n stackPop,\n stackPush,\n subscribePop,\n subscribePush,\n unsubscribePop,\n unsubscribePush,\n};\n","import { MetadataOverride } from '@angular/core/testing';\n\nimport { flatten } from '../common/core.helpers';\nimport { NG_MOCKS, NG_MOCKS_OVERRIDES, NG_MOCKS_TOUCHES } from '../common/core.tokens';\nimport { AnyType } from '../common/core.types';\n\nexport default (\n providers: any,\n): {\n mocks?: Map<any, any>;\n overrides?: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]>;\n touches?: Set<any>;\n} => {\n let mocks: Map<any, any> | undefined;\n let overrides: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]> | undefined;\n let touches: Set<any> | undefined;\n\n for (const provide of flatten(providers || [])) {\n if (typeof provide !== 'object') {\n continue;\n }\n if (provide.provide === NG_MOCKS) {\n mocks = provide.useValue;\n }\n if (provide.provide === NG_MOCKS_OVERRIDES) {\n overrides = provide.useValue;\n }\n if (provide.provide === NG_MOCKS_TOUCHES) {\n touches = provide.useValue;\n }\n }\n\n return {\n mocks,\n overrides,\n touches,\n };\n};\n","import { Provider } from '@angular/core';\n\nimport { Type } from './core.types';\n\n/**\n * NgModuleWithProviders helps to support ModuleWithProviders in all angular versions.\n * In A5 it was without the generic type.\n *\n * @internal remove after removal of A5 support\n */\nexport interface NgModuleWithProviders<T = any> {\n ngModule: Type<T>;\n providers?: Provider[];\n}\n\n/**\n * isNgModuleDefWithProviders checks if an object implements ModuleWithProviders.\n *\n * @internal\n */\nexport const isNgModuleDefWithProviders = (declaration: any): declaration is NgModuleWithProviders =>\n declaration && typeof declaration === 'object' && typeof declaration.ngModule === 'function';\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { AnyType } from './core.types';\n\n/**\n * Checks whether a class has been decorated with a specific Angular decorator.\n * Due to the extension / multi decoration, we rely on the last used decorator.\n *\n * @internal\n *\n * ```ts\n * isNgType(MockModule, 'NgModule'); // returns true\n * isNgType(RealComponent, 'Component'); // returns true\n * isNgType(ArbitraryClass, 'Directive'); // returns false\n * isNgType(ArbitraryClass, 'Injectable'); // returns false\n * ```\n */\nexport const isNgType = (declaration: AnyType<any>, type: string): boolean => {\n const { decorators } = collectDeclarations(declaration);\n if (decorators.length === 0) {\n return false;\n }\n\n let offset = 1;\n\n // Injectable works well if the declaration is in providers.\n if (type === 'Injectable' && decorators.indexOf('Injectable') !== -1) {\n return true;\n }\n\n // Skipping Injectable.\n while (decorators[decorators.length - offset] === 'Injectable') {\n offset += 1;\n }\n\n return decorators[decorators.length - offset] === type;\n};\n","import { InjectionToken, PipeTransform } from '@angular/core';\n\nimport { Type } from './core.types';\nimport { isNgInjectionToken } from './func.is-ng-injection-token';\nimport { isNgType } from './func.is-ng-type';\n\nconst isModuleCheck = (def: any, ngType?: string): boolean => (!ngType || ngType === 'm') && isNgType(def, 'NgModule');\nconst isComponentCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'c') && isNgType(def, 'Component');\nconst isDirectiveCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'd') && isNgType(def, 'Directive');\nconst isPipeCheck = (def: any, ngType?: string): boolean => (!ngType || ngType === 'p') && isNgType(def, 'Pipe');\nconst isInjectableCheck = (def: any, ngType?: string): boolean =>\n (!ngType || ngType === 'i') && isNgType(def, 'Injectable');\n\n/**\n * Checks whether a class has been decorated by @NgModule.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealModule, 'm'); // returns true\n * isNgDef(MockModule, 'm'); // returns true\n * isNgDef(ArbitraryModule, 'm'); // returns true\n * isNgDef(ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'm'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealComponent, 'c'); // returns true\n * isNgDef(MockComponent, 'c'); // returns true\n * isNgDef(ArbitraryComponent, 'c'); // returns true\n * isNgDef(ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'c'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealDirective, 'd'); // returns true\n * isNgDef(MockDirective, 'd'); // returns true\n * isNgDef(ArbitraryDirective, 'd'); // returns true\n * isNgDef(ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'd'): declaration is Type<any>;\n\n/**\n * Checks whether a class has been decorated by @Pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealPipe, 'p'); // returns true\n * isNgDef(MockPipe, 'p'); // returns true\n * isNgDef(ArbitraryPipe, 'p'); // returns true\n * isNgDef(ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'p'): declaration is Type<PipeTransform>;\n\n/**\n * Checks whether a class has been decorated by @Injectable.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealService, 'i'); // returns true\n * isNgDef(MockService, 'i'); // returns true\n * isNgDef(ArbitraryService, 'i'); // returns true\n * isNgDef(ArbitraryClass, 'i'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 'i'): declaration is Type<any>;\n\n/**\n * Checks whether a variable is a token.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(realToken, 't'); // returns true\n * isNgDef(mockToken, 't'); // returns true\n * isNgDef(arbitraryToken, 't'); // returns true\n * isNgDef(arbitraryObject, 't'); // returns false\n * ```\n */\nexport function isNgDef(declaration: any, ngType: 't'): declaration is InjectionToken<any>;\n\n/**\n * Checks whether a class or variable has been decorated by a ng type.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isNgDef\n *\n * ```ts\n * isNgDef(RealModule); // returns true\n * isNgDef(MockComponent); // returns true\n * isNgDef(ArbitraryDirective); // returns true\n * isNgDef(token); // returns true\n * isNgDef(ArbitraryClass); // returns false\n * ```\n */\nexport function isNgDef(declaration: any): declaration is Type<any>;\n\nexport function isNgDef(declaration: any, ngType?: string): declaration is Type<any> {\n if (ngType === 't') {\n return isNgInjectionToken(declaration);\n }\n if (typeof declaration !== 'function') {\n return false;\n }\n\n const isModule = isModuleCheck(declaration, ngType);\n const isComponent = isComponentCheck(declaration, ngType);\n const isDirective = isDirectiveCheck(declaration, ngType);\n const isPipe = isPipeCheck(declaration, ngType);\n const isInjectable = isInjectableCheck(declaration, ngType);\n\n return isModule || isComponent || isDirective || isPipe || isInjectable;\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"AbstractControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.AbstractControl, [\"DefaultValueAccessor\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.DefaultValueAccessor, [\"FormControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.FormControl, [\"FormControlDirective\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.FormControlDirective, [\"NG_ASYNC_VALIDATORS\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_ASYNC_VALIDATORS, [\"NG_VALIDATORS\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_VALIDATORS, [\"NG_VALUE_ACCESSOR\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NG_VALUE_ACCESSOR, [\"NgControl\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NgControl, [\"NgModel\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__.NgModel });","import * as module from '@angular/forms';\n\nconst AbstractControl = module.AbstractControl;\nconst DefaultValueAccessor = module.DefaultValueAccessor;\nconst FormControl = module.FormControl;\nconst FormControlDirective = module.FormControlDirective;\nconst NG_ASYNC_VALIDATORS = module.NG_ASYNC_VALIDATORS;\nconst NG_VALIDATORS = module.NG_VALIDATORS;\nconst NG_VALUE_ACCESSOR = module.NG_VALUE_ACCESSOR;\nconst NgControl = module.NgControl;\nconst NgModel = module.NgModel;\n\nexport default {\n AbstractControl,\n DefaultValueAccessor,\n FormControl,\n FormControlDirective,\n NG_ASYNC_VALIDATORS,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgModel,\n};\n","export default (def: any): boolean => {\n if (!def) {\n return false;\n }\n\n if (typeof def !== 'function' && typeof def !== 'object') {\n return false;\n }\n\n if (def._isMockFunction && def.mockName && def.__annotations__) {\n return true;\n }\n\n return false;\n};\n","import funcGetName from './func.get-name';\nimport funcIsJestMock from './func.is-jest-mock';\n\nexport default (def: any): void => {\n if (funcIsJestMock(def)) {\n throw new Error(\n [\n `ng-mocks got ${funcGetName(def)} which has been already mocked by jest.mock().`,\n 'It is not possible to produce correct mocks for it, because jest.mock() removes Angular decorators.',\n `To fix this, please avoid jest.mock() on the file which exports ${funcGetName(\n def,\n )} or add jest.dontMock() on it.`,\n 'The same should be done for all related dependencies.',\n ].join(' '),\n );\n }\n};\n","import errorEmptyDef from './error.empty-def';\nimport errorJestMock from './error.jest-mock';\nimport errorMissingDecorators from './error.missing-decorators';\n\nexport default (callback: any) => (def: any) => {\n errorEmptyDef(def);\n\n try {\n return callback(def);\n } catch {\n errorJestMock(def);\n errorMissingDecorators(def);\n }\n};\n","export default (def: any): void => {\n if (!def) {\n throw new Error(\n [\n 'undefined / null has been passed into ng-mocks as a declaration / provider.',\n 'Please ensure that the current test file has correct imports:',\n 'imported files exist and imported declarations have been exported in the file.',\n ].join(' '),\n );\n }\n};\n","import funcGetName from './func.get-name';\n\nexport default (def: any): void => {\n throw new Error(\n [\n `${funcGetName(def)} declaration has been passed into ng-mocks without Angular decorators.`,\n 'Therefore, it cannot be properly handled.',\n 'Highly likely,',\n typeof jest === 'undefined' ? '' : /* istanbul ignore next */ 'jest.mock() has been used on its file, or',\n 'ng-mocks is imported in production code, or got a class without Angular decoration.',\n 'Otherwise, please create an issue on github: https://github.com/help-me-mom/ng-mocks/issues/new?title=False%20positive%20ng-mocks%20not%20in%20JIT.',\n 'Thank you in advance for support.',\n ].join(' '),\n );\n};\n","import { Component, Directive } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): Directive & Partial<Component> & { standalone?: boolean } =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.Component) {\n return declaration.Component;\n }\n if (declaration.Directive) {\n return declaration.Directive;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { Injector, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { MockConfig } from './mock';\n\nexport default <T>(\n value: T,\n): value is T &\n MockConfig & {\n __ngMocksInjector?: Injector;\n __template?: TemplateRef<any>;\n __vcr?: ViewContainerRef;\n } => {\n return value && typeof value === 'object' && !!(value as any).__ngMocksConfig;\n};\n","import { AsyncValidator, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\n\nimport { AnyType } from './core.types';\nimport { MockControlValueAccessor, MockValidator } from './mock-control-value-accessor';\n\nconst applyProxy = (proxy: any, method: string, value: any, storage?: string) => {\n if (proxy.instance && storage) {\n proxy.instance[storage] = value;\n }\n if (proxy.instance && proxy.instance[method]) {\n return proxy.instance[method](value);\n }\n};\n\nexport class MockControlValueAccessorProxy implements ControlValueAccessor {\n public instance?: Partial<MockControlValueAccessor & ControlValueAccessor>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnChange(fn: any): void {\n applyProxy(this, 'registerOnChange', fn, '__simulateChange');\n }\n\n public registerOnTouched(fn: any): void {\n applyProxy(this, 'registerOnTouched', fn, '__simulateTouch');\n }\n\n public setDisabledState(isDisabled: boolean): void {\n applyProxy(this, 'setDisabledState', isDisabled);\n }\n\n public writeValue(value: any): void {\n applyProxy(this, 'writeValue', value);\n }\n}\n\nexport class MockValidatorProxy implements Validator {\n public instance?: Partial<MockValidator & Validator>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnValidatorChange(fn: any): void {\n applyProxy(this, 'registerOnValidatorChange', fn, '__simulateValidatorChange');\n }\n\n public validate(control: any): ValidationErrors | null {\n if (this.instance && this.instance.validate) {\n return this.instance.validate(control);\n }\n\n return null;\n }\n}\n\nexport class MockAsyncValidatorProxy implements AsyncValidator {\n public instance?: Partial<MockValidator & AsyncValidator>;\n\n public constructor(public readonly target?: AnyType<any>) {}\n\n public registerOnValidatorChange(fn: any): void {\n applyProxy(this, 'registerOnValidatorChange', fn, '__simulateValidatorChange');\n }\n\n public validate(control: any): any {\n if (this.instance && this.instance.validate) {\n const result: any = this.instance.validate(control);\n\n return result === undefined ? Promise.resolve(null) : result;\n }\n\n return Promise.resolve(null);\n }\n}\n","import { EventEmitter, Injector, Optional, Self } from '@angular/core';\n\nimport { IMockBuilderConfig } from '../mock-builder/types';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport mockInstanceApply from '../mock-instance/mock-instance-apply';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport coreDefineProperty from './core.define-property';\nimport coreForm from './core.form';\nimport { mapValues } from './core.helpers';\nimport { AnyType } from './core.types';\nimport funcIsMock from './func.is-mock';\nimport { MockControlValueAccessorProxy } from './mock-control-value-accessor-proxy';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst setValueAccessor = (instance: any, ngControl?: any) => {\n if (ngControl && !ngControl.valueAccessor && instance.__ngMocksConfig.setControlValueAccessor) {\n try {\n ngControl.valueAccessor = new MockControlValueAccessorProxy(instance.__ngMocksCtor);\n } catch {\n // nothing to do.\n }\n }\n};\n\n// connecting to NG_VALUE_ACCESSOR\nconst installValueAccessor = (ngControl: any, instance: any) => {\n if (!ngControl.valueAccessor.instance && ngControl.valueAccessor.target === instance.__ngMocksCtor) {\n ngControl.valueAccessor.instance = instance;\n helperMockService.mock(instance, 'registerOnChange');\n helperMockService.mock(instance, 'registerOnTouched');\n helperMockService.mock(instance, 'setDisabledState');\n helperMockService.mock(instance, 'writeValue');\n instance.__ngMocksConfig.isControlValueAccessor = true;\n }\n};\n\n// connecting to NG_VALIDATORS\n// connecting to NG_ASYNC_VALIDATORS\nconst installValidator = (validators: any[], instance: any) => {\n for (const validator of validators) {\n if (!validator.instance && validator.target === instance.__ngMocksCtor) {\n validator.instance = instance;\n helperMockService.mock(instance, 'registerOnValidatorChange');\n helperMockService.mock(instance, 'validate');\n instance.__ngMocksConfig.isValidator = true;\n }\n }\n};\n\nconst applyNgValueAccessor = (instance: any, ngControl: any) => {\n setValueAccessor(instance, ngControl);\n\n try {\n // istanbul ignore else\n if (ngControl) {\n installValueAccessor(ngControl, instance);\n installValidator(ngControl._rawValidators, instance);\n installValidator(ngControl._rawAsyncValidators, instance);\n }\n } catch {\n // nothing to do.\n }\n};\n\nconst applyOutputs = (instance: MockConfig & Record<keyof any, any>) => {\n const mockOutputs = [];\n for (const output of instance.__ngMocksConfig.outputs || []) {\n mockOutputs.push(output.split(':')[0]);\n }\n\n for (const output of mockOutputs) {\n if (instance[output] || Object.getOwnPropertyDescriptor(instance, output)) {\n continue;\n }\n instance[output] = new EventEmitter<any>();\n }\n};\n\nconst applyPrototype = (instance: Mock, prototype: AnyType<any>) => {\n for (const prop of [\n ...helperMockService.extractMethodsFromPrototype(prototype),\n ...helperMockService.extractPropertiesFromPrototype(prototype),\n ]) {\n const descriptor = helperMockService.extractPropertyDescriptor(prototype, prop);\n helperMockService.definePropertyDescriptor(instance, prop, descriptor);\n }\n};\n\nconst applyMethods = (instance: Mock & Record<keyof any, any>, prototype: AnyType<any>) => {\n for (const method of helperMockService.extractMethodsFromPrototype(prototype)) {\n if (instance[method] || Object.getOwnPropertyDescriptor(instance, method)) {\n continue;\n }\n helperMockService.mock(instance, method);\n }\n};\n\nconst applyProps = (instance: Mock & Record<keyof any, any>, prototype: AnyType<any>) => {\n for (const prop of helperMockService.extractPropertiesFromPrototype(prototype)) {\n if (instance[prop] || Object.getOwnPropertyDescriptor(instance, prop)) {\n continue;\n }\n helperMockService.mock(instance, prop, 'get');\n helperMockService.mock(instance, prop, 'set');\n }\n};\n\nexport type ngMocksMockConfig = {\n config?: IMockBuilderConfig;\n hostBindings?: string[];\n hostListeners?: string[];\n init?: (instance: any) => void;\n isControlValueAccessor?: boolean;\n isValidator?: boolean;\n outputs?: string[];\n queryScanKeys?: string[];\n setControlValueAccessor?: boolean;\n};\n\nconst applyOverrides = (instance: any, mockOf: any, injector?: Injector): void => {\n const configGlobal: Set<any> | undefined = ngMocksUniverse.getOverrides().get(mockOf);\n const callbacks = configGlobal ? mapValues(configGlobal) : [];\n if (instance.__ngMocksConfig.init) {\n callbacks.push(instance.__ngMocksConfig.init);\n }\n callbacks.push(...mockInstanceApply(mockOf));\n\n for (const callback of callbacks) {\n const overrides = callback(instance, injector);\n if (!overrides) {\n continue;\n }\n mockHelperStub(instance, overrides);\n }\n};\n\nexport interface MockConfig {\n __ngMocksConfig: ngMocksMockConfig;\n}\n\n/**\n * Mock class is the base class for each mock.\n * Usually, it should not be used directly.\n */\nexport class Mock {\n protected __ngMocksConfig!: ngMocksMockConfig;\n\n public constructor(\n injector: Injector | null = null,\n ngControl: any | null = null, // NgControl\n ) {\n const mockOf = (this.constructor as any).mockOf;\n coreDefineProperty(this, '__ngMocks', true);\n coreDefineProperty(this, '__ngMocksInjector', injector);\n coreDefineProperty(this, '__ngMocksCtor', this.constructor);\n for (const key of this.__ngMocksConfig.queryScanKeys || /* istanbul ignore next */ []) {\n coreDefineProperty(this, `__ngMocksVcr_${key}`, undefined);\n }\n for (const key of this.__ngMocksConfig.hostBindings || /* istanbul ignore next */ []) {\n helperMockService.mock(this, key, 'get');\n helperMockService.mock(this, key, 'set');\n }\n for (const key of this.__ngMocksConfig.hostListeners || /* istanbul ignore next */ []) {\n helperMockService.mock(this, key);\n }\n\n // istanbul ignore else\n if (funcIsMock(this)) {\n applyNgValueAccessor(this, ngControl);\n applyOutputs(this);\n applyPrototype(this, Object.getPrototypeOf(this));\n applyMethods(this, mockOf.prototype);\n applyProps(this, mockOf.prototype);\n }\n\n // and faking prototype\n Object.setPrototypeOf(this, mockOf.prototype);\n\n applyOverrides(this, mockOf, injector ?? undefined);\n }\n}\n\ncoreDefineProperty(Mock, 'parameters', [\n [Injector, new Optional()],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n]);\n","import { Mock } from './mock';\n\n/**\n * LegacyControlValueAccessor was used to be a way to manipulate a mock ControlValueAccessor.\n *\n * @deprecated use isMockControlValueAccessor or isMockValidator instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport class LegacyControlValueAccessor extends Mock {\n /**\n * @deprecated use isMockControlValueAccessor instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\n public __simulateChange(value: any): void;\n // istanbul ignore next\n public __simulateChange() {\n // nothing to do.\n }\n\n // istanbul ignore next\n /**\n * @deprecated use isMockControlValueAccessor instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\n public __simulateTouch() {\n // nothing to do.\n }\n\n // istanbul ignore next\n /**\n * @deprecated use isMockValidator instead (removing in A13)\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\n public __simulateValidatorChange() {\n // nothing to do.\n }\n}\n\n/**\n * MockControlValueAccessor exposes access to a mock ControlValueAccessor.\n * It should be used in a combination with isMockControlValueAccessor.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n */\nexport interface MockControlValueAccessor {\n /**\n * It simulates an external change of the value.\n * Please consider usage of ngMocks.change().\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n */\n __simulateChange(value: any): void;\n\n /**\n * It simulates an external touch.\n * Please consider usage of ngMocks.touch().\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\n __simulateTouch(): void;\n}\n\n/**\n * MockValidator exposes access to a mock Validator.\n * It should be used in a combination with isMockValidator.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport interface MockValidator {\n /**\n * it simulates an external validation change.\n *\n * @see https://ng-mocks.sudo.eu/extra/mock-form-controls\n */\n __simulateValidatorChange(): void;\n}\n","import { Input } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, inputs?: string[], exclude?: string[]) => {\n // istanbul ignore else\n if (inputs) {\n for (const input of inputs) {\n const [key, alias] = input.split(': ');\n if (exclude && exclude.indexOf(key) !== -1) {\n continue;\n }\n Input(alias)(cls.prototype, key);\n }\n }\n};\n","import coreDefineProperty from './core.define-property';\nimport { AnyType } from './core.types';\nimport funcGetName from './func.get-name';\nimport { ngMocksMockConfig } from './mock';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nexport default (mock: AnyType<any>, source: AnyType<any>, configInput: ngMocksMockConfig = {}): void => {\n coreDefineProperty(mock, 'mockOf', source);\n coreDefineProperty(mock, 'nameConstructor', funcGetName(mock));\n coreDefineProperty(mock, 'name', `MockOf${funcGetName(source)}`, true);\n const config = ngMocksUniverse.getConfigMock().has(source)\n ? {\n ...configInput,\n config: {\n ...ngMocksUniverse.getConfigMock().get(source),\n ...configInput.config,\n },\n }\n : configInput;\n coreDefineProperty(mock.prototype, '__ngMocksConfig', config);\n};\n","import { ContentChild, ContentChildren, Query, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\nconst map: any = {\n ContentChild,\n ContentChildren,\n ViewChild,\n ViewChildren,\n};\n\nconst isInternalKey = (key: string): boolean => {\n return key.indexOf('__mock') === 0;\n};\n\nconst cloneVcrQuery = (query: Query & { ngMetadataName?: string }) => ({\n ...query,\n ngMetadataName: query.ngMetadataName,\n read: ViewContainerRef,\n});\n\nconst generateFinalQueries = (queries: {\n [key: string]: Query;\n}): [Array<[string, Query & { ngMetadataName?: string }]>, string[]] => {\n const final: Array<[string, Query & { ngMetadataName?: string }]> = [];\n const scanKeys: string[] = [];\n\n for (const key of Object.keys(queries)) {\n const query: Query & { ngMetadataName?: string } = queries[key];\n final.push([key, query]);\n\n if (!query.isViewQuery && !isInternalKey(key)) {\n scanKeys.push(key);\n final.push([`__ngMocksVcr_${key}`, cloneVcrQuery(query)]);\n }\n }\n\n return [final, scanKeys];\n};\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also, we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, queries?: { [key: string]: Query }): string[] => {\n // istanbul ignore if\n if (!queries) {\n return [];\n }\n const [final, keys] = generateFinalQueries(queries);\n\n for (const [key, query] of final) {\n // istanbul ignore else\n if (query.ngMetadataName) {\n const decorator = map[query.ngMetadataName];\n decorator(query.selector, query)(cls.prototype, key);\n }\n }\n\n return keys;\n};\n","import { AnyType } from '../common/core.types';\n\nexport default (provide: AnyType<any>, useExisting: AnyType<any>) => ({\n provide,\n useExisting,\n});\n","import { AnyType } from '../common/core.types';\n\nexport default (provide: AnyType<any>, useFactory: any) => ({\n multi: true,\n provide,\n useFactory,\n});\n","import { Provider } from '@angular/core';\n\nimport coreForm from '../common/core.form';\nimport { flatten } from '../common/core.helpers';\nimport { AnyType } from '../common/core.types';\nimport funcGetProvider from '../common/func.get-provider';\nimport {\n MockAsyncValidatorProxy,\n MockControlValueAccessorProxy,\n MockValidatorProxy,\n} from '../common/mock-control-value-accessor-proxy';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport toExistingProvider from './to-existing-provider';\nimport toFactoryProvider from './to-factory-provider';\n\nconst processTokens = (mockType: AnyType<any>, provider: any) => {\n const provide = funcGetProvider(provider);\n if (coreForm.NG_VALIDATORS && provide === coreForm.NG_VALIDATORS) {\n return toFactoryProvider(provide, () => new MockValidatorProxy(mockType));\n }\n if (coreForm.NG_ASYNC_VALIDATORS && provide === coreForm.NG_ASYNC_VALIDATORS) {\n return toFactoryProvider(provide, () => new MockAsyncValidatorProxy(mockType));\n }\n if (coreForm.NG_VALUE_ACCESSOR && provide === coreForm.NG_VALUE_ACCESSOR) {\n return toFactoryProvider(provide, () => new MockControlValueAccessorProxy(mockType));\n }\n\n return undefined;\n};\n\nconst processOwnUseExisting = (sourceType: AnyType<any>, mockType: AnyType<any>, provider: any) => {\n const provide = funcGetProvider(provider);\n\n // Check tests/issue-302/test.spec.ts\n if (provide === coreForm.NgControl || provide === coreForm.FormControlDirective) {\n return undefined;\n }\n\n if (provider !== provide && provider.useExisting === sourceType) {\n return toExistingProvider(provide, mockType);\n }\n if (\n provider !== provide &&\n provider.useExisting &&\n provider.useExisting.__forward_ref__ &&\n provider.useExisting() === sourceType\n ) {\n return toExistingProvider(provide, mockType);\n }\n\n return undefined;\n};\n\nconst processProvider = (\n sourceType: AnyType<any>,\n mockType: AnyType<any>,\n provider: any,\n resolutions: Map<any, any>,\n): any => {\n const token = processTokens(mockType, provider);\n if (token) {\n return token;\n }\n\n const ownUseExisting = processOwnUseExisting(sourceType, mockType, provider);\n if (ownUseExisting) {\n return ownUseExisting;\n }\n\n return helperMockService.resolveProvider(provider, resolutions);\n};\n\nexport default (\n sourceType: AnyType<any>,\n mockType: AnyType<any>,\n providers?: any[],\n): {\n providers: Provider[];\n setControlValueAccessor?: boolean;\n} => {\n const result: Provider[] = [];\n let setControlValueAccessor: boolean | undefined;\n const resolutions = new Map();\n\n for (const provider of flatten(providers || /* istanbul ignore next */ [])) {\n const provide = funcGetProvider(provider);\n if (provide === coreForm.NG_VALUE_ACCESSOR) {\n setControlValueAccessor = false;\n }\n const mock = processProvider(sourceType, mockType, provider, resolutions);\n if (mock) {\n result.push(mock);\n }\n }\n\n return {\n providers: result,\n setControlValueAccessor,\n };\n};\n","import { Component, Directive, NgModule, Provider, ViewChild } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\nimport decorateInputs from '../common/decorate.inputs';\nimport decorateMock from '../common/decorate.mock';\nimport decorateOutputs from '../common/decorate.outputs';\nimport decorateQueries from '../common/decorate.queries';\nimport { ngMocksMockConfig } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport mockNgDef from '../mock-module/mock-ng-def';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport cloneProviders from './clone-providers';\nimport toExistingProvider from './to-existing-provider';\n\nconst buildConfig = (\n source: AnyType<any>,\n meta: {\n inputs?: string[];\n outputs?: string[];\n providers?: Provider[];\n queries?: Record<string, ViewChild>;\n },\n setControlValueAccessor: boolean,\n) => {\n return {\n config: ngMocksUniverse.config.get(source),\n outputs: meta.outputs,\n queryScanKeys: [],\n setControlValueAccessor: setControlValueAccessor,\n };\n};\n\nexport default <T extends Component & Directive>(\n source: AnyType<any>,\n mock: AnyType<any>,\n meta: Component &\n Directive &\n NgModule & {\n hostBindings?: Array<[string, any]>;\n hostListeners?: Array<[string, any, any]>;\n imports?: any[];\n standalone?: boolean;\n },\n params: T,\n): Component & Directive => {\n const options: T & { imports?: any[]; standalone?: boolean } = {\n ...params,\n };\n\n if (meta.exportAs !== undefined) {\n options.exportAs = meta.exportAs;\n }\n if (meta.selector !== undefined) {\n options.selector = meta.selector;\n }\n if (meta.standalone !== undefined) {\n options.standalone = meta.standalone;\n }\n\n const { setControlValueAccessor, providers } = cloneProviders(source, mock, meta.providers || []);\n providers.push(toExistingProvider(source, mock));\n options.providers = providers;\n\n const { providers: viewProviders } = cloneProviders(source, mock, meta.viewProviders || []);\n if (viewProviders.length > 0) {\n options.viewProviders = viewProviders;\n }\n\n if (meta.standalone && meta.imports) {\n const { imports } = mockNgDef({ imports: meta.imports })[1];\n if (imports?.length) {\n options.imports = imports as never;\n }\n }\n\n const config: ngMocksMockConfig = buildConfig(\n source,\n meta,\n setControlValueAccessor ??\n helperMockService.extractMethodsFromPrototype(source.prototype).indexOf('writeValue') !== -1,\n );\n decorateMock(mock, source, config);\n\n // istanbul ignore else\n if (meta.queries) {\n decorateInputs(mock, meta.inputs, Object.keys(meta.queries));\n }\n decorateOutputs(mock, meta.outputs);\n config.queryScanKeys = decorateQueries(mock, meta.queries);\n\n config.hostBindings = [];\n for (const [key] of meta.hostBindings || /* istanbul ignore next */ []) {\n // mock declarations should not have side effects based on host bindings.\n // HostBinding(...args)(mock.prototype, key);\n if (config.hostBindings.indexOf(key) === -1) {\n config.hostBindings.push(key);\n }\n }\n\n config.hostListeners = [];\n for (const [key] of meta.hostListeners || /* istanbul ignore next */ []) {\n // mock declarations should not have side effects based on host bindings.\n // HostListener(...args)(mock.prototype, key);\n if (config.hostListeners.indexOf(key) === -1) {\n config.hostListeners.push(key);\n }\n }\n\n return options;\n};\n","import { Output } from '@angular/core';\n\nimport { AnyType } from './core.types';\n\n// Looks like an A9 bug, that queries from @Component are not processed.\n// Also we have to pass prototype, not the class.\n// The same issue happens with outputs, but time to time\n// (when I restart tests with refreshing browser manually).\n// https://github.com/help-me-mom/ng-mocks/issues/109\nexport default (cls: AnyType<any>, outputs?: string[]) => {\n // istanbul ignore else\n if (outputs) {\n for (const output of outputs) {\n const [key, alias] = output.split(': ');\n Output(alias)(cls.prototype, key);\n }\n }\n};\n","import funcGetName from './func.get-name';\nimport { isNgDef } from './func.is-ng-def';\n\nconst getType = (value: any): string =>\n isNgDef(value, 'p')\n ? 'pipe'\n : isNgDef(value, 'd')\n ? 'directive'\n : isNgDef(value, 'c')\n ? 'component'\n : isNgDef(value, 'm')\n ? 'module'\n : isNgDef(value, 'i')\n ? 'service'\n : isNgDef(value, 't')\n ? 'token'\n : '';\n\nexport default (value: any, funcName: string) => {\n if (value === undefined || value === null) {\n throw new Error(`null / undefined has been passed into ${funcName}. Please check that its import is correct.`);\n }\n\n if (funcName === 'MockPipe' && isNgDef(value, 'p')) {\n return;\n }\n if (funcName === 'MockDirective' && isNgDef(value, 'd')) {\n return;\n }\n if (funcName === 'MockComponent' && isNgDef(value, 'c')) {\n return;\n }\n if (funcName === 'MockModule' && isNgDef(value, 'm')) {\n return;\n }\n\n const type = getType(value);\n\n if (type && funcName === 'MockPipe') {\n throw new Error(`${funcName} accepts pipes, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockDirective') {\n throw new Error(`${funcName} accepts directives, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockComponent') {\n throw new Error(`${funcName} accepts components, whereas ${funcGetName(value)} is a ${type}.`);\n }\n if (type && funcName === 'MockModule') {\n throw new Error(`${funcName} accepts modules, whereas ${funcGetName(value)} is a ${type}.`);\n }\n};\n","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { AnyType, Type } from './core.types';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * isMockNgDef verifies whether a class is a mock component class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockComponent, 'c'); // returns true\n * isMockNgDef(RealComponent, 'c'); // returns false\n * isMockNgDef(ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(component: AnyType<T>, ngType: 'c'): component is Type<MockedComponent<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock directive class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockDirective, 'd'); // returns true\n * isMockNgDef(RealDirective, 'd'); // returns false\n * isMockNgDef(ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(directive: AnyType<T>, ngType: 'd'): directive is Type<MockedDirective<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock pipe class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockPipe, 'p'); // returns true\n * isMockNgDef(RealPipe, 'p'); // returns false\n * isMockNgDef(ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(pipe: AnyType<T>, ngType: 'p'): pipe is Type<MockedPipe<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock module class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockModule, 'm'); // returns true\n * isMockNgDef(RealModule, 'm'); // returns false\n * isMockNgDef(ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockNgDef<T>(module: AnyType<T>, ngType: 'm'): module is Type<MockedModule<T>>;\n\n/**\n * isMockNgDef verifies whether a class is a mock class.\n *\n * @internal\n *\n * ```ts\n * isMockNgDef(MockComponent); // returns true\n * isMockNgDef(RealModule); // returns false\n * isMockNgDef(ArbitraryClass); // returns false\n * ```\n */\nexport function isMockNgDef<T>(module: Type<T>): module is Type<T>;\n\nexport function isMockNgDef<TComponent>(\n component: AnyType<TComponent> & { mockOf?: any },\n type?: 'c' | 'd' | 'p' | 'm',\n): component is Type<TComponent> {\n if (!(component as any).mockOf) {\n return false;\n }\n if (!type) {\n return true;\n }\n\n return isNgDef(component.mockOf, type as never);\n}\n","import { extendClass } from '../common/core.helpers';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (def: any, type: any, func: string, cacheFlag: string, base: any, decorator: any) => {\n funcImportExists(def, func);\n\n if (isMockNgDef(def, type)) {\n return def;\n }\n\n if (ngMocksUniverse.flags.has(cacheFlag) && ngMocksUniverse.cacheDeclarations.has(def)) {\n return ngMocksUniverse.cacheDeclarations.get(def);\n }\n\n const hasNgMocksDepsResolution = ngMocksUniverse.config.has('ngMocksDepsResolution');\n if (!hasNgMocksDepsResolution) {\n ngMocksUniverse.config.set('ngMocksDepsResolution', new Map());\n }\n\n const mock = extendClass(base);\n decorator(def, mock);\n\n // istanbul ignore else\n if (ngMocksUniverse.flags.has(cacheFlag)) {\n ngMocksUniverse.cacheDeclarations.set(def, mock);\n }\n\n if (!hasNgMocksDepsResolution) {\n ngMocksUniverse.config.delete('ngMocksDepsResolution');\n }\n\n return mock as any;\n};\n","import { Query, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\n\nconst viewChildArgs: any = { read: ViewContainerRef, static: false };\n\nconst viewChildTemplate = (selector: string, key: string): string =>\n `<div *ngIf=\"ngMocksRender_${key}_${selector}\" data-${key}=\"${selector}\"><ng-template #${key}_${selector}></ng-template></div>`;\n\nconst isTemplateRefQuery = (query: Query): boolean => {\n if (query.isViewQuery) {\n return false; // ignoring all internal @ViewChild\n }\n if (query.read && query.read !== TemplateRef) {\n return false; // ignoring read of instances\n }\n if (typeof query.selector !== 'string' && !query.read) {\n return false; // ignoring class selectors if they do not read TemplateRef\n }\n\n return true;\n};\n\nexport default (queries?: Record<keyof any, any>): string => {\n const parts = ['<ng-content></ng-content>'];\n // istanbul ignore if\n if (!queries) {\n return parts.join('');\n }\n\n for (const key of Object.keys(queries)) {\n const query: Query = queries[key];\n if (!isTemplateRefQuery(query)) {\n continue;\n }\n if (typeof query.selector === 'string') {\n const selector = query.selector.replace(new RegExp('\\\\W', 'mg'), '_');\n queries[`__mockView_key_${selector}`] = new ViewChild(`key_${selector}`, viewChildArgs);\n queries[`__mockTpl_key_${selector}`] = query;\n parts.push(viewChildTemplate(selector, 'key'));\n }\n queries[`__mockView_prop_${key}`] = new ViewChild(`prop_${key}`, viewChildArgs);\n parts.push(viewChildTemplate(key, 'prop'));\n }\n\n return parts.join('');\n};\n","export default (\n contentChildSelector: string | [string, ...number[]],\n): [string, string, string, undefined | number[]] => {\n if (typeof contentChildSelector === 'string') {\n return ['key', `__mockTpl_key_${contentChildSelector}`, contentChildSelector, undefined];\n }\n\n const [key, ...indices] = contentChildSelector;\n\n return ['prop', key, key, indices.length > 0 ? indices : undefined];\n};\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n EmbeddedViewRef,\n Injector,\n Optional,\n QueryList,\n Self,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport coreForm from '../common/core.form';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { Type } from '../common/core.types';\nimport funcIsMock from '../common/func.is-mock';\nimport { MockConfig } from '../common/mock';\nimport { LegacyControlValueAccessor } from '../common/mock-control-value-accessor';\nimport decorateDeclaration from '../mock/decorate-declaration';\nimport getMock from '../mock/get-mock';\n\nimport generateTemplate from './render/generate-template';\nimport getKey from './render/get-key';\nimport { MockedComponent } from './types';\n\nconst mixRenderPrepareVcr = (\n instance: MockConfig & Record<keyof any, any>,\n type: string,\n selector: string,\n cdr: ChangeDetectorRef,\n): ViewContainerRef | undefined => {\n if (!instance[`ngMocksRender_${type}_${selector}`]) {\n instance[`ngMocksRender_${type}_${selector}`] = true;\n cdr.detectChanges();\n }\n\n return instance[`__mockView_${type}_${selector}`];\n};\n\nconst mixRenderReorderViews = (\n viewContainer: ViewContainerRef,\n views: Array<EmbeddedViewRef<any>>,\n index: number,\n): void => {\n for (const view of views.splice(index + 1)) {\n view.destroy();\n }\n\n let viewIndex = 0;\n for (const view of views) {\n if (!view) {\n continue;\n }\n viewContainer.move(view, viewIndex);\n viewIndex += 1;\n }\n};\n\nconst mixRenderApplyContext = (view: EmbeddedViewRef<any>, context: Record<keyof any, any>): void => {\n for (const contextKey of Object.keys(view.context)) {\n view.context[contextKey] = undefined;\n }\n for (const contextKey of Object.keys(context)) {\n view.context[contextKey] = (context as any)[contextKey];\n }\n view.markForCheck();\n};\n\nconst mixRenderHandleViews = (\n vcr: ViewContainerRef,\n cdr: ChangeDetectorRef,\n templates: any[],\n views: Array<EmbeddedViewRef<any>>,\n indices: undefined | number[],\n context: Record<keyof any, any>,\n): number => {\n let index = -1;\n\n for (const templateRef of templates) {\n index += 1;\n views[index] = views[index] || undefined;\n if ((indices && indices.indexOf(index) === -1) || !templateRef) {\n continue;\n }\n if (!(templateRef instanceof TemplateRef)) {\n throw new Error(`Cannot find TemplateRef`);\n }\n if (!views[index]) {\n views[index] = vcr.createEmbeddedView(templateRef, {});\n }\n mixRenderApplyContext(views[index], context);\n }\n cdr.detectChanges();\n\n return index;\n};\n\nconst mixRender = (instance: MockConfig & Record<keyof any, any>, cdr: ChangeDetectorRef): void => {\n // Providing a method to render any @ContentChild based on its selector.\n coreDefineProperty(\n instance,\n '__render',\n (contentChildSelector: string | [string, ...number[]], $implicit?: any, variables?: Record<keyof any, any>) => {\n const [type, key, selector, indices] = getKey(contentChildSelector);\n\n const vcr = mixRenderPrepareVcr(instance, type, selector, cdr);\n if (!vcr) {\n return;\n }\n\n const property: any = instance[key];\n const templates = property instanceof QueryList ? property.toArray() : [property];\n\n const views = instance[`ngMocksRender_${type}_${selector}_views`] || [];\n const index = mixRenderHandleViews(vcr, cdr, templates, views, indices, { ...variables, $implicit });\n\n mixRenderReorderViews(vcr, views, index);\n instance[`ngMocksRender_${type}_${selector}_views`] = views;\n cdr.detectChanges();\n },\n );\n};\n\nconst mixHideHandler = (\n instance: MockConfig & Record<keyof any, any>,\n type: string,\n selector: string,\n indices: undefined | number[],\n) => {\n const views = instance[`ngMocksRender_${type}_${selector}_views`];\n let index = -1;\n for (const view of views) {\n index += 1;\n if ((indices && indices.indexOf(index) === -1) || !view) {\n continue;\n }\n view.destroy();\n views[index] = undefined;\n }\n};\n\nconst mixHide = (instance: MockConfig & Record<keyof any, any>, changeDetector: ChangeDetectorRef): void => {\n // Providing method to hide any @ContentChild based on its selector.\n coreDefineProperty(instance, '__hide', (contentChildSelector: string | [string, ...number[]]) => {\n const [type, , selector, indices] = getKey(contentChildSelector);\n\n if (!instance[`ngMocksRender_${type}_${selector}`]) {\n return;\n }\n mixHideHandler(instance, type, selector, indices);\n\n if (!indices) {\n instance[`ngMocksRender_${type}_${selector}`] = false;\n }\n changeDetector.detectChanges();\n });\n};\n\nclass ComponentMockBase extends LegacyControlValueAccessor implements AfterContentInit {\n // istanbul ignore next\n public constructor(\n injector: Injector,\n ngControl: any, // NgControl\n changeDetector: ChangeDetectorRef,\n ) {\n super(injector, ngControl);\n if (funcIsMock(this)) {\n mixRender(this, changeDetector);\n mixHide(this, changeDetector);\n }\n }\n\n public ngAfterContentInit(): void {\n const config = (this.__ngMocksConfig as any).config;\n if (!(this as any).__rendered && config && config.render) {\n for (const block of Object.keys(config.render)) {\n const { $implicit, variables } =\n config.render[block] !== true\n ? config.render[block]\n : {\n $implicit: undefined,\n variables: {},\n };\n (this as any).__render(block, $implicit, variables);\n }\n (this as any).__rendered = true;\n }\n }\n}\n\ncoreDefineProperty(ComponentMockBase, 'parameters', [\n [Injector],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n [ChangeDetectorRef],\n]);\n\nconst decorateClass = (component: Type<any>, mock: Type<any>): void => {\n const meta = coreReflectDirectiveResolve(component);\n Component(\n decorateDeclaration(component, mock, meta, {\n template: generateTemplate(meta.queries),\n }),\n )(mock);\n};\n\n/**\n * MockComponents creates an array of mock component classes out of components passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockComponents(\n * Dep1Component,\n * Dep2Component,\n * ),\n * });\n * ```\n */\nexport function MockComponents(...components: Array<Type<any>>): Array<Type<MockedComponent<any>>> {\n return components.map(MockComponent);\n}\n\n/**\n * MockComponent creates a mock component class out of an arbitrary component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockComponent(Dep1Component),\n * MockComponent(Dep2Component),\n * ],\n * });\n * ```\n */\nexport function MockComponent<TComponent>(component: Type<TComponent>): Type<MockedComponent<TComponent>> {\n return getMock(component, 'c', 'MockComponent', 'cacheComponent', ComponentMockBase, decorateClass);\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Injector,\n OnInit,\n Optional,\n Self,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport coreForm from '../common/core.form';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { Type } from '../common/core.types';\nimport { LegacyControlValueAccessor } from '../common/mock-control-value-accessor';\nimport decorateDeclaration from '../mock/decorate-declaration';\nimport getMock from '../mock/get-mock';\n\nimport { MockedDirective } from './types';\n\nclass DirectiveMockBase extends LegacyControlValueAccessor implements OnInit {\n // istanbul ignore next\n public constructor(\n injector: Injector,\n ngControl: any, // NgControl\n cdr: ChangeDetectorRef,\n vcr: ViewContainerRef,\n element: ElementRef | null = null,\n template: TemplateRef<any> | null = null,\n ) {\n super(injector, ngControl);\n this.__ngMocksInstall(vcr, cdr, element, template);\n }\n\n public ngOnInit(): void {\n const config = (this.__ngMocksConfig as any).config;\n if (config?.render) {\n const { $implicit, variables } =\n config.render !== true\n ? config.render\n : {\n $implicit: undefined,\n variables: {},\n };\n (this as any).__render($implicit, variables);\n }\n }\n\n private __ngMocksInstall(\n vcr: ViewContainerRef,\n cdr: ChangeDetectorRef,\n element: ElementRef | null,\n template: TemplateRef<any> | null,\n ): void {\n // Basically any directive on ng-template is treated as structural, even it does not control render process.\n // In our case we do not if we should render it or not and due to this we do nothing.\n coreDefineProperty(this, '__element', element);\n coreDefineProperty(this, '__template', template);\n coreDefineProperty(this, '__viewContainer', vcr);\n coreDefineProperty(this, '__vcr', vcr);\n coreDefineProperty(this, '__cdr', cdr);\n coreDefineProperty(this, '__isStructural', template && vcr);\n\n // Providing method to render mock values.\n coreDefineProperty(this, '__render', ($implicit?: any, variables?: Record<keyof any, any>) => {\n if (vcr && template) {\n vcr.clear();\n vcr.createEmbeddedView(template, { ...variables, $implicit });\n cdr.detectChanges();\n }\n });\n }\n}\n\ncoreDefineProperty(DirectiveMockBase, 'parameters', [\n [Injector],\n [coreForm.NgControl || /* istanbul ignore next */ (() => undefined), new Optional(), new Self()],\n [ChangeDetectorRef],\n [ViewContainerRef],\n [ElementRef, new Optional(), new Self()],\n [TemplateRef, new Optional(), new Self()],\n]);\n\nconst decorateClass = (directive: Type<any>, mock: Type<any>): void => {\n const meta = coreReflectDirectiveResolve(directive);\n const options = decorateDeclaration(directive, mock, meta, {});\n Directive(options)(mock);\n};\n\n/**\n * MockDirectives creates an array of mock directive classes out of directives passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockDirectives(\n * Dep1Directive,\n * Dep2Directive,\n * ),\n * });\n * ```\n */\nexport function MockDirectives(...directives: Array<Type<any>>): Array<Type<MockedDirective<any>>> {\n return directives.map(MockDirective);\n}\n\n/**\n * MockDirective creates a mock directive class out of an arbitrary directive.\n *\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockDirective(Dep1Directive),\n * MockDirective(Dep2Directive),\n * ],\n * });\n * ```\n */\nexport function MockDirective<TDirective>(directive: Type<TDirective>): Type<MockedDirective<TDirective>> {\n return getMock(directive, 'd', 'MockDirective', 'cacheDirective', DirectiveMockBase, decorateClass);\n}\n","import { Pipe } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): Pipe & { standalone?: boolean } =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.Pipe) {\n return declaration.Pipe;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectPipeResolve from '../common/core.reflect.pipe-resolve';\nimport { Type } from '../common/core.types';\nimport decorateMock from '../common/decorate.mock';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport { Mock } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport { MockedPipe } from './types';\n\n/**\n * MockPipes creates an array of mock pipe classes out of pipes passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockPipes(\n * Dep1Pipe,\n * Dep2Pipe,\n * ),\n * });\n * ```\n */\nexport function MockPipes(...pipes: Array<Type<PipeTransform>>): Array<Type<PipeTransform>> {\n return pipes.map(pipe => MockPipe(pipe, undefined));\n}\n\nconst getMockClass = (pipe: Type<any>, transform?: PipeTransform['transform']): Type<any> => {\n const mock = extendClass(Mock);\n Pipe(coreReflectPipeResolve(pipe))(mock);\n decorateMock(mock, pipe, {\n init: (instance: PipeTransform) => {\n if (transform) {\n instance.transform = transform;\n }\n if (!instance.transform) {\n helperMockService.mock(instance, 'transform', `${funcGetName(instance)}.transform`);\n }\n },\n });\n\n return mock;\n};\n\n/**\n * MockPipe creates a mock pipe class out of an arbitrary pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockPipe(Dep1Pipe),\n * MockPipe(Dep2Pipe),\n * ],\n * });\n * ```\n */\nexport function MockPipe<TPipe extends PipeTransform>(\n pipe: Type<TPipe>,\n transform?: TPipe['transform'],\n): Type<MockedPipe<TPipe>>;\n\nexport function MockPipe<TPipe extends PipeTransform>(\n pipe: Type<TPipe>,\n transform?: TPipe['transform'],\n): Type<MockedPipe<TPipe>> {\n funcImportExists(pipe, 'MockPipe');\n\n if (isMockNgDef(pipe, 'p')) {\n return pipe;\n }\n\n // istanbul ignore next\n if (ngMocksUniverse.flags.has('cachePipe') && ngMocksUniverse.cacheDeclarations.has(pipe)) {\n return ngMocksUniverse.cacheDeclarations.get(pipe);\n }\n\n const mock = getMockClass(pipe, transform);\n if (ngMocksUniverse.flags.has('cachePipe')) {\n ngMocksUniverse.cacheDeclarations.set(pipe, mock);\n }\n\n return mock as any;\n}\n","import { NgModule } from '@angular/core';\n\nimport collectDeclarations from '../resolve/collect-declarations';\n\nimport coreReflectBodyCatch from './core.reflect.body-catch';\n\nexport default (def: any): NgModule =>\n coreReflectBodyCatch((arg: any) => {\n const declaration = collectDeclarations(arg);\n if (declaration.NgModule) {\n return declaration.NgModule;\n }\n\n throw new Error('Cannot resolve declarations');\n })(def);\n","import { NgModule, Provider } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectModuleResolve from '../common/core.reflect.module-resolve';\nimport { AnyType, Type } from '../common/core.types';\nimport decorateMock from '../common/decorate.mock';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isMockNgDef } from '../common/func.is-mock-ng-def';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders, NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { Mock } from '../common/mock';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockNgDef from './mock-ng-def';\n\nconst flagMock = (resolution?: string): boolean => resolution === 'mock' && ngMocksUniverse.flags.has('skipMock');\n\nconst flagKeep = (resolution?: string): boolean => resolution === 'keep' && !ngMocksUniverse.flags.has('skipMock');\n\nconst flagReplace = (resolution?: string): boolean =>\n resolution === 'replace' && !ngMocksUniverse.flags.has('skipMock');\n\nconst flagNever = (ngModule?: any): boolean =>\n coreConfig.neverMockModule.indexOf(funcGetName(ngModule)) !== -1 && !ngMocksUniverse.flags.has('skipMock');\n\nconst preProcessFlags = (ngModule: AnyType<any>): { isRootModule: boolean; toggleSkipMockFlag: boolean } => {\n let toggleSkipMockFlag = false;\n let isRootModule = true;\n\n if (ngMocksUniverse.flags.has('hasRootModule')) {\n isRootModule = false;\n } else {\n ngMocksUniverse.flags.add('hasRootModule');\n }\n\n const resolution = ngMocksUniverse.getResolution(ngModule);\n if (flagMock(resolution)) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.delete('skipMock');\n }\n if (flagNever(ngModule)) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.add('skipMock');\n }\n if (!isRootModule && (flagKeep(resolution) || flagReplace(resolution))) {\n toggleSkipMockFlag = true;\n ngMocksUniverse.flags.add('skipMock');\n }\n\n return {\n isRootModule,\n toggleSkipMockFlag,\n };\n};\n\nconst postProcessFlags = ({\n isRootModule,\n toggleSkipMockFlag,\n}: {\n isRootModule: boolean;\n toggleSkipMockFlag: boolean;\n}): void => {\n if (toggleSkipMockFlag && ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.flags.delete('skipMock');\n } else if (toggleSkipMockFlag && !ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.flags.add('skipMock');\n }\n if (isRootModule) {\n ngMocksUniverse.flags.delete('hasRootModule');\n }\n};\n\nconst extractModuleAndProviders = (\n module: any,\n): {\n ngModule: Type<any>;\n ngModuleProviders: Provider[] | undefined;\n} => {\n let ngModule: Type<any>;\n let ngModuleProviders: Provider[] | undefined;\n\n if (isNgModuleDefWithProviders(module)) {\n ngModule = module.ngModule;\n if (module.providers) {\n ngModuleProviders = module.providers;\n }\n } else {\n ngModule = module;\n }\n\n return {\n ngModule,\n ngModuleProviders,\n };\n};\n\nconst getExistingMockModule = (ngModule: Type<any>, isRootModule: boolean): Type<any> | undefined => {\n if (isMockNgDef(ngModule, 'm')) {\n return ngModule;\n }\n\n // Every module should be replaced with its mock copy only once to avoid errors like:\n // Failed: Type ...Component is part of the declarations of 2 modules: ...Module and ...Module...\n if (ngMocksUniverse.flags.has('cacheModule') && ngMocksUniverse.cacheDeclarations.has(ngModule)) {\n return ngMocksUniverse.cacheDeclarations.get(ngModule);\n }\n\n // Now we check if we need to keep the original module or to replace it with some other.\n // and there is no override in its resolution.\n if (isRootModule || ngMocksUniverse.config.get('ngMocksDepsResolution')?.get(ngModule) === 'mock') {\n return undefined;\n }\n if (ngMocksUniverse.hasBuildDeclaration(ngModule)) {\n const instance = ngMocksUniverse.getBuildDeclaration(ngModule);\n if (isNgDef(instance, 'm') && instance !== ngModule) {\n return instance;\n }\n }\n\n return undefined;\n};\n\nconst getMockModuleDef = (ngModule: Type<any>, mockModule?: Type<any>): NgModule | undefined => {\n if (!mockModule) {\n const meta = coreReflectModuleResolve(ngModule);\n const [changed, ngModuleDef] = mockNgDef(meta, ngModule);\n if (changed) {\n return ngModuleDef;\n }\n }\n\n return undefined;\n};\n\nconst detectMockModule = (ngModule: Type<any>, mockModule?: Type<any>): Type<any> => {\n const mockModuleDef = getMockModuleDef(ngModule, mockModule);\n\n if (mockModuleDef) {\n const parent = ngMocksUniverse.flags.has('skipMock') ? ngModule : Mock;\n const mock = extendClass(parent);\n\n // the last thing is to apply decorators.\n NgModule(mockModuleDef)(mock);\n decorateMock(mock, ngModule);\n\n return mock;\n }\n\n return mockModule || ngModule;\n};\n\nconst getMockProviders = (ngModuleProviders: Provider[] | undefined): Provider[] | undefined => {\n if (ngModuleProviders) {\n const [changed, ngModuleDef] = mockNgDef({ providers: ngModuleProviders });\n\n return changed ? ngModuleDef.providers : ngModuleProviders;\n }\n\n return undefined;\n};\n\nconst generateReturn = (\n module: any,\n ngModule: AnyType<any>,\n ngModuleProviders: Provider[] | undefined,\n mockModule: AnyType<any>,\n mockModuleProviders: Provider[] | undefined,\n): any =>\n mockModule === ngModule && mockModuleProviders === ngModuleProviders\n ? module\n : isNgModuleDefWithProviders(module)\n ? { ngModule: mockModule, ...(mockModuleProviders ? { providers: mockModuleProviders } : {}) }\n : mockModule;\n\n/**\n * MockModule creates a mock module class out of an arbitrary module.\n * All declarations, imports, exports and providers will be mocked too.\n *\n * @see https://ng-mocks.sudo.eu/api/MockModule\n *\n * ```ts\n * TestBed.configureTestingModule({\n * imports: [\n * MockModule(SharedModule),\n * ],\n * });\n * ```\n */\nexport function MockModule<T>(ngModule: Type<T>): Type<T>;\n\n/**\n * MockModule creates a mock module class with mock provides out of an arbitrary module with providers.\n * All declarations, imports, exports and providers will be mocked too.\n *\n * @see https://ng-mocks.sudo.eu/api/MockModule\n *\n * ```ts\n * TestBed.configureTestingModule({\n * imports: [\n * MockModule(StoreModule.forRoot()),\n * ],\n * });\n * ```\n */\nexport function MockModule<T>(ngModule: NgModuleWithProviders<T>): NgModuleWithProviders<T>;\n\nexport function MockModule(def: any): any {\n funcImportExists(def, 'MockModule');\n\n const { ngModule, ngModuleProviders } = extractModuleAndProviders(def);\n const flags = preProcessFlags(ngModule);\n try {\n const mockModule = detectMockModule(ngModule, getExistingMockModule(ngModule, flags.isRootModule));\n // istanbul ignore else\n if (ngMocksUniverse.flags.has('cacheModule')) {\n ngMocksUniverse.cacheDeclarations.set(ngModule, mockModule);\n }\n if (ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(mockModule);\n }\n const mockModuleProviders = getMockProviders(ngModuleProviders);\n\n return generateReturn(def, ngModule, ngModuleProviders, mockModule, mockModuleProviders);\n } finally {\n postProcessFlags(flags);\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nimport { MockModule } from './mock-module';\n\nconst processDefMap: Array<[any, any]> = [\n ['c', MockComponent],\n ['d', MockDirective],\n ['p', MockPipe],\n];\n\nconst processDef = (def: any) => {\n if (isNgDef(def, 'm') || isNgModuleDefWithProviders(def)) {\n return MockModule(def as any);\n }\n if (ngMocksUniverse.hasBuildDeclaration(def)) {\n return ngMocksUniverse.getBuildDeclaration(def);\n }\n if (ngMocksUniverse.flags.has('skipMock') && ngMocksUniverse.getResolution(def) !== 'mock') {\n return def;\n }\n for (const [flag, func] of processDefMap) {\n if (isNgDef(def, flag)) {\n return func(def);\n }\n }\n};\n\n// resolveProvider is a special case because of the def structure.\nconst createResolveProvider =\n (resolutions: Map<any, any>, change: () => void): ((def: Provider) => any) =>\n (def: Provider) =>\n helperMockService.resolveProvider(def, resolutions, change);\n\nconst createResolveWithProviders = (def: any, mockDef: any): boolean =>\n mockDef && mockDef.ngModule && isNgModuleDefWithProviders(def);\n\nconst createResolveExisting = (def: any, resolutions: Map<any, any>, change: (flag?: boolean) => void): any => {\n const mockDef = resolutions.get(def);\n if (def !== mockDef) {\n change();\n }\n\n return mockDef;\n};\n\nconst createResolveExcluded = (def: any, resolutions: Map<any, any>, change: (flag?: boolean) => void): void => {\n resolutions.set(def, undefined);\n\n change();\n};\n\nconst createResolve =\n (resolutions: Map<any, any>, change: (flag?: boolean) => void): ((def: any) => any) =>\n (def: any) => {\n if (resolutions.has(def)) {\n return createResolveExisting(def, resolutions, change);\n }\n\n const detectedDef = isNgModuleDefWithProviders(def) ? def.ngModule : def;\n if (ngMocksUniverse.isExcludedDef(detectedDef)) {\n return createResolveExcluded(def, resolutions, change);\n }\n ngMocksUniverse.touches.add(detectedDef);\n\n const mockDef = processDef(def);\n if (createResolveWithProviders(def, mockDef)) {\n resolutions.set(def.ngModule, mockDef.ngModule);\n }\n if (ngMocksUniverse.flags.has('skipMock')) {\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.add(mockDef);\n }\n resolutions.set(def, mockDef);\n change(mockDef !== def);\n\n return mockDef;\n };\n\nexport default (\n change: () => void,\n resolutions: Map<any, any>,\n): {\n resolve: (def: any) => any;\n resolveProvider: (def: Provider) => any;\n} => {\n const resolve = createResolve(resolutions, change);\n const resolveProvider = createResolveProvider(resolutions, change);\n\n return {\n resolve,\n resolveProvider,\n };\n};\n","import { flatten } from '../common/core.helpers';\nimport funcGetProvider from '../common/func.get-provider';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (providers?: any[]): void => {\n for (const provider of flatten(providers ?? [])) {\n const provide = funcGetProvider(provider);\n\n const config = ngMocksUniverse.configInstance.get(provide) ?? {};\n config.exported = true;\n ngMocksUniverse.configInstance.set(provide, config);\n }\n};\n","import { Component, Directive, NgModule, Pipe, Provider } from '@angular/core';\n\nimport { flatten } from '../common/core.helpers';\nimport { dependencyKeys, Type } from '../common/core.types';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport createResolvers from './create-resolvers';\nimport markProviders from './mark-providers';\n\nconst flatToExisting = <T, R>(data: T | T[], callback: (arg: T) => R | undefined): R[] =>\n flatten(data)\n .map(callback)\n .filter((item): item is R => !!item);\n\nconst configureProcessMetaKeys = (\n resolve: (def: any) => any,\n resolveProvider: (def: Provider) => any,\n): Array<[dependencyKeys, (def: any) => any]> => [\n ['declarations', resolve],\n ['entryComponents', resolve],\n ['bootstrap', resolve],\n ['providers', resolveProvider],\n ['viewProviders', resolveProvider],\n ['imports', resolve],\n ['exports', resolve],\n];\n\nconst processMeta = (\n ngModule: Partial<Record<dependencyKeys, any>> & {\n skipMarkProviders?: boolean;\n },\n resolve: (def: any) => any,\n resolveProvider: (def: Provider) => any,\n): NgModule => {\n const mockModuleDef: Partial<NgModule & Component & Directive & Pipe> = {};\n const keys = configureProcessMetaKeys(resolve, resolveProvider);\n\n const cachePipe = ngMocksUniverse.flags.has('cachePipe');\n if (!cachePipe) {\n ngMocksUniverse.flags.add('cachePipe');\n }\n for (const [key, callback] of keys) {\n if (ngModule[key]?.length) {\n mockModuleDef[key] = flatToExisting(ngModule[key], callback);\n }\n }\n if (!ngModule.skipMarkProviders) {\n markProviders(mockModuleDef.providers);\n markProviders(mockModuleDef.viewProviders);\n }\n\n if (!cachePipe) {\n ngMocksUniverse.flags.delete('cachePipe');\n }\n\n return mockModuleDef;\n};\n\nconst resolveDefForExport = (\n def: any,\n resolve: (def: any) => any,\n correctExports: boolean,\n ngModule?: Type<any>,\n): Type<any> | undefined => {\n const moduleConfig = ngMocksUniverse.config.get(ngModule) || {};\n const instance = isNgModuleDefWithProviders(def) ? def.ngModule : def;\n const mockDef = resolve(instance);\n if (!mockDef) {\n return undefined;\n }\n\n // If we export a declaration, then we have to export its module too.\n const config = ngMocksUniverse.config.get(instance);\n if (config?.export && ngModule && !moduleConfig.export) {\n ngMocksUniverse.config.set(ngModule, {\n ...moduleConfig,\n export: true,\n });\n }\n\n if (correctExports && !moduleConfig.exportAll && !config?.export) {\n return undefined;\n }\n\n return mockDef;\n};\n\nconst skipAddExports = (mockDef: any, mockModuleDef: NgModule): mockDef is undefined =>\n !mockDef || (!!mockModuleDef.exports && mockModuleDef.exports.indexOf(mockDef) !== -1);\n\n// if we are in the skipMock mode we need to export only the default exports.\n// if we are in the correctModuleExports mode we need to export only default exports.\nconst addExports = (\n resolve: (def: any) => any,\n change: () => void,\n ngModuleDef: NgModule,\n mockModuleDef: NgModule,\n ngModule?: Type<any>,\n): void => {\n const correctExports = ngMocksUniverse.flags.has('skipMock') || ngMocksUniverse.flags.has('correctModuleExports');\n for (const def of flatten([ngModuleDef.imports || [], ngModuleDef.declarations || []])) {\n const mockDef = resolveDefForExport(def, resolve, correctExports, ngModule);\n if (skipAddExports(mockDef, mockModuleDef)) {\n continue;\n }\n\n change();\n mockModuleDef.exports = mockModuleDef.exports || [];\n mockModuleDef.exports.push(mockDef);\n }\n};\n\nexport default (\n ngModuleDef: NgModule & {\n skipMarkProviders?: boolean;\n },\n ngModule?: Type<any>,\n): [boolean, NgModule] => {\n const hasResolver = ngMocksUniverse.config.has('mockNgDefResolver');\n if (!hasResolver) {\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n }\n let changed = !ngMocksUniverse.flags.has('skipMock');\n const change = (flag = true) => {\n changed = changed || flag;\n };\n const { resolve, resolveProvider } = createResolvers(change, ngMocksUniverse.config.get('mockNgDefResolver'));\n const mockModuleDef = processMeta(ngModuleDef, resolve, resolveProvider);\n addExports(resolve, change, ngModuleDef, mockModuleDef, ngModule);\n\n if (!hasResolver) {\n ngMocksUniverse.config.delete('mockNgDefResolver');\n }\n\n return [changed, mockModuleDef];\n};\n","import { Directive, NgModule } from '@angular/core';\n\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport mockNgDef from '../../mock-module/mock-ng-def';\n\nexport default (meta?: Directive | NgModule): NgModule | undefined => {\n if (!meta) {\n return undefined;\n }\n\n const skipMock = ngMocksUniverse.flags.has('skipMock');\n // istanbul ignore else\n if (!skipMock) {\n ngMocksUniverse.flags.add('skipMock');\n }\n const [changed, def] = mockNgDef(meta);\n // istanbul ignore else\n if (!skipMock) {\n ngMocksUniverse.flags.delete('skipMock');\n }\n if (!changed) {\n return undefined;\n }\n\n return def;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (value: any): value is MockedDebugNode => {\n return !!value?.nativeElement || !!value?.nativeNode;\n};\n","import { AnyType, DebugNodeSelector } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nexport default (selector: AnyType<any> | DebugNodeSelector): string => {\n if (typeof selector === 'string') {\n return selector;\n }\n if (typeof selector === 'function') {\n return selector.name;\n }\n if (isNgDef(selector, 't')) {\n return (selector as any)._desc;\n }\n if (Array.isArray(selector)) {\n return selector[0];\n }\n if (!selector) {\n return '<EMPTY>';\n }\n\n return '<UNKNOWN>';\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (value: any): value is { debugElement: MockedDebugNode } => {\n return !!value && typeof value === 'object' && value.debugElement !== undefined;\n};\n","import { ComponentFixture, getTestBed } from '@angular/core/testing';\n\nexport default () => {\n const fixtures: Array<ComponentFixture<any>> = (getTestBed() as any)._activeFixtures;\n\n return fixtures[fixtures.length - 1];\n};\n","import { DebugElement } from '@angular/core';\n\nimport isFixture from '../format/is-fixture';\nimport funcGetLastFixture from '../func.get-last-fixture';\n\nconst findDebugElement = (el: any): DebugElement | undefined => {\n if (isFixture(el)) {\n return findDebugElement(el.debugElement);\n }\n if (el && el.injector && el.query) {\n return el;\n }\n\n return undefined;\n};\n\nexport default (args: any[], defaultNotFoundValue?: any): [any, any, any] => {\n let el;\n let sel;\n let notFoundValue = defaultNotFoundValue;\n if (args.length === 3) {\n el = findDebugElement(args[0]);\n sel = args[1];\n notFoundValue = args[2];\n } else if (args.length === 1) {\n el = findDebugElement(funcGetLastFixture());\n [sel] = args;\n } else if (!args[0]) {\n sel = args[1];\n } else {\n el = findDebugElement(args[0]);\n if (el) {\n sel = args[1];\n } else {\n el = findDebugElement(funcGetLastFixture());\n [sel, notFoundValue] = args;\n }\n }\n sel = findDebugElement(sel) ?? sel;\n\n return [el, sel, notFoundValue];\n};\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"By\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_platform_browser_bc6fa964__.By });","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { AnyType, Type } from './core.types';\n\n/**\n * Returns the original class of a mock module class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockModule); // returns RealModule\n * getSourceOfMock(RealModule); // returns RealModule\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedModule<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock component class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockComponent); // returns RealComponent\n * getSourceOfMock(RealComponent); // returns RealComponent\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedComponent<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock directive class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockDirective); // returns RealDirective\n * getSourceOfMock(RealDirective); // returns RealDirective\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedDirective<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock pipe class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockPipe); // returns RealPipe\n * getSourceOfMock(RealPipe); // returns RealPipe\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<MockedPipe<T>>): Type<T>;\n\n/**\n * Returns the original class of a mock class.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getSourceOfMock\n *\n * ```ts\n * getSourceOfMock(MockClass); // returns RealClass\n * getSourceOfMock(RealClass); // returns RealClass\n * ```\n */\nexport function getSourceOfMock<T>(declaration: AnyType<T>): Type<T>;\n\nexport function getSourceOfMock<T>(declaration: any): Type<T> {\n return typeof declaration === 'function' && declaration.mockOf ? declaration.mockOf : declaration;\n}\n","import { DebugElement, Predicate } from '@angular/core';\nimport { By } from '@angular/platform-browser';\n\nimport { AnyType } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\n\nexport default (selector: string | AnyType<any> | [string] | [string, any]): Predicate<DebugElement> => {\n return Array.isArray(selector)\n ? By.css(selector.length === 1 ? `[${selector[0]}]` : `[${selector[0]}=\"${selector[1]}\"]`)\n : typeof selector === 'string'\n ? By.css(selector)\n : By.directive(getSourceOfMock(selector));\n};\n","import { DebugElement } from '@angular/core';\n\nimport isDebugNode from '../format/is-debug-node';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcParseFindArgs from './func.parse-find-args';\nimport funcParseFindTerm from './func.parse-find-term';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]): DebugElement => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, defaultNotFoundValue);\n const result = isDebugNode(sel) ? sel : el?.query(funcParseFindTerm(sel));\n if (result) {\n return result;\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find an element via ngMocks.find(${funcParseFindArgsName(sel)})`);\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (node: MockedDebugNode): boolean => {\n return node.nativeNode.nodeName === '#text';\n};\n","export default (a: any, b: any): boolean => {\n if (!a || !b) {\n return false;\n }\n\n return a === b;\n};\n","import detectTextNode from './detect-text-node';\n\nexport default (node: any) => {\n return detectTextNode(node)\n ? undefined\n : node.injector._tNode || // ivy\n node.injector.elDef || // classic\n undefined;\n};\n","import { Injector } from '@angular/core';\n\nimport { getTestBedInjection } from './core.helpers';\n\nconst defaultInjector: any = {};\n\nexport default (declaration: any, injector: Injector = defaultInjector): any => {\n if (injector === defaultInjector) {\n return getTestBedInjection(declaration);\n }\n try {\n return injector.get(declaration);\n } catch {\n return undefined;\n }\n};\n","import { DebugElement, ViewContainerRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\n\nimport elDefGetNode from './el-def-get-node';\n\nconst getVcr = (node: any, child: any): undefined | ViewContainerRef => {\n if (node === child) {\n return undefined;\n }\n if (child.nativeNode.nodeName !== '#comment') {\n return undefined;\n }\n\n return coreInjector(ViewContainerRef, child.injector);\n};\n\nconst getScanViewRefRootNodes = (node: any, child: any): Array<[number, any]> => {\n const vcr = getVcr(node, child);\n if (!vcr) {\n return [];\n }\n\n const result: Array<[number, any]> = [];\n for (let vrIndex = 0; vrIndex < vcr.length; vrIndex += 1) {\n const vr = vcr.get(vrIndex);\n for (let rnIndex = 0; rnIndex < (vr as any).rootNodes.length; rnIndex += 1) {\n result.push([rnIndex, (vr as any).rootNodes[rnIndex]]);\n }\n }\n\n return result;\n};\n\nconst scanViewRef = (node: DebugElement) => {\n let result: any;\n let index: any;\n\n for (const child of node.parent?.childNodes || []) {\n for (const [rnIndex, rootNode] of getScanViewRefRootNodes(node, child)) {\n if (rootNode === node.nativeNode && (index === undefined || rnIndex < index)) {\n result = elDefGetNode(child);\n index = rnIndex;\n }\n }\n }\n\n return result;\n};\n\nexport default (node: any) => {\n return (\n node.injector._tNode?.parent || // ivy\n node.injector.elDef?.parent || // classic\n scanViewRef(node) ||\n node.parent?.injector._tNode || // ivy\n node.parent?.injector.elDef || // classic\n undefined\n );\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectTextNode from './detect-text-node';\nimport elDefCompare from './el-def-compare';\nimport elDefGetNode from './el-def-get-node';\nimport elDefGetParent from './el-def-get-parent';\n\nexport default (node: MockedDebugNode): MockedDebugNode[] => {\n const elDef = elDefGetNode(node);\n if (!elDef || detectTextNode(node)) {\n return [];\n }\n\n const isDirect = (node as any).childNodes !== undefined;\n const children: MockedDebugNode[] = [];\n for (const childNode of (node as any).childNodes || node.parent?.childNodes || []) {\n const childNodeParent = elDefGetParent(childNode);\n\n if (!isDirect && !elDefCompare(elDef, childNodeParent)) {\n continue;\n }\n if (childNodeParent && !elDefCompare(elDef, childNodeParent)) {\n continue;\n }\n\n children.push(childNode);\n }\n\n if ((node as any).parent?.name === 'BODY') {\n const childNodes: any[] = (node as any).parent.childNodes;\n let start = childNodes.length;\n let end = 0;\n for (let i = childNodes.length - 1; i >= 0; i -= 1) {\n const childNode = childNodes[i];\n if (childNode.nativeNode.nodeName === '#comment') {\n end = i;\n } else if (childNode.nativeNode === node.nativeNode) {\n start = i + 1;\n break;\n }\n }\n for (let i = start; i < end; i += 1) {\n children.push(childNodes[i]);\n }\n }\n\n return children;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport elDefCompare from './el-def-compare';\nimport elDefGetNode from './el-def-get-node';\nimport elDefGetParent from './el-def-get-parent';\n\nconst detectParent = (node: MockedDebugNode, parent: MockedDebugNode | undefined): MockedDebugNode | undefined => {\n if (parent) {\n return parent;\n }\n\n const expected = elDefGetParent(node);\n const currentParent = node.parent ? elDefGetNode(node.parent) : undefined;\n if (node.parent && elDefCompare(expected, currentParent)) {\n return node.parent;\n }\n for (const childNode of node.parent?.childNodes || []) {\n const childElDef = elDefGetNode(childNode);\n if (elDefCompare(expected, childElDef)) {\n return childNode;\n }\n }\n\n return undefined;\n};\n\nexport default ((): typeof detectParent => detectParent)();\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectTextNode from './detect-text-node';\nimport nestedCheckChildren from './nested-check-children';\nimport nestedCheckParent from './nested-check-parent';\n\nconst nestedCheck = (\n node: MockedDebugNode | null | undefined,\n parent: MockedDebugNode | undefined,\n check: (node: MockedDebugNode, parent?: MockedDebugNode) => void | boolean,\n includeTextNode = false,\n): boolean => {\n if (!node) {\n return false;\n }\n if (!includeTextNode && detectTextNode(node)) {\n return false;\n }\n if (check(node, nestedCheckParent(node, parent))) {\n return true;\n }\n\n for (const childNode of nestedCheckChildren(node)) {\n if (nestedCheck(childNode, node, check, includeTextNode)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default ((): typeof nestedCheck => nestedCheck)();\n","import { DebugNode } from '@angular/core';\n\nimport { DebugNodeSelector } from '../../common/core.types';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\n\nimport nestedCheck from './nested-check';\n\nexport default (\n sel: DebugNode | DebugNodeSelector,\n callback: (node: DebugNode, parent?: DebugNode) => void | boolean,\n includeTextNode = false,\n): void => {\n const el = mockHelperFind(funcGetLastFixture(), sel, undefined);\n nestedCheck(el, undefined, callback, includeTextNode);\n};\n","import isDebugNode from './format/is-debug-node';\nimport isFixture from './format/is-fixture';\nimport funcGetLastFixture from './func.get-last-fixture';\n\nconst isSelector = (value: any): boolean => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n if (isFixture(value)) {\n return true;\n }\n if (isDebugNode(value)) {\n return true;\n }\n\n return true;\n};\n\nexport default (args: any[], isValidValue: (value: any) => boolean, defaultNotFoundValue?: any): [any, any, any] => {\n let el;\n let sel;\n let notFoundValue = defaultNotFoundValue;\n if (args.length === 3) {\n [el, sel, notFoundValue] = args;\n } else if (args.length === 1) {\n el = funcGetLastFixture();\n [sel] = args;\n } else if (isValidValue(args[1]) && isSelector(args[0])) {\n [el, sel] = args;\n } else {\n el = funcGetLastFixture();\n [sel, notFoundValue] = args;\n }\n\n return [el, sel, notFoundValue];\n};\n","import { DebugNode, Directive } from '@angular/core';\n\nimport coreInjector from '../common/core.injector';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport funcGetProvider from '../common/func.get-provider';\n\nconst getMeta = (token: any): Directive | undefined => {\n try {\n return coreReflectDirectiveResolve(token);\n } catch {\n return undefined;\n }\n};\n\nexport default (el: DebugNode | null | undefined, token: any): Directive | undefined => {\n // istanbul ignore if\n if (!el) {\n return undefined;\n }\n\n try {\n const provider = funcGetProvider(token);\n const instance = coreInjector(provider, el.injector);\n\n return getMeta(instance.constructor);\n } catch {\n return undefined;\n }\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (node: MockedDebugNode): string[] => {\n return (node.injector as any).elDef ? Object.keys((node.injector as any).elDef.element.publicProviders) : [];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\nimport funcParseProviderTokensDirectives from '../func.parse-provider-tokens-directives';\n\nexport default (node: MockedDebugNode, key: string): [string[], string[], number] => {\n const config = (node.injector as any).elDef.element.publicProviders[key];\n const token = config.provider.value;\n if (!token) {\n return [[], [], 0];\n }\n const meta = funcParseProviderTokensDirectives(node, token);\n\n const requiredAttributes = config.bindings.map((binding: any) => binding.nonMinifiedName || binding.name);\n\n return [meta?.inputs || [], requiredAttributes, config.nodeIndex];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\nimport funcParseProviderTokensDirectives from '../func.parse-provider-tokens-directives';\n\nimport funcGetPublicProviderKeys from './func.get-public-provider-keys';\nimport funcParseInputsAndRequiresAttributes from './func.parse-inputs-and-requires-attributes';\n\nconst collectSelectors = (node: MockedDebugNode): string[] => {\n const selectors: string[] = [];\n\n for (const token of node.providerTokens) {\n const meta = funcParseProviderTokensDirectives(node, token);\n if (meta?.selector && selectors.indexOf(meta.selector) === -1) {\n selectors.push(meta.selector);\n }\n }\n\n return selectors;\n};\n\nconst collectAttributesClassic = (node: MockedDebugNode): string[] => {\n const result: string[] = [];\n\n for (const key of funcGetPublicProviderKeys(node)) {\n const [inputs, expectedAttributes] = funcParseInputsAndRequiresAttributes(node, key);\n for (const input of inputs) {\n const [prop, alias] = input.split(': ');\n const attr = alias || prop;\n if (expectedAttributes.indexOf(prop) !== -1 && result.indexOf(attr) === -1) {\n result.push(attr);\n }\n }\n }\n\n return result;\n};\n\nconst collectAttributesIvy = (node: MockedDebugNode): string[] => {\n const result: string[] = [];\n\n const attrs = (node.injector as any)._tNode?.attrs || [];\n let step = 2;\n for (let index = 0; index < attrs.length; index += step) {\n // 3 is a divider between static and dynamic bindings\n if (typeof attrs[index] === 'number') {\n step = 1;\n continue;\n }\n const attr = attrs[index];\n if ((node.injector as any)._tNode.inputs?.[attr] && result.indexOf(attr) === -1) {\n result.push(attr);\n }\n }\n\n return result;\n};\n\nexport default (node: MockedDebugNode): [string[], string[]] => {\n const selectors = collectSelectors(node);\n const attributes = [...collectAttributesClassic(node), ...collectAttributesIvy(node)];\n\n return [selectors, attributes];\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectAttributeInSelectors from './detect-attribute-in-selectors';\nimport detectSelectorsFromNode from './detect-selectors-from-node';\n\nexport default (attribute: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n const [selectors, attributes] = detectSelectorsFromNode(node);\n\n if (attributes.indexOf(attribute) !== -1) {\n return true;\n }\n\n if (detectAttributeInSelectors(selectors, attribute)) {\n return true;\n }\n\n return false;\n };\n","export default (selectors: string[], query: string): boolean => {\n for (const selector of selectors) {\n const attributes = selector.match(/\\[([^=\\]]+)/g);\n if (!attributes) {\n continue;\n }\n\n for (const attribute of attributes) {\n if (attribute === `[${query}`) {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport funcGetPublicProviderKeys from './func.get-public-provider-keys';\nimport funcParseInputsAndRequiresAttributes from './func.parse-inputs-and-requires-attributes';\n\nconst detectInClassic = (node: MockedDebugNode, attribute: string, value: any): boolean => {\n for (const key of funcGetPublicProviderKeys(node)) {\n const [inputs, expectedAttributes, nodeIndex] = funcParseInputsAndRequiresAttributes(node, key);\n for (const input of inputs) {\n const [prop, alias] = input.split(': ');\n if (attribute !== (alias || prop) || expectedAttributes.indexOf(prop) === -1) {\n continue;\n }\n if (value === (node.injector as any).view.nodes[nodeIndex].instance[prop]) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst detectInIvy = (node: MockedDebugNode, attribute: string, value: any): boolean => {\n const attrs = (node.injector as any)._tNode?.attrs || [];\n let step = 2;\n for (let index = 0; index < attrs.length; index += step) {\n // 3 is a divider between static and dynamic bindings\n if (typeof attrs[index] === 'number') {\n step = 1;\n continue;\n }\n const attr = attrs[index];\n if (attr !== attribute || !(node.injector as any)._tNode.inputs?.[attr]) {\n continue;\n }\n const [attrIndex, attrProp] = (node.injector as any)._tNode.inputs[attr];\n\n if (value === (node.injector as any)._lView?.[attrIndex][attrProp]) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (attribute: string, value: any): ((node: MockedDebugNode) => boolean) =>\n node => {\n if (detectInIvy(node, attribute, value)) {\n return true;\n }\n\n return detectInClassic(node, attribute, value);\n };\n","import coreInjector from '../../common/core.injector';\nimport { AnyType } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { MockedDebugNode } from '../../mock-render/types';\n\nexport default (declaration: AnyType<any>): ((node: MockedDebugNode) => boolean) => {\n const source = getSourceOfMock(declaration);\n\n return node =>\n !!node && node.providerTokens.indexOf(source) !== -1 && coreInjector(source, node.injector) !== undefined;\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nexport default (id: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n return !!node.references[id];\n };\n","const regExp = new RegExp('\\\\[.*?\\\\]', 'g');\n\nexport default (selectors: string[], query: string): boolean => {\n for (const selector of selectors) {\n const attributes = selector.replace(regExp, '').split(',');\n\n for (const attribute of attributes) {\n if (attribute.trim() === query) {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { AnyType } from '../../common/core.types';\nimport { MockedDebugNode } from '../../mock-render/types';\n\nimport crawlByAttribute from './crawl-by-attribute';\nimport crawlByAttributeValue from './crawl-by-attribute-value';\nimport crawlByDeclaration from './crawl-by-declaration';\nimport crawlById from './crawl-by-id';\nimport crawlByTagName from './crawl-by-tag-name';\n\ntype SELECTOR = string | AnyType<any> | [any] | [any, any];\n\nconst isCrawlByAttribute = (selector: SELECTOR): selector is [string] => {\n return Array.isArray(selector) && selector.length === 1 && typeof selector[0] === 'string';\n};\n\nconst isCrawlByAttributeValue = (selector: SELECTOR): selector is [string, any] => {\n return Array.isArray(selector) && selector.length === 2 && typeof selector[0] === 'string';\n};\n\nconst isCrawlById = (selector: SELECTOR): selector is string => {\n return typeof selector === 'string' && selector.indexOf('#') === 0 && selector.length > 1;\n};\n\nconst isCrawlByTagName = (selector: SELECTOR): selector is string => {\n return typeof selector === 'string' && selector.indexOf('#') !== 0 && selector.length > 0;\n};\n\nconst isCrawlByDeclaration = (selector: SELECTOR): selector is AnyType<any> => {\n return typeof selector === 'function';\n};\n\nexport default (selector: SELECTOR): ((node: MockedDebugNode) => boolean) => {\n if (isCrawlByAttribute(selector)) {\n return crawlByAttribute(selector[0]);\n }\n if (isCrawlByAttributeValue(selector)) {\n return crawlByAttributeValue(selector[0], selector[1]);\n }\n if (isCrawlById(selector)) {\n return crawlById(selector.slice(1));\n }\n if (isCrawlByTagName(selector)) {\n return crawlByTagName(selector);\n }\n if (isCrawlByDeclaration(selector)) {\n return crawlByDeclaration(selector);\n }\n\n throw new Error('Unknown selector');\n};\n","import { MockedDebugNode } from '../../mock-render/types';\n\nimport detectSelectorsFromNode from './detect-selectors-from-node';\nimport detectTagNameInSelectors from './detect-tag-name-in-selectors';\n\nexport default (attribute: string): ((node: MockedDebugNode) => boolean) =>\n node => {\n const [selectors] = detectSelectorsFromNode(node);\n\n return detectTagNameInSelectors(selectors, attribute);\n };\n","export default (value: any) => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n\n return typeof value === 'function';\n};\n","import mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport detectCrawler from './detect-crawler';\nimport detectTextNode from './detect-text-node';\nimport funcIsValidRevealSelector from './func.is-valid-reveal-selector';\nimport mockHelperCrawl from './mock-helper.crawl';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]): any => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidRevealSelector, defaultNotFoundValue);\n const root = mockHelperFind(funcGetLastFixture(), el, undefined);\n\n const detector = detectCrawler(sel);\n\n let result;\n mockHelperCrawl(root, node => {\n if (node !== root && !detectTextNode(node) && detector(node)) {\n result = node;\n\n return true;\n }\n\n return false;\n });\n if (result) {\n return result;\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n\n throw new Error(`Cannot find a DebugElement via ngMocks.reveal(${funcParseFindArgsName(sel)})`);\n};\n","import funcIsMock from './func.is-mock';\nimport { MockControlValueAccessor } from './mock-control-value-accessor';\n\n/**\n * isMockControlValueAccessor helps to assert that an instance is a mock ControlValueAccessor\n * to perform valueChange or touch simulations.\n * Usually, it is used in if statements.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockControlValueAccessor\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\nexport const isMockControlValueAccessor = <T>(value: T): value is T & MockControlValueAccessor => {\n if (!funcIsMock(value)) {\n return false;\n }\n\n return !!value.__ngMocksConfig.isControlValueAccessor;\n};\n","export default (value: any): value is HTMLElement => {\n return !!value && typeof value === 'object' && value.innerHTML !== undefined;\n};\n","import mockHelperStub from '../mock-helper.stub';\n\n/**\n * @see https://developer.mozilla.org/de/docs/Web/Events\n */\nconst preventBubble = ['focus', 'blur', 'load', 'unload', 'change', 'reset', 'scroll'];\n\n// istanbul ignore next\nconst customEvent = (event: string, params?: EventInit) => {\n const initParams = {\n bubbles: false,\n cancelable: false,\n ...params,\n };\n const eventObj = document.createEvent('CustomEvent');\n eventObj.initCustomEvent(event, initParams.bubbles, initParams.cancelable, null);\n\n return eventObj;\n};\n\nconst eventCtor =\n typeof (Event as any) === 'function'\n ? (event: string, init?: EventInit): CustomEvent => new CustomEvent(event, init)\n : /* istanbul ignore next */ customEvent;\n\nconst keyMap: Record<string, object> = {\n alt: {\n altKey: true,\n code: 'AltLeft',\n key: 'Alt',\n location: 1,\n which: 18,\n },\n arrowdown: {\n code: 'ArrowDown',\n key: 'ArrowDown',\n location: 0,\n which: 40,\n },\n arrowleft: {\n code: 'ArrowLeft',\n key: 'ArrowLeft',\n location: 0,\n which: 37,\n },\n arrowright: {\n code: 'ArrowRight',\n key: 'ArrowRight',\n location: 0,\n which: 39,\n },\n arrowup: {\n code: 'ArrowUp',\n key: 'ArrowUp',\n location: 0,\n which: 38,\n },\n backspace: {\n code: 'Backspace',\n key: 'Backspace',\n location: 0,\n which: 8,\n },\n control: {\n code: 'ControlLeft',\n ctrlKey: true,\n key: 'Control',\n location: 1,\n which: 17,\n },\n enter: {\n code: 'Enter',\n key: 'Enter',\n location: 0,\n which: 13,\n },\n esc: {\n code: 'Escape',\n key: 'Escape',\n location: 0,\n which: 27,\n },\n meta: {\n code: 'MetaLeft',\n key: 'Meta',\n location: 1,\n metaKey: true,\n which: 91,\n },\n shift: {\n code: 'ShiftLeft',\n key: 'Shift',\n location: 1,\n shiftKey: true,\n which: 16,\n },\n space: {\n code: 'Space',\n key: ' ',\n location: 0,\n which: 32,\n },\n tab: {\n code: 'Tab',\n key: 'Tab',\n location: 0,\n which: 9,\n },\n};\nfor (let f = 1; f <= 12; f += 1) {\n keyMap[`f${f}`] = {\n code: `F${f}`,\n key: `F${f}`,\n location: 0,\n which: f + 111,\n };\n}\n\nconst getCode = (char: string): string => {\n const code = char.codePointAt(0);\n // a-z\n if (code && code >= 97 && code <= 122) {\n return `Key${char.toUpperCase()}`;\n }\n // A-Z\n if (code && code >= 65 && code <= 90) {\n return `Key${char.toUpperCase()}`;\n }\n // A-Z\n if (code && code >= 48 && code <= 57) {\n return `Digit${char}`;\n }\n\n return 'Unknown';\n};\n\nconst applyPayload = (event: Event, payload?: string): void => {\n const keyData: object = {};\n for (const key of payload ? payload.split('.') : []) {\n let map = keyMap[key];\n if (!map && key.length === 1) {\n map = {\n code: getCode(key),\n key,\n };\n }\n\n if (!map) {\n throw new Error(`Unknown event part ${key}`);\n }\n\n mockHelperStub(keyData, map);\n }\n\n if (payload) {\n mockHelperStub(event, keyData);\n }\n};\n\nexport default (\n event: string,\n init?: EventInit,\n overrides?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n): CustomEvent => {\n const dot = event.indexOf('.');\n const [eventName, eventPayload] = dot === -1 ? [event] : [event.slice(0, Math.max(0, dot)), event.slice(dot + 1)];\n const eventObj = eventCtor(eventName, {\n bubbles: preventBubble.indexOf(event) === -1,\n cancelable: true,\n ...init,\n });\n applyPayload(eventObj, eventPayload);\n\n if (overrides) {\n mockHelperStub(eventObj, overrides);\n }\n\n return eventObj;\n};\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\n\nimport { DebugNodeSelector } from '../../common/core.types';\nimport mockHelperFind from '../find/mock-helper.find';\nimport isDebugNode from '../format/is-debug-node';\nimport isFixture from '../format/is-fixture';\nimport isHtmlElement from '../format/is-html-element';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport mockHelperStub from '../mock-helper.stub';\n\nimport mockHelperEvent from './mock-helper.event';\n\n/**\n * @see https://developer.mozilla.org/de/docs/Web/Events\n */\nconst preventBubble = ['focus', 'blur', 'load', 'unload', 'change', 'reset', 'scroll'];\n\nconst toEventObj = (event: string | UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event): Event => {\n return typeof event === 'string'\n ? mockHelperEvent(event, {\n bubbles: preventBubble.indexOf(event) === -1,\n cancelable: true,\n })\n : event;\n};\n\nconst getNativeElement = (\n debugElement: DebugElement | HTMLElement | ComponentFixture<any> | undefined | null,\n): HTMLElement | undefined => {\n if (isDebugNode(debugElement) || isFixture(debugElement)) {\n return debugElement.nativeElement;\n }\n if (isHtmlElement(debugElement)) {\n return debugElement;\n }\n\n return undefined;\n};\n\nexport default (\n selector: DebugElement | HTMLElement | ComponentFixture<any> | DebugNodeSelector,\n eventName: string | UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event,\n payload?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n) => {\n const debugElement = isHtmlElement(selector) ? selector : mockHelperFind(funcGetLastFixture(), selector, undefined);\n const nativeElement = getNativeElement(debugElement);\n\n if (!nativeElement) {\n throw new Error(\n `Cannot trigger ${typeof eventName === 'string' ? eventName : eventName.type} event undefined element`,\n );\n }\n\n // nothing to emit on disabled elements\n if ((nativeElement as HTMLInputElement).disabled) {\n return;\n }\n\n const event = toEventObj(eventName);\n if (!event.target) {\n mockHelperStub(event, {\n target: nativeElement,\n });\n }\n if (payload) {\n mockHelperStub(event, payload);\n }\n nativeElement.dispatchEvent(event);\n};\n","import { DebugNode } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport coreInjector from '../../common/core.injector';\n\nconst message = [\n 'Cannot find ControlValueAccessor on the element.',\n 'If it is a mock input with [formControlName],',\n 'you need either to avoid mocking ReactiveFormsModule',\n 'or to avoid accessing the control in such a way,',\n 'because this tests ReactiveFormsModule instead of own implementation.',\n].join(' ');\n\nexport default (el: DebugNode): Record<keyof any, any> => {\n const ngControl = coreForm && coreInjector(coreForm.NgControl, el.injector);\n const valueAccessor = ngControl?.valueAccessor;\n if (valueAccessor) {\n return valueAccessor;\n }\n\n const formControlDirective = coreForm && coreInjector(coreForm.FormControlDirective, el.injector);\n if (formControlDirective?.form) {\n return formControlDirective.form;\n }\n\n const ngModel = coreForm && coreInjector(coreForm.NgModel, el.injector);\n if (ngModel) {\n return ngModel;\n }\n\n throw new Error(message);\n};\n","import { DebugElement } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport { DebugNodeSelector } from '../../common/core.types';\nimport { isMockControlValueAccessor } from '../../common/func.is-mock-control-value-accessor';\nimport helperDefinePropertyDescriptor from '../../mock-service/helper.define-property-descriptor';\nimport helperExtractMethodsFromPrototype from '../../mock-service/helper.extract-methods-from-prototype';\nimport mockHelperTrigger from '../events/mock-helper.trigger';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\nimport mockHelperStubMember from '../mock-helper.stub-member';\n\nimport funcGetVca from './func.get-vca';\n\n// default html behavior\nconst triggerInput = (el: DebugElement, value: any): void => {\n mockHelperTrigger(el, 'focus');\n\n const descriptor = Object.getOwnPropertyDescriptor(el.nativeElement, 'value');\n mockHelperStubMember(el.nativeElement, 'value', value);\n mockHelperTrigger(el, 'input');\n mockHelperTrigger(el, 'change');\n if (descriptor) {\n helperDefinePropertyDescriptor(el.nativeElement, 'value', descriptor);\n el.nativeElement.value = value;\n }\n\n mockHelperTrigger(el, 'blur');\n};\n\nconst handleKnown = (valueAccessor: any, value: any): boolean => {\n if (coreForm && valueAccessor instanceof coreForm.AbstractControl) {\n valueAccessor.setValue(value);\n\n return true;\n }\n\n if (coreForm && valueAccessor instanceof coreForm.NgModel) {\n valueAccessor.update.emit(value);\n\n return true;\n }\n\n if (isMockControlValueAccessor(valueAccessor.instance)) {\n valueAccessor.instance.__simulateChange(value);\n\n return true;\n }\n\n return false;\n};\n\nconst hasListener = (el: DebugElement): boolean =>\n el.listeners.some(listener => listener.name === 'input' || listener.name === 'change');\n\nconst keys = [\n 'onChange',\n 'onChangeCallback',\n 'onChangeCb',\n 'onChangeClb',\n 'onChangeFn',\n\n '_onChange',\n '_onChangeCallback',\n '_onChangeCb',\n '_onChangeClb',\n '_onChangeFn',\n\n 'changeFn',\n '_changeFn',\n\n 'onModelChange',\n\n 'cvaOnChange',\n 'cvaOnChangeCallback',\n 'cvaOnChangeCb',\n 'cvaOnChangeClb',\n 'cvaOnChangeFn',\n\n '_cvaOnChange',\n '_cvaOnChangeCallback',\n '_cvaOnChangeCb',\n '_cvaOnChangeClb',\n '_cvaOnChangeFn',\n];\n\nexport default (selector: DebugNodeSelector, value: any, methodName?: string): void => {\n const el = mockHelperFind(funcGetLastFixture(), selector, undefined);\n if (!el) {\n throw new Error(`Cannot find an element via ngMocks.change(${funcParseFindArgsName(selector)})`);\n }\n\n const valueAccessor = funcGetVca(el);\n if (handleKnown(valueAccessor, value) || hasListener(el)) {\n triggerInput(el, value);\n\n return;\n }\n\n for (const key of methodName ? [methodName] : keys) {\n if (typeof valueAccessor[key] === 'function') {\n valueAccessor.writeValue(value);\n valueAccessor[key](value);\n\n return;\n }\n }\n\n const methods = helperExtractMethodsFromPrototype(valueAccessor);\n throw new Error(\n [\n 'Unsupported type of ControlValueAccessor,',\n `please ensure it has '${methodName || 'onChange'}' method.`,\n `If it is a 3rd-party library, please provide the correct name of the method in the 'methodName' parameter.`,\n 'Possible Names: ' + methods.join(', ') + '.',\n ].join(' '),\n );\n};\n","import { DebugElement } from '@angular/core';\n\nimport coreForm from '../../common/core.form';\nimport { DebugNodeSelector } from '../../common/core.types';\nimport { isMockControlValueAccessor } from '../../common/func.is-mock-control-value-accessor';\nimport helperExtractMethodsFromPrototype from '../../mock-service/helper.extract-methods-from-prototype';\nimport mockHelperTrigger from '../events/mock-helper.trigger';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcGetVca from './func.get-vca';\n\n// default html behavior\nconst triggerTouch = (el: DebugElement): void => {\n mockHelperTrigger(el, 'focus');\n mockHelperTrigger(el, 'blur');\n};\n\nconst handleKnown = (valueAccessor: any): boolean => {\n if (coreForm && valueAccessor instanceof coreForm.AbstractControl) {\n valueAccessor.markAsTouched();\n\n return true;\n }\n\n if (isMockControlValueAccessor(valueAccessor.instance)) {\n valueAccessor.instance.__simulateTouch();\n\n return true;\n }\n\n return false;\n};\n\nconst hasListener = (el: DebugElement): boolean =>\n el.listeners.some(listener => listener.name === 'focus' || listener.name === 'blur');\n\nconst keys = [\n 'onTouched',\n 'onTouchedCallback',\n 'onTouchedCb',\n 'onTouchedClb',\n 'onTouchedFn',\n\n '_onTouched',\n '_onTouchedCallback',\n '_onTouchedCb',\n '_onTouchedClb',\n '_onTouchedFn',\n\n 'markAsTouched',\n '_markAsTouched',\n\n 'onModelTouched',\n\n 'cvaOnTouch',\n 'cvaOnTouchCallback',\n 'cvaOnTouchCb',\n 'cvaOnTouchClb',\n 'cvaOnTouchFn',\n\n '_cvaOnTouch',\n '_cvaOnTouchCallback',\n '_cvaOnTouchCb',\n '_cvaOnTouchClb',\n '_cvaOnTouchFn',\n];\n\nexport default (sel: DebugElement | DebugNodeSelector, methodName?: string): void => {\n const el = mockHelperFind(funcGetLastFixture(), sel, undefined);\n if (!el) {\n throw new Error(`Cannot find an element via ngMocks.touch(${funcParseFindArgsName(sel)})`);\n }\n\n const valueAccessor = funcGetVca(el);\n if (handleKnown(valueAccessor) || hasListener(el)) {\n triggerTouch(el);\n\n return;\n }\n\n for (const key of methodName ? [methodName] : keys) {\n if (typeof valueAccessor[key] === 'function') {\n valueAccessor[key]();\n\n return;\n }\n }\n\n const methods = helperExtractMethodsFromPrototype(valueAccessor);\n throw new Error(\n [\n 'Unsupported type of ControlValueAccessor,',\n `please ensure it has '${methodName || 'onTouched'}' method.`,\n `If it is a 3rd-party library, please provide the correct name of the method in the 'methodName' parameter.`,\n 'Possible Names: ' + methods.join(', ') + '.',\n ].join(' '),\n );\n};\n","import { DebugNode } from '@angular/core';\n\nexport default (node: DebugNode): DebugNode =>\n node.nativeNode?.nodeName === '#text' && node.parent ? node.parent : node;\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nconst detectGatherFlag = (gather: boolean, el: DebugNode | null, node: any): boolean => {\n // LContainer for structural directives can be a trigger for pipes.\n if (\n el &&\n el.nativeNode &&\n el.nativeNode.nodeName === '#comment' &&\n Array.isArray(node) &&\n node[0] === el.nativeNode\n ) {\n return true;\n }\n\n // LContainer should stop the scan.\n if (Array.isArray(node)) {\n return false;\n }\n\n if (!el || !node.nodeName) {\n return gather;\n }\n\n // checking if a commentNode belongs to the current element.\n // it comes from structural directives.\n if (node.nodeName === '#comment') {\n return node === el.nativeNode;\n }\n\n // checking if a textNode belongs to the current element.\n if (node.nodeName === '#text') {\n return node.parentNode === el.nativeNode;\n }\n\n return false;\n};\n\nconst isNotObject = (node: any): boolean => !node || typeof node !== 'object';\n\nconst shouldBeScanned = (scanned: any[], node: any): boolean => scanned.indexOf(node) === -1 && Array.isArray(node);\n\nconst scan = <T>(\n {\n result,\n el,\n nodes,\n normalize,\n proto,\n }: {\n el: DebugNode | null;\n nodes: any[];\n normalize: (item: any) => any;\n proto: AnyType<T>;\n result: T[];\n },\n gatherDefault: boolean,\n scanned: any[] = [],\n): void => {\n scanned.push(nodes);\n let gather = gatherDefault;\n\n let nodesLength = nodes.length;\n if (nodes.length > 1 && nodes[1] && typeof nodes[1] === 'object' && nodes[1].bindingStartIndex) {\n nodesLength = nodes[1].bindingStartIndex;\n }\n\n for (let index = 0; index < nodesLength; index += 1) {\n const node = normalize(nodes[index]);\n if (isNotObject(node)) {\n continue;\n }\n\n if (shouldBeScanned(scanned, node)) {\n scan({ result, el, nodes: node, normalize, proto }, gather, scanned);\n }\n\n gather = detectGatherFlag(gather, el, node);\n if (!gather) {\n continue;\n }\n\n if (result.indexOf(node) === -1 && node instanceof proto) {\n result.push(node);\n }\n }\n};\n\nexport default (() => scan)();\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nimport { Node } from './func.get-from-node';\nimport funcGetFromNodeElement from './func.get-from-node-element';\nimport funcGetFromNodeScan from './func.get-from-node-scan';\n\nconst detectContextByIndex = (rootView: any, index: number) => {\n if (typeof rootView[1] === 'object' && rootView[20] === index) {\n return rootView;\n }\n\n for (let i = 21; i < rootView.length; i += 1) {\n const item = rootView[i];\n if (Array.isArray(item) && typeof item[1] === 'object' && item[20] === index) {\n return item;\n }\n }\n\n return undefined;\n};\n\nconst detectContext = (node: DebugNode): any => {\n let current = node;\n let context = current.nativeNode?.__ngContext__;\n while (context === undefined && current.parent) {\n current = current.parent;\n context = current.nativeNode.__ngContext__;\n }\n if (typeof context !== 'number') {\n return context;\n }\n // welcome to A12 and its optimization\n // https://github.com/angular/angular/pull/41358\n\n const rootView = (current.injector as any)._lView;\n if (Array.isArray(rootView)) {\n return detectContextByIndex(rootView, context);\n }\n\n return undefined;\n};\n\nconst contextToNodes = (context: any): any => (Array.isArray(context) ? context : context?.lView);\n\nexport default <T>(result: T[], node: (DebugNode & Node) | null | undefined, proto: AnyType<T>): void => {\n if (!node || node._debugContext) {\n return;\n }\n\n const el = funcGetFromNodeElement(node);\n funcGetFromNodeScan(\n {\n el,\n nodes: contextToNodes(detectContext(node)) || [],\n normalize: item => item,\n proto,\n result,\n },\n true,\n );\n};\n","import { DebugNode } from '@angular/core';\n\nimport { AnyType } from '../common/core.types';\n\nimport { Node } from './func.get-from-node';\nimport funcGetFromNodeElement from './func.get-from-node-element';\nimport funcGetFromNodeScan from './func.get-from-node-scan';\n\nconst normalize = (item: any): any => {\n if (!item || typeof item !== 'object') {\n return item;\n }\n\n for (const key of ['renderElement', 'renderText', 'instance']) {\n if (item[key]) {\n return item[key];\n }\n }\n\n return null;\n};\n\nexport default <T>(result: T[], node: (DebugNode & Node) | null | undefined, proto: AnyType<T>): void => {\n if (!node || !node._debugContext) {\n return;\n }\n\n const el = funcGetFromNodeElement(node);\n\n funcGetFromNodeScan(\n {\n el,\n nodes: node._debugContext.view.nodes,\n normalize,\n proto,\n result,\n },\n true,\n );\n};\n","import { DebugNode } from '@angular/core';\n\nimport { AnyDeclaration } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nimport funcGetFromNodeInjector from './func.get-from-node-injector';\nimport funcGetFromNodeIvy from './func.get-from-node-ivy';\nimport funcGetFromNodeStandard from './func.get-from-node-standard';\n\nexport interface Node {\n _debugContext?: {\n elDef: {\n nodeIndex: number;\n };\n nodeDef: {\n nodeIndex: number;\n };\n nodeIndex: number;\n view: {\n nodes: Array<{\n instance?: any;\n renderElement?: any;\n renderText?: any;\n value?: any;\n }>;\n };\n };\n parent?: (DebugNode & Node) | null;\n}\n\nexport default <T>(result: T[], node: DebugNode & Node, proto: AnyDeclaration<T>): T[] => {\n funcGetFromNodeInjector(result, node, proto);\n if (!isNgDef(proto, 't') && typeof proto !== 'string') {\n funcGetFromNodeStandard(result, node, proto);\n funcGetFromNodeIvy(result, node, proto);\n }\n\n return result;\n};\n","import { DebugNode, Injector } from '@angular/core';\n\nimport coreInjector from '../common/core.injector';\nimport { AnyDeclaration } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nimport { Node } from './func.get-from-node';\n\nconst getParentWithInjector = (node: (DebugNode & Node) | null): Injector | undefined => {\n let parent: DebugNode | null = node;\n while (parent?.injector.constructor.name === 'NullInjector') {\n parent = parent.parent;\n }\n\n if (parent) {\n return parent.injector;\n }\n\n return undefined;\n};\n\nexport default <T>(result: T[], node: DebugNode & Node, proto: AnyDeclaration<T>): void => {\n if (!node.injector || node.injector.constructor.name === 'NullInjector') {\n return;\n }\n\n const parentInjector = getParentWithInjector(node.parent);\n const parentInstance = parentInjector ? coreInjector(proto, parentInjector) : undefined;\n const instance = coreInjector(proto, node.injector);\n // a way to avoid inherited injections\n if (parentInstance === instance) {\n return;\n }\n\n if (isNgDef(proto, 't') && instance !== undefined) {\n result.push(instance);\n } else if (instance !== undefined && result.indexOf(instance) === -1) {\n result.push(instance);\n }\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\n\nexport default (value: any): boolean => {\n return typeof value === 'function' || isNgDef(value, 't');\n};\n","import { getInjection } from '../../common/core.helpers';\nimport { Type } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport mockHelperCrawl from '../crawl/mock-helper.crawl';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetFromNode from '../func.get-from-node';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport funcIsValidFindInstanceSelector from './func.is-valid-find-instance-selector';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default <T>(...args: any[]): T => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidFindInstanceSelector, defaultNotFoundValue);\n if (typeof sel !== 'function' && !isNgDef(sel, 't') && typeof sel !== 'string') {\n throw new Error('Only classes or tokens are accepted');\n }\n\n const declaration: Type<T> = getSourceOfMock(sel);\n const result: T[] = [];\n const fixture = funcGetLastFixture();\n if (fixture) {\n mockHelperCrawl(\n mockHelperFind(fixture, el, undefined),\n (node, parent) => {\n funcGetFromNode(result, node, declaration);\n if (result.length === 0 && parent && parent.nativeNode.nodeName === '#comment') {\n funcGetFromNode(result, parent, declaration);\n }\n\n return result.length > 0;\n },\n true,\n );\n } else {\n try {\n result.push(getInjection(declaration));\n } catch {\n // nothing to do\n }\n }\n\n if (result.length > 0) {\n return result[0];\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find an instance via ngMocks.findInstance(${funcParseFindArgsName(sel)})`);\n};\n","import { DebugElement } from '@angular/core';\n\nimport isDebugNode from '../format/is-debug-node';\n\nimport funcParseFindArgs from './func.parse-find-args';\nimport funcParseFindTerm from './func.parse-find-term';\n\nexport default (...args: any[]): DebugElement[] => {\n const [el, sel] = funcParseFindArgs(args);\n if (isDebugNode(sel)) {\n return [sel as any];\n }\n\n return el?.queryAll(funcParseFindTerm(sel)) || [];\n};\n","import nestedCheckChildren from '../crawl/nested-check-children';\n\nimport handleArray from './handle-array';\nimport isDebugNode from './is-debug-node';\nimport isFixture from './is-fixture';\nimport { FORMAT_SET, FORMAT_SINGLE } from './types';\n\nexport default (handlePrimitives: any) =>\n (html: any, outer = false) => {\n const format = (value: Text | Comment | FORMAT_SINGLE | FORMAT_SET, innerOuter = false): any => {\n if (Array.isArray(value)) {\n return handleArray(format, value);\n }\n if (isFixture(value)) {\n return format(value.debugElement, outer);\n }\n const result = handlePrimitives(format, value, innerOuter);\n if (result !== undefined) {\n return result;\n }\n\n if (isDebugNode(value) && value.nativeNode.nodeName === '#comment') {\n return format(nestedCheckChildren(value), true);\n }\n\n return isDebugNode(value) ? format(value.nativeNode, innerOuter) : '';\n };\n\n return Array.isArray(html) ? html.map((item: any) => format(item, outer)) : format(html, outer);\n };\n","export default (format: any, html: any) => {\n return format((html as any[]).map(item => format(item, true)).join(''));\n};\n","export default (html: Text): string => html.nodeValue ?? html.textContent ?? html.wholeText;\n","export default (value: any): value is Text => {\n return !!value && typeof value === 'object' && value.nodeName === '#text';\n};\n","import formatHandler from './format-handler';\nimport handleText from './handle-text';\nimport isHtmlElement from './is-html-element';\nimport isText from './is-text';\n\nconst normalizeValue = (html: string | undefined): string =>\n html\n ? html // lgtm [js/incomplete-multi-character-sanitization]\n .replace(new RegExp('\\\\s+', 'mg'), ' ')\n .replace(new RegExp('<!--.*?-->', 'mg'), '')\n .replace(new RegExp('\\\\s+', 'mg'), ' ')\n .replace(new RegExp('>\\\\s+<', 'mg'), '><')\n .replace(new RegExp('\"\\\\s+>', 'mg'), '\">')\n : '';\n\nconst normalizeText = (text: string): string =>\n text\n .replace(new RegExp('&', 'mg'), '&')\n .replace(new RegExp('\"', 'mg'), '"')\n .replace(new RegExp('<', 'mg'), '<')\n .replace(new RegExp('>', 'mg'), '>')\n .replace(new RegExp(\"'\", 'mg'), ''');\n\nconst getElementValue = (element: HTMLElement, outer: boolean): string =>\n outer ? element.outerHTML : element.innerHTML;\n\nconst handlePrimitives = (format: any, value: any, outer: boolean): string | undefined => {\n if (typeof value === 'string' || value === undefined) {\n const result = normalizeValue(value);\n\n return outer ? result : result.trim();\n }\n if (isHtmlElement(value)) {\n return format(getElementValue(value, outer));\n }\n if (isText(value)) {\n return handlePrimitives(format, normalizeText(handleText(value)), outer);\n }\n\n return undefined;\n};\n\nexport default (() => formatHandler(handlePrimitives))();\n","import formatHandler from './format-handler';\nimport handleText from './handle-text';\nimport isHtmlElement from './is-html-element';\nimport isText from './is-text';\n\nconst normalizeValue = (html: string | undefined): string => (html ? html.replace(new RegExp('\\\\s+', 'mg'), ' ') : '');\n\nconst getElementValue = (element: HTMLElement, outer: boolean): string => {\n const value = element.textContent ?? '';\n\n return outer ? value : value.trim();\n};\n\nconst handlePrimitives = (format: any, value: any, outer: boolean): string | undefined => {\n if (typeof value === 'string' || value === undefined) {\n const result = normalizeValue(value);\n\n return outer ? result : result.trim();\n }\n if (isHtmlElement(value)) {\n return format(getElementValue(value, outer));\n }\n if (isText(value)) {\n return handlePrimitives(format, handleText(value), outer);\n }\n\n return undefined;\n};\n\nexport default (() => formatHandler(handlePrimitives))();\n","import { registerMockFunction } from '../mock-service/helper.mock-service';\nimport { CustomMockFunction } from '../mock-service/types';\n\ntype param = 'jasmine' | 'jest' | 'default' | 'reset' | CustomMockFunction;\n\nconst calls: param[] = [];\n\nexport default (type: param) => {\n if (type === 'reset') {\n calls.pop();\n } else {\n calls.push(type);\n }\n const action: param | undefined = calls[calls.length - 1];\n\n if (action === 'jasmine') {\n return registerMockFunction(mockName => jasmine.createSpy(mockName));\n }\n // istanbul ignore if: because it is run with jasmine\n if (action === 'jest') {\n return registerMockFunction(name => jest.fn().mockName(name));\n }\n if (!action || action === 'default' || action === 'reset') {\n return registerMockFunction();\n }\n\n return registerMockFunction(action);\n};\n","/* eslint-disable no-console */\n\nimport coreDefineProperty from '../common/core.define-property';\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default (defaultMethods: Array<keyof typeof console>, factory: (name: string) => any) =>\n (...methods: Array<keyof typeof console>): void => {\n const backup: Array<keyof typeof console> = [];\n\n beforeEach(() => {\n for (const method of defaultMethods) {\n if (methods.indexOf(method) === -1) {\n methods.push(method);\n }\n }\n\n for (const method of methods) {\n coreDefineProperty(console, `__ngMocksBackup_${method}`, (console as any)[`__ngMocksBackup_${method}`] || []);\n (console as any)[`__ngMocksBackup_${method}`].push(console[method]);\n backup.push(method);\n console[method] = factory(method) as never;\n }\n });\n\n afterEach(() => {\n for (const method of backup) {\n console[method] = (console as any)[`__ngMocksBackup_${method}`].pop();\n }\n backup.splice(0, backup.length);\n });\n };\n","import helperMockService from '../mock-service/helper.mock-service';\n\nimport mockHelperConsole from './mock-helper.console';\n\nconst factory = (propName: string) => helperMockService.mockFunction(`console.${propName}`);\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default mockHelperConsole(['log'], factory);\n","import coreDefineProperty from '../common/core.define-property';\n\nimport mockHelperConsole from './mock-helper.console';\n\nconst factory =\n (propName: string) =>\n (...args: any[]) => {\n const error = new Error(args.join(' '));\n coreDefineProperty(error, 'ngMocksConsoleCatch', propName);\n throw error;\n };\n\n// Thanks Ivy, it does not throw an error, and we have to use injector.\nexport default mockHelperConsole(['warn', 'error'], factory);\n","import { Injector } from '@angular/core';\n\nimport { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default <T>(\n def: AnyDeclaration<T> | string | Array<AnyDeclaration<T> | string>,\n callback?: (instance: undefined | T, injector: Injector) => void | Partial<T>,\n): void => {\n const map = ngMocksUniverse.getOverrides();\n for (const item of flatten(def)) {\n if (callback) {\n const set: Set<any> = map.has(item) ? map.get(item) : new Set();\n set.add(callback);\n map.set(item, set);\n } else {\n map.delete(item);\n }\n }\n};\n","import { getTestBed, TestBed, TestBedStatic, TestModuleMetadata } from '@angular/core/testing';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nconst hooks: {\n after: Array<\n (original: TestBedStatic['resetTestingModule'], instance: TestBedStatic) => TestBedStatic['resetTestingModule']\n >;\n before: Array<\n (\n original: TestBedStatic['configureTestingModule'],\n instance: TestBedStatic,\n ) => TestBedStatic['configureTestingModule']\n >;\n} = ngMocksUniverse.global.get('faster-hooks') || {\n after: [],\n before: [],\n};\nngMocksUniverse.global.set('faster-hooks', hooks);\n\nconst configureTestingModule =\n (\n original: TestBedStatic['configureTestingModule'],\n instance: TestBedStatic,\n ): TestBedStatic['configureTestingModule'] =>\n (moduleDef: TestModuleMetadata) => {\n if ((TestBed as any).ngMocksFasterLock) {\n return original.call(instance, moduleDef);\n }\n\n ngMocksUniverse.global.set('bullet:customized', true);\n\n let final = original;\n for (const callback of hooks.before) {\n final = callback(final, instance);\n }\n\n try {\n coreDefineProperty(TestBed, 'ngMocksFasterLock', true);\n\n return final.call(instance, moduleDef);\n } finally {\n coreDefineProperty(TestBed, 'ngMocksFasterLock', undefined);\n }\n };\n\nconst resetTestingModule =\n (original: TestBedStatic['resetTestingModule'], instance: TestBedStatic): TestBedStatic['resetTestingModule'] =>\n () => {\n if ((TestBed as any).ngMocksFasterLock) {\n return original.call(instance);\n }\n\n if (ngMocksUniverse.global.has('bullet')) {\n if (ngMocksUniverse.global.has('bullet:customized')) {\n ngMocksUniverse.global.set('bullet:reset', true);\n }\n\n return instance;\n }\n ngMocksUniverse.global.delete('bullet:customized');\n ngMocksUniverse.global.delete('bullet:reset');\n\n let final = original;\n for (const callback of hooks.after) {\n final = callback(final, instance);\n }\n\n try {\n coreDefineProperty(TestBed, 'ngMocksFasterLock', true);\n\n return final.call(instance);\n } finally {\n coreDefineProperty(TestBed, 'ngMocksFasterLock', undefined);\n }\n };\n\nexport default () => {\n if (!(TestBed as any).ngMocksFasterInstalled) {\n TestBed.configureTestingModule = configureTestingModule(TestBed.configureTestingModule as never, TestBed as never);\n TestBed.resetTestingModule = resetTestingModule(TestBed.resetTestingModule as never, TestBed as never);\n coreDefineProperty(TestBed, 'ngMocksFasterInstalled', true);\n }\n\n const testBed = getTestBed();\n if (!(testBed as any).ngMocksFasterInstalled) {\n testBed.configureTestingModule = configureTestingModule(testBed.configureTestingModule as never, testBed as never);\n testBed.resetTestingModule = resetTestingModule(testBed.resetTestingModule as never, testBed as never);\n coreDefineProperty(testBed, 'ngMocksFasterInstalled', true);\n }\n\n return hooks;\n};\n","import { getTestBed } from '@angular/core/testing';\n\nexport default (): void => {\n const testBed: any = getTestBed();\n testBed._instantiated = false;\n testBed._moduleFactory = undefined;\n testBed._testModuleRef = null;\n};\n","import { ComponentFixture, getTestBed, TestBed } from '@angular/core/testing';\n\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockHelperFasterInstall from './mock-helper.faster-install';\nimport mockHelperFlushTestBed from './mock-helper.flush-test-bed';\n\nconst resetFixtures = (id: never) => {\n const activeFixtures: Array<ComponentFixture<any> & { ngMocksStackId?: any }> =\n (getTestBed() as any)._activeFixtures || /* istanbul ignore next */ [];\n\n let active = 0;\n for (let i = activeFixtures.length - 1; i >= 0; i -= 1) {\n if (!activeFixtures[i].ngMocksStackId || activeFixtures[i].ngMocksStackId === id) {\n activeFixtures[i].ngMocksStackId = undefined;\n activeFixtures[i].destroy();\n activeFixtures.splice(i, 1);\n } else {\n active += 1;\n }\n }\n if (active === 0) {\n mockHelperFlushTestBed();\n }\n};\n\nconst idAdd = (id: any) => {\n const bulletStack: any[] = ngMocksUniverse.global.get('bullet:stack') ?? [];\n bulletStack.push(id);\n ngMocksUniverse.global.set('bullet:stack', bulletStack);\n ngMocksUniverse.global.set('bullet:stack:id', id);\n};\nconst idRemove = (id: any) => {\n const bulletStack: any[] = ngMocksUniverse.global.get('bullet:stack');\n bulletStack.splice(bulletStack.indexOf(id), 1);\n if (bulletStack.length > 0) {\n ngMocksUniverse.global.set('bullet:stack:id', bulletStack[bulletStack.length - 1]);\n } else {\n ngMocksUniverse.global.delete('bullet:stack:id');\n }\n\n resetFixtures(id as never);\n};\n\nexport default () => {\n mockHelperFasterInstall();\n\n const idAll = {};\n const idEach = {};\n\n beforeAll(() => {\n if (ngMocksUniverse.global.has('bullet:customized')) {\n TestBed.resetTestingModule();\n }\n ngMocksUniverse.global.set('bullet', true);\n idAdd(idAll);\n });\n\n beforeEach(() => {\n idAdd(idEach);\n });\n afterEach(() => {\n idRemove(idEach);\n });\n\n afterAll(() => {\n idRemove(idAll);\n ngMocksUniverse.global.delete('bullet');\n if (ngMocksUniverse.global.has('bullet:reset')) {\n TestBed.resetTestingModule();\n }\n });\n};\n","import { DebugElement } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\n\nimport { Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport { getSourceOfMock } from '../common/func.get-source-of-mock';\nimport { MockedDebugElement } from '../mock-render/types';\n\nimport nestedCheckParent from './crawl/nested-check-parent';\nimport mockHelperFind from './find/mock-helper.find';\nimport funcGetFromNode from './func.get-from-node';\nimport funcGetLastFixture from './func.get-last-fixture';\nimport funcParseFindArgsName from './func.parse-find-args-name';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nconst parseArgs = <T>(\n args: any[],\n): {\n el: MockedDebugElement | null | undefined;\n notFoundValue: any;\n sel: Type<T>;\n} => ({\n el: args[0],\n notFoundValue: args.length === 3 ? args[2] : defaultNotFoundValue,\n sel: args[1],\n});\n\nexport default <T>(...args: any[]) => {\n if (args.length === 1) {\n try {\n return TestBed.inject ? TestBed.inject(args[0]) : /* istanbul ignore next */ TestBed.get(args[0]);\n } catch {\n throw new Error(`Cannot find an instance via ngMocks.get(${funcParseFindArgsName(args[0])})`);\n }\n }\n\n const { el, sel, notFoundValue } = parseArgs<T>(args);\n const root: DebugElement | undefined = mockHelperFind(funcGetLastFixture(), el, undefined);\n const source = getSourceOfMock(sel);\n\n // Looking in the root.\n if (root) {\n const result = funcGetFromNode([], root, source);\n if (result.length > 0) {\n return result[0];\n }\n }\n\n // Looking for a related structural directive.\n if (root) {\n const parent = nestedCheckParent(root, undefined);\n if (parent && parent.nativeNode.nodeName === '#comment') {\n const result = funcGetFromNode([], parent, source);\n if (result.length > 0) {\n return result[0];\n }\n }\n }\n\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find ${funcGetName(sel)} instance via ngMocks.get`);\n};\n","import ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default () => {\n ngMocksUniverse.cacheDeclarations.clear();\n ngMocksUniverse.config.get('ngMocksDepsSkip')?.clear();\n};\n","import { TestModuleMetadata } from '@angular/core/testing';\n\nimport { flatten, mapKeys, mapValues } from '../common/core.helpers';\nimport coreReflectModuleResolve from '../common/core.reflect.module-resolve';\nimport funcGetProvider from '../common/func.get-provider';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgInjectionToken } from '../common/func.is-ng-injection-token';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockModule } from '../mock-module/mock-module';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport mockProvider from '../mock-service/mock-provider';\n\ntype Data = {\n declarations: any[];\n exclude: Set<any>;\n imports: any[];\n keep: Set<any>;\n mock: Set<any>;\n optional: Map<any, any>;\n providers: any[];\n skip: Set<any>;\n};\n\nconst skipDef = (def: any, skip: Set<any>, exclude: Set<any>): boolean => {\n if (skip.has(def)) {\n return true;\n }\n skip.add(def);\n\n return exclude.has(def);\n};\n\nconst createMetaHandler = (\n optional: Map<any, any>,\n proto: any,\n imports: any[],\n declarations: any[],\n providers: any[],\n): void => {\n const def = optional.get(proto) || proto;\n\n if (isNgDef(def, 'm')) {\n imports.push(def);\n } else if (isNgDef(def, 'c') || isNgDef(def, 'd')) {\n declarations.push(def);\n } else if (isNgDef(def, 'p')) {\n declarations.push(def);\n providers.push(def);\n } else if (!isNgInjectionToken(def)) {\n providers.push(def);\n }\n};\n\nconst createMeta = ({ keep, skip, optional, exclude, imports, declarations, providers }: Data): TestModuleMetadata => {\n for (const proto of keep) {\n if (skip.has(proto) || exclude.has(proto) || optional.has(proto)) {\n continue;\n }\n createMetaHandler(optional, proto, imports, declarations, providers);\n }\n\n return { declarations, imports, providers };\n};\n\nconst typeMap: Array<[any, string]> = [\n ['m', 'module'],\n ['c', 'component'],\n ['d', 'directive'],\n ['p', 'pipe'],\n];\n\nconst getType = (def: any, keep: Set<any>): string => {\n if (isNgModuleDefWithProviders(def)) {\n return 'module-with-providers';\n }\n for (const [flag, value] of typeMap) {\n if (isNgDef(def, flag)) {\n return flag === 'm' && keep.has(def) ? `${value}-keep` : value;\n }\n }\n\n return '';\n};\n\nconst handleModuleWithProviders = (data: Data, def: any): void => {\n if (data.skip.has(def.ngModule)) {\n return;\n }\n data.skip.add(def.ngModule);\n if (data.exclude.has(def.ngModule)) {\n return;\n }\n\n data.imports.push(data.keep.has(def.ngModule) ? def : MockModule(def));\n};\n\nconst handleDeclaration = (data: Data, def: any, callback: any, bucket: any[]): void => {\n if (skipDef(def, data.skip, data.exclude)) {\n return;\n }\n\n bucket.push(data.keep.has(def) ? def : callback(def));\n};\n\nconst handleDestructuring = (data: Data, def: any, callback: any): void => {\n if (skipDef(def, data.skip, data.exclude)) {\n return;\n }\n\n const meta = coreReflectModuleResolve(def);\n for (const toMock of flatten([meta.declarations, meta.imports])) {\n callback(data, toMock);\n }\n for (const toMock of meta.providers ? flatten(meta.providers) : []) {\n resolveProvider(data, toMock);\n }\n};\n\nconst resolveProvider = ({ skip, keep, providers, exclude }: Data, def: any): void => {\n const provider = funcGetProvider(def);\n skip.add(provider);\n if (exclude.has(provider)) {\n return;\n }\n\n const providerDef = keep.has(provider) ? def : mockProvider(def);\n if (providerDef) {\n providers.push(providerDef);\n }\n};\n\nconst resolveMap: Record<string, any> = {\n component: MockComponent,\n directive: MockDirective,\n pipe: MockPipe,\n};\n\nconst resolveHandler = (data: Data, type: string, def: any, skipDestruction: boolean): void => {\n if (type === 'module-with-providers') {\n handleModuleWithProviders(data, def);\n } else if (type === 'module-keep') {\n handleDeclaration(data, def, MockModule, data.imports); // MockModule will not be called because the def is kept.\n } else if (type === 'module' && skipDestruction) {\n handleDeclaration(data, def, MockModule, data.imports);\n } else if (type === 'module') {\n handleDestructuring(data, def, resolve);\n } else if (resolveMap[type]) {\n handleDeclaration(data, def, resolveMap[type], data.declarations);\n } else {\n resolveProvider(data, def);\n }\n};\n\nconst resolve = (data: Data, proto: any, skipDestruction = true): void => {\n if (!proto) {\n return;\n }\n\n const type = getType(proto, data.keep);\n let def: any;\n\n // an attempt to replace declarations.\n if (type !== 'module-with-providers') {\n const value = data.optional.get(proto);\n if (value && value !== proto) {\n def = value;\n data.keep.add(def);\n }\n }\n if (!def) {\n def = proto;\n }\n\n resolveHandler(data, type, def, skipDestruction);\n};\n\nconst generateDataWithUniverse = (keep: Set<any>, mock: Set<any>, exclude: Set<any>, optional: Map<any, any>): void => {\n for (const k of mapKeys(ngMocksUniverse.getDefaults())) {\n const v = ngMocksUniverse.getBuildDeclaration(k);\n if (keep.has(k) || mock.has(k) || exclude.has(k)) {\n continue;\n }\n optional.set(k, v);\n\n if (v === null) {\n exclude.add(k);\n } else if (v === undefined) {\n mock.add(k);\n } else if (k === v) {\n keep.add(k);\n }\n }\n};\n\nconst generateData = (protoKeep: any, protoMock: any, protoExclude: any): Data => {\n const keep = new Set(flatten(protoKeep || []));\n const mock = new Set(flatten(protoMock || []));\n const exclude = new Set(flatten(protoExclude || []));\n const optional = new Map();\n generateDataWithUniverse(keep, mock, exclude, optional);\n\n return {\n declarations: [],\n exclude,\n imports: [],\n keep,\n mock,\n optional,\n providers: [],\n skip: new Set(),\n };\n};\n\nexport default (keep: any, mock: any = null, exclude: any = null): TestModuleMetadata => {\n const data: Data = generateData(keep, mock, exclude);\n\n const resolutions = new Map();\n ngMocksUniverse.config.set('ngMocksDepsResolution', resolutions);\n for (const mockDef of mapValues(data.keep)) {\n resolutions.set(mockDef, 'keep');\n }\n for (const mockDef of mapValues(data.exclude)) {\n resolutions.set(mockDef, 'exclude');\n }\n\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n for (const def of mapValues(data.mock)) {\n resolutions.set(def, 'mock');\n if (data.optional.has(def)) {\n continue;\n }\n resolve(data, def, false);\n }\n const meta = createMeta(data);\n ngMocksUniverse.config.delete('mockNgDefResolver');\n ngMocksUniverse.config.delete('ngMocksDepsResolution');\n\n return meta;\n};\n","import { MockedDebugElement } from '../mock-render/types';\n\nimport mockHelperFind from './find/mock-helper.find';\nimport funcGetLastFixture from './func.get-last-fixture';\nimport funcParseProviderTokensDirectives from './func.parse-provider-tokens-directives';\nimport mockHelperGet from './mock-helper.get';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nconst parseArgs = (args: any[]): [MockedDebugElement | null | undefined, string, any] => [\n args[0],\n args[1],\n args.length === 3 ? args[2] : defaultNotFoundValue,\n];\n\nconst attrMatches = (attribute: string, selector: string): string | undefined => {\n const [prop, alias = ''] = attribute.split(':', 2).map(v => v.trim());\n\n if ((!alias && prop === selector) || (!!alias && alias === selector)) {\n return prop;\n }\n\n return undefined;\n};\n\nconst detectAttribute = (el: MockedDebugElement | null | undefined, attr: 'inputs' | 'outputs', sel: string) => {\n for (const token of el?.providerTokens || []) {\n const meta = funcParseProviderTokensDirectives(el, token);\n if (!meta) {\n continue;\n }\n\n for (const attrDef of meta[attr] || /* istanbul ignore next */ []) {\n const prop = attrMatches(attrDef, sel);\n if (prop) {\n return mockHelperGet(el, token)[prop];\n }\n }\n }\n\n throw new Error('Not found');\n};\n\nexport default (label: string, attr: 'inputs' | 'outputs', ...args: any[]) => {\n const [el, sel, notFoundValue] = parseArgs(args);\n\n try {\n return detectAttribute(mockHelperFind(funcGetLastFixture(), el, undefined), attr, sel);\n } catch {\n // nothing to do\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n throw new Error(`Cannot find ${sel} ${label} via ngMocks.${label}`);\n};\n","import { QueryList, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport funcIsMock from '../../common/func.is-mock';\nimport { MockConfig } from '../../common/mock';\n\nconst getValVcr = (entryPoint: MockConfig): Array<[any, ViewContainerRef]> => {\n const result: Array<[any, ViewContainerRef]> = [];\n\n for (const key of entryPoint.__ngMocksConfig.queryScanKeys || /* istanbul ignore next */ []) {\n const value = (entryPoint as any)[key];\n const vcr = (entryPoint as any)[`__ngMocksVcr_${key}`];\n\n const scanValue = value instanceof QueryList ? value.toArray() : [value];\n const scanVcr = vcr instanceof QueryList ? vcr.toArray() : [vcr];\n\n for (let index = 0; index < scanValue.length; index += 1) {\n result.push([scanValue[index], scanVcr[index]]);\n }\n }\n\n return result;\n};\n\nconst handleDirective = (\n entryPoint: {\n __template?: TemplateRef<any>;\n __vcr?: ViewContainerRef;\n },\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n callback: (vcr: ViewContainerRef, tpl: TemplateRef<any>) => boolean,\n): boolean => {\n return (\n !!entryPoint.__template &&\n !!entryPoint.__vcr &&\n isExpectedTemplate(entryPoint.__template) &&\n callback(entryPoint.__vcr, entryPoint.__template)\n );\n};\n\nconst isRightTemplate = (\n localVcr: ViewContainerRef | undefined,\n localValue: any,\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n): boolean => {\n return !!localVcr && localValue instanceof TemplateRef && isExpectedTemplate(localValue);\n};\n\nconst findDeep = (\n entryPoint: object,\n isExpectedTemplate: (tpl: TemplateRef<any>) => boolean,\n callback: (vcr: ViewContainerRef, tpl: TemplateRef<any>) => boolean,\n): boolean => {\n if (!funcIsMock(entryPoint)) {\n throw new Error('Only instances of mock declarations are accepted');\n }\n\n // structural directive\n if (handleDirective(entryPoint, isExpectedTemplate, callback)) {\n return true;\n }\n\n for (const [localValue, localVcr] of getValVcr(entryPoint)) {\n if (funcIsMock(localValue) && findDeep(localValue, isExpectedTemplate, callback)) {\n return true;\n }\n if (isRightTemplate(localVcr, localValue, isExpectedTemplate)) {\n return callback(localVcr, localValue);\n }\n }\n\n return false;\n};\n\nexport default ((): typeof findDeep => findDeep)();\n","import { TemplateRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\nimport funcIsMock from '../../common/func.is-mock';\n\nexport default (param: any): TemplateRef<any> => {\n if (param instanceof TemplateRef) {\n return param;\n }\n if (funcIsMock(param) && param.__template) {\n return param.__template;\n }\n\n const injector = param?.nativeNode && param.injector;\n if (injector) {\n const template = coreInjector(TemplateRef, injector);\n\n if (template) {\n return template;\n }\n }\n\n const error = new Error(\n 'Unknown template has been passed, only TemplateRef or a mock structural directive are supported',\n );\n (error as any).param = param;\n\n throw error;\n};\n","import { Type } from '../../common/core.types';\nimport crawlByAttribute from '../crawl/crawl-by-attribute';\nimport crawlByAttributeValue from '../crawl/crawl-by-attribute-value';\nimport crawlByDeclaration from '../crawl/crawl-by-declaration';\nimport crawlById from '../crawl/crawl-by-id';\n\nexport default (selector: string | Type<any> | [string] | [string, any] | any) => {\n if (typeof selector === 'string') {\n return crawlById(selector);\n }\n if (Array.isArray(selector) && selector.length === 1 && typeof selector[0] === 'string') {\n return crawlByAttribute(selector[0]);\n }\n if (Array.isArray(selector) && selector.length === 2 && typeof selector[0] === 'string') {\n return crawlByAttributeValue(selector[0], selector[1]);\n }\n if (typeof selector === 'function') {\n return crawlByDeclaration(selector);\n }\n\n throw new Error('Unknown selector');\n};\n","import { TemplateRef } from '@angular/core';\n\nimport coreInjector from '../../common/core.injector';\nimport { MockedDebugNode } from '../../mock-render/types';\nimport detectTextNode from '../crawl/detect-text-node';\n\nexport default (\n result: Array<TemplateRef<any>>,\n detector: (node: MockedDebugNode) => boolean,\n limit = 0,\n ): ((node: MockedDebugNode) => boolean) =>\n node => {\n try {\n const instance = !detectTextNode(node) && detector(node) ? coreInjector(TemplateRef, node.injector) : undefined;\n if (instance) {\n result.push(instance);\n }\n } catch {\n // nothing to do\n }\n\n return !!limit && result.length === limit;\n };\n","export default (value: any): boolean => {\n if (typeof value === 'string') {\n return true;\n }\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return true;\n }\n if (typeof value === 'function') {\n return true;\n }\n\n return false;\n};\n","import { TemplateRef } from '@angular/core';\n\nimport nestedCheck from '../crawl/nested-check';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\nimport funcParseFindArgsName from '../func.parse-find-args-name';\n\nimport detectCrawler from './detect-crawler';\nimport detectTemplateRef from './detect-template-ref';\nimport funcIsValidTemplateRefSelector from './func.is-valid-template-ref-selector';\n\nconst defaultNotFoundValue = {}; // simulating Symbol\n\nexport default (...args: any[]) => {\n const [el, sel, notFoundValue] = funcParseFindArgs(args, funcIsValidTemplateRefSelector, defaultNotFoundValue);\n\n const result: Array<TemplateRef<any>> = [];\n const detector = detectCrawler(sel);\n nestedCheck(mockHelperFind(funcGetLastFixture(), el, undefined), undefined, detectTemplateRef(result, detector, 1));\n if (result.length > 0) {\n return result[0];\n }\n if (notFoundValue !== defaultNotFoundValue) {\n return notFoundValue;\n }\n\n throw new Error(`Cannot find a TemplateRef via ngMocks.findTemplateRef(${funcParseFindArgsName(sel)})`);\n};\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockHelperCrawl from './crawl/mock-helper.crawl';\nimport mockHelperReveal from './crawl/mock-helper.reveal';\nimport mockHelperRevealAll from './crawl/mock-helper.reveal-all';\nimport mockHelperChange from './cva/mock-helper.change';\nimport mockHelperTouch from './cva/mock-helper.touch';\nimport mockHelperClick from './events/mock-helper.click';\nimport mockHelperEvent from './events/mock-helper.event';\nimport mockHelperTrigger from './events/mock-helper.trigger';\nimport mockHelperFindInstance from './find-instance/mock-helper.find-instance';\nimport mockHelperFindInstances from './find-instance/mock-helper.find-instances';\nimport mockHelperFind from './find/mock-helper.find';\nimport mockHelperFindAll from './find/mock-helper.find-all';\nimport mockHelperFormatHtml from './format/mock-helper.format-html';\nimport mockHelperFormatText from './format/mock-helper.format-text';\nimport mockHelperAutoSpy from './mock-helper.auto-spy';\nimport mockHelperConsoleIgnore from './mock-helper.console-ignore';\nimport mockHelperConsoleThrow from './mock-helper.console-throw';\nimport mockHelperDefaultConfig from './mock-helper.default-config';\nimport mockHelperDefaultMock from './mock-helper.default-mock';\nimport mockHelperFaster from './mock-helper.faster';\nimport mockHelperFlushTestBed from './mock-helper.flush-test-bed';\nimport mockHelperGet from './mock-helper.get';\nimport mockHelperGlobalExclude from './mock-helper.global-exclude';\nimport mockHelperGlobalKeep from './mock-helper.global-keep';\nimport mockHelperGlobalMock from './mock-helper.global-mock';\nimport mockHelperGlobalReplace from './mock-helper.global-replace';\nimport mockHelperGlobalWipe from './mock-helper.global-wipe';\nimport mockHelperGuts from './mock-helper.guts';\nimport mockHelperInput from './mock-helper.input';\nimport mockHelperOutput from './mock-helper.output';\nimport mockHelperReset from './mock-helper.reset';\nimport mockHelperStub from './mock-helper.stub';\nimport mockHelperStubMember from './mock-helper.stub-member';\nimport mockHelperHide from './render/mock-helper.hide';\nimport mockHelperRender from './render/mock-helper.render';\nimport mockHelperFindTemplateRef from './template-ref/mock-helper.find-template-ref';\nimport mockHelperFindTemplateRefs from './template-ref/mock-helper.find-template-refs';\n\nconst flagNames = ['onMockBuilderMissingDependency', 'onMockInstanceRestoreNeed', 'onTestBedFlushNeed'] as const;\n\nexport default {\n autoSpy: mockHelperAutoSpy,\n change: mockHelperChange,\n click: mockHelperClick,\n config: (config: {\n mockRenderCacheSize?: number | null;\n onMockBuilderMissingDependency?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onMockInstanceRestoreNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onTestBedFlushNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n }) => {\n const flags = ngMocksUniverse.global.get('flags');\n for (const flag of flagNames) {\n if (config[flag] === null) {\n flags[flag] = coreConfig[flag];\n } else if (config[flag] !== undefined) {\n flags[flag] = config[flag];\n }\n }\n if (config.mockRenderCacheSize === null) {\n ngMocksUniverse.global.delete('mockRenderCacheSize');\n } else if (config.mockRenderCacheSize !== undefined) {\n ngMocksUniverse.global.set('mockRenderCacheSize', config.mockRenderCacheSize);\n }\n },\n crawl: mockHelperCrawl,\n defaultConfig: mockHelperDefaultConfig,\n defaultMock: mockHelperDefaultMock,\n event: mockHelperEvent,\n faster: mockHelperFaster,\n find: mockHelperFind,\n findAll: mockHelperFindAll,\n findInstance: mockHelperFindInstance,\n findInstances: mockHelperFindInstances,\n findTemplateRef: mockHelperFindTemplateRef,\n findTemplateRefs: mockHelperFindTemplateRefs,\n flushTestBed: mockHelperFlushTestBed,\n formatHtml: mockHelperFormatHtml,\n formatText: mockHelperFormatText,\n get: mockHelperGet,\n globalExclude: mockHelperGlobalExclude,\n globalKeep: mockHelperGlobalKeep,\n globalMock: mockHelperGlobalMock,\n globalReplace: mockHelperGlobalReplace,\n globalWipe: mockHelperGlobalWipe,\n guts: mockHelperGuts,\n hide: mockHelperHide,\n ignoreOnConsole: mockHelperConsoleIgnore,\n input: mockHelperInput,\n output: mockHelperOutput,\n render: mockHelperRender,\n reset: mockHelperReset,\n reveal: mockHelperReveal,\n revealAll: mockHelperRevealAll,\n stub: mockHelperStub,\n stubMember: mockHelperStubMember,\n throwOnConsole: mockHelperConsoleThrow,\n touch: mockHelperTouch,\n trigger: mockHelperTrigger,\n};\n","import { DebugNodeSelector } from '../../common/core.types';\n\nimport mockHelperTrigger from './mock-helper.trigger';\n\nexport default (selector: DebugNodeSelector, payload?: object) => {\n mockHelperTrigger(selector, 'click', payload);\n};\n","import { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { IMockBuilderConfig } from '../mock-builder/types';\n\nexport default <T>(\n def: AnyDeclaration<T> | string | Array<AnyDeclaration<T> | string>,\n config?: IMockBuilderConfig,\n): void => {\n const map = ngMocksUniverse.getConfigMock();\n for (const item of flatten(def)) {\n if (config) {\n map.set(item, config);\n } else {\n map.delete(item);\n }\n }\n};\n","import { getInjection } from '../../common/core.helpers';\nimport { Type } from '../../common/core.types';\nimport { getSourceOfMock } from '../../common/func.get-source-of-mock';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport mockHelperCrawl from '../crawl/mock-helper.crawl';\nimport mockHelperFindAll from '../find/mock-helper.find-all';\nimport funcGetFromNode from '../func.get-from-node';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport funcIsValidFindInstanceSelector from './func.is-valid-find-instance-selector';\n\nexport default <T>(...args: any[]): T[] => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidFindInstanceSelector);\n if (typeof sel !== 'function' && !isNgDef(sel, 't') && typeof sel !== 'string') {\n throw new Error('Only classes or tokens are accepted');\n }\n\n const declaration: Type<T> = getSourceOfMock(sel);\n const result: T[] = [];\n const scanned: any[] = [];\n const fixture = funcGetLastFixture();\n if (fixture) {\n const elements = mockHelperFindAll(fixture, el, undefined);\n for (const element of elements) {\n mockHelperCrawl(\n element,\n (node, parent) => {\n if (scanned.indexOf(node) === -1) {\n funcGetFromNode(result, node, declaration);\n scanned.push(node);\n }\n if (parent && parent.nativeNode.nodeName === '#comment' && scanned.indexOf(parent) === -1) {\n funcGetFromNode(result, parent, declaration);\n scanned.push(parent);\n }\n },\n true,\n );\n }\n } else {\n try {\n result.push(getInjection(declaration));\n } catch {\n // nothing to do\n }\n }\n\n return result;\n};\n","import { TemplateRef } from '@angular/core';\n\nimport nestedCheck from '../crawl/nested-check';\nimport mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport detectCrawler from './detect-crawler';\nimport detectTemplateRef from './detect-template-ref';\nimport funcIsValidTemplateRefSelector from './func.is-valid-template-ref-selector';\n\nexport default (...args: any[]): Array<TemplateRef<any>> => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidTemplateRefSelector);\n\n const result: Array<TemplateRef<any>> = [];\n const detector = detectCrawler(sel);\n nestedCheck(mockHelperFind(funcGetLastFixture(), el, undefined), undefined, detectTemplateRef(result, detector));\n\n return result;\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['exclude']);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['keep']);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['mock']);\n};\n","import { AnyType } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\n\nexport default (source: AnyType<any>, destination: AnyType<any>): void => {\n let fail = true;\n if (isNgDef(source, 'm') && isNgDef(destination, 'm')) {\n fail = false;\n } else if (isNgDef(source, 'c') && isNgDef(destination, 'c')) {\n fail = false;\n } else if (isNgDef(source, 'd') && isNgDef(destination, 'd')) {\n fail = false;\n } else if (isNgDef(source, 'p') && isNgDef(destination, 'p')) {\n fail = false;\n }\n\n if (fail) {\n throw new Error('Cannot replace the declaration, both have to be a Module, a Component, a Directive or a Pipe');\n }\n\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().set(source, ['replace', destination]);\n};\n","import { AnyDeclaration } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport funcGlobalPrepare from './func.global-prepare';\nimport mockHelperDefaultMock from './mock-helper.default-mock';\n\nexport default (source: AnyDeclaration<any>): void => {\n funcGlobalPrepare();\n ngMocksUniverse.getDefaults().delete(source);\n mockHelperDefaultMock(source);\n};\n","import funcFindDeep from './func.find-deep';\nimport funcParseTemplate from './func.parse-template';\n\nexport default (instance: object, param?: object) => {\n const template = param ? funcParseTemplate(param) : undefined;\n\n let result = false;\n funcFindDeep(\n instance,\n tpl => {\n if (!template) {\n return true;\n }\n\n return tpl.elementRef.nativeElement === template.elementRef.nativeElement;\n },\n vcr => {\n vcr.clear();\n result = true;\n\n return false;\n },\n );\n\n if (!result) {\n throw new Error('Cannot find path to the TemplateRef');\n }\n};\n","import mockHelperAttributes from './mock-helper.attributes';\n\nexport default (...args: any[]) => mockHelperAttributes('input', 'inputs', ...args);\n","import mockHelperAttributes from './mock-helper.attributes';\n\nexport default (...args: any[]) => mockHelperAttributes('output', 'outputs', ...args);\n","import funcFindDeep from './func.find-deep';\nimport funcParseTemplate from './func.parse-template';\n\nexport default (instance: object, param: object, $implicit?: any, variables?: Record<keyof any, any>) => {\n const template = funcParseTemplate(param);\n\n const result = funcFindDeep(\n instance,\n tpl => tpl.elementRef.nativeElement === template.elementRef.nativeElement,\n (vcr, tpl) => {\n const context = {\n ...variables,\n $implicit,\n };\n vcr.clear();\n vcr.createEmbeddedView(tpl, context).detectChanges();\n\n return true;\n },\n );\n\n if (!result) {\n throw new Error('Cannot find path to the TemplateRef');\n }\n};\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (): void => {\n ngMocksUniverse.builtDeclarations = new Map();\n ngMocksUniverse.builtProviders = new Map();\n ngMocksUniverse.cacheDeclarations = new Map();\n ngMocksUniverse.cacheProviders = new Map();\n ngMocksUniverse.config = new Map();\n ngMocksUniverse.configInstance = new Map();\n ngMocksUniverse.flags = new Set(coreConfig.flags);\n ngMocksUniverse.touches = new Set();\n};\n","import mockHelperFind from '../find/mock-helper.find';\nimport funcGetLastFixture from '../func.get-last-fixture';\nimport funcParseFindArgs from '../func.parse-find-args';\n\nimport detectCrawler from './detect-crawler';\nimport detectTextNode from './detect-text-node';\nimport funcIsValidRevealSelector from './func.is-valid-reveal-selector';\nimport mockHelperCrawl from './mock-helper.crawl';\n\nexport default (...args: any[]): any[] => {\n const [el, sel] = funcParseFindArgs(args, funcIsValidRevealSelector);\n const root = mockHelperFind(funcGetLastFixture(), el, undefined);\n\n const detector = detectCrawler(sel);\n\n const result: any[] = [];\n mockHelperCrawl(root, node => {\n if (node !== root && !detectTextNode(node) && detector(node)) {\n result.push(node);\n }\n });\n\n return result;\n};\n","/* eslint-disable max-lines */\n\nimport { DebugNode, EventEmitter, InjectionToken, Injector, Provider, TemplateRef } from '@angular/core';\nimport { ComponentFixture, TestModuleMetadata } from '@angular/core/testing';\n\nimport { AnyDeclaration, AnyType, DebugNodeSelector, Type } from '../common/core.types';\nimport { NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { IMockBuilderConfig } from '../mock-builder/types';\nimport { MockedDebugElement, MockedDebugNode } from '../mock-render/types';\nimport { CustomMockFunction, MockedFunction } from '../mock-service/types';\n\nimport { FORMAT_SET, FORMAT_SINGLE } from './format/types';\nimport mockHelperObject from './mock-helper.object';\n\n/**\n * ngMocks provides a lot of tools to simply testing.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks\n */\nexport const ngMocks: {\n /**\n * ngMocks.autoSpy installs proper spies instead of empty functions.\n *\n * @see https://ng-mocks.sudo.eu/extra/auto-spy\n */\n autoSpy(type: 'jasmine' | 'jest' | 'default' | 'reset'): void;\n\n /**\n * ngMocks.autoSpy installs proper spies instead of empty functions.\n *\n * @see https://ng-mocks.sudo.eu/extra/auto-spy\n */\n autoSpy(type: CustomMockFunction): void;\n\n /**\n * ngMocks.defaultConfig sets the default config of declarations for MockBuilder.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultConfig\n */\n defaultConfig<T>(token: string | AnyDeclaration<T>, config?: IMockBuilderConfig): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T>(\n token: InjectionToken<T>,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock string tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T = any>(\n token: string,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock declarations.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T>(\n def: AnyType<T>,\n handler?: (value: T, injector: Injector) => void | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.defaultMock sets default customizations of mock declarations and tokens.\n * It helps to avoid repetitions from test to test.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/defaultMock\n */\n defaultMock<T = any>(\n defs: Array<AnyDeclaration<T>>,\n handler?: (value: undefined | T, injector: Injector) => undefined | Partial<T>,\n config?: IMockBuilderConfig,\n ): void;\n\n /**\n * ngMocks.globalExclude configures which declarations, providers and tokens\n * should be excluded from mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalExclude\n *\n * ```ts\n * ngMocks.globalExclude(TranslationModule);\n * ```\n */\n globalExclude(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalKeep configures which declarations, providers and tokens\n * should not be mocked and will stay as they are in mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalKeep\n *\n * ```ts\n * ngMocks.globalKeep(TranslationModule);\n * ```\n */\n globalKeep(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalMock configures which declarations, providers and tokens\n * should be mocked in kept declarations.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalMock\n *\n * ```ts\n * ngMocks.globalMock(TranslationModule);\n * ```\n */\n globalMock(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.globalReplace configures which declarations, providers and tokens\n * should be substituted in mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalReplace\n *\n * ```ts\n * ngMocks.globalReplace(BrowserAnimationsModule, NoopAnimationsModule);\n * ```\n */\n globalReplace(source: AnyType<any>, destination: AnyType<any>): void;\n\n /**\n * ngMocks.globalWipe resets all customizations of ngMocks.global* and mgMocks.default* functions.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/globalWipe\n *\n * ```ts\n * ngMocks.globalWipe(TranslationModule);\n * ngMocks.globalWipe(BrowserAnimationsModule);\n * ```\n */\n globalWipe(source: AnyDeclaration<any>): void;\n\n /**\n * ngMocks.change triggers ControlValueAccessor update.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/change\n */\n change(elSelector: DebugNodeSelector, value: any, methodName?: string): void;\n\n /**\n * ngMocks.touch triggers ControlValueAccessor touch.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/touch\n */\n touch(elSelector: DebugNode | DebugNodeSelector, methodName?: string): void;\n\n /**\n * ngMocks.click properly simulates a click on an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/click\n */\n click(elSelector: HTMLElement | DebugNodeSelector, payload?: Partial<MouseEvent>): void;\n\n /**\n * ngMocks.trigger lets trigger custom events on DebugElements.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/trigger\n *\n * ```ts\n * ngMocks.trigger(el, new CustomEvent('my-event'));\n * ```\n */\n trigger(elSelector: DebugNodeSelector, event: Event): void;\n\n /**\n * ngMocks.trigger lets trigger custom events on DebugElements.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/trigger\n *\n * ```ts\n * ngMocks.trigger(el, 'click');\n * ngMocks.trigger(el, 'keydown.control.shift.z');\n * ```\n */\n trigger(\n elSelector: HTMLElement | DebugNodeSelector,\n event: string,\n payload?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent>,\n ): void;\n\n /**\n * ngMocks.event builds correct event objects.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/event\n */\n event(\n event: string,\n init?: EventInit,\n overrides?: Partial<UIEvent | KeyboardEvent | MouseEvent | TouchEvent | Event>,\n ): Event;\n\n /**\n * ngMocks.render renders a templateRef or DebugElement.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/render\n *\n * ```ts\n * ngMocks.header(component, headerEl);\n * ```\n */\n render(\n instance: object,\n template: TemplateRef<any> | DebugNode,\n $implicit?: any,\n variables?: Record<keyof any, any>,\n ): void;\n\n /**\n * ngMocks.render renders a structural directive.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/render\n *\n * ```ts\n * ngMocks.render(component, directiveInstance);\n * ```\n */\n render(instance: object, directive: object, $implicit?: any, variables?: Record<keyof any, any>): void;\n\n /**\n * ngMocks.hide hides a rendered templateRef or DebugElement.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/hide\n *\n * ```ts\n * ngMocks.hide(component, headerEl);\n * ```\n */\n hide(instance: object, tpl?: TemplateRef<any> | DebugNode): void;\n\n /**\n * ngMocks.hide hides a rendered structural directive.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/hide\n *\n * ```ts\n * ngMocks.hide(component, directiveInstance);\n * ```\n */\n hide(instance: object, directive: object): void;\n\n /**\n * ngMocks.input allows to get an input value without knowing\n * which component / directive it belongs to.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/input\n *\n * ```ts\n * const input = ngMocks.input('app-component', 'version');\n * ```\n */\n input<T = any>(elSelector: DebugNodeSelector, input: string): T;\n\n /**\n * ngMocks.input allows to get an input value without knowing\n * which component / directive it belongs to, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/input\n *\n * ```ts\n * const input = ngMocks.input('app-component', 'version', undefined);\n * ```\n */\n input<T = any, D = undefined>(elSelector: DebugNodeSelector, input: string, notFoundValue: D): D | T;\n\n /**\n * ngMocks.output allows to get an output emitter without knowing\n * which component / directive it belongs to.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/output\n *\n * ```ts\n * const outputEmitter = ngMocks.output('app-component', 'update');\n * ```\n */\n output<T = any>(elSelector: DebugNodeSelector, output: string): EventEmitter<T>;\n\n /**\n * ngMocks.output allows to get an output emitter without knowing\n * which component / directive it belongs to, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/output\n *\n * ```ts\n * const outputEmitter = ngMocks.output('app-component', 'update', undefined);\n * ```\n */\n output<T = any, D = undefined>(elSelector: DebugNodeSelector, output: string, notFoundValue: D): D | EventEmitter<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component,\n * and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(MyComponent);\n * ```\n */\n find<T>(component: Type<T>): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component\n * starting from an element, and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, MyComponent);\n * ```\n */\n find<T>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n ): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component,\n * and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(MyComponent, undefined);\n * ```\n */\n find<T, D>(component: Type<T>, notFoundValue: D): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement of a particular component\n * starting from an element, and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture, MyComponent, undefined);\n * ```\n */\n find<T, D>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector,\n * and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find('.header');\n * const el = ngMocks.find('[data-key=5]');\n * const el = ngMocks.find(['data-key', 5]);\n * ```\n */\n find<T = any>(cssSelector: string | [string] | [string, string | number]): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector\n * starting from an element, and returns the first found.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, '.header');\n * const el = ngMocks.find(fixture, '[data-key=5]');\n * const el = ngMocks.find(debugElement, ['data-key', 5]);\n * ```\n */\n find<T = any>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n ): MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector,\n * and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find('.header', undefined);\n * const el = ngMocks.find('[data-key=5]', null);\n * const el = ngMocks.find(['data-key', 5], null);\n * ```\n */\n find<T = any, D = undefined>(\n cssSelector: string | [string] | [string, string | number],\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.find searches for the DebugElement based on css selector\n * starting from an element, and returns the first found, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/find\n *\n * ```ts\n * const el = ngMocks.find(fixture.debugElement, '.header', undefined);\n * const el = ngMocks.find(fixture, '[data-key=5]', null);\n * const el = ngMocks.find(debugElement, ['data-key', 5], null);\n * ```\n */\n find<T = any, D = undefined>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n notFoundValue: D,\n ): D | MockedDebugElement<T>;\n\n /**\n * ngMocks.findAll searches for all DebugElements of a particular component,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(MyComponent);\n * ```\n */\n findAll<T>(component: Type<T>): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements of a particular component\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(fixture.debugElement, MyComponent);\n * ```\n */\n findAll<T>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n component: Type<T>,\n ): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements based on css selector,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll('.header');\n * const all = ngMocks.findAll('[data-key=5]');\n * const all = ngMocks.findAll(['data-key', 5]);\n * ```\n */\n findAll<T = any>(cssSelector: string | [string] | [string, string | number]): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.findAll searches for all DebugElements based on css selector\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findAll\n *\n * ```ts\n * const all = ngMocks.findAll(fixture.debugElement, '.header');\n * const all = ngMocks.findAll(fixture, '[data-key=5]');\n * const all = ngMocks.findAll(debugElement, ['data-key', 5]);\n * ```\n */\n findAll<T = any>(\n debugElement: MockedDebugElement | ComponentFixture<any> | undefined | null,\n cssSelector: string | [string] | [string, string | number],\n ): Array<MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(HeaderComponent);\n * ```\n */\n reveal<T>(selector: AnyType<T>): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('header', HeaderComponent);\n * ```\n */\n reveal<T>(elSelector: DebugNodeSelector, selector: AnyType<T>): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(['tpl', 'header']);\n * ```\n */\n reveal<T = any>(selector: string | [string] | [string, any]): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('header', ['tpl', 'header']);\n * ```\n */\n reveal<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n ): MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template,\n * otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(HeaderComponent, undefined);\n * ```\n */\n reveal<T, D>(selector: AnyType<T>, notFoundValue: D): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('sidebar', HeaderComponent, undefined);\n * ```\n */\n reveal<T, D>(\n elSelector: DebugNodeSelector,\n selector: AnyType<T>,\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template,\n * otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal(['tpl', 'header'], undefined);\n * ```\n */\n reveal<T = any, D = undefined>(\n selector: string | [string] | [string, any],\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.reveal allows finding DebugNodes which belong to ng-container or ng-template\n * starting from an element, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reveal\n *\n * ```ts\n * const ngContainer = ngMocks.reveal('sidebar', ['tpl', 'header'], undefined);\n * ```\n */\n reveal<T = any, D = undefined>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n notFoundValue: D,\n ): D | MockedDebugNode<T> | MockedDebugElement<T>;\n\n /**\n * ngMocks.revealAll allows finding all DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll(HeaderComponent);\n * ```\n */\n revealAll<T>(selector: AnyType<T>): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll(['tpl', 'header']);\n * ```\n */\n revealAll<T = any>(selector: string | [string] | [string, any]): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll('sidebar', HeaderComponent);\n * ```\n */\n revealAll<T>(elSelector: DebugNodeSelector, selector: AnyType<T>): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.reveal allows finding all DebugNodes which belong to ng-container or ng-template\n * starting from an element.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/revealAll\n *\n * ```ts\n * const ngContainers = ngMocks.revealAll('sidebar', ['tpl', 'header']);\n * ```\n */\n revealAll<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any],\n ): Array<MockedDebugNode<T> | MockedDebugElement<T>>;\n\n /**\n * ngMocks.get tries to get an instance of declaration, provider or token\n * from the element which is matching a selector.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get('my-component', MyComponent);\n * const myDirective = ngMocks.get('my-component', MyDirective);\n * ```\n */\n get<T>(elSelector: DebugNodeSelector, provider: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.get tries to get an instance of declaration, provider or token\n * from the element which is matching a selector, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get('my-component', MyComponent, undefined);\n * const myDirective = ngMocks.get('my-component', MyDirective, null);\n * ```\n */\n get<T, D>(elSelector: DebugNodeSelector, provider: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.get tries to get an instance of provider or token for TestBed.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/get\n *\n * ```ts\n * const myComponent = ngMocks.get(MyComponent);\n * const myDirective = ngMocks.get(MyDirective);\n * ```\n */\n get<T>(provider: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token,\n * and returns the first one.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(SidebarComponent);\n * const service = ngMocks.findInstance(AuthService);\n * const config = ngMocks.findInstance(APP_CONFIG);\n * ```\n */\n findInstance<T>(instanceClass: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token\n * starting from an element, and returns the first one.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(fixture, SidebarComponent);\n * const service = ngMocks.findInstance('header', AuthService);\n * const config = ngMocks.findInstance(debugElement, APP_CONFIG);\n * ```\n */\n findInstance<T>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>): T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token,\n * and returns the first one, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(SidebarComponent, undefined);\n * const service = ngMocks.findInstance(AuthService, null);\n * const config = ngMocks.findInstance(APP_CONFIG, false);\n */\n findInstance<T, D>(instanceClass: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.findInstance searches for an instance of declaration, provider or token\n * starting from an element, and returns the first one, otherwise the notFoundValue.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstance\n *\n * ```ts\n * const component = ngMocks.findInstance(fixture, SidebarComponent, undefined);\n * const service = ngMocks.findInstance('header', AuthService, null);\n * const config = ngMocks.findInstance(debugElement, APP_CONFIG, false);\n * ```\n */\n findInstance<T, D>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>, notFoundValue: D): D | T;\n\n /**\n * ngMocks.findInstances searches for all instances of declaration, provider or token,\n * and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstances\n *\n * ```ts\n * const components = ngMocks.findInstances(SidebarComponent);\n * const services = ngMocks.findInstances(AuthService);\n * const configs = ngMocks.findInstances(APP_CONFIG);\n * ```\n */\n findInstances<T>(instanceClass: AnyDeclaration<T>): T[];\n\n /**\n * ngMocks.findInstances searches for all instances of declaration, provider or token\n * starting from an element, and returns an array of them.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findInstances\n *\n * ```ts\n * const components = ngMocks.findInstances(fixture, SidebarComponent);\n * const services = ngMocks.findInstances('header', AuthService);\n * const configs = ngMocks.findInstances(debugElement, APP_CONFIG);\n * ```\n */\n findInstances<T>(elSelector: DebugNodeSelector, instanceClass: AnyDeclaration<T>): T[];\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found, otherwise the notFoundValue.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef('sidebar', StructuralDirective, undefined);\n * ```\n */\n findTemplateRef<T = any, D = undefined>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n notFoundValue: D,\n ): D | TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef('sidebar', StructuralDirective);\n * ```\n */\n findTemplateRef<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n ): TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found, otherwise the notFoundValue.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef(['mat-row'], null);\n * ```\n */\n findTemplateRef<T = any, D = undefined>(\n selector: string | [string] | [string, any] | AnyType<any>,\n notFoundValue: D,\n ): D | TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRef searches for a TemplateRef which is matching the selector,\n * and returns the first found.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRef\n *\n * ```ts\n * const templateRef = ngMocks.findTemplateRef(['mat-row']);\n * ```\n */\n findTemplateRef<T = any>(selector: string | [string] | [string, any] | AnyType<any>): TemplateRef<T>;\n\n /**\n * ngMocks.findTemplateRefs searches for all TemplateRefs which is matching the selector\n * starting from an element, and returns an array of them.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRefs\n *\n * ```ts\n * const templateRefs = ngMocks.findTemplateRefs('header', StructuralDirective);\n * ```\n */\n findTemplateRefs<T = any>(\n elSelector: DebugNodeSelector,\n selector: string | [string] | [string, any] | AnyType<any>,\n ): Array<TemplateRef<T>>;\n\n /**\n * ngMocks.findTemplateRefs searches for all TemplateRefs which is matching the selector,\n * and returns an array of them.\n * The TemplateRef can be rendered later on.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/findTemplateRefs\n *\n * ```ts\n * const templateRefs = ngMocks.findTemplateRefs(['mat-row']);\n * ```\n */\n findTemplateRefs<T = any>(selector: string | [string] | [string, any] | AnyType<any>): Array<TemplateRef<T>>;\n\n /**\n * ngMocks.crawl correctly crawls through Angular DOM with respect of TemplateRefs and ng-containers.\n * Usually, it's used internally.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/crawl\n */\n crawl(\n elSelector: DebugNodeSelector,\n callback: (\n node: MockedDebugNode | MockedDebugElement,\n parent?: MockedDebugNode | MockedDebugElement,\n ) => boolean | void,\n includeTextNodes?: boolean,\n ): void;\n\n /**\n * ngMocks.stub lets replace a method, getter or setter with a dummy callback.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stub\n *\n * ```ts\n * ngMocks.stub(instance, 'save'); // save is an empty callback now.\n * ngMocks.stub(instance, 'user', 'get'); // getter is an empty callback now.\n * ngMocks.stub(instance, 'user', 'set'); // setter is an empty callback now.\n * ```\n */\n stub<T = MockedFunction, I = any>(instance: I, name: keyof I, style?: 'get' | 'set'): T;\n\n /**\n * ngMocks.stub lets apply partial customizations to an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stub\n *\n * ```ts\n * ngMocks.stub(instance, {\n * save: () => undefined,\n * user: null,\n * });\n * ```\n */\n stub<I extends object>(instance: I, overrides: Partial<I>): I;\n\n /**\n * ngMocks.stubMember lets inject spies it to getters of properties of an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'user', jasmine.createSpy(), 'get')\n * .and.returnValue(null);\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends () => T[K]>(\n instance: T,\n name: K,\n stub: S,\n encapsulation: 'get',\n ): S;\n\n /**\n * ngMocks.stubMember lets inject spies it to setters of properties of an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'user', jasmine.createSpy(), 'set')\n * .and.throwError('setter is forbidden');\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends (value: T[K]) => void>(\n instance: T,\n name: K,\n stub: S,\n encapsulation: 'set',\n ): S;\n\n /**\n * ngMocks.stubMember lets inject spies it to an instance.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/stubMember\n *\n * ```ts\n * ngMocks.stubMember(instance, 'save', jasmine.createSpy());\n * ngMocks.stubMember(instance, 'user', null);\n * ```\n */\n stubMember<T extends object, K extends keyof T, S extends T[K]>(instance: T, name: K, stub: S): S;\n\n /**\n * ngMocks.guts provides a simple way to configure complex mocks.\n * Please check documentation.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/guts\n */\n guts(\n keep: AnyDeclaration<any> | Provider | Array<AnyDeclaration<any> | Provider> | null | undefined,\n mock?:\n | AnyDeclaration<any>\n | NgModuleWithProviders\n | Provider\n | Array<AnyDeclaration<any> | NgModuleWithProviders | Provider>\n | null\n | undefined,\n exclude?: AnyDeclaration<any> | Array<AnyDeclaration<any>> | null | undefined,\n ): TestModuleMetadata;\n\n /**\n * ngMocks.faster lets reuse the same TestBed between tests instead of resetting it.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/faster\n */\n faster(): void;\n\n /**\n * ignoreOnConsole suppresses any log calls, other methods can be suppressed too.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/ignoreOnConsole\n */\n ignoreOnConsole(...args: Array<keyof typeof console>): void;\n\n /**\n * Thanks Ivy, it does not throw an error, and we have to use injector.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/throwOnConsole\n */\n throwOnConsole(...args: Array<keyof typeof console>): void;\n\n /**\n * ngMocks.formatHtml normalizes html for a DebugElement, fixture or html string.\n * It removes redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatHtml\n *\n * ```ts\n * const html = ngMocks.formatHTML(fixture);\n * const html = ngMocks.formatHTML(debugElement);\n * const html = ngMocks.formatHTML('<div> </div>');\n * ```\n */\n formatHtml(html: FORMAT_SINGLE, outer?: boolean): string;\n\n /**\n * ngMocks.formatHtml normalizes html for an array of DebugElements, fixtures or html strings.\n * It removes redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatHtml\n *\n * const [html1, html2] = ngMocks.formatHTML([fixture1, fixture2]);\n * const htmlStrings = ngMocks.formatHTML(debugElements);\n */\n formatHtml(html: FORMAT_SET, outer?: boolean): string[];\n\n /**\n * ngMocks.formatText normalizes text for a DebugElement, fixture or html string.\n * It removes tags, redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatText\n *\n * ```ts\n * const txt = ngMocks.formatText(fixture);\n * const txt = ngMocks.formatText(debugElement);\n * const txt = ngMocks.formatText('<div> </div>');\n * ```\n */\n formatText(text: FORMAT_SINGLE, outer?: boolean): string;\n\n /**\n * ngMocks.formatText normalizes text for an array of DebugElements, fixtures or html strings.\n * It removes tags, redundant spaces, comments etc.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/formatText\n *\n * const [txt1, txt2] = ngMocks.formatText([fixture1, fixture2]);\n * const txtStrings = ngMocks.formatText(debugElements);\n */\n formatText(text: FORMAT_SET, outer?: boolean): string[];\n\n /**\n * ngMocks.flushTestBed resets TestBed.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/flushTestBed\n */\n flushTestBed(): void;\n\n /**\n * ngMocks.reset resets cache of ng-mocks.\n *\n * @see https://ng-mocks.sudo.eu/api/ngMocks/reset\n */\n reset(): void;\n\n /**\n * ngMocks.config lets customize default behavior of error reporting.\n */\n config(config: {\n mockRenderCacheSize?: number | null;\n onMockBuilderMissingDependency?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onMockInstanceRestoreNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n onTestBedFlushNeed?: 'throw' | 'warn' | 'i-know-but-disable' | null;\n }): void;\n} = mockHelperObject;\n","import {\n ClassProvider,\n ExistingProvider,\n FactoryProvider,\n InjectionToken,\n Provider,\n StaticClassProvider,\n ValueProvider,\n} from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\nimport funcImportExists from '../common/func.import-exists';\nimport mockHelperStub from '../mock-helper/mock-helper.stub';\nimport helperUseFactory from '../mock-service/helper.use-factory';\nimport { MockService } from '../mock-service/mock-service';\n\nconst defaultValue = {};\n\n/**\n * MockProviders creates an array of mock providers out of passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: MockProviders(\n * Dep1Service,\n * Dep2Service,\n * ),\n * });\n * ```\n */\nexport function MockProviders(...providers: Array<AnyDeclaration<any>>): FactoryProvider[] {\n return providers.map((provider: any) => MockProvider(provider, defaultValue));\n}\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary service.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(Dep1Service),\n * MockProvider(Dep2Service, {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I extends object>(instance: AnyType<I>, overrides?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(APP_ID),\n * MockProvider(WEB_SOCKET, {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(provider: InjectionToken<I>, useValue?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider creates a mock provider out of passed an arbitrary string token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider('web_socket', {\n * prop: true,\n * func: () => 'mock',\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I = any>(provider: string, useValue?: Partial<I>): FactoryProvider;\n\n/**\n * MockProvider generates useValue based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useValue\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, {isLoggedIn: true}, 'useValue'),\n * MockProvider(APP_ROUTES, 5, 'useValue', true), // multi flag\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: ValueProvider['useValue'],\n style: 'useValue',\n multi?: ValueProvider['multi'],\n): ValueProvider;\n\n/**\n * MockProvider generates useExisting based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useExisting\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, MockAuthService, 'useExisting', true),\n * MockProvider(APP_ROUTES, MOCK_ROUTES, 'useExisting', true), // multi flag\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: ExistingProvider['useExisting'],\n style: 'useExisting',\n multi?: ExistingProvider['multi'],\n): ExistingProvider;\n\n/**\n * MockProvider generates useClass based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useClass\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, MockAuthService, 'useClass', [ctorDep1, ctorDep2]),\n * MockProvider(UserService, MockUserService, 'useClass', {\n * multi: true, // multi flag\n * deps: [ctorDep1, ctorDep2],\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: StaticClassProvider['useClass'],\n style: 'useClass',\n multiDeps?:\n | StaticClassProvider['multi']\n | StaticClassProvider['deps']\n | {\n multi?: StaticClassProvider['multi'];\n deps?: StaticClassProvider['deps'];\n },\n): ClassProvider;\n\n/**\n * MockProvider generates useFactory based on passed parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockProvider#useFactory\n *\n * ```ts\n * TestBed.configureTestingModule({\n * providers: [\n * MockProvider(AuthService, (dep1, dep2) => {\n * // ...\n * }, 'useFactory', [ctorDep1, ctorDep2]),\n * MockProvider(UserService, (dep1, dep2) => {\n * // ...\n * }, 'useFactory', {\n * multi: true, // multi flag\n * deps: [ctorDep1, ctorDep2],\n * }),\n * ],\n * });\n * ```\n */\nexport function MockProvider<I>(\n provider: AnyDeclaration<I>,\n value: FactoryProvider['useFactory'],\n style: 'useFactory',\n multiDeps?:\n | FactoryProvider['multi']\n | FactoryProvider['deps']\n | {\n multi?: FactoryProvider['multi'];\n deps?: FactoryProvider['deps'];\n },\n): FactoryProvider;\n\nexport function MockProvider(\n provide: any,\n overrides: any = defaultValue,\n style?: 'useValue' | 'useExisting' | 'useClass' | 'useFactory',\n flags:\n | boolean\n | any[]\n | {\n deps?: any[];\n multi?: boolean;\n } = {},\n): Provider {\n funcImportExists(provide, 'MockProvider');\n\n const { deps, multi } =\n typeof flags === 'boolean'\n ? { deps: undefined, multi: flags }\n : Array.isArray(flags)\n ? {\n deps: flags,\n multi: undefined,\n }\n : flags;\n\n if (style) {\n return {\n provide,\n [style]: overrides,\n deps,\n multi,\n };\n }\n\n return helperUseFactory(\n provide,\n () => MockService(provide),\n value => {\n if (overrides === defaultValue) {\n return value;\n }\n if (!value) {\n return overrides;\n }\n\n return mockHelperStub(value, overrides);\n },\n );\n}\n","import coreReflectDirectiveResolve from './core.reflect.directive-resolve';\nimport coreReflectModuleResolve from './core.reflect.module-resolve';\nimport { isNgDef } from './func.is-ng-def';\n\nexport default (value: any): any => {\n if (isNgDef(value, 'c')) {\n return coreReflectDirectiveResolve(value);\n }\n if (isNgDef(value, 'd')) {\n return coreReflectDirectiveResolve(value);\n }\n if (isNgDef(value, 'm')) {\n return coreReflectModuleResolve(value);\n }\n\n return undefined;\n};\n","import { AnyType } from './core.types';\n\nexport default (declaration: any): undefined | AnyType<any> | string => {\n if (!declaration || (typeof declaration !== 'object' && typeof declaration !== 'function')) {\n return undefined;\n }\n\n return declaration.ɵprov?.providedIn ?? declaration.ngInjectableDef?.providedIn;\n};\n","import { ViewContainerRef } from '@angular/core';\nimport { getTestBed, MetadataOverride, TestBed, TestBedStatic, TestModuleMetadata } from '@angular/core/testing';\n\nimport funcExtractTokens from '../mock-builder/func.extract-tokens';\nimport getOverrideDef from '../mock-builder/promise/get-override-def';\nimport { ngMocks } from '../mock-helper/mock-helper';\nimport mockHelperFasterInstall from '../mock-helper/mock-helper.faster-install';\nimport { MockProvider } from '../mock-provider/mock-provider';\nimport helperCreateClone from '../mock-service/helper.create-clone';\n\nimport coreConfig from './core.config';\nimport coreDefineProperty from './core.define-property';\nimport { flatten, mapEntries, mapValues } from './core.helpers';\nimport coreInjector from './core.injector';\nimport coreReflectMeta from './core.reflect.meta';\nimport coreReflectModuleResolve from './core.reflect.module-resolve';\nimport coreReflectProvidedIn from './core.reflect.provided-in';\nimport { NG_MOCKS, NG_MOCKS_TOUCHES } from './core.tokens';\nimport { AnyType, dependencyKeys } from './core.types';\nimport funcGetProvider from './func.get-provider';\nimport { isNgDef } from './func.is-ng-def';\nimport { isNgModuleDefWithProviders } from './func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst applyOverride = (def: any, override: any) => {\n if (isNgDef(def, 'c')) {\n TestBed.overrideComponent(def, override);\n } else if (isNgDef(def, 'd')) {\n TestBed.overrideDirective(def, override);\n } else if (isNgDef(def, 'm')) {\n TestBed.overrideModule(def, override);\n }\n if (isNgDef(def, 't')) {\n TestBed.overrideProvider(def, override);\n } else if (isNgDef(def, 'i')) {\n TestBed.overrideProvider(def, override);\n }\n};\n\nconst applyOverrides = (overrides: Map<AnyType<any>, [MetadataOverride<any>, MetadataOverride<any>]>): void => {\n for (const [def, [override, original]] of mapEntries(overrides)) {\n (TestBed as any).ngMocksOverrides.set(def, {\n ...original,\n override,\n });\n applyOverride(def, override);\n }\n};\n\n// Thanks Ivy and its TestBed.override - it does not clean up leftovers.\nconst applyNgMocksOverrides = (testBed: TestBedStatic & { ngMocksOverrides?: Map<any, any> }): void => {\n if (testBed.ngMocksOverrides?.size) {\n ngMocks.flushTestBed();\n for (const [def, original] of mapEntries(testBed.ngMocksOverrides)) {\n applyOverride(def, original);\n }\n }\n testBed.ngMocksOverrides = undefined;\n};\n\nconst initTestBed = () => {\n if (!(TestBed as any).ngMocksSelectors) {\n coreDefineProperty(TestBed, 'ngMocksSelectors', new Map());\n }\n // istanbul ignore else\n if (!(TestBed as any).ngMocksOverrides) {\n coreDefineProperty(TestBed, 'ngMocksOverrides', new Map());\n }\n};\n\nconst generateTouches = (moduleDef: Partial<Record<dependencyKeys, any>>, touches: Set<any>): void => {\n for (const key of coreConfig.dependencies) {\n for (const item of moduleDef[key] ? flatten(moduleDef[key]) : []) {\n let def = funcGetProvider(item);\n if (isNgModuleDefWithProviders(def)) {\n generateTouches(def, touches);\n def = def.ngModule;\n }\n if (touches.has(def)) {\n continue;\n }\n touches.add(def);\n if (typeof def !== 'function') {\n continue;\n }\n\n if (!Object.prototype.hasOwnProperty.call(def, '__ngMocksTouches')) {\n const local = new Set<any>();\n const meta = coreReflectMeta(def);\n coreDefineProperty(def, '__ngMocksTouches', local, false);\n if (meta) {\n generateTouches(meta, local);\n }\n }\n\n mapValues(def.__ngMocksTouches, touches);\n }\n }\n};\n\nconst defineTouches = (testBed: TestBed, moduleDef: TestModuleMetadata, knownTouches?: Set<any>) => {\n let touches = knownTouches;\n\n if (!touches && ngMocksUniverse.getDefaults().size > 0) {\n touches = funcExtractTokens(\n (testBed as any)._providers || /* istanbul ignore next Ivy part */ (testBed as any)._compiler?.providers,\n ).touches;\n if (!touches) {\n touches = new Set();\n moduleDef.providers = moduleDef.providers || [];\n moduleDef.providers.push({ provide: NG_MOCKS_TOUCHES, useValue: touches });\n }\n generateTouches(moduleDef, touches);\n }\n\n return touches;\n};\n\nconst applyPlatformOverrideDef = (def: any) => {\n const ngModule = isNgModuleDefWithProviders(def) ? /* istanbul ignore next */ def.ngModule : def;\n if ((TestBed as any).ngMocksOverrides.has(ngModule)) {\n return;\n }\n\n const original = coreReflectModuleResolve(ngModule);\n const set = getOverrideDef(original);\n if (set) {\n (TestBed as any).ngMocksOverrides.set(ngModule, { set: original });\n TestBed.overrideModule(ngModule, { set });\n }\n};\n\nconst applyPlatformOverridesBasedOnProvidedIn = (provide: any, touches: Set<any>) => {\n const providedIn = coreReflectProvidedIn(provide);\n if (!providedIn) {\n return;\n }\n // knownTouches present from MockBuilder and we can rely on it,\n // otherwise we have to override the provider always.\n if (typeof providedIn !== 'string' && !touches.has(providedIn)) {\n return;\n }\n (TestBed as any).ngMocksOverrides.set(provide, {});\n TestBed.overrideProvider(provide, MockProvider(provide as never));\n};\n\nconst applyPlatformOverridesBasedOnDefaults = (touches: Set<any>) => {\n for (const [provide, [config]] of mapEntries(ngMocksUniverse.getDefaults())) {\n if (config !== 'mock') {\n continue;\n }\n if (!isNgDef(provide, 'i') && !isNgDef(provide, 't')) {\n continue;\n }\n if (touches.has(provide)) {\n continue;\n }\n if ((TestBed as any).ngMocksOverrides.has(provide)) {\n continue;\n }\n applyPlatformOverridesBasedOnProvidedIn(provide, touches);\n }\n};\n\nconst applyPlatformOverrides = (testBed: TestBed, touches: Set<any>) => {\n // istanbul ignore else\n if ((TestBed as any).ngMocksOverrides) {\n const backup = ngMocksUniverse.touches;\n ngMocksUniverse.touches = touches;\n for (const def of flatten(testBed.ngModule || /* istanbul ignore next */ [])) {\n applyPlatformOverrideDef(def);\n }\n applyPlatformOverridesBasedOnDefaults(touches);\n ngMocksUniverse.touches = backup;\n }\n};\n\nconst configureTestingModule =\n (\n original: TestBedStatic['configureTestingModule'],\n instance: TestBedStatic,\n ): TestBedStatic['configureTestingModule'] =>\n (moduleDef: TestModuleMetadata) => {\n initTestBed();\n\n const testBed = getTestBed();\n\n const providers = funcExtractTokens(moduleDef.providers);\n const { mocks, overrides } = providers;\n // touches are important,\n // therefore we are trying to fetch them from the known providers.\n const touches = defineTouches(testBed, moduleDef, providers.touches);\n\n if (mocks) {\n ngMocks.flushTestBed();\n }\n\n // istanbul ignore else\n if (overrides) {\n applyOverrides(overrides);\n }\n // _testModuleRef exists only after the 1st call,\n // so we shouldn't override platform again.\n if (touches && !(testBed as any)._instantiated && !(testBed as any)._testModuleRef) {\n applyPlatformOverrides(testBed, touches);\n }\n\n return original.call(instance, moduleDef);\n };\n\nconst resetTestingModule =\n (original: TestBedStatic['resetTestingModule'], instance: TestBedStatic): TestBedStatic['resetTestingModule'] =>\n () => {\n ngMocksUniverse.global.delete('builder:config');\n ngMocksUniverse.global.delete('builder:module');\n (TestBed as any).ngMocksSelectors = undefined;\n applyNgMocksOverrides(TestBed);\n\n return original.call(instance);\n };\n\nconst viewContainerInstall = () => {\n const vcr: any = ViewContainerRef;\n\n // istanbul ignore else\n if (!vcr.ngMocksOverridesInstalled) {\n const ngElementId = vcr.__NG_ELEMENT_ID__;\n\n // istanbul ignore else\n if (ngElementId) {\n coreDefineProperty(\n vcr,\n '__NG_ELEMENT_ID__',\n helperCreateClone(ngElementId, undefined, undefined, (...ngElementIdArgs: any[]) => {\n const vcrInstance = ngElementId.apply(ngElementId, ngElementIdArgs);\n\n const createComponent = vcrInstance.createComponent;\n coreDefineProperty(\n vcrInstance,\n 'createComponent',\n helperCreateClone(\n createComponent,\n undefined,\n undefined,\n (component: any, ...createComponentArgs: any[]) => {\n const map = coreInjector(NG_MOCKS, vcrInstance.injector);\n\n return createComponent.apply(vcrInstance, [\n map?.get(component) ?? component,\n ...createComponentArgs,\n ] as any);\n },\n ),\n true,\n );\n\n return vcrInstance;\n }),\n true,\n );\n }\n\n coreDefineProperty(ViewContainerRef, 'ngMocksOverridesInstalled', true);\n }\n};\n\nconst install = () => {\n // istanbul ignore else\n if (!(TestBed as any).ngMocksOverridesInstalled) {\n const hooks = mockHelperFasterInstall();\n viewContainerInstall();\n\n // istanbul ignore else\n if (hooks.before.indexOf(configureTestingModule) === -1) {\n hooks.before.push(configureTestingModule);\n }\n // istanbul ignore else\n if (hooks.after.indexOf(resetTestingModule) === -1) {\n hooks.after.push(resetTestingModule);\n }\n\n coreDefineProperty(TestBed, 'ngMocksOverridesInstalled', true);\n }\n};\n\ninstall();\n","import { PipeTransform } from '@angular/core';\n\nimport { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { Type } from './core.types';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * Checks whether a declaration is the mock class of a module.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockModule, RealModule, 'm'); // returns true\n * isMockedNgDefOf(MockModule, ArbitraryModule, 'm'); // returns false\n * isMockedNgDefOf(MockModule, ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>, ngType: 'm'): declaration is Type<MockedModule<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockComponent, RealComponent, 'c'); // returns true\n * isMockedNgDefOf(MockComponent, ArbitraryComponent, 'c'); // returns false\n * isMockedNgDefOf(MockComponent, ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(\n declaration: any,\n type: Type<T>,\n ngType: 'c',\n): declaration is Type<MockedComponent<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockDirective, RealDirective, 'd'); // returns true\n * isMockedNgDefOf(MockDirective, ArbitraryDirective, 'd'); // returns false\n * isMockedNgDefOf(MockDirective, ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(\n declaration: any,\n type: Type<T>,\n ngType: 'd',\n): declaration is Type<MockedDirective<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockPipe, RealPipe, 'p'); // returns true\n * isMockedNgDefOf(MockPipe, ArbitraryPipe, 'p'); // returns false\n * isMockedNgDefOf(MockPipe, ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T extends PipeTransform>(\n declaration: any,\n type: Type<T>,\n ngType: 'p',\n): declaration is Type<MockedPipe<T>>;\n\n/**\n * Checks whether a declaration is the mock class of a thing.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockedNgDefOf\n *\n * ```ts\n * isMockedNgDefOf(MockPipe, RealPipe); // returns true\n * isMockedNgDefOf(MockComponent, ArbitraryComponent); // returns false\n * isMockedNgDefOf(MockPipe, ArbitraryClass); // returns false\n * ```\n */\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>): declaration is Type<T>;\n\nexport function isMockedNgDefOf<T>(declaration: any, type: Type<T>, ngType?: any): declaration is Type<T> {\n return (\n typeof declaration === 'function' && declaration.mockOf === type && (ngType ? isNgDef(declaration, ngType) : true)\n );\n}\n","import { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport coreInjector from './core.injector';\nimport { NG_MOCKS } from './core.tokens';\nimport { AnyType, Type } from './core.types';\nimport funcGetName from './func.get-name';\nimport { isMockedNgDefOf } from './func.is-mocked-ng-def-of';\nimport ngMocksUniverse from './ng-mocks-universe';\n\nconst getMock = (declaration: any, source: any, mocks?: Map<any, any>) => {\n if (mocks && !mocks.has(source)) {\n throw new Error(`There is no mock for ${funcGetName(source)}`);\n }\n let mock = mocks ? mocks.get(source) : undefined;\n if (mock === source) {\n mock = undefined;\n }\n\n // If we are not in the MockBuilder env we can rely on the current cache.\n if (!mock && source !== declaration) {\n mock = declaration;\n } else if (!mock && ngMocksUniverse.cacheDeclarations.has(source)) {\n mock = ngMocksUniverse.cacheDeclarations.get(source);\n }\n\n return mock;\n};\n\n/**\n * Returns the mock class of a mock module based on a mock module or a source module.\n * It works in runtime if the module has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealModule, 'm'); // returns MockModule\n * getMockedNgDefOf(MockModule, 'm'); // returns MockModule\n * getMockedNgDefOf(ArbitraryClass, 'm'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'm'): Type<MockedModule<T>>;\n\n/**\n * Returns the mock class of a mock component based on a mock component or a source component.\n * It works in runtime if the component has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealComponent, 'c'); // returns MockComponent\n * getMockedNgDefOf(MockComponent, 'c'); // returns MockComponent\n * getMockedNgDefOf(ArbitraryClass, 'c'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'c'): Type<MockedComponent<T>>;\n\n/**\n * Returns the mock class of a mock directive based on a mock directive or a source directive.\n * It works in runtime if the directive has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealDirective, 'd'); // returns MockDirective\n * getMockedNgDefOf(MockDirective, 'd'); // returns MockDirective\n * getMockedNgDefOf(ArbitraryClass, 'd'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'd'): Type<MockedDirective<T>>;\n\n/**\n * Returns the mock class of a mock pipe based on a mock pipe or a source pipe.\n * It works in runtime if the pipe has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealPipe, 'p'); // returns MockPipe\n * getMockedNgDefOf(MockPipe, 'p'); // returns MockPipe\n * getMockedNgDefOf(ArbitraryClass, 'p'); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>, type: 'p'): Type<MockedPipe<T>>;\n\n/**\n * Returns the mock class of a thing based on a mock class or a source class.\n * It works in runtime if the thing has been mocked.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/getMockedNgDefOf\n *\n * ```ts\n * getMockedNgDefOf(RealComponent); // returns MockComponent\n * getMockedNgDefOf(MockPipe); // returns MockPipe\n * getMockedNgDefOf(ArbitraryClass); // throws\n * ```\n */\nexport function getMockedNgDefOf<T>(declaration: AnyType<T>): Type<T>;\n\nexport function getMockedNgDefOf(declaration: any, type?: any): any {\n const source = declaration.mockOf ?? declaration;\n const mocks = coreInjector(NG_MOCKS);\n\n const mock = getMock(declaration, source, mocks);\n if (mock && !type) {\n return mock;\n }\n if (mock && type && isMockedNgDefOf(mock, source, type)) {\n return mock;\n }\n\n throw new Error(`There is no mock for ${funcGetName(source)}`);\n}\n","import { PipeTransform } from '@angular/core';\n\nimport { MockedComponent } from '../mock-component/types';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockedModule } from '../mock-module/types';\nimport { MockedPipe } from '../mock-pipe/types';\n\nimport { Type } from './core.types';\nimport funcIsMock from './func.is-mock';\nimport { isNgDef } from './func.is-ng-def';\n\n/**\n * Checks whether the instance derives from a mock module.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(moduleInstance, RealModule, 'm'); // returns true\n * isMockOf(moduleInstance, ArbitraryClass, 'm'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'm'): instance is MockedModule<T>;\n\n/**\n * Checks whether the instance derives from a mock component.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(componentInstance, RealComponent, 'c'); // returns true\n * isMockOf(componentInstance, ArbitraryClass, 'c'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'c'): instance is MockedComponent<T>;\n\n/**\n * Checks whether the instance derives from a mock directive.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(directiveInstance, RealDirective, 'd'); // returns true\n * isMockOf(directiveInstance, ArbitraryClass, 'd'); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType: 'd'): instance is MockedDirective<T>;\n\n/**\n * Checks whether the instance derives from a mock pipe.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(pipeInstance, RealPipe, 'p'); // returns true\n * isMockOf(pipeInstance, ArbitraryClass, 'p'); // returns false\n * ```\n */\nexport function isMockOf<T extends PipeTransform>(\n instance: any,\n declaration: Type<T>,\n ngType: 'p',\n): instance is MockedPipe<T>;\n\n/**\n * Checks whether the instance derives from a mock type.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockOf\n *\n * ```ts\n * isMockOf(componentInstance, RealComponent); // returns true\n * isMockOf(pipeInstance, RealPipe); // returns true\n * isMockOf(pipeInstance, ArbitraryClass); // returns false\n * ```\n */\nexport function isMockOf<T>(instance: any, declaration: Type<T>): instance is T;\n\nexport function isMockOf<T>(instance: any, declaration: Type<T>, ngType?: any): instance is T {\n return (\n funcIsMock(instance) &&\n instance.constructor === declaration &&\n (ngType ? isNgDef(instance.constructor, ngType) : isNgDef(instance.constructor))\n );\n}\n","import funcIsMock from './func.is-mock';\nimport { MockValidator } from './mock-control-value-accessor';\n\n/**\n * isMockValidator helps to assert that an instance is a mock Validator\n * to perform validationChange simulations.\n * Usually, it is used in if statements.\n *\n * @see https://ng-mocks.sudo.eu/api/helpers/isMockValidator\n */\nexport const isMockValidator = <T>(value: T): value is T & MockValidator => {\n if (!funcIsMock(value)) {\n return false;\n }\n\n return !!(value as any).__ngMocksConfig.isValidator;\n};\n","import { InjectionToken, Injector } from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\nimport funcImportExists from '../common/func.import-exists';\nimport ngMocksStack, { NgMocksStack } from '../common/ng-mocks-stack';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport mockInstanceForgotReset from './mock-instance-forgot-reset';\n\nlet currentStack: NgMocksStack;\nngMocksStack.subscribePush(state => {\n currentStack = state;\n});\nngMocksStack.subscribePop((state, stack) => {\n for (const declaration of state.mockInstance || /* istanbul ignore next */ []) {\n if (ngMocksUniverse.configInstance.has(declaration)) {\n const universeConfig = ngMocksUniverse.configInstance.get(declaration);\n universeConfig.overloads.pop();\n ngMocksUniverse.configInstance.set(declaration, {\n ...universeConfig,\n });\n }\n }\n currentStack = stack[stack.length - 1];\n});\n\ninterface MockInstanceArgs {\n accessor?: 'get' | 'set';\n data?: any;\n key?: string;\n value?: any;\n}\n\nconst parseMockInstanceArgs = (args: any[]): MockInstanceArgs => {\n const set: MockInstanceArgs = {};\n\n if (typeof args[0] === 'string') {\n set.key = args[0];\n set.value = args[1];\n set.accessor = args[2];\n } else {\n set.value = args[0];\n if (set.value && typeof set.value === 'object') {\n set.value = set.value.init;\n }\n }\n\n return set;\n};\n\nconst checkReset: Array<[any, any, any?]> = [];\nlet checkCollect = false;\n\n// istanbul ignore else: maybe a different runner is used\nif (typeof beforeEach !== 'undefined') {\n beforeEach(() => (checkCollect = true));\n beforeEach(() => mockInstanceForgotReset(checkReset));\n afterEach(() => (checkCollect = false));\n}\n\nconst mockInstanceConfig = <T>(\n declaration: AnyDeclaration<T>,\n name: string | undefined,\n stub: any,\n encapsulation?: 'get' | 'set',\n) => {\n const config = ngMocksUniverse.configInstance.has(declaration) ? ngMocksUniverse.configInstance.get(declaration) : {};\n const overloads = config.overloads || [];\n overloads.push([name, stub, encapsulation]);\n config.overloads = overloads;\n ngMocksUniverse.configInstance.set(declaration, {\n ...config,\n });\n const mockInstances = currentStack.mockInstance ?? [];\n mockInstances.push(declaration);\n currentStack.mockInstance = mockInstances;\n\n if (checkCollect) {\n checkReset.push([declaration, ngMocksUniverse.configInstance.get(declaration), currentStack]);\n }\n\n return stub;\n};\n\n/**\n * This signature of MockInstance lets customize the getter of a property.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, 'currentUser$', () => mockUser$, 'get');\n * MockInstance(ArbitraryService, 'enabled', () => false, 'get');\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends () => T[K]>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n encapsulation: 'get',\n): S;\n\n/**\n * This signature of MockInstance lets customize the setters of a property.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * const currentUserSetterSpy = jasmine.createSpy();\n * MockInstance(ArbitraryComponent, 'currentUser', currentUserSetterSpy, 'set');\n *\n * let relServiceEnabled: boolean;\n * MockInstance(ArbitraryService, 'enabled', value => relServiceEnabled = value, 'set');\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends (value: T[K]) => void>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n encapsulation: 'set',\n): S;\n\n/**\n * This signature of MockInstance lets customize the properties and methods.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, 'onInit', onInitSpy);\n * MockInstance(ArbitraryDirective, 'onDestroy', () => {});\n * MockInstance(ArbitraryService, 'currentDate', new Date());\n * MockInstance(ArbitraryModule, 'currentUser', mockUser);\n * ```\n */\nexport function MockInstance<T extends object, K extends keyof T, S extends T[K]>(\n instance: AnyType<T>,\n name: K,\n stub: S,\n): S;\n\n/**\n * This signature of MockInstance lets customize tokens with a callback.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(webSocketToken, () => mockWebSocket);\n * ```\n */\nexport function MockInstance<T>(\n declaration: InjectionToken<T>,\n init?: (instance: T | undefined, injector: Injector | undefined) => Partial<T>,\n): void;\n\n/**\n * This signature of MockInstance lets customize tokens with a callback.\n *\n * @deprecated please pass the callback directly instead of config.\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(webSocketToken, {\n * init: () => mockWebSocket,\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: InjectionToken<T>,\n config?: {\n init?: (instance: T | undefined, injector: Injector | undefined) => Partial<T>;\n },\n): void;\n\n/**\n * This signature of MockInstance lets customize the instances of mock classes with a callback.\n * You can return a shape or change the instance.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, (instance, injector) => {\n * instance.enabled = true;\n * instance.db = injector.get(DatabaseService);\n * });\n * MockInstance(ArbitraryDirective, () => {\n * return {\n * someProperty: true,\n * };\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: AnyType<T>,\n init?: (instance: T, injector: Injector | undefined) => void | Partial<T>,\n): void;\n\n/**\n * This signature of MockInstance lets customize the instances of mock classes with a callback.\n * You can return a shape or change the instance.\n *\n * @deprecated please pass the callback directly instead of config.\n * @see https://ng-mocks.sudo.eu/api/MockInstance\n *\n * ```ts\n * MockInstance(ArbitraryComponent, {\n * init: (instance, injector) => {\n * instance.enabled = true;\n * instance.db = injector.get(DatabaseService);\n * },\n * });\n * MockInstance(ArbitraryDirective, {\n * init: () => {\n * return {\n * someProperty: true,\n * };\n * },\n * });\n * ```\n */\nexport function MockInstance<T>(\n declaration: AnyType<T>,\n config?: {\n init?: (instance: T, injector: Injector | undefined) => void | Partial<T>;\n },\n): void;\n\nexport function MockInstance<T>(declaration: AnyDeclaration<T>, ...args: any[]) {\n funcImportExists(declaration, 'MockInstance');\n\n if (args.length > 0) {\n const { key, value, accessor } = parseMockInstanceArgs(args);\n\n return mockInstanceConfig(declaration, key, value, accessor);\n }\n\n const config = ngMocksUniverse.configInstance.get(declaration) || /* istanbul ignore next */ {};\n\n ngMocksUniverse.configInstance.set(declaration, {\n ...config,\n overloads: [],\n });\n\n // When we are calling MockInstance without a config we need to reset it from the checks too.\n for (let i = checkReset.length - 1; i >= 0; i -= 1) {\n if (checkReset[i][0] === declaration && checkReset[i][2] === currentStack) {\n checkReset.splice(i, 1);\n }\n }\n}\n\n/**\n * Interface describes how to configure scopes for MockInstance.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#customization-scopes\n */\n// istanbul ignore next: issue in istanbul https://github.com/istanbuljs/nyc/issues/1209\nexport namespace MockInstance {\n /**\n * Creates a scope which remembers all future customizations of MockInstance.\n * It allows to reset them afterwards.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#remember\n */\n export function remember() {\n ngMocksStack.stackPush();\n }\n\n /**\n * Resets all changes in the current scope.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#restore\n */\n export function restore() {\n ngMocksStack.stackPop();\n }\n\n /**\n * Creates a local scope in `beforeEach` and `afterEach`.\n * If `suite` has been passed, then `beforeAll` and `afterAll` are used.\n *\n * @see https://ng-mocks.sudo.eu/api/MockInstance#scope\n */\n export function scope(scope: 'all' | 'suite' | 'case' = 'case') {\n if (scope === 'all' || scope === 'suite') {\n beforeAll(MockInstance.remember);\n afterAll(MockInstance.restore);\n }\n if (scope === 'all' || scope === 'case') {\n beforeEach(MockInstance.remember);\n afterEach(MockInstance.restore);\n }\n }\n}\n\n/**\n * MockReset resets everything what has been configured in MockInstance.\n * Please consider using MockInstance.scope() instead,\n * which respects customizations between tests.\n *\n * https://ng-mocks.sudo.eu/api/MockInstance#resetting-customization\n * https://ng-mocks.sudo.eu/api/MockInstance#scope\n */\nexport function MockReset() {\n ngMocksUniverse.configInstance.clear();\n}\n","import funcGetName from '../common/func.get-name';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport default (checkReset: Array<[any, any, any?]>) => {\n const showError: string[] = [];\n\n // istanbul ignore next: because of the installed global scope switcher we cannot test this part\n while (checkReset.length > 0) {\n const [declaration, config] = checkReset.pop() || /* istanbul ignore next */ [];\n if (config === ngMocksUniverse.configInstance.get(declaration)) {\n showError.push(typeof declaration === 'function' ? funcGetName(declaration) : declaration);\n }\n }\n\n // istanbul ignore if: because of the installed global scope switcher we cannot test this part\n if (showError.length > 0) {\n const globalFlags = ngMocksUniverse.global.get('flags');\n const errorMessage = [\n `MockInstance: side effects have been detected (${showError.join(', ')}).`,\n 'Forgot to add MockInstance.scope() or to call MockInstance.restore()?',\n ].join(' ');\n if (globalFlags.onMockInstanceRestoreNeed === 'warn') {\n console.warn(errorMessage);\n } else if (globalFlags.onMockInstanceRestoreNeed === 'throw') {\n throw new Error(errorMessage);\n }\n }\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { AnyDeclaration } from './core.types';\nimport { isNgInjectionToken } from './func.is-ng-injection-token';\nimport { NgModuleWithProviders } from './func.is-ng-module-def-with-providers';\n\n/**\n * Returns how the class has been decorated.\n * It doesn't work well, because multi decorations and extensions of decorated classes can bring strange behavior.\n * Because of that, we simply take the last decoration as the expected, if the decorator is not Injectable.\n * Services have the lowest priority.\n *\n * @internal\n *\n * ```ts\n * getNgType(MockModule); // returns 'NgModule' | 'Component' | 'Directive' | 'Pipe' | 'Injectable'\n * ```\n */\nexport const getNgType = (\n declaration: AnyDeclaration<any> | NgModuleWithProviders<any>,\n): 'NgModule' | 'Component' | 'Directive' | 'Pipe' | 'Injectable' | undefined => {\n if (typeof declaration === 'string') {\n return undefined;\n }\n if (isNgInjectionToken(declaration)) {\n return 'Injectable';\n }\n\n const { decorators } = collectDeclarations(declaration);\n\n for (let index = decorators.length - 1; index >= 0; index -= 1) {\n if (decorators[index] === 'Injectable') {\n continue;\n }\n\n return decorators[index];\n }\n\n if (decorators.length > 0) {\n return 'Injectable';\n }\n\n return undefined;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport { getNgType } from './func.get-ng-type';\n\n/**\n * Checks whether a class has been decorated with the standalone flag.\n */\nexport function isStandalone(declaration: any): boolean {\n const type = getNgType(declaration);\n if (!type || type === 'Injectable') {\n return false;\n }\n\n return collectDeclarations(declaration)[type].standalone === true;\n}\n","import coreConfig from '../common/core.config';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nexport class MockBuilderStash {\n protected data: Record<keyof any, any> = {};\n\n public backup(): void {\n this.data = {\n builtDeclarations: ngMocksUniverse.builtDeclarations,\n builtProviders: ngMocksUniverse.builtProviders,\n cacheDeclarations: ngMocksUniverse.cacheDeclarations,\n cacheProviders: ngMocksUniverse.cacheProviders,\n config: ngMocksUniverse.config,\n configInstance: ngMocksUniverse.configInstance,\n flags: ngMocksUniverse.flags,\n touches: ngMocksUniverse.touches,\n };\n\n ngMocksUniverse.builtDeclarations = new Map();\n ngMocksUniverse.builtProviders = new Map();\n ngMocksUniverse.cacheDeclarations = new Map();\n ngMocksUniverse.cacheProviders = new Map();\n ngMocksUniverse.config = new Map();\n ngMocksUniverse.configInstance = new Map();\n ngMocksUniverse.flags = new Set(coreConfig.flags);\n ngMocksUniverse.touches = new Set();\n }\n\n public restore(): void {\n for (const key of Object.keys(this.data)) {\n (ngMocksUniverse as any)[key] = (this.data as any)[key];\n }\n }\n}\n","import { extractDependency, flatten, mapValues } from '../../common/core.helpers';\nimport funcGetProvider from '../../common/func.get-provider';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData, NgMeta } from './types';\n\nexport default (ngModule: NgMeta, { providerDef }: BuilderData): void => {\n // Adding requested providers to test bed.\n for (const provider of mapValues(providerDef)) {\n ngModule.providers.push(provider);\n }\n\n // Analyzing providers.\n for (const provider of flatten(ngModule.providers)) {\n const provide = funcGetProvider(provider);\n ngMocksUniverse.touches.add(provide);\n\n if (provide !== provider && (provider as any).deps) {\n extractDependency((provider as any).deps, ngMocksUniverse.config.get('ngMocksDeps'));\n }\n }\n};\n","import ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData } from './types';\n\nexport default (\n replaceDef: BuilderData['replaceDef'],\n defValue: BuilderData['defValue'],\n source: any,\n value: any,\n): boolean => {\n // no reason to touch mocks\n if (ngMocksUniverse.cacheDeclarations.has(value)) {\n return true;\n }\n\n // no customizations in replacements\n if (replaceDef.has(source) && value === defValue.get(source)) {\n return true;\n }\n\n return false;\n};\n","import * as module from '@angular/core';\n\nlet isIvy = false;\ntry {\n isIvy = module.ɵivyEnabled;\n} catch {\n // nothing to do\n}\n\nimport coreDefineProperty from '../../common/core.define-property';\nimport { extendClass } from '../../common/core.helpers';\nimport { NG_MOCKS } from '../../common/core.tokens';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport helperCreateClone from '../../mock-service/helper.create-clone';\n\nimport { NgMeta } from './types';\n\nclass EntryComponentsModule {\n protected originCFR: module.ComponentFactoryResolver['resolveComponentFactory'];\n\n public constructor(map: Map<any, any>, protected componentFactoryResolver: module.ComponentFactoryResolver) {\n this.originCFR = componentFactoryResolver.resolveComponentFactory;\n componentFactoryResolver.resolveComponentFactory = helperCreateClone(\n this.originCFR,\n undefined,\n undefined,\n (component: any, ...args: any[]) =>\n this.originCFR.apply(componentFactoryResolver, [map.get(component) ?? component, ...args] as any),\n );\n }\n}\ncoreDefineProperty(EntryComponentsModule, 'parameters', [[NG_MOCKS], [module.ComponentFactoryResolver]]);\n\nexport default (ngModule: NgMeta): void => {\n const entryComponents: any[] = [];\n for (const declaration of ngModule.declarations) {\n if (isNgDef(declaration, 'c')) {\n entryComponents.push(declaration);\n }\n }\n // the way to cause entryComponents to do its work\n const entryModule = extendClass(EntryComponentsModule);\n module.NgModule({\n // Ivy knows how to make any component an entry point,\n // but we still would like to patch resolveComponentFactory in order to provide mocks.\n entryComponents: isIvy ? [] : /* istanbul ignore next */ entryComponents,\n })(entryModule);\n ngModule.imports.push(entryModule);\n};\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"DOCUMENT\"]: () => __WEBPACK_EXTERNAL_MODULE__angular_common_d12e0fe1__.DOCUMENT });","import { DOCUMENT } from '@angular/common';\n\nimport coreConfig from '../../common/core.config';\nimport coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nconst skipResolution = (provide: any): boolean | undefined => {\n const resolution = ngMocksUniverse.getResolution(provide);\n if (resolution === 'keep' || resolution === 'exclude') {\n return true;\n }\n if (resolution === 'mock') {\n return false;\n }\n\n return undefined;\n};\n\nconst skipSystem = (provide: any): boolean => {\n if (!provide || provide === DOCUMENT || ngMocksUniverse.touches.has(provide)) {\n return true;\n }\n const skipByResolution = skipResolution(provide);\n if (skipByResolution !== undefined) {\n return skipByResolution;\n }\n\n if (typeof provide === 'function' && coreConfig.neverMockProvidedFunction.indexOf(provide.name) !== -1) {\n return true;\n }\n // istanbul ignore if because we mock BrowserModule\n if (isNgInjectionToken(provide) && coreConfig.neverMockToken.indexOf(provide.toString()) !== -1) {\n return true;\n }\n\n return false;\n};\n\n// Checks if we should avoid mocking of the provider.\nexport default (provide: any): boolean => {\n if (skipSystem(provide)) {\n return true;\n }\n\n // Empty providedIn or things for a platform have to be skipped.\n const providedIn = coreReflectProvidedIn(provide);\n const skip = !providedIn || providedIn === 'platform';\n if (typeof provide === 'function' && skip) {\n return true;\n }\n\n return false;\n};\n","import { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport skipDep from './skip-dep';\nimport { BuilderData } from './types';\n\nexport default (parameters: Set<any>, mockDef: BuilderData['mockDef'], def: any): void => {\n if (\n !skipDep(def) &&\n (mockDef.has(NG_MOCKS_ROOT_PROVIDERS) || !ngMocksUniverse.config.get('ngMocksDepsSkip').has(def))\n ) {\n parameters.add(def);\n }\n};\n","export default (provide: any, bucket: any[], touched: any[]): void => {\n if (typeof provide === 'function' && touched.indexOf(provide) === -1) {\n touched.push(provide);\n bucket.push(provide);\n }\n};\n","// Extracts dependency among flags of parameters.\n\nconst detectForwardRed = (provide: any): any => {\n if (typeof provide === 'function' && provide.__forward_ref__) {\n return provide();\n }\n\n return provide;\n};\n\nexport default (decorators?: any[]): any => {\n if (!decorators) {\n return;\n }\n\n let provide: any;\n for (const decorator of decorators) {\n if (decorator && typeof decorator === 'object' && decorator.token) {\n provide = decorator.token;\n }\n if (!provide && decorator && (typeof decorator !== 'object' || !decorator.ngMetadataName)) {\n provide = decorator;\n }\n }\n\n return detectForwardRed(provide);\n};\n","import coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (provide: any): void => {\n if (ngMocksUniverse.touches.has(provide)) {\n return;\n }\n\n const providedIn = coreReflectProvidedIn(provide);\n if (!providedIn) {\n return;\n }\n\n if (ngMocksUniverse.config.get('ngMocksDepsSkip').has(providedIn)) {\n ngMocksUniverse.config.get('ngMocksDepsSkip').add(provide);\n }\n};\n","import ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport skipDep from './skip-dep';\n\nexport default (provide: any): boolean => {\n if (skipDep(provide)) {\n return true;\n }\n\n return ngMocksUniverse.config.get('ngMocksDepsSkip').has(provide);\n};\n","import { flatten, mapValues } from '../../common/core.helpers';\nimport coreReflectProvidedIn from '../../common/core.reflect.provided-in';\nimport { AnyDeclaration } from '../../common/core.types';\nimport errorJestMock from '../../common/error.jest-mock';\nimport funcGetName from '../../common/func.get-name';\nimport funcGetProvider from '../../common/func.get-provider';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport { isStandalone } from '../../common/func.is-standalone';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport markProviders from '../../mock-module/mark-providers';\n\nimport initModule from './init-module';\nimport { BuilderData, NgMeta } from './types';\n\nconst skipDef = (def: any): boolean =>\n ngMocksUniverse.touches.has(def) || isNgDef(def) || isNgInjectionToken(def) || typeof def === 'string';\n\nconst handleDef = ({ imports, declarations, providers }: NgMeta, def: any, defProviders: Map<any, any>): void => {\n if (!skipDef(def)) {\n errorJestMock(def);\n }\n\n let touched = false;\n\n if (isNgDef(def, 'm')) {\n const extendedDef = initModule(def, defProviders);\n imports.push(extendedDef);\n touched = true;\n\n // adding providers to touches\n if (typeof extendedDef === 'object' && extendedDef.providers) {\n for (const provider of flatten(extendedDef.providers)) {\n ngMocksUniverse.touches.add(funcGetProvider(provider));\n }\n }\n }\n\n if (isNgDef(def, 'c') || isNgDef(def, 'd') || isNgDef(def, 'p')) {\n (isStandalone(def) ? imports : declarations).push(ngMocksUniverse.getBuildDeclaration(def));\n touched = true;\n }\n\n if (isNgDef(def, 'i') || !isNgDef(def)) {\n const mock = ngMocksUniverse.builtProviders.get(def);\n if (mock && typeof mock !== 'string' && isNgDef(mock, 't') === false) {\n providers.push(mock);\n touched = true;\n }\n }\n\n if (touched) {\n ngMocksUniverse.touches.add(def);\n }\n};\n\nexport default (\n { configDef, configDefault, keepDef, mockDef, replaceDef }: BuilderData,\n defProviders: Map<any, any>,\n): NgMeta => {\n const meta: NgMeta = { imports: [], declarations: [], providers: [] };\n\n const forgotten: AnyDeclaration<any>[] = [];\n\n // Adding suitable leftovers.\n for (const def of [...mapValues(mockDef), ...mapValues(keepDef), ...mapValues(replaceDef)]) {\n const configInstance = ngMocksUniverse.configInstance.get(def);\n const config = configDef.get(def);\n\n if (!config.dependency && config.export && !configInstance?.exported && (isNgDef(def, 'i') || !isNgDef(def))) {\n handleDef(meta, def, defProviders);\n markProviders([def]);\n } else if (!ngMocksUniverse.touches.has(def) && !config.dependency) {\n handleDef(meta, def, defProviders);\n } else if (\n config.dependency &&\n configDefault.dependency &&\n coreReflectProvidedIn(def) !== 'root' &&\n (typeof def !== 'object' || !(def as any).__ngMocksSkip)\n ) {\n forgotten.push(def);\n }\n }\n\n // Checking missing dependencies\n const globalFlags = ngMocksUniverse.global.get('flags');\n for (const def of forgotten) {\n if (ngMocksUniverse.touches.has(def)) {\n continue;\n }\n\n const errorMessage = [\n `MockBuilder has found a missing dependency: ${funcGetName(def)}.`,\n 'It means no module provides it.',\n 'Please, use the \"export\" flag if you want to add it explicitly.',\n 'https://ng-mocks.sudo.eu/api/MockBuilder#export-flag',\n ].join(' ');\n\n if (globalFlags.onMockBuilderMissingDependency === 'warn') {\n console.warn(errorMessage);\n } else if (globalFlags.onMockBuilderMissingDependency === 'throw') {\n throw new Error(errorMessage);\n }\n }\n\n return meta;\n};\n","import { ModuleWithProviders } from '@angular/core';\n\nimport { Type } from '../../common/core.types';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport { BuilderData } from './types';\n\nexport default (def: Type<any>, defProviders: BuilderData['defProviders']): Type<any> | ModuleWithProviders<any> => {\n const loModule = ngMocksUniverse.getBuildDeclaration(def);\n const loProviders = defProviders.has(def) ? defProviders.get(def) : undefined;\n\n return loProviders\n ? {\n ngModule: loModule,\n providers: loProviders,\n }\n : loModule;\n};\n","import collectDeclarations from '../resolve/collect-declarations';\n\nimport coreConfig from './core.config';\nimport { flatten } from './core.helpers';\nimport { AnyDeclaration } from './core.types';\nimport { getNgType } from './func.get-ng-type';\nimport funcGetProvider from './func.get-provider';\nimport { isNgModuleDefWithProviders } from './func.is-ng-module-def-with-providers';\n\nexport const funcExtractDeps = (def: any, result: Set<AnyDeclaration<any>>): Set<AnyDeclaration<any>> => {\n const meta = collectDeclarations(def);\n const type = getNgType(def);\n // istanbul ignore if\n if (!type) {\n return result;\n }\n\n const decorator = meta[type];\n for (const field of coreConfig.dependencies) {\n if (!decorator[field]) {\n continue;\n }\n\n for (const item of flatten(decorator[field])) {\n // istanbul ignore if: it is here for standalone things, however they don't support modules with providers.\n if (isNgModuleDefWithProviders(item)) {\n result.add(item.ngModule);\n } else {\n result.add(funcGetProvider(item));\n }\n }\n }\n\n return result;\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport { MockComponent } from '../../mock-component/mock-component';\nimport { MockDirective } from '../../mock-directive/mock-directive';\nimport { MockPipe } from '../../mock-pipe/mock-pipe';\n\nexport default (def: any, defValue: Map<any, any>): void => {\n if (isNgDef(def, 'c')) {\n ngMocksUniverse.builtDeclarations.set(def, MockComponent(def));\n }\n if (isNgDef(def, 'd')) {\n ngMocksUniverse.builtDeclarations.set(def, MockDirective(def));\n }\n if (isNgDef(def, 'p')) {\n const instance = defValue.get(def);\n ngMocksUniverse.builtDeclarations.set(\n def,\n typeof instance?.transform === 'function' ? MockPipe(def, instance.transform) : MockPipe(def),\n );\n }\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport mockHelperStub from '../../mock-helper/mock-helper.stub';\nimport helperUseFactory from '../../mock-service/helper.use-factory';\nimport mockProvider from '../../mock-service/mock-provider';\nimport { IMockBuilderConfigMock } from '../types';\n\nconst createInstance = (existing: any, params: any, config: IMockBuilderConfigMock): any => {\n if (config.precise) {\n return params;\n }\n\n return mockHelperStub(existing, params);\n};\n\nexport default (def: any, defValue: Map<any, any>): void => {\n if (isNgDef(def, 'i') && defValue.has(def)) {\n const config: IMockBuilderConfigMock = ngMocksUniverse.config.get(def);\n const instance = defValue.get(def);\n ngMocksUniverse.builtProviders.set(\n def,\n helperUseFactory(def, undefined, existing => createInstance(existing, instance, config)),\n );\n } else if (isNgDef(def, 'i')) {\n ngMocksUniverse.builtProviders.set(def, mockProvider(def, true));\n }\n\n if (!isNgDef(def) && defValue.has(def)) {\n const instance = defValue.get(def);\n ngMocksUniverse.builtProviders.set(\n def,\n helperUseFactory(def, undefined, () => instance),\n );\n } else if (!isNgDef(def)) {\n ngMocksUniverse.builtProviders.set(def, mockProvider(def, true));\n }\n};\n","import funcGetProvider from '../../common/func.get-provider';\n\nexport default (\n provider: any,\n): {\n multi: boolean;\n provide: any;\n} => {\n const provide = funcGetProvider(provider);\n const multi = provide !== provider && provider.multi;\n\n return {\n multi,\n provide,\n };\n};\n","import { Provider } from '@angular/core';\nimport { TestBed, TestBedStatic, TestModuleMetadata } from '@angular/core/testing';\n\nimport { flatten, mapValues } from '../common/core.helpers';\nimport { Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { isNgModuleDefWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport { MockBuilderStash } from './mock-builder-stash';\nimport addRequestedProviders from './promise/add-requested-providers';\nimport applyPlatformModules from './promise/apply-platform-modules';\nimport createNgMocksOverridesToken from './promise/create-ng-mocks-overrides-token';\nimport createNgMocksToken from './promise/create-ng-mocks-token';\nimport createNgMocksTouchesToken from './promise/create-ng-mocks-touches-token';\nimport handleEntryComponents from './promise/handle-entry-components';\nimport handleRootProviders from './promise/handle-root-providers';\nimport initNgModules from './promise/init-ng-modules';\nimport initUniverse from './promise/init-universe';\nimport parseMockArguments from './promise/parse-mock-arguments';\nimport parseProvider from './promise/parse-provider';\nimport { BuilderData } from './promise/types';\nimport { IMockBuilder, IMockBuilderConfig, IMockBuilderConfigAll, IMockBuilderResult } from './types';\n\nconst normaliseModule = (\n module: any,\n): {\n def: Type<any>;\n providers?: Provider[];\n} =>\n isNgModuleDefWithProviders(module)\n ? { def: module.ngModule, providers: module.providers }\n : { def: module, providers: undefined };\n\nconst generateProviderValue = (provider: any, existing: any, multi: boolean): any =>\n multi ? [...(Array.isArray(existing) ? existing : /* istanbul ignore next */ []), provider] : provider;\n\nconst defaultMock = {}; // simulating Symbol\n\nexport interface MockBuilderPromise {\n [Symbol.toStringTag]: 'Promise';\n}\n\nexport class MockBuilderPromise implements IMockBuilder {\n protected beforeCC: Set<(testBed: TestBedStatic) => void> = new Set();\n protected configDef: BuilderData['configDef'] = new Map();\n protected defProviders: BuilderData['defProviders'] = new Map();\n protected defValue: BuilderData['defValue'] = new Map();\n protected excludeDef: BuilderData['excludeDef'] = new Set();\n protected keepDef: BuilderData['keepDef'] = new Set();\n protected mockDef: BuilderData['mockDef'] = new Set();\n protected providerDef: BuilderData['providerDef'] = new Map();\n protected replaceDef: BuilderData['replaceDef'] = new Set();\n protected stash: MockBuilderStash = new MockBuilderStash();\n\n public constructor(protected configDefault: IMockBuilderConfigAll) {\n // istanbul ignore else\n if (typeof Symbol !== 'undefined') {\n (this as any)[Symbol.toStringTag] = 'Promise';\n }\n }\n\n public beforeCompileComponents(callback: (testBed: TestBedStatic) => void): this {\n this.beforeCC.add(callback);\n\n return this;\n }\n\n public build(): TestModuleMetadata {\n this.stash.backup();\n ngMocksUniverse.config.set('mockNgDefResolver', new Map());\n ngMocksUniverse.flags.add('hasRootModule');\n\n try {\n const params = this.combineParams();\n\n const ngModule = initNgModules(params, initUniverse(params));\n addRequestedProviders(ngModule, params);\n handleRootProviders(ngModule, params);\n handleEntryComponents(ngModule);\n applyPlatformModules();\n\n ngModule.providers.push(\n createNgMocksToken(),\n createNgMocksTouchesToken(),\n createNgMocksOverridesToken(this.replaceDef, this.defValue),\n );\n\n return ngModule;\n } finally {\n ngMocksUniverse.flags.delete('hasRootModule');\n ngMocksUniverse.config.delete('mockNgDefResolver');\n this.stash.restore();\n }\n }\n\n // istanbul ignore next\n public async catch(reject?: ((reason: any) => PromiseLike<never>) | undefined | null): Promise<IMockBuilderResult> {\n return this.then().catch(reject);\n }\n\n public exclude(def: any): this {\n this.wipe(def);\n this.excludeDef.add(def);\n\n return this;\n }\n\n // istanbul ignore next\n public async finally(callback?: (() => void) | null | undefined): Promise<IMockBuilderResult> {\n return this.then().finally(callback);\n }\n\n public keep(input: any, config?: IMockBuilderConfig): this {\n const { def, providers } = normaliseModule(input);\n\n const existing = this.keepDef.has(def) ? this.defProviders.get(def) : [];\n this.wipe(def);\n this.keepDef.add(def);\n\n // a magic to support modules with providers.\n if (providers) {\n this.defProviders.set(def, [...(existing || /* istanbul ignore next */ []), ...providers]);\n }\n\n this.setConfigDef(def, config);\n\n return this;\n }\n\n public mock(input: any, a1: any = defaultMock, a2?: any): this {\n const { def, providers } = normaliseModule(input);\n\n const { config, mock } = parseMockArguments(def, a1, a2, defaultMock);\n if (isNgDef(mock) && isNgDef(input) && !isNgDef(input, 't')) {\n throw new Error(\n [\n `MockBuilder.mock(${funcGetName(input)}) received a class when its shape is expected.`,\n 'Please try ngMocks.defaultMock instead.',\n ].join(' '),\n );\n }\n\n const existing = this.mockDef.has(def) ? this.defProviders.get(def) : [];\n this.wipe(def);\n this.mockDef.add(def);\n\n // a magic to support modules with providers.\n if (providers) {\n this.defProviders.set(def, [...(existing || /* istanbul ignore next */ []), ...providers]);\n }\n\n this.setDefValue(def, mock);\n this.setConfigDef(def, config);\n\n return this;\n }\n\n public provide(def: Provider): this {\n for (const provider of flatten(def)) {\n const { provide, multi } = parseProvider(provider);\n const existing = this.providerDef.has(provide) ? this.providerDef.get(provide) : [];\n this.providerDef.set(provide, generateProviderValue(provider, existing, multi));\n }\n\n return this;\n }\n\n public replace(source: Type<any>, destination: Type<any>, config?: IMockBuilderConfig): this {\n if (!isNgDef(destination) || !isNgDef(source) || isNgDef(destination, 'i') || isNgDef(source, 'i')) {\n throw new Error(\n 'Cannot replace the declaration, both have to be a Module, a Component, a Directive or a Pipe, for Providers use `.mock` or `.provide`',\n );\n }\n\n this.wipe(source);\n this.replaceDef.add(source);\n this.defValue.set(source, destination);\n this.setConfigDef(source, config);\n\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-thenable\n public async then<TResult1 = IMockBuilderResult>(\n fulfill?: ((value: IMockBuilderResult) => PromiseLike<TResult1>) | undefined | null,\n reject?: ((reason: any) => PromiseLike<any>) | undefined | null,\n ): Promise<TResult1> {\n const promise = new Promise((resolve: (value: IMockBuilderResult) => void): void => {\n const testBed: TestBedStatic = TestBed.configureTestingModule(this.build()) as never;\n for (const callback of mapValues(this.beforeCC)) {\n callback(testBed);\n }\n const testBedPromise = testBed.compileComponents();\n testBedPromise.then(() => {\n resolve({ testBed });\n });\n });\n\n return promise.then(fulfill, reject);\n }\n\n private combineParams(): BuilderData {\n return {\n configDef: this.configDef,\n configDefault: this.configDefault,\n defProviders: this.defProviders,\n defValue: this.defValue,\n excludeDef: this.excludeDef,\n keepDef: this.keepDef,\n mockDef: this.mockDef,\n providerDef: this.providerDef,\n replaceDef: this.replaceDef,\n };\n }\n\n private setConfigDef(def: any, config: any): void {\n if (config || !this.configDef.has(def)) {\n this.configDef.set(def, config ?? this.configDefault);\n }\n }\n\n private setDefValue(def: any, mock: any): void {\n if (mock !== defaultMock) {\n this.defValue.set(def, mock);\n } else {\n this.defValue.delete(def);\n }\n }\n\n private wipe(def: Type<any>): void {\n this.defProviders.delete(def);\n this.defValue.delete(def);\n this.excludeDef.delete(def);\n this.keepDef.delete(def);\n this.mockDef.delete(def);\n this.providerDef.delete(def);\n this.replaceDef.delete(def);\n }\n}\n","import equalVariables from './equal-variables';\n\nexport default (prototype: any, source: any): boolean => {\n if (prototype === source) {\n return true;\n }\n if ((typeof prototype === 'boolean' || typeof source === 'boolean') && prototype !== source) {\n return false;\n }\n\n return prototype.$implicit === source.$implicit && equalVariables(prototype.variables, source.variables);\n};\n","const objectsDiffer = (prototype: any, source: any): boolean => {\n const prototypeKeys = Object.keys(prototype);\n const sourceKeys = Object.keys(source);\n if (prototypeKeys.length !== sourceKeys.length) {\n return true;\n }\n for (const key of prototypeKeys) {\n if (prototype[key] !== source[key]) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (prototype: any, source: any): boolean => {\n if (prototype === source) {\n return true;\n }\n if ((prototype && !source) || (!prototype && source)) {\n return false;\n }\n if (objectsDiffer(prototype, source)) {\n return false;\n }\n\n return true;\n};\n","import equalRenderConfigs from './equal-render-configs';\n\nexport default (source: any, destination: any): boolean => {\n if (destination === source) {\n return true;\n }\n if (destination.dependency !== source.dependency) {\n return false;\n }\n if (destination.export !== source.export) {\n return false;\n }\n if (destination.exportAll !== source.exportAll) {\n return false;\n }\n if (!equalRenderConfigs(source.render, destination.render)) {\n return false;\n }\n\n return true;\n};\n","import equalRenderDefs from './equal-render-defs';\n\nconst objectsDiffer = (destination: any, source: any): boolean => {\n if (Object.keys(destination).length !== Object.keys(source).length) {\n return true;\n }\n for (const key of Object.keys(destination)) {\n if (!equalRenderDefs(destination[key], source[key])) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default (source: any, destination: any): boolean => {\n if (!equalRenderDefs(destination, source)) {\n return false;\n }\n if (typeof destination !== 'object' || typeof source !== 'object') {\n return true;\n }\n if (objectsDiffer(destination, source)) {\n return false;\n }\n\n return true;\n};\n","import { mapKeys } from '../../common/core.helpers';\n\nexport default (source: Map<any, any>, destination: Map<any, any>, compare = (a: any, b: any) => a === b): boolean => {\n if (!destination || destination.size !== source.size) {\n return false;\n }\n for (const value of mapKeys(source)) {\n if (!destination.has(value)) {\n return false;\n }\n if (!compare(destination.get(value), source.get(value))) {\n return false;\n }\n }\n\n return true;\n};\n","import { flatten } from '../../common/core.helpers';\n\nconst areEqualProviderDefs = (thisDef: any, prototypeDef: any, ...keys: string[]) => {\n for (const key of keys) {\n if (prototypeDef && thisDef && prototypeDef[key] && thisDef[key] && prototypeDef[key] === thisDef[key]) {\n return true;\n }\n }\n\n return prototypeDef === thisDef;\n};\n\nexport default (prototype: any, source: any): boolean => {\n if (Array.isArray(prototype) !== Array.isArray(source)) {\n return false;\n }\n\n const [prototypeDefs, thisDefs] = [flatten(prototype), flatten(source)];\n if (prototypeDefs.length !== thisDefs.length) {\n return false;\n }\n\n for (let index = 0; index < prototypeDefs.length; index += 1) {\n const [prototypeDef, thisDef] = [prototypeDefs[index], thisDefs[index]];\n\n if (prototypeDef && thisDef && prototypeDef.multi !== thisDef.multi) {\n return false;\n }\n if (areEqualProviderDefs(thisDef, prototypeDef, 'useValue', 'useClass', 'useFactory', 'useExisting')) {\n continue;\n }\n\n return false;\n }\n\n return true;\n};\n","import { mapValues } from '../../common/core.helpers';\n\nexport default (source: Set<any>, destination: Set<any>): boolean => {\n if (!destination || destination.size !== source.size) {\n return false;\n }\n for (const value of mapValues(source)) {\n if (!destination.has(value)) {\n return false;\n }\n }\n\n return true;\n};\n","import { TestModuleMetadata } from '@angular/core/testing';\n\nexport default (\n ngModule: TestModuleMetadata,\n): {\n declarations: any[];\n imports: any[];\n providers: any[];\n} => ({\n declarations: [...(ngModule.declarations || /* istanbul ignore next */ [])],\n imports: [...(ngModule.imports || /* istanbul ignore next */ [])],\n providers: [...(ngModule.providers || /* istanbul ignore next */ [])],\n});\n","import { TestBed, TestModuleMetadata } from '@angular/core/testing';\n\nimport { mapEntries, mapValues } from '../common/core.helpers';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\n\nimport { MockBuilderPromise } from './mock-builder.promise';\nimport areEqualConfigParams from './performance/are-equal-config-params';\nimport areEqualMaps from './performance/are-equal-maps';\nimport areEqualProviders from './performance/are-equal-providers';\nimport areEqualSets from './performance/are-equal-sets';\nimport getEmptyConfig from './performance/get-empty-config';\nimport requiredMetadata from './performance/required-metadata';\nimport { IMockBuilderResult } from './types';\n\nexport class MockBuilderPerformance extends MockBuilderPromise {\n public build(): TestModuleMetadata {\n const global = ngMocksUniverse.global;\n\n // avoiding influences on cache when users extend the testing module.\n if (global.has('builder:module') && global.has('builder:config') && this.equalsTo(global.get('builder:config'))) {\n return requiredMetadata(global.get('builder:module'));\n }\n\n // removal of cached promise in case of mismatch\n if (global.has('builder:module')) {\n global.delete(global.get('builder:module'));\n }\n\n const clone = this.cloneConfig();\n const ngModule = super.build();\n global.set('builder:config', clone);\n global.set('builder:module', ngModule);\n\n // avoiding influences on cache when users extend the testing module.\n return requiredMetadata(ngModule);\n }\n\n // eslint-disable-next-line unicorn/no-thenable\n public async then<TResult1 = IMockBuilderResult>(\n fulfill?: ((value: IMockBuilderResult) => PromiseLike<TResult1>) | undefined | null,\n reject?: ((reason: any) => PromiseLike<never>) | undefined | null,\n ): Promise<TResult1> {\n const global = ngMocksUniverse.global;\n\n const flags = global.has('bullet') && global.has('builder:module') && global.has('builder:config');\n if (flags && this.equalsTo(global.get('builder:config'))) {\n return global.get(global.get('builder:module')).then(fulfill, reject);\n }\n\n // we need to reset testing module in case if we are in bullet mode but current module does not match.\n if (global.has('bullet') && global.has('bullet:reset')) {\n console.warn('ngMocks.faster has zero effect due to changes in testing module between runs');\n global.delete('bullet');\n TestBed.resetTestingModule();\n global.set('bullet', true);\n }\n\n const promise = super.then(fulfill, reject);\n global.set(global.get('builder:module'), promise);\n\n return promise;\n }\n\n private cloneConfig() {\n const config = getEmptyConfig();\n\n mapValues(this.beforeCC, config.beforeCC);\n mapValues(this.excludeDef, config.excludeDef);\n mapValues(this.keepDef, config.keepDef);\n mapValues(this.mockDef, config.mockDef);\n mapValues(this.replaceDef, config.replaceDef);\n\n mapEntries(this.configDef, config.configDef);\n mapEntries(this.defProviders, config.defProviders);\n mapEntries(this.defValue, config.defValue);\n mapEntries(this.providerDef, config.providerDef);\n\n return config;\n }\n\n private equalsTo(prototype: Record<keyof any, any>): boolean {\n for (const key of ['beforeCC', 'keepDef', 'replaceDef', 'excludeDef', 'mockDef']) {\n if (!areEqualSets((this as any)[key], prototype[key])) {\n return false;\n }\n }\n for (const key of ['defValue']) {\n if (!areEqualMaps((this as any)[key], prototype[key])) {\n return false;\n }\n }\n for (const key of ['providerDef', 'defProviders']) {\n if (!areEqualMaps((this as any)[key], prototype[key], areEqualProviders)) {\n return false;\n }\n }\n\n return areEqualMaps(this.configDef, prototype.configDef, areEqualConfigParams);\n }\n}\n","import { mapEntries, mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport initExcludeDef from './init-exclude-def';\nimport initKeepDef from './init-keep-def';\nimport initMockDeclarations from './init-mock-declarations';\nimport initModules from './init-modules';\nimport initReplaceDef from './init-replace-def';\nimport { BuilderData } from './types';\n\nexport default ({\n configDef,\n defProviders,\n defValue,\n excludeDef,\n keepDef,\n mockDef,\n replaceDef,\n}: BuilderData): Map<any, any> => {\n ngMocksUniverse.flags.add('cachePipe');\n\n // collecting multi flags of providers.\n ngMocksUniverse.config.set('ngMocksMulti', new Set());\n // collecting all deps of providers.\n ngMocksUniverse.config.set('ngMocksDeps', new Set());\n // collecting all declarations of kept modules.\n ngMocksUniverse.config.set('ngMocksDepsSkip', new Set());\n // flags to understand how to mock nested declarations.\n ngMocksUniverse.config.set('ngMocksDepsResolution', new Map());\n\n const dependencies = initKeepDef(keepDef, configDef);\n for (const dependency of mapValues(dependencies)) {\n // MockBuilder has instruction about the dependency, skipping it.\n if (configDef.has(dependency)) {\n continue;\n }\n\n // Checking global configuration for the dependency.\n const resolution = ngMocksUniverse.getResolution(dependency);\n if (resolution === 'replace') {\n replaceDef.add(dependency);\n defValue.set(dependency, ngMocksUniverse.getBuildDeclaration(dependency));\n } else if (resolution === 'keep') {\n keepDef.add(dependency);\n } else if (resolution === 'exclude') {\n excludeDef.add(dependency);\n } else {\n mockDef.add(dependency);\n }\n\n configDef.set(dependency, {\n dependency: true,\n });\n }\n\n for (const [k, v] of mapEntries(configDef)) {\n ngMocksUniverse.config.set(k, {\n ...ngMocksUniverse.getConfigMock().get(k),\n ...v,\n });\n }\n\n initReplaceDef(replaceDef, defValue);\n initExcludeDef(excludeDef);\n initMockDeclarations(mockDef, defValue);\n\n return initModules(keepDef, mockDef, replaceDef, defProviders);\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { funcExtractDeps } from '../../common/func.extract-deps';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (keepDef: Set<any>, configDef: Map<any, any>): Set<any> => {\n const dependencies = new Set<any>();\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const builtProviders = ngMocksUniverse.builtProviders;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(keepDef)) {\n builtDeclarations.set(def, def);\n builtProviders.set(def, def);\n resolutions.set(def, 'keep');\n\n const config = configDef.get(def);\n if (config.shallow) {\n funcExtractDeps(def, dependencies);\n }\n }\n\n return dependencies;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (replaceDef: Set<any>, defValue: Map<any, any>): void => {\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(replaceDef)) {\n builtDeclarations.set(def, defValue.get(def));\n resolutions.set(def, 'replace');\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (excludeDef: Set<any>): void => {\n const builtDeclarations = ngMocksUniverse.builtDeclarations;\n const builtProviders = ngMocksUniverse.builtProviders;\n const resolutions = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(excludeDef)) {\n builtDeclarations.set(def, null);\n builtProviders.set(def, null);\n resolutions.set(def, 'exclude');\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport tryMockDeclaration from './try-mock-declaration';\nimport tryMockProvider from './try-mock-provider';\n\nexport default (mockDef: Set<any>, defValue: Map<any, any>): void => {\n const resolutions: Map<any, string> = ngMocksUniverse.config.get('ngMocksDepsResolution');\n for (const def of mapValues(mockDef)) {\n resolutions.set(def, 'mock');\n tryMockDeclaration(def, defValue);\n tryMockProvider(def, defValue);\n\n ngMocksUniverse.touches.delete(def);\n }\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { isNgDef } from '../../common/func.is-ng-def';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport { MockModule } from '../../mock-module/mock-module';\nimport mockNgDef from '../../mock-module/mock-ng-def';\nimport collectDeclarations from '../../resolve/collect-declarations';\n\nexport default (\n keepDef: Set<any>,\n mockDef: Set<any>,\n replaceDef: Set<any>,\n defProviders: Map<any, any>,\n): Map<any, any> => {\n const loProviders = new Map();\n\n for (const def of [...mapValues(keepDef), ...mapValues(mockDef), ...mapValues(replaceDef)]) {\n const meta = collectDeclarations(def);\n const providers = [\n ...(defProviders.get(def) ?? []),\n ...(meta.Component?.providers ?? []),\n ...(meta.Directive?.providers ?? []),\n ];\n\n const deleteTouch = !ngMocksUniverse.touches.has(def);\n if (!mockDef.has(def)) {\n ngMocksUniverse.flags.add('skipMock');\n }\n\n const isModule = isNgDef(def, 'm');\n if (providers.length > 0) {\n const [, loDef] = mockNgDef({ providers, skipMarkProviders: !isModule });\n loProviders.set(def, loDef.providers);\n }\n if (isModule) {\n ngMocksUniverse.builtDeclarations.set(def, MockModule(def));\n }\n\n ngMocksUniverse.flags.delete('skipMock');\n if (deleteTouch) {\n ngMocksUniverse.touches.delete(def);\n }\n }\n\n return loProviders;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport { isNgInjectionToken } from '../../common/func.is-ng-injection-token';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\nimport helperResolveProvider from '../../mock-service/helper.resolve-provider';\nimport helperUseFactory from '../../mock-service/helper.use-factory';\n\nimport getRootProviderParameters from './get-root-provider-parameters';\nimport { BuilderData, NgMeta } from './types';\n\n// Mocking root providers.\nexport default (ngModule: NgMeta, { keepDef, mockDef }: BuilderData): void => {\n // Adding missed providers.\n const parameters = keepDef.has(NG_MOCKS_ROOT_PROVIDERS) ? new Set() : getRootProviderParameters(mockDef);\n if (parameters.size > 0) {\n const parametersMap = new Map();\n for (const parameter of mapValues(parameters)) {\n const mock = helperResolveProvider(parameter, parametersMap);\n if (mock) {\n ngModule.providers.push(mock);\n } else if (isNgInjectionToken(parameter)) {\n const multi =\n ngMocksUniverse.config.has('ngMocksMulti') && ngMocksUniverse.config.get('ngMocksMulti').has(parameter);\n ngModule.providers.push(helperUseFactory(parameter, () => (multi ? [] : undefined)));\n }\n }\n }\n};\n","import coreReflectParametersResolve from '../../common/core.reflect.parameters-resolve';\nimport { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport addDefToRootProviderParameters from './add-def-to-root-provider-parameters';\nimport checkRootProviderDependency from './check-root-provider-dependency';\nimport extractDep from './extract-dep';\nimport getRootProvidersData from './get-root-providers-data';\nimport handleProvidedInDependency from './handle-provided-in-dependency';\nimport skipRootProviderDependency from './skip-root-provider-dependency';\nimport { BuilderData } from './types';\n\nexport default (mockDef: BuilderData['mockDef']): Set<any> => {\n const parameters = new Set();\n const { buckets, touched } = getRootProvidersData();\n\n for (const bucket of buckets) {\n for (const def of bucket) {\n addDefToRootProviderParameters(parameters, mockDef, def);\n\n for (const decorators of coreReflectParametersResolve(def)) {\n const provide: any = extractDep(decorators);\n handleProvidedInDependency(provide);\n if (skipRootProviderDependency(provide)) {\n continue;\n }\n checkRootProviderDependency(provide, touched, bucket);\n if (mockDef.has(NG_MOCKS_ROOT_PROVIDERS) || !ngMocksUniverse.config.get('ngMocksDepsSkip').has(def)) {\n parameters.add(provide);\n } else {\n ngMocksUniverse.config.get('ngMocksDepsSkip').add(provide);\n }\n }\n }\n }\n\n return parameters;\n};\n","import { mapValues } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): {\n buckets: any[];\n touched: any[];\n} => {\n // We need buckets here to process first all depsSkip, then deps and only after that all other defs.\n const buckets: any[] = [\n mapValues(ngMocksUniverse.config.get('ngMocksDepsSkip')),\n mapValues(ngMocksUniverse.config.get('ngMocksDeps')),\n mapValues(ngMocksUniverse.touches),\n ];\n\n // Also, we need to track what has been touched to check params recursively, but avoiding duplicates.\n const touched: any[] = [].concat(...buckets);\n\n return {\n buckets,\n touched,\n };\n};\n","import { getTestBed } from '@angular/core/testing';\n\nimport { flatten } from '../../common/core.helpers';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default () => {\n const testBed = getTestBed();\n // istanbul ignore else\n if (testBed.ngModule) {\n for (const def of flatten<any>(testBed.ngModule)) {\n // istanbul ignore if\n if (typeof def === 'object' && /* istanbul ignore next */ def.ngModule) {\n ngMocksUniverse.touches.add(def.ngModule);\n } else {\n ngMocksUniverse.touches.add(def);\n }\n }\n }\n};\n","import { ValueProvider } from '@angular/core';\n\nimport { mapEntries } from '../../common/core.helpers';\nimport { NG_MOCKS } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): ValueProvider => {\n const mocks = new Map();\n for (const [key, value] of [\n ...mapEntries(ngMocksUniverse.builtProviders),\n ...mapEntries(ngMocksUniverse.builtDeclarations),\n ...mapEntries(ngMocksUniverse.cacheDeclarations),\n ...mapEntries(ngMocksUniverse.cacheProviders),\n ]) {\n if (mocks.has(key)) {\n continue;\n }\n mocks.set(key, value);\n }\n\n return {\n provide: NG_MOCKS,\n useValue: mocks,\n };\n};\n","import { ValueProvider } from '@angular/core';\n\nimport { mapValues } from '../../common/core.helpers';\nimport { NG_MOCKS_TOUCHES } from '../../common/core.tokens';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nexport default (): ValueProvider => {\n // Redefining providers for kept declarations.\n const touches = new Set();\n for (const proto of mapValues(ngMocksUniverse.touches)) {\n const source: any = proto;\n let value = ngMocksUniverse.getBuildDeclaration(source);\n\n // kept declarations should be based on their source.\n if (value === undefined) {\n value = source;\n }\n\n touches.add(source);\n touches.add(value);\n }\n\n return {\n provide: NG_MOCKS_TOUCHES,\n useValue: touches,\n };\n};\n","import { ValueProvider } from '@angular/core';\nimport { MetadataOverride } from '@angular/core/testing';\n\nimport { mapValues } from '../../common/core.helpers';\nimport coreReflectMeta from '../../common/core.reflect.meta';\nimport { NG_MOCKS_OVERRIDES } from '../../common/core.tokens';\nimport { Type } from '../../common/core.types';\nimport ngMocksUniverse from '../../common/ng-mocks-universe';\n\nimport getOverrideDef from './get-override-def';\nimport skipOverride from './skip-override';\n\nexport default (replaceDef: Set<any>, defValue: Map<any, any>): ValueProvider => {\n const overrides: Map<Type<any>, [MetadataOverride<any>, MetadataOverride<any>]> = new Map();\n for (const proto of mapValues(ngMocksUniverse.touches)) {\n const source: any = proto;\n const value = ngMocksUniverse.getBuildDeclaration(source) || source;\n if (skipOverride(replaceDef, defValue, source, value)) {\n continue;\n }\n\n const original = coreReflectMeta(value);\n const override = getOverrideDef(original);\n if (!override) {\n continue;\n }\n\n // We need to delete standalone, because Angular was too lazy to check whether it has been really changed.\n const patchedOriginal: Partial<typeof original> = {};\n for (const key of Object.keys(override)) {\n patchedOriginal[key] = original[key];\n }\n\n overrides.set(value, [{ set: override }, { set: patchedOriginal }]);\n }\n\n return {\n provide: NG_MOCKS_OVERRIDES,\n useValue: overrides,\n };\n};\n","import { isNgDef } from '../../common/func.is-ng-def';\n\nexport default (\n def: any,\n a1: any,\n a2: any,\n defaultMockValue: any,\n): {\n config: any;\n mock: any;\n} => {\n let mock: any = def === a1 ? defaultMockValue : a1;\n let config: any = a2 ?? (a1 !== defaultMockValue && typeof a1 === 'object' ? a1 : undefined);\n if (isNgDef(def, 'p') && typeof a1 === 'function' && a1 !== def && !isNgDef(a1, 'p')) {\n mock = {\n transform: a1,\n };\n config = a2;\n } else if (isNgDef(def, 'i') || !isNgDef(def)) {\n config = a2;\n }\n mock = mock === config ? defaultMockValue : mock;\n\n return {\n config,\n mock,\n };\n};\n","export default () => ({\n beforeCC: new Set(),\n configDef: new Map(),\n defProviders: new Map(),\n defValue: new Map(),\n excludeDef: new Set(),\n keepDef: new Set(),\n mockDef: new Set(),\n providerDef: new Map(),\n replaceDef: new Set(),\n});\n","import { flatten } from '../common/core.helpers';\nimport { AnyDeclaration } from '../common/core.types';\nimport { NgModuleWithProviders } from '../common/func.is-ng-module-def-with-providers';\nimport { isStandalone } from '../common/func.is-standalone';\n\nimport { MockBuilderPerformance } from './mock-builder.performance';\nimport { IMockBuilder } from './types';\n\nexport type MockBuilderParam = string | AnyDeclaration<any> | NgModuleWithProviders;\n\n/**\n * MockBuilder provides reach and simple interfaces of chain functions\n * to build desired mock environment for tests.\n *\n * @see https://ng-mocks.sudo.eu/api/MockBuilder\n */\nexport function MockBuilder(\n keepDeclaration?: MockBuilderParam | MockBuilderParam[] | null | undefined,\n itsModuleToMock?: MockBuilderParam | MockBuilderParam[] | null | undefined,\n): IMockBuilder;\n\nexport function MockBuilder(...args: Array<MockBuilderParam | MockBuilderParam[] | null | undefined>): IMockBuilder {\n const [keepDeclaration, itsModuleToMock] = args;\n\n const instance = new MockBuilderPerformance(args.length < 2 ? { export: true } : { dependency: true });\n\n if (keepDeclaration) {\n for (const declaration of flatten(keepDeclaration)) {\n instance.keep(declaration, {\n export: true,\n shallow: isStandalone(declaration),\n });\n }\n }\n if (itsModuleToMock) {\n for (const declaration of flatten(itsModuleToMock)) {\n instance.mock(declaration, declaration, {\n export: true,\n exportAll: true,\n });\n }\n }\n\n return instance;\n}\n","import { Type } from '../common/core.types';\nimport errorJestMock from '../common/error.jest-mock';\nimport funcGetName from '../common/func.get-name';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport { MockComponent } from '../mock-component/mock-component';\nimport { MockedComponent } from '../mock-component/types';\nimport { MockDirective } from '../mock-directive/mock-directive';\nimport { MockedDirective } from '../mock-directive/types';\nimport { MockPipe } from '../mock-pipe/mock-pipe';\nimport { MockedPipe } from '../mock-pipe/types';\n\n/**\n * MockDeclarations creates an array of mock declaration classes out of declarations passed as parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: MockDeclarations(\n * Dep1Component,\n * Dep2Directive,\n * Dep3Pipe,\n * ),\n * });\n * ```\n */\nexport function MockDeclarations(...declarations: Array<Type<any>>): Array<Type<any>> {\n return declarations.map(MockDeclaration);\n}\n\n/**\n * MockDeclaration creates a mock declaration class out of an arbitrary declaration.\n *\n * @see https://ng-mocks.sudo.eu/api/MockComponent\n * @see https://ng-mocks.sudo.eu/api/MockDirective\n * @see https://ng-mocks.sudo.eu/api/MockPipe\n *\n * ```ts\n * TestBed.configureTestingModule({\n * declarations: [\n * MockDeclaration(Dep1Component),\n * MockDeclaration(Dep2Directive),\n * MockDeclaration(Dep3Pipe),\n * ],\n * });\n * ```\n */\nexport function MockDeclaration<T>(declaration: Type<T>): Type<MockedPipe<T> | MockedDirective<T> | MockedComponent<T>>;\n\nexport function MockDeclaration<T>(\n declaration: Type<T>,\n): Type<MockedPipe<T> | MockedDirective<T> | MockedComponent<T>> {\n if (isNgDef(declaration, 'p')) {\n return MockPipe(declaration);\n }\n if (isNgDef(declaration, 'c')) {\n return MockComponent(declaration);\n }\n if (isNgDef(declaration, 'd')) {\n return MockDirective(declaration);\n }\n\n errorJestMock(declaration);\n throw new Error(\n [\n 'MockDeclaration does not know how to mock',\n typeof declaration === 'function' ? funcGetName(declaration) : declaration,\n ].join(' '),\n );\n}\n","import coreReflectPipeResolve from '../common/core.reflect.pipe-resolve';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nconst generateTemplateAttrWrap = (prop: string, type: 'i' | 'o') => (type === 'i' ? `[${prop}]` : `(${prop})`);\n\nconst generateTemplateAttrWithParams = (prop: string, type: 'i' | 'o'): string => {\n let tpl = ` ${generateTemplateAttrWrap(prop, type)}=\"`;\n tpl += type === 'i' ? prop : `__ngMocksOutput('${prop}', $event)`;\n tpl += '\"';\n\n return tpl;\n};\n\nconst generateTemplateAttr = (bindings: null | undefined | any[], attr: any, type: 'i' | 'o') => {\n // unprovided params for inputs should render empty placeholders\n if (!bindings && type === 'o') {\n return '';\n }\n\n let mockTemplate = '';\n const keys = bindings ?? attr;\n for (const definition of attr) {\n const [property, alias] = definition.split(': ');\n mockTemplate +=\n keys.indexOf(alias || property) === -1 ? '' : generateTemplateAttrWithParams(alias || property, type);\n }\n\n return mockTemplate;\n};\n\nexport default (declaration: any, { selector, bindings, inputs, outputs }: any): string => {\n let mockTemplate = '';\n\n // istanbul ignore else\n if (typeof declaration === 'string') {\n mockTemplate = declaration;\n } else if (isNgDef(declaration, 'p') && bindings && bindings.indexOf('$implicit') !== -1) {\n mockTemplate = `{{ $implicit | ${coreReflectPipeResolve(declaration).name} }}`;\n } else if (selector) {\n mockTemplate += `<${selector}`;\n mockTemplate += generateTemplateAttr(bindings, inputs, 'i');\n mockTemplate += generateTemplateAttr(bindings, outputs, 'o');\n mockTemplate += `></${selector}>`;\n }\n\n return mockTemplate;\n};\n","import { Component, Directive } from '@angular/core';\n\nimport coreConfig from '../common/core.config';\nimport coreDefineProperty from '../common/core.define-property';\nimport { Type } from '../common/core.types';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\n\nimport funcGenerateTemplate from './func.generate-template';\n\nconst generateWrapperOutput =\n (instance: any) =>\n (prop: keyof any, event: any): void => {\n if (typeof instance[prop] === 'function') {\n return instance[prop](event);\n }\n if (instance[prop] && typeof instance[prop] === 'object' && typeof instance[prop].emit === 'function') {\n return instance[prop].emit(event);\n }\n if (instance[prop] && typeof instance[prop] === 'object' && typeof instance[prop].next === 'function') {\n return instance[prop].next(event);\n }\n\n instance[prop] = event;\n };\n\nconst generateWrapperComponent = ({ bindings, options, inputs }: any) => {\n class MockRenderComponent {\n public constructor() {\n coreDefineProperty(this, '__ngMocksOutput', generateWrapperOutput(this));\n\n if (!bindings) {\n for (const input of inputs || []) {\n let value: any = null;\n helperDefinePropertyDescriptor(this, input, {\n get: () => value,\n set: (newValue: any) => (value = newValue),\n });\n }\n }\n }\n }\n Component(options)(MockRenderComponent);\n\n return MockRenderComponent;\n};\n\nconst generateWrapperDirective = ({ selector, options }: any) => {\n class MockRenderDirective {}\n Directive({\n selector,\n providers: options.providers,\n })(MockRenderDirective);\n\n return MockRenderDirective;\n};\n\nconst getCache = () => {\n const caches: Array<Type<any> & Record<'cacheKey', any[]>> = ngMocksUniverse.config.get('MockRenderCaches') ?? [];\n if (caches.length === 0) {\n ngMocksUniverse.config.set('MockRenderCaches', caches);\n }\n\n return caches;\n};\n\nconst checkCache = (caches: Array<Type<any> & Record<'cacheKey', any[]>>, cacheKey: any[]): undefined | Type<any> => {\n for (const cache of caches) {\n if (cache.cacheKey.length !== cacheKey.length) {\n continue;\n }\n let isValid = true;\n for (let i = 0; i < cacheKey.length; i += 1) {\n if (cache.cacheKey[i] !== cacheKey[i]) {\n isValid = false;\n break;\n }\n }\n if (isValid) {\n return cache;\n }\n }\n\n return undefined;\n};\n\nexport default (\n template: any,\n meta: Directive,\n bindings: undefined | null | any[],\n flags: Record<keyof any, any>,\n): Type<any> => {\n const caches = getCache();\n\n // nulls help to detect defaults\n const cacheKey = [\n template,\n ...(bindings ?? [null]),\n ...(flags.providers ?? [null]),\n ...(flags.viewProviders ?? [null]),\n ];\n let ctor = checkCache(caches, cacheKey);\n if (ctor) {\n return ctor;\n }\n\n const mockTemplate = funcGenerateTemplate(template, { ...meta, bindings });\n const options: Component = {\n providers: flags.providers,\n selector: 'mock-render',\n template: mockTemplate,\n viewProviders: flags.viewProviders,\n };\n\n ctor = generateWrapperComponent({ ...meta, bindings, options });\n coreDefineProperty(ctor, 'cacheKey', cacheKey);\n coreDefineProperty(ctor, 'tpl', mockTemplate);\n\n if (meta.selector && options.providers) {\n const dir = generateWrapperDirective({ ...meta, bindings, options });\n coreDefineProperty(ctor, 'providers', dir);\n }\n\n caches.unshift(ctor as any);\n caches.splice(ngMocksUniverse.global.get('mockRenderCacheSize') ?? coreConfig.mockRenderCacheSize);\n\n return ctor;\n};\n","import coreDefineProperty from '../common/core.define-property';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\nimport helperMockService from '../mock-service/helper.mock-service';\n\nconst createPropertyGet = (key: keyof any & string, reader: Record<keyof any, any>, source: Record<keyof any, any>) => {\n const handler = () => {\n if (typeof source[key] === 'function') {\n if (reader[`__ngMocks_${key}__origin`] !== source[key]) {\n const clone = helperMockService.createClone(source[key], reader, source);\n coreDefineProperty(reader, `__ngMocks_${key}`, clone);\n coreDefineProperty(reader, `__ngMocks_${key}__origin`, source[key]);\n }\n\n return reader[`__ngMocks_${key}`];\n }\n\n return source[key];\n };\n coreDefineProperty(handler, '__ngMocksProxy', true);\n\n return handler;\n};\n\nconst createPropertySet = (key: keyof any & string, reader: Record<keyof any, any>, source: Record<keyof any, any>) => {\n const handler = (newValue: any) => {\n if (reader[`__ngMocks_${key}`]) {\n reader[`__ngMocks_${key}`] = undefined;\n }\n if (reader[`__ngMocks_${key}__origin`]) {\n reader[`__ngMocks_${key}__origin`] = undefined;\n }\n source[key] = newValue;\n };\n coreDefineProperty(handler, '__ngMocksProxy', true);\n\n return handler;\n};\n\nconst extractAllKeys = (instance: object) => [\n ...helperMockService.extractPropertiesFromPrototype(Object.getPrototypeOf(instance)),\n ...helperMockService.extractMethodsFromPrototype(Object.getPrototypeOf(instance)),\n ...Object.keys(instance),\n];\n\nconst extractOwnKeys = (instance: object) => [...Object.getOwnPropertyNames(instance), ...Object.keys(instance)];\n\nexport default (\n reader: Record<keyof any, any>,\n source: Record<keyof any, any> | undefined,\n extra: string[],\n force = false,\n): void => {\n if (!source) {\n return;\n }\n coreDefineProperty(reader, '__ngMocks__source', source);\n const exists = extractOwnKeys(reader);\n const fields = [...extractAllKeys(source), ...extra];\n for (const key of fields) {\n if (!force && exists.indexOf(key) !== -1) {\n continue;\n }\n helperDefinePropertyDescriptor(reader, key, {\n get: createPropertyGet(key, reader, source),\n set: createPropertySet(key, reader, source),\n });\n exists.push(key);\n }\n};\n","import { DebugElement, Directive, InjectionToken } from '@angular/core';\nimport { getTestBed, TestBed } from '@angular/core/testing';\n\nimport coreDefineProperty from '../common/core.define-property';\nimport { getInjection } from '../common/core.helpers';\nimport { AnyDeclaration, AnyType, Type } from '../common/core.types';\nimport funcGetName from '../common/func.get-name';\nimport funcImportExists from '../common/func.import-exists';\nimport { isNgDef } from '../common/func.is-ng-def';\nimport ngMocksStack from '../common/ng-mocks-stack';\nimport ngMocksUniverse from '../common/ng-mocks-universe';\nimport { ngMocks } from '../mock-helper/mock-helper';\nimport helperDefinePropertyDescriptor from '../mock-service/helper.define-property-descriptor';\nimport { MockService } from '../mock-service/mock-service';\n\nimport funcCreateWrapper from './func.create-wrapper';\nimport funcInstallPropReader from './func.install-prop-reader';\nimport funcReflectTemplate from './func.reflect-template';\nimport { IMockRenderFactoryOptions, MockedComponentFixture } from './types';\n\nexport interface MockRenderFactory<C = any, F extends keyof any = keyof C> {\n bindings: keyof F;\n configureTestBed: () => void;\n declaration: AnyType<never>;\n <T extends Record<F, any>>(params?: Partial<T>, detectChanges?: boolean): MockedComponentFixture<C, T>;\n}\n\nconst renderDeclaration = (fixture: any, template: any, params: any): void => {\n fixture.point =\n fixture.debugElement.children[0] &&\n fixture.debugElement.children[0].nativeElement.nodeName !== '#text' &&\n fixture.debugElement.children[0].nativeElement.nodeName !== '#comment'\n ? fixture.debugElement.children[0]\n : fixture.debugElement;\n if (isNgDef(template, 'd')) {\n helperDefinePropertyDescriptor(fixture.point, 'componentInstance', {\n get: () => ngMocks.get(fixture.point, template),\n });\n } else if (isNgDef(template, 'p')) {\n helperDefinePropertyDescriptor(fixture.point, 'componentInstance', {\n get: () => ngMocks.findInstance(fixture.point, template),\n });\n }\n tryWhen(!params, () => funcInstallPropReader(fixture.componentInstance, fixture.point.componentInstance, []));\n};\n\nconst renderInjection = (fixture: any, template: any, params: any): void => {\n let instance: any;\n try {\n instance = getInjection(template);\n } catch (error) {\n if (isNgDef(template, 'p')) {\n throw new Error(\n [\n `Cannot render ${funcGetName(template)}.`,\n 'Did you forget to set $implicit param, or add the pipe to providers?',\n 'https://ng-mocks.sudo.eu/guides/pipe',\n ].join(' '),\n );\n }\n throw error;\n }\n if (params) {\n ngMocks.stub(instance, params);\n }\n fixture.point = MockService(DebugElement, {\n childNodes: [],\n children: [],\n componentInstance: instance,\n nativeElement: MockService(HTMLElement),\n });\n funcInstallPropReader(fixture.componentInstance, fixture.point.componentInstance, [], true);\n};\n\nconst tryWhen = (flag: boolean, callback: () => void) => {\n if (!flag) {\n return;\n }\n try {\n // ivy throws Error: Expecting instance of DOM Element\n callback();\n } catch {\n // nothing to do\n }\n};\n\nconst fixtureMessage = [\n 'Forgot to flush TestBed?',\n 'MockRender cannot be used without a reset after TestBed.get / TestBed.inject / TestBed.createComponent and another MockRender in the same test.',\n 'If you want to mock a service before rendering, consider usage of MockRenderFactory or MockInstance.',\n 'To flush TestBed, add a call of ngMocks.flushTestBed() before the call of MockRender, or pass `reset: true` to MockRender options.',\n].join(' ');\n\nconst handleFixtureError = (e: any) => {\n const error = new Error(fixtureMessage);\n coreDefineProperty(error, 'parent', e);\n throw error;\n};\n\nconst flushTestBed = (flags: Record<string, any>): void => {\n const globalFlags = ngMocksUniverse.global.get('flags');\n const testBed: any = getTestBed();\n if (flags.reset || (!testBed._instantiated && !testBed._testModuleRef)) {\n ngMocks.flushTestBed();\n } else if (globalFlags.onTestBedFlushNeed !== 'throw' && (testBed._instantiated || testBed._testModuleRef)) {\n if (globalFlags.onTestBedFlushNeed === 'warn') {\n console.warn(fixtureMessage);\n }\n ngMocks.flushTestBed();\n }\n};\n\nconst generateFactoryInstall =\n (ctor: AnyType<any> & { providers?: AnyType<any> }, options: IMockRenderFactoryOptions) => () => {\n const testBed: TestBed & {\n _compiler?: {\n declarations?: Array<AnyType<any>>;\n };\n _declarations?: Array<AnyType<any>>;\n declarations?: Array<AnyType<any>>;\n } = getTestBed();\n // istanbul ignore next\n const existing = testBed._compiler?.declarations || testBed.declarations || testBed._declarations;\n if (!existing || existing.indexOf(ctor) === -1) {\n flushTestBed(options);\n try {\n const declarations: Array<AnyType<any>> = [];\n if (ctor.providers) {\n declarations.push(ctor.providers);\n }\n declarations.push(ctor);\n TestBed.configureTestingModule({\n declarations,\n });\n } catch (error) {\n handleFixtureError(error);\n }\n }\n };\n\nconst generateFactory = (\n componentCtor: Type<any> & { tpl?: string },\n bindings: undefined | null | string[],\n template: any,\n options: IMockRenderFactoryOptions,\n) => {\n const result = (params: any, detectChanges?: boolean) => {\n result.configureTestBed();\n const fixture: any = TestBed.createComponent(componentCtor);\n\n funcInstallPropReader(fixture.componentInstance, params ?? {}, bindings ?? []);\n coreDefineProperty(fixture, 'ngMocksStackId', ngMocksUniverse.global.get('bullet:stack:id'));\n\n if (detectChanges === undefined || detectChanges) {\n fixture.detectChanges();\n }\n\n if (\n typeof template === 'string' ||\n isNgDef(template, 'c') ||\n isNgDef(template, 'd') ||\n (componentCtor.tpl && isNgDef(template, 'p'))\n ) {\n renderDeclaration(fixture, template, params);\n } else {\n renderInjection(fixture, template, params);\n }\n\n return fixture;\n };\n result.declaration = componentCtor;\n result.bindings = bindings;\n result.configureTestBed = generateFactoryInstall(componentCtor, options);\n\n return result;\n};\n\n/**\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: InjectionToken<MComponent>,\n bindings?: undefined | null,\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, never>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: AnyType<MComponent>,\n bindings: undefined | null,\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, keyof MComponent>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent, TKeys extends keyof any>(\n template: AnyType<MComponent>,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent, TKeys extends keyof any = keyof any>(\n template: AnyType<MComponent>,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\n/**\n * Without params we should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent>(\n template: AnyType<MComponent>,\n): MockRenderFactory<MComponent, keyof MComponent>;\n\n/**\n * An empty string does not have point.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory(template: ''): MockRenderFactory<void, never>;\n\n/**\n * Without params we should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent = void>(template: string): MockRenderFactory<MComponent>;\n\n/**\n * MockRenderFactory is a delayed version of MockRender.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender#factory\n */\nexport function MockRenderFactory<MComponent = void, TKeys extends keyof any = keyof any>(\n template: string,\n bindings: TKeys[],\n options?: IMockRenderFactoryOptions,\n): MockRenderFactory<MComponent, TKeys>;\n\nexport function MockRenderFactory<MComponent, TKeys extends string>(\n template: string | AnyDeclaration<MComponent>,\n bindings?: undefined | null | TKeys[],\n options: IMockRenderFactoryOptions = {},\n): any {\n funcImportExists(template, 'MockRender');\n\n const meta: Directive = typeof template === 'string' || isNgDef(template, 't') ? {} : funcReflectTemplate(template);\n const componentCtor: any = funcCreateWrapper(template, meta, bindings, options);\n const factory = generateFactory(componentCtor, bindings, template, options);\n if (ngMocksStack.current().level !== 'root' && options.configureTestBed !== false) {\n factory.configureTestBed();\n }\n\n return factory;\n}\n","import { Component, Directive } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\n\nimport { extendClass } from '../common/core.helpers';\nimport coreReflectDirectiveResolve from '../common/core.reflect.directive-resolve';\nimport { AnyType } from '../common/core.types';\nimport { isNgDef } from '../common/func.is-ng-def';\n\nconst registerTemplateMiddleware = (template: AnyType<any>, meta: Directive): void => {\n const child = extendClass(template);\n\n const alias = {\n provide: template,\n useExisting: child,\n };\n const providers = [...(meta.providers || []), alias];\n meta.providers = providers;\n\n if (isNgDef(template, 'c')) {\n Component(meta)(child);\n } else {\n Directive(meta)(child);\n }\n TestBed.configureTestingModule({\n declarations: [child],\n });\n\n // https://github.com/help-me-mom/ng-mocks/issues/1876\n // We need to apply overrides to our cloned declaration.\n try {\n const ngMocksOverrides: Map<any, any> = (TestBed as any).ngMocksOverrides;\n const { override } = ngMocksOverrides.get(template);\n const { set } = override;\n ngMocksOverrides.set(child, { set: meta });\n TestBed.overrideComponent(child, {\n set: {\n ...set,\n providers: [...set.providers, alias],\n },\n });\n } catch {\n // nothing to do\n }\n};\n\nexport default (template: AnyType<any>): Directive => {\n if (!isNgDef(template, 'c') && !isNgDef(template, 'd')) {\n return {};\n }\n\n const meta = { ...coreReflectDirectiveResolve(template) };\n\n if (meta.selector && /[\\s,[\\]]/.test(meta.selector)) {\n meta.selector = '';\n }\n\n if (!meta.selector) {\n // istanbul ignore next\n meta.selector = (TestBed as any).ngMocksSelectors?.get(template) || '';\n if (!meta.selector) {\n meta.selector = `ng-mocks-${template.name}`;\n registerTemplateMiddleware(template, meta);\n // istanbul ignore else\n if ((TestBed as any).ngMocksSelectors) {\n (TestBed as any).ngMocksSelectors.set(template, meta.selector);\n }\n }\n }\n\n return meta;\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { AnyDeclaration, AnyType } from '../common/core.types';\n\nimport { MockRenderFactory } from './mock-render-factory';\nimport { IMockRenderOptions, MockedComponentFixture } from './types';\n\n/**\n * This signature of MockRender lets create an empty fixture.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender(): MockedComponentFixture<void, void>;\n\n/**\n * This signature of MockRender lets create a fixture to access a token.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(\n template: InjectionToken<MComponent>,\n params?: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, void>;\n\n/**\n * This signature of MockRender lets create a fixture to access a component without parameters.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(\n template: AnyType<MComponent>,\n params: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, MComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends object>(\n template: AnyType<MComponent>,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a component.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends object = Record<keyof any, any>>(\n template: AnyType<MComponent>,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender without params should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent>(template: AnyType<MComponent>): MockedComponentFixture<MComponent, MComponent>;\n\n/**\n * This signature of MockRender without params should not autocomplete any keys of any types.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void>(template: string): MockedComponentFixture<MComponent>;\n\n/**\n * This signature of MockRender lets create a fixture based on string template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void>(\n template: string,\n params: undefined | null,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, void>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a string based template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent = void, TComponent extends Record<keyof any, any> = Record<keyof any, any>>(\n template: string,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\n/**\n * This signature of MockRender lets create a fixture with parameters to access a string based template.\n *\n * @see https://ng-mocks.sudo.eu/api/MockRender\n */\nexport function MockRender<MComponent, TComponent extends Record<keyof any, any> = Record<keyof any, any>>(\n template: string,\n params: TComponent,\n detectChangesOrOptions?: boolean | IMockRenderOptions,\n): MockedComponentFixture<MComponent, TComponent>;\n\nexport function MockRender<MComponent, TComponent extends Record<keyof any, any>>(\n template?: string | AnyDeclaration<MComponent>,\n params?: TComponent,\n flags: boolean | IMockRenderOptions = true,\n): any {\n const tpl = arguments.length === 0 ? '' : template;\n const bindings = params && typeof params === 'object' ? Object.keys(params) : params;\n const options = typeof flags === 'boolean' ? { detectChanges: flags } : { ...flags };\n const factory = (MockRenderFactory as any)(tpl, bindings, options);\n\n return factory(params, options.detectChanges);\n}\n"],"names":["flags","mockRenderCacheSize","neverMockModule","neverMockProvidedFunction","neverMockToken","onMockBuilderMissingDependency","onMockInstanceRestoreNeed","onTestBedFlushNeed","dependencies","instance","property","value","enumerable","configurable","writable","getTestBedInjection","token","getInjection","testBed","getTestBed","inject","get","flatten","values","result","Array","isArray","push","mapKeys","set","forEach","_","mapValues","destination","add","mapEntries","key","extractDependencyArray","deps","flag","name","ngMetadataName","undefined","extractDependency","dep","extendClassicClass","base","child","glb","ngMocksParent","eval","ngMocksResult","MockMiddleware","extendClass","parameters","length","def","NG_MOCKS","InjectionToken","__ngMocksSkip","NG_MOCKS_TOUCHES","NG_MOCKS_OVERRIDES","NG_MOCKS_GUARDS","NG_MOCKS_INTERCEPTORS","NG_MOCKS_ROOT_PROVIDERS","window","g","badCharacters","RegExp","_desc","constructor","replace","provider","provide","isNgInjectionToken","globalMap","ngMocksUniverse","global","has","Map","builtDeclarations","builtProviders","cacheDeclarations","cacheProviders","config","configInstance","Set","touches","getOverrides","getDefaults","getConfigMock","defValue","getResolution","getBuildDeclaration","mode","replacement","hasBuildDeclaration","isExcludedDef","resolution","isProvidedDef","encapsulation","__ngMocksProxy","descriptor","Object","defineProperty","override","style","correctInstance","applyOverrides","skipProps","getOwnPropertyNames","desc","indexOf","getOwnPropertyDescriptor","callbacks","overloads","stub","service","bindFrom","bindTo","mock","args","apply","this","prop","sourceDesc","sanitizerMethods","extraMethods","DomSanitizer","Sanitizer","prototype","method","getPrototypeOf","mockFunction","mockName","original","func","customMockFunction","val","setValue","newSetValue","newValue","handleItemKeys","handleItemGetGuards","section","guards","guard","handleSection","replaceWithMocks","updated","callback","valueItem","handleArray","keys","handleItem","setPrototypeOf","ngMockshelperMockService","registerMockFunction","createClone","createMockFromPrototype","methods","properties","definePropertyDescriptor","extractMethodsFromPrototype","extractPropertiesFromPrototype","extractPropertyDescriptor","accessType","parseArgs","detectedMockName","createName","mockDef","generateMockDef","__ngMocks","__ngMocksSet","__ngMocksGet","resolveProvider","useFactory","areEqualDefs","providerDiffers","defDiffers","a","b","anyDiffers","resolutions","changed","multi","change","parseProvider","useExisting","mockOf","i","toString","isSuitableProvider","useValue","interceptor","useClass","excludeInterceptors","isPreconfiguredDependency","existingMock","createFromResolution","createPredefinedMockProvider","createMockProvider","applyCallbackToken","init","overrides","Injector","injector","configGlobal","inst","applyCallback","normalizePrimitivesMap","handleProvider","mockProvider","check","normalizePrimitives","createValueProvider","createClassProvider","isNeverMockFunction","isNeverMockToken","existing","applyMissingClassProperties","createFactoryProvider","__annotations__","__parameters__","isAngularClass","proto","match","cls","clsCode","codePointAt","regEx","guessClass","mockVariableMap","prefix","MockService","mockNamePrefix","createMock","mockVariable","pushDecorator","decorators","decorator","deleteIndex","splice","getAllKeys","props","parsePropDecoratorsParserFactoryProp","declaration","unshift","parsePropDecoratorsParserInput","parsePropDecoratorsParserOutput","parsePropDecoratorsParserFactoryQuery","isViewQuery","queries","selector","parsePropDecoratorsParserContent","parsePropDecoratorsParserView","parsePropDecoratorsMap","ContentChild","ContentChildren","HostBinding","host","hostBindings","HostListener","hostListeners","Input","Output","ViewChild","ViewChildren","parsePropMetadataParserFactoryProp","bindingPropertyName","parsePropMetadataParserInput","parsePropMetadataParserOutput","parsePropMetadataParserFactoryQueryChild","read","static","parsePropMetadataParserContentChild","parsePropMetadataParserViewChild","parsePropMetadataParserFactoryQueryChildren","descendants","emitDistinctChangesOnly","parsePropMetadataMap","hostPropertyName","eventName","buildDeclaration","inputs","input","outputs","output","reflectionCapabilities","parse","hasOwnProperty","call","__ngMocksDeclarations","parent","parentDeclarations","attributes","propDecorators","createDeclarations","attributeName","parseParameters","annotation","parseAnnotations","type","parseDecorators","parsePropDecorators","__prop__metadata__","parsePropMetadata","Directive","Component","y","x","module","exports","__WEBPACK_EXTERNAL_MODULE__angular_core_bcead0df__","ChangeDetectorRef","ComponentFactoryResolver","DebugElement","ElementRef","EventEmitter","NgModule","Optional","Pipe","QueryList","Self","TemplateRef","ViewContainerRef","__webpack_require__","d","__WEBPACK_EXTERNAL_MODULE__angular_core_testing_89899de6__","TestBed","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","definition","o","globalThis","Function","e","obj","r","Symbol","toStringTag","stackRoot","id","level","stack","listenersPush","listenersPop","providers","mocks","isNgModuleDefWithProviders","ngModule","isNgType","offset","isNgDef","ngType","isModule","isModuleCheck","isComponent","isComponentCheck","isDirective","isDirectiveCheck","isPipe","isPipeCheck","isInjectable","isInjectableCheck","__WEBPACK_EXTERNAL_MODULE__angular_forms_df10eade__","AbstractControl","DefaultValueAccessor","FormControl","FormControlDirective","NG_ASYNC_VALIDATORS","NG_VALIDATORS","NG_VALUE_ACCESSOR","NgControl","NgModel","_isMockFunction","Error","join","jest","arg","__ngMocksConfig","applyProxy","proxy","storage","MockControlValueAccessorProxy","target","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","writeValue","MockValidatorProxy","registerOnValidatorChange","validate","control","MockAsyncValidatorProxy","Promise","resolve","installValidator","validators","validator","__ngMocksCtor","isValidator","Mock","ngControl","queryScanKeys","valueAccessor","setControlValueAccessor","setValueAccessor","isControlValueAccessor","installValueAccessor","_rawValidators","_rawAsyncValidators","applyNgValueAccessor","mockOutputs","split","applyOutputs","applyPrototype","applyMethods","applyProps","LegacyControlValueAccessor","__simulateChange","__simulateTouch","__simulateValidatorChange","source","configInput","map","isInternalKey","cloneVcrQuery","query","processProvider","sourceType","mockType","processTokens","ownUseExisting","__forward_ref__","processOwnUseExisting","meta","params","options","exportAs","standalone","viewProviders","imports","buildConfig","exclude","alias","final","scanKeys","generateFinalQueries","funcName","getType","isMockNgDef","component","cacheFlag","hasNgMocksDepsResolution","viewChildArgs","viewChildTemplate","isTemplateRefQuery","parts","contentChildSelector","indices","mixRenderApplyContext","view","context","contextKey","markForCheck","ComponentMockBase","changeDetector","cdr","super","$implicit","variables","vcr","detectChanges","mixRenderPrepareVcr","templates","toArray","views","index","templateRef","createEmbeddedView","mixRenderHandleViews","viewContainer","destroy","viewIndex","move","mixRenderReorderViews","mixHideHandler","mixHide","ngAfterContentInit","__rendered","render","block","__render","decorateClass","template","MockComponents","components","MockComponent","DirectiveMockBase","element","__ngMocksInstall","ngOnInit","clear","directive","MockDirectives","directives","MockDirective","MockPipes","pipes","pipe","MockPipe","transform","getMockClass","MockModule","ngModuleProviders","extractModuleAndProviders","toggleSkipMockFlag","isRootModule","flagMock","flagNever","flagKeep","flagReplace","preProcessFlags","mockModule","mockModuleDef","ngModuleDef","getMockModuleDef","detectMockModule","getExistingMockModule","mockModuleProviders","getMockProviders","generateReturn","postProcessFlags","processDefMap","createResolveExisting","detectedDef","createResolveExcluded","processDef","createResolveWithProviders","createResolve","createResolveProvider","exported","flatToExisting","data","filter","item","resolveDefForExport","correctExports","moduleConfig","export","exportAll","skipAddExports","hasResolver","configureProcessMetaKeys","cachePipe","skipMarkProviders","processMeta","declarations","addExports","skipMock","nativeElement","nativeNode","debugElement","fixtures","_activeFixtures","findDebugElement","el","defaultNotFoundValue","sel","notFoundValue","__WEBPACK_EXTERNAL_MODULE__angular_platform_browser_bc6fa964__","By","getSourceOfMock","node","nodeName","_tNode","elDef","defaultInjector","getScanViewRefRootNodes","getVcr","vrIndex","vr","rnIndex","rootNodes","childNodes","rootNode","scanViewRef","isDirect","children","childNode","childNodeParent","start","end","expected","currentParent","childElDef","nestedCheck","includeTextNode","isValidValue","getMeta","publicProviders","requiredAttributes","bindings","binding","nonMinifiedName","nodeIndex","collectAttributesClassic","expectedAttributes","attr","collectAttributesIvy","attrs","step","selectors","providerTokens","collectSelectors","attribute","attrIndex","attrProp","_lView","detectInIvy","nodes","detectInClassic","references","regExp","isCrawlByAttribute","isCrawlByAttributeValue","isCrawlById","slice","isCrawlByTagName","trim","isCrawlByDeclaration","isMockControlValueAccessor","innerHTML","preventBubble","eventCtor","Event","event","CustomEvent","initParams","bubbles","cancelable","eventObj","document","createEvent","initCustomEvent","keyMap","alt","altKey","code","location","which","arrowdown","arrowleft","arrowright","arrowup","backspace","ctrlKey","enter","esc","metaKey","shift","shiftKey","space","tab","f","getCode","char","toUpperCase","dot","eventPayload","Math","max","payload","keyData","applyPayload","disabled","toEventObj","dispatchEvent","message","formControlDirective","form","ngModel","detectGatherFlag","gather","parentNode","isNotObject","shouldBeScanned","scanned","scan","normalize","gatherDefault","nodesLength","bindingStartIndex","detectContext","current","__ngContext__","rootView","detectContextByIndex","parentInjector","getParentWithInjector","parentInstance","_debugContext","lView","queryAll","handlePrimitives","html","outer","format","innerOuter","nodeValue","textContent","wholeText","outerHTML","getElementValue","calls","defaultMethods","factory","backup","beforeEach","console","afterEach","pop","propName","error","delete","hooks","after","before","configureTestingModule","moduleDef","resetTestingModule","ngMocksFasterInstalled","_instantiated","_moduleFactory","_testModuleRef","idAdd","bulletStack","idRemove","activeFixtures","active","ngMocksStackId","resetFixtures","root","skipDef","skip","createMetaHandler","optional","typeMap","handleDeclaration","bucket","keep","providerDef","resolveMap","skipDestruction","handleModuleWithProviders","toMock","handleDestructuring","resolveHandler","attrMatches","v","label","attrDef","detectAttribute","isRightTemplate","localVcr","localValue","isExpectedTemplate","findDeep","entryPoint","__template","__vcr","handleDirective","scanValue","scanVcr","getValVcr","param","detector","limit","flagNames","autoSpy","action","jasmine","createSpy","methodName","update","emit","handleKnown","listeners","some","listener","hasListener","triggerInput","click","crawl","defaultConfig","defaultMock","faster","idAll","idEach","beforeAll","afterAll","find","findAll","findInstance","fixture","findInstances","elements","findTemplateRef","findTemplateRefs","flushTestBed","formatHtml","formatText","globalExclude","globalKeep","globalMock","globalReplace","fail","globalWipe","guts","protoKeep","protoMock","protoExclude","k","generateDataWithUniverse","generateData","createMeta","hide","tpl","elementRef","ignoreOnConsole","reset","reveal","revealAll","stubMember","throwOnConsole","touch","markAsTouched","triggerTouch","trigger","ngMocks","defaultValue","MockProviders","MockProvider","providedIn","ngInjectableDef","applyOverride","generateTouches","local","__ngMocksTouches","applyPlatformOverrideDef","applyPlatformOverridesBasedOnProvidedIn","knownTouches","size","_providers","_compiler","defineTouches","applyPlatformOverridesBasedOnDefaults","applyPlatformOverrides","ngMocksOverrides","applyNgMocksOverrides","isMockedNgDefOf","getMockedNgDefOf","getMock","isMockOf","ngMocksOverridesInstalled","ngElementId","__NG_ELEMENT_ID__","ngElementIdArgs","vcrInstance","createComponent","createComponentArgs","viewContainerInstall","install","isMockValidator","currentStack","state","mockInstance","universeConfig","checkReset","checkCollect","MockInstance","accessor","parseMockInstanceArgs","mockInstances","mockInstanceConfig","MockReset","showError","globalFlags","errorMessage","warn","remember","restore","scope","getNgType","isStandalone","MockBuilderStash","replaceDef","isIvy","EntryComponentsModule","componentFactoryResolver","originCFR","resolveComponentFactory","__WEBPACK_EXTERNAL_MODULE__angular_common_d12e0fe1__","DOCUMENT","skipByResolution","skipResolution","skipSystem","touched","detectForwardRed","handleDef","defProviders","extendedDef","loModule","loProviders","funcExtractDeps","field","precise","createInstance","normaliseModule","generateProviderValue","prototypeKeys","sourceKeys","objectsDiffer","dependency","compare","areEqualProviderDefs","thisDef","prototypeDef","prototypeDefs","thisDefs","MockBuilderPerformance","configDefault","beforeCC","configDef","excludeDef","keepDef","stash","beforeCompileComponents","build","combineParams","forgotten","shallow","deleteTouch","loDef","buckets","concat","parametersMap","parameter","entryComponents","entryModule","patchedOriginal","catch","reject","then","wipe","finally","setConfigDef","a1","a2","defaultMockValue","setDefValue","fulfill","promise","compileComponents","equalsTo","clone","cloneConfig","MockBuilder","keepDeclaration","itsModuleToMock","MockDeclarations","MockDeclaration","generateTemplateAttrWithParams","generateTemplateAttrWrap","generateTemplateAttr","mockTemplate","generateWrapperComponent","MockRenderComponent","next","createPropertyGet","reader","handler","createPropertySet","extractAllKeys","extra","force","exists","fields","fixtureMessage","generateFactory","componentCtor","configureTestBed","componentInstance","point","tryWhen","renderDeclaration","HTMLElement","renderInjection","ctor","_declarations","handleFixtureError","generateFactoryInstall","MockRenderFactory","test","registerTemplateMiddleware","caches","getCache","cacheKey","cache","isValid","checkCache","dir","MockRenderDirective","generateWrapperDirective","MockRender","arguments"],"sourceRoot":""}
|