@haskou/ddd-kernel 2.0.1 → 2.0.3
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/{DomainMessageBus-CQSFU6A6.d.cts → DomainMessageBus-BHnBQZvI.d.cts} +1 -1
- package/dist/{DomainMessageBus-kjMVNGfv.d.ts → DomainMessageBus-DbctRnBy.d.ts} +1 -1
- package/dist/{HandlerContext-DUUExVo3.d.ts → HandlerContext-BT0RLBRT.d.ts} +1 -1
- package/dist/{HandlerContext-Lm89pSeG.d.cts → HandlerContext-CdX28Pr5.d.cts} +1 -1
- package/dist/{MessageBus-BtUXnd0Y.d.cts → MessageBus-BTy_hVua.d.cts} +2 -2
- package/dist/{MessageBus-oQ9BnW84.d.ts → MessageBus-BkHiX3LI.d.ts} +2 -2
- package/dist/{NoFailedMessagesError-z-6ffelK.d.ts → NoFailedMessagesError-C6wMAOvs.d.ts} +2 -2
- package/dist/{NoFailedMessagesError-Dm5AFcJV.d.cts → NoFailedMessagesError-De3UfABY.d.cts} +2 -2
- package/dist/{PublisherHookErrorPolicy-DSsCNE6O.d.ts → PublisherHookErrorPolicy-Bfh_QLs7.d.ts} +1 -1
- package/dist/{PublisherHookErrorPolicy-CjouTcSR.d.cts → PublisherHookErrorPolicy-BgSvNZBD.d.cts} +1 -1
- package/dist/{RetryPredicate-DNdxY_KR.d.cts → RetryPredicate-CqvyqG9g.d.cts} +1 -1
- package/dist/{RetryPredicate-CD9n6cE8.d.ts → RetryPredicate-DTeTm450.d.ts} +1 -1
- package/dist/{ServiceClass-BkEHcXDi.d.cts → ServiceClass-D_0gCcMr.d.cts} +4 -1
- package/dist/{ServiceClass-Bq_fBC5R.d.ts → ServiceClass-IInu6j5L.d.ts} +4 -1
- package/dist/{ServiceResolver-D2Jz-l_Z.d.cts → ServiceResolver-CQGmbk-X.d.cts} +1 -0
- package/dist/{ServiceResolver-D2Jz-l_Z.d.ts → ServiceResolver-CQGmbk-X.d.ts} +1 -0
- package/dist/{ShutdownHook-D23WfIIc.d.cts → ShutdownHook-C48hH6-x.d.cts} +4 -1
- package/dist/{ShutdownHook-CUl7zYwd.d.ts → ShutdownHook-CWTm9Lkn.d.ts} +4 -1
- package/dist/{Subscription-vtF0lEHP.d.ts → Subscription-BdLdP_5-.d.ts} +1 -1
- package/dist/{Subscription-4vuAAxax.d.cts → Subscription-DY3nBVkU.d.cts} +1 -1
- package/dist/adapters/index.cjs +133 -18
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +9 -9
- package/dist/adapters/index.d.ts +9 -9
- package/dist/adapters/index.js +132 -18
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/pubsub/amqp/index.cjs +80 -12
- package/dist/adapters/pubsub/amqp/index.cjs.map +1 -1
- package/dist/adapters/pubsub/amqp/index.d.cts +8 -8
- package/dist/adapters/pubsub/amqp/index.d.ts +8 -8
- package/dist/adapters/pubsub/amqp/index.js +80 -12
- package/dist/adapters/pubsub/amqp/index.js.map +1 -1
- package/dist/adapters/pubsub/in-memory/index.d.cts +4 -4
- package/dist/adapters/pubsub/in-memory/index.d.ts +4 -4
- package/dist/adapters/pubsub/index.cjs +80 -12
- package/dist/adapters/pubsub/index.cjs.map +1 -1
- package/dist/adapters/pubsub/index.d.cts +8 -8
- package/dist/adapters/pubsub/index.d.ts +8 -8
- package/dist/adapters/pubsub/index.js +80 -12
- package/dist/adapters/pubsub/index.js.map +1 -1
- package/dist/adapters/ui/express/index.cjs +53 -6
- package/dist/adapters/ui/express/index.cjs.map +1 -1
- package/dist/adapters/ui/express/index.d.cts +16 -4
- package/dist/adapters/ui/express/index.d.ts +16 -4
- package/dist/adapters/ui/express/index.js +52 -6
- package/dist/adapters/ui/express/index.js.map +1 -1
- package/dist/adapters/ui/index.cjs +133 -18
- package/dist/adapters/ui/index.cjs.map +1 -1
- package/dist/adapters/ui/index.d.cts +4 -4
- package/dist/adapters/ui/index.d.ts +4 -4
- package/dist/adapters/ui/index.js +132 -18
- package/dist/adapters/ui/index.js.map +1 -1
- package/dist/adapters/ui/routes/index.cjs +80 -12
- package/dist/adapters/ui/routes/index.cjs.map +1 -1
- package/dist/adapters/ui/routes/index.js +80 -12
- package/dist/adapters/ui/routes/index.js.map +1 -1
- package/dist/contracts/index.d.cts +8 -8
- package/dist/contracts/index.d.ts +8 -8
- package/dist/contracts/kernel/index.d.cts +5 -5
- package/dist/contracts/kernel/index.d.ts +5 -5
- package/dist/contracts/pubsub/index.d.cts +7 -7
- package/dist/contracts/pubsub/index.d.ts +7 -7
- package/dist/contracts/ui/index.d.cts +2 -2
- package/dist/contracts/ui/index.d.ts +2 -2
- package/dist/domain/index.d.cts +5 -5
- package/dist/domain/index.d.ts +5 -5
- package/dist/index.cjs +80 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +80 -12
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/dependency-injection/index.cjs +44 -1
- package/dist/infrastructure/dependency-injection/index.cjs.map +1 -1
- package/dist/infrastructure/dependency-injection/index.d.cts +13 -3
- package/dist/infrastructure/dependency-injection/index.d.ts +13 -3
- package/dist/infrastructure/dependency-injection/index.js +43 -1
- package/dist/infrastructure/dependency-injection/index.js.map +1 -1
- package/dist/infrastructure/express/index.cjs +53 -6
- package/dist/infrastructure/express/index.cjs.map +1 -1
- package/dist/infrastructure/express/index.d.cts +4 -4
- package/dist/infrastructure/express/index.d.ts +4 -4
- package/dist/infrastructure/express/index.js +52 -6
- package/dist/infrastructure/express/index.js.map +1 -1
- package/dist/infrastructure/scheduler/index.cjs +80 -12
- package/dist/infrastructure/scheduler/index.cjs.map +1 -1
- package/dist/infrastructure/scheduler/index.js +80 -12
- package/dist/infrastructure/scheduler/index.js.map +1 -1
- package/package.json +5 -4
package/dist/adapters/index.js
CHANGED
|
@@ -66,6 +66,32 @@ var ConsoleKernelLogger = class {
|
|
|
66
66
|
import dotenv from "dotenv";
|
|
67
67
|
import path2 from "path";
|
|
68
68
|
|
|
69
|
+
// src/infrastructure/dependency-injection/AutowireWarningFilter.ts
|
|
70
|
+
var AutowireWarningFilter = class {
|
|
71
|
+
constructor(logger) {
|
|
72
|
+
this.logger = logger;
|
|
73
|
+
}
|
|
74
|
+
logger;
|
|
75
|
+
isIgnorableAutowireWarning(message) {
|
|
76
|
+
return message.startsWith(
|
|
77
|
+
"Autowire: file has export default declaration but no runtime default export:"
|
|
78
|
+
) || message.startsWith("Autowire: failed to create definition for undefined:");
|
|
79
|
+
}
|
|
80
|
+
warn(message, ...optionalParams) {
|
|
81
|
+
if (typeof message === "string" && this.isIgnorableAutowireWarning(message)) {
|
|
82
|
+
this.logger.debug?.(`Ignored ${message}`, ...optionalParams);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this.logger.warn(message, ...optionalParams);
|
|
86
|
+
}
|
|
87
|
+
info(message, ...optionalParams) {
|
|
88
|
+
this.logger.info?.(message, ...optionalParams);
|
|
89
|
+
}
|
|
90
|
+
debug(message, ...optionalParams) {
|
|
91
|
+
this.logger.debug?.(message, ...optionalParams);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
69
95
|
// src/infrastructure/dependency-injection/DependencyInjection.ts
|
|
70
96
|
import fs from "fs-extra";
|
|
71
97
|
import {
|
|
@@ -123,6 +149,9 @@ var DependencyInjection = class _DependencyInjection {
|
|
|
123
149
|
const tokenName = this.getServiceClassName(token) ?? String(token);
|
|
124
150
|
return `ddd-kernel.override.${prefix}.${tokenName}`;
|
|
125
151
|
}
|
|
152
|
+
hasDirectService(serviceName) {
|
|
153
|
+
return typeof serviceName === "string" && (this.definitions.has(serviceName) || this.aliases.has(serviceName));
|
|
154
|
+
}
|
|
126
155
|
ensureSyntheticService(id, value) {
|
|
127
156
|
const definition = this.container.register(id);
|
|
128
157
|
definition.public = true;
|
|
@@ -270,6 +299,15 @@ var DependencyInjection = class _DependencyInjection {
|
|
|
270
299
|
this.applyValueOverride(override);
|
|
271
300
|
}
|
|
272
301
|
}
|
|
302
|
+
async processAutowire() {
|
|
303
|
+
const previousLogger = this.container.logger;
|
|
304
|
+
this.container.logger = new AutowireWarningFilter(previousLogger);
|
|
305
|
+
try {
|
|
306
|
+
await this.autowire?.process();
|
|
307
|
+
} finally {
|
|
308
|
+
this.container.logger = previousLogger;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
273
311
|
registerParentAliases() {
|
|
274
312
|
for (const [id, definition] of this.definitions.entries()) {
|
|
275
313
|
if (definition._abstract === true || !definition._parent) {
|
|
@@ -286,7 +324,7 @@ var DependencyInjection = class _DependencyInjection {
|
|
|
286
324
|
this.options.servicesYamlPath,
|
|
287
325
|
false
|
|
288
326
|
);
|
|
289
|
-
await this.
|
|
327
|
+
await this.processAutowire();
|
|
290
328
|
} else {
|
|
291
329
|
this.loader = new YamlFileLoader(this.container);
|
|
292
330
|
await this.loader.load(this.options.servicesYamlPath);
|
|
@@ -314,6 +352,9 @@ var DependencyInjection = class _DependencyInjection {
|
|
|
314
352
|
}
|
|
315
353
|
return this.container.get(serviceName);
|
|
316
354
|
}
|
|
355
|
+
hasService(serviceName) {
|
|
356
|
+
return this.overrideTokenIds.has(serviceName) || this.findAliasServiceId(serviceName) !== void 0 || this.findConcreteChildServiceId(serviceName) !== void 0 || this.findRegisteredServiceId(serviceName) !== void 0 || this.hasDirectService(serviceName);
|
|
357
|
+
}
|
|
317
358
|
};
|
|
318
359
|
|
|
319
360
|
// src/kernel/KernelEnvironmentValidationError.ts
|
|
@@ -395,6 +436,13 @@ var Kernel = class _Kernel {
|
|
|
395
436
|
);
|
|
396
437
|
}
|
|
397
438
|
}
|
|
439
|
+
static assertRequiredEnvironmentVariableIsNotBlank(name, value, schema) {
|
|
440
|
+
if (schema[name]?.required === true && value.trim() === "") {
|
|
441
|
+
throw new KernelEnvironmentValidationError(
|
|
442
|
+
`Blank required environment variable "${name}".`
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
398
446
|
static assertEnvironmentVariableChoice(name, value, schema) {
|
|
399
447
|
const choices = schema[name]?.choices;
|
|
400
448
|
if (choices && !choices.includes(value)) {
|
|
@@ -417,21 +465,16 @@ var Kernel = class _Kernel {
|
|
|
417
465
|
return false;
|
|
418
466
|
}
|
|
419
467
|
throw new KernelEnvironmentValidationError(
|
|
420
|
-
`Environment variable "${name}"
|
|
468
|
+
`Environment variable "${name}" has invalid boolean value "${value}".`
|
|
421
469
|
);
|
|
422
470
|
}
|
|
423
471
|
static parseNumberEnvironmentVariable(name, value) {
|
|
424
|
-
if (value.trim() === "") {
|
|
425
|
-
throw new KernelEnvironmentValidationError(
|
|
426
|
-
`Environment variable "${name}" must be a number.`
|
|
427
|
-
);
|
|
428
|
-
}
|
|
429
472
|
const parsedValue = Number(value);
|
|
430
473
|
if (Number.isFinite(parsedValue)) {
|
|
431
474
|
return parsedValue;
|
|
432
475
|
}
|
|
433
476
|
throw new KernelEnvironmentValidationError(
|
|
434
|
-
`Environment variable "${name}"
|
|
477
|
+
`Environment variable "${name}" has invalid number value "${value}".`
|
|
435
478
|
);
|
|
436
479
|
}
|
|
437
480
|
static parseEnvironmentVariable(name, value, schema) {
|
|
@@ -449,17 +492,42 @@ var Kernel = class _Kernel {
|
|
|
449
492
|
_Kernel.assertEnvironmentVariableChoice(name, value, schema);
|
|
450
493
|
return value;
|
|
451
494
|
}
|
|
495
|
+
static getEnvironmentVariableValue(name, definition, schema) {
|
|
496
|
+
const value = process.env[name];
|
|
497
|
+
_Kernel.assertRequiredEnvironmentVariable(name, value, schema);
|
|
498
|
+
if (value !== void 0) {
|
|
499
|
+
_Kernel.assertRequiredEnvironmentVariableIsNotBlank(name, value, schema);
|
|
500
|
+
}
|
|
501
|
+
if (value !== void 0 && value.trim() !== "") {
|
|
502
|
+
return value;
|
|
503
|
+
}
|
|
504
|
+
return definition.defaultValue?.toString();
|
|
505
|
+
}
|
|
506
|
+
static shouldUnsetBlankOptionalEnvironmentVariable(name, value, valueOrDefault, schema) {
|
|
507
|
+
return value !== void 0 && value.trim() === "" && valueOrDefault === void 0 && schema[name]?.required !== true;
|
|
508
|
+
}
|
|
452
509
|
static validateEnvironmentVariables(schema) {
|
|
453
510
|
const environmentVariables = {};
|
|
454
511
|
for (const [name, definition] of Object.entries(schema)) {
|
|
455
|
-
const value = process.env[name]
|
|
456
|
-
_Kernel.
|
|
457
|
-
|
|
512
|
+
const value = process.env[name];
|
|
513
|
+
const valueOrDefault = _Kernel.getEnvironmentVariableValue(
|
|
514
|
+
name,
|
|
515
|
+
definition,
|
|
516
|
+
schema
|
|
517
|
+
);
|
|
518
|
+
if (valueOrDefault !== void 0) {
|
|
458
519
|
environmentVariables[name] = _Kernel.parseEnvironmentVariable(
|
|
459
520
|
name,
|
|
460
|
-
|
|
521
|
+
valueOrDefault,
|
|
461
522
|
schema
|
|
462
523
|
);
|
|
524
|
+
} else if (_Kernel.shouldUnsetBlankOptionalEnvironmentVariable(
|
|
525
|
+
name,
|
|
526
|
+
value,
|
|
527
|
+
valueOrDefault,
|
|
528
|
+
schema
|
|
529
|
+
)) {
|
|
530
|
+
environmentVariables[name] = void 0;
|
|
463
531
|
}
|
|
464
532
|
}
|
|
465
533
|
return {
|
|
@@ -963,6 +1031,45 @@ var InMemoryPubSub = class {
|
|
|
963
1031
|
}
|
|
964
1032
|
};
|
|
965
1033
|
|
|
1034
|
+
// src/adapters/ui/express/ExpressControllerResolver.ts
|
|
1035
|
+
var ExpressControllerResolver = class {
|
|
1036
|
+
constructor(kernel, controllers) {
|
|
1037
|
+
this.kernel = kernel;
|
|
1038
|
+
this.controllers = new Set(controllers);
|
|
1039
|
+
}
|
|
1040
|
+
kernel;
|
|
1041
|
+
controllerInstances = /* @__PURE__ */ new Map();
|
|
1042
|
+
controllers;
|
|
1043
|
+
createControllerInstance(ClassDefinition) {
|
|
1044
|
+
const Controller = ClassDefinition;
|
|
1045
|
+
return new Controller();
|
|
1046
|
+
}
|
|
1047
|
+
getCachedController(ClassDefinition) {
|
|
1048
|
+
const cached = this.controllerInstances.get(ClassDefinition);
|
|
1049
|
+
if (cached) {
|
|
1050
|
+
return cached;
|
|
1051
|
+
}
|
|
1052
|
+
const instance = this.createControllerInstance(ClassDefinition);
|
|
1053
|
+
this.controllerInstances.set(ClassDefinition, instance);
|
|
1054
|
+
return instance;
|
|
1055
|
+
}
|
|
1056
|
+
isKnownController(ClassDefinition) {
|
|
1057
|
+
return this.controllers.has(ClassDefinition);
|
|
1058
|
+
}
|
|
1059
|
+
canResolveService(ClassDefinition) {
|
|
1060
|
+
return this.kernel.di.hasService?.(ClassDefinition) === true;
|
|
1061
|
+
}
|
|
1062
|
+
get(ClassDefinition) {
|
|
1063
|
+
if (!this.canResolveService(ClassDefinition)) {
|
|
1064
|
+
if (this.isKnownController(ClassDefinition)) {
|
|
1065
|
+
return this.getCachedController(ClassDefinition);
|
|
1066
|
+
}
|
|
1067
|
+
return void 0;
|
|
1068
|
+
}
|
|
1069
|
+
return this.kernel.di.getService(ClassDefinition);
|
|
1070
|
+
}
|
|
1071
|
+
};
|
|
1072
|
+
|
|
966
1073
|
// src/adapters/ui/express/ExpressKernelServer.ts
|
|
967
1074
|
import { createRequire } from "module";
|
|
968
1075
|
import path3 from "path";
|
|
@@ -1001,16 +1108,19 @@ var ExpressKernelServer = class {
|
|
|
1001
1108
|
copy(items) {
|
|
1002
1109
|
return [...items ?? []];
|
|
1003
1110
|
}
|
|
1004
|
-
configureControllerContainer() {
|
|
1111
|
+
configureControllerContainer(controllers) {
|
|
1005
1112
|
const { useContainer } = this.getRoutingControllers();
|
|
1113
|
+
const resolver = new ExpressControllerResolver(
|
|
1114
|
+
this.options.kernel,
|
|
1115
|
+
controllers
|
|
1116
|
+
);
|
|
1006
1117
|
useContainer(
|
|
1007
1118
|
{
|
|
1008
|
-
|
|
1009
|
-
get: (ClassDefinition) => this.options.kernel.di.getService(ClassDefinition)
|
|
1119
|
+
get: (ClassDefinition) => resolver.get(ClassDefinition)
|
|
1010
1120
|
},
|
|
1011
1121
|
{
|
|
1012
1122
|
fallback: true,
|
|
1013
|
-
fallbackOnErrors:
|
|
1123
|
+
fallbackOnErrors: false
|
|
1014
1124
|
}
|
|
1015
1125
|
);
|
|
1016
1126
|
}
|
|
@@ -1028,8 +1138,11 @@ var ExpressKernelServer = class {
|
|
|
1028
1138
|
}
|
|
1029
1139
|
defaultErrorHandler() {
|
|
1030
1140
|
return (error, request, response, next) => {
|
|
1031
|
-
void next;
|
|
1032
1141
|
void request;
|
|
1142
|
+
if (response.headersSent) {
|
|
1143
|
+
next(error);
|
|
1144
|
+
return;
|
|
1145
|
+
}
|
|
1033
1146
|
response.status(500).json({
|
|
1034
1147
|
error: error instanceof Error ? error.message : String(error)
|
|
1035
1148
|
});
|
|
@@ -1140,7 +1253,7 @@ var ExpressKernelServer = class {
|
|
|
1140
1253
|
this.applyMiddlewares(app, this.preControllerMiddlewares);
|
|
1141
1254
|
await this.runHooks(this.beforeControllersHooks, app);
|
|
1142
1255
|
await this.runPhaseHooks("beforeControllers", app);
|
|
1143
|
-
this.configureControllerContainer();
|
|
1256
|
+
this.configureControllerContainer(controllers);
|
|
1144
1257
|
useExpressServer(app, {
|
|
1145
1258
|
...this.options.routingControllersOptions,
|
|
1146
1259
|
controllers,
|
|
@@ -1331,6 +1444,7 @@ export {
|
|
|
1331
1444
|
ConsumerMiddlewarePipeline,
|
|
1332
1445
|
CorrelationConsumerMiddleware,
|
|
1333
1446
|
DefaultPublisherHookErrorPolicy,
|
|
1447
|
+
ExpressControllerResolver,
|
|
1334
1448
|
ExpressKernelServer,
|
|
1335
1449
|
HttpErrorHandler,
|
|
1336
1450
|
IdempotencyConsumerMiddleware,
|