@navios/core 0.1.14 → 0.2.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.
Files changed (71) hide show
  1. package/dist/_tsup-dts-rollup.d.mts +185 -434
  2. package/dist/_tsup-dts-rollup.d.ts +185 -434
  3. package/dist/index.d.mts +62 -46
  4. package/dist/index.d.ts +62 -46
  5. package/dist/index.js +482 -1328
  6. package/dist/index.mjs +484 -1292
  7. package/package.json +3 -2
  8. package/src/adapters/endpoint-adapter.service.mts +72 -0
  9. package/src/adapters/handler-adapter.interface.mts +21 -0
  10. package/src/adapters/index.mts +4 -0
  11. package/src/adapters/multipart-adapter.service.mts +131 -0
  12. package/src/adapters/stream-adapter.service.mts +91 -0
  13. package/src/attribute.factory.mts +14 -14
  14. package/src/config/config.provider.mts +16 -12
  15. package/src/decorators/controller.decorator.mts +3 -8
  16. package/src/decorators/endpoint.decorator.mts +7 -3
  17. package/src/decorators/header.decorator.mts +1 -6
  18. package/src/decorators/http-code.decorator.mts +1 -6
  19. package/src/decorators/module.decorator.mts +16 -21
  20. package/src/decorators/multipart.decorator.mts +7 -3
  21. package/src/decorators/stream.decorator.mts +7 -3
  22. package/src/decorators/use-guards.decorator.mts +3 -2
  23. package/src/index.mts +2 -1
  24. package/src/logger/console-logger.service.mts +3 -2
  25. package/src/logger/logger.factory.mts +4 -5
  26. package/src/logger/logger.service.mts +2 -2
  27. package/src/metadata/controller.metadata.mts +6 -5
  28. package/src/metadata/{endpoint.metadata.mts → handler.metadata.mts} +18 -28
  29. package/src/metadata/index.mts +1 -2
  30. package/src/metadata/module.metadata.mts +3 -2
  31. package/src/navios.application.mts +12 -12
  32. package/src/navios.factory.mts +4 -2
  33. package/src/services/controller-adapter.service.mts +65 -245
  34. package/src/services/execution-context.mts +4 -3
  35. package/src/services/guard-runner.service.mts +4 -6
  36. package/src/services/module-loader.service.mts +4 -2
  37. package/src/tokens/application.token.mts +1 -1
  38. package/src/tokens/execution-context.token.mts +2 -1
  39. package/src/tokens/reply.token.mts +1 -1
  40. package/src/tokens/request.token.mts +1 -1
  41. package/src/metadata/injectable.metadata.mts +0 -11
  42. package/src/service-locator/__tests__/injectable.spec.mts +0 -171
  43. package/src/service-locator/__tests__/injection-token.spec.mts +0 -124
  44. package/src/service-locator/decorators/get-injectable-token.mts +0 -19
  45. package/src/service-locator/decorators/index.mts +0 -2
  46. package/src/service-locator/decorators/injectable.decorator.mts +0 -64
  47. package/src/service-locator/enums/index.mts +0 -1
  48. package/src/service-locator/enums/injectable-scope.enum.mts +0 -10
  49. package/src/service-locator/errors/errors.enum.mts +0 -8
  50. package/src/service-locator/errors/factory-not-found.mts +0 -8
  51. package/src/service-locator/errors/factory-token-not-resolved.mts +0 -10
  52. package/src/service-locator/errors/index.mts +0 -7
  53. package/src/service-locator/errors/instance-destroying.mts +0 -8
  54. package/src/service-locator/errors/instance-expired.mts +0 -8
  55. package/src/service-locator/errors/instance-not-found.mts +0 -8
  56. package/src/service-locator/errors/unknown-error.mts +0 -15
  57. package/src/service-locator/event-emitter.mts +0 -107
  58. package/src/service-locator/index.mts +0 -15
  59. package/src/service-locator/inject.mts +0 -28
  60. package/src/service-locator/injection-token.mts +0 -92
  61. package/src/service-locator/injector.mts +0 -18
  62. package/src/service-locator/interfaces/factory.interface.mts +0 -3
  63. package/src/service-locator/override.mts +0 -22
  64. package/src/service-locator/proxy-service-locator.mts +0 -99
  65. package/src/service-locator/resolve-service.mts +0 -46
  66. package/src/service-locator/service-locator-abstract-factory-context.mts +0 -23
  67. package/src/service-locator/service-locator-event-bus.mts +0 -96
  68. package/src/service-locator/service-locator-instance-holder.mts +0 -63
  69. package/src/service-locator/service-locator-manager.mts +0 -89
  70. package/src/service-locator/service-locator.mts +0 -535
  71. package/src/service-locator/sync-injector.mts +0 -52
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __knownSymbol = (name2, symbol) => (symbol = Symbol[name2]) ? symbol : Symbol.for("Symbol." + name2);
4
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
5
5
  var __typeError = (msg) => {
6
6
  throw TypeError(msg);
7
7
  };
@@ -10,35 +10,35 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
10
10
  var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
11
11
  var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
12
  var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
- var __decoratorContext = (kind, name2, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name: name2, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
13
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
14
  var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
15
  var __runInitializers = (array, flags, self, value) => {
16
16
  for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
17
  return value;
18
18
  };
19
- var __decorateElement = (array, flags, name2, decorators, target, extra) => {
19
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
20
  var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
21
  var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
22
  var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
- var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name2]() {
23
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
24
  return __privateGet(this, extra);
25
- }, set [name2](x) {
25
+ }, set [name](x) {
26
26
  return __privateSet(this, extra, x);
27
- } }, name2));
28
- k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name2) : __name(target, name2);
27
+ } }, name));
28
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
29
  for (var i = decorators.length - 1; i >= 0; i--) {
30
- ctx = __decoratorContext(k, name2, done = {}, array[3], extraInitializers);
30
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
31
  if (k) {
32
- ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name2 in x };
33
- if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name2];
34
- if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name2] = y;
32
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
35
  }
36
36
  it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
37
  if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
38
  else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
39
  else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
40
  }
41
- return k || __decoratorMetadata(array, target), desc && __defProp(target, name2, desc), p ? k ^ 4 ? extra : desc : target;
41
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
42
  };
43
43
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
44
  var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
@@ -46,6 +46,232 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
46
46
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
47
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
48
 
49
+ // packages/core/src/index.mts
50
+ export * from "@navios/di";
51
+
52
+ // packages/core/src/adapters/endpoint-adapter.service.mts
53
+ import { inject as inject2, Injectable as Injectable2, InjectionToken as InjectionToken2 } from "@navios/di";
54
+
55
+ // packages/core/src/adapters/stream-adapter.service.mts
56
+ import { inject, Injectable, InjectionToken } from "@navios/di";
57
+ var StreamAdapterToken = InjectionToken.create(
58
+ Symbol.for("StreamAdapterService")
59
+ );
60
+ var _StreamAdapterService_decorators, _init;
61
+ _StreamAdapterService_decorators = [Injectable({
62
+ token: StreamAdapterToken
63
+ })];
64
+ var StreamAdapterService = class {
65
+ hasSchema(handlerMetadata) {
66
+ const config = handlerMetadata.config;
67
+ return !!config.requestSchema || !!config.querySchema;
68
+ }
69
+ prepareArguments(handlerMetadata) {
70
+ const config = handlerMetadata.config;
71
+ const getters = [];
72
+ if (config.querySchema) {
73
+ getters.push((target, request) => {
74
+ target.params = request.query;
75
+ });
76
+ }
77
+ if (config.requestSchema) {
78
+ getters.push((target, request) => {
79
+ target.data = request.body;
80
+ });
81
+ }
82
+ if (config.url.includes("$")) {
83
+ getters.push((target, request) => {
84
+ target.urlParams = request.params;
85
+ });
86
+ }
87
+ return getters;
88
+ }
89
+ provideHandler(controller, executionContext, handlerMetadata) {
90
+ const getters = this.prepareArguments(handlerMetadata);
91
+ const formatArguments = async (request) => {
92
+ const argument = {};
93
+ const promises = [];
94
+ for (const getter of getters) {
95
+ const res = getter(argument, request);
96
+ if (res instanceof Promise) {
97
+ promises.push(res);
98
+ }
99
+ }
100
+ await Promise.all(promises);
101
+ return argument;
102
+ };
103
+ return async function(request, reply) {
104
+ const controllerInstance = await inject(controller);
105
+ const argument = await formatArguments(request);
106
+ await controllerInstance[handlerMetadata.classMethod](argument, reply);
107
+ };
108
+ }
109
+ provideSchema(handlerMetadata) {
110
+ const schema = {};
111
+ const { querySchema, requestSchema } = handlerMetadata.config;
112
+ if (querySchema) {
113
+ schema.querystring = querySchema;
114
+ }
115
+ if (requestSchema) {
116
+ schema.body = requestSchema;
117
+ }
118
+ return schema;
119
+ }
120
+ };
121
+ _init = __decoratorStart(null);
122
+ StreamAdapterService = __decorateElement(_init, 0, "StreamAdapterService", _StreamAdapterService_decorators, StreamAdapterService);
123
+ __runInitializers(_init, 1, StreamAdapterService);
124
+
125
+ // packages/core/src/adapters/endpoint-adapter.service.mts
126
+ var EndpointAdapterToken = InjectionToken2.create(
127
+ Symbol.for("EndpointAdapterService")
128
+ );
129
+ var _EndpointAdapterService_decorators, _init2, _a;
130
+ _EndpointAdapterService_decorators = [Injectable2({
131
+ token: EndpointAdapterToken
132
+ })];
133
+ var EndpointAdapterService = class extends (_a = StreamAdapterService) {
134
+ hasSchema(handlerMetadata) {
135
+ const config = handlerMetadata.config;
136
+ return super.hasSchema(handlerMetadata) || !!config.responseSchema;
137
+ }
138
+ provideSchema(handlerMetadata) {
139
+ const config = handlerMetadata.config;
140
+ const schema = super.provideSchema(handlerMetadata);
141
+ if (config.responseSchema) {
142
+ schema.response = {
143
+ 200: config.responseSchema
144
+ };
145
+ }
146
+ return schema;
147
+ }
148
+ provideHandler(controller, executionContext, handlerMetadata) {
149
+ const getters = this.prepareArguments(handlerMetadata);
150
+ const formatArguments = async (request) => {
151
+ const argument = {};
152
+ const promises = [];
153
+ for (const getter of getters) {
154
+ const res = getter(argument, request);
155
+ if (res instanceof Promise) {
156
+ promises.push(res);
157
+ }
158
+ }
159
+ await Promise.all(promises);
160
+ return argument;
161
+ };
162
+ return async function(request, reply) {
163
+ const controllerInstance = await inject2(controller);
164
+ const argument = await formatArguments(request);
165
+ const result = await controllerInstance[handlerMetadata.classMethod](argument);
166
+ reply.status(handlerMetadata.successStatusCode).headers(handlerMetadata.headers).send(result);
167
+ };
168
+ }
169
+ };
170
+ _init2 = __decoratorStart(_a);
171
+ EndpointAdapterService = __decorateElement(_init2, 0, "EndpointAdapterService", _EndpointAdapterService_decorators, EndpointAdapterService);
172
+ __runInitializers(_init2, 1, EndpointAdapterService);
173
+
174
+ // packages/core/src/adapters/multipart-adapter.service.mts
175
+ import { Injectable as Injectable3, InjectionToken as InjectionToken3 } from "@navios/di";
176
+ import { ZodArray, ZodObject, ZodOptional } from "zod";
177
+ var MultipartAdapterToken = InjectionToken3.create(
178
+ Symbol.for("MultipartAdapterService")
179
+ );
180
+ var _MultipartAdapterService_decorators, _init3, _a2;
181
+ _MultipartAdapterService_decorators = [Injectable3({
182
+ token: MultipartAdapterToken
183
+ })];
184
+ var MultipartAdapterService = class extends (_a2 = EndpointAdapterService) {
185
+ prepareArguments(handlerMetadata) {
186
+ const config = handlerMetadata.config;
187
+ const getters = [];
188
+ if (config.querySchema) {
189
+ getters.push((target, request) => {
190
+ target.params = request.query;
191
+ });
192
+ }
193
+ if (config.url.includes("$")) {
194
+ getters.push((target, request) => {
195
+ target.urlParams = request.params;
196
+ });
197
+ }
198
+ const requestSchema = config.requestSchema;
199
+ const shape = requestSchema._def.shape();
200
+ const structure = this.analyzeSchema(shape);
201
+ getters.push(async (target, request) => {
202
+ const req = {};
203
+ for await (const part of request.parts()) {
204
+ await this.populateRequest(structure, part, req);
205
+ }
206
+ target.data = requestSchema.parse(req);
207
+ });
208
+ return getters;
209
+ }
210
+ async populateRequest(structure, part, req) {
211
+ const { isArray, isObject: isObject2 } = structure[part.fieldname] ?? {};
212
+ if (isArray && !req[part.fieldname]) {
213
+ req[part.fieldname] = [];
214
+ }
215
+ let value;
216
+ if (part.type === "file") {
217
+ value = new File([await part.toBuffer()], part.filename, {
218
+ type: part.mimetype
219
+ });
220
+ } else {
221
+ value = part.value;
222
+ if (isObject2 && typeof value === "string") {
223
+ value = JSON.parse(value);
224
+ }
225
+ }
226
+ if (isArray) {
227
+ req[part.fieldname].push(value);
228
+ } else {
229
+ req[part.fieldname] = value;
230
+ }
231
+ }
232
+ analyzeSchema(shape) {
233
+ return Object.keys(shape).reduce(
234
+ (target, key) => {
235
+ let schema = shape[key];
236
+ const isOptional = schema instanceof ZodOptional;
237
+ if (isOptional) {
238
+ schema = schema.unwrap();
239
+ }
240
+ const isArray = schema instanceof ZodArray;
241
+ if (isArray) {
242
+ schema = schema.element;
243
+ }
244
+ const isObject2 = schema instanceof ZodObject;
245
+ return {
246
+ ...target,
247
+ [key]: {
248
+ isArray,
249
+ isOptional,
250
+ isObject: isObject2
251
+ }
252
+ };
253
+ },
254
+ {}
255
+ );
256
+ }
257
+ provideSchema(handlerMetadata) {
258
+ const schema = {};
259
+ const { querySchema, responseSchema } = handlerMetadata.config;
260
+ if (querySchema) {
261
+ schema.querystring = querySchema;
262
+ }
263
+ if (responseSchema) {
264
+ schema.response = {
265
+ 200: responseSchema
266
+ };
267
+ }
268
+ return schema;
269
+ }
270
+ };
271
+ _init3 = __decoratorStart(_a2);
272
+ MultipartAdapterService = __decorateElement(_init3, 0, "MultipartAdapterService", _MultipartAdapterService_decorators, MultipartAdapterService);
273
+ __runInitializers(_init3, 1, MultipartAdapterService);
274
+
49
275
  // packages/core/src/config/utils/helpers.mts
