@nestjs/core 8.3.1 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +1 -1
- package/injector/injector.d.ts +4 -1
- package/injector/injector.js +35 -7
- package/injector/instance-wrapper.d.ts +2 -1
- package/injector/module.d.ts +12 -8
- package/package.json +3 -3
- package/router/router-explorer.js +24 -0
- package/scanner.js +1 -1
- package/CHANGELOG.md +0 -12
package/Readme.md
CHANGED
|
@@ -54,7 +54,7 @@ With official support, you can get expert help straight from Nest core team. We
|
|
|
54
54
|
|
|
55
55
|
## Support
|
|
56
56
|
|
|
57
|
-
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support
|
|
57
|
+
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support from the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
|
|
58
58
|
|
|
59
59
|
#### Principal Sponsors
|
|
60
60
|
<table style="text-align:center;"><tr>
|
package/injector/injector.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InjectionToken } from '@nestjs/common';
|
|
1
2
|
import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface';
|
|
2
3
|
import { Injectable } from '@nestjs/common/interfaces/injectable.interface';
|
|
3
4
|
import { Type } from '@nestjs/common/interfaces/type.interface';
|
|
@@ -6,7 +7,7 @@ import { InstanceToken, Module } from './module';
|
|
|
6
7
|
/**
|
|
7
8
|
* The type of an injectable dependency
|
|
8
9
|
*/
|
|
9
|
-
export declare type InjectorDependency =
|
|
10
|
+
export declare type InjectorDependency = InjectionToken;
|
|
10
11
|
/**
|
|
11
12
|
* The property-based dependency
|
|
12
13
|
*/
|
|
@@ -49,6 +50,8 @@ export declare class Injector {
|
|
|
49
50
|
loadProvider(wrapper: InstanceWrapper<Injectable>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
|
|
50
51
|
applyDoneHook<T>(wrapper: InstancePerContext<T>): () => void;
|
|
51
52
|
resolveConstructorParams<T>(wrapper: InstanceWrapper<T>, moduleRef: Module, inject: InjectorDependency[], callback: (args: unknown[]) => void | Promise<void>, contextId?: ContextId, inquirer?: InstanceWrapper, parentInquirer?: InstanceWrapper): Promise<void>;
|
|
53
|
+
getClassDependencies<T>(wrapper: InstanceWrapper<T>): [InjectorDependency[], number[]];
|
|
54
|
+
getFactoryProviderDependencies<T>(wrapper: InstanceWrapper<T>): [InjectorDependency[], number[]];
|
|
52
55
|
reflectConstructorParams<T>(type: Type<T>): any[];
|
|
53
56
|
reflectOptionalParams<T>(type: Type<T>): any[];
|
|
54
57
|
reflectSelfParams<T>(type: Type<T>): any[];
|
package/injector/injector.js
CHANGED
|
@@ -89,12 +89,10 @@ class Injector {
|
|
|
89
89
|
const deps = await this.loadCtorMetadata(metadata, contextId, inquirer, parentInquirer);
|
|
90
90
|
return callback(deps);
|
|
91
91
|
}
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
? this.reflectOptionalParams(wrapper.metatype)
|
|
97
|
-
: [];
|
|
92
|
+
const isFactoryProvider = !shared_utils_1.isNil(inject);
|
|
93
|
+
const [dependencies, optionalDependenciesIds] = isFactoryProvider
|
|
94
|
+
? this.getFactoryProviderDependencies(wrapper)
|
|
95
|
+
: this.getClassDependencies(wrapper);
|
|
98
96
|
let isResolved = true;
|
|
99
97
|
const resolveParam = async (param, index) => {
|
|
100
98
|
try {
|
|
@@ -123,6 +121,35 @@ class Injector {
|
|
|
123
121
|
const instances = await Promise.all(dependencies.map(resolveParam));
|
|
124
122
|
isResolved && (await callback(instances));
|
|
125
123
|
}
|
|
124
|
+
getClassDependencies(wrapper) {
|
|
125
|
+
const ctorRef = wrapper.metatype;
|
|
126
|
+
return [
|
|
127
|
+
this.reflectConstructorParams(ctorRef),
|
|
128
|
+
this.reflectOptionalParams(ctorRef),
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
getFactoryProviderDependencies(wrapper) {
|
|
132
|
+
var _a, _b;
|
|
133
|
+
const optionalDependenciesIds = [];
|
|
134
|
+
const isOptionalFactoryDep = (item) => !shared_utils_1.isUndefined(item.token) &&
|
|
135
|
+
!shared_utils_1.isUndefined(item.optional);
|
|
136
|
+
const mapFactoryProviderInjectArray = (item, index) => {
|
|
137
|
+
if (typeof item !== 'object') {
|
|
138
|
+
return item;
|
|
139
|
+
}
|
|
140
|
+
if (isOptionalFactoryDep(item)) {
|
|
141
|
+
if (item.optional) {
|
|
142
|
+
optionalDependenciesIds.push(index);
|
|
143
|
+
}
|
|
144
|
+
return item === null || item === void 0 ? void 0 : item.token;
|
|
145
|
+
}
|
|
146
|
+
return item;
|
|
147
|
+
};
|
|
148
|
+
return [
|
|
149
|
+
(_b = (_a = wrapper.inject) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, mapFactoryProviderInjectArray),
|
|
150
|
+
optionalDependenciesIds,
|
|
151
|
+
];
|
|
152
|
+
}
|
|
126
153
|
reflectConstructorParams(type) {
|
|
127
154
|
const paramtypes = Reflect.getMetadata(constants_1.PARAMTYPES_METADATA, type) || [];
|
|
128
155
|
const selfParams = this.reflectSelfParams(type);
|
|
@@ -184,8 +211,9 @@ class Injector {
|
|
|
184
211
|
return instanceWrapper;
|
|
185
212
|
}
|
|
186
213
|
async lookupComponent(providers, moduleRef, dependencyContext, wrapper, contextId = constants_2.STATIC_CONTEXT, inquirer, keyOrIndex) {
|
|
214
|
+
const token = wrapper.token || wrapper.name;
|
|
187
215
|
const { name } = dependencyContext;
|
|
188
|
-
if (wrapper &&
|
|
216
|
+
if (wrapper && token === name) {
|
|
189
217
|
throw new unknown_dependencies_exception_1.UnknownDependenciesException(wrapper.name, dependencyContext, moduleRef);
|
|
190
218
|
}
|
|
191
219
|
if (providers.has(name)) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Provider, Scope, Type } from '@nestjs/common';
|
|
2
|
+
import { FactoryProvider } from '@nestjs/common/interfaces';
|
|
2
3
|
import { InstanceToken, Module } from './module';
|
|
3
4
|
export declare const INSTANCE_METADATA_SYMBOL: unique symbol;
|
|
4
5
|
export declare const INSTANCE_ID_SYMBOL: unique symbol;
|
|
@@ -23,7 +24,7 @@ export declare class InstanceWrapper<T = any> {
|
|
|
23
24
|
readonly isAlias: boolean;
|
|
24
25
|
scope?: Scope;
|
|
25
26
|
metatype: Type<T> | Function;
|
|
26
|
-
inject?:
|
|
27
|
+
inject?: FactoryProvider['inject'];
|
|
27
28
|
forwardRef?: boolean;
|
|
28
29
|
private readonly values;
|
|
29
30
|
private readonly [INSTANCE_METADATA_SYMBOL];
|
package/injector/module.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ClassProvider, Controller, DynamicModule, ExistingProvider, FactoryProvider, Injectable, InjectionToken, NestModule, Provider, ValueProvider } from '@nestjs/common/interfaces';
|
|
2
2
|
import { Type } from '@nestjs/common/interfaces/type.interface';
|
|
3
3
|
import { NestContainer } from './container';
|
|
4
4
|
import { InstanceWrapper } from './instance-wrapper';
|
|
5
5
|
import { ModuleRef } from './module-ref';
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* @note
|
|
8
|
+
* Left for backward compatibility
|
|
9
|
+
*/
|
|
10
|
+
export declare type InstanceToken = InjectionToken;
|
|
7
11
|
export declare class Module {
|
|
8
12
|
private readonly _metatype;
|
|
9
13
|
private readonly container;
|
|
@@ -46,10 +50,10 @@ export declare class Module {
|
|
|
46
50
|
addModuleRef(): void;
|
|
47
51
|
addModuleAsProvider(): void;
|
|
48
52
|
addApplicationConfig(): void;
|
|
49
|
-
addInjectable<T extends Injectable>(injectable: Provider, host?: Type<T>):
|
|
50
|
-
addProvider(provider: Provider):
|
|
53
|
+
addInjectable<T extends Injectable>(injectable: Provider, host?: Type<T>): InjectionToken;
|
|
54
|
+
addProvider(provider: Provider): InjectionToken;
|
|
51
55
|
isCustomProvider(provider: Provider): provider is ClassProvider | FactoryProvider | ValueProvider | ExistingProvider;
|
|
52
|
-
addCustomProvider(provider: ClassProvider | FactoryProvider | ValueProvider | ExistingProvider, collection: Map<Function | string | symbol, any>):
|
|
56
|
+
addCustomProvider(provider: ClassProvider | FactoryProvider | ValueProvider | ExistingProvider, collection: Map<Function | string | symbol, any>): InjectionToken;
|
|
53
57
|
isCustomClass(provider: any): provider is ClassProvider;
|
|
54
58
|
isCustomValue(provider: any): provider is ValueProvider;
|
|
55
59
|
isCustomFactory(provider: any): provider is FactoryProvider;
|
|
@@ -59,9 +63,9 @@ export declare class Module {
|
|
|
59
63
|
addCustomValue(provider: ValueProvider, collection: Map<Function | string | symbol, InstanceWrapper>): void;
|
|
60
64
|
addCustomFactory(provider: FactoryProvider, collection: Map<Function | string | symbol, InstanceWrapper>): void;
|
|
61
65
|
addCustomUseExisting(provider: ExistingProvider, collection: Map<Function | string | symbol, InstanceWrapper>): void;
|
|
62
|
-
addExportedProvider(provider: Provider | string | symbol | DynamicModule): Set<
|
|
63
|
-
addCustomExportedProvider(provider: FactoryProvider | ValueProvider | ClassProvider | ExistingProvider): Set<
|
|
64
|
-
validateExportedProvider(token: InstanceToken):
|
|
66
|
+
addExportedProvider(provider: Provider | string | symbol | DynamicModule): Set<InjectionToken>;
|
|
67
|
+
addCustomExportedProvider(provider: FactoryProvider | ValueProvider | ClassProvider | ExistingProvider): Set<InjectionToken>;
|
|
68
|
+
validateExportedProvider(token: InstanceToken): InjectionToken;
|
|
65
69
|
addController(controller: Type<Controller>): void;
|
|
66
70
|
assignControllerUniqueId(controller: Type<Controller>): void;
|
|
67
71
|
addRelatedModule(module: Module): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/core",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@core)",
|
|
5
5
|
"author": "Kamil Mysliwiec",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"@nuxtjs/opencollective": "0.3.2",
|
|
31
31
|
"fast-safe-stringify": "2.1.1",
|
|
32
32
|
"iterare": "1.2.1",
|
|
33
|
-
"object-hash": "
|
|
33
|
+
"object-hash": "3.0.0",
|
|
34
34
|
"path-to-regexp": "3.2.0",
|
|
35
35
|
"tslib": "2.3.1",
|
|
36
36
|
"uuid": "8.3.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@nestjs/common": "8.
|
|
39
|
+
"@nestjs/common": "8.4.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@nestjs/common": "^8.0.0",
|
|
@@ -178,6 +178,30 @@ class RouterExplorer {
|
|
|
178
178
|
if (versioningOptions.type === version_type_enum_1.VersioningType.URI) {
|
|
179
179
|
return handler(req, res, next);
|
|
180
180
|
}
|
|
181
|
+
// Custom Extractor Versioning Handler
|
|
182
|
+
if (versioningOptions.type === version_type_enum_1.VersioningType.CUSTOM) {
|
|
183
|
+
const extractedVersion = versioningOptions.extractor(req);
|
|
184
|
+
if (Array.isArray(version)) {
|
|
185
|
+
if (Array.isArray(extractedVersion) &&
|
|
186
|
+
version.filter(extractedVersion.includes).length) {
|
|
187
|
+
return handler(req, res, next);
|
|
188
|
+
}
|
|
189
|
+
else if (shared_utils_1.isString(extractedVersion) &&
|
|
190
|
+
version.includes(extractedVersion)) {
|
|
191
|
+
return handler(req, res, next);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
if (Array.isArray(extractedVersion) &&
|
|
196
|
+
extractedVersion.includes(version)) {
|
|
197
|
+
return handler(req, res, next);
|
|
198
|
+
}
|
|
199
|
+
else if (shared_utils_1.isString(extractedVersion) &&
|
|
200
|
+
version === extractedVersion) {
|
|
201
|
+
return handler(req, res, next);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
181
205
|
// Media Type (Accept Header) Versioning Handler
|
|
182
206
|
if (versioningOptions.type === version_type_enum_1.VersioningType.MEDIA_TYPE) {
|
|
183
207
|
const MEDIA_TYPE_HEADER = 'Accept';
|
package/scanner.js
CHANGED
|
@@ -10,8 +10,8 @@ const iterare_1 = require("iterare");
|
|
|
10
10
|
const application_config_1 = require("./application-config");
|
|
11
11
|
const constants_2 = require("./constants");
|
|
12
12
|
const circular_dependency_exception_1 = require("./errors/exceptions/circular-dependency.exception");
|
|
13
|
-
const invalid_module_exception_1 = require("./errors/exceptions/invalid-module.exception");
|
|
14
13
|
const invalid_class_module_exception_1 = require("./errors/exceptions/invalid-class-module.exception");
|
|
14
|
+
const invalid_module_exception_1 = require("./errors/exceptions/invalid-module.exception");
|
|
15
15
|
const undefined_module_exception_1 = require("./errors/exceptions/undefined-module.exception");
|
|
16
16
|
const get_class_scope_1 = require("./helpers/get-class-scope");
|
|
17
17
|
const internal_core_module_factory_1 = require("./injector/internal-core-module-factory");
|
package/CHANGELOG.md
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
-
|
|
6
|
-
<a name="8.2.0"></a>
|
|
7
|
-
# [8.2.0](https://github.com/nestjs/nest/compare/v8.1.2...v8.2.0) (2021-11-08)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
**Note:** Version bump only for package @nestjs/core
|