@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 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
- * Registra clases desde un módulo específico.
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 processModule;
36
+ private processClassModule;
23
37
  /**
24
- * Crea el contenedor de inyección de dependencias y registra las clases.
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.processModule(appModule);
28
+ this.scanProviderModule(appModule);
29
+ this.registerProviderScanedModules();
30
+ this.processClassModule(appModule);
29
31
  }
30
32
  /**
31
- * Registra clases desde un módulo específico.
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
- processModule(module) {
36
- this.logger.debug('Factory - Process - Create module setup:', module.name);
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 of module ', module.name);
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.processModule(moduleImport);
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 las clases.
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';
@@ -26,7 +26,7 @@ export declare class Injector {
26
26
  * lista de proveedores.
27
27
  * @private
28
28
  */
29
- private scanProviders;
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).
@@ -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 provider = this.listProviders.get(key);
92
- injectData[paramName] = provider;
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`);
@@ -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 controladores, servicios y dependencias.
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
- * Inicializa el módulo extrayendo metadatos y registrando las entidades.
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 registerDependencies;
50
+ private registerDependenciesFromEntity;
40
51
  /**
41
- * Registra entidades de configuración (controladores o servicios) del módulo.
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
- * Registra entidades que se escanearon en dentro de proveedores para se reemplazar otra clase.
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
- private registerAllProviders;
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.
@@ -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 controladores, servicios y dependencias.
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
- * Inicializa el módulo extrayendo metadatos y registrando las entidades.
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.registerDependencies();
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
- registerDependencies() {
82
+ registerDependenciesFromEntity() {
70
83
  this.registerEntities('controllers');
71
84
  this.registerEntities('services');
72
85
  }
73
86
  /**
74
- * Registra entidades de configuración (controladores o servicios) del módulo.
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
- * Registra entidades que se escanearon en dentro de proveedores para se reemplazar otra clase.
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('Module - List of candidate classes to register in container.', this.registerClass);
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.0",
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": "fab2cf615b0fb46a1bd4867b6985c1ad2d88d130"
32
+ "gitHead": "9eea2d0fd88769931296ebe578beb19f745fac88"
33
33
  }