50
276
  import { env } from "node:process";
51
277
  function envInt(key, defaultValue) {
@@ -57,7 +283,13 @@ function envString(key, defaultValue) {
57
283
  }
58
284
 
59
285
  // packages/core/src/config/config.provider.mts
60
- import { z as z3 } from "zod";
286
+ import {
287
+ Injectable as Injectable10,
288
+ InjectableType as InjectableType2,
289
+ InjectionToken as InjectionToken11,
290
+ syncInject as syncInject3
291
+ } from "@navios/di";
292
+ import { z as z2 } from "zod";
61
293
 
62
294
  // packages/core/src/logger/utils/cli-colors.util.mts
63
295
  var isColorAllowed = () => !process.env.NO_COLOR;
@@ -117,14 +349,14 @@ var LOG_LEVEL_VALUES = {
117
349
  fatal: 5
118
350
  };
119
351
  function isLogLevelEnabled(targetLevel, logLevels) {
120
- var _a;
352
+ var _a3;
121
353
  if (!logLevels || Array.isArray(logLevels) && (logLevels == null ? void 0 : logLevels.length) === 0) {
122
354
  return false;
123
355
  }
124
356
  if (logLevels.includes(targetLevel)) {
125
357
  return true;
126
358
  }
127
- const highestLogLevelValue = (_a = logLevels.map((level) => LOG_LEVEL_VALUES[level]).sort((a, b) => b - a)) == null ? void 0 : _a[0];
359
+ const highestLogLevelValue = (_a3 = logLevels.map((level) => LOG_LEVEL_VALUES[level]).sort((a, b) => b - a)) == null ? void 0 : _a3[0];
128
360
  const targetLevelValue = LOG_LEVEL_VALUES[targetLevel];
129
361
  return targetLevelValue >= highestLogLevelValue;
130
362
  }
@@ -156,912 +388,28 @@ var isSymbol = (val) => typeof val === "symbol";
156
388
 
157
389
  // packages/core/src/logger/console-logger.service.mts
158
390
  import { inspect } from "util";
159
-
160
- // packages/core/src/service-locator/decorators/injectable.decorator.mts
161
- import { NaviosException as NaviosException2 } from "@navios/common";
162
-
163
- // packages/core/src/service-locator/enums/injectable-scope.enum.mts
164
- var InjectableScope = /* @__PURE__ */ ((InjectableScope2) => {
165
- InjectableScope2["Singleton"] = "Singleton";
166
- InjectableScope2["Instance"] = "Instance";
167
- return InjectableScope2;
168
- })(InjectableScope || {});
169
-
170
- // packages/core/src/service-locator/injection-token.mts
171
- import { randomUUID } from "crypto";
172
- import "zod";
173
- var InjectionToken = class _InjectionToken {
174
- constructor(name2, schema) {
175
- this.name = name2;
176
- this.schema = schema;
177
- }
178
- id = randomUUID();
179
- static create(name2, schema) {
180
- return new _InjectionToken(name2, schema);
181
- }
182
- static bound(token, value) {
183
- return new BoundInjectionToken(token, value);
184
- }
185
- static factory(token, factory) {
186
- return new FactoryInjectionToken(token, factory);
187
- }
188
- static refineType(token) {
189
- return token;
190
- }
191
- };
192
- var BoundInjectionToken = class extends InjectionToken {
193
- constructor(token, value) {
194
- super(token.name, token.schema);
195
- this.token = token;
196
- this.value = value;
197
- this.id = token.id;
198
- }
199
- };
200
- var FactoryInjectionToken = class extends InjectionToken {
201
- constructor(token, factory) {
202
- super(token.name, token.schema);
203
- this.token = token;
204
- this.factory = factory;
205
- }
206
- value;
207
- resolved = false;
208
- async resolve() {
209
- if (!this.value) {
210
- this.value = await this.factory();
211
- this.resolved = true;
212
- }
213
- return this.value;
214
- }
215
- };
216
-
217
- // packages/core/src/service-locator/errors/errors.enum.mts
218
- var ErrorsEnum = /* @__PURE__ */ ((ErrorsEnum2) => {
219
- ErrorsEnum2["InstanceExpired"] = "InstanceExpired";
220
- ErrorsEnum2["InstanceNotFound"] = "InstanceNotFound";
221
- ErrorsEnum2["InstanceDestroying"] = "InstanceDestroying";
222
- ErrorsEnum2["UnknownError"] = "UnknownError";
223
- ErrorsEnum2["FactoryNotFound"] = "FactoryNotFound";
224
- ErrorsEnum2["FactoryTokenNotResolved"] = "FactoryTokenNotResolved";
225
- return ErrorsEnum2;
226
- })(ErrorsEnum || {});
227
-
228
- // packages/core/src/service-locator/errors/factory-not-found.mts
229
- var FactoryNotFound = class extends Error {
230
- constructor(name2) {
231
- super(`Factory ${name2} not found`);
232
- this.name = name2;
233
- }
234
- code = "FactoryNotFound" /* FactoryNotFound */;
235
- };
236
-
237
- // packages/core/src/service-locator/errors/factory-token-not-resolved.mts
238
- var FactoryTokenNotResolved = class extends Error {
239
- code = "FactoryTokenNotResolved" /* FactoryTokenNotResolved */;
240
- constructor(name2) {
241
- super(`Factory token not resolved: ${name2.toString()}`);
242
- }
243
- };
244
-
245
- // packages/core/src/service-locator/errors/instance-destroying.mts
246
- var InstanceDestroying = class extends Error {
247
- constructor(name2) {
248
- super(`Instance ${name2} destroying`);
249
- this.name = name2;
250
- }
251
- code = "InstanceDestroying" /* InstanceDestroying */;
252
- };
253
-
254
- // packages/core/src/service-locator/errors/instance-expired.mts
255
- var InstanceExpired = class extends Error {
256
- constructor(name2) {
257
- super(`Instance ${name2} expired`);
258
- this.name = name2;
259
- }
260
- code = "InstanceExpired" /* InstanceExpired */;
261
- };
262
-
263
- // packages/core/src/service-locator/errors/instance-not-found.mts
264
- var InstanceNotFound = class extends Error {
265
- constructor(name2) {
266
- super(`Instance ${name2} not found`);
267
- this.name = name2;
268
- }
269
- code = "InstanceNotFound" /* InstanceNotFound */;
270
- };
271
-
272
- // packages/core/src/service-locator/errors/unknown-error.mts
273
- var UnknownError = class extends Error {
274
- code = "UnknownError" /* UnknownError */;
275
- parent;
276
- constructor(message) {
277
- if (message instanceof Error) {
278
- super(message.message);
279
- this.parent = message;
280
- return;
281
- }
282
- super(message);
283
- }
284
- };
285
-
286
- // packages/core/src/service-locator/service-locator-event-bus.mts
287
- var ServiceLocatorEventBus = class {
288
- constructor(logger = null) {
289
- this.logger = logger;
290
- }
291
- listeners = /* @__PURE__ */ new Map();
292
- on(ns, event, listener) {
293
- var _a;
294
- (_a = this.logger) == null ? void 0 : _a.debug(`[ServiceLocatorEventBus]#on(): ns:${ns} event:${event}`);
295
- if (!this.listeners.has(ns)) {
296
- this.listeners.set(ns, /* @__PURE__ */ new Map());
297
- }
298
- const nsEvents = this.listeners.get(ns);
299
- if (!nsEvents.has(event)) {
300
- nsEvents.set(event, /* @__PURE__ */ new Set());
301
- }
302
- nsEvents.get(event).add(listener);
303
- return () => {
304
- var _a2;
305
- nsEvents.get(event).delete(listener);
306
- if (((_a2 = nsEvents.get(event)) == null ? void 0 : _a2.size) === 0) {
307
- nsEvents.delete(event);
308
- }
309
- if (nsEvents.size === 0) {
310
- this.listeners.delete(ns);
311
- }
312
- };
313
- }
314
- async emit(key, event) {
315
- var _a, _b, _c;
316
- if (!this.listeners.has(key)) {
317
- return;
318
- }
319
- const events = this.listeners.get(key);
320
- const preEvent = `pre:${event}`;
321
- const postEvent = `post:${event}`;
322
- (_a = this.logger) == null ? void 0 : _a.debug(`[ServiceLocatorEventBus]#emit(): ${key}:${preEvent}`);
323
- await Promise.allSettled(
324
- [...events.get(preEvent) ?? []].map((listener) => listener(preEvent))
325
- ).then((results) => {
326
- results.filter((result) => result.status === "rejected").forEach((result) => {
327
- var _a2;
328
- (_a2 = this.logger) == null ? void 0 : _a2.warn(
329
- `[ServiceLocatorEventBus]#emit(): ${key}:${preEvent} rejected with`,
330
- result.reason
331
- );
332
- });
333
- });
334
- (_b = this.logger) == null ? void 0 : _b.debug(`[ServiceLocatorEventBus]#emit(): ${key}:${event}`);
335
- const res = await Promise.allSettled(
336
- [...events.get(event) ?? []].map((listener) => listener(event))
337
- ).then((results) => {
338
- const res2 = results.filter((result) => result.status === "rejected").map((result) => {
339
- var _a2;
340
- (_a2 = this.logger) == null ? void 0 : _a2.warn(
341
- `[ServiceLocatorEventBus]#emit(): ${key}:${event} rejected with`,
342
- result.reason
343
- );
344
- return result;
345
- });
346
- if (res2.length > 0) {
347
- return Promise.reject(res2);
348
- }
349
- return results;
350
- });
351
- (_c = this.logger) == null ? void 0 : _c.debug(`[ServiceLocatorEventBus]#emit(): ${key}:${postEvent}`);
352
- await Promise.allSettled(
353
- [...events.get(postEvent) ?? []].map((listener) => listener(postEvent))
354
- ).then((results) => {
355
- results.filter((result) => result.status === "rejected").forEach((result) => {
356
- var _a2;
357
- (_a2 = this.logger) == null ? void 0 : _a2.warn(
358
- `[ServiceLocatorEventBus]#emit(): ${key}:${postEvent} rejected with`,
359
- result.reason
360
- );
361
- });
362
- });
363
- return res;
364
- }
365
- };
366
-
367
- // packages/core/src/service-locator/service-locator-instance-holder.mts
368
- var ServiceLocatorInstanceHolderKind = /* @__PURE__ */ ((ServiceLocatorInstanceHolderKind2) => {
369
- ServiceLocatorInstanceHolderKind2["Instance"] = "instance";
370
- ServiceLocatorInstanceHolderKind2["Factory"] = "factory";
371
- ServiceLocatorInstanceHolderKind2["AbstractFactory"] = "abstractFactory";
372
- return ServiceLocatorInstanceHolderKind2;
373
- })(ServiceLocatorInstanceHolderKind || {});
374
- var ServiceLocatorInstanceHolderStatus = /* @__PURE__ */ ((ServiceLocatorInstanceHolderStatus2) => {
375
- ServiceLocatorInstanceHolderStatus2["Created"] = "created";
376
- ServiceLocatorInstanceHolderStatus2["Creating"] = "creating";
377
- ServiceLocatorInstanceHolderStatus2["Destroying"] = "destroying";
378
- return ServiceLocatorInstanceHolderStatus2;
379
- })(ServiceLocatorInstanceHolderStatus || {});
380
-
381
- // packages/core/src/service-locator/service-locator-manager.mts
382
- var ServiceLocatorManager = class {
383
- constructor(logger = null) {
384
- this.logger = logger;
385
- }
386
- instancesHolders = /* @__PURE__ */ new Map();
387
- get(name2) {
388
- var _a, _b, _c;
389
- const holder = this.instancesHolders.get(name2);
390
- if (holder) {
391
- if (holder.ttl !== Infinity) {
392
- const now = Date.now();
393
- if (now - holder.createdAt > holder.ttl) {
394
- (_a = this.logger) == null ? void 0 : _a.log(
395
- `[ServiceLocatorManager]#getInstanceHolder() TTL expired for ${holder.name}`
396
- );
397
- return [new InstanceExpired(holder.name), holder];
398
- }
399
- } else if (holder.status === "destroying" /* Destroying */) {
400
- (_b = this.logger) == null ? void 0 : _b.log(
401
- `[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is destroying`
402
- );
403
- return [new InstanceDestroying(holder.name), holder];
404
- }
405
- return [void 0, holder];
406
- } else {
407
- (_c = this.logger) == null ? void 0 : _c.log(
408
- `[ServiceLocatorManager]#getInstanceHolder() Instance ${name2} not found`
409
- );
410
- return [new InstanceNotFound(name2)];
411
- }
412
- }
413
- set(name2, holder) {
414
- this.instancesHolders.set(name2, holder);
415
- }
416
- has(name2) {
417
- const [error, holder] = this.get(name2);
418
- if (!error) {
419
- return [void 0, true];
420
- }
421
- if (["InstanceExpired" /* InstanceExpired */, "InstanceDestroying" /* InstanceDestroying */].includes(
422
- error.code
423
- )) {
424
- return [error];
425
- }
426
- return [void 0, !!holder];
427
- }
428
- delete(name2) {
429
- return this.instancesHolders.delete(name2);
430
- }
431
- filter(predicate) {
432
- return new Map(
433
- [...this.instancesHolders].filter(
434
- ([key, value]) => predicate(value, key)
435
- )
436
- );
437
- }
438
- };
439
-
440
- // packages/core/src/service-locator/service-locator.mts
441
- var ServiceLocator = class {
442
- constructor(logger = null) {
443
- this.logger = logger;
444
- this.eventBus = new ServiceLocatorEventBus(logger);
445
- this.manager = new ServiceLocatorManager(logger);
446
- }
447
- abstractFactories = /* @__PURE__ */ new Map();
448
- instanceFactories = /* @__PURE__ */ new Map();
449
- eventBus;
450
- manager;
451
- getEventBus() {
452
- return this.eventBus;
453
- }
454
- registerInstance(token, instance) {
455
- const instanceName = this.getInstanceIdentifier(token, void 0);
456
- this.manager.set(instanceName, {
457
- name: instanceName,
458
- instance,
459
- status: "created" /* Created */,
460
- kind: "instance" /* Instance */,
461
- createdAt: Date.now(),
462
- ttl: Infinity,
463
- deps: [],
464
- destroyListeners: [],
465
- effects: [],
466
- destroyPromise: null,
467
- creationPromise: null
468
- });
469
- this.eventBus.emit(instanceName, "create");
470
- }
471
- removeInstance(token) {
472
- const instanceName = this.getInstanceIdentifier(token, void 0);
473
- return this.invalidate(instanceName);
474
- }
475
- registerAbstractFactory(token, factory, type = "Singleton" /* Singleton */) {
476
- var _a;
477
- (_a = this.logger) == null ? void 0 : _a.log(
478
- `[ServiceLocator]#registerAbstractFactory(): Registering abstract factory for ${name}`
479
- );
480
- if (type === "Instance" /* Instance */) {
481
- this.instanceFactories.set(token, factory);
482
- this.abstractFactories.delete(token);
483
- } else {
484
- this.abstractFactories.set(token, factory);
485
- this.instanceFactories.delete(token);
486
- }
487
- }
488
- resolveTokenArgs(token, args) {
489
- var _a, _b;
490
- let realArgs = args;
491
- if (token instanceof BoundInjectionToken) {
492
- realArgs = token.value;
493
- } else if (token instanceof FactoryInjectionToken) {
494
- if (token.resolved) {
495
- realArgs = token.value;
496
- } else {
497
- return [new FactoryTokenNotResolved(token.name)];
498
- }
499
- }
500
- if (!token.schema) {
501
- return [void 0, realArgs];
502
- }
503
- const validatedArgs = (_a = token.schema) == null ? void 0 : _a.safeParse(realArgs);
504
- if (validatedArgs && !validatedArgs.success) {
505
- (_b = this.logger) == null ? void 0 : _b.error(
506
- `[ServiceLocator]#getInstance(): Error validating args for ${token.name.toString()}`,
507
- validatedArgs.error
508
- );
509
- return [new UnknownError(validatedArgs.error)];
510
- }
511
- return [void 0, validatedArgs == null ? void 0 : validatedArgs.data];
512
- }
513
- getInstanceIdentifier(token, args) {
514
- const [err, realArgs] = this.resolveTokenArgs(token, args);
515
- if (err) {
516
- throw err;
517
- }
518
- return this.makeInstanceName(token, realArgs);
519
- }
520
- async getInstance(token, args) {
521
- var _a, _b;
522
- const [err, realArgs] = this.resolveTokenArgs(token, args);
523
- if (err instanceof UnknownError) {
524
- throw err;
525
- } else if (err instanceof FactoryTokenNotResolved && token instanceof FactoryInjectionToken) {
526
- await token.resolve();
527
- return this.getInstance(token, args);
528
- }
529
- const instanceName = this.makeInstanceName(token, realArgs);
530
- const [error, holder] = this.manager.get(instanceName);
531
- if (!error) {
532
- if (holder.status === "creating" /* Creating */) {
533
- return holder.creationPromise;
534
- } else if (holder.status === "destroying" /* Destroying */) {
535
- return [new UnknownError("InstanceDestroying" /* InstanceDestroying */)];
536
- }
537
- return [void 0, holder.instance];
538
- }
539
- switch (error.code) {
540
- case "InstanceDestroying" /* InstanceDestroying */:
541
- (_a = this.logger) == null ? void 0 : _a.log(
542
- `[ServiceLocator]#getInstance() TTL expired for ${holder == null ? void 0 : holder.name}`
543
- );
544
- await (holder == null ? void 0 : holder.destroyPromise);
545
- return this.getInstance(token, args);
546
- case "InstanceExpired" /* InstanceExpired */:
547
- (_b = this.logger) == null ? void 0 : _b.log(
548
- `[ServiceLocator]#getInstance() TTL expired for ${holder == null ? void 0 : holder.name}`
549
- );
550
- await this.invalidate(instanceName);
551
- return this.getInstance(token, args);
552
- case "InstanceNotFound" /* InstanceNotFound */:
553
- break;
554
- default:
555
- return [error];
556
- }
557
- return this.createInstance(instanceName, token, realArgs);
558
- }
559
- async getOrThrowInstance(token, args) {
560
- const [error, instance] = await this.getInstance(token, args);
561
- if (error) {
562
- throw error;
563
- }
564
- return instance;
565
- }
566
- notifyListeners(name2, event = "create") {
567
- var _a;
568
- (_a = this.logger) == null ? void 0 : _a.log(
569
- `[ServiceLocator]#notifyListeners() Notifying listeners for ${name2} with event ${event}`
570
- );
571
- return this.eventBus.emit(name2, event);
572
- }
573
- async createInstance(instanceName, token, args) {
574
- var _a;
575
- (_a = this.logger) == null ? void 0 : _a.log(
576
- `[ServiceLocator]#createInstance() Creating instance for ${instanceName}`
577
- );
578
- let realToken = token instanceof BoundInjectionToken || token instanceof FactoryInjectionToken ? token.token : token;
579
- if (this.abstractFactories.has(realToken) || this.instanceFactories.has(realToken)) {
580
- return this.createInstanceFromAbstractFactory(
581
- instanceName,
582
- realToken,
583
- args
584
- );
585
- } else {
586
- return [new FactoryNotFound(realToken.name.toString())];
587
- }
588
- }
589
- async createInstanceFromAbstractFactory(instanceName, token, args) {
590
- var _a;
591
- (_a = this.logger) == null ? void 0 : _a.log(
592
- `[ServiceLocator]#createInstanceFromAbstractFactory(): Creating instance for ${instanceName} from abstract factory`
593
- );
594
- const ctx = this.createContextForAbstractFactory(instanceName);
595
- let shouldStore = true;
596
- let abstractFactory = this.abstractFactories.get(token);
597
- if (!abstractFactory) {
598
- abstractFactory = this.instanceFactories.get(token);
599
- shouldStore = false;
600
- if (!abstractFactory) {
601
- return [new FactoryNotFound(token.name.toString())];
602
- }
603
- }
604
- const holder = {
605
- name: instanceName,
606
- instance: null,
607
- status: "creating" /* Creating */,
608
- kind: "abstractFactory" /* AbstractFactory */,
609
- // @ts-expect-error TS2322 This is correct type
610
- creationPromise: abstractFactory(ctx, args).then(async (instance) => {
611
- var _a2;
612
- holder.instance = instance;
613
- holder.status = "created" /* Created */;
614
- holder.deps = ctx.getDependencies();
615
- holder.destroyListeners = ctx.getDestroyListeners();
616
- holder.ttl = ctx.getTtl();
617
- if (holder.deps.length > 0) {
618
- (_a2 = this.logger) == null ? void 0 : _a2.log(
619
- `[ServiceLocator]#createInstanceFromAbstractFactory(): Adding subscriptions for ${instanceName} dependencies for their invalidations: ${holder.deps.join(
620
- ", "
621
- )}`
622
- );
623
- holder.deps.forEach((dependency) => {
624
- holder.destroyListeners.push(
625
- this.eventBus.on(
626
- dependency,
627
- "destroy",
628
- () => this.invalidate(instanceName)
629
- )
630
- );
631
- });
632
- }
633
- if (holder.ttl === 0 || !shouldStore) {
634
- await this.invalidate(instanceName);
635
- }
636
- await this.notifyListeners(instanceName);
637
- return [void 0, instance];
638
- }).catch((error) => {
639
- var _a2;
640
- (_a2 = this.logger) == null ? void 0 : _a2.error(
641
- `[ServiceLocator]#createInstanceFromAbstractFactory(): Error creating instance for ${instanceName}`,
642
- error
643
- );
644
- return [new UnknownError(error)];
645
- }),
646
- effects: [],
647
- deps: [],
648
- destroyListeners: [],
649
- createdAt: Date.now(),
650
- ttl: Infinity
651
- };
652
- if (shouldStore) {
653
- this.manager.set(instanceName, holder);
654
- }
655
- return holder.creationPromise;
656
- }
657
- createContextForAbstractFactory(instanceName) {
658
- const dependencies = /* @__PURE__ */ new Set();
659
- const destroyListeners = /* @__PURE__ */ new Set();
660
- const self = this;
661
- function invalidate(name2 = instanceName) {
662
- return self.invalidate(name2);
663
- }
664
- function addEffect(listener) {
665
- destroyListeners.add(listener);
666
- }
667
- let ttl = Infinity;
668
- function setTtl(value) {
669
- ttl = value;
670
- }
671
- function getTtl() {
672
- return ttl;
673
- }
674
- function on(key, event, listener) {
675
- destroyListeners.add(self.eventBus.on(key, event, listener));
676
- }
677
- return {
678
- // @ts-expect-error This is correct type
679
- async inject(token, args) {
680
- let injectionToken = token;
681
- if (typeof token === "function") {
682
- injectionToken = getInjectableToken(token);
683
- }
684
- if (injectionToken instanceof InjectionToken) {
685
- const validatedArgs = token.schema ? token.schema.safeParse(args) : void 0;
686
- const instanceName2 = self.makeInstanceName(token, validatedArgs);
687
- dependencies.add(instanceName2);
688
- return self.getOrThrowInstance(injectionToken, args);
689
- }
690
- throw new Error(
691
- `[ServiceLocator]#inject(): Invalid token type: ${typeof token}. Expected a class or an InjectionToken.`
692
- );
693
- },
694
- invalidate,
695
- eventBus: self.eventBus,
696
- on,
697
- getDependencies: () => Array.from(dependencies),
698
- addEffect,
699
- getDestroyListeners: () => Array.from(destroyListeners),
700
- setTtl,
701
- getTtl
702
- };
703
- }
704
- getSyncInstance(token, args) {
705
- const [err, realArgs] = this.resolveTokenArgs(token, args);
706
- if (err) {
707
- return null;
708
- }
709
- const instanceName = this.makeInstanceName(token, realArgs);
710
- const [error, holder] = this.manager.get(instanceName);
711
- if (error) {
712
- return null;
713
- }
714
- return holder.instance;
715
- }
716
- invalidate(service, round = 1) {
717
- var _a, _b, _c, _d, _e;
718
- (_a = this.logger) == null ? void 0 : _a.log(
719
- `[ServiceLocator]#invalidate(): Starting Invalidating process of ${service}`
720
- );
721
- const toInvalidate = this.manager.filter(
722
- (holder) => holder.name === service || holder.deps.includes(service)
723
- );
724
- const promises = [];
725
- for (const [key, holder] of toInvalidate.entries()) {
726
- if (holder.status === "destroying" /* Destroying */) {
727
- (_b = this.logger) == null ? void 0 : _b.trace(
728
- `[ServiceLocator]#invalidate(): ${key} is already being destroyed`
729
- );
730
- promises.push(holder.destroyPromise);
731
- continue;
732
- }
733
- if (holder.status === "creating" /* Creating */) {
734
- (_c = this.logger) == null ? void 0 : _c.trace(
735
- `[ServiceLocator]#invalidate(): ${key} is being created, waiting for creation to finish`
736
- );
737
- promises.push(
738
- (_d = holder.creationPromise) == null ? void 0 : _d.then(() => {
739
- var _a2;
740
- if (round > 3) {
741
- (_a2 = this.logger) == null ? void 0 : _a2.error(
742
- `[ServiceLocator]#invalidate(): ${key} creation is triggering a new invalidation round, but it is still not created`
743
- );
744
- return;
745
- }
746
- return this.invalidate(key, round + 1);
747
- })
748
- );
749
- continue;
750
- }
751
- holder.status = "destroying" /* Destroying */;
752
- (_e = this.logger) == null ? void 0 : _e.log(
753
- `[ServiceLocator]#invalidate(): Invalidating ${key} and notifying listeners`
754
- );
755
- holder.destroyPromise = Promise.all(
756
- holder.destroyListeners.map((listener) => listener())
757
- ).then(async () => {
758
- this.manager.delete(key);
759
- await this.notifyListeners(key, "destroy");
760
- });
761
- promises.push(holder.destroyPromise);
762
- }
763
- return Promise.all(promises);
764
- }
765
- async ready() {
766
- return Promise.all(
767
- Array.from(this.manager.filter(() => true)).map(([, holder]) => {
768
- var _a;
769
- if (holder.status === "creating" /* Creating */) {
770
- return (_a = holder.creationPromise) == null ? void 0 : _a.then(() => null);
771
- }
772
- if (holder.status === "destroying" /* Destroying */) {
773
- return holder.destroyPromise.then(() => null);
774
- }
775
- return Promise.resolve(null);
776
- })
777
- ).then(() => null);
778
- }
779
- makeInstanceName(token, args) {
780
- let stringifiedArgs = args ? ":" + JSON.stringify(args, (_, value) => {
781
- if (typeof value === "function") {
782
- return `function:${value.name}(${value.length})`;
783
- }
784
- if (typeof value === "symbol") {
785
- return value.toString();
786
- }
787
- return value;
788
- }).replaceAll(/"/g, "").replaceAll(/:/g, "=").replaceAll(/,/g, "|") : "";
789
- const { name: name2 } = token;
790
- if (typeof name2 === "function") {
791
- const className = name2.name;
792
- return `${className}(${token.id})${stringifiedArgs}`;
793
- } else if (typeof name2 === "symbol") {
794
- return `${name2.toString()}(${token.id})${stringifiedArgs}`;
795
- } else {
796
- return `${name2}(${token.id})${stringifiedArgs}`;
797
- }
798
- }
799
- };
800
-
801
- // packages/core/src/service-locator/injector.mts
802
- var serviceLocator = new ServiceLocator();
803
- function provideServiceLocator(locator) {
804
- const original = serviceLocator;
805
- serviceLocator = locator;
806
- return original;
807
- }
808
- function getServiceLocator() {
809
- if (!serviceLocator) {
810
- throw new Error(
811
- "[ServiceLocator] Service locator is not initialized. Please provide the service locator before using the @Injectable decorator."
812
- );
813
- }
814
- return serviceLocator;
815
- }
816
-
817
- // packages/core/src/service-locator/resolve-service.mts
818
- import { NaviosException } from "@navios/common";
819
-
820
- // packages/core/src/service-locator/proxy-service-locator.mts
821
- var ProxyServiceLocator = class {
822
- constructor(serviceLocator2, ctx) {
823
- this.serviceLocator = serviceLocator2;
824
- this.ctx = ctx;
825
- }
826
- get abstractFactories() {
827
- return this.serviceLocator["abstractFactories"];
828
- }
829
- getEventBus() {
830
- return this.serviceLocator.getEventBus();
831
- }
832
- registerAbstractFactory(token, factory) {
833
- return this.serviceLocator.registerAbstractFactory(token, factory);
834
- }
835
- getInstance(token, args) {
836
- return this.ctx.inject(token, args).then(
837
- (instance) => {
838
- return [void 0, instance];
839
- },
840
- (error) => {
841
- return [error];
842
- }
843
- );
844
- }
845
- getOrThrowInstance(token, args) {
846
- return this.ctx.inject(token, args);
847
- }
848
- getSyncInstance(token, args) {
849
- return this.serviceLocator.getSyncInstance(token, args);
850
- }
851
- invalidate(service, round) {
852
- return this.serviceLocator.invalidate(service, round);
853
- }
854
- ready() {
855
- return this.serviceLocator.ready();
856
- }
857
- makeInstanceName(token, args) {
858
- return this.serviceLocator.makeInstanceName(token, args);
859
- }
860
- };
861
- function makeProxyServiceLocator(serviceLocator2, ctx) {
862
- return new ProxyServiceLocator(serviceLocator2, ctx);
863
- }
864
-
865
- // packages/core/src/service-locator/sync-injector.mts
866
- var promiseCollector = null;
867
- function syncInject(token, args) {
868
- let realToken = token;
869
- if (!(token instanceof InjectionToken)) {
870
- realToken = getInjectableToken(token);
871
- }
872
- const instance = getServiceLocator().getSyncInstance(realToken, args);
873
- if (!instance) {
874
- if (promiseCollector) {
875
- const promise = getServiceLocator().getInstance(realToken, args);
876
- promiseCollector(promise);
877
- } else {
878
- throw new Error(
879
- `[ServiceLocator] No instance found for ${realToken.name.toString()}`
880
- );
881
- }
882
- }
883
- return instance;
884
- }
885
- function setPromiseCollector(collector) {
886
- const original = promiseCollector;
887
- promiseCollector = collector;
888
- return original;
889
- }
890
-
891
- // packages/core/src/service-locator/resolve-service.mts
892
- async function resolveService(ctx, target, args = []) {
893
- const proxyServiceLocator = makeProxyServiceLocator(getServiceLocator(), ctx);
894
- let promises = [];
895
- const promiseCollector2 = (promise) => {
896
- promises.push(promise);
897
- };
898
- const originalPromiseCollector = setPromiseCollector(promiseCollector2);
899
- const tryLoad = () => {
900
- const original = provideServiceLocator(proxyServiceLocator);
901
- let result = new target(...args);
902
- provideServiceLocator(original);
903
- return result;
904
- };
905
- let instance = tryLoad();
906
- setPromiseCollector(originalPromiseCollector);
907
- if (promises.length > 0) {
908
- await Promise.all(promises);
909
- promises = [];
910
- instance = tryLoad();
911
- }
912
- if (promises.length > 0) {
913
- console.error(`[ServiceLocator] ${target.name} has problem with it's definition.
914
-
915
- One or more of the dependencies are registered as a InjectableScope.Instance and are used with syncInject.
916
-
917
- Please use inject instead of syncInject to load those dependencies.`);
918
- throw new NaviosException(
919
- `[ServiceLocator] Service ${target.name} cannot be instantiated.`
920
- );
921
- }
922
- return instance;
923
- }
924
-
925
- // packages/core/src/service-locator/decorators/injectable.decorator.mts
926
- var InjectableType = /* @__PURE__ */ ((InjectableType2) => {
927
- InjectableType2["Class"] = "Class";
928
- InjectableType2["Factory"] = "Factory";
929
- return InjectableType2;
930
- })(InjectableType || {});
931
- var InjectableTokenMeta = Symbol("InjectableTokenMeta");
932
- function Injectable({
933
- scope = "Singleton" /* Singleton */,
934
- type = "Class" /* Class */,
935
- token
936
- } = {}) {
937
- return (target, context) => {
938
- if (context.kind !== "class") {
939
- throw new Error(
940
- "[ServiceLocator] @Injectable decorator can only be used on classes."
941
- );
942
- }
943
- let injectableToken = token ?? InjectionToken.create(target);
944
- const locator = getServiceLocator();
945
- if (type === "Class" /* Class */) {
946
- locator.registerAbstractFactory(
947
- injectableToken,
948
- async (ctx) => resolveService(ctx, target),
949
- scope
950
- );
951
- } else if (type === "Factory" /* Factory */) {
952
- locator.registerAbstractFactory(
953
- injectableToken,
954
- async (ctx, args) => {
955
- const builder = await resolveService(ctx, target);
956
- if (typeof builder.create !== "function") {
957
- throw new NaviosException2(
958
- `[ServiceLocator] Factory ${target.name} does not implement the create method.`
959
- );
960
- }
961
- return builder.create(ctx, args);
962
- },
963
- scope
964
- );
965
- }
966
- target[InjectableTokenMeta] = injectableToken;
967
- return target;
968
- };
969
- }
970
-
971
- // packages/core/src/service-locator/decorators/get-injectable-token.mts
972
- function getInjectableToken(target) {
973
- const token = target[InjectableTokenMeta];
974
- if (!token) {
975
- throw new Error(
976
- `[ServiceLocator] Class ${target.name} is not decorated with @Injectable.`
977
- );
978
- }
979
- return token;
980
- }
981
-
982
- // packages/core/src/service-locator/event-emitter.mts
983
- var EventEmitter = class {
984
- listeners = /* @__PURE__ */ new Map();
985
- on(event, listener) {
986
- if (!this.listeners.has(event)) {
987
- this.listeners.set(event, /* @__PURE__ */ new Set());
988
- }
989
- this.listeners.get(event).add(listener);
990
- return () => {
991
- this.off(event, listener);
992
- };
993
- }
994
- off(event, listener) {
995
- if (!this.listeners.has(event)) {
996
- return;
997
- }
998
- this.listeners.get(event).delete(listener);
999
- if (this.listeners.get(event).size === 0) {
1000
- this.listeners.delete(event);
1001
- }
1002
- }
1003
- once(event, listener) {
1004
- const off = this.on(event, (...args) => {
1005
- off();
1006
- listener(...args);
1007
- });
1008
- return off;
1009
- }
1010
- async emit(event, ...args) {
1011
- if (!this.listeners.has(event)) {
1012
- return;
1013
- }
1014
- return Promise.all(Array.from(this.listeners.get(event)).map((listener) => listener(...args)));
1015
- }
1016
- addChannel(ns, event, target) {
1017
- return this.on(event, (...args) => target.emit(ns, event, ...args));
1018
- }
1019
- };
1020
-
1021
- // packages/core/src/service-locator/inject.mts
1022
- function inject(token, args) {
1023
- let realToken = token;
1024
- if (!(token instanceof InjectionToken)) {
1025
- realToken = getInjectableToken(token);
1026
- }
1027
- return getServiceLocator().getOrThrowInstance(realToken, args);
1028
- }
1029
-
1030
- // packages/core/src/service-locator/override.mts
1031
- function override(token, target) {
1032
- const serviceLocator2 = getServiceLocator();
1033
- const originalDefinition = serviceLocator2["abstractFactories"].get(token);
1034
- serviceLocator2.registerAbstractFactory(token, async (ctx, args) => {
1035
- const builder = new target();
1036
- return builder.create(ctx, args);
1037
- });
1038
- return () => {
1039
- if (originalDefinition) {
1040
- serviceLocator2.registerAbstractFactory(token, originalDefinition);
1041
- }
1042
- };
1043
- }
391
+ import { getGlobalServiceLocator as getGlobalServiceLocator2, Injectable as Injectable7 } from "@navios/di";
1044
392
 
1045
393
  // packages/core/src/tokens/application.token.mts
394
+ import { InjectionToken as InjectionToken4 } from "@navios/di";
1046
395
  var ApplicationInjectionToken = "ApplicationInjectionToken";
1047
- var Application = InjectionToken.create(
396
+ var Application = InjectionToken4.create(
1048
397
  ApplicationInjectionToken
1049
398
  );
1050
399
 
400
+ // packages/core/src/tokens/execution-context.token.mts
401
+ import { InjectionToken as InjectionToken7 } from "@navios/di";
402
+
1051
403
  // packages/core/src/services/controller-adapter.service.mts
1052
- import { NaviosException as NaviosException3 } from "@navios/common";
1053
- import { ZodArray } from "zod";
404
+ import {
405
+ getGlobalServiceLocator,
406
+ inject as inject4,
407
+ Injectable as Injectable5,
408
+ syncInject
409
+ } from "@navios/di";
1054
410
 
1055
- // packages/core/src/metadata/endpoint.metadata.mts
411
+ // packages/core/src/metadata/handler.metadata.mts
1056
412
  var EndpointMetadataKey = Symbol("EndpointMetadataKey");
1057
- var EndpointType = /* @__PURE__ */ ((EndpointType2) => {
1058
- EndpointType2["Unknown"] = "unknown";
1059
- EndpointType2["Endpoint"] = "endpoint";
1060
- EndpointType2["Stream"] = "stream";
1061
- EndpointType2["Multipart"] = "multipart";
1062
- EndpointType2["Handler"] = "handler";
1063
- return EndpointType2;
1064
- })(EndpointType || {});
1065
413
  function getAllEndpointMetadata(context) {
1066
414
  if (context.metadata) {
1067
415
  const metadata = context.metadata[EndpointMetadataKey];
@@ -1088,9 +436,10 @@ function getEndpointMetadata(target, context) {
1088
436
  classMethod: target.name,
1089
437
  url: "",
1090
438
  successStatusCode: 200,
439
+ adapterToken: null,
1091
440
  headers: {},
1092
- type: "unknown" /* Unknown */,
1093
441
  httpMethod: "GET",
442
+ // @ts-expect-error We are using a generic type here
1094
443
  config: null,
1095
444
  guards: /* @__PURE__ */ new Set(),
1096
445
  customAttributes: /* @__PURE__ */ new Map()
@@ -1214,6 +563,9 @@ var ExecutionContext = class {
1214
563
  }
1215
564
  };
1216
565
 
566
+ // packages/core/src/services/guard-runner.service.mts
567
+ import { inject as inject3, Injectable as Injectable4 } from "@navios/di";
568
+
1217
569
  // packages/core/src/exceptions/http.exception.mts
1218
570
  var HttpException = class {
1219
571
  constructor(statusCode, response, error) {
@@ -1268,13 +620,13 @@ var ConflictException = class extends HttpException {
1268
620
  };
1269
621
 
1270
622
  // packages/core/src/services/guard-runner.service.mts
1271
- var _GuardRunnerService_decorators, _init;
1272
- _GuardRunnerService_decorators = [Injectable()];
623
+ var _GuardRunnerService_decorators, _init4;
624
+ _GuardRunnerService_decorators = [Injectable4()];
1273
625
  var GuardRunnerService = class {
1274
626
  async runGuards(allGuards, executionContext) {
1275
627
  let canActivate = true;
1276
628
  for (const guard of Array.from(allGuards).reverse()) {
1277
- const guardInstance = await inject(
629
+ const guardInstance = await inject3(
1278
630
  guard
1279
631
  );
1280
632
  if (!guardInstance.canActivate) {
@@ -1331,39 +683,59 @@ var GuardRunnerService = class {
1331
683
  return guards;
1332
684
  }
1333
685
  };
1334
- _init = __decoratorStart(null);
1335
- GuardRunnerService = __decorateElement(_init, 0, "GuardRunnerService", _GuardRunnerService_decorators, GuardRunnerService);
1336
- __runInitializers(_init, 1, GuardRunnerService);
686
+ _init4 = __decoratorStart(null);
687
+ GuardRunnerService = __decorateElement(_init4, 0, "GuardRunnerService", _GuardRunnerService_decorators, GuardRunnerService);
688
+ __runInitializers(_init4, 1, GuardRunnerService);
1337
689
 
1338
690
  // packages/core/src/services/controller-adapter.service.mts
1339
- var _ControllerAdapterService_decorators, _init2;
1340
- _ControllerAdapterService_decorators = [Injectable()];
691
+ var _ControllerAdapterService_decorators, _init5;
692
+ _ControllerAdapterService_decorators = [Injectable5()];
1341
693
  var _ControllerAdapterService = class _ControllerAdapterService {
1342
694
  guardRunner = syncInject(GuardRunnerService);
1343
695
  logger = syncInject(Logger, {
1344
696
  context: _ControllerAdapterService.name
1345
697
  });
1346
- setupController(controller, instance, moduleMetadata) {
698
+ async setupController(controller, instance, moduleMetadata) {
699
+ var _a3, _b;
1347
700
  const controllerMetadata = extractControllerMetadata(controller);
1348
701
  for (const endpoint of controllerMetadata.endpoints) {
1349
- const { classMethod, url, httpMethod } = endpoint;
1350
- if (!url) {
702
+ const { classMethod, url, httpMethod, adapterToken } = endpoint;
703
+ if (!url || !adapterToken) {
1351
704
  throw new Error(
1352
705
  `[Navios] Malformed Endpoint ${controller.name}:${classMethod}`
1353
706
  );
1354
707
  }
708
+ const adapter = await inject4(
709
+ adapterToken
710
+ );
1355
711
  const executionContext = new ExecutionContext(
1356
712
  moduleMetadata,
1357
713
  controllerMetadata,
1358
714
  endpoint
1359
715
  );
1360
- instance.withTypeProvider().route({
1361
- method: httpMethod,
1362
- url: url.replaceAll("$", ":"),
1363
- schema: this.provideSchemaForConfig(endpoint),
1364
- preHandler: this.providePreHandler(executionContext),
1365
- handler: this.provideHandler(controller, executionContext, endpoint)
1366
- });
716
+ const hasSchema = ((_a3 = adapter.hasSchema) == null ? void 0 : _a3.call(adapter, endpoint)) ?? false;
717
+ if (hasSchema) {
718
+ instance.withTypeProvider().route({
719
+ method: httpMethod,
720
+ url: url.replaceAll("$", ":"),
721
+ schema: ((_b = adapter.provideSchema) == null ? void 0 : _b.call(adapter, endpoint)) ?? {},
722
+ preHandler: this.providePreHandler(executionContext),
723
+ handler: this.wrapHandler(
724
+ executionContext,
725
+ adapter.provideHandler(controller, executionContext, endpoint)
726
+ )
727
+ });
728
+ } else {
729
+ instance.route({
730
+ method: httpMethod,
731
+ url: url.replaceAll("$", ":"),
732
+ preHandler: this.providePreHandler(executionContext),
733
+ handler: this.wrapHandler(
734
+ executionContext,
735
+ adapter.provideHandler(controller, executionContext, endpoint)
736
+ )
737
+ });
738
+ }
1367
739
  this.logger.debug(
1368
740
  `Registered ${httpMethod} ${url} for ${controller.name}:${classMethod}`
1369
741
  );
@@ -1371,220 +743,53 @@ var _ControllerAdapterService = class _ControllerAdapterService {
1371
743
  }
1372
744
  providePreHandler(executionContext) {
1373
745
  const guards = this.guardRunner.makeContext(executionContext);
1374
- return guards.size > 0 ? async (request, reply) => {
1375
- getServiceLocator().registerInstance(Request, request);
1376
- getServiceLocator().registerInstance(Reply, reply);
1377
- getServiceLocator().registerInstance(
1378
- ExecutionContextToken,
1379
- executionContext
1380
- );
1381
- executionContext.provideRequest(request);
1382
- executionContext.provideReply(reply);
1383
- let canActivate = true;
1384
- try {
746
+ return guards.size > 0 ? this.wrapHandler(
747
+ executionContext,
748
+ async (request, reply) => {
749
+ let canActivate = true;
1385
750
  canActivate = await this.guardRunner.runGuards(
1386
751
  guards,
1387
752
  executionContext
1388
753
  );
1389
- } finally {
1390
- getServiceLocator().removeInstance(Request);
1391
- getServiceLocator().removeInstance(Reply);
1392
- getServiceLocator().removeInstance(ExecutionContextToken);
1393
- }
1394
- if (!canActivate) {
1395
- return reply;
1396
- }
1397
- } : void 0;
1398
- }
1399
- provideSchemaForConfig(endpointMetadata) {
1400
- if (!endpointMetadata.config) {
1401
- this.logger.warn(`No config found for endpoint ${endpointMetadata.url}`);
1402
- return {};
1403
- }
1404
- const { querySchema, requestSchema, responseSchema } = endpointMetadata.config;
1405
- const schema = {};
1406
- if (querySchema) {
1407
- schema.querystring = querySchema;
1408
- }
1409
- if (requestSchema && endpointMetadata.type !== "multipart" /* Multipart */) {
1410
- schema.body = requestSchema;
1411
- }
1412
- if (responseSchema) {
1413
- schema.response = {
1414
- 200: responseSchema
1415
- };
1416
- }
1417
- return schema;
1418
- }
1419
- provideHandler(controller, executionContext, endpointMetadata) {
1420
- switch (endpointMetadata.type) {
1421
- case "unknown" /* Unknown */:
1422
- this.logger.error(
1423
- `Unknown endpoint type ${endpointMetadata.type} for ${controller.name}:${endpointMetadata.classMethod}`
1424
- );
1425
- throw new NaviosException3("Unknown endpoint type");
1426
- case "endpoint" /* Endpoint */:
1427
- return this.provideHandlerForConfig(
1428
- controller,
1429
- executionContext,
1430
- endpointMetadata
1431
- );
1432
- case "stream" /* Stream */:
1433
- return this.provideHandlerForStream(
1434
- controller,
1435
- executionContext,
1436
- endpointMetadata
1437
- );
1438
- case "multipart" /* Multipart */:
1439
- return this.provideHandlerForMultipart(
1440
- controller,
1441
- executionContext,
1442
- endpointMetadata
1443
- );
1444
- case "handler" /* Handler */:
1445
- this.logger.error("Not implemented yet");
1446
- throw new NaviosException3("Not implemented yet");
1447
- }
1448
- }
1449
- provideHandlerForConfig(controller, executionContext, endpointMetadata) {
1450
- return async (request, reply) => {
1451
- getServiceLocator().registerInstance(Request, request);
1452
- getServiceLocator().registerInstance(Reply, reply);
1453
- getServiceLocator().registerInstance(
1454
- ExecutionContextToken,
1455
- executionContext
1456
- );
1457
- executionContext.provideRequest(request);
1458
- executionContext.provideReply(reply);
1459
- const controllerInstance = await inject(controller);
1460
- try {
1461
- const { query, params, body } = request;
1462
- const argument = {};
1463
- if (query && Object.keys(query).length > 0) {
1464
- argument.params = query;
1465
- }
1466
- if (params && Object.keys(params).length > 0) {
1467
- argument.urlParams = params;
1468
- }
1469
- if (body) {
1470
- argument.data = body;
1471
- }
1472
- const result = await controllerInstance[endpointMetadata.classMethod](argument);
1473
- reply.status(endpointMetadata.successStatusCode).headers(endpointMetadata.headers).send(result);
1474
- } finally {
1475
- getServiceLocator().removeInstance(Request);
1476
- getServiceLocator().removeInstance(Reply);
1477
- getServiceLocator().removeInstance(ExecutionContextToken);
1478
- }
1479
- };
1480
- }
1481
- provideHandlerForStream(controller, executionContext, endpointMetadata) {
1482
- return async (request, reply) => {
1483
- getServiceLocator().registerInstance(Request, request);
1484
- getServiceLocator().registerInstance(Reply, reply);
1485
- getServiceLocator().registerInstance(
1486
- ExecutionContextToken,
1487
- executionContext
1488
- );
1489
- executionContext.provideRequest(request);
1490
- executionContext.provideReply(reply);
1491
- const controllerInstance = await inject(controller);
1492
- try {
1493
- const { query, params, body } = request;
1494
- const argument = {};
1495
- if (query && Object.keys(query).length > 0) {
1496
- argument.params = query;
1497
- }
1498
- if (params && Object.keys(params).length > 0) {
1499
- argument.urlParams = params;
1500
- }
1501
- if (body) {
1502
- argument.data = body;
754
+ if (!canActivate) {
755
+ return reply;
1503
756
  }
1504
- await controllerInstance[endpointMetadata.classMethod](argument, reply);
1505
- } finally {
1506
- getServiceLocator().removeInstance(Request);
1507
- getServiceLocator().removeInstance(Reply);
1508
- getServiceLocator().removeInstance(ExecutionContextToken);
1509
757
  }
1510
- };
758
+ ) : void 0;
1511
759
  }
1512
- provideHandlerForMultipart(controller, executionContext, endpointMetadata) {
1513
- const config = endpointMetadata.config;
1514
- const requestSchema = config.requestSchema;
1515
- const shape = requestSchema._def.shape();
760
+ wrapHandler(executionContext, handler) {
761
+ const locator = getGlobalServiceLocator();
1516
762
  return async (request, reply) => {
1517
- getServiceLocator().registerInstance(Request, request);
1518
- getServiceLocator().registerInstance(Reply, reply);
1519
- getServiceLocator().registerInstance(
1520
- ExecutionContextToken,
1521
- executionContext
1522
- );
763
+ locator.storeInstance(request, Request);
764
+ locator.storeInstance(reply, Reply);
765
+ locator.storeInstance(executionContext, ExecutionContextToken);
1523
766
  executionContext.provideRequest(request);
1524
767
  executionContext.provideReply(reply);
1525
- const controllerInstance = await inject(controller);
1526
768
  try {
1527
- const parts = request.parts();
1528
- const { query, params } = request;
1529
- const argument = {};
1530
- if (query && Object.keys(query).length > 0) {
1531
- argument.params = query;
1532
- }
1533
- if (params && Object.keys(params).length > 0) {
1534
- argument.urlParams = params;
1535
- }
1536
- const req = {};
1537
- for await (const part of parts) {
1538
- if (!shape[part.fieldname]) {
1539
- throw new NaviosException3(
1540
- `Invalid field name ${part.fieldname} for multipart request`
1541
- );
1542
- }
1543
- const schema = shape[part.fieldname];
1544
- if (part.type === "file") {
1545
- const file = new File([await part.toBuffer()], part.filename, {
1546
- type: part.mimetype
1547
- });
1548
- if (schema instanceof ZodArray) {
1549
- if (!req[part.fieldname]) {
1550
- req[part.fieldname] = [];
1551
- }
1552
- req[part.fieldname].push(file);
1553
- } else {
1554
- req[part.fieldname] = file;
1555
- }
1556
- } else {
1557
- if (schema instanceof ZodArray) {
1558
- if (!req[part.fieldname]) {
1559
- req[part.fieldname] = [];
1560
- }
1561
- req[part.fieldname].push(part.value);
1562
- } else {
1563
- req[part.fieldname] = part.value;
1564
- }
1565
- }
1566
- }
1567
- argument.data = requestSchema.parse(req);
1568
- const result = await controllerInstance[endpointMetadata.classMethod](argument);
1569
- reply.status(endpointMetadata.successStatusCode).headers(endpointMetadata.headers).send(result);
769
+ return await handler(request, reply);
1570
770
  } finally {
1571
- getServiceLocator().removeInstance(Request);
1572
- getServiceLocator().removeInstance(Reply);
1573
- getServiceLocator().removeInstance(ExecutionContextToken);
771
+ Promise.all([
772
+ locator.removeInstance(Request),
773
+ locator.removeInstance(Reply),
774
+ locator.removeInstance(ExecutionContextToken)
775
+ ]).catch((err) => {
776
+ this.logger.warn(`Error removing instances: ${err}`);
777
+ });
1574
778
  }
1575
779
  };
1576
780
  }
1577
781
  };
1578
- _init2 = __decoratorStart(null);
1579
- _ControllerAdapterService = __decorateElement(_init2, 0, "ControllerAdapterService", _ControllerAdapterService_decorators, _ControllerAdapterService);
1580
- __runInitializers(_init2, 1, _ControllerAdapterService);
782
+ _init5 = __decoratorStart(null);
783
+ _ControllerAdapterService = __decorateElement(_init5, 0, "ControllerAdapterService", _ControllerAdapterService_decorators, _ControllerAdapterService);
784
+ __runInitializers(_init5, 1, _ControllerAdapterService);
1581
785
  var ControllerAdapterService = _ControllerAdapterService;
1582
786
 
1583
787
  // packages/core/src/services/module-loader.service.mts
1584
- var _ModuleLoaderService_decorators, _init3;
1585
- _ModuleLoaderService_decorators = [Injectable()];
788
+ import { inject as inject5, Injectable as Injectable6, syncInject as syncInject2 } from "@navios/di";
789
+ var _ModuleLoaderService_decorators, _init6;
790
+ _ModuleLoaderService_decorators = [Injectable6()];
1586
791
  var _ModuleLoaderService = class _ModuleLoaderService {
1587
- logger = syncInject(Logger, {
792
+ logger = syncInject2(Logger, {
1588
793
  context: _ModuleLoaderService.name
1589
794
  });
1590
795
  modulesMetadata = /* @__PURE__ */ new Map();
@@ -1612,7 +817,7 @@ var _ModuleLoaderService = class _ModuleLoaderService {
1612
817
  async (importedModule) => this.traverseModules(importedModule, metadata)
1613
818
  );
1614
819
  await Promise.all(loadingPromises);
1615
- const instance = await inject(module);
820
+ const instance = await inject5(module);
1616
821
  if (instance.onModuleInit) {
1617
822
  await instance.onModuleInit();
1618
823
  }
@@ -1643,24 +848,26 @@ var _ModuleLoaderService = class _ModuleLoaderService {
1643
848
  this.initialized = false;
1644
849
  }
1645
850
  };
1646
- _init3 = __decoratorStart(null);
1647
- _ModuleLoaderService = __decorateElement(_init3, 0, "ModuleLoaderService", _ModuleLoaderService_decorators, _ModuleLoaderService);
1648
- __runInitializers(_init3, 1, _ModuleLoaderService);
851
+ _init6 = __decoratorStart(null);
852
+ _ModuleLoaderService = __decorateElement(_init6, 0, "ModuleLoaderService", _ModuleLoaderService_decorators, _ModuleLoaderService);
853
+ __runInitializers(_init6, 1, _ModuleLoaderService);
1649
854
  var ModuleLoaderService = _ModuleLoaderService;
1650
855
 
1651
856
  // packages/core/src/tokens/execution-context.token.mts
1652
857
  var ExecutionContextInjectionToken = "ExecutionContextInjectionToken";
1653
- var ExecutionContextToken = InjectionToken.create(
858
+ var ExecutionContextToken = InjectionToken7.create(
1654
859
  ExecutionContextInjectionToken
1655
860
  );
1656
861
 
1657
862
  // packages/core/src/tokens/reply.token.mts
863
+ import { InjectionToken as InjectionToken8 } from "@navios/di";
1658
864
  var ReplyInjectionToken = "ReplyInjectionToken";
1659
- var Reply = InjectionToken.create(ReplyInjectionToken);
865
+ var Reply = InjectionToken8.create(ReplyInjectionToken);
1660
866
 
1661
867
  // packages/core/src/tokens/request.token.mts
868
+ import { InjectionToken as InjectionToken9 } from "@navios/di";
1662
869
  var RequestInjectionToken = "RequestInjectionToken";
1663
- var Request = InjectionToken.create(
870
+ var Request = InjectionToken9.create(
1664
871
  RequestInjectionToken
1665
872
  );
1666
873
 
@@ -1682,8 +889,8 @@ var dateTimeFormatter = new Intl.DateTimeFormat(void 0, {
1682
889
  day: "2-digit",
1683
890
  month: "2-digit"
1684
891
  });
1685
- var _ConsoleLogger_decorators, _init4;
1686
- _ConsoleLogger_decorators = [Injectable()];
892
+ var _ConsoleLogger_decorators, _init7;
893
+ _ConsoleLogger_decorators = [Injectable7()];
1687
894
  var _ConsoleLogger = class _ConsoleLogger {
1688
895
  /**
1689
896
  * The options of the logger.
@@ -1722,7 +929,7 @@ var _ConsoleLogger = class _ConsoleLogger {
1722
929
  this.originalContext = context;
1723
930
  }
1724
931
  if (opts == null ? void 0 : opts.requestId) {
1725
- const locator = getServiceLocator();
932
+ const locator = getGlobalServiceLocator2();
1726
933
  locator.getEventBus().on(locator.getInstanceIdentifier(Request, void 0), "create", () => {
1727
934
  const request = locator.getSyncInstance(Request, void 0);
1728
935
  this.requestId = (request == null ? void 0 : request.id) ?? null;
@@ -1818,8 +1025,8 @@ var _ConsoleLogger = class _ConsoleLogger {
1818
1025
  this.context = this.originalContext;
1819
1026
  }
1820
1027
  isLevelEnabled(level) {
1821
- var _a;
1822
- const logLevels = (_a = this.options) == null ? void 0 : _a.logLevels;
1028
+ var _a3;
1029
+ const logLevels = (_a3 = this.options) == null ? void 0 : _a3.logLevels;
1823
1030
  return isLogLevelEnabled(level, logLevels);
1824
1031
  }
1825
1032
  getTimestamp() {
@@ -1930,8 +1137,8 @@ var _ConsoleLogger = class _ConsoleLogger {
1930
1137
  `);
1931
1138
  }
1932
1139
  updateAndGetTimestampDiff() {
1933
- var _a;
1934
- const includeTimestamp = _ConsoleLogger.lastTimestampAt && ((_a = this.options) == null ? void 0 : _a.timestamp);
1140
+ var _a3;
1141
+ const includeTimestamp = _ConsoleLogger.lastTimestampAt && ((_a3 = this.options) == null ? void 0 : _a3.timestamp);
1935
1142
  const result = includeTimestamp ? this.formatTimestampDiff(Date.now() - _ConsoleLogger.lastTimestampAt) : "";
1936
1143
  _ConsoleLogger.lastTimestampAt = Date.now();
1937
1144
  return result;
@@ -2036,15 +1243,17 @@ var _ConsoleLogger = class _ConsoleLogger {
2036
1243
  }
2037
1244
  }
2038
1245
  };
2039
- _init4 = __decoratorStart(null);
2040
- _ConsoleLogger = __decorateElement(_init4, 0, "ConsoleLogger", _ConsoleLogger_decorators, _ConsoleLogger);
2041
- __runInitializers(_init4, 1, _ConsoleLogger);
1246
+ _init7 = __decoratorStart(null);
1247
+ _ConsoleLogger = __decorateElement(_init7, 0, "ConsoleLogger", _ConsoleLogger_decorators, _ConsoleLogger);
1248
+ __runInitializers(_init7, 1, _ConsoleLogger);
2042
1249
  var ConsoleLogger = _ConsoleLogger;
2043
1250
 
2044
1251
  // packages/core/src/logger/logger.factory.mts
2045
- import { z as z2 } from "zod";
1252
+ import { Injectable as Injectable9, InjectableType, InjectionToken as InjectionToken10 } from "@navios/di";
1253
+ import { z } from "zod";
2046
1254
 
2047
1255
  // packages/core/src/logger/logger.service.mts
1256
+ import { Injectable as Injectable8 } from "@navios/di";
2048
1257
  var DEFAULT_LOGGER = new ConsoleLogger();
2049
1258
  var dateTimeFormatter2 = new Intl.DateTimeFormat(void 0, {
2050
1259
  year: "numeric",
@@ -2054,8 +1263,8 @@ var dateTimeFormatter2 = new Intl.DateTimeFormat(void 0, {
2054
1263
  day: "2-digit",
2055
1264
  month: "2-digit"
2056
1265
  });
2057
- var _LoggerInstance_decorators, _init5;
2058
- _LoggerInstance_decorators = [Injectable()];
1266
+ var _LoggerInstance_decorators, _init8;
1267
+ _LoggerInstance_decorators = [Injectable8()];
2059
1268
  var _LoggerInstance = class _LoggerInstance {
2060
1269
  constructor(context, options = {}) {
2061
1270
  this.context = context;
@@ -2076,69 +1285,69 @@ var _LoggerInstance = class _LoggerInstance {
2076
1285
  return _LoggerInstance.staticInstanceRef;
2077
1286
  }
2078
1287
  error(message, ...optionalParams) {
2079
- var _a;
1288
+ var _a3;
2080
1289
  optionalParams = this.context ? (optionalParams.length ? optionalParams : [void 0]).concat(
2081
1290
  this.context
2082
1291
  ) : optionalParams;
2083
- (_a = this.localInstance) == null ? void 0 : _a.error(message, ...optionalParams);
1292
+ (_a3 = this.localInstance) == null ? void 0 : _a3.error(message, ...optionalParams);
2084
1293
  }
2085
1294
  log(message, ...optionalParams) {
2086
- var _a;
1295
+ var _a3;
2087
1296
  optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
2088
- (_a = this.localInstance) == null ? void 0 : _a.log(message, ...optionalParams);
1297
+ (_a3 = this.localInstance) == null ? void 0 : _a3.log(message, ...optionalParams);
2089
1298
  }
2090
1299
  warn(message, ...optionalParams) {
2091
- var _a;
1300
+ var _a3;
2092
1301
  optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
2093
- (_a = this.localInstance) == null ? void 0 : _a.warn(message, ...optionalParams);
1302
+ (_a3 = this.localInstance) == null ? void 0 : _a3.warn(message, ...optionalParams);
2094
1303
  }
2095
1304
  debug(message, ...optionalParams) {
2096
- var _a, _b;
1305
+ var _a3, _b;
2097
1306
  optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
2098
- (_b = (_a = this.localInstance) == null ? void 0 : _a.debug) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1307
+ (_b = (_a3 = this.localInstance) == null ? void 0 : _a3.debug) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2099
1308
  }
2100
1309
  verbose(message, ...optionalParams) {
2101
- var _a, _b;
1310
+ var _a3, _b;
2102
1311
  optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
2103
- (_b = (_a = this.localInstance) == null ? void 0 : _a.verbose) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1312
+ (_b = (_a3 = this.localInstance) == null ? void 0 : _a3.verbose) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2104
1313
  }
2105
1314
  fatal(message, ...optionalParams) {
2106
- var _a, _b;
1315
+ var _a3, _b;
2107
1316
  optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
2108
- (_b = (_a = this.localInstance) == null ? void 0 : _a.fatal) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1317
+ (_b = (_a3 = this.localInstance) == null ? void 0 : _a3.fatal) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2109
1318
  }
2110
1319
  static error(message, ...optionalParams) {
2111
- var _a;
2112
- (_a = this.staticInstanceRef) == null ? void 0 : _a.error(message, ...optionalParams);
1320
+ var _a3;
1321
+ (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.error(message, ...optionalParams);
2113
1322
  }
2114
1323
  static log(message, ...optionalParams) {
2115
- var _a;
2116
- (_a = this.staticInstanceRef) == null ? void 0 : _a.log(message, ...optionalParams);
1324
+ var _a3;
1325
+ (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.log(message, ...optionalParams);
2117
1326
  }
2118
1327
  static warn(message, ...optionalParams) {
2119
- var _a;
2120
- (_a = this.staticInstanceRef) == null ? void 0 : _a.warn(message, ...optionalParams);
1328
+ var _a3;
1329
+ (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.warn(message, ...optionalParams);
2121
1330
  }
2122
1331
  static debug(message, ...optionalParams) {
2123
- var _a, _b;
2124
- (_b = (_a = this.staticInstanceRef) == null ? void 0 : _a.debug) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1332
+ var _a3, _b;
1333
+ (_b = (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.debug) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2125
1334
  }
2126
1335
  static verbose(message, ...optionalParams) {
2127
- var _a, _b;
2128
- (_b = (_a = this.staticInstanceRef) == null ? void 0 : _a.verbose) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1336
+ var _a3, _b;
1337
+ (_b = (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.verbose) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2129
1338
  }
2130
1339
  static fatal(message, ...optionalParams) {
2131
- var _a, _b;
2132
- (_b = (_a = this.staticInstanceRef) == null ? void 0 : _a.fatal) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1340
+ var _a3, _b;
1341
+ (_b = (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.fatal) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2133
1342
  }
2134
1343
  static getTimestamp() {
2135
1344
  return dateTimeFormatter2.format(Date.now());
2136
1345
  }
2137
1346
  static overrideLogger(logger) {
2138
- var _a, _b;
1347
+ var _a3, _b;
2139
1348
  if (Array.isArray(logger)) {
2140
1349
  _LoggerInstance.logLevels = logger;
2141
- return (_b = (_a = this.staticInstanceRef) == null ? void 0 : _a.setLogLevels) == null ? void 0 : _b.call(_a, logger);
1350
+ return (_b = (_a3 = this.staticInstanceRef) == null ? void 0 : _a3.setLogLevels) == null ? void 0 : _b.call(_a3, logger);
2142
1351
  }
2143
1352
  if (isObject(logger)) {
2144
1353
  this.staticInstanceRef = logger;
@@ -2151,34 +1360,34 @@ var _LoggerInstance = class _LoggerInstance {
2151
1360
  return isLogLevelEnabled(level, logLevels);
2152
1361
  }
2153
1362
  registerLocalInstanceRef() {
2154
- var _a;
1363
+ var _a3;
2155
1364
  if (this.localInstanceRef) {
2156
1365
  return this.localInstanceRef;
2157
1366
  }
2158
1367
  this.localInstanceRef = new ConsoleLogger(this.context, {
2159
- timestamp: (_a = this.options) == null ? void 0 : _a.timestamp,
1368
+ timestamp: (_a3 = this.options) == null ? void 0 : _a3.timestamp,
2160
1369
  logLevels: _LoggerInstance.logLevels
2161
1370
  });
2162
1371
  return this.localInstanceRef;
2163
1372
  }
2164
1373
  };
2165
- _init5 = __decoratorStart(null);
2166
- _LoggerInstance = __decorateElement(_init5, 0, "LoggerInstance", _LoggerInstance_decorators, _LoggerInstance);
2167
- __runInitializers(_init5, 1, _LoggerInstance);
1374
+ _init8 = __decoratorStart(null);
1375
+ _LoggerInstance = __decorateElement(_init8, 0, "LoggerInstance", _LoggerInstance_decorators, _LoggerInstance);
1376
+ __runInitializers(_init8, 1, _LoggerInstance);
2168
1377
  var LoggerInstance = _LoggerInstance;
2169
1378
 
2170
1379
  // packages/core/src/logger/logger.factory.mts
2171
1380
  var LoggerInjectionToken = "LoggerInjectionToken";
2172
- var LoggerOptions = z2.object({
2173
- context: z2.string().optional(),
2174
- options: z2.object({
2175
- timestamp: z2.boolean().optional()
1381
+ var LoggerOptions = z.object({
1382
+ context: z.string().optional(),
1383
+ options: z.object({
1384
+ timestamp: z.boolean().optional()
2176
1385
  }).optional()
2177
1386
  }).optional();
2178
- var Logger = InjectionToken.create(LoggerInjectionToken, LoggerOptions);
2179
- var _LoggerFactory_decorators, _init6;
2180
- _LoggerFactory_decorators = [Injectable({
2181
- type: "Factory" /* Factory */,
1387
+ var Logger = InjectionToken10.create(LoggerInjectionToken, LoggerOptions);
1388
+ var _LoggerFactory_decorators, _init9;
1389
+ _LoggerFactory_decorators = [Injectable9({
1390
+ type: InjectableType.Factory,
2182
1391
  token: Logger
2183
1392
  })];
2184
1393
  var LoggerFactory = class {
@@ -2186,9 +1395,9 @@ var LoggerFactory = class {
2186
1395
  return new LoggerInstance(args == null ? void 0 : args.context, args == null ? void 0 : args.options);
2187
1396
  }
2188
1397
  };
2189
- _init6 = __decoratorStart(null);
2190
- LoggerFactory = __decorateElement(_init6, 0, "LoggerFactory", _LoggerFactory_decorators, LoggerFactory);
2191
- __runInitializers(_init6, 1, LoggerFactory);
1398
+ _init9 = __decoratorStart(null);
1399
+ LoggerFactory = __decorateElement(_init9, 0, "LoggerFactory", _LoggerFactory_decorators, LoggerFactory);
1400
+ __runInitializers(_init9, 1, LoggerFactory);
2192
1401
 
2193
1402
  // packages/core/src/logger/pino-wrapper.mts
2194
1403
  var PinoWrapper = class _PinoWrapper {
@@ -2210,12 +1419,12 @@ var PinoWrapper = class _PinoWrapper {
2210
1419
  info() {
2211
1420
  }
2212
1421
  debug(message, ...optionalParams) {
2213
- var _a, _b;
2214
- (_b = (_a = this.logger).debug) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1422
+ var _a3, _b;
1423
+ (_b = (_a3 = this.logger).debug) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2215
1424
  }
2216
1425
  trace(message, ...optionalParams) {
2217
- var _a, _b;
2218
- (_b = (_a = this.logger).verbose) == null ? void 0 : _b.call(_a, message, ...optionalParams);
1426
+ var _a3, _b;
1427
+ (_b = (_a3 = this.logger).verbose) == null ? void 0 : _b.call(_a3, message, ...optionalParams);
2219
1428
  }
2220
1429
  silent() {
2221
1430
  }
@@ -2243,7 +1452,7 @@ var PinoWrapper = class _PinoWrapper {
2243
1452
  };
2244
1453
 
2245
1454
  // packages/core/src/config/config.service.mts
2246
- import { NaviosException as NaviosException4 } from "@navios/common";
1455
+ import { NaviosException } from "@navios/common";
2247
1456
  var ConfigServiceInstance = class {
2248
1457
  constructor(config = {}, logger) {
2249
1458
  this.config = config;
@@ -2253,7 +1462,7 @@ var ConfigServiceInstance = class {
2253
1462
  return this.config;
2254
1463
  }
2255
1464
  get(key) {
2256
- var _a, _b;
1465
+ var _a3, _b;
2257
1466
  try {
2258
1467
  const parts = String(key).split(".");
2259
1468
  let value = this.config;
@@ -2265,8 +1474,8 @@ var ConfigServiceInstance = class {
2265
1474
  }
2266
1475
  return value ?? null;
2267
1476
  } catch (error) {
2268
- (_b = (_a = this.logger).debug) == null ? void 0 : _b.call(
2269
- _a,
1477
+ (_b = (_a3 = this.logger).debug) == null ? void 0 : _b.call(
1478
+ _a3,
2270
1479
  `Failed to get config value for key ${String(key)}`,
2271
1480
  error
2272
1481
  );
@@ -2282,24 +1491,24 @@ var ConfigServiceInstance = class {
2282
1491
  if (value === null) {
2283
1492
  const message = errorMessage || `Configuration value for key "${String(key)}" is not defined`;
2284
1493
  this.logger.error(message);
2285
- throw new NaviosException4(message);
1494
+ throw new NaviosException(message);
2286
1495
  }
2287
1496
  return value;
2288
1497
  }
2289
1498
  };
2290
1499
 
2291
1500
  // packages/core/src/config/config.provider.mts
2292
- var ConfigProviderOptions = z3.object({
2293
- load: z3.function()
1501
+ var ConfigProviderOptions = z2.object({
1502
+ load: z2.function()
2294
1503
  });
2295
- var ConfigProvider = InjectionToken.create(ConfigServiceInstance, ConfigProviderOptions);
2296
- var _ConfigProviderFactory_decorators, _init7;
2297
- _ConfigProviderFactory_decorators = [Injectable({
1504
+ var ConfigProvider = InjectionToken11.create(ConfigServiceInstance, ConfigProviderOptions);
1505
+ var _ConfigProviderFactory_decorators, _init10;
1506
+ _ConfigProviderFactory_decorators = [Injectable10({
2298
1507
  token: ConfigProvider,
2299
- type: "Factory" /* Factory */
1508
+ type: InjectableType2.Factory
2300
1509
  })];
2301
1510
  var ConfigProviderFactory = class {
2302
- logger = syncInject(Logger, {
1511
+ logger = syncInject3(Logger, {
2303
1512
  context: "ConfigService"
2304
1513
  });
2305
1514
  async create(ctx, args) {
@@ -2307,21 +1516,25 @@ var ConfigProviderFactory = class {
2307
1516
  const logger = this.logger;
2308
1517
  try {
2309
1518
  const config = await load();
2310
- return new ConfigServiceInstance(config, logger);
1519
+ return new ConfigServiceInstance(
1520
+ config,
1521
+ logger
1522
+ );
2311
1523
  } catch (error) {
2312
1524
  logger.error("Error loading config", error);
2313
1525
  throw error;
2314
1526
  }
2315
1527
  }
2316
1528
  };
2317
- _init7 = __decoratorStart(null);
2318
- ConfigProviderFactory = __decorateElement(_init7, 0, "ConfigProviderFactory", _ConfigProviderFactory_decorators, ConfigProviderFactory);
2319
- __runInitializers(_init7, 1, ConfigProviderFactory);
1529
+ _init10 = __decoratorStart(null);
1530
+ ConfigProviderFactory = __decorateElement(_init10, 0, "ConfigProviderFactory", _ConfigProviderFactory_decorators, ConfigProviderFactory);
1531
+ __runInitializers(_init10, 1, ConfigProviderFactory);
2320
1532
  function provideConfig(options) {
2321
- return InjectionToken.bound(ConfigProvider, options);
1533
+ return InjectionToken11.bound(ConfigProvider, options);
2322
1534
  }
2323
1535
 
2324
1536
  // packages/core/src/decorators/controller.decorator.mts
1537
+ import { Injectable as Injectable11, InjectableScope, InjectionToken as InjectionToken12 } from "@navios/di";
2325
1538
  function Controller({ guards } = {}) {
2326
1539
  return function(target, context) {
2327
1540
  if (context.kind !== "class") {
@@ -2329,7 +1542,7 @@ function Controller({ guards } = {}) {
2329
1542
  "[Navios] @Controller decorator can only be used on classes."
2330
1543
  );
2331
1544
  }
2332
- const token = InjectionToken.create(target);
1545
+ const token = InjectionToken12.create(target);
2333
1546
  if (context.metadata) {
2334
1547
  const controllerMetadata = getControllerMetadata(target, context);
2335
1548
  if (guards) {
@@ -2338,10 +1551,9 @@ function Controller({ guards } = {}) {
2338
1551
  }
2339
1552
  }
2340
1553
  }
2341
- return Injectable({
1554
+ return Injectable11({
2342
1555
  token,
2343
- type: "Class" /* Class */,
2344
- scope: "Instance" /* Instance */
1556
+ scope: InjectableScope.Instance
2345
1557
  })(target, context);
2346
1558
  };
2347
1559
  }
@@ -2362,14 +1574,17 @@ function Endpoint(endpoint) {
2362
1574
  }
2363
1575
  const config = endpoint.config;
2364
1576
  if (context.metadata) {
2365
- let endpointMetadata = getEndpointMetadata(target, context);
1577
+ let endpointMetadata = getEndpointMetadata(
1578
+ target,
1579
+ context
1580
+ );
2366
1581
  if (endpointMetadata.config && endpointMetadata.config.url) {
2367
1582
  throw new Error(
2368
1583
  `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`
2369
1584
  );
2370
1585
  }
2371
1586
  endpointMetadata.config = config;
2372
- endpointMetadata.type = "endpoint" /* Endpoint */;
1587
+ endpointMetadata.adapterToken = EndpointAdapterToken;
2373
1588
  endpointMetadata.classMethod = target.name;
2374
1589
  endpointMetadata.httpMethod = config.method;
2375
1590
  endpointMetadata.url = config.url;
@@ -2379,18 +1594,13 @@ function Endpoint(endpoint) {
2379
1594
  }
2380
1595
 
2381
1596
  // packages/core/src/decorators/header.decorator.mts
2382
- function Header(name2, value) {
1597
+ function Header(name, value) {
2383
1598
  return (target, context) => {
2384
1599
  if (context.kind !== "method") {
2385
1600
  throw new Error("[Navios] Header decorator can only be used on methods.");
2386
1601
  }
2387
1602
  const metadata = getEndpointMetadata(target, context);
2388
- if (metadata.type === "stream" /* Stream */) {
2389
- throw new Error(
2390
- "[Navios] HttpCode decorator cannot be used on stream endpoints."
2391
- );
2392
- }
2393
- metadata.headers[name2] = value;
1603
+ metadata.headers[name] = value;
2394
1604
  return target;
2395
1605
  };
2396
1606
  }
@@ -2404,43 +1614,36 @@ function HttpCode(code) {
2404
1614
  );
2405
1615
  }
2406
1616
  const metadata = getEndpointMetadata(target, context);
2407
- if (metadata.type === "stream" /* Stream */) {
2408
- throw new Error(
2409
- "[Navios] HttpCode decorator cannot be used on stream endpoints."
2410
- );
2411
- }
2412
1617
  metadata.successStatusCode = code;
2413
1618
  return target;
2414
1619
  };
2415
1620
  }
2416
1621
 
2417
1622
  // packages/core/src/decorators/module.decorator.mts
2418
- function Module(metadata) {
1623
+ import { Injectable as Injectable12, InjectableScope as InjectableScope2, InjectionToken as InjectionToken13 } from "@navios/di";
1624
+ function Module({ controllers = [], imports = [], guards = [] } = {
1625
+ controllers: [],
1626
+ imports: [],
1627
+ guards: []
1628
+ }) {
2419
1629
  return (target, context) => {
2420
1630
  if (context.kind !== "class") {
2421
1631
  throw new Error("[Navios] @Module decorator can only be used on classes.");
2422
1632
  }
2423
- const token = InjectionToken.create(target);
1633
+ const token = InjectionToken13.create(target);
2424
1634
  const moduleMetadata = getModuleMetadata(target, context);
2425
- if (metadata.controllers) {
2426
- for (const controller of metadata.controllers) {
2427
- moduleMetadata.controllers.add(controller);
2428
- }
1635
+ for (const controller of controllers) {
1636
+ moduleMetadata.controllers.add(controller);
2429
1637
  }
2430
- if (metadata.imports) {
2431
- for (const importedModule of metadata.imports) {
2432
- moduleMetadata.imports.add(importedModule);
2433
- }
1638
+ for (const importedModule of imports) {
1639
+ moduleMetadata.imports.add(importedModule);
2434
1640
  }
2435
- if (metadata.guards) {
2436
- for (const guard of Array.from(metadata.guards).reverse()) {
2437
- moduleMetadata.guards.add(guard);
2438
- }
1641
+ for (const guard of Array.from(guards).reverse()) {
1642
+ moduleMetadata.guards.add(guard);
2439
1643
  }
2440
- return Injectable({
1644
+ return Injectable12({
2441
1645
  token,
2442
- type: "Class" /* Class */,
2443
- scope: "Singleton" /* Singleton */
1646
+ scope: InjectableScope2.Singleton
2444
1647
  })(target, context);
2445
1648
  };
2446
1649
  }
@@ -2461,14 +1664,17 @@ function Multipart(endpoint) {
2461
1664
  }
2462
1665
  const config = endpoint.config;
2463
1666
  if (context.metadata) {
2464
- let endpointMetadata = getEndpointMetadata(target, context);
1667
+ let endpointMetadata = getEndpointMetadata(
1668
+ target,
1669
+ context
1670
+ );
2465
1671
  if (endpointMetadata.config && endpointMetadata.config.url) {
2466
1672
  throw new Error(
2467
1673
  `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`
2468
1674
  );
2469
1675
  }
2470
1676
  endpointMetadata.config = config;
2471
- endpointMetadata.type = "multipart" /* Multipart */;
1677
+ endpointMetadata.adapterToken = MultipartAdapterToken;
2472
1678
  endpointMetadata.classMethod = target.name;
2473
1679
  endpointMetadata.httpMethod = config.method;
2474
1680
  endpointMetadata.url = config.url;
@@ -2492,14 +1698,17 @@ function Stream(endpoint) {
2492
1698
  }
2493
1699
  const config = endpoint.config;
2494
1700
  if (context.metadata) {
2495
- let endpointMetadata = getEndpointMetadata(target, context);
1701
+ let endpointMetadata = getEndpointMetadata(
1702
+ target,
1703
+ context
1704
+ );
2496
1705
  if (endpointMetadata.config && endpointMetadata.config.url) {
2497
1706
  throw new Error(
2498
1707
  `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`
2499
1708
  );
2500
1709
  }
2501
1710
  endpointMetadata.config = config;
2502
- endpointMetadata.type = "stream" /* Stream */;
1711
+ endpointMetadata.adapterToken = StreamAdapterToken;
2503
1712
  endpointMetadata.classMethod = target.name;
2504
1713
  endpointMetadata.httpMethod = config.method;
2505
1714
  endpointMetadata.url = config.url;
@@ -2591,6 +1800,12 @@ var AttributeFactory = class {
2591
1800
  };
2592
1801
 
2593
1802
  // packages/core/src/navios.application.mts
1803
+ import {
1804
+ getGlobalServiceLocator as getGlobalServiceLocator3,
1805
+ inject as inject6,
1806
+ Injectable as Injectable13,
1807
+ syncInject as syncInject4
1808
+ } from "@navios/di";
2594
1809
  import cors from "@fastify/cors";
2595
1810
  import multipart from "@fastify/multipart";
2596
1811
  import { fastify } from "fastify";
@@ -2598,12 +1813,12 @@ import {
2598
1813
  serializerCompiler,
2599
1814
  validatorCompiler
2600
1815
  } from "fastify-type-provider-zod";
2601
- var _NaviosApplication_decorators, _init8;
2602
- _NaviosApplication_decorators = [Injectable()];
1816
+ var _NaviosApplication_decorators, _init11;
1817
+ _NaviosApplication_decorators = [Injectable13()];
2603
1818
  var _NaviosApplication = class _NaviosApplication {
2604
- moduleLoader = syncInject(ModuleLoaderService);
2605
- controllerAdapter = syncInject(ControllerAdapterService);
2606
- logger = syncInject(Logger, {
1819
+ moduleLoader = syncInject4(ModuleLoaderService);
1820
+ controllerAdapter = syncInject4(ControllerAdapterService);
1821
+ logger = syncInject4(Logger, {
2607
1822
  context: _NaviosApplication.name
2608
1823
  });
2609
1824
  server = null;
@@ -2624,7 +1839,7 @@ var _NaviosApplication = class _NaviosApplication {
2624
1839
  await this.moduleLoader.loadModules(this.appModule);
2625
1840
  this.server = await this.getFastifyInstance(this.options);
2626
1841
  this.configureFastifyInstance(this.server);
2627
- getServiceLocator().registerInstance(Application, this.server);
1842
+ getGlobalServiceLocator3().storeInstance(this.server, Application);
2628
1843
  this.server.setValidatorCompiler(validatorCompiler);
2629
1844
  this.server.setSerializerCompiler(serializerCompiler);
2630
1845
  if (this.corsOptions) {
@@ -2648,7 +1863,7 @@ var _NaviosApplication = class _NaviosApplication {
2648
1863
  }
2649
1864
  } else {
2650
1865
  fastifyOptions.loggerInstance = new PinoWrapper(
2651
- await inject(Logger, {
1866
+ await inject6(Logger, {
2652
1867
  context: "FastifyAdapter"
2653
1868
  })
2654
1869
  );
@@ -2658,7 +1873,7 @@ var _NaviosApplication = class _NaviosApplication {
2658
1873
  return fastify({
2659
1874
  ...options,
2660
1875
  loggerInstance: new PinoWrapper(
2661
- await inject(Logger, {
1876
+ await inject6(Logger, {
2662
1877
  context: "FastifyAdapter"
2663
1878
  })
2664
1879
  )
@@ -2690,7 +1905,7 @@ var _NaviosApplication = class _NaviosApplication {
2690
1905
  message: "Not Found",
2691
1906
  error: "NotFound"
2692
1907
  };
2693
- this.logger.error(`Route not found: ${req.url}`);
1908
+ this.logger.error(`Route not found: [${req.method}] ${req.url}`);
2694
1909
  return reply.status(404).send(response);
2695
1910
  });
2696
1911
  }
@@ -2711,15 +1926,14 @@ var _NaviosApplication = class _NaviosApplication {
2711
1926
  }
2712
1927
  promises.push(
2713
1928
  this.server.register(
2714
- (instance, opts, done) => {
1929
+ async (instance, opts) => {
2715
1930
  for (const controller of moduleMetadata.controllers) {
2716
- this.controllerAdapter.setupController(
1931
+ await this.controllerAdapter.setupController(
2717
1932
  controller,
2718
1933
  instance,
2719
1934
  moduleMetadata
2720
1935
  );
2721
1936
  }
2722
- done();
2723
1937
  },
2724
1938
  {
2725
1939
  prefix: this.globalPrefix ?? ""
@@ -2764,15 +1978,16 @@ var _NaviosApplication = class _NaviosApplication {
2764
1978
  await this.dispose();
2765
1979
  }
2766
1980
  };
2767
- _init8 = __decoratorStart(null);
2768
- _NaviosApplication = __decorateElement(_init8, 0, "NaviosApplication", _NaviosApplication_decorators, _NaviosApplication);
2769
- __runInitializers(_init8, 1, _NaviosApplication);
1981
+ _init11 = __decoratorStart(null);
1982
+ _NaviosApplication = __decorateElement(_init11, 0, "NaviosApplication", _NaviosApplication_decorators, _NaviosApplication);
1983
+ __runInitializers(_init11, 1, _NaviosApplication);
2770
1984
  var NaviosApplication = _NaviosApplication;
2771
1985
 
2772
1986
  // packages/core/src/navios.factory.mts
1987
+ import { inject as inject7 } from "@navios/di";
2773
1988
  var NaviosFactory = class {
2774
1989
  static async create(appModule, options = {}) {
2775
- const app = await inject(NaviosApplication);
1990
+ const app = await inject7(NaviosApplication);
2776
1991
  this.registerLoggerConfiguration(options);
2777
1992
  app.setup(appModule, options);
2778
1993
  return app;
@@ -2791,7 +2006,6 @@ export {
2791
2006
  Application,
2792
2007
  AttributeFactory,
2793
2008
  BadRequestException,
2794
- BoundInjectionToken,
2795
2009
  ConfigProvider,
2796
2010
  ConfigProviderFactory,
2797
2011
  ConfigProviderOptions,
@@ -2802,29 +2016,17 @@ export {
2802
2016
  ControllerAdapterService,
2803
2017
  ControllerMetadataKey,
2804
2018
  Endpoint,
2019
+ EndpointAdapterService,
2020
+ EndpointAdapterToken,
2805
2021
  EndpointMetadataKey,
2806
- EndpointType,
2807
- ErrorsEnum,
2808
- EventEmitter,
2809
2022
  ExecutionContext,
2810
2023
  ExecutionContextInjectionToken,
2811
2024
  ExecutionContextToken,
2812
- FactoryInjectionToken,
2813
- FactoryNotFound,
2814
- FactoryTokenNotResolved,
2815
2025
  ForbiddenException,
2816
2026
  GuardRunnerService,
2817
2027
  Header,
2818
2028
  HttpCode,
2819
2029
  HttpException,
2820
- Injectable,
2821
- InjectableScope,
2822
- InjectableTokenMeta,
2823
- InjectableType,
2824
- InjectionToken,
2825
- InstanceDestroying,
2826
- InstanceExpired,
2827
- InstanceNotFound,
2828
2030
  InternalServerErrorException,
2829
2031
  LOG_LEVELS,
2830
2032
  Logger,
@@ -2836,20 +2038,18 @@ export {
2836
2038
  ModuleLoaderService,
2837
2039
  ModuleMetadataKey,
2838
2040
  Multipart,
2041
+ MultipartAdapterService,
2042
+ MultipartAdapterToken,
2839
2043
  NaviosApplication,
2840
2044
  NaviosFactory,
2841
2045
  NotFoundException,
2842
2046
  PinoWrapper,
2843
2047
  Reply,
2844
2048
  Request,
2845
- ServiceLocator,
2846
- ServiceLocatorEventBus,
2847
- ServiceLocatorInstanceHolderKind,
2848
- ServiceLocatorInstanceHolderStatus,
2849
- ServiceLocatorManager,
2850
2049
  Stream,
2050
+ StreamAdapterService,
2051
+ StreamAdapterToken,
2851
2052
  UnauthorizedException,
2852
- UnknownError,
2853
2053
  UseGuards,
2854
2054
  addLeadingSlash,
2855
2055
  clc,
@@ -2861,12 +2061,9 @@ export {
2861
2061
  getAllEndpointMetadata,
2862
2062
  getControllerMetadata,
2863
2063
  getEndpointMetadata,
2864
- getInjectableToken,
2865
2064
  getModuleMetadata,
2866
- getServiceLocator,
2867
2065
  hasControllerMetadata,
2868
2066
  hasModuleMetadata,
2869
- inject,
2870
2067
  isConstructor,
2871
2068
  isEmpty,
2872
2069
  isFunction,
@@ -2880,12 +2077,7 @@ export {
2880
2077
  isSymbol,
2881
2078
  isUndefined,
2882
2079
  normalizePath,
2883
- override,
2884
2080
  provideConfig,
2885
- provideServiceLocator,
2886
- resolveService,
2887
- setPromiseCollector,
2888
2081
  stripEndSlash,
2889
- syncInject,
2890
2082
  yellow
2891
2083
  };