@venok/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/application/config.d.ts +35 -0
- package/application/config.js +85 -0
- package/application/context.d.ts +198 -0
- package/application/context.js +325 -0
- package/application/factory.d.ts +43 -0
- package/application/factory.js +147 -0
- package/constants.d.ts +46 -0
- package/constants.js +53 -0
- package/context/creator.d.ts +9 -0
- package/context/creator.js +32 -0
- package/context/execution-host.d.ts +16 -0
- package/context/execution-host.js +30 -0
- package/context/external/creator.d.ts +63 -0
- package/context/external/creator.js +159 -0
- package/context/external/proxy.d.ts +5 -0
- package/context/external/proxy.js +19 -0
- package/decorators/apply.decorator.d.ts +10 -0
- package/decorators/apply.decorator.js +24 -0
- package/decorators/bind.decorator.d.ts +11 -0
- package/decorators/bind.decorator.js +20 -0
- package/decorators/catch.decorator.d.ts +17 -0
- package/decorators/catch.decorator.js +26 -0
- package/decorators/create-param.decorator.d.ts +29 -0
- package/decorators/create-param.decorator.js +51 -0
- package/decorators/dependencies.decorator.d.ts +6 -0
- package/decorators/dependencies.decorator.js +17 -0
- package/decorators/exception-filters.decorator.d.ts +21 -0
- package/decorators/exception-filters.decorator.js +41 -0
- package/decorators/global.decorator.d.ts +10 -0
- package/decorators/global.decorator.js +19 -0
- package/decorators/index.d.ts +15 -0
- package/decorators/index.js +31 -0
- package/decorators/inject.decorator.d.ts +26 -0
- package/decorators/inject.decorator.js +45 -0
- package/decorators/injectable.decorator.d.ts +40 -0
- package/decorators/injectable.decorator.js +51 -0
- package/decorators/module.decorator.d.ts +14 -0
- package/decorators/module.decorator.js +38 -0
- package/decorators/optional.decorator.d.ts +14 -0
- package/decorators/optional.decorator.js +30 -0
- package/decorators/set-metadata.decorator.d.ts +18 -0
- package/decorators/set-metadata.decorator.js +30 -0
- package/decorators/use-guards.decorator.d.ts +21 -0
- package/decorators/use-guards.decorator.js +40 -0
- package/decorators/use-interceptors.decorator.d.ts +21 -0
- package/decorators/use-interceptors.decorator.js +40 -0
- package/decorators/use-pipes.decorator.d.ts +21 -0
- package/decorators/use-pipes.decorator.js +39 -0
- package/discovery/meta-host-collection.d.ts +32 -0
- package/discovery/meta-host-collection.js +79 -0
- package/discovery/module.d.ts +5 -0
- package/discovery/module.js +24 -0
- package/discovery/service.d.ts +68 -0
- package/discovery/service.js +90 -0
- package/errors/exceptions/circular-dependency.exception.d.ts +4 -0
- package/errors/exceptions/circular-dependency.exception.js +11 -0
- package/errors/exceptions/index.d.ts +8 -0
- package/errors/exceptions/index.js +24 -0
- package/errors/exceptions/invalid-class-module.exception.d.ts +4 -0
- package/errors/exceptions/invalid-class-module.exception.js +11 -0
- package/errors/exceptions/invalid-class-scope.exception.d.ts +5 -0
- package/errors/exceptions/invalid-class-scope.exception.js +14 -0
- package/errors/exceptions/invalid-class.exception.d.ts +4 -0
- package/errors/exceptions/invalid-class.exception.js +11 -0
- package/errors/exceptions/invalid-exception-filter.exception.d.ts +4 -0
- package/errors/exceptions/invalid-exception-filter.exception.js +11 -0
- package/errors/exceptions/invalid-module.exception.d.ts +4 -0
- package/errors/exceptions/invalid-module.exception.js +11 -0
- package/errors/exceptions/runtime.exception.d.ts +4 -0
- package/errors/exceptions/runtime.exception.js +12 -0
- package/errors/exceptions/undefined-dependency.exception.d.ts +6 -0
- package/errors/exceptions/undefined-dependency.exception.js +11 -0
- package/errors/exceptions/undefined-forwardref.exception.d.ts +5 -0
- package/errors/exceptions/undefined-forwardref.exception.js +11 -0
- package/errors/exceptions/undefined-module.exception.d.ts +4 -0
- package/errors/exceptions/undefined-module.exception.js +11 -0
- package/errors/exceptions/unknown-dependencies.exception.d.ts +16 -0
- package/errors/exceptions/unknown-dependencies.exception.js +15 -0
- package/errors/exceptions/unknown-element.exception.d.ts +4 -0
- package/errors/exceptions/unknown-element.exception.js +12 -0
- package/errors/exceptions/unknown-export.exception.d.ts +4 -0
- package/errors/exceptions/unknown-export.exception.js +11 -0
- package/errors/exceptions/unknown-module.exception.d.ts +4 -0
- package/errors/exceptions/unknown-module.exception.js +10 -0
- package/errors/messages.d.ts +15 -0
- package/errors/messages.js +126 -0
- package/exceptions/external/filter-context.d.ts +10 -0
- package/exceptions/external/filter-context.js +37 -0
- package/exceptions/external/filter.d.ts +5 -0
- package/exceptions/external/filter.js +16 -0
- package/exceptions/external/handler.d.ts +9 -0
- package/exceptions/external/handler.js +31 -0
- package/exceptions/filter-context.d.ts +14 -0
- package/exceptions/filter-context.js +55 -0
- package/exceptions/select-exception-filter-metadata.d.ts +2 -0
- package/exceptions/select-exception-filter-metadata.js +6 -0
- package/exceptions/zone/handler.d.ts +5 -0
- package/exceptions/zone/handler.js +15 -0
- package/exceptions/zone/zone.d.ts +5 -0
- package/exceptions/zone/zone.js +32 -0
- package/guards/consumer.d.ts +9 -0
- package/guards/consumer.js +33 -0
- package/guards/context-creator.d.ts +17 -0
- package/guards/context-creator.js +69 -0
- package/guards/index.d.ts +2 -0
- package/guards/index.js +18 -0
- package/helpers/color.helper.d.ts +9 -0
- package/helpers/color.helper.js +14 -0
- package/helpers/context-id-factory.helper.d.ts +2 -0
- package/helpers/context-id-factory.helper.js +15 -0
- package/helpers/context.helper.d.ts +23 -0
- package/helpers/context.helper.js +49 -0
- package/helpers/extends-metadata.helper.d.ts +1 -0
- package/helpers/extends-metadata.helper.js +9 -0
- package/helpers/flatten.helper.d.ts +1 -0
- package/helpers/flatten.helper.js +9 -0
- package/helpers/messages.helper.d.ts +2 -0
- package/helpers/messages.helper.js +7 -0
- package/helpers/noop.helper.d.ts +1 -0
- package/helpers/noop.helper.js +5 -0
- package/helpers/random-string-generator.helper.d.ts +1 -0
- package/helpers/random-string-generator.helper.js +6 -0
- package/helpers/rethrow.helper.d.ts +1 -0
- package/helpers/rethrow.helper.js +7 -0
- package/helpers/shared.helper.d.ts +10 -0
- package/helpers/shared.helper.js +33 -0
- package/helpers/silent.helper.d.ts +10 -0
- package/helpers/silent.helper.js +18 -0
- package/helpers/transient.helper.d.ts +12 -0
- package/helpers/transient.helper.js +26 -0
- package/helpers/uuid.helper.d.ts +15 -0
- package/helpers/uuid.helper.js +54 -0
- package/helpers/validate-each.helper.d.ts +8 -0
- package/helpers/validate-each.helper.js +25 -0
- package/hooks/before-app-shutdown.hook.d.ts +9 -0
- package/hooks/before-app-shutdown.hook.js +45 -0
- package/hooks/index.d.ts +5 -0
- package/hooks/index.js +21 -0
- package/hooks/on-app-bootstrap.hook.d.ts +8 -0
- package/hooks/on-app-bootstrap.hook.js +45 -0
- package/hooks/on-app-shutdown.hook.d.ts +9 -0
- package/hooks/on-app-shutdown.hook.js +46 -0
- package/hooks/on-module-destroy.hook.d.ts +8 -0
- package/hooks/on-module-destroy.hook.js +45 -0
- package/hooks/on-module-init.hook.d.ts +8 -0
- package/hooks/on-module-init.hook.js +45 -0
- package/index.d.ts +10 -0
- package/index.js +32 -0
- package/injector/constants.d.ts +2 -0
- package/injector/constants.js +7 -0
- package/injector/container.d.ts +61 -0
- package/injector/container.js +194 -0
- package/injector/helpers/class-scope.helper.d.ts +2 -0
- package/injector/helpers/class-scope.helper.js +9 -0
- package/injector/helpers/classifier.helper.d.ts +4 -0
- package/injector/helpers/classifier.helper.js +17 -0
- package/injector/helpers/is-durable.helper.d.ts +2 -0
- package/injector/helpers/is-durable.helper.js +9 -0
- package/injector/index.d.ts +5 -0
- package/injector/index.js +20 -0
- package/injector/injector.d.ts +87 -0
- package/injector/injector.js +452 -0
- package/injector/instance/links-host.d.ts +22 -0
- package/injector/instance/links-host.js +50 -0
- package/injector/instance/loader.d.ts +21 -0
- package/injector/instance/loader.js +73 -0
- package/injector/instance/resolver.d.ts +16 -0
- package/injector/instance/resolver.js +43 -0
- package/injector/instance/wrapper.d.ts +90 -0
- package/injector/instance/wrapper.js +272 -0
- package/injector/internal-core-module/core-providers.d.ts +4 -0
- package/injector/internal-core-module/core-providers.js +21 -0
- package/injector/internal-core-module/internal-core-module-factory.d.ts +8 -0
- package/injector/internal-core-module/internal-core-module-factory.js +42 -0
- package/injector/internal-core-module/internal-core-module.d.ts +4 -0
- package/injector/internal-core-module/internal-core-module.js +31 -0
- package/injector/module/compiler.d.ts +19 -0
- package/injector/module/compiler.js +27 -0
- package/injector/module/container.d.ts +6 -0
- package/injector/module/container.js +24 -0
- package/injector/module/lazy/loader.d.ts +21 -0
- package/injector/module/lazy/loader.js +49 -0
- package/injector/module/lazy/options.d.ts +6 -0
- package/injector/module/lazy/options.js +2 -0
- package/injector/module/module.d.ts +74 -0
- package/injector/module/module.js +383 -0
- package/injector/module/ref.d.ts +106 -0
- package/injector/module/ref.js +62 -0
- package/injector/module/token-factory.d.ts +13 -0
- package/injector/module/token-factory.js +71 -0
- package/injector/settlement-signal.d.ts +37 -0
- package/injector/settlement-signal.js +55 -0
- package/inspector/graph-inspector.d.ts +26 -0
- package/inspector/graph-inspector.js +163 -0
- package/inspector/initialize-on-preview.allowlist.d.ts +6 -0
- package/inspector/initialize-on-preview.allowlist.js +13 -0
- package/inspector/interfaces/edge.interface.d.ts +28 -0
- package/inspector/interfaces/edge.interface.js +2 -0
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +12 -0
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +2 -0
- package/inspector/interfaces/entrypoint.interface.d.ts +10 -0
- package/inspector/interfaces/entrypoint.interface.js +2 -0
- package/inspector/interfaces/extras.interface.d.ts +18 -0
- package/inspector/interfaces/extras.interface.js +2 -0
- package/inspector/interfaces/node.interface.d.ts +49 -0
- package/inspector/interfaces/node.interface.js +2 -0
- package/inspector/interfaces/serialized-graph-json.interface.d.ts +14 -0
- package/inspector/interfaces/serialized-graph-json.interface.js +2 -0
- package/inspector/interfaces/serialized-graph-metadata.interface.d.ts +10 -0
- package/inspector/interfaces/serialized-graph-metadata.interface.js +2 -0
- package/inspector/noop-graph-inspector.d.ts +2 -0
- package/inspector/noop-graph-inspector.js +8 -0
- package/inspector/partial-graph.host.d.ts +7 -0
- package/inspector/partial-graph.host.js +15 -0
- package/inspector/serialized-graph.d.ts +52 -0
- package/inspector/serialized-graph.js +121 -0
- package/interceptors/consumer.d.ts +9 -0
- package/interceptors/consumer.js +37 -0
- package/interceptors/context-creator.d.ts +17 -0
- package/interceptors/context-creator.js +67 -0
- package/interceptors/index.d.ts +2 -0
- package/interceptors/index.js +18 -0
- package/interfaces/abstract.interface.d.ts +3 -0
- package/interfaces/abstract.interface.js +2 -0
- package/interfaces/application/context-options.interface.d.ts +41 -0
- package/interfaces/application/context-options.interface.js +9 -0
- package/interfaces/application/context.interface.d.ts +162 -0
- package/interfaces/application/context.interface.js +2 -0
- package/interfaces/application/index.d.ts +1 -0
- package/interfaces/application/index.js +17 -0
- package/interfaces/context/arguments-host.interface.d.ts +22 -0
- package/interfaces/context/arguments-host.interface.js +2 -0
- package/interfaces/context/execution.interface.d.ts +18 -0
- package/interfaces/context/execution.interface.js +2 -0
- package/interfaces/features/exception-filter.interface.d.ts +21 -0
- package/interfaces/features/exception-filter.interface.js +2 -0
- package/interfaces/features/guards.interface.d.ts +20 -0
- package/interfaces/features/guards.interface.js +2 -0
- package/interfaces/features/interceptor.interface.d.ts +30 -0
- package/interfaces/features/interceptor.interface.js +2 -0
- package/interfaces/features/pipes.interface.d.ts +37 -0
- package/interfaces/features/pipes.interface.js +2 -0
- package/interfaces/helper.interface.d.ts +3 -0
- package/interfaces/helper.interface.js +2 -0
- package/interfaces/hooks/before-application-shutdown.interface.d.ts +3 -0
- package/interfaces/hooks/before-application-shutdown.interface.js +2 -0
- package/interfaces/hooks/index.d.ts +5 -0
- package/interfaces/hooks/index.js +21 -0
- package/interfaces/hooks/on-application-bootstrap.interface.d.ts +9 -0
- package/interfaces/hooks/on-application-bootstrap.interface.js +2 -0
- package/interfaces/hooks/on-application-shutdown.interface.d.ts +9 -0
- package/interfaces/hooks/on-application-shutdown.interface.js +2 -0
- package/interfaces/hooks/on-destroy.interface.d.ts +10 -0
- package/interfaces/hooks/on-destroy.interface.js +2 -0
- package/interfaces/hooks/on-init.interface.d.ts +8 -0
- package/interfaces/hooks/on-init.interface.js +2 -0
- package/interfaces/index.d.ts +6 -0
- package/interfaces/index.js +22 -0
- package/interfaces/injectable.interface.d.ts +1 -0
- package/interfaces/injectable.interface.js +2 -0
- package/interfaces/modules/configurable/async-options.interface.d.ts +42 -0
- package/interfaces/modules/configurable/async-options.interface.js +2 -0
- package/interfaces/modules/configurable/cls.interface.d.ts +13 -0
- package/interfaces/modules/configurable/cls.interface.js +2 -0
- package/interfaces/modules/configurable/host.interface.d.ts +62 -0
- package/interfaces/modules/configurable/host.interface.js +2 -0
- package/interfaces/modules/configurable/index.d.ts +3 -0
- package/interfaces/modules/configurable/index.js +19 -0
- package/interfaces/modules/definition.interface.d.ts +4 -0
- package/interfaces/modules/definition.interface.js +2 -0
- package/interfaces/modules/dynamic-module.interface.d.ts +23 -0
- package/interfaces/modules/dynamic-module.interface.js +2 -0
- package/interfaces/modules/forward-reference.interface.d.ts +3 -0
- package/interfaces/modules/forward-reference.interface.js +2 -0
- package/interfaces/modules/index.d.ts +9 -0
- package/interfaces/modules/index.js +25 -0
- package/interfaces/modules/injection-token.interface.d.ts +5 -0
- package/interfaces/modules/injection-token.interface.js +2 -0
- package/interfaces/modules/introspection-result.interface.d.ts +10 -0
- package/interfaces/modules/introspection-result.interface.js +2 -0
- package/interfaces/modules/module-metadata.interface.d.ts +24 -0
- package/interfaces/modules/module-metadata.interface.js +2 -0
- package/interfaces/modules/module.interface.d.ts +2 -0
- package/interfaces/modules/module.interface.js +2 -0
- package/interfaces/modules/optional-factory-dependency.interface.d.ts +8 -0
- package/interfaces/modules/optional-factory-dependency.interface.js +2 -0
- package/interfaces/modules/override.interface.d.ts +5 -0
- package/interfaces/modules/override.interface.js +2 -0
- package/interfaces/modules/provider.interface.d.ts +142 -0
- package/interfaces/modules/provider.interface.js +2 -0
- package/interfaces/scope.interface.d.ts +35 -0
- package/interfaces/scope.interface.js +23 -0
- package/interfaces/type.interface.d.ts +3 -0
- package/interfaces/type.interface.js +2 -0
- package/metadata-scanner.d.ts +4 -0
- package/metadata-scanner.js +34 -0
- package/module/configurable-module.builder.d.ts +93 -0
- package/module/configurable-module.builder.js +204 -0
- package/module/constants.d.ts +4 -0
- package/module/constants.js +7 -0
- package/module/helpers/generate-options-injection-token.helper.d.ts +1 -0
- package/module/helpers/generate-options-injection-token.helper.js +9 -0
- package/module/helpers/get-injection-providers.helper.d.ts +8 -0
- package/module/helpers/get-injection-providers.helper.js +36 -0
- package/module/helpers/index.d.ts +2 -0
- package/module/helpers/index.js +18 -0
- package/module/index.d.ts +2 -0
- package/module/index.js +18 -0
- package/package.json +35 -0
- package/pipes/consumer.d.ts +9 -0
- package/pipes/consumer.js +15 -0
- package/pipes/context-creator.d.ts +18 -0
- package/pipes/context-creator.js +70 -0
- package/pipes/index.d.ts +2 -0
- package/pipes/index.js +18 -0
- package/scanner.d.ts +81 -0
- package/scanner.js +374 -0
- package/services/console.service.d.ts +86 -0
- package/services/console.service.js +233 -0
- package/services/index.d.ts +1 -0
- package/services/index.js +17 -0
- package/services/logger.service.d.ts +157 -0
- package/services/logger.service.js +269 -0
- package/services/reflector.service.d.ts +110 -0
- package/services/reflector.service.js +87 -0
- package/test/context/execution-host.spec.d.ts +1 -0
- package/test/context/execution-host.spec.js +31 -0
- package/test/context/external/creator.spec.d.ts +1 -0
- package/test/context/external/creator.spec.js +149 -0
- package/test/context/external/proxy.spec.d.ts +1 -0
- package/test/context/external/proxy.spec.js +45 -0
- package/test/exceptions/external/handler.spec.d.ts +1 -0
- package/test/exceptions/external/handler.spec.js +89 -0
- package/test/exceptions/filter-context.spec.d.ts +2 -0
- package/test/exceptions/filter-context.spec.js +91 -0
- package/test/exceptions/messages.spec.d.ts +0 -0
- package/test/exceptions/messages.spec.js +201 -0
- package/test/exceptions/zona/handler.spec.d.ts +1 -0
- package/test/exceptions/zona/handler.spec.js +51 -0
- package/test/exceptions/zona/zone.spec.d.ts +1 -0
- package/test/exceptions/zona/zone.spec.js +66 -0
- package/test/guards/consumer.spec.d.ts +1 -0
- package/test/guards/consumer.spec.js +47 -0
- package/test/guards/context-creator.spec.d.ts +1 -0
- package/test/guards/context-creator.spec.js +138 -0
- package/test/helpers/context-id-factory.spec.d.ts +1 -0
- package/test/helpers/context-id-factory.spec.js +9 -0
- package/test/helpers/shared.spec.d.ts +1 -0
- package/test/helpers/shared.spec.js +122 -0
- package/test/hooks/before-app-shutdown.hook.spec.d.ts +1 -0
- package/test/hooks/before-app-shutdown.hook.spec.js +44 -0
- package/test/hooks/on-app-bootstrap.hook.spec.d.ts +1 -0
- package/test/hooks/on-app-bootstrap.hook.spec.js +43 -0
- package/test/hooks/on-app-shutdown.hook.spec.d.ts +1 -0
- package/test/hooks/on-app-shutdown.hook.spec.js +43 -0
- package/test/hooks/on-module-destroy.hook.spec.d.ts +1 -0
- package/test/hooks/on-module-destroy.hook.spec.js +43 -0
- package/test/hooks/on-module-init.hook.spec.d.ts +1 -0
- package/test/hooks/on-module-init.hook.spec.js +43 -0
- package/test/injector/compiler.spec.d.ts +1 -0
- package/test/injector/compiler.spec.js +42 -0
- package/test/injector/container.spec.d.ts +1 -0
- package/test/injector/container.spec.js +203 -0
- package/test/injector/helpers/classifier.spec.d.ts +1 -0
- package/test/injector/helpers/classifier.spec.js +102 -0
- package/test/injector/injector.spec.d.ts +1 -0
- package/test/injector/injector.spec.js +678 -0
- package/test/injector/instance/loader.spec.d.ts +1 -0
- package/test/injector/instance/loader.spec.js +108 -0
- package/test/injector/instance/wrapper.spec.d.ts +1 -0
- package/test/injector/instance/wrapper.spec.js +772 -0
- package/test/injector/internal-core-module/internal-core-module-factory.spec.d.ts +1 -0
- package/test/injector/internal-core-module/internal-core-module-factory.spec.js +27 -0
- package/test/injector/module/lazy/loader.spec.d.ts +1 -0
- package/test/injector/module/lazy/loader.spec.js +71 -0
- package/test/injector/module/module.spec.d.ts +1 -0
- package/test/injector/module/module.spec.js +410 -0
- package/test/injector/module/token-factory.spec.d.ts +1 -0
- package/test/injector/module/token-factory.spec.js +84 -0
- package/test/interceptors/consumer.spec.d.ts +1 -0
- package/test/interceptors/consumer.spec.js +136 -0
- package/test/interceptors/context-creator.spec.d.ts +1 -0
- package/test/interceptors/context-creator.spec.js +139 -0
- package/test/metadata-scanner.spec.d.ts +1 -0
- package/test/metadata-scanner.spec.js +41 -0
- package/test/module/configurable-module.builder.spec.d.ts +1 -0
- package/test/module/configurable-module.builder.spec.js +102 -0
- package/test/module/helpers/get-injection-providers.helper.spec.d.ts +1 -0
- package/test/module/helpers/get-injection-providers.helper.spec.js +49 -0
- package/test/pipes/consumer.spec.d.ts +1 -0
- package/test/pipes/consumer.spec.js +42 -0
- package/test/pipes/context-creator.spec.d.ts +1 -0
- package/test/pipes/context-creator.spec.js +108 -0
- package/test/scanner.spec.d.ts +1 -0
- package/test/scanner.spec.js +620 -0
- package/test/services/logger.service.spec.d.ts +1 -0
- package/test/services/logger.service.spec.js +487 -0
- package/test/services/reflector.service.spec.d.ts +1 -0
- package/test/services/reflector.service.spec.js +105 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,620 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
17
|
+
const injectable_decorator_1 = require("@venok/core/decorators/injectable.decorator");
|
|
18
|
+
const catch_decorator_1 = require("@venok/core/decorators/catch.decorator");
|
|
19
|
+
const module_decorator_1 = require("@venok/core/decorators/module.decorator");
|
|
20
|
+
const scanner_1 = require("@venok/core/scanner");
|
|
21
|
+
const container_1 = require("@venok/core/injector/container");
|
|
22
|
+
const graph_inspector_1 = require("@venok/core/inspector/graph-inspector");
|
|
23
|
+
const metadata_scanner_1 = require("@venok/core/metadata-scanner");
|
|
24
|
+
const config_1 = require("@venok/core/application/config");
|
|
25
|
+
const undefined_module_exception_1 = require("@venok/core/errors/exceptions/undefined-module.exception");
|
|
26
|
+
const invalid_module_exception_1 = require("@venok/core/errors/exceptions/invalid-module.exception");
|
|
27
|
+
const constants_1 = require("@venok/core/constants");
|
|
28
|
+
const wrapper_1 = require("@venok/core/injector/instance/wrapper");
|
|
29
|
+
const interfaces_1 = require("@venok/core/interfaces");
|
|
30
|
+
const invalid_class_module_exception_1 = require("@venok/core/errors/exceptions/invalid-class-module.exception");
|
|
31
|
+
const use_guards_decorator_1 = require("@venok/core/decorators/use-guards.decorator");
|
|
32
|
+
describe("DependenciesScanner", () => {
|
|
33
|
+
class Guard {
|
|
34
|
+
}
|
|
35
|
+
let TestComponent = class TestComponent {
|
|
36
|
+
};
|
|
37
|
+
TestComponent = __decorate([
|
|
38
|
+
(0, injectable_decorator_1.Injectable)()
|
|
39
|
+
], TestComponent);
|
|
40
|
+
let TestExceptionFilterWithoutInjectable = class TestExceptionFilterWithoutInjectable {
|
|
41
|
+
};
|
|
42
|
+
TestExceptionFilterWithoutInjectable = __decorate([
|
|
43
|
+
(0, catch_decorator_1.Catch)()
|
|
44
|
+
], TestExceptionFilterWithoutInjectable);
|
|
45
|
+
let BasicModule = class BasicModule {
|
|
46
|
+
};
|
|
47
|
+
BasicModule = __decorate([
|
|
48
|
+
(0, module_decorator_1.Module)({
|
|
49
|
+
providers: [TestComponent],
|
|
50
|
+
exports: [TestComponent],
|
|
51
|
+
})
|
|
52
|
+
], BasicModule);
|
|
53
|
+
let TestModule = class TestModule {
|
|
54
|
+
};
|
|
55
|
+
TestModule = __decorate([
|
|
56
|
+
(0, module_decorator_1.Module)({
|
|
57
|
+
imports: [BasicModule],
|
|
58
|
+
providers: [TestComponent],
|
|
59
|
+
})
|
|
60
|
+
], TestModule);
|
|
61
|
+
let UndefinedModule = class UndefinedModule {
|
|
62
|
+
};
|
|
63
|
+
UndefinedModule = __decorate([
|
|
64
|
+
(0, module_decorator_1.Module)({
|
|
65
|
+
imports: [undefined],
|
|
66
|
+
})
|
|
67
|
+
], UndefinedModule);
|
|
68
|
+
let InvalidModule = class InvalidModule {
|
|
69
|
+
};
|
|
70
|
+
InvalidModule = __decorate([
|
|
71
|
+
(0, module_decorator_1.Module)({
|
|
72
|
+
imports: [null],
|
|
73
|
+
})
|
|
74
|
+
], InvalidModule);
|
|
75
|
+
let scanner;
|
|
76
|
+
let mockContainer;
|
|
77
|
+
let container;
|
|
78
|
+
let graphInspector;
|
|
79
|
+
beforeEach(() => {
|
|
80
|
+
container = new container_1.VenokContainer();
|
|
81
|
+
mockContainer = sinon_1.default.mock(container);
|
|
82
|
+
graphInspector = new graph_inspector_1.GraphInspector(container);
|
|
83
|
+
scanner = new scanner_1.DependenciesScanner(container, new metadata_scanner_1.MetadataScanner(), graphInspector, new config_1.ApplicationConfig());
|
|
84
|
+
sinon_1.default.stub(scanner, "registerCoreModule").callsFake(async () => { });
|
|
85
|
+
});
|
|
86
|
+
afterEach(() => {
|
|
87
|
+
mockContainer.restore();
|
|
88
|
+
});
|
|
89
|
+
it('should "insertOrOverrideModule" call twice (2 modules) container method "addModule"', async () => {
|
|
90
|
+
const expectationCountAddModule = mockContainer.expects("addModule").twice();
|
|
91
|
+
const expectationCountReplaceModule = mockContainer.expects("replaceModule").never();
|
|
92
|
+
await scanner.scan(TestModule);
|
|
93
|
+
expectationCountAddModule.verify();
|
|
94
|
+
expectationCountReplaceModule.verify();
|
|
95
|
+
});
|
|
96
|
+
it('should "insertProvider" call twice (2 components) container method "addProvider"', async () => {
|
|
97
|
+
const expectation = mockContainer.expects("addProvider").twice();
|
|
98
|
+
const stub = sinon_1.default.stub(scanner, "insertExportedProvider");
|
|
99
|
+
await scanner.scan(TestModule);
|
|
100
|
+
expectation.verify();
|
|
101
|
+
stub.restore();
|
|
102
|
+
});
|
|
103
|
+
it('should "insertExportedProvider" call once (1 component) container method "addExportedProvider"', async () => {
|
|
104
|
+
const expectation = mockContainer.expects("addExportedProvider").once();
|
|
105
|
+
await scanner.scan(TestModule);
|
|
106
|
+
expectation.verify();
|
|
107
|
+
});
|
|
108
|
+
it('should "insertProvider" call once container method "addProvider"', async () => {
|
|
109
|
+
const expectation = mockContainer.expects("addProvider").once();
|
|
110
|
+
const stub = sinon_1.default.stub(scanner, "insertExportedProvider");
|
|
111
|
+
await scanner.scan(BasicModule);
|
|
112
|
+
expectation.verify();
|
|
113
|
+
stub.restore();
|
|
114
|
+
});
|
|
115
|
+
describe("when there is modules overrides", () => {
|
|
116
|
+
let OverwrittenTestComponent = class OverwrittenTestComponent {
|
|
117
|
+
};
|
|
118
|
+
OverwrittenTestComponent = __decorate([
|
|
119
|
+
(0, injectable_decorator_1.Injectable)()
|
|
120
|
+
], OverwrittenTestComponent);
|
|
121
|
+
let OverwrittenInjectableOne = class OverwrittenInjectableOne {
|
|
122
|
+
};
|
|
123
|
+
OverwrittenInjectableOne = __decorate([
|
|
124
|
+
(0, injectable_decorator_1.Injectable)()
|
|
125
|
+
], OverwrittenInjectableOne);
|
|
126
|
+
let OverwrittenInjectableTwo = class OverwrittenInjectableTwo {
|
|
127
|
+
};
|
|
128
|
+
OverwrittenInjectableTwo = __decorate([
|
|
129
|
+
(0, injectable_decorator_1.Injectable)()
|
|
130
|
+
], OverwrittenInjectableTwo);
|
|
131
|
+
let OverwrittenModuleOne = class OverwrittenModuleOne {
|
|
132
|
+
};
|
|
133
|
+
OverwrittenModuleOne = __decorate([
|
|
134
|
+
(0, module_decorator_1.Module)({
|
|
135
|
+
providers: [OverwrittenTestComponent, OverwrittenInjectableOne],
|
|
136
|
+
})
|
|
137
|
+
], OverwrittenModuleOne);
|
|
138
|
+
let OverwrittenModuleTwo = class OverwrittenModuleTwo {
|
|
139
|
+
};
|
|
140
|
+
OverwrittenModuleTwo = __decorate([
|
|
141
|
+
(0, module_decorator_1.Module)({
|
|
142
|
+
providers: [OverwrittenInjectableTwo],
|
|
143
|
+
})
|
|
144
|
+
], OverwrittenModuleTwo);
|
|
145
|
+
let OverrideTestModule = class OverrideTestModule {
|
|
146
|
+
};
|
|
147
|
+
OverrideTestModule = __decorate([
|
|
148
|
+
(0, module_decorator_1.Module)({
|
|
149
|
+
imports: [OverwrittenModuleOne, OverwrittenModuleTwo],
|
|
150
|
+
})
|
|
151
|
+
], OverrideTestModule);
|
|
152
|
+
let OverrideTestComponent = class OverrideTestComponent {
|
|
153
|
+
};
|
|
154
|
+
OverrideTestComponent = __decorate([
|
|
155
|
+
(0, injectable_decorator_1.Injectable)()
|
|
156
|
+
], OverrideTestComponent);
|
|
157
|
+
let OverrideModuleOne = class OverrideModuleOne {
|
|
158
|
+
};
|
|
159
|
+
OverrideModuleOne = __decorate([
|
|
160
|
+
(0, module_decorator_1.Module)({
|
|
161
|
+
providers: [OverrideTestComponent, OverwrittenInjectableOne],
|
|
162
|
+
})
|
|
163
|
+
], OverrideModuleOne);
|
|
164
|
+
let OverrideModuleTwo = class OverrideModuleTwo {
|
|
165
|
+
};
|
|
166
|
+
OverrideModuleTwo = __decorate([
|
|
167
|
+
(0, module_decorator_1.Module)({
|
|
168
|
+
providers: [OverwrittenInjectableTwo],
|
|
169
|
+
})
|
|
170
|
+
], OverrideModuleTwo);
|
|
171
|
+
const modulesToOverride = [
|
|
172
|
+
{ moduleToReplace: OverwrittenModuleOne, newModule: OverrideModuleOne },
|
|
173
|
+
{ moduleToReplace: OverwrittenModuleTwo, newModule: OverrideModuleTwo },
|
|
174
|
+
];
|
|
175
|
+
it('should "putModule" call twice (2 modules) container method "replaceModule"', async () => {
|
|
176
|
+
const expectationReplaceModuleFirst = mockContainer
|
|
177
|
+
.expects("replaceModule")
|
|
178
|
+
.once()
|
|
179
|
+
.withArgs(OverwrittenModuleOne, OverrideModuleOne, sinon_1.default.match.array);
|
|
180
|
+
const expectationReplaceModuleSecond = mockContainer
|
|
181
|
+
.expects("replaceModule")
|
|
182
|
+
.once()
|
|
183
|
+
.withArgs(OverwrittenModuleTwo, OverrideModuleTwo, sinon_1.default.match.array);
|
|
184
|
+
const expectationCountAddModule = mockContainer.expects("addModule").once();
|
|
185
|
+
await scanner.scan(OverrideTestModule, {
|
|
186
|
+
overrides: modulesToOverride,
|
|
187
|
+
});
|
|
188
|
+
expectationReplaceModuleFirst.verify();
|
|
189
|
+
expectationReplaceModuleSecond.verify();
|
|
190
|
+
expectationCountAddModule.verify();
|
|
191
|
+
});
|
|
192
|
+
it('should "putModule" call container method "replaceModule" with forwardRef() when forwardRef property exists', async () => {
|
|
193
|
+
const overwrittenForwardRefSpy = sinon_1.default.spy();
|
|
194
|
+
let OverwrittenForwardRef = class OverwrittenForwardRef {
|
|
195
|
+
};
|
|
196
|
+
OverwrittenForwardRef = __decorate([
|
|
197
|
+
(0, module_decorator_1.Module)({})
|
|
198
|
+
], OverwrittenForwardRef);
|
|
199
|
+
let Overwritten = class Overwritten {
|
|
200
|
+
static forwardRef() {
|
|
201
|
+
overwrittenForwardRefSpy();
|
|
202
|
+
return OverwrittenForwardRef;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
Overwritten = __decorate([
|
|
206
|
+
(0, module_decorator_1.Module)({})
|
|
207
|
+
], Overwritten);
|
|
208
|
+
const overrideForwardRefSpy = sinon_1.default.spy();
|
|
209
|
+
let OverrideForwardRef = class OverrideForwardRef {
|
|
210
|
+
};
|
|
211
|
+
OverrideForwardRef = __decorate([
|
|
212
|
+
(0, module_decorator_1.Module)({})
|
|
213
|
+
], OverrideForwardRef);
|
|
214
|
+
let Override = class Override {
|
|
215
|
+
static forwardRef() {
|
|
216
|
+
overrideForwardRefSpy();
|
|
217
|
+
return OverrideForwardRef;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
Override = __decorate([
|
|
221
|
+
(0, module_decorator_1.Module)({})
|
|
222
|
+
], Override);
|
|
223
|
+
let OverrideForwardRefTestModule = class OverrideForwardRefTestModule {
|
|
224
|
+
};
|
|
225
|
+
OverrideForwardRefTestModule = __decorate([
|
|
226
|
+
(0, module_decorator_1.Module)({
|
|
227
|
+
imports: [Overwritten],
|
|
228
|
+
})
|
|
229
|
+
], OverrideForwardRefTestModule);
|
|
230
|
+
await scanner.scan(OverrideForwardRefTestModule, {
|
|
231
|
+
overrides: [
|
|
232
|
+
{
|
|
233
|
+
moduleToReplace: Overwritten,
|
|
234
|
+
newModule: Override,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
});
|
|
238
|
+
(0, chai_1.expect)(overwrittenForwardRefSpy.called).to.be.true;
|
|
239
|
+
(0, chai_1.expect)(overrideForwardRefSpy.called).to.be.true;
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe("reflectDynamicMetadata", () => {
|
|
243
|
+
describe("when param has prototype", () => {
|
|
244
|
+
it('should call "reflectParamInjectables" and "reflectInjectables"', () => {
|
|
245
|
+
const reflectInjectables = sinon_1.default.stub(scanner, "reflectInjectables").callsFake(() => undefined);
|
|
246
|
+
const reflectParamInjectables = sinon_1.default.stub(scanner, "reflectParamInjectables").callsFake(() => undefined);
|
|
247
|
+
scanner.reflectDynamicMetadata({ prototype: true }, "");
|
|
248
|
+
(0, chai_1.expect)(reflectInjectables.called).to.be.true;
|
|
249
|
+
(0, chai_1.expect)(reflectParamInjectables.called).to.be.true;
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe("when param has not prototype", () => {
|
|
253
|
+
it('should not call ""reflectParamInjectables" and "reflectInjectables"', () => {
|
|
254
|
+
const reflectInjectables = sinon_1.default.stub(scanner, "reflectInjectables").callsFake(() => undefined);
|
|
255
|
+
const reflectParamInjectables = sinon_1.default
|
|
256
|
+
.stub(scanner, "reflectParamInjectables")
|
|
257
|
+
.callsFake(() => undefined);
|
|
258
|
+
scanner.reflectDynamicMetadata({}, "");
|
|
259
|
+
(0, chai_1.expect)(reflectInjectables.called).to.be.false;
|
|
260
|
+
(0, chai_1.expect)(reflectParamInjectables.called).to.be.false;
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
describe("insertInjectable", () => {
|
|
265
|
+
class InjectableCls {
|
|
266
|
+
}
|
|
267
|
+
class HostCls {
|
|
268
|
+
}
|
|
269
|
+
const instanceWrapper = { id: "random_id" };
|
|
270
|
+
const token = "token";
|
|
271
|
+
const methodKey = "methodKey";
|
|
272
|
+
let addInjectableStub;
|
|
273
|
+
let insertEnhancerMetadataCacheStub;
|
|
274
|
+
beforeEach(() => {
|
|
275
|
+
addInjectableStub = sinon_1.default.stub(scanner.container, "addInjectable").callsFake(() => instanceWrapper);
|
|
276
|
+
insertEnhancerMetadataCacheStub = sinon_1.default
|
|
277
|
+
.stub(graphInspector, "insertEnhancerMetadataCache")
|
|
278
|
+
.callsFake(() => undefined);
|
|
279
|
+
});
|
|
280
|
+
describe("when injectable is of type function", () => {
|
|
281
|
+
const subtype = "filter";
|
|
282
|
+
beforeEach(() => {
|
|
283
|
+
scanner.insertInjectable(InjectableCls, token, HostCls, subtype, methodKey);
|
|
284
|
+
});
|
|
285
|
+
it('should call "addInjectable"', () => {
|
|
286
|
+
(0, chai_1.expect)(addInjectableStub.calledWith(InjectableCls, token)).to.be.true;
|
|
287
|
+
});
|
|
288
|
+
it('should call "insertEnhancerMetadataCache"', () => {
|
|
289
|
+
(0, chai_1.expect)(insertEnhancerMetadataCacheStub.calledWith({
|
|
290
|
+
moduleToken: token,
|
|
291
|
+
classRef: HostCls,
|
|
292
|
+
enhancerInstanceWrapper: instanceWrapper,
|
|
293
|
+
targetNodeId: instanceWrapper.id,
|
|
294
|
+
methodKey,
|
|
295
|
+
subtype,
|
|
296
|
+
})).to.be.true;
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
describe("when injectable is not of type function", () => {
|
|
300
|
+
const injectableRef = new InjectableCls();
|
|
301
|
+
const subtype = "interceptor";
|
|
302
|
+
beforeEach(() => {
|
|
303
|
+
scanner.insertInjectable(injectableRef, token, HostCls, subtype, methodKey);
|
|
304
|
+
});
|
|
305
|
+
it('should not call "addInjectable"', () => {
|
|
306
|
+
(0, chai_1.expect)(addInjectableStub.notCalled).to.be.true;
|
|
307
|
+
});
|
|
308
|
+
it('should call "insertEnhancerMetadataCache"', () => {
|
|
309
|
+
(0, chai_1.expect)(insertEnhancerMetadataCacheStub.calledWith({
|
|
310
|
+
moduleToken: token,
|
|
311
|
+
classRef: HostCls,
|
|
312
|
+
enhancerRef: injectableRef,
|
|
313
|
+
methodKey,
|
|
314
|
+
subtype,
|
|
315
|
+
})).to.be.true;
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
class CompMethod {
|
|
320
|
+
method() { }
|
|
321
|
+
method2() { }
|
|
322
|
+
}
|
|
323
|
+
__decorate([
|
|
324
|
+
(0, use_guards_decorator_1.UseGuards)(Guard),
|
|
325
|
+
__metadata("design:type", Function),
|
|
326
|
+
__metadata("design:paramtypes", []),
|
|
327
|
+
__metadata("design:returntype", void 0)
|
|
328
|
+
], CompMethod.prototype, "method", null);
|
|
329
|
+
__decorate([
|
|
330
|
+
(0, use_guards_decorator_1.UseGuards)(Guard, Guard),
|
|
331
|
+
__metadata("design:type", Function),
|
|
332
|
+
__metadata("design:paramtypes", []),
|
|
333
|
+
__metadata("design:returntype", void 0)
|
|
334
|
+
], CompMethod.prototype, "method2", null);
|
|
335
|
+
describe("reflectKeyMetadata", () => {
|
|
336
|
+
it("should return undefined", () => {
|
|
337
|
+
const result = scanner.reflectKeyMetadata(TestComponent, "key", "method");
|
|
338
|
+
(0, chai_1.expect)(result).to.be.undefined;
|
|
339
|
+
});
|
|
340
|
+
it("should return an array that consists of 1 element", () => {
|
|
341
|
+
const methodKey = "method";
|
|
342
|
+
const result = scanner.reflectKeyMetadata(CompMethod, constants_1.GUARDS_METADATA, methodKey);
|
|
343
|
+
(0, chai_1.expect)(result).to.be.deep.equal({ methodKey, metadata: [Guard] });
|
|
344
|
+
});
|
|
345
|
+
it("should return an array that consists of 2 elements", () => {
|
|
346
|
+
const methodKey = "method2";
|
|
347
|
+
const result = scanner.reflectKeyMetadata(CompMethod, constants_1.GUARDS_METADATA, methodKey);
|
|
348
|
+
(0, chai_1.expect)(result).to.be.deep.equal({ methodKey, metadata: [Guard, Guard] });
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
describe("insertModule", () => {
|
|
352
|
+
it("should call forwardRef() when forwardRef property exists", () => {
|
|
353
|
+
sinon_1.default.stub(container, "addModule").returns({});
|
|
354
|
+
const module = { forwardRef: sinon_1.default.spy() };
|
|
355
|
+
scanner.insertModule(module, []);
|
|
356
|
+
(0, chai_1.expect)(module.forwardRef.called).to.be.true;
|
|
357
|
+
});
|
|
358
|
+
it('should throw "InvalidClassModuleException" exception when supplying a class annotated with `@Injectable()` decorator', () => {
|
|
359
|
+
sinon_1.default.stub(container, "addModule").returns({});
|
|
360
|
+
(0, chai_1.expect)(scanner.insertModule(TestComponent, [])).to.be.rejectedWith(invalid_class_module_exception_1.InvalidClassModuleException);
|
|
361
|
+
});
|
|
362
|
+
it('should throw "InvalidClassModuleException" exception when supplying a class annotated with (only) `@Catch()` decorator', () => {
|
|
363
|
+
sinon_1.default.stub(container, "addModule").returns({});
|
|
364
|
+
(0, chai_1.expect)(scanner.insertModule(TestExceptionFilterWithoutInjectable, [])).to.be.rejectedWith(invalid_class_module_exception_1.InvalidClassModuleException);
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
describe("insertImport", () => {
|
|
368
|
+
it("should call forwardRef() when forwardRef property exists", async () => {
|
|
369
|
+
const module = { forwardRef: sinon_1.default.stub().returns({}) };
|
|
370
|
+
sinon_1.default.stub(container, "addImport").returns({});
|
|
371
|
+
await scanner.insertImport(module, [], "test");
|
|
372
|
+
(0, chai_1.expect)(module.forwardRef.called).to.be.true;
|
|
373
|
+
});
|
|
374
|
+
describe('when "related" is nil', () => {
|
|
375
|
+
it("should throw exception", async () => {
|
|
376
|
+
let error;
|
|
377
|
+
try {
|
|
378
|
+
await scanner.insertImport(undefined, [], "test");
|
|
379
|
+
}
|
|
380
|
+
catch (e) {
|
|
381
|
+
error = e;
|
|
382
|
+
}
|
|
383
|
+
(0, chai_1.expect)(error).to.not.be.undefined;
|
|
384
|
+
});
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
describe("insertProvider", () => {
|
|
388
|
+
const token = "token";
|
|
389
|
+
describe("when provider is not custom", () => {
|
|
390
|
+
it('should call container "addProvider" with expected args', () => {
|
|
391
|
+
const provider = {};
|
|
392
|
+
const expectation = mockContainer.expects("addProvider").withArgs(provider, token);
|
|
393
|
+
mockContainer.expects("addProvider").callsFake(() => false);
|
|
394
|
+
scanner.insertProvider(provider, token);
|
|
395
|
+
expectation.verify();
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
describe("when provider is custom", () => {
|
|
399
|
+
describe("and is global", () => {
|
|
400
|
+
const provider = {
|
|
401
|
+
provide: constants_1.APP_INTERCEPTOR,
|
|
402
|
+
useValue: true,
|
|
403
|
+
};
|
|
404
|
+
it('should call container "addProvider" with expected args', () => {
|
|
405
|
+
const expectation = mockContainer.expects("addProvider").atLeast(1);
|
|
406
|
+
mockContainer.expects("addProvider").callsFake(() => false);
|
|
407
|
+
scanner.insertProvider(provider, token);
|
|
408
|
+
expectation.verify();
|
|
409
|
+
});
|
|
410
|
+
it('should push new object to "applicationProvidersApplyMap" array', () => {
|
|
411
|
+
mockContainer.expects("addProvider").callsFake(() => false);
|
|
412
|
+
scanner.insertProvider(provider, token);
|
|
413
|
+
const applyMap = scanner.applicationProvidersApplyMap;
|
|
414
|
+
(0, chai_1.expect)(applyMap).to.have.length(1);
|
|
415
|
+
(0, chai_1.expect)(applyMap[0].moduleKey).to.be.eql(token);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
describe("and is global and request/transient scoped", () => {
|
|
419
|
+
const provider = {
|
|
420
|
+
provide: constants_1.APP_INTERCEPTOR,
|
|
421
|
+
useValue: true,
|
|
422
|
+
scope: interfaces_1.Scope.REQUEST,
|
|
423
|
+
};
|
|
424
|
+
it('should call container "addInjectable" with expected args', () => {
|
|
425
|
+
const expectation = mockContainer.expects("addInjectable").atLeast(1);
|
|
426
|
+
mockContainer.expects("addInjectable").callsFake(() => false);
|
|
427
|
+
scanner.insertProvider(provider, token);
|
|
428
|
+
expectation.verify();
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
describe("and is not global", () => {
|
|
432
|
+
const component = {
|
|
433
|
+
provide: "CUSTOM",
|
|
434
|
+
useValue: true,
|
|
435
|
+
};
|
|
436
|
+
it('should call container "addProvider" with expected args', () => {
|
|
437
|
+
const expectation = mockContainer.expects("addProvider").withArgs(component, token);
|
|
438
|
+
mockContainer.expects("addProvider").callsFake(() => false);
|
|
439
|
+
scanner.insertProvider(component, token);
|
|
440
|
+
expectation.verify();
|
|
441
|
+
});
|
|
442
|
+
it('should not push new object to "applicationProvidersApplyMap" array', () => {
|
|
443
|
+
(0, chai_1.expect)(scanner.applicationProvidersApplyMap).to.have.length(0);
|
|
444
|
+
mockContainer.expects("addProvider").callsFake(() => false);
|
|
445
|
+
scanner.insertProvider(component, token);
|
|
446
|
+
(0, chai_1.expect)(scanner.applicationProvidersApplyMap).to.have.length(0);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
describe("applyApplicationProviders", () => {
|
|
452
|
+
it("should apply each provider", () => {
|
|
453
|
+
const provider = {
|
|
454
|
+
moduleKey: "moduleToken",
|
|
455
|
+
providerKey: "providerToken",
|
|
456
|
+
type: constants_1.APP_GUARD,
|
|
457
|
+
};
|
|
458
|
+
scanner.applicationProvidersApplyMap = [provider];
|
|
459
|
+
const expectedInstance = {};
|
|
460
|
+
const instanceWrapper = {
|
|
461
|
+
instance: expectedInstance,
|
|
462
|
+
};
|
|
463
|
+
mockContainer.expects("getModules").callsFake(() => ({
|
|
464
|
+
get: () => ({
|
|
465
|
+
providers: { get: () => instanceWrapper },
|
|
466
|
+
}),
|
|
467
|
+
}));
|
|
468
|
+
const applySpy = sinon_1.default.spy();
|
|
469
|
+
sinon_1.default.stub(scanner, "getApplyProvidersMap").callsFake(() => ({
|
|
470
|
+
[provider.type]: applySpy,
|
|
471
|
+
}));
|
|
472
|
+
const insertAttachedEnhancerStub = sinon_1.default.stub(graphInspector, "insertAttachedEnhancer");
|
|
473
|
+
scanner.applyApplicationProviders();
|
|
474
|
+
(0, chai_1.expect)(applySpy.called).to.be.true;
|
|
475
|
+
(0, chai_1.expect)(applySpy.calledWith(expectedInstance)).to.be.true;
|
|
476
|
+
(0, chai_1.expect)(insertAttachedEnhancerStub.calledWith(instanceWrapper)).to.be.true;
|
|
477
|
+
});
|
|
478
|
+
it("should apply each globally scoped provider", () => {
|
|
479
|
+
const provider = {
|
|
480
|
+
moduleKey: "moduleToken",
|
|
481
|
+
providerKey: "providerToken",
|
|
482
|
+
type: constants_1.APP_GUARD,
|
|
483
|
+
scope: interfaces_1.Scope.REQUEST,
|
|
484
|
+
};
|
|
485
|
+
scanner.applicationProvidersApplyMap = [provider];
|
|
486
|
+
const expectedInstanceWrapper = new wrapper_1.InstanceWrapper();
|
|
487
|
+
mockContainer.expects("getModules").callsFake(() => ({
|
|
488
|
+
get: () => ({
|
|
489
|
+
injectables: { get: () => expectedInstanceWrapper },
|
|
490
|
+
}),
|
|
491
|
+
}));
|
|
492
|
+
const applySpy = sinon_1.default.spy();
|
|
493
|
+
sinon_1.default.stub(scanner, "getApplyRequestProvidersMap").callsFake(() => ({
|
|
494
|
+
[provider.type]: applySpy,
|
|
495
|
+
}));
|
|
496
|
+
const insertAttachedEnhancerStub = sinon_1.default.stub(graphInspector, "insertAttachedEnhancer");
|
|
497
|
+
scanner.applyApplicationProviders();
|
|
498
|
+
(0, chai_1.expect)(applySpy.called).to.be.true;
|
|
499
|
+
(0, chai_1.expect)(applySpy.calledWith(expectedInstanceWrapper)).to.be.true;
|
|
500
|
+
(0, chai_1.expect)(insertAttachedEnhancerStub.calledWith(expectedInstanceWrapper)).to.be.true;
|
|
501
|
+
});
|
|
502
|
+
});
|
|
503
|
+
describe("addScopedEnhancersMetadata", () => {
|
|
504
|
+
const provider = {
|
|
505
|
+
moduleKey: "moduleToken",
|
|
506
|
+
providerKey: "providerToken",
|
|
507
|
+
type: constants_1.APP_GUARD,
|
|
508
|
+
scope: interfaces_1.Scope.REQUEST,
|
|
509
|
+
};
|
|
510
|
+
it("should add enhancers metadata to every controller and every entry provider", () => {
|
|
511
|
+
scanner.applicationProvidersApplyMap = [provider];
|
|
512
|
+
const instance = new wrapper_1.InstanceWrapper({ name: "test" });
|
|
513
|
+
const controllers = new Map();
|
|
514
|
+
const providers = new Map();
|
|
515
|
+
const fakeController = new wrapper_1.InstanceWrapper();
|
|
516
|
+
const fakeProvider = new wrapper_1.InstanceWrapper();
|
|
517
|
+
const providerToken = "entryProvider";
|
|
518
|
+
controllers.set("test", fakeController);
|
|
519
|
+
providers.set(providerToken, fakeProvider);
|
|
520
|
+
mockContainer.expects("getModules").callsFake(() => ({
|
|
521
|
+
get: () => ({
|
|
522
|
+
injectables: { get: () => instance },
|
|
523
|
+
controllers,
|
|
524
|
+
entryProviders: Array.from(providers.values()),
|
|
525
|
+
}),
|
|
526
|
+
values() {
|
|
527
|
+
return [this.get()];
|
|
528
|
+
},
|
|
529
|
+
}));
|
|
530
|
+
const addEnhancerMetadataProviderSpy = sinon_1.default.spy(fakeProvider, "addEnhancerMetadata");
|
|
531
|
+
scanner.addScopedEnhancersMetadata();
|
|
532
|
+
(0, chai_1.expect)(addEnhancerMetadataProviderSpy.called).to.be.true;
|
|
533
|
+
(0, chai_1.expect)(addEnhancerMetadataProviderSpy.calledWith(instance)).to.be.true;
|
|
534
|
+
});
|
|
535
|
+
});
|
|
536
|
+
describe("getApplyProvidersMap", () => {
|
|
537
|
+
describe(`when token is ${constants_1.APP_INTERCEPTOR}`, () => {
|
|
538
|
+
it('call "addGlobalInterceptor"', () => {
|
|
539
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalInterceptor");
|
|
540
|
+
scanner.getApplyProvidersMap()[constants_1.APP_INTERCEPTOR](null);
|
|
541
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
542
|
+
});
|
|
543
|
+
});
|
|
544
|
+
describe(`when token is ${constants_1.APP_GUARD}`, () => {
|
|
545
|
+
it('call "addGlobalGuard"', () => {
|
|
546
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalGuard");
|
|
547
|
+
scanner.getApplyProvidersMap()[constants_1.APP_GUARD](null);
|
|
548
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
549
|
+
});
|
|
550
|
+
});
|
|
551
|
+
describe(`when token is ${constants_1.APP_PIPE}`, () => {
|
|
552
|
+
it('call "addGlobalPipe"', () => {
|
|
553
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalPipe");
|
|
554
|
+
scanner.getApplyProvidersMap()[constants_1.APP_PIPE](null);
|
|
555
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
556
|
+
});
|
|
557
|
+
});
|
|
558
|
+
describe(`when token is ${constants_1.APP_FILTER}`, () => {
|
|
559
|
+
it('call "addGlobalFilter"', () => {
|
|
560
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalFilter");
|
|
561
|
+
scanner.getApplyProvidersMap()[constants_1.APP_FILTER](null);
|
|
562
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
563
|
+
});
|
|
564
|
+
});
|
|
565
|
+
});
|
|
566
|
+
describe("getApplyRequestProvidersMap", () => {
|
|
567
|
+
describe(`when token is ${constants_1.APP_INTERCEPTOR}`, () => {
|
|
568
|
+
it('call "addGlobalRequestInterceptor"', () => {
|
|
569
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalRequestInterceptor");
|
|
570
|
+
scanner.getApplyRequestProvidersMap()[constants_1.APP_INTERCEPTOR](null);
|
|
571
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
572
|
+
});
|
|
573
|
+
});
|
|
574
|
+
describe(`when token is ${constants_1.APP_GUARD}`, () => {
|
|
575
|
+
it('call "addGlobalRequestGuard"', () => {
|
|
576
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalRequestGuard");
|
|
577
|
+
scanner.getApplyRequestProvidersMap()[constants_1.APP_GUARD](null);
|
|
578
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
579
|
+
});
|
|
580
|
+
});
|
|
581
|
+
describe(`when token is ${constants_1.APP_PIPE}`, () => {
|
|
582
|
+
it('call "addGlobalRequestPipe"', () => {
|
|
583
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalRequestPipe");
|
|
584
|
+
scanner.getApplyRequestProvidersMap()[constants_1.APP_PIPE](null);
|
|
585
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
describe(`when token is ${constants_1.APP_FILTER}`, () => {
|
|
589
|
+
it('call "addGlobalRequestFilter"', () => {
|
|
590
|
+
const addSpy = sinon_1.default.spy(scanner.applicationConfig, "addGlobalRequestFilter");
|
|
591
|
+
scanner.getApplyRequestProvidersMap()[constants_1.APP_FILTER](null);
|
|
592
|
+
(0, chai_1.expect)(addSpy.called).to.be.true;
|
|
593
|
+
});
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
describe("scanForModules", () => {
|
|
597
|
+
it("should throw an exception when the imports array includes undefined", () => {
|
|
598
|
+
try {
|
|
599
|
+
scanner.scanForModules({
|
|
600
|
+
moduleDefinition: UndefinedModule,
|
|
601
|
+
scope: [UndefinedModule],
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
catch (exception) {
|
|
605
|
+
(0, chai_1.expect)(exception instanceof undefined_module_exception_1.UndefinedModuleException).to.be.true;
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
it("should throw an exception when the imports array includes an invalid value", () => {
|
|
609
|
+
try {
|
|
610
|
+
scanner.scanForModules({
|
|
611
|
+
moduleDefinition: InvalidModule,
|
|
612
|
+
scope: [InvalidModule],
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
catch (exception) {
|
|
616
|
+
(0, chai_1.expect)(exception instanceof invalid_module_exception_1.InvalidModuleException).to.be.true;
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
});
|
|
620
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "reflect-metadata";
|