@zanobijs/core 1.2.0-beta.0 → 1.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/factory.d.ts +22 -3
- package/factory.js +41 -8
- package/injector/injector.d.ts +1 -1
- package/injector/injector.js +2 -3
- package/injector/module.d.ts +27 -6
- package/injector/module.js +32 -9
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.2.0-beta.2](https://github.com/devdroide/ZanobiJS/compare/v1.2.0-beta.1...v1.2.0-beta.2) (2025-06-08)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **core,test:** The injection of provider asValue and asFunction that is done in entities was corrected ([83ae3c1](https://github.com/devdroide/ZanobiJS/commit/83ae3c164b28cdc9747c524b8595a1b86257a957))
|
|
11
|
+
|
|
12
|
+
# [1.2.0-beta.1](https://github.com/devdroide/ZanobiJS/compare/v1.2.0-beta.0...v1.2.0-beta.1) (2025-06-05)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- **core,test:** Change in provider scanning and dependency search ([cd0858b](https://github.com/devdroide/ZanobiJS/commit/cd0858b1437c4470003f574baa34bc7a4f3db817))
|
|
17
|
+
|
|
6
18
|
# [1.2.0-beta.0](https://github.com/devdroide/ZanobiJS/compare/v1.1.1-beta.0...v1.2.0-beta.0) (2025-05-28)
|
|
7
19
|
|
|
8
20
|
### Features
|
package/factory.d.ts
CHANGED
|
@@ -15,13 +15,29 @@ export declare class Factory {
|
|
|
15
15
|
private options;
|
|
16
16
|
constructor(appModule: TClass, options?: IFactoryOptions);
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Se encarga de escaenear modulo por modulo los proveedores con el fin de luego
|
|
19
|
+
* poder ser registrados e inyectados en quien depende de ese proveedor
|
|
20
|
+
* @param {TClass} module - Módulo desde el que se escanearan los proveedores.
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
private scanProviderModule;
|
|
24
|
+
/**
|
|
25
|
+
* Se encarga tomar la lista de proveedores y registralos para luego se resueltos
|
|
26
|
+
* cuando el usuario lo solicite
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
private registerProviderScanedModules;
|
|
30
|
+
/**
|
|
31
|
+
* Procesa modulo por modulos registrando los controladores, servicios y proveedores,
|
|
32
|
+
* estos se le irá inyectando sus dependecias resueltas para ser usados por el usuario
|
|
19
33
|
* @param {TClass} module - Módulo desde el que se registrarán las clases.
|
|
20
34
|
* @private
|
|
21
35
|
*/
|
|
22
|
-
private
|
|
36
|
+
private processClassModule;
|
|
23
37
|
/**
|
|
24
|
-
* Crea el contenedor de inyección de dependencias y registra
|
|
38
|
+
* Crea el contenedor de inyección de dependencias y registra el listado de
|
|
39
|
+
* controladores, servicio y proveedores que se ha venido creando a parti de escaneos
|
|
40
|
+
* y registros de clases.
|
|
25
41
|
* @returns {Factory} - Instancia actual de la fábrica.
|
|
26
42
|
*/
|
|
27
43
|
create(): Factory;
|
|
@@ -32,5 +48,8 @@ export declare class Factory {
|
|
|
32
48
|
* @returns {T} - Instancia resuelta.
|
|
33
49
|
*/
|
|
34
50
|
get<T>(className: string): T;
|
|
51
|
+
/**
|
|
52
|
+
* Se encarga de evaluar las opciones para ver si o no aplica y realizar lo correspondiente
|
|
53
|
+
*/
|
|
35
54
|
private evaluateOptions;
|
|
36
55
|
}
|
package/factory.js
CHANGED
|
@@ -25,30 +25,60 @@ class Factory {
|
|
|
25
25
|
this.evaluateOptions();
|
|
26
26
|
this.logger = (0, utils_1.Logger)();
|
|
27
27
|
this.moduleHandler = new module_1.Module();
|
|
28
|
-
this.
|
|
28
|
+
this.scanProviderModule(appModule);
|
|
29
|
+
this.registerProviderScanedModules();
|
|
30
|
+
this.processClassModule(appModule);
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
|
-
*
|
|
33
|
+
* Se encarga de escaenear modulo por modulo los proveedores con el fin de luego
|
|
34
|
+
* poder ser registrados e inyectados en quien depende de ese proveedor
|
|
35
|
+
* @param {TClass} module - Módulo desde el que se escanearan los proveedores.
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
scanProviderModule(module) {
|
|
39
|
+
this.logger.debug('Factory - Scan Module:', module.name);
|
|
40
|
+
this.moduleHandler.setup(module);
|
|
41
|
+
this.moduleHandler.scan();
|
|
42
|
+
this.logger.debug('===================================================');
|
|
43
|
+
const importedModules = this.moduleHandler.getImports();
|
|
44
|
+
if (importedModules && importedModules.length) {
|
|
45
|
+
importedModules.forEach((moduleImport) => {
|
|
46
|
+
this.scanProviderModule(moduleImport);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Se encarga tomar la lista de proveedores y registralos para luego se resueltos
|
|
52
|
+
* cuando el usuario lo solicite
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
registerProviderScanedModules() {
|
|
56
|
+
this.moduleHandler.registerAllProviders();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Procesa modulo por modulos registrando los controladores, servicios y proveedores,
|
|
60
|
+
* estos se le irá inyectando sus dependecias resueltas para ser usados por el usuario
|
|
32
61
|
* @param {TClass} module - Módulo desde el que se registrarán las clases.
|
|
33
62
|
* @private
|
|
34
63
|
*/
|
|
35
|
-
|
|
36
|
-
this.logger.debug('Factory - Process
|
|
64
|
+
processClassModule(module) {
|
|
65
|
+
this.logger.debug('Factory - Process Class Module:', module.name);
|
|
37
66
|
this.moduleHandler.setup(module);
|
|
38
|
-
this.logger.debug('Factory - Process - Module initialize:', module.name);
|
|
39
67
|
this.moduleHandler.initialize();
|
|
40
68
|
Object.assign(this.registeredClasses, this.moduleHandler.getRegisterClass());
|
|
41
|
-
this.logger.success('Factory - Process - Completion
|
|
69
|
+
this.logger.success('Factory - Process Class Module - Completion!!!', module.name);
|
|
42
70
|
const importedModules = this.moduleHandler.getImports();
|
|
43
71
|
if (importedModules && importedModules.length) {
|
|
44
72
|
importedModules.forEach((moduleImport) => {
|
|
45
|
-
this.
|
|
73
|
+
this.processClassModule(moduleImport);
|
|
46
74
|
});
|
|
47
75
|
}
|
|
48
76
|
this.logger.debug('===================================================');
|
|
49
77
|
}
|
|
50
78
|
/**
|
|
51
|
-
* Crea el contenedor de inyección de dependencias y registra
|
|
79
|
+
* Crea el contenedor de inyección de dependencias y registra el listado de
|
|
80
|
+
* controladores, servicio y proveedores que se ha venido creando a parti de escaneos
|
|
81
|
+
* y registros de clases.
|
|
52
82
|
* @returns {Factory} - Instancia actual de la fábrica.
|
|
53
83
|
*/
|
|
54
84
|
create() {
|
|
@@ -77,6 +107,9 @@ class Factory {
|
|
|
77
107
|
throw new resolution_exception_1.ContainerResolutionException(className, resolutionError[0], error.message);
|
|
78
108
|
}
|
|
79
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Se encarga de evaluar las opciones para ver si o no aplica y realizar lo correspondiente
|
|
112
|
+
*/
|
|
80
113
|
evaluateOptions() {
|
|
81
114
|
if (this.options.activeLoggerSystem)
|
|
82
115
|
process.env.ZANOBIJS_LOGGER = 'true';
|
package/injector/injector.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare class Injector {
|
|
|
26
26
|
* lista de proveedores.
|
|
27
27
|
* @private
|
|
28
28
|
*/
|
|
29
|
-
|
|
29
|
+
scanProviders(): void;
|
|
30
30
|
/**
|
|
31
31
|
* Método para obtener un objeto con los parámetros(key) y valores(useValue, useClass, useFactory)
|
|
32
32
|
* que se inyectarán en la clase (target).
|
package/injector/injector.js
CHANGED
|
@@ -29,7 +29,6 @@ class Injector {
|
|
|
29
29
|
this.module = module;
|
|
30
30
|
this.listProviders = listProviders;
|
|
31
31
|
this.listProvidersClass = listProvidersClass;
|
|
32
|
-
this.scanProviders();
|
|
33
32
|
}
|
|
34
33
|
/**
|
|
35
34
|
* Este método privado recorre el array de los servicios del modulo para
|
|
@@ -88,8 +87,8 @@ class Injector {
|
|
|
88
87
|
for (const key of dInject.keys()) {
|
|
89
88
|
if (this.listProviders.has(key)) {
|
|
90
89
|
const paramName = dInject.get(key);
|
|
91
|
-
const
|
|
92
|
-
injectData[paramName] =
|
|
90
|
+
const providerValue = this.listProviders.get(key);
|
|
91
|
+
injectData[paramName] = providerValue.resolve();
|
|
93
92
|
}
|
|
94
93
|
else {
|
|
95
94
|
this.logger.important(`You are trying to inject @INJECT('${key}') into '${target.name}'`, `but the provider '${key}' and its value are not registered in '${this.moduleName}' or any other previously loaded modules`);
|
package/injector/module.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
import { TClass } from '../interfaces';
|
|
3
3
|
/**
|
|
4
|
-
* Módulo para gestionar la configuración y el registro de
|
|
4
|
+
* Módulo para gestionar la configuración y el registro de
|
|
5
|
+
* controladores, servicios, proveedores y dependencias.
|
|
5
6
|
*/
|
|
6
7
|
export declare class Module {
|
|
7
8
|
private config;
|
|
@@ -23,8 +24,18 @@ export declare class Module {
|
|
|
23
24
|
* @param {any} module - Módulo a configurar.
|
|
24
25
|
*/
|
|
25
26
|
setup(module: any): void;
|
|
27
|
+
/** Metodo de exposicion para escarnear proveedores y obtener
|
|
28
|
+
* la metadata del modulo que esta confirgurado(Setup) en ese momento
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
scan(): void;
|
|
26
32
|
/**
|
|
27
|
-
*
|
|
33
|
+
* Este metodo incializa una serie de pasos dentro de los cuales son:
|
|
34
|
+
* obtener la metada del modulo configurado actualmente, busca y registra
|
|
35
|
+
* las dependencias de las entidades (controladores y servicios), registra
|
|
36
|
+
* las dependencias de los proveedores que son tipo entidad (clase abst a clase)
|
|
37
|
+
* y registra las dependecias con alias cuando sus nombres no son iguales
|
|
38
|
+
* @public
|
|
28
39
|
*/
|
|
29
40
|
initialize(): void;
|
|
30
41
|
/**
|
|
@@ -36,15 +47,21 @@ export declare class Module {
|
|
|
36
47
|
* Registra las entidades de configuración en el módulo.
|
|
37
48
|
* @private
|
|
38
49
|
*/
|
|
39
|
-
private
|
|
50
|
+
private registerDependenciesFromEntity;
|
|
40
51
|
/**
|
|
41
|
-
*
|
|
52
|
+
* se encarga de filtrar los metadatos del modulo buscando si es controlador o servicio
|
|
53
|
+
* para luego buscar en los metadatos el nombre de la dependecia y de quien depende
|
|
54
|
+
* para se agrupado y agregarlos a la lista de clases a registrar en el contenedor.
|
|
42
55
|
* @param {('controllers' | 'services')} entityType - Tipo de entidad a registrar.
|
|
43
56
|
* @private
|
|
44
57
|
*/
|
|
45
58
|
private registerEntities;
|
|
46
59
|
/**
|
|
47
|
-
*
|
|
60
|
+
* Se encarga de recorrer la lista de proveedores que son tipo clase para
|
|
61
|
+
* luego buscar en los metadatos el nombre de la dependecia y de quien depende
|
|
62
|
+
* para se agrupado y agregarlos a la lista de clases a registrar en el contenedor.
|
|
63
|
+
* toma el proveedor que es nombre la clase o un token (nombre de pendencia)
|
|
64
|
+
* que va ser sustituida por la clase de useClass
|
|
48
65
|
* @private
|
|
49
66
|
*/
|
|
50
67
|
private registerEntitiesFromProvider;
|
|
@@ -71,7 +88,11 @@ export declare class Module {
|
|
|
71
88
|
* contructor(private sA: ServiceA) // parametro con nombre diferente
|
|
72
89
|
*/
|
|
73
90
|
private registerDependenciesToAlias;
|
|
74
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Toma el listado proveedores y los une al listado de clases que van
|
|
93
|
+
* a registrar en el contenedor (asValue y asFunction) para ser resueltos
|
|
94
|
+
*/
|
|
95
|
+
registerAllProviders(): void;
|
|
75
96
|
/**
|
|
76
97
|
* Devuelve las importaciones del módulo.
|
|
77
98
|
* @returns {TClass[] | undefined} - Importaciones del módulo.
|
package/injector/module.js
CHANGED
|
@@ -10,7 +10,8 @@ const metadata_1 = require("../metadata");
|
|
|
10
10
|
const exceptions_1 = require("../exceptions");
|
|
11
11
|
const invalidProvider_module_exception_1 = require("../exceptions/invalidProvider.module.exception");
|
|
12
12
|
/**
|
|
13
|
-
* Módulo para gestionar la configuración y el registro de
|
|
13
|
+
* Módulo para gestionar la configuración y el registro de
|
|
14
|
+
* controladores, servicios, proveedores y dependencias.
|
|
14
15
|
*/
|
|
15
16
|
class Module {
|
|
16
17
|
config;
|
|
@@ -38,20 +39,32 @@ class Module {
|
|
|
38
39
|
if (this.metadata.isTypeModule(module)) {
|
|
39
40
|
this.module = module;
|
|
40
41
|
this.logger.debug('Module - Setup - Create Injector to module:', module.name);
|
|
41
|
-
this.injector = new injector_1.Injector(module, this.listProviders, this.listProvidersClass);
|
|
42
|
+
this.injector = new injector_1.Injector(this.module, this.listProviders, this.listProvidersClass);
|
|
42
43
|
}
|
|
43
44
|
else {
|
|
44
45
|
throw new exceptions_1.InvalidModuleAnnotationException();
|
|
45
46
|
}
|
|
46
47
|
}
|
|
48
|
+
/** Metodo de exposicion para escarnear proveedores y obtener
|
|
49
|
+
* la metadata del modulo que esta confirgurado(Setup) en ese momento
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
scan() {
|
|
53
|
+
this.injector.scanProviders();
|
|
54
|
+
this.getMetadataModule();
|
|
55
|
+
}
|
|
47
56
|
/**
|
|
48
|
-
*
|
|
57
|
+
* Este metodo incializa una serie de pasos dentro de los cuales son:
|
|
58
|
+
* obtener la metada del modulo configurado actualmente, busca y registra
|
|
59
|
+
* las dependencias de las entidades (controladores y servicios), registra
|
|
60
|
+
* las dependencias de los proveedores que son tipo entidad (clase abst a clase)
|
|
61
|
+
* y registra las dependecias con alias cuando sus nombres no son iguales
|
|
62
|
+
* @public
|
|
49
63
|
*/
|
|
50
64
|
initialize() {
|
|
51
65
|
this.logger.debug('Module - Initialize:', this.module.name);
|
|
52
|
-
this.registerAllProviders();
|
|
53
66
|
this.getMetadataModule();
|
|
54
|
-
this.
|
|
67
|
+
this.registerDependenciesFromEntity();
|
|
55
68
|
this.registerEntitiesFromProvider();
|
|
56
69
|
this.registerDependenciesToAlias();
|
|
57
70
|
}
|
|
@@ -66,12 +79,14 @@ class Module {
|
|
|
66
79
|
* Registra las entidades de configuración en el módulo.
|
|
67
80
|
* @private
|
|
68
81
|
*/
|
|
69
|
-
|
|
82
|
+
registerDependenciesFromEntity() {
|
|
70
83
|
this.registerEntities('controllers');
|
|
71
84
|
this.registerEntities('services');
|
|
72
85
|
}
|
|
73
86
|
/**
|
|
74
|
-
*
|
|
87
|
+
* se encarga de filtrar los metadatos del modulo buscando si es controlador o servicio
|
|
88
|
+
* para luego buscar en los metadatos el nombre de la dependecia y de quien depende
|
|
89
|
+
* para se agrupado y agregarlos a la lista de clases a registrar en el contenedor.
|
|
75
90
|
* @param {('controllers' | 'services')} entityType - Tipo de entidad a registrar.
|
|
76
91
|
* @private
|
|
77
92
|
*/
|
|
@@ -100,7 +115,11 @@ class Module {
|
|
|
100
115
|
}
|
|
101
116
|
}
|
|
102
117
|
/**
|
|
103
|
-
*
|
|
118
|
+
* Se encarga de recorrer la lista de proveedores que son tipo clase para
|
|
119
|
+
* luego buscar en los metadatos el nombre de la dependecia y de quien depende
|
|
120
|
+
* para se agrupado y agregarlos a la lista de clases a registrar en el contenedor.
|
|
121
|
+
* toma el proveedor que es nombre la clase o un token (nombre de pendencia)
|
|
122
|
+
* que va ser sustituida por la clase de useClass
|
|
104
123
|
* @private
|
|
105
124
|
*/
|
|
106
125
|
registerEntitiesFromProvider() {
|
|
@@ -164,6 +183,10 @@ class Module {
|
|
|
164
183
|
}
|
|
165
184
|
});
|
|
166
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Toma el listado proveedores y los une al listado de clases que van
|
|
188
|
+
* a registrar en el contenedor (asValue y asFunction) para ser resueltos
|
|
189
|
+
*/
|
|
167
190
|
registerAllProviders() {
|
|
168
191
|
this.logger.debug('Module - Register list provider:', this.module.name);
|
|
169
192
|
const listProviders = this.injector.getAllProvider();
|
|
@@ -183,7 +206,7 @@ class Module {
|
|
|
183
206
|
* @returns {any} - Clases registradas.
|
|
184
207
|
*/
|
|
185
208
|
getRegisterClass() {
|
|
186
|
-
this.logger.debug(
|
|
209
|
+
this.logger.debug(`Module ${this.module.name} - List of candidate classes to register in container.`, this.registerClass);
|
|
187
210
|
return this.registerClass;
|
|
188
211
|
}
|
|
189
212
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zanobijs/core",
|
|
3
|
-
"version": "1.2.0-beta.
|
|
3
|
+
"version": "1.2.0-beta.2",
|
|
4
4
|
"description": "Zanobi - modern, small, powerful node.js lambda framework (@core)",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "John Edison Cortes Rivera [Devdroide] <johne.aplicativos@gmail.com>",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"@zanobijs/common": "*"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "9eea2d0fd88769931296ebe578beb19f745fac88"
|
|
33
33
|
}
|