@hexaijs/application 0.1.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/LICENSE +21 -0
- package/README.md +331 -0
- package/dist/abstract-application-context.d.ts +13 -0
- package/dist/abstract-application-context.d.ts.map +1 -0
- package/dist/abstract-application-context.js +35 -0
- package/dist/abstract-application-context.js.map +1 -0
- package/dist/application-context.d.ts +2 -0
- package/dist/application-context.d.ts.map +1 -0
- package/dist/application-context.js +6 -0
- package/dist/application-context.js.map +1 -0
- package/dist/application-event-publisher.d.ts +16 -0
- package/dist/application-event-publisher.d.ts.map +1 -0
- package/dist/application-event-publisher.js +37 -0
- package/dist/application-event-publisher.js.map +1 -0
- package/dist/application.d.ts +59 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/application.js +237 -0
- package/dist/application.js.map +1 -0
- package/dist/command-handler.d.ts +5 -0
- package/dist/command-handler.d.ts.map +1 -0
- package/dist/command-handler.js +3 -0
- package/dist/command-handler.js.map +1 -0
- package/dist/command.d.ts +12 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +46 -0
- package/dist/command.js.map +1 -0
- package/dist/error.d.ts +37 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +28 -0
- package/dist/error.js.map +1 -0
- package/dist/event-handler.d.ts +6 -0
- package/dist/event-handler.d.ts.map +1 -0
- package/dist/event-handler.js +3 -0
- package/dist/event-handler.js.map +1 -0
- package/dist/event-publisher.d.ts +4 -0
- package/dist/event-publisher.d.ts.map +1 -0
- package/dist/event-publisher.js +3 -0
- package/dist/event-publisher.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/intercepted-application.d.ts +33 -0
- package/dist/intercepted-application.d.ts.map +1 -0
- package/dist/intercepted-application.js +111 -0
- package/dist/intercepted-application.js.map +1 -0
- package/dist/interceptor.d.ts +25 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +3 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/logging/create-logger.d.ts +16 -0
- package/dist/logging/create-logger.d.ts.map +1 -0
- package/dist/logging/create-logger.js +48 -0
- package/dist/logging/create-logger.js.map +1 -0
- package/dist/logging/index.d.ts +7 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +32 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +42 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +3 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/logging-interceptor.d.ts +9 -0
- package/dist/logging/logging-interceptor.d.ts.map +1 -0
- package/dist/logging/logging-interceptor.js +48 -0
- package/dist/logging/logging-interceptor.js.map +1 -0
- package/dist/logging/logging-utils.d.ts +16 -0
- package/dist/logging/logging-utils.d.ts.map +1 -0
- package/dist/logging/logging-utils.js +91 -0
- package/dist/logging/logging-utils.js.map +1 -0
- package/dist/logging/trace-interceptor.d.ts +16 -0
- package/dist/logging/trace-interceptor.d.ts.map +1 -0
- package/dist/logging/trace-interceptor.js +53 -0
- package/dist/logging/trace-interceptor.js.map +1 -0
- package/dist/message-handler.d.ts +4 -0
- package/dist/message-handler.d.ts.map +1 -0
- package/dist/message-handler.js +3 -0
- package/dist/message-handler.js.map +1 -0
- package/dist/messaging-support.d.ts +11 -0
- package/dist/messaging-support.d.ts.map +1 -0
- package/dist/messaging-support.js +40 -0
- package/dist/messaging-support.js.map +1 -0
- package/dist/query-handler.d.ts +5 -0
- package/dist/query-handler.d.ts.map +1 -0
- package/dist/query-handler.js +3 -0
- package/dist/query-handler.js.map +1 -0
- package/dist/query.d.ts +12 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +46 -0
- package/dist/query.js.map +1 -0
- package/dist/request.d.ts +3 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +19 -0
- package/dist/request.js.map +1 -0
- package/dist/result.d.ts +18 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +28 -0
- package/dist/result.js.map +1 -0
- package/dist/selector-based-event-handler.d.ts +29 -0
- package/dist/selector-based-event-handler.d.ts.map +1 -0
- package/dist/selector-based-event-handler.js +78 -0
- package/dist/selector-based-event-handler.js.map +1 -0
- package/dist/simple-composite-application.d.ts +15 -0
- package/dist/simple-composite-application.d.ts.map +1 -0
- package/dist/simple-composite-application.js +61 -0
- package/dist/simple-composite-application.js.map +1 -0
- package/dist/test/expectations.d.ts +10 -0
- package/dist/test/expectations.d.ts.map +1 -0
- package/dist/test/expectations.js +33 -0
- package/dist/test/expectations.js.map +1 -0
- package/dist/test/fixtures/index.d.ts +24 -0
- package/dist/test/fixtures/index.d.ts.map +1 -0
- package/dist/test/fixtures/index.js +40 -0
- package/dist/test/fixtures/index.js.map +1 -0
- package/dist/test/fixtures/interceptor-test-helpers.d.ts +34 -0
- package/dist/test/fixtures/interceptor-test-helpers.d.ts.map +1 -0
- package/dist/test/fixtures/interceptor-test-helpers.js +59 -0
- package/dist/test/fixtures/interceptor-test-helpers.js.map +1 -0
- package/dist/test/index.d.ts +3 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +19 -0
- package/dist/test/index.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Message } from "@hexaijs/core";
|
|
2
|
+
export interface MessageTrace {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function asTrace(message: Message): MessageTrace;
|
|
7
|
+
export declare function causationOf(message: Message): MessageTrace | undefined;
|
|
8
|
+
export declare function setCausationOf<T extends Message>(message: T, causation: MessageTrace): T;
|
|
9
|
+
export declare function correlationOf(message: Message): MessageTrace | undefined;
|
|
10
|
+
export declare function setCorrelationOf<T extends Message>(message: T, correlation: MessageTrace): T;
|
|
11
|
+
//# sourceMappingURL=messaging-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging-support.d.ts","sourceRoot":"","sources":["../src/messaging-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAKtD;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAMtE;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAC5C,OAAO,EAAE,CAAC,EACV,SAAS,EAAE,YAAY,GACxB,CAAC,CAIH;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAMxE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAC9C,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,YAAY,GAC1B,CAAC,CAIH"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asTrace = asTrace;
|
|
4
|
+
exports.causationOf = causationOf;
|
|
5
|
+
exports.setCausationOf = setCausationOf;
|
|
6
|
+
exports.correlationOf = correlationOf;
|
|
7
|
+
exports.setCorrelationOf = setCorrelationOf;
|
|
8
|
+
function asTrace(message) {
|
|
9
|
+
return {
|
|
10
|
+
id: message.getMessageId(),
|
|
11
|
+
type: message.getMessageType(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
// Causation functions
|
|
15
|
+
function causationOf(message) {
|
|
16
|
+
const causationId = message.getHeader("causationId");
|
|
17
|
+
const causationType = message.getHeader("causationType");
|
|
18
|
+
if (causationId && causationType) {
|
|
19
|
+
return { id: causationId, type: causationType };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function setCausationOf(message, causation) {
|
|
23
|
+
return message
|
|
24
|
+
.withHeader("causationId", causation.id)
|
|
25
|
+
.withHeader("causationType", causation.type);
|
|
26
|
+
}
|
|
27
|
+
// Correlation functions
|
|
28
|
+
function correlationOf(message) {
|
|
29
|
+
const correlationId = message.getHeader("correlationId");
|
|
30
|
+
const correlationType = message.getHeader("correlationType");
|
|
31
|
+
if (correlationId && correlationType) {
|
|
32
|
+
return { id: correlationId, type: correlationType };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function setCorrelationOf(message, correlation) {
|
|
36
|
+
return message
|
|
37
|
+
.withHeader("correlationId", correlation.id)
|
|
38
|
+
.withHeader("correlationType", correlation.type);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=messaging-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging-support.js","sourceRoot":"","sources":["../src/messaging-support.ts"],"names":[],"mappings":";;AAOA,0BAKC;AAGD,kCAMC;AAED,wCAOC;AAGD,sCAMC;AAED,4CAOC;AAzCD,SAAgB,OAAO,CAAC,OAAgB;IACpC,OAAO;QACH,EAAE,EAAE,OAAO,CAAC,YAAY,EAAE;QAC1B,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE;KACjC,CAAC;AACN,CAAC;AAED,sBAAsB;AACtB,SAAgB,WAAW,CAAC,OAAgB;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACpD,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAC1B,OAAU,EACV,SAAuB;IAEvB,OAAO,OAAO;SACT,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC;SACvC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,wBAAwB;AACxB,SAAgB,aAAa,CAAC,OAAgB;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACxD,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAC5B,OAAU,EACV,WAAyB;IAEzB,OAAO,OAAO;SACT,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,CAAC;SAC3C,UAAU,CAAC,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-handler.d.ts","sourceRoot":"","sources":["../src/query-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,WAAW,YAAY,CACzB,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,CAAC,GAAG,GAAG,EACP,GAAG,GAAG,GAAG;IAET,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-handler.js","sourceRoot":"","sources":["../src/query-handler.ts"],"names":[],"mappings":""}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Message } from "@hexaijs/core";
|
|
2
|
+
export declare class Query<P = any, SC = any> extends Message<P> {
|
|
3
|
+
static getIntent(): string;
|
|
4
|
+
private securityContext?;
|
|
5
|
+
constructor(payload: P, headers?: Record<string, unknown>, securityContext?: SC);
|
|
6
|
+
withHeader(field: string, value: unknown): this;
|
|
7
|
+
protected clone(): this;
|
|
8
|
+
protected cloneWithHeaders(headers: Record<string, unknown>): this;
|
|
9
|
+
getSecurityContext(): SC;
|
|
10
|
+
withSecurityContext(securityContext: SC): this;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;WACpC,SAAS,IAAI,MAAM;IAInC,OAAO,CAAC,eAAe,CAAC,CAAK;gBAGzB,OAAO,EAAE,CAAC,EACV,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,eAAe,CAAC,EAAE,EAAE;IAMR,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK/D,SAAS,CAAC,KAAK,IAAI,IAAI;IAMvB,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW3D,kBAAkB,IAAI,EAAE;IAQxB,mBAAmB,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI;CAKxD"}
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Query = void 0;
|
|
4
|
+
const core_1 = require("@hexaijs/core");
|
|
5
|
+
class Query extends core_1.Message {
|
|
6
|
+
static getIntent() {
|
|
7
|
+
return "query";
|
|
8
|
+
}
|
|
9
|
+
securityContext;
|
|
10
|
+
constructor(payload, headers = {}, securityContext) {
|
|
11
|
+
super(payload, headers);
|
|
12
|
+
this.securityContext = securityContext;
|
|
13
|
+
}
|
|
14
|
+
withHeader(field, value) {
|
|
15
|
+
const newHeaders = { ...this.getHeaders(), [field]: value };
|
|
16
|
+
return this.cloneWithHeaders(newHeaders);
|
|
17
|
+
}
|
|
18
|
+
clone() {
|
|
19
|
+
const cloned = Object.create(Object.getPrototypeOf(this));
|
|
20
|
+
Object.assign(cloned, this);
|
|
21
|
+
return cloned;
|
|
22
|
+
}
|
|
23
|
+
cloneWithHeaders(headers) {
|
|
24
|
+
const cloned = this.clone();
|
|
25
|
+
// Bypass frozen headers from parent Message class
|
|
26
|
+
Object.defineProperty(cloned, "headers", {
|
|
27
|
+
value: Object.freeze(headers),
|
|
28
|
+
writable: false,
|
|
29
|
+
configurable: true,
|
|
30
|
+
});
|
|
31
|
+
return cloned;
|
|
32
|
+
}
|
|
33
|
+
getSecurityContext() {
|
|
34
|
+
if (!this.securityContext) {
|
|
35
|
+
throw new Error("security context is not set");
|
|
36
|
+
}
|
|
37
|
+
return this.securityContext;
|
|
38
|
+
}
|
|
39
|
+
withSecurityContext(securityContext) {
|
|
40
|
+
const cloned = this.clone();
|
|
41
|
+
cloned.securityContext = securityContext;
|
|
42
|
+
return cloned;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.Query = Query;
|
|
46
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAExC,MAAa,KAAyB,SAAQ,cAAU;IACpD,MAAM,CAAU,SAAS;QACrB,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,eAAe,CAAM;IAE7B,YACI,OAAU,EACV,UAAmC,EAAE,EACrC,eAAoB;QAEpB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEe,UAAU,CAAC,KAAa,EAAE,KAAc;QACpD,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,gBAAgB,CAAC,OAAgC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,kDAAkD;QAClD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,kBAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,eAAgB,CAAC;IACjC,CAAC;IAEM,mBAAmB,CAAC,eAAmB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAnDD,sBAmDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
package/dist/request.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./command"), exports);
|
|
18
|
+
__exportStar(require("./query"), exports);
|
|
19
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,0CAAwB"}
|
package/dist/result.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class SuccessResult<R> {
|
|
2
|
+
readonly data: R;
|
|
3
|
+
readonly isSuccess = true;
|
|
4
|
+
readonly isError = false;
|
|
5
|
+
constructor(data: R);
|
|
6
|
+
getOrThrow(): R;
|
|
7
|
+
}
|
|
8
|
+
export declare class ErrorResult<E extends Error = Error> {
|
|
9
|
+
readonly error: E;
|
|
10
|
+
readonly isSuccess = false;
|
|
11
|
+
readonly isError = true;
|
|
12
|
+
constructor(error: E);
|
|
13
|
+
getOrThrow(): never;
|
|
14
|
+
}
|
|
15
|
+
export type Result<R, E extends Error = Error> = (SuccessResult<R> | ErrorResult<E>) & {
|
|
16
|
+
getOrThrow(): R;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa,CAAC,CAAC;aAII,IAAI,EAAE,CAAC;IAHnC,SAAgB,SAAS,QAAQ;IACjC,SAAgB,OAAO,SAAS;gBAEJ,IAAI,EAAE,CAAC;IAEnC,UAAU,IAAI,CAAC;CAGlB;AAED,qBAAa,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;aAIhB,KAAK,EAAE,CAAC;IAHpC,SAAgB,SAAS,SAAS;IAClC,SAAgB,OAAO,QAAQ;gBAEH,KAAK,EAAE,CAAC;IAEpC,UAAU,IAAI,KAAK;CAGtB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,CAC3C,aAAa,CAAC,CAAC,CAAC,GAChB,WAAW,CAAC,CAAC,CAAC,CACnB,GAAG;IACA,UAAU,IAAI,CAAC,CAAC;CACnB,CAAC"}
|
package/dist/result.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorResult = exports.SuccessResult = void 0;
|
|
4
|
+
class SuccessResult {
|
|
5
|
+
data;
|
|
6
|
+
isSuccess = true;
|
|
7
|
+
isError = false;
|
|
8
|
+
constructor(data) {
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
getOrThrow() {
|
|
12
|
+
return this.data;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.SuccessResult = SuccessResult;
|
|
16
|
+
class ErrorResult {
|
|
17
|
+
error;
|
|
18
|
+
isSuccess = false;
|
|
19
|
+
isError = true;
|
|
20
|
+
constructor(error) {
|
|
21
|
+
this.error = error;
|
|
22
|
+
}
|
|
23
|
+
getOrThrow() {
|
|
24
|
+
throw this.error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.ErrorResult = ErrorResult;
|
|
28
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAIM;IAHZ,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,GAAG,KAAK,CAAC;IAEhC,YAA4B,IAAO;QAAP,SAAI,GAAJ,IAAI,CAAG;IAAG,CAAC;IAEvC,UAAU;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACJ;AATD,sCASC;AAED,MAAa,WAAW;IAIQ;IAHZ,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,GAAG,IAAI,CAAC;IAE/B,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAExC,UAAU;QACN,MAAM,IAAI,CAAC,KAAK,CAAC;IACrB,CAAC;CACJ;AATD,kCASC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Message } from "@hexaijs/core";
|
|
2
|
+
import { EventHandler } from "./event-handler";
|
|
3
|
+
interface Selector {
|
|
4
|
+
method: string;
|
|
5
|
+
predicate(event: Message): boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function When(predicate: (event: Message) => boolean): MethodDecorator;
|
|
8
|
+
export declare function eventTypeMatches(type: string | string[] | RegExp): (event: Message) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Base class for event handlers that use @When decorator for routing.
|
|
11
|
+
*
|
|
12
|
+
* Implements EventHandler interface with selector-based event routing.
|
|
13
|
+
* Uses @When decorator to register predicates that determine which method handles each event.
|
|
14
|
+
*
|
|
15
|
+
* @typeParam E - The event type (extends Message)
|
|
16
|
+
* @typeParam Ctx - The application context type
|
|
17
|
+
*/
|
|
18
|
+
export declare class SelectorBasedEventHandler<E extends Message = Message, Ctx = any> implements EventHandler<E, Ctx> {
|
|
19
|
+
protected static selectors: Selector[];
|
|
20
|
+
static registerSelector(selector: Selector): void;
|
|
21
|
+
static canHandleStatic(event: Message): boolean;
|
|
22
|
+
canHandle(message: Message): boolean;
|
|
23
|
+
protected getSelectors(): Selector[];
|
|
24
|
+
protected selectHandlingMethod(event: E): keyof this | null;
|
|
25
|
+
handle(event: E, ctx: Ctx): Promise<void>;
|
|
26
|
+
protected doHandle(method: keyof this, event: E, ctx: Ctx): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=selector-based-event-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-based-event-handler.d.ts","sourceRoot":"","sources":["../src/selector-based-event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,UAAU,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACtC;AAED,wBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,eAAe,CAO5E;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GACjC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAQ7B;AAED;;;;;;;;GAQG;AACH,qBAAa,yBAAyB,CAClC,CAAC,SAAS,OAAO,GAAG,OAAO,EAC3B,GAAG,GAAG,GAAG,CACX,YAAW,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;WAEzB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;WAc1C,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQ/C,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAM3C,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE;IAIpC,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,GAAG,IAAI;IAkB9C,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;cAUtC,QAAQ,CACpB,MAAM,EAAE,MAAM,IAAI,EAClB,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,GAAG,GACT,OAAO,CAAC,IAAI,CAAC;CAInB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectorBasedEventHandler = void 0;
|
|
4
|
+
exports.When = When;
|
|
5
|
+
exports.eventTypeMatches = eventTypeMatches;
|
|
6
|
+
function When(predicate) {
|
|
7
|
+
return function (target, propertyKey) {
|
|
8
|
+
target.constructor.registerSelector({
|
|
9
|
+
method: propertyKey.toString(),
|
|
10
|
+
predicate,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function eventTypeMatches(type) {
|
|
15
|
+
if (Array.isArray(type)) {
|
|
16
|
+
return (event) => type.includes(event.getMessageType());
|
|
17
|
+
}
|
|
18
|
+
else if (type instanceof RegExp) {
|
|
19
|
+
return (event) => type.test(event.getMessageType());
|
|
20
|
+
}
|
|
21
|
+
return (event) => event.getMessageType() === type;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Base class for event handlers that use @When decorator for routing.
|
|
25
|
+
*
|
|
26
|
+
* Implements EventHandler interface with selector-based event routing.
|
|
27
|
+
* Uses @When decorator to register predicates that determine which method handles each event.
|
|
28
|
+
*
|
|
29
|
+
* @typeParam E - The event type (extends Message)
|
|
30
|
+
* @typeParam Ctx - The application context type
|
|
31
|
+
*/
|
|
32
|
+
class SelectorBasedEventHandler {
|
|
33
|
+
static selectors;
|
|
34
|
+
static registerSelector(selector) {
|
|
35
|
+
if (this === SelectorBasedEventHandler) {
|
|
36
|
+
throw new Error("cannot register selector to SelectorBasedEventHandler");
|
|
37
|
+
}
|
|
38
|
+
if (!this.selectors) {
|
|
39
|
+
this.selectors = [];
|
|
40
|
+
}
|
|
41
|
+
this.selectors.push(selector);
|
|
42
|
+
}
|
|
43
|
+
static canHandleStatic(event) {
|
|
44
|
+
if (!this.selectors) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return this.selectors.some(({ predicate }) => predicate(event));
|
|
48
|
+
}
|
|
49
|
+
canHandle(message) {
|
|
50
|
+
return this.constructor.canHandleStatic(message);
|
|
51
|
+
}
|
|
52
|
+
getSelectors() {
|
|
53
|
+
return this.constructor.selectors || [];
|
|
54
|
+
}
|
|
55
|
+
selectHandlingMethod(event) {
|
|
56
|
+
const methods = this.getSelectors().filter(({ predicate }) => predicate(event));
|
|
57
|
+
if (methods.length > 1) {
|
|
58
|
+
throw new Error(`Multiple handling routines selected for event '${event.getMessageType()}'`);
|
|
59
|
+
}
|
|
60
|
+
if (methods.length === 0) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return methods[0].method;
|
|
64
|
+
}
|
|
65
|
+
async handle(event, ctx) {
|
|
66
|
+
const handlingMethod = this.selectHandlingMethod(event);
|
|
67
|
+
if (handlingMethod === null) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
await this.doHandle(handlingMethod, event, ctx);
|
|
71
|
+
}
|
|
72
|
+
async doHandle(method, event, ctx) {
|
|
73
|
+
const handler = this[method];
|
|
74
|
+
await handler.call(this, event, ctx);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.SelectorBasedEventHandler = SelectorBasedEventHandler;
|
|
78
|
+
//# sourceMappingURL=selector-based-event-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-based-event-handler.js","sourceRoot":"","sources":["../src/selector-based-event-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Message, UnitOfWork } from "@hexaijs/core";
|
|
2
|
+
import { Application, EventHandlingResult, Result } from "./application";
|
|
3
|
+
import { Command } from "./command";
|
|
4
|
+
import { Query } from "./query";
|
|
5
|
+
export declare class SimpleCompositeApplication implements Application {
|
|
6
|
+
private applicationByCommandPrefix;
|
|
7
|
+
private unitOfWork?;
|
|
8
|
+
constructor(applicationByCommandPrefix: Record<string, Application>, unitOfWork?: UnitOfWork);
|
|
9
|
+
setUnitOfWork(unitOfWork: UnitOfWork): void;
|
|
10
|
+
executeCommand<T = unknown>(command: Command): Promise<Result<T>>;
|
|
11
|
+
executeQuery<T = unknown>(query: Query): Promise<Result<T>>;
|
|
12
|
+
private findAppropriateApplication;
|
|
13
|
+
handleEvent(event: Message): Promise<Result<EventHandlingResult>>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=simple-composite-application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-composite-application.d.ts","sourceRoot":"","sources":["../src/simple-composite-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACH,WAAW,EAEX,mBAAmB,EACnB,MAAM,EAET,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,0BAA2B,YAAW,WAAW;IAItD,OAAO,CAAC,0BAA0B;IAHtC,OAAO,CAAC,UAAU,CAAC,CAAa;gBAGpB,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAC/D,UAAU,CAAC,EAAE,UAAU;IAK3B,aAAa,CAAC,UAAU,EAAE,UAAU;IAIvB,cAAc,CAAC,CAAC,GAAG,OAAO,EACnC,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAcR,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAUxE,OAAO,CAAC,0BAA0B;IAWrB,WAAW,CACpB,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;CAyB1C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleCompositeApplication = void 0;
|
|
4
|
+
const application_1 = require("./application");
|
|
5
|
+
const error_1 = require("./error");
|
|
6
|
+
class SimpleCompositeApplication {
|
|
7
|
+
applicationByCommandPrefix;
|
|
8
|
+
unitOfWork;
|
|
9
|
+
constructor(applicationByCommandPrefix, unitOfWork) {
|
|
10
|
+
this.applicationByCommandPrefix = applicationByCommandPrefix;
|
|
11
|
+
this.unitOfWork = unitOfWork;
|
|
12
|
+
}
|
|
13
|
+
setUnitOfWork(unitOfWork) {
|
|
14
|
+
this.unitOfWork = unitOfWork;
|
|
15
|
+
}
|
|
16
|
+
async executeCommand(command) {
|
|
17
|
+
const handler = this.findAppropriateApplication(command.getMessageType());
|
|
18
|
+
if (handler) {
|
|
19
|
+
return handler.executeCommand(command);
|
|
20
|
+
}
|
|
21
|
+
return new application_1.ErrorResult(error_1.ApplicationErrorFactory.handlerNotFound(command));
|
|
22
|
+
}
|
|
23
|
+
async executeQuery(query) {
|
|
24
|
+
const handler = this.findAppropriateApplication(query.getMessageType());
|
|
25
|
+
if (handler) {
|
|
26
|
+
return handler.executeQuery(query);
|
|
27
|
+
}
|
|
28
|
+
return new application_1.ErrorResult(error_1.ApplicationErrorFactory.handlerNotFound(query));
|
|
29
|
+
}
|
|
30
|
+
findAppropriateApplication(messageType) {
|
|
31
|
+
const prefixes = Object.keys(this.applicationByCommandPrefix);
|
|
32
|
+
for (const prefix of prefixes) {
|
|
33
|
+
if (messageType.startsWith(prefix)) {
|
|
34
|
+
return this.applicationByCommandPrefix[prefix];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async handleEvent(event) {
|
|
39
|
+
if (!this.unitOfWork) {
|
|
40
|
+
throw new Error("Unit of work not set for CompositeApplication. Set it using setUnitOfWork() method.");
|
|
41
|
+
}
|
|
42
|
+
const apps = Object.values(this.applicationByCommandPrefix);
|
|
43
|
+
const throwIfError = async (app) => {
|
|
44
|
+
const result = await app.handleEvent(event);
|
|
45
|
+
if (result.isError) {
|
|
46
|
+
throw result;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
return await this.unitOfWork.wrap(async () => {
|
|
50
|
+
try {
|
|
51
|
+
await Promise.all(apps.map((app) => throwIfError(app)));
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
return e;
|
|
55
|
+
}
|
|
56
|
+
return new application_1.SuccessResult(null);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.SimpleCompositeApplication = SimpleCompositeApplication;
|
|
61
|
+
//# sourceMappingURL=simple-composite-application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-composite-application.js","sourceRoot":"","sources":["../src/simple-composite-application.ts"],"names":[],"mappings":";;;AACA,+CAMuB;AACvB,mCAAkD;AAIlD,MAAa,0BAA0B;IAIvB;IAHJ,UAAU,CAAc;IAEhC,YACY,0BAAuD,EAC/D,UAAuB;QADf,+BAA0B,GAA1B,0BAA0B,CAA6B;QAG/D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,cAAc,CACvB,OAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAC3C,OAAO,CAAC,cAAc,EAAE,CAC3B,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,yBAAW,CAClB,+BAAuB,CAAC,eAAe,CAAC,OAAO,CAAC,CACnD,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,YAAY,CAAc,KAAY;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAExE,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,yBAAW,CAAC,+BAAuB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,0BAA0B,CAC9B,WAAmB;QAEnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,KAAc;QAEd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACX,qFAAqF,CACxF,CAAC;QACN,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,KAAK,EAAE,GAAgB,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,MAAM,CAAC;YACjB,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAgB,CAAC;YAC5B,CAAC;YAED,OAAO,IAAI,2BAAa,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA9ED,gEA8EC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ErrorResult, SuccessResult } from "../application";
|
|
2
|
+
import { ApplicationError } from "../error";
|
|
3
|
+
export declare function expectSuccessResult<T = any>(result: unknown): asserts result is SuccessResult<T>;
|
|
4
|
+
export declare function expectErrorResult(result: unknown): asserts result is ErrorResult<ApplicationError>;
|
|
5
|
+
export declare function expectApplicationError(result: unknown, { message, cause, }?: Partial<{
|
|
6
|
+
message: string;
|
|
7
|
+
cause: Error;
|
|
8
|
+
}>): void;
|
|
9
|
+
export declare function expectExecutionTimeLessThan(fn: () => Promise<any>, timeMs: number): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=expectations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expectations.d.ts","sourceRoot":"","sources":["../../src/test/expectations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,GAAG,EACvC,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAEpC;AAED,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAEjD;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,OAAO,EACf,EACI,OAAO,EACP,KAAK,GACR,GAAE,OAAO,CAAC;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CAChB,CAAM,QAaV;AAED,wBAAsB,2BAA2B,CAC7C,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACtB,MAAM,EAAE,MAAM,iBAOjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expectSuccessResult = expectSuccessResult;
|
|
4
|
+
exports.expectErrorResult = expectErrorResult;
|
|
5
|
+
exports.expectApplicationError = expectApplicationError;
|
|
6
|
+
exports.expectExecutionTimeLessThan = expectExecutionTimeLessThan;
|
|
7
|
+
const vitest_1 = require("vitest");
|
|
8
|
+
const application_1 = require("../application");
|
|
9
|
+
const error_1 = require("../error");
|
|
10
|
+
function expectSuccessResult(result) {
|
|
11
|
+
(0, vitest_1.expect)(result).toBeInstanceOf(application_1.SuccessResult);
|
|
12
|
+
}
|
|
13
|
+
function expectErrorResult(result) {
|
|
14
|
+
(0, vitest_1.expect)(result).toBeInstanceOf(application_1.ErrorResult);
|
|
15
|
+
}
|
|
16
|
+
function expectApplicationError(result, { message, cause, } = {}) {
|
|
17
|
+
expectErrorResult(result);
|
|
18
|
+
(0, vitest_1.expect)(result.isError).toBe(true);
|
|
19
|
+
(0, vitest_1.expect)(result.error).toBeInstanceOf(error_1.ApplicationError);
|
|
20
|
+
if (message) {
|
|
21
|
+
(0, vitest_1.expect)(result.error.message).toBe(message);
|
|
22
|
+
}
|
|
23
|
+
if (cause) {
|
|
24
|
+
(0, vitest_1.expect)(result.error.cause).toBe(cause);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function expectExecutionTimeLessThan(fn, timeMs) {
|
|
28
|
+
const startTime = Date.now();
|
|
29
|
+
await fn();
|
|
30
|
+
const endTime = Date.now();
|
|
31
|
+
(0, vitest_1.expect)(endTime - startTime).toBeLessThan(timeMs);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=expectations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expectations.js","sourceRoot":"","sources":["../../src/test/expectations.ts"],"names":[],"mappings":";;AAKA,kDAIC;AAED,8CAIC;AAED,wDAqBC;AAED,kEASC;AAjDD,mCAAgC;AAEhC,+CAA2D;AAC3D,mCAA2C;AAE3C,SAAgB,mBAAmB,CAC/B,MAAe;IAEf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,2BAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,iBAAiB,CAC7B,MAAe;IAEf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,yBAAW,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,sBAAsB,CAClC,MAAe,EACf,EACI,OAAO,EACP,KAAK,MAIJ,EAAE;IAEP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,wBAAgB,CAAC,CAAC;IAEtD,IAAI,OAAO,EAAE,CAAC;QACV,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,2BAA2B,CAC7C,EAAsB,EACtB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,EAAE,CAAC;IACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAA,eAAM,EAAC,OAAO,GAAG,SAAS,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from "./interceptor-test-helpers";
|
|
2
|
+
import { Command } from "../../command";
|
|
3
|
+
import { Query } from "../../query";
|
|
4
|
+
import { Message } from "@hexaijs/core";
|
|
5
|
+
export declare class DummyCommand extends Command<null, {
|
|
6
|
+
role: string;
|
|
7
|
+
}> {
|
|
8
|
+
constructor(sc?: {
|
|
9
|
+
role: string;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export declare class DummyQuery extends Query<{
|
|
13
|
+
id: string;
|
|
14
|
+
}, {
|
|
15
|
+
role: string;
|
|
16
|
+
}> {
|
|
17
|
+
constructor(id?: string, sc?: {
|
|
18
|
+
role: string;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export declare class DummyEvent extends Message<null> {
|
|
22
|
+
constructor();
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,YAAa,SAAQ,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;gBACjD,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;CAGpC;AAED,qBAAa,UAAW,SAAQ,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;gBACvD,EAAE,GAAE,MAAkB,EAAE,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;CAG5D;AAED,qBAAa,UAAW,SAAQ,OAAO,CAAC,IAAI,CAAC;;CAI5C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.DummyEvent = exports.DummyQuery = exports.DummyCommand = void 0;
|
|
18
|
+
__exportStar(require("./interceptor-test-helpers"), exports);
|
|
19
|
+
const command_1 = require("../../command");
|
|
20
|
+
const query_1 = require("../../query");
|
|
21
|
+
const core_1 = require("@hexaijs/core");
|
|
22
|
+
class DummyCommand extends command_1.Command {
|
|
23
|
+
constructor(sc) {
|
|
24
|
+
super(null, sc);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.DummyCommand = DummyCommand;
|
|
28
|
+
class DummyQuery extends query_1.Query {
|
|
29
|
+
constructor(id = "test-id", sc) {
|
|
30
|
+
super({ id }, {}, sc);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.DummyQuery = DummyQuery;
|
|
34
|
+
class DummyEvent extends core_1.Message {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(null);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.DummyEvent = DummyEvent;
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/fixtures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA2C;AAE3C,uCAAoC;AACpC,mCAAgC;AAChC,wCAAwC;AAExC,MAAa,YAAa,SAAQ,iBAA+B;IAC7D,YAAY,EAAqB;QAC7B,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;CACJ;AAJD,oCAIC;AAED,MAAa,UAAW,SAAQ,aAAuC;IACnE,YAAY,KAAa,SAAS,EAAE,EAAqB;QACrD,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;CACJ;AAJD,gCAIC;AAED,MAAa,UAAW,SAAQ,cAAa;IACzC;QACI,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACJ;AAJD,gCAIC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ApplicationBuilder } from "../../application";
|
|
2
|
+
import { AbstractApplicationContext } from "../../abstract-application-context";
|
|
3
|
+
import { CommandInterceptor, EventInterceptor } from "../../interceptor";
|
|
4
|
+
/**
|
|
5
|
+
* Shared test helpers for interceptor tests
|
|
6
|
+
*/
|
|
7
|
+
export declare class DummyApplicationContext extends AbstractApplicationContext {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a mock command handler that returns a SuccessResult
|
|
11
|
+
*/
|
|
12
|
+
export declare function createMockCommandHandler(data?: any): {
|
|
13
|
+
execute: import("vitest").Mock<(...args: any[]) => any>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Creates a mock event handler that returns void
|
|
17
|
+
*/
|
|
18
|
+
export declare function createMockEventHandler(): {
|
|
19
|
+
canHandle: import("vitest").Mock<(...args: any[]) => any>;
|
|
20
|
+
handle: import("vitest").Mock<(...args: any[]) => any>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Creates a basic application builder with DummyApplicationContext pre-configured
|
|
24
|
+
*/
|
|
25
|
+
export declare function createApplicationBuilder(): ApplicationBuilder;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a command interceptor that tracks execution by appending an ID to an array
|
|
28
|
+
*/
|
|
29
|
+
export declare function createCommandExecutionTrackingInterceptor(executionOrder: number[], id: number): CommandInterceptor;
|
|
30
|
+
/**
|
|
31
|
+
* Creates an event interceptor that tracks execution by appending an ID to an array
|
|
32
|
+
*/
|
|
33
|
+
export declare function createEventExecutionTrackingInterceptor(executionOrder: number[], id: number): EventInterceptor;
|
|
34
|
+
//# sourceMappingURL=interceptor-test-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor-test-helpers.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/interceptor-test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AAEH,qBAAa,uBAAwB,SAAQ,0BAA0B;CAAG;AAE1E;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,GAAoB;;EAIlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;EAKrC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,uBAIvC;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACrD,cAAc,EAAE,MAAM,EAAE,EACxB,EAAE,EAAE,MAAM,GACX,kBAAkB,CAKpB;AAED;;GAEG;AACH,wBAAgB,uCAAuC,CACnD,cAAc,EAAE,MAAM,EAAE,EACxB,EAAE,EAAE,MAAM,GACX,gBAAgB,CAKlB"}
|