@depup/nestjs__core 11.2.3-depup.0 → 12.0.2-depup.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/README.md +2 -2
- package/adapters/http-adapter.d.ts +372 -3
- package/adapters/http-adapter.js +135 -5
- package/adapters/index.d.ts +1 -1
- package/adapters/index.js +1 -4
- package/application-config.d.ts +13 -4
- package/application-config.js +34 -15
- package/changes.json +1 -1
- package/constants.d.ts +1 -1
- package/constants.js +10 -13
- package/discovery/discoverable-meta-host-collection.d.ts +3 -3
- package/discovery/discoverable-meta-host-collection.js +25 -20
- package/discovery/discovery-module.js +9 -12
- package/discovery/discovery-service.d.ts +4 -4
- package/discovery/discovery-service.js +17 -19
- package/discovery/index.d.ts +2 -2
- package/discovery/index.js +2 -5
- package/errors/exception-handler.js +3 -7
- package/errors/exceptions/circular-dependency.exception.d.ts +1 -1
- package/errors/exceptions/circular-dependency.exception.js +2 -6
- package/errors/exceptions/index.d.ts +9 -8
- package/errors/exceptions/index.js +9 -11
- package/errors/exceptions/invalid-class-module.exception.d.ts +1 -1
- package/errors/exceptions/invalid-class-module.exception.js +4 -8
- package/errors/exceptions/invalid-class-scope.exception.d.ts +2 -2
- package/errors/exceptions/invalid-class-scope.exception.js +6 -10
- package/errors/exceptions/invalid-class.exception.d.ts +1 -1
- package/errors/exceptions/invalid-class.exception.js +4 -8
- package/errors/exceptions/invalid-exception-filter.exception.d.ts +1 -1
- package/errors/exceptions/invalid-exception-filter.exception.js +4 -8
- package/errors/exceptions/invalid-middleware-configuration.exception.d.ts +1 -1
- package/errors/exceptions/invalid-middleware-configuration.exception.js +4 -8
- package/errors/exceptions/invalid-middleware.exception.d.ts +1 -1
- package/errors/exceptions/invalid-middleware.exception.js +4 -8
- package/errors/exceptions/invalid-module.exception.d.ts +1 -1
- package/errors/exceptions/invalid-module.exception.js +4 -8
- package/errors/exceptions/route-conflict.exception.d.ts +4 -0
- package/errors/exceptions/route-conflict.exception.js +7 -0
- package/errors/exceptions/runtime.exception.js +1 -5
- package/errors/exceptions/undefined-dependency.exception.d.ts +3 -3
- package/errors/exceptions/undefined-dependency.exception.js +4 -8
- package/errors/exceptions/undefined-forwardref.exception.d.ts +2 -2
- package/errors/exceptions/undefined-forwardref.exception.js +4 -8
- package/errors/exceptions/undefined-module.exception.d.ts +1 -1
- package/errors/exceptions/undefined-module.exception.js +4 -8
- package/errors/exceptions/unknown-dependencies.exception.d.ts +3 -3
- package/errors/exceptions/unknown-dependencies.exception.js +8 -8
- package/errors/exceptions/unknown-element.exception.d.ts +1 -1
- package/errors/exceptions/unknown-element.exception.js +2 -6
- package/errors/exceptions/unknown-export.exception.d.ts +1 -1
- package/errors/exceptions/unknown-export.exception.js +4 -8
- package/errors/exceptions/unknown-module.exception.d.ts +1 -1
- package/errors/exceptions/unknown-module.exception.js +2 -6
- package/errors/exceptions/unknown-request-mapping.exception.d.ts +1 -1
- package/errors/exceptions/unknown-request-mapping.exception.js +4 -8
- package/errors/exceptions-zone.js +6 -10
- package/errors/messages.d.ts +5 -2
- package/errors/messages.js +26 -32
- package/exceptions/base-exception-filter-context.d.ts +6 -7
- package/exceptions/base-exception-filter-context.js +13 -16
- package/exceptions/base-exception-filter.d.ts +4 -4
- package/exceptions/base-exception-filter.js +46 -23
- package/exceptions/exceptions-handler.d.ts +4 -4
- package/exceptions/exceptions-handler.js +8 -16
- package/exceptions/external-exception-filter-context.d.ts +8 -8
- package/exceptions/external-exception-filter-context.js +14 -18
- package/exceptions/external-exception-filter.d.ts +1 -1
- package/exceptions/external-exception-filter.js +4 -8
- package/exceptions/external-exceptions-handler.d.ts +3 -3
- package/exceptions/external-exceptions-handler.js +8 -16
- package/exceptions/index.d.ts +1 -1
- package/exceptions/index.js +1 -4
- package/guards/constants.js +1 -4
- package/guards/guards-consumer.d.ts +4 -3
- package/guards/guards-consumer.js +8 -12
- package/guards/guards-context-creator.d.ts +11 -10
- package/guards/guards-context-creator.js +18 -20
- package/guards/index.d.ts +3 -3
- package/guards/index.js +3 -6
- package/helpers/barrier.js +5 -5
- package/helpers/context-creator.d.ts +2 -2
- package/helpers/context-creator.js +3 -7
- package/helpers/context-id-factory.d.ts +1 -1
- package/helpers/context-id-factory.js +10 -14
- package/helpers/context-utils.d.ts +6 -3
- package/helpers/context-utils.js +7 -12
- package/helpers/execution-context-host.d.ts +3 -3
- package/helpers/execution-context-host.js +5 -6
- package/helpers/external-context-creator.d.ts +15 -18
- package/helpers/external-context-creator.js +54 -43
- package/helpers/external-proxy.d.ts +2 -2
- package/helpers/external-proxy.js +3 -7
- package/helpers/get-class-scope.d.ts +2 -2
- package/helpers/get-class-scope.js +3 -6
- package/helpers/handler-metadata-storage.d.ts +4 -4
- package/helpers/handler-metadata-storage.js +7 -15
- package/helpers/http-adapter-host.d.ts +1 -1
- package/helpers/http-adapter-host.js +6 -11
- package/helpers/index.d.ts +3 -3
- package/helpers/index.js +3 -6
- package/helpers/interfaces/external-handler-metadata.interface.d.ts +2 -2
- package/helpers/interfaces/external-handler-metadata.interface.js +1 -2
- package/helpers/interfaces/index.d.ts +2 -2
- package/helpers/interfaces/index.js +2 -5
- package/helpers/interfaces/params-metadata.interface.d.ts +1 -1
- package/helpers/interfaces/params-metadata.interface.js +1 -2
- package/helpers/is-durable.d.ts +1 -1
- package/helpers/is-durable.js +3 -6
- package/helpers/load-adapter.d.ts +1 -1
- package/helpers/load-adapter.js +5 -8
- package/helpers/messages.d.ts +1 -1
- package/helpers/messages.js +10 -20
- package/helpers/optional-require.d.ts +1 -1
- package/helpers/optional-require.js +2 -5
- package/helpers/rethrow.js +1 -5
- package/helpers/router-method-factory.d.ts +2 -2
- package/helpers/router-method-factory.js +21 -25
- package/helpers/safe-instance-decorator.js +3 -6
- package/hooks/before-app-shutdown.hook.d.ts +3 -3
- package/hooks/before-app-shutdown.hook.js +25 -23
- package/hooks/index.d.ts +5 -5
- package/hooks/index.js +5 -8
- package/hooks/on-app-bootstrap.hook.d.ts +3 -3
- package/hooks/on-app-bootstrap.hook.js +15 -22
- package/hooks/on-app-shutdown.hook.d.ts +3 -3
- package/hooks/on-app-shutdown.hook.js +25 -23
- package/hooks/on-module-destroy.hook.d.ts +3 -3
- package/hooks/on-module-destroy.hook.js +25 -23
- package/hooks/on-module-init.hook.d.ts +3 -3
- package/hooks/on-module-init.hook.js +15 -22
- package/hooks/utils/get-instances-grouped-by-hierarchy-level.d.ts +3 -0
- package/hooks/utils/get-instances-grouped-by-hierarchy-level.js +27 -0
- package/hooks/utils/get-sorted-hierarchy-levels.d.ts +1 -0
- package/hooks/utils/get-sorted-hierarchy-levels.js +7 -0
- package/index.d.ts +16 -16
- package/index.js +17 -26
- package/injector/abstract-instance-resolver.d.ts +6 -6
- package/injector/abstract-instance-resolver.js +7 -11
- package/injector/compiler.d.ts +2 -2
- package/injector/compiler.js +2 -5
- package/injector/constants.d.ts +1 -1
- package/injector/constants.js +2 -5
- package/injector/container.d.ts +13 -14
- package/injector/container.js +40 -40
- package/injector/helpers/is-debug-mode.util.d.ts +1 -0
- package/injector/helpers/is-debug-mode.util.js +3 -0
- package/injector/helpers/provider-classifier.d.ts +1 -1
- package/injector/helpers/provider-classifier.js +5 -10
- package/injector/helpers/silent-logger.js +9 -16
- package/injector/index.d.ts +6 -6
- package/injector/index.js +5 -8
- package/injector/injector.d.ts +7 -7
- package/injector/injector.js +104 -93
- package/injector/inquirer/index.d.ts +1 -1
- package/injector/inquirer/index.js +1 -4
- package/injector/inquirer/inquirer-constants.js +1 -4
- package/injector/inquirer/inquirer-providers.d.ts +1 -1
- package/injector/inquirer/inquirer-providers.js +5 -8
- package/injector/instance-links-host.d.ts +3 -3
- package/injector/instance-links-host.js +8 -11
- package/injector/instance-loader.d.ts +5 -5
- package/injector/instance-loader.js +17 -11
- package/injector/instance-wrapper.d.ts +8 -6
- package/injector/instance-wrapper.js +98 -81
- package/injector/internal-core-module/index.d.ts +1 -1
- package/injector/internal-core-module/index.js +1 -4
- package/injector/internal-core-module/internal-core-module-factory.d.ts +6 -6
- package/injector/internal-core-module/internal-core-module-factory.js +23 -27
- package/injector/internal-core-module/internal-core-module.d.ts +2 -2
- package/injector/internal-core-module/internal-core-module.js +17 -20
- package/injector/internal-providers-storage.d.ts +2 -2
- package/injector/internal-providers-storage.js +4 -9
- package/injector/lazy-module-loader/lazy-module-loader-options.interface.js +1 -2
- package/injector/lazy-module-loader/lazy-module-loader.d.ts +8 -8
- package/injector/lazy-module-loader/lazy-module-loader.js +36 -27
- package/injector/module-ref.d.ts +7 -7
- package/injector/module-ref.js +30 -35
- package/injector/module.d.ts +5 -5
- package/injector/module.js +97 -83
- package/injector/modules-container.d.ts +1 -1
- package/injector/modules-container.js +5 -12
- package/injector/opaque-key-factory/by-reference-module-opaque-key-factory.d.ts +2 -4
- package/injector/opaque-key-factory/by-reference-module-opaque-key-factory.js +6 -9
- package/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.d.ts +2 -3
- package/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.js +17 -22
- package/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts +1 -3
- package/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.js +1 -2
- package/injector/settlement-signal.js +5 -7
- package/injector/topology-tree/topology-tree.d.ts +1 -1
- package/injector/topology-tree/topology-tree.js +6 -9
- package/injector/topology-tree/tree-node.js +4 -6
- package/inspector/deterministic-uuid-registry.js +2 -6
- package/inspector/graph-inspector.d.ts +7 -7
- package/inspector/graph-inspector.js +10 -12
- package/inspector/index.d.ts +4 -4
- package/inspector/index.js +4 -7
- package/inspector/initialize-on-preview.allowlist.d.ts +1 -1
- package/inspector/initialize-on-preview.allowlist.js +2 -6
- package/inspector/interfaces/edge.interface.d.ts +1 -1
- package/inspector/interfaces/edge.interface.js +1 -2
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +3 -3
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +1 -2
- package/inspector/interfaces/entrypoint.interface.d.ts +2 -2
- package/inspector/interfaces/entrypoint.interface.js +1 -2
- package/inspector/interfaces/extras.interface.d.ts +1 -1
- package/inspector/interfaces/extras.interface.js +1 -2
- package/inspector/interfaces/node.interface.d.ts +2 -2
- package/inspector/interfaces/node.interface.js +1 -2
- package/inspector/interfaces/serialized-graph-json.interface.d.ts +6 -6
- package/inspector/interfaces/serialized-graph-json.interface.js +1 -2
- package/inspector/interfaces/serialized-graph-metadata.interface.d.ts +1 -1
- package/inspector/interfaces/serialized-graph-metadata.interface.js +1 -2
- package/inspector/noop-graph-inspector.d.ts +1 -1
- package/inspector/noop-graph-inspector.js +2 -5
- package/inspector/partial-graph.host.d.ts +2 -2
- package/inspector/partial-graph.host.js +2 -5
- package/inspector/serialized-graph.d.ts +7 -7
- package/inspector/serialized-graph.js +35 -40
- package/inspector/uuid-factory.js +8 -12
- package/interceptors/index.d.ts +2 -2
- package/interceptors/index.js +2 -5
- package/interceptors/interceptors-consumer.d.ts +4 -3
- package/interceptors/interceptors-consumer.js +14 -18
- package/interceptors/interceptors-context-creator.d.ts +10 -9
- package/interceptors/interceptors-context-creator.js +18 -20
- package/interfaces/index.d.ts +2 -0
- package/interfaces/index.js +2 -0
- package/interfaces/module-definition.interface.d.ts +2 -2
- package/interfaces/module-definition.interface.js +1 -2
- package/interfaces/module-override.interface.d.ts +1 -1
- package/interfaces/module-override.interface.js +1 -2
- package/internal.d.ts +42 -0
- package/internal.js +50 -0
- package/metadata-scanner.d.ts +1 -1
- package/metadata-scanner.js +8 -14
- package/middleware/builder.d.ts +4 -4
- package/middleware/builder.js +82 -80
- package/middleware/container.d.ts +4 -4
- package/middleware/container.js +10 -13
- package/middleware/index.d.ts +1 -1
- package/middleware/index.js +1 -4
- package/middleware/middleware-module.d.ts +8 -9
- package/middleware/middleware-module.js +49 -46
- package/middleware/resolver.d.ts +3 -3
- package/middleware/resolver.js +3 -5
- package/middleware/route-info-path-extractor.d.ts +2 -2
- package/middleware/route-info-path-extractor.js +26 -25
- package/middleware/routes-mapper.d.ts +4 -3
- package/middleware/routes-mapper.js +22 -24
- package/middleware/utils.d.ts +3 -2
- package/middleware/utils.js +34 -45
- package/nest-application-context.d.ts +26 -11
- package/nest-application-context.js +79 -67
- package/nest-application.d.ts +19 -11
- package/nest-application.js +168 -65
- package/nest-factory.d.ts +4 -5
- package/nest-factory.js +61 -68
- package/package.json +17 -9
- package/pipes/index.d.ts +3 -3
- package/pipes/index.js +3 -6
- package/pipes/params-token-factory.d.ts +2 -2
- package/pipes/params-token-factory.js +5 -9
- package/pipes/pipes-consumer.d.ts +3 -7
- package/pipes/pipes-consumer.js +17 -18
- package/pipes/pipes-context-creator.d.ts +10 -9
- package/pipes/pipes-context-creator.js +18 -20
- package/repl/assign-to-object.util.js +1 -4
- package/repl/constants.js +1 -4
- package/repl/index.d.ts +1 -1
- package/repl/index.js +1 -4
- package/repl/native-functions/debug-repl-fn.d.ts +2 -2
- package/repl/native-functions/debug-repl-fn.js +14 -21
- package/repl/native-functions/get-repl-fn.d.ts +2 -2
- package/repl/native-functions/get-repl-fn.js +8 -15
- package/repl/native-functions/help-repl-fn.d.ts +2 -2
- package/repl/native-functions/help-repl-fn.js +13 -20
- package/repl/native-functions/index.d.ts +6 -6
- package/repl/native-functions/index.js +6 -9
- package/repl/native-functions/methods-repl-fn.d.ts +2 -2
- package/repl/native-functions/methods-repl-fn.js +12 -19
- package/repl/native-functions/resolve-repl-fn.d.ts +2 -2
- package/repl/native-functions/resolve-repl-fn.js +7 -14
- package/repl/native-functions/select-relp-fn.d.ts +2 -2
- package/repl/native-functions/select-relp-fn.js +7 -14
- package/repl/repl-context.d.ts +3 -3
- package/repl/repl-context.js +21 -23
- package/repl/repl-function.d.ts +3 -3
- package/repl/repl-function.js +5 -7
- package/repl/repl-logger.js +10 -14
- package/repl/repl-native-commands.js +1 -4
- package/repl/repl.d.ts +1 -1
- package/repl/repl.interfaces.d.ts +2 -2
- package/repl/repl.interfaces.js +1 -2
- package/repl/repl.js +17 -20
- package/router/index.d.ts +3 -3
- package/router/index.js +3 -8
- package/router/interfaces/exceptions-filter.interface.d.ts +3 -3
- package/router/interfaces/exceptions-filter.interface.js +1 -2
- package/router/interfaces/exclude-route-metadata.interface.d.ts +1 -1
- package/router/interfaces/exclude-route-metadata.interface.js +1 -2
- package/router/interfaces/index.d.ts +4 -1
- package/router/interfaces/index.js +4 -4
- package/router/interfaces/resolved-route.interface.d.ts +32 -0
- package/router/interfaces/resolved-route.interface.js +1 -0
- package/router/interfaces/resolver.interface.d.ts +5 -1
- package/router/interfaces/resolver.interface.js +1 -2
- package/router/interfaces/route-conflict.interface.d.ts +14 -0
- package/router/interfaces/route-conflict.interface.js +1 -0
- package/router/interfaces/route-params-factory.interface.d.ts +1 -1
- package/router/interfaces/route-params-factory.interface.js +1 -2
- package/router/interfaces/route-path-metadata.interface.d.ts +2 -2
- package/router/interfaces/route-path-metadata.interface.js +1 -2
- package/router/interfaces/route-resolution-options.interface.d.ts +24 -0
- package/router/interfaces/route-resolution-options.interface.js +1 -0
- package/router/interfaces/routes.interface.d.ts +1 -1
- package/router/interfaces/routes.interface.js +1 -2
- package/router/legacy-route-converter.js +3 -7
- package/router/paths-explorer.d.ts +4 -5
- package/router/paths-explorer.js +11 -15
- package/router/request/index.d.ts +1 -1
- package/router/request/index.js +1 -5
- package/router/request/request-constants.js +2 -5
- package/router/request/request-providers.d.ts +1 -1
- package/router/request/request-providers.js +5 -8
- package/router/route-conflict-detector.d.ts +71 -0
- package/router/route-conflict-detector.js +276 -0
- package/router/route-params-factory.d.ts +2 -2
- package/router/route-params-factory.js +15 -19
- package/router/route-path-factory.d.ts +4 -4
- package/router/route-path-factory.js +19 -22
- package/router/route-specificity-sorter.d.ts +23 -0
- package/router/route-specificity-sorter.js +59 -0
- package/router/router-exception-filters.d.ts +9 -9
- package/router/router-exception-filters.js +15 -18
- package/router/router-execution-context.d.ts +17 -20
- package/router/router-execution-context.js +62 -55
- package/router/router-explorer.d.ts +25 -18
- package/router/router-explorer.js +116 -73
- package/router/router-module.d.ts +4 -4
- package/router/router-module.js +21 -23
- package/router/router-proxy.d.ts +1 -1
- package/router/router-proxy.js +4 -8
- package/router/router-response-controller.d.ts +2 -2
- package/router/router-response-controller.js +23 -27
- package/router/routes-resolver.d.ts +13 -11
- package/router/routes-resolver.js +42 -55
- package/router/sse-stream.d.ts +2 -1
- package/router/sse-stream.js +29 -24
- package/router/utils/exclude-route.util.d.ts +1 -1
- package/router/utils/exclude-route.util.js +7 -12
- package/router/utils/flatten-route-paths.util.d.ts +2 -2
- package/router/utils/flatten-route-paths.util.js +4 -7
- package/router/utils/index.d.ts +2 -2
- package/router/utils/index.js +2 -5
- package/scanner.d.ts +11 -11
- package/scanner.js +66 -67
- package/services/index.d.ts +1 -1
- package/services/index.js +1 -4
- package/services/reflector.service.d.ts +1 -1
- package/services/reflector.service.js +9 -13
- package/tsconfig.build.json +1 -9
package/injector/injector.js
CHANGED
|
@@ -1,53 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class Injector {
|
|
1
|
+
import { Logger, Scope, } from '@nestjs/common';
|
|
2
|
+
import { OPTIONAL_DEPS_METADATA, OPTIONAL_PROPERTY_DEPS_METADATA, PARAMTYPES_METADATA, PROPERTY_DEPS_METADATA, SELF_DECLARED_DEPS_METADATA, clc, isFunction, isNil, isObject, isString, isSymbol, isUndefined, } from '@nestjs/common/internal';
|
|
3
|
+
import { iterate } from 'iterare';
|
|
4
|
+
import { performance } from 'perf_hooks';
|
|
5
|
+
import { CircularDependencyException } from '../errors/exceptions/index.js';
|
|
6
|
+
import { RuntimeException } from '../errors/exceptions/runtime.exception.js';
|
|
7
|
+
import { UndefinedDependencyException } from '../errors/exceptions/undefined-dependency.exception.js';
|
|
8
|
+
import { UnknownDependenciesException } from '../errors/exceptions/unknown-dependencies.exception.js';
|
|
9
|
+
import { Barrier } from '../helpers/barrier.js';
|
|
10
|
+
import { makeSafeInstanceDecorator } from '../helpers/safe-instance-decorator.js';
|
|
11
|
+
import { STATIC_CONTEXT } from './constants.js';
|
|
12
|
+
import { isDebugMode } from './helpers/is-debug-mode.util.js';
|
|
13
|
+
import { INQUIRER } from './inquirer/index.js';
|
|
14
|
+
import { InstanceWrapper, } from './instance-wrapper.js';
|
|
15
|
+
import { SettlementSignal } from './settlement-signal.js';
|
|
16
|
+
export class Injector {
|
|
17
|
+
options;
|
|
18
|
+
logger = new Logger('InjectorLogger');
|
|
19
|
+
instanceDecorator = (target) => target;
|
|
21
20
|
constructor(options) {
|
|
22
21
|
this.options = options;
|
|
23
|
-
this.logger = new common_1.Logger('InjectorLogger');
|
|
24
|
-
this.instanceDecorator = (target) => target;
|
|
25
22
|
if (options?.instanceDecorator) {
|
|
26
|
-
this.instanceDecorator =
|
|
23
|
+
this.instanceDecorator = makeSafeInstanceDecorator(options.instanceDecorator);
|
|
27
24
|
}
|
|
28
25
|
}
|
|
29
|
-
loadPrototype({ token }, collection, contextId =
|
|
26
|
+
loadPrototype({ token }, collection, contextId = STATIC_CONTEXT) {
|
|
30
27
|
if (!collection) {
|
|
31
28
|
return;
|
|
32
29
|
}
|
|
33
30
|
const target = collection.get(token);
|
|
34
31
|
const instance = target.createPrototype(contextId);
|
|
35
32
|
if (instance) {
|
|
36
|
-
const wrapper = new
|
|
33
|
+
const wrapper = new InstanceWrapper({
|
|
37
34
|
...target,
|
|
38
35
|
instance,
|
|
39
36
|
});
|
|
40
37
|
collection.set(token, wrapper);
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
|
-
async loadInstance(wrapper, collection, moduleRef, resolutionContext = { contextId:
|
|
40
|
+
async loadInstance(wrapper, collection, moduleRef, resolutionContext = { contextId: STATIC_CONTEXT }) {
|
|
44
41
|
const inquirerId = this.getContextInquirerId(resolutionContext);
|
|
45
42
|
const instanceHost = wrapper.getInstanceByContextId(this.getContextId(resolutionContext.contextId, wrapper), inquirerId);
|
|
46
43
|
if (instanceHost.isPending) {
|
|
47
44
|
const settlementSignal = wrapper.settlementSignal;
|
|
48
45
|
if (resolutionContext.inquirer &&
|
|
49
46
|
settlementSignal?.isCycle(resolutionContext.inquirer.id)) {
|
|
50
|
-
throw new
|
|
47
|
+
throw new CircularDependencyException(`"${wrapper.name}"`);
|
|
51
48
|
}
|
|
52
49
|
return instanceHost.donePromise.then((err) => {
|
|
53
50
|
if (err) {
|
|
@@ -59,8 +56,8 @@ class Injector {
|
|
|
59
56
|
const token = wrapper.token || wrapper.name;
|
|
60
57
|
const { inject } = wrapper;
|
|
61
58
|
const targetWrapper = collection.get(token);
|
|
62
|
-
if (
|
|
63
|
-
throw new
|
|
59
|
+
if (isUndefined(targetWrapper)) {
|
|
60
|
+
throw new RuntimeException();
|
|
64
61
|
}
|
|
65
62
|
if (instanceHost.isResolved) {
|
|
66
63
|
return settlementSignal.complete();
|
|
@@ -68,10 +65,11 @@ class Injector {
|
|
|
68
65
|
try {
|
|
69
66
|
const t0 = this.getNowTimestamp();
|
|
70
67
|
const localResolutionContext = this.createResolutionContext(resolutionContext.contextId, wrapper, inquirerId);
|
|
71
|
-
const callback = async (instances) => {
|
|
68
|
+
const callback = async (instances, depth = 0) => {
|
|
72
69
|
const properties = await this.resolveProperties(wrapper, moduleRef, inject, localResolutionContext, resolutionContext.inquirer);
|
|
73
70
|
const instance = await this.instantiateClass(instances, wrapper, targetWrapper, wrapper.isTransient ? localResolutionContext : resolutionContext);
|
|
74
71
|
this.applyProperties(instance, properties);
|
|
72
|
+
wrapper.hierarchyLevel = depth + 1;
|
|
75
73
|
wrapper.initTime = this.getNowTimestamp() - t0;
|
|
76
74
|
settlementSignal.complete();
|
|
77
75
|
};
|
|
@@ -86,25 +84,25 @@ class Injector {
|
|
|
86
84
|
throw err;
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
|
-
async loadMiddleware(wrapper, collection, moduleRef, contextId =
|
|
87
|
+
async loadMiddleware(wrapper, collection, moduleRef, contextId = STATIC_CONTEXT, inquirer) {
|
|
90
88
|
const { metatype, token } = wrapper;
|
|
91
89
|
const targetWrapper = collection.get(token);
|
|
92
|
-
if (!
|
|
90
|
+
if (!isUndefined(targetWrapper.instance)) {
|
|
93
91
|
return;
|
|
94
92
|
}
|
|
95
93
|
targetWrapper.instance = Object.create(metatype.prototype);
|
|
96
94
|
await this.loadInstance(wrapper, collection, moduleRef, this.createResolutionContext(contextId, inquirer || wrapper));
|
|
97
95
|
}
|
|
98
|
-
async loadController(wrapper, moduleRef, contextId =
|
|
96
|
+
async loadController(wrapper, moduleRef, contextId = STATIC_CONTEXT) {
|
|
99
97
|
const controllers = moduleRef.controllers;
|
|
100
98
|
await this.loadInstance(wrapper, controllers, moduleRef, this.createResolutionContext(contextId, wrapper));
|
|
101
99
|
await this.loadEnhancersPerContext(wrapper, contextId, wrapper);
|
|
102
100
|
}
|
|
103
|
-
async loadInjectable(wrapper, moduleRef, contextId =
|
|
101
|
+
async loadInjectable(wrapper, moduleRef, contextId = STATIC_CONTEXT, inquirer) {
|
|
104
102
|
const injectables = moduleRef.injectables;
|
|
105
103
|
await this.loadInstance(wrapper, injectables, moduleRef, this.createResolutionContext(contextId, inquirer));
|
|
106
104
|
}
|
|
107
|
-
async loadProvider(wrapper, moduleRef, resolutionContext = { contextId:
|
|
105
|
+
async loadProvider(wrapper, moduleRef, resolutionContext = { contextId: STATIC_CONTEXT }) {
|
|
108
106
|
if (this.shouldSkipProviderLoading(wrapper, resolutionContext)) {
|
|
109
107
|
return;
|
|
110
108
|
}
|
|
@@ -113,25 +111,26 @@ class Injector {
|
|
|
113
111
|
await this.loadEnhancersPerContext(wrapper, resolutionContext.contextId, wrapper);
|
|
114
112
|
}
|
|
115
113
|
applySettlementSignal(instancePerContext, host) {
|
|
116
|
-
const settlementSignal = new
|
|
114
|
+
const settlementSignal = new SettlementSignal();
|
|
117
115
|
instancePerContext.donePromise = settlementSignal.asPromise();
|
|
118
116
|
instancePerContext.isPending = true;
|
|
119
117
|
host.settlementSignal = settlementSignal;
|
|
120
118
|
return settlementSignal;
|
|
121
119
|
}
|
|
122
|
-
async resolveConstructorParams(wrapper, moduleRef, inject, callback, resolutionContext = { contextId:
|
|
120
|
+
async resolveConstructorParams(wrapper, moduleRef, inject, callback, resolutionContext = { contextId: STATIC_CONTEXT }, parentInquirer) {
|
|
123
121
|
const metadata = wrapper.getCtorMetadata();
|
|
124
|
-
if (resolutionContext.contextId !==
|
|
122
|
+
if (resolutionContext.contextId !== STATIC_CONTEXT &&
|
|
125
123
|
this.hasDenseCtorMetadata(wrapper, inject, metadata)) {
|
|
126
124
|
const deps = await this.loadCtorMetadata(metadata, resolutionContext.contextId, resolutionContext.inquirer, parentInquirer);
|
|
127
125
|
return callback(deps);
|
|
128
126
|
}
|
|
129
|
-
const isFactoryProvider = !
|
|
127
|
+
const isFactoryProvider = !isNil(inject);
|
|
130
128
|
const [dependencies, optionalDependenciesIds] = isFactoryProvider
|
|
131
129
|
? this.getFactoryProviderDependencies(wrapper)
|
|
132
130
|
: this.getClassDependencies(wrapper);
|
|
133
|
-
const paramBarrier = new
|
|
131
|
+
const paramBarrier = new Barrier(dependencies.length);
|
|
134
132
|
let isResolved = true;
|
|
133
|
+
let depth = 0;
|
|
135
134
|
const resolveParam = async (param, index) => {
|
|
136
135
|
try {
|
|
137
136
|
if (this.isInquirer(param, parentInquirer)) {
|
|
@@ -157,6 +156,9 @@ class Injector {
|
|
|
157
156
|
await paramBarrier.signalAndWait();
|
|
158
157
|
const effectiveResolutionContext = this.getEffectiveResolutionContext(paramWrapper, resolutionContext, parentInquirer);
|
|
159
158
|
const paramWrapperWithInstance = await this.resolveComponentHost(moduleRef, paramWrapper, effectiveResolutionContext);
|
|
159
|
+
if (paramWrapperWithInstance.hierarchyLevel > depth) {
|
|
160
|
+
depth = paramWrapperWithInstance.hierarchyLevel;
|
|
161
|
+
}
|
|
160
162
|
const instanceHost = paramWrapperWithInstance.getInstanceByContextId(this.getContextId(effectiveResolutionContext.contextId, paramWrapperWithInstance), effectiveResolutionContext.effectiveInquirerId);
|
|
161
163
|
if (!instanceHost.isResolved && !paramWrapperWithInstance.forwardRef) {
|
|
162
164
|
isResolved = false;
|
|
@@ -178,7 +180,7 @@ class Injector {
|
|
|
178
180
|
}
|
|
179
181
|
};
|
|
180
182
|
const instances = await Promise.all(dependencies.map(resolveParam));
|
|
181
|
-
isResolved && (await callback(instances));
|
|
183
|
+
isResolved && (await callback(instances, depth));
|
|
182
184
|
}
|
|
183
185
|
getClassDependencies(wrapper) {
|
|
184
186
|
const ctorRef = wrapper.metatype;
|
|
@@ -194,11 +196,24 @@ class Injector {
|
|
|
194
196
|
* We are duplicating it here because that one is not supposed to be exported.
|
|
195
197
|
*/
|
|
196
198
|
function isOptionalFactoryDependency(value) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
+
const token = value?.token;
|
|
200
|
+
if (isNil(token)) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
return (!isUndefined(value.optional) &&
|
|
199
204
|
!value.prototype);
|
|
200
205
|
}
|
|
201
206
|
const mapFactoryProviderInjectArray = (item, index) => {
|
|
207
|
+
const isWrappedDependency = !isNil(item) && typeof item === 'object' && 'token' in item;
|
|
208
|
+
const token = isWrappedDependency
|
|
209
|
+
? item.token
|
|
210
|
+
: item;
|
|
211
|
+
if (isNil(token)) {
|
|
212
|
+
throw new UndefinedDependencyException(wrapper.name, {
|
|
213
|
+
index,
|
|
214
|
+
dependencies: (wrapper.inject ?? undefined),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
202
217
|
if (typeof item !== 'object') {
|
|
203
218
|
return item;
|
|
204
219
|
}
|
|
@@ -217,22 +232,22 @@ class Injector {
|
|
|
217
232
|
}
|
|
218
233
|
reflectConstructorParams(type) {
|
|
219
234
|
const paramtypes = [
|
|
220
|
-
...(Reflect.getMetadata(
|
|
235
|
+
...(Reflect.getMetadata(PARAMTYPES_METADATA, type) || []),
|
|
221
236
|
];
|
|
222
237
|
const selfParams = this.reflectSelfParams(type);
|
|
223
238
|
selfParams.forEach(({ index, param }) => (paramtypes[index] = param));
|
|
224
239
|
return Array.from(paramtypes);
|
|
225
240
|
}
|
|
226
241
|
reflectOptionalParams(type) {
|
|
227
|
-
return Reflect.
|
|
242
|
+
return Reflect.getOwnMetadata(OPTIONAL_DEPS_METADATA, type) || [];
|
|
228
243
|
}
|
|
229
244
|
reflectSelfParams(type) {
|
|
230
|
-
return Reflect.getMetadata(
|
|
245
|
+
return Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, type) || [];
|
|
231
246
|
}
|
|
232
|
-
async resolveSingleParam(wrapper, param, dependencyContext, moduleRef, resolutionContext = { contextId:
|
|
233
|
-
if (
|
|
247
|
+
async resolveSingleParam(wrapper, param, dependencyContext, moduleRef, resolutionContext = { contextId: STATIC_CONTEXT }, keyOrIndex) {
|
|
248
|
+
if (isUndefined(param)) {
|
|
234
249
|
this.logger.log('Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.');
|
|
235
|
-
throw new
|
|
250
|
+
throw new UndefinedDependencyException(wrapper.name, dependencyContext, moduleRef);
|
|
236
251
|
}
|
|
237
252
|
const token = this.resolveParamToken(wrapper, param);
|
|
238
253
|
return this.resolveComponentWrapper(moduleRef, token, dependencyContext, wrapper, resolutionContext, keyOrIndex);
|
|
@@ -244,13 +259,13 @@ class Injector {
|
|
|
244
259
|
}
|
|
245
260
|
return param;
|
|
246
261
|
}
|
|
247
|
-
async resolveComponentWrapper(moduleRef, token, dependencyContext, wrapper, resolutionContext = { contextId:
|
|
262
|
+
async resolveComponentWrapper(moduleRef, token, dependencyContext, wrapper, resolutionContext = { contextId: STATIC_CONTEXT }, keyOrIndex) {
|
|
248
263
|
this.printResolvingDependenciesLog(token, resolutionContext.inquirer);
|
|
249
264
|
this.printLookingForProviderLog(token, moduleRef);
|
|
250
265
|
const providers = moduleRef.providers;
|
|
251
266
|
return this.lookupComponent(providers, moduleRef, { ...dependencyContext, name: token }, wrapper, resolutionContext, keyOrIndex);
|
|
252
267
|
}
|
|
253
|
-
async resolveComponentHost(moduleRef, instanceWrapper, resolutionContext = { contextId:
|
|
268
|
+
async resolveComponentHost(moduleRef, instanceWrapper, resolutionContext = { contextId: STATIC_CONTEXT }) {
|
|
254
269
|
const inquirerId = this.getContextInquirerId(resolutionContext);
|
|
255
270
|
const instanceHost = instanceWrapper.getInstanceByContextId(this.getContextId(resolutionContext.contextId, instanceWrapper), inquirerId);
|
|
256
271
|
if (!instanceHost.isResolved && !instanceWrapper.forwardRef) {
|
|
@@ -259,7 +274,7 @@ class Injector {
|
|
|
259
274
|
}
|
|
260
275
|
else if (!instanceHost.isResolved &&
|
|
261
276
|
instanceWrapper.forwardRef &&
|
|
262
|
-
(resolutionContext.contextId !==
|
|
277
|
+
(resolutionContext.contextId !== STATIC_CONTEXT || !!inquirerId)) {
|
|
263
278
|
/**
|
|
264
279
|
* When circular dependency has been detected between
|
|
265
280
|
* either request/transient providers, we have to asynchronously
|
|
@@ -269,7 +284,7 @@ class Injector {
|
|
|
269
284
|
*/
|
|
270
285
|
if (instanceHost.donePromise) {
|
|
271
286
|
void instanceHost.donePromise
|
|
272
|
-
.then(() => this.loadProvider(instanceWrapper, moduleRef, resolutionContext))
|
|
287
|
+
.then(() => this.loadProvider(instanceWrapper, instanceWrapper.host ?? moduleRef, resolutionContext))
|
|
273
288
|
.catch(err => {
|
|
274
289
|
instanceWrapper.settlementSignal?.error(err);
|
|
275
290
|
});
|
|
@@ -292,11 +307,11 @@ class Injector {
|
|
|
292
307
|
}
|
|
293
308
|
return instanceWrapper;
|
|
294
309
|
}
|
|
295
|
-
async lookupComponent(providers, moduleRef, dependencyContext, wrapper, resolutionContext = { contextId:
|
|
310
|
+
async lookupComponent(providers, moduleRef, dependencyContext, wrapper, resolutionContext = { contextId: STATIC_CONTEXT }, keyOrIndex) {
|
|
296
311
|
const token = wrapper.token || wrapper.name;
|
|
297
312
|
const { name } = dependencyContext;
|
|
298
313
|
if (wrapper && token === name) {
|
|
299
|
-
throw new
|
|
314
|
+
throw new UnknownDependenciesException(wrapper.name, dependencyContext, moduleRef, { id: wrapper.id });
|
|
300
315
|
}
|
|
301
316
|
if (name && providers.has(name)) {
|
|
302
317
|
const instanceWrapper = providers.get(name);
|
|
@@ -306,14 +321,14 @@ class Injector {
|
|
|
306
321
|
}
|
|
307
322
|
return this.lookupComponentInParentModules(dependencyContext, moduleRef, wrapper, resolutionContext, keyOrIndex);
|
|
308
323
|
}
|
|
309
|
-
async lookupComponentInParentModules(dependencyContext, moduleRef, wrapper, resolutionContext = { contextId:
|
|
324
|
+
async lookupComponentInParentModules(dependencyContext, moduleRef, wrapper, resolutionContext = { contextId: STATIC_CONTEXT }, keyOrIndex) {
|
|
310
325
|
const instanceWrapper = await this.lookupComponentInImports(moduleRef, dependencyContext.name, wrapper, new Set(), resolutionContext, keyOrIndex);
|
|
311
|
-
if (
|
|
312
|
-
throw new
|
|
326
|
+
if (isNil(instanceWrapper)) {
|
|
327
|
+
throw new UnknownDependenciesException(wrapper.name, dependencyContext, moduleRef, { id: wrapper.id });
|
|
313
328
|
}
|
|
314
329
|
return instanceWrapper;
|
|
315
330
|
}
|
|
316
|
-
async lookupComponentInImports(moduleRef, name, wrapper, moduleRegistry = new Set(), resolutionContext = { contextId:
|
|
331
|
+
async lookupComponentInImports(moduleRef, name, wrapper, moduleRegistry = new Set(), resolutionContext = { contextId: STATIC_CONTEXT }, keyOrIndex, isTraversing) {
|
|
317
332
|
let instanceWrapperRef = null;
|
|
318
333
|
const imports = moduleRef.imports || new Set();
|
|
319
334
|
const identity = (item) => item;
|
|
@@ -349,16 +364,16 @@ class Injector {
|
|
|
349
364
|
}
|
|
350
365
|
return instanceWrapperRef;
|
|
351
366
|
}
|
|
352
|
-
async resolveProperties(wrapper, moduleRef, inject, resolutionContext = { contextId:
|
|
353
|
-
if (!
|
|
367
|
+
async resolveProperties(wrapper, moduleRef, inject, resolutionContext = { contextId: STATIC_CONTEXT }, parentInquirer) {
|
|
368
|
+
if (!isNil(inject)) {
|
|
354
369
|
return [];
|
|
355
370
|
}
|
|
356
371
|
const metadata = wrapper.getPropertiesMetadata();
|
|
357
|
-
if (metadata && resolutionContext.contextId !==
|
|
372
|
+
if (metadata && resolutionContext.contextId !== STATIC_CONTEXT) {
|
|
358
373
|
return this.loadPropertiesMetadata(metadata, resolutionContext.contextId, resolutionContext.inquirer);
|
|
359
374
|
}
|
|
360
375
|
const properties = this.reflectProperties(wrapper.metatype);
|
|
361
|
-
const propertyBarrier = new
|
|
376
|
+
const propertyBarrier = new Barrier(properties.length);
|
|
362
377
|
const instances = await Promise.all(properties.map(async (item) => {
|
|
363
378
|
try {
|
|
364
379
|
const dependencyContext = {
|
|
@@ -407,8 +422,8 @@ class Injector {
|
|
|
407
422
|
}));
|
|
408
423
|
}
|
|
409
424
|
reflectProperties(type) {
|
|
410
|
-
const properties = Reflect.getMetadata(
|
|
411
|
-
const optionalKeys = Reflect.getMetadata(
|
|
425
|
+
const properties = Reflect.getMetadata(PROPERTY_DEPS_METADATA, type) || [];
|
|
426
|
+
const optionalKeys = Reflect.getMetadata(OPTIONAL_PROPERTY_DEPS_METADATA, type) || [];
|
|
412
427
|
return properties.map((item) => ({
|
|
413
428
|
...item,
|
|
414
429
|
name: item.type,
|
|
@@ -416,14 +431,14 @@ class Injector {
|
|
|
416
431
|
}));
|
|
417
432
|
}
|
|
418
433
|
applyProperties(instance, properties) {
|
|
419
|
-
if (!
|
|
420
|
-
return
|
|
434
|
+
if (!isObject(instance)) {
|
|
435
|
+
return;
|
|
421
436
|
}
|
|
422
|
-
|
|
423
|
-
.filter(item => !
|
|
437
|
+
iterate(properties)
|
|
438
|
+
.filter(item => !isNil(item.instance))
|
|
424
439
|
.forEach(item => (instance[item.key] = item.instance));
|
|
425
440
|
}
|
|
426
|
-
async instantiateClass(instances, wrapper, targetMetatype, resolutionContext = { contextId:
|
|
441
|
+
async instantiateClass(instances, wrapper, targetMetatype, resolutionContext = { contextId: STATIC_CONTEXT }) {
|
|
427
442
|
const { metatype, inject } = wrapper;
|
|
428
443
|
const inquirerId = this.getContextInquirerId(resolutionContext);
|
|
429
444
|
const instanceHost = targetMetatype.getInstanceByContextId(this.getContextId(resolutionContext.contextId, targetMetatype), inquirerId);
|
|
@@ -432,7 +447,7 @@ class Injector {
|
|
|
432
447
|
instanceHost.isResolved = true;
|
|
433
448
|
return instanceHost.instance;
|
|
434
449
|
}
|
|
435
|
-
if (
|
|
450
|
+
if (isNil(inject) && isInContext) {
|
|
436
451
|
instanceHost.instance = wrapper.forwardRef
|
|
437
452
|
? Object.assign(instanceHost.instance, new metatype(...instances))
|
|
438
453
|
: new metatype(...instances);
|
|
@@ -462,7 +477,7 @@ class Injector {
|
|
|
462
477
|
return host && host.instance;
|
|
463
478
|
}
|
|
464
479
|
async loadEnhancersPerContext(wrapper, ctx, inquirer) {
|
|
465
|
-
if (ctx ===
|
|
480
|
+
if (ctx === STATIC_CONTEXT) {
|
|
466
481
|
return;
|
|
467
482
|
}
|
|
468
483
|
const enhancers = wrapper.getEnhancersMetadata() || [];
|
|
@@ -512,9 +527,9 @@ class Injector {
|
|
|
512
527
|
wrapper.isExplicitlyRequested(resolutionContext.contextId, resolutionContext.inquirer));
|
|
513
528
|
}
|
|
514
529
|
shouldSkipProviderLoading(wrapper, resolutionContext) {
|
|
515
|
-
const isStaticContext = resolutionContext.contextId ===
|
|
530
|
+
const isStaticContext = resolutionContext.contextId === STATIC_CONTEXT;
|
|
516
531
|
const hasNoInquirer = !resolutionContext.inquirer;
|
|
517
|
-
const isTopLevelStaticTransientOrRequestProvider = hasNoInquirer && (wrapper.isTransient || wrapper.scope ===
|
|
532
|
+
const isTopLevelStaticTransientOrRequestProvider = hasNoInquirer && (wrapper.isTransient || wrapper.scope === Scope.REQUEST);
|
|
518
533
|
const isStaticInquirerOutsideResolutionContext = !!resolutionContext.inquirer &&
|
|
519
534
|
!this.isInContext(resolutionContext.inquirer, this.createResolutionContext(resolutionContext.contextId, resolutionContext.inquirer));
|
|
520
535
|
const shouldSkipForStaticBootstrap = isStaticContext &&
|
|
@@ -532,7 +547,7 @@ class Injector {
|
|
|
532
547
|
getEffectiveInquirer(dependency, resolutionContext, parentInquirer) {
|
|
533
548
|
const { inquirer, contextId } = resolutionContext;
|
|
534
549
|
if (dependency?.isTransient && inquirer?.isTransient && parentInquirer) {
|
|
535
|
-
if (contextId ===
|
|
550
|
+
if (contextId === STATIC_CONTEXT) {
|
|
536
551
|
return inquirer.getRootInquirer() ?? parentInquirer;
|
|
537
552
|
}
|
|
538
553
|
return parentInquirer;
|
|
@@ -541,7 +556,7 @@ class Injector {
|
|
|
541
556
|
}
|
|
542
557
|
getEffectiveInquirerId(dependency, resolutionContext, parentInquirer) {
|
|
543
558
|
const { contextId, inquirer, effectiveInquirerId } = resolutionContext;
|
|
544
|
-
if (contextId ===
|
|
559
|
+
if (contextId === STATIC_CONTEXT &&
|
|
545
560
|
dependency?.isTransient &&
|
|
546
561
|
inquirer?.isTransient &&
|
|
547
562
|
parentInquirer) {
|
|
@@ -553,7 +568,7 @@ class Injector {
|
|
|
553
568
|
}
|
|
554
569
|
getStaticTransientResolutionContext(resolutionContext, parentInquirer) {
|
|
555
570
|
const { contextId, inquirer, effectiveInquirerId } = resolutionContext;
|
|
556
|
-
if (contextId ===
|
|
571
|
+
if (contextId === STATIC_CONTEXT &&
|
|
557
572
|
inquirer?.isTransient &&
|
|
558
573
|
parentInquirer) {
|
|
559
574
|
const baseInquirerId = effectiveInquirerId ?? this.getInquirerId(parentInquirer);
|
|
@@ -571,7 +586,7 @@ class Injector {
|
|
|
571
586
|
// The fast path requires a fully populated metadata array.
|
|
572
587
|
// While another request is still registering dependency metadata,
|
|
573
588
|
// sparse entries here would feed request-scoped factories `undefined`.
|
|
574
|
-
const expectedDepsLength = !
|
|
589
|
+
const expectedDepsLength = !isNil(inject)
|
|
575
590
|
? inject.length
|
|
576
591
|
: wrapper.metatype
|
|
577
592
|
? this.reflectConstructorParams(wrapper.metatype).length
|
|
@@ -592,13 +607,13 @@ class Injector {
|
|
|
592
607
|
: this.resolveComponentHost(item.host, item, this.getEffectiveResolutionContext(item, this.createResolutionContext(contextId, inquirer), parentInquirer));
|
|
593
608
|
}
|
|
594
609
|
isInquirerRequest(item, parentInquirer) {
|
|
595
|
-
return item.isTransient && item.name ===
|
|
610
|
+
return item.isTransient && item.name === INQUIRER && parentInquirer;
|
|
596
611
|
}
|
|
597
612
|
isInquirer(param, parentInquirer) {
|
|
598
|
-
return param ===
|
|
613
|
+
return param === INQUIRER && parentInquirer;
|
|
599
614
|
}
|
|
600
615
|
addDependencyMetadata(keyOrIndex, hostWrapper, instanceWrapper) {
|
|
601
|
-
if (
|
|
616
|
+
if (isSymbol(keyOrIndex) || isString(keyOrIndex)) {
|
|
602
617
|
hostWrapper.addPropertiesMetadata(keyOrIndex, instanceWrapper);
|
|
603
618
|
}
|
|
604
619
|
else {
|
|
@@ -606,36 +621,33 @@ class Injector {
|
|
|
606
621
|
}
|
|
607
622
|
}
|
|
608
623
|
getTokenName(token) {
|
|
609
|
-
return
|
|
624
|
+
return isFunction(token) ? token.name : token.toString();
|
|
610
625
|
}
|
|
611
626
|
printResolvingDependenciesLog(token, inquirer) {
|
|
612
|
-
if (!
|
|
627
|
+
if (!isDebugMode()) {
|
|
613
628
|
return;
|
|
614
629
|
}
|
|
615
630
|
const tokenName = this.getTokenName(token);
|
|
616
631
|
const dependentName = (inquirer?.name && inquirer.name.toString?.()) ?? 'unknown';
|
|
617
632
|
const isAlias = dependentName === tokenName;
|
|
618
|
-
const messageToPrint = `Resolving dependency ${
|
|
633
|
+
const messageToPrint = `Resolving dependency ${clc.cyanBright(tokenName)}${clc.green(' in the ')}${clc.yellow(dependentName)}${clc.green(` provider ${isAlias ? '(alias)' : ''}`)}`;
|
|
619
634
|
this.logger.log(messageToPrint);
|
|
620
635
|
}
|
|
621
636
|
printLookingForProviderLog(token, moduleRef) {
|
|
622
|
-
if (!
|
|
637
|
+
if (!isDebugMode()) {
|
|
623
638
|
return;
|
|
624
639
|
}
|
|
625
640
|
const tokenName = this.getTokenName(token);
|
|
626
641
|
const moduleRefName = moduleRef?.metatype?.name ?? 'unknown';
|
|
627
|
-
this.logger.log(`Looking for ${
|
|
642
|
+
this.logger.log(`Looking for ${clc.cyanBright(tokenName)}${clc.green(' in ')}${clc.magentaBright(moduleRefName)}`);
|
|
628
643
|
}
|
|
629
644
|
printFoundInModuleLog(token, moduleRef) {
|
|
630
|
-
if (!
|
|
645
|
+
if (!isDebugMode()) {
|
|
631
646
|
return;
|
|
632
647
|
}
|
|
633
648
|
const tokenName = this.getTokenName(token);
|
|
634
649
|
const moduleRefName = moduleRef?.metatype?.name ?? 'unknown';
|
|
635
|
-
this.logger.log(`Found ${
|
|
636
|
-
}
|
|
637
|
-
isDebugMode() {
|
|
638
|
-
return !!process.env.NEST_DEBUG;
|
|
650
|
+
this.logger.log(`Found ${clc.cyanBright(tokenName)}${clc.green(' in ')}${clc.magentaBright(moduleRefName)}`);
|
|
639
651
|
}
|
|
640
652
|
getContextId(contextId, instanceWrapper) {
|
|
641
653
|
return contextId.getParent
|
|
@@ -646,7 +658,6 @@ class Injector {
|
|
|
646
658
|
: contextId;
|
|
647
659
|
}
|
|
648
660
|
getNowTimestamp() {
|
|
649
|
-
return
|
|
661
|
+
return performance.now();
|
|
650
662
|
}
|
|
651
663
|
}
|
|
652
|
-
exports.Injector = Injector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './inquirer-constants';
|
|
1
|
+
export * from './inquirer-constants.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Provider } from '@nestjs/common';
|
|
1
|
+
import { type Provider } from '@nestjs/common';
|
|
2
2
|
export declare const inquirerProvider: Provider;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.inquirerProvider = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const inquirer_constants_1 = require("./inquirer-constants");
|
|
1
|
+
import { Scope } from '@nestjs/common';
|
|
2
|
+
import { INQUIRER } from './inquirer-constants.js';
|
|
6
3
|
const noop = () => { };
|
|
7
|
-
|
|
8
|
-
provide:
|
|
9
|
-
scope:
|
|
4
|
+
export const inquirerProvider = {
|
|
5
|
+
provide: INQUIRER,
|
|
6
|
+
scope: Scope.TRANSIENT,
|
|
10
7
|
useFactory: noop,
|
|
11
8
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { InjectionToken } from '@nestjs/common';
|
|
2
|
-
import { NestContainer } from './container';
|
|
3
|
-
import { InstanceWrapper } from './instance-wrapper';
|
|
1
|
+
import type { InjectionToken } from '@nestjs/common';
|
|
2
|
+
import { NestContainer } from './container.js';
|
|
3
|
+
import { InstanceWrapper } from './instance-wrapper.js';
|
|
4
4
|
export interface InstanceLink<T = any> {
|
|
5
5
|
token: InjectionToken;
|
|
6
6
|
wrapperRef: InstanceWrapper<T>;
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class InstanceLinksHost {
|
|
1
|
+
import { UnknownElementException } from '../errors/exceptions/unknown-element.exception.js';
|
|
2
|
+
import { isFunction } from '@nestjs/common/internal';
|
|
3
|
+
export class InstanceLinksHost {
|
|
4
|
+
container;
|
|
5
|
+
instanceLinks = new Map();
|
|
7
6
|
constructor(container) {
|
|
8
7
|
this.container = container;
|
|
9
|
-
this.instanceLinks = new Map();
|
|
10
8
|
this.initialize();
|
|
11
9
|
}
|
|
12
10
|
get(token, options = {}) {
|
|
13
11
|
const instanceLinksForGivenToken = this.instanceLinks.get(token);
|
|
14
12
|
if (!instanceLinksForGivenToken) {
|
|
15
|
-
throw new
|
|
13
|
+
throw new UnknownElementException(this.getInstanceNameByToken(token));
|
|
16
14
|
}
|
|
17
15
|
if (options.each) {
|
|
18
16
|
return instanceLinksForGivenToken;
|
|
@@ -21,7 +19,7 @@ class InstanceLinksHost {
|
|
|
21
19
|
? instanceLinksForGivenToken.find(item => item.moduleId === options.moduleId)
|
|
22
20
|
: instanceLinksForGivenToken[instanceLinksForGivenToken.length - 1];
|
|
23
21
|
if (!instanceLink) {
|
|
24
|
-
throw new
|
|
22
|
+
throw new UnknownElementException(this.getInstanceNameByToken(token));
|
|
25
23
|
}
|
|
26
24
|
return instanceLink;
|
|
27
25
|
}
|
|
@@ -50,7 +48,6 @@ class InstanceLinksHost {
|
|
|
50
48
|
}
|
|
51
49
|
}
|
|
52
50
|
getInstanceNameByToken(token) {
|
|
53
|
-
return
|
|
51
|
+
return isFunction(token) ? token?.name : token;
|
|
54
52
|
}
|
|
55
53
|
}
|
|
56
|
-
exports.InstanceLinksHost = InstanceLinksHost;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Logger, LoggerService } from '@nestjs/common';
|
|
2
|
-
import { GraphInspector } from '../inspector/graph-inspector';
|
|
3
|
-
import { NestContainer } from './container';
|
|
4
|
-
import { Injector } from './injector';
|
|
5
|
-
import { Module } from './module';
|
|
1
|
+
import { Logger, type LoggerService } from '@nestjs/common';
|
|
2
|
+
import { GraphInspector } from '../inspector/graph-inspector.js';
|
|
3
|
+
import { NestContainer } from './container.js';
|
|
4
|
+
import { Injector } from './injector.js';
|
|
5
|
+
import { Module } from './module.js';
|
|
6
6
|
export declare class InstanceLoader<TInjector extends Injector = Injector> {
|
|
7
7
|
protected readonly container: NestContainer;
|
|
8
8
|
protected readonly injector: TInjector;
|