@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.
- package/dist/_tsup-dts-rollup.d.mts +185 -434
- package/dist/_tsup-dts-rollup.d.ts +185 -434
- package/dist/index.d.mts +62 -46
- package/dist/index.d.ts +62 -46
- package/dist/index.js +482 -1328
- package/dist/index.mjs +484 -1292
- package/package.json +3 -2
- package/src/adapters/endpoint-adapter.service.mts +72 -0
- package/src/adapters/handler-adapter.interface.mts +21 -0
- package/src/adapters/index.mts +4 -0
- package/src/adapters/multipart-adapter.service.mts +131 -0
- package/src/adapters/stream-adapter.service.mts +91 -0
- package/src/attribute.factory.mts +14 -14
- package/src/config/config.provider.mts +16 -12
- package/src/decorators/controller.decorator.mts +3 -8
- package/src/decorators/endpoint.decorator.mts +7 -3
- package/src/decorators/header.decorator.mts +1 -6
- package/src/decorators/http-code.decorator.mts +1 -6
- package/src/decorators/module.decorator.mts +16 -21
- package/src/decorators/multipart.decorator.mts +7 -3
- package/src/decorators/stream.decorator.mts +7 -3
- package/src/decorators/use-guards.decorator.mts +3 -2
- package/src/index.mts +2 -1
- package/src/logger/console-logger.service.mts +3 -2
- package/src/logger/logger.factory.mts +4 -5
- package/src/logger/logger.service.mts +2 -2
- package/src/metadata/controller.metadata.mts +6 -5
- package/src/metadata/{endpoint.metadata.mts → handler.metadata.mts} +18 -28
- package/src/metadata/index.mts +1 -2
- package/src/metadata/module.metadata.mts +3 -2
- package/src/navios.application.mts +12 -12
- package/src/navios.factory.mts +4 -2
- package/src/services/controller-adapter.service.mts +65 -245
- package/src/services/execution-context.mts +4 -3
- package/src/services/guard-runner.service.mts +4 -6
- package/src/services/module-loader.service.mts +4 -2
- package/src/tokens/application.token.mts +1 -1
- package/src/tokens/execution-context.token.mts +2 -1
- package/src/tokens/reply.token.mts +1 -1
- package/src/tokens/request.token.mts +1 -1
- package/src/metadata/injectable.metadata.mts +0 -11
- package/src/service-locator/__tests__/injectable.spec.mts +0 -171
- package/src/service-locator/__tests__/injection-token.spec.mts +0 -124
- package/src/service-locator/decorators/get-injectable-token.mts +0 -19
- package/src/service-locator/decorators/index.mts +0 -2
- package/src/service-locator/decorators/injectable.decorator.mts +0 -64
- package/src/service-locator/enums/index.mts +0 -1
- package/src/service-locator/enums/injectable-scope.enum.mts +0 -10
- package/src/service-locator/errors/errors.enum.mts +0 -8
- package/src/service-locator/errors/factory-not-found.mts +0 -8
- package/src/service-locator/errors/factory-token-not-resolved.mts +0 -10
- package/src/service-locator/errors/index.mts +0 -7
- package/src/service-locator/errors/instance-destroying.mts +0 -8
- package/src/service-locator/errors/instance-expired.mts +0 -8
- package/src/service-locator/errors/instance-not-found.mts +0 -8
- package/src/service-locator/errors/unknown-error.mts +0 -15
- package/src/service-locator/event-emitter.mts +0 -107
- package/src/service-locator/index.mts +0 -15
- package/src/service-locator/inject.mts +0 -28
- package/src/service-locator/injection-token.mts +0 -92
- package/src/service-locator/injector.mts +0 -18
- package/src/service-locator/interfaces/factory.interface.mts +0 -3
- package/src/service-locator/override.mts +0 -22
- package/src/service-locator/proxy-service-locator.mts +0 -99
- package/src/service-locator/resolve-service.mts +0 -46
- package/src/service-locator/service-locator-abstract-factory-context.mts +0 -23
- package/src/service-locator/service-locator-event-bus.mts +0 -96
- package/src/service-locator/service-locator-instance-holder.mts +0 -63
- package/src/service-locator/service-locator-manager.mts +0 -89
- package/src/service-locator/service-locator.mts +0 -535
- 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 = (
|
|
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,
|
|
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,
|
|
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 [
|
|
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 [
|
|
25
|
+
}, set [name](x) {
|
|
26
26
|
return __privateSet(this, extra, x);
|
|
27
|
-
} },
|
|
28
|
-
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") +
|
|
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,
|
|
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) =>
|
|
33
|
-
if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[
|
|
34
|
-
if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[
|
|
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,
|
|
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 {
|
|
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
|
|
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 = (
|
|
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 =
|
|
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 {
|
|
1053
|
-
|
|
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/
|
|
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,
|
|
1272
|
-
_GuardRunnerService_decorators = [
|
|
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
|
|
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
|
-
|
|
1335
|
-
GuardRunnerService = __decorateElement(
|
|
1336
|
-
__runInitializers(
|
|
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,
|
|
1340
|
-
_ControllerAdapterService_decorators = [
|
|
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
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
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 ?
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
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
|
-
|
|
1390
|
-
|
|
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
|
-
|
|
1513
|
-
const
|
|
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
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
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
|
-
|
|
1579
|
-
_ControllerAdapterService = __decorateElement(
|
|
1580
|
-
__runInitializers(
|
|
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
|
-
|
|
1585
|
-
_ModuleLoaderService_decorators
|
|
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 =
|
|
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
|
|
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
|
-
|
|
1647
|
-
_ModuleLoaderService = __decorateElement(
|
|
1648
|
-
__runInitializers(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|
|
1686
|
-
_ConsoleLogger_decorators = [
|
|
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 =
|
|
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
|
|
1822
|
-
const 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
|
|
1934
|
-
const includeTimestamp = _ConsoleLogger.lastTimestampAt && ((
|
|
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
|
-
|
|
2040
|
-
_ConsoleLogger = __decorateElement(
|
|
2041
|
-
__runInitializers(
|
|
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 {
|
|
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,
|
|
2058
|
-
_LoggerInstance_decorators = [
|
|
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
|
|
1288
|
+
var _a3;
|
|
2080
1289
|
optionalParams = this.context ? (optionalParams.length ? optionalParams : [void 0]).concat(
|
|
2081
1290
|
this.context
|
|
2082
1291
|
) : optionalParams;
|
|
2083
|
-
(
|
|
1292
|
+
(_a3 = this.localInstance) == null ? void 0 : _a3.error(message, ...optionalParams);
|
|
2084
1293
|
}
|
|
2085
1294
|
log(message, ...optionalParams) {
|
|
2086
|
-
var
|
|
1295
|
+
var _a3;
|
|
2087
1296
|
optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
|
|
2088
|
-
(
|
|
1297
|
+
(_a3 = this.localInstance) == null ? void 0 : _a3.log(message, ...optionalParams);
|
|
2089
1298
|
}
|
|
2090
1299
|
warn(message, ...optionalParams) {
|
|
2091
|
-
var
|
|
1300
|
+
var _a3;
|
|
2092
1301
|
optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
|
|
2093
|
-
(
|
|
1302
|
+
(_a3 = this.localInstance) == null ? void 0 : _a3.warn(message, ...optionalParams);
|
|
2094
1303
|
}
|
|
2095
1304
|
debug(message, ...optionalParams) {
|
|
2096
|
-
var
|
|
1305
|
+
var _a3, _b;
|
|
2097
1306
|
optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
|
|
2098
|
-
(_b = (
|
|
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
|
|
1310
|
+
var _a3, _b;
|
|
2102
1311
|
optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
|
|
2103
|
-
(_b = (
|
|
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
|
|
1315
|
+
var _a3, _b;
|
|
2107
1316
|
optionalParams = this.context ? optionalParams.concat(this.context) : optionalParams;
|
|
2108
|
-
(_b = (
|
|
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
|
|
2112
|
-
(
|
|
1320
|
+
var _a3;
|
|
1321
|
+
(_a3 = this.staticInstanceRef) == null ? void 0 : _a3.error(message, ...optionalParams);
|
|
2113
1322
|
}
|
|
2114
1323
|
static log(message, ...optionalParams) {
|
|
2115
|
-
var
|
|
2116
|
-
(
|
|
1324
|
+
var _a3;
|
|
1325
|
+
(_a3 = this.staticInstanceRef) == null ? void 0 : _a3.log(message, ...optionalParams);
|
|
2117
1326
|
}
|
|
2118
1327
|
static warn(message, ...optionalParams) {
|
|
2119
|
-
var
|
|
2120
|
-
(
|
|
1328
|
+
var _a3;
|
|
1329
|
+
(_a3 = this.staticInstanceRef) == null ? void 0 : _a3.warn(message, ...optionalParams);
|
|
2121
1330
|
}
|
|
2122
1331
|
static debug(message, ...optionalParams) {
|
|
2123
|
-
var
|
|
2124
|
-
(_b = (
|
|
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
|
|
2128
|
-
(_b = (
|
|
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
|
|
2132
|
-
(_b = (
|
|
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
|
|
1347
|
+
var _a3, _b;
|
|
2139
1348
|
if (Array.isArray(logger)) {
|
|
2140
1349
|
_LoggerInstance.logLevels = logger;
|
|
2141
|
-
return (_b = (
|
|
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
|
|
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: (
|
|
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
|
-
|
|
2166
|
-
_LoggerInstance = __decorateElement(
|
|
2167
|
-
__runInitializers(
|
|
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 =
|
|
2173
|
-
context:
|
|
2174
|
-
options:
|
|
2175
|
-
timestamp:
|
|
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 =
|
|
2179
|
-
var _LoggerFactory_decorators,
|
|
2180
|
-
_LoggerFactory_decorators = [
|
|
2181
|
-
type:
|
|
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
|
-
|
|
2190
|
-
LoggerFactory = __decorateElement(
|
|
2191
|
-
__runInitializers(
|
|
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
|
|
2214
|
-
(_b = (
|
|
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
|
|
2218
|
-
(_b = (
|
|
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
|
|
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
|
|
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 = (
|
|
2269
|
-
|
|
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
|
|
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 =
|
|
2293
|
-
load:
|
|
1501
|
+
var ConfigProviderOptions = z2.object({
|
|
1502
|
+
load: z2.function()
|
|
2294
1503
|
});
|
|
2295
|
-
var ConfigProvider =
|
|
2296
|
-
var _ConfigProviderFactory_decorators,
|
|
2297
|
-
_ConfigProviderFactory_decorators = [
|
|
1504
|
+
var ConfigProvider = InjectionToken11.create(ConfigServiceInstance, ConfigProviderOptions);
|
|
1505
|
+
var _ConfigProviderFactory_decorators, _init10;
|
|
1506
|
+
_ConfigProviderFactory_decorators = [Injectable10({
|
|
2298
1507
|
token: ConfigProvider,
|
|
2299
|
-
type:
|
|
1508
|
+
type: InjectableType2.Factory
|
|
2300
1509
|
})];
|
|
2301
1510
|
var ConfigProviderFactory = class {
|
|
2302
|
-
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(
|
|
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
|
-
|
|
2318
|
-
ConfigProviderFactory = __decorateElement(
|
|
2319
|
-
__runInitializers(
|
|
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
|
|
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 =
|
|
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
|
|
1554
|
+
return Injectable11({
|
|
2342
1555
|
token,
|
|
2343
|
-
|
|
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(
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
1633
|
+
const token = InjectionToken13.create(target);
|
|
2424
1634
|
const moduleMetadata = getModuleMetadata(target, context);
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
moduleMetadata.controllers.add(controller);
|
|
2428
|
-
}
|
|
1635
|
+
for (const controller of controllers) {
|
|
1636
|
+
moduleMetadata.controllers.add(controller);
|
|
2429
1637
|
}
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
moduleMetadata.imports.add(importedModule);
|
|
2433
|
-
}
|
|
1638
|
+
for (const importedModule of imports) {
|
|
1639
|
+
moduleMetadata.imports.add(importedModule);
|
|
2434
1640
|
}
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
moduleMetadata.guards.add(guard);
|
|
2438
|
-
}
|
|
1641
|
+
for (const guard of Array.from(guards).reverse()) {
|
|
1642
|
+
moduleMetadata.guards.add(guard);
|
|
2439
1643
|
}
|
|
2440
|
-
return
|
|
1644
|
+
return Injectable12({
|
|
2441
1645
|
token,
|
|
2442
|
-
|
|
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(
|
|
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.
|
|
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(
|
|
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.
|
|
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,
|
|
2602
|
-
_NaviosApplication_decorators = [
|
|
1816
|
+
var _NaviosApplication_decorators, _init11;
|
|
1817
|
+
_NaviosApplication_decorators = [Injectable13()];
|
|
2603
1818
|
var _NaviosApplication = class _NaviosApplication {
|
|
2604
|
-
moduleLoader =
|
|
2605
|
-
controllerAdapter =
|
|
2606
|
-
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
2768
|
-
_NaviosApplication = __decorateElement(
|
|
2769
|
-
__runInitializers(
|
|
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
|
|
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
|
};
|