@cspell/cspell-service-bus 6.19.1 → 6.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/{Dispatcher.d.ts → cjs/Dispatcher.d.ts} +1 -1
  2. package/dist/{ServiceRequestFactory.d.ts → cjs/ServiceRequestFactory.d.ts} +2 -2
  3. package/dist/{SystemServiceBus.d.ts → cjs/SystemServiceBus.d.ts} +4 -4
  4. package/dist/{assert.d.ts → cjs/assert.d.ts} +0 -0
  5. package/dist/{bus.d.ts → cjs/bus.d.ts} +4 -4
  6. package/dist/{createRequestHandler.d.ts → cjs/createRequestHandler.d.ts} +3 -3
  7. package/dist/{errors.d.ts → cjs/errors.d.ts} +1 -1
  8. package/dist/{handlers.d.ts → cjs/handlers.d.ts} +3 -3
  9. package/dist/cjs/index.cjs +142 -0
  10. package/dist/cjs/index.d.ts +9 -0
  11. package/dist/{request.d.ts → cjs/request.d.ts} +1 -1
  12. package/dist/{requestFactory.d.ts → cjs/requestFactory.d.ts} +2 -2
  13. package/dist/esm/Dispatcher.d.ts +5 -0
  14. package/dist/esm/Dispatcher.js +2 -0
  15. package/dist/esm/ServiceRequestFactory.d.ts +16 -0
  16. package/dist/esm/ServiceRequestFactory.js +2 -0
  17. package/dist/esm/SystemServiceBus.d.ts +33 -0
  18. package/dist/{SystemServiceBus.js → esm/SystemServiceBus.js} +22 -27
  19. package/dist/esm/assert.d.ts +2 -0
  20. package/dist/esm/assert.js +7 -0
  21. package/dist/esm/bus.d.ts +16 -0
  22. package/dist/{bus.js → esm/bus.js} +7 -12
  23. package/dist/esm/createRequestHandler.d.ts +7 -0
  24. package/dist/esm/createRequestHandler.js +14 -0
  25. package/dist/esm/errors.d.ts +21 -0
  26. package/dist/esm/errors.js +28 -0
  27. package/dist/esm/handlers.d.ts +30 -0
  28. package/dist/esm/handlers.js +2 -0
  29. package/dist/esm/index.d.ts +9 -0
  30. package/dist/esm/index.js +5 -0
  31. package/dist/esm/request.d.ts +46 -0
  32. package/dist/esm/request.js +30 -0
  33. package/dist/esm/requestFactory.d.ts +4 -0
  34. package/dist/esm/requestFactory.js +21 -0
  35. package/dist/types/Dispatcher.d.ts +5 -0
  36. package/dist/types/ServiceRequestFactory.d.ts +16 -0
  37. package/dist/types/SystemServiceBus.d.ts +33 -0
  38. package/dist/types/assert.d.ts +2 -0
  39. package/dist/types/bus.d.ts +16 -0
  40. package/dist/types/createRequestHandler.d.ts +7 -0
  41. package/dist/types/errors.d.ts +21 -0
  42. package/dist/types/handlers.d.ts +30 -0
  43. package/dist/types/index.d.ts +9 -0
  44. package/dist/types/request.d.ts +46 -0
  45. package/dist/types/requestFactory.d.ts +4 -0
  46. package/package.json +16 -38
  47. package/dist/Dispatcher.js +0 -3
  48. package/dist/ServiceRequestFactory.js +0 -3
  49. package/dist/assert.js +0 -11
  50. package/dist/createRequestHandler.js +0 -20
  51. package/dist/errors.js +0 -35
  52. package/dist/handlers.js +0 -3
  53. package/dist/index.d.ts +0 -6
  54. package/dist/index.js +0 -17
  55. package/dist/request.js +0 -39
  56. package/dist/requestFactory.js +0 -25
@@ -1,4 +1,4 @@
1
- import type { RequestResponseType, ServiceRequest } from './request';
1
+ import type { RequestResponseType, ServiceRequest } from './request.js';
2
2
  export interface Dispatcher {
3
3
  dispatch<R extends ServiceRequest>(request: R): RequestResponseType<R>;
4
4
  }
@@ -1,5 +1,5 @@
1
- import type { Handler, HandleRequestFn } from './handlers';
2
- import type { ServiceRequest } from './request';
1
+ import type { Handler, HandleRequestFn } from './handlers.js';
2
+ import type { ServiceRequest } from './request.js';
3
3
  export interface ServiceRequestFactory<R extends ServiceRequest, P = R['params'], T extends string = R['type']> {
4
4
  type: T;
5
5
  is: (r: ServiceRequest | R) => r is R;
@@ -1,7 +1,7 @@
1
- import type { Dispatcher } from './Dispatcher';
2
- import type { Handler, HandleRequestFn } from './handlers';
3
- import type { ServiceRequest } from './request';
4
- import type { ServiceRequestFactory } from './ServiceRequestFactory';
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { Handler, HandleRequestFn } from './handlers.js';
3
+ import type { ServiceRequest } from './request.js';
4
+ import type { ServiceRequestFactory } from './ServiceRequestFactory.js';
5
5
  export interface SystemServiceBus extends Dispatcher {
6
6
  registerHandler(requestPrefix: string, handler: Handler): this;
7
7
  registerRequestHandler<T extends ServiceRequest>(requestDef: ServiceRequestFactory<T>, fn: HandleRequestFn<T>, name?: string | undefined, description?: string | undefined): this;
File without changes
@@ -1,13 +1,13 @@
1
- import type { Dispatcher } from './Dispatcher';
2
- import type { Handler, HandleRequest, HandlerFn } from './handlers';
3
- import type { RequestResponseType, ServiceRequest } from './request';
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { Handler, HandleRequest, HandlerFn } from './handlers.js';
3
+ import type { RequestResponseType, ServiceRequest } from './request.js';
4
4
  export declare class ServiceBus implements Dispatcher {
5
5
  readonly handlers: Handler[];
6
6
  constructor(handlers?: Handler[]);
7
7
  addHandler(handler: HandlerFn, name: string, description?: string): this;
8
8
  addHandler(handler: Handler): this;
9
9
  dispatch<R extends ServiceRequest>(request: R): RequestResponseType<R>;
10
- defaultHandler<T extends ServiceRequest>(request: T): import("./request").ServiceResponseFailure<RequestResponseType<T> extends infer T_1 ? T_1 extends RequestResponseType<T> ? T_1 extends {
10
+ defaultHandler<T extends ServiceRequest>(request: T): import("./request.js").ServiceResponseFailure<RequestResponseType<T> extends infer T_1 ? T_1 extends RequestResponseType<T> ? T_1 extends {
11
11
  ___T?: infer R;
12
12
  } ? R : never : never : never>;
13
13
  protected reduceHandlers<R extends ServiceRequest>(handlers: readonly Handler[], request: R, dispatcher: Dispatcher, defaultHandler: HandleRequest): HandleRequest;
@@ -1,6 +1,6 @@
1
- import type { Handler, HandleRequestFn, HandlerFn } from './handlers';
2
- import type { IsARequest, ServiceRequest } from './request';
3
- import type { ServiceRequestFactory } from './ServiceRequestFactory';
1
+ import type { Handler, HandleRequestFn, HandlerFn } from './handlers.js';
2
+ import type { IsARequest, ServiceRequest } from './request.js';
3
+ import type { ServiceRequestFactory } from './ServiceRequestFactory.js';
4
4
  export declare function createRequestHandler<T extends ServiceRequest>(requestDef: ServiceRequestFactory<T>, fn: HandleRequestFn<T>, name?: string, description?: string): Handler;
5
5
  export declare function createIsRequestHandlerFn<T extends ServiceRequest>(isA: IsARequest<T>, fn: HandleRequestFn<T>): HandlerFn;
6
6
  export declare function createIsRequestHandler<T extends ServiceRequest>(isA: IsARequest<T>, fn: HandleRequestFn<T>, name: string, description?: string): Handler;
@@ -1,4 +1,4 @@
1
- import type { ServiceRequest } from './request';
1
+ import type { ServiceRequest } from './request.js';
2
2
  export declare class ErrorUnhandledRequest extends Error {
3
3
  readonly request: ServiceRequest;
4
4
  constructor(request: ServiceRequest);
@@ -1,6 +1,6 @@
1
- import type { Dispatcher } from './Dispatcher';
2
- import type { RequestResponseType, ServiceRequest } from './request';
3
- import type { ServiceRequestFactory, ServiceRequestFactoryRequestType } from './ServiceRequestFactory';
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { RequestResponseType, ServiceRequest } from './request.js';
3
+ import type { ServiceRequestFactory, ServiceRequestFactoryRequestType } from './ServiceRequestFactory.js';
4
4
  export type HandleRequestFn<R extends ServiceRequest> = (request: R, next: HandleRequest, dispatch: Dispatcher) => RequestResponseType<R>;
5
5
  export interface HandleRequest {
6
6
  <R extends ServiceRequest>(request: R): any;
@@ -0,0 +1,142 @@
1
+ 'use strict';
2
+
3
+ class ErrorUnhandledRequest extends Error {
4
+ constructor(request) {
5
+ super(`Unhandled Request: ${request.type}`);
6
+ this.request = request;
7
+ }
8
+ }
9
+ class ErrorServiceRequestDepthExceeded extends Error {
10
+ constructor(request, depth) {
11
+ super(`Service Request Depth ${depth} Exceeded: ${request.type}`);
12
+ this.request = request;
13
+ this.depth = depth;
14
+ }
15
+ }
16
+ class UnhandledHandlerError extends Error {
17
+ constructor(handlerName, handlerDescription, cause) {
18
+ super(`Unhandled Error in Handler: ${handlerName}`);
19
+ this.handlerName = handlerName;
20
+ this.handlerDescription = handlerDescription;
21
+ this.cause = cause;
22
+ }
23
+ }
24
+
25
+ class BaseServiceRequest {
26
+ constructor(type, params) {
27
+ this.type = type;
28
+ this.params = params;
29
+ }
30
+ }
31
+ class ServiceRequestCls extends BaseServiceRequest {
32
+ constructor(type, params) {
33
+ super(type, params);
34
+ }
35
+ }
36
+ function createResponse(value, _req) {
37
+ return { value };
38
+ }
39
+ function createResponseFail(_request, error) {
40
+ return { error };
41
+ }
42
+ function isServiceResponseSuccess(res) {
43
+ return 'value' in res && res.error === undefined;
44
+ }
45
+ function isServiceResponseFailure(res) {
46
+ return res.error !== undefined;
47
+ }
48
+
49
+ const MAX_DEPTH = 10;
50
+ class ServiceBus {
51
+ constructor(handlers = []) {
52
+ this.handlers = [];
53
+ handlers.forEach((h) => this.addHandler(h));
54
+ }
55
+ addHandler(handler, name = 'anonymous', description) {
56
+ const h = typeof handler === 'function' ? { fn: handler, name, description } : handler;
57
+ const { fn, name: _name, description: _description } = h;
58
+ this.handlers.push({ fn, name: _name, description: _description });
59
+ return this;
60
+ }
61
+ dispatch(request) {
62
+ let depth = 0;
63
+ const dispatcher = { dispatch };
64
+ const handler = this.reduceHandlers(this.handlers, request, dispatcher, this.defaultHandler);
65
+ function dispatch(request) {
66
+ ++depth;
67
+ if (depth >= MAX_DEPTH) {
68
+ return createResponseFail(request, new ErrorServiceRequestDepthExceeded(request, depth));
69
+ }
70
+ const response = handler(request);
71
+ --depth;
72
+ return response;
73
+ }
74
+ return dispatch(request);
75
+ }
76
+ defaultHandler(request) {
77
+ return createResponseFail(request, new ErrorUnhandledRequest(request));
78
+ }
79
+ reduceHandlers(handlers, request, dispatcher, defaultHandler) {
80
+ const _handlers = handlers.map((m) => ({ ...m, fn: m.fn(dispatcher) }));
81
+ const handler = _handlers.reduce((next, h) => {
82
+ const fn = h.fn(next);
83
+ return (req) => {
84
+ try {
85
+ return fn(req);
86
+ }
87
+ catch (e) {
88
+ return createResponseFail(request, new UnhandledHandlerError(h.name, h.description, e));
89
+ }
90
+ };
91
+ }, defaultHandler);
92
+ return handler;
93
+ }
94
+ }
95
+ function createServiceBus(handlers = []) {
96
+ return new ServiceBus(handlers);
97
+ }
98
+
99
+ function createRequestHandler(requestDef, fn, name, description) {
100
+ return createIsRequestHandler(requestDef.is, fn, name ?? requestDef.type, description);
101
+ }
102
+ function createIsRequestHandlerFn(isA, fn) {
103
+ return (dispatcher) => (next) => (request) => isA(request) ? fn(request, next, dispatcher) : next(request);
104
+ }
105
+ function createIsRequestHandler(isA, fn, name, description) {
106
+ return {
107
+ fn: createIsRequestHandlerFn(isA, fn),
108
+ name,
109
+ description,
110
+ };
111
+ }
112
+
113
+ function requestFactory(requestType) {
114
+ class RequestClass extends ServiceRequestCls {
115
+ constructor(params) {
116
+ super(requestType, params);
117
+ }
118
+ static is(req) {
119
+ return req instanceof RequestClass && req.type === requestType;
120
+ }
121
+ static create(params) {
122
+ return new RequestClass(params);
123
+ }
124
+ static createRequestHandler(fn, name, description) {
125
+ return createRequestHandler(RequestClass, fn, name, description);
126
+ }
127
+ }
128
+ RequestClass.type = requestType;
129
+ return RequestClass;
130
+ }
131
+
132
+ exports.ServiceBus = ServiceBus;
133
+ exports.ServiceRequestCls = ServiceRequestCls;
134
+ exports.createIsRequestHandler = createIsRequestHandler;
135
+ exports.createRequestHandler = createRequestHandler;
136
+ exports.createResponse = createResponse;
137
+ exports.createResponseFail = createResponseFail;
138
+ exports.createServiceBus = createServiceBus;
139
+ exports.isServiceResponseFailure = isServiceResponseFailure;
140
+ exports.isServiceResponseSuccess = isServiceResponseSuccess;
141
+ exports.requestFactory = requestFactory;
142
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,9 @@
1
+ export { createServiceBus, ServiceBus } from './bus.js';
2
+ export { createIsRequestHandler, createRequestHandler } from './createRequestHandler.js';
3
+ export { Dispatcher } from './Dispatcher.js';
4
+ export type { Handler } from './handlers.js';
5
+ export type { ServiceRequest } from './request.js';
6
+ export { createResponse, createResponseFail, isServiceResponseFailure, isServiceResponseSuccess, ServiceRequestCls, ServiceResponse, } from './request.js';
7
+ export { requestFactory } from './requestFactory.js';
8
+ export type { ServiceRequestFactory, ServiceRequestFactoryRequestType } from './ServiceRequestFactory.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -9,7 +9,7 @@ declare class BaseServiceRequest<T extends string, P, R> implements ServiceReque
9
9
  readonly __r?: ServiceResponseBase<R>;
10
10
  constructor(type: T, params: P);
11
11
  }
12
- export declare class ServiceRequest<T extends string, P, R> extends BaseServiceRequest<T, P, R> {
12
+ export declare class ServiceRequestCls<T extends string, P, R> extends BaseServiceRequest<T, P, R> {
13
13
  constructor(type: T, params: P);
14
14
  }
15
15
  interface ServiceResponseBase<T> {
@@ -1,4 +1,4 @@
1
- import { ServiceRequest } from './request';
2
- import type { ServiceRequestFactory } from './ServiceRequestFactory';
1
+ import type { ServiceRequest } from './request.js';
2
+ import type { ServiceRequestFactory } from './ServiceRequestFactory.js';
3
3
  export declare function requestFactory<T extends string, P, R>(requestType: T): ServiceRequestFactory<ServiceRequest<T, P, R>>;
4
4
  //# sourceMappingURL=requestFactory.d.ts.map
@@ -0,0 +1,5 @@
1
+ import type { RequestResponseType, ServiceRequest } from './request.js';
2
+ export interface Dispatcher {
3
+ dispatch<R extends ServiceRequest>(request: R): RequestResponseType<R>;
4
+ }
5
+ //# sourceMappingURL=Dispatcher.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Dispatcher.js.map
@@ -0,0 +1,16 @@
1
+ import type { Handler, HandleRequestFn } from './handlers.js';
2
+ import type { ServiceRequest } from './request.js';
3
+ export interface ServiceRequestFactory<R extends ServiceRequest, P = R['params'], T extends string = R['type']> {
4
+ type: T;
5
+ is: (r: ServiceRequest | R) => r is R;
6
+ create(params: P): R;
7
+ createRequestHandler(fn: HandleRequestFn<R>, name?: string, description?: string): Handler;
8
+ /**
9
+ * Place holder property used to determine the request type. It is NEVER set.
10
+ */
11
+ __request?: R;
12
+ }
13
+ export type ServiceRequestFactoryRequestType<T> = T extends {
14
+ __request?: infer R;
15
+ } ? R : never;
16
+ //# sourceMappingURL=ServiceRequestFactory.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ServiceRequestFactory.js.map
@@ -0,0 +1,33 @@
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { Handler, HandleRequestFn } from './handlers.js';
3
+ import type { ServiceRequest } from './request.js';
4
+ import type { ServiceRequestFactory } from './ServiceRequestFactory.js';
5
+ export interface SystemServiceBus extends Dispatcher {
6
+ registerHandler(requestPrefix: string, handler: Handler): this;
7
+ registerRequestHandler<T extends ServiceRequest>(requestDef: ServiceRequestFactory<T>, fn: HandleRequestFn<T>, name?: string | undefined, description?: string | undefined): this;
8
+ createSubsystem(name: string, requestPattern: string | RegExp): SubsystemServiceBus;
9
+ readonly subsystems: Map<string, SubsystemServiceBus>;
10
+ }
11
+ export declare function createSystemServiceBus(): SystemServiceBus;
12
+ export declare const RequestRegisterHandlerFactory: ServiceRequestFactory<ServiceRequest<"System:RegisterHandler", {
13
+ readonly requestPrefix: string;
14
+ readonly handler: Handler;
15
+ }, SubsystemServiceBus>, {
16
+ readonly requestPrefix: string;
17
+ readonly handler: Handler;
18
+ }, "System:RegisterHandler">;
19
+ export declare const RequestCreateSubsystemFactory: ServiceRequestFactory<ServiceRequest<"System:CreateSubsystem", {
20
+ readonly name: string;
21
+ readonly requestPattern: string | RegExp;
22
+ }, SubsystemServiceBus>, {
23
+ readonly name: string;
24
+ readonly requestPattern: string | RegExp;
25
+ }, "System:CreateSubsystem">;
26
+ interface SubsystemServiceBus extends Dispatcher {
27
+ readonly name: string;
28
+ readonly requestPattern: string | RegExp;
29
+ readonly handler: Handler;
30
+ }
31
+ export declare function createSubsystemServiceBus(name: string, requestPattern: string | RegExp): SubsystemServiceBus;
32
+ export {};
33
+ //# sourceMappingURL=SystemServiceBus.d.ts.map
@@ -1,61 +1,57 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSubsystemServiceBus = exports.RequestCreateSubsystemFactory = exports.RequestRegisterHandlerFactory = exports.createSystemServiceBus = void 0;
4
- const assert_1 = require("./assert");
5
- const bus_1 = require("./bus");
6
- const createRequestHandler_1 = require("./createRequestHandler");
7
- const errors_1 = require("./errors");
8
- const request_1 = require("./request");
9
- const requestFactory_1 = require("./requestFactory");
1
+ import { assert } from './assert.js';
2
+ import { createServiceBus, ServiceBus } from './bus.js';
3
+ import { createRequestHandler } from './createRequestHandler.js';
4
+ import { ErrorDuplicateSubsystem } from './errors.js';
5
+ import { createResponse } from './request.js';
6
+ import { requestFactory } from './requestFactory.js';
10
7
  class SystemServiceBusImpl {
11
8
  constructor() {
12
- this.serviceBus = (0, bus_1.createServiceBus)();
9
+ this.serviceBus = createServiceBus();
13
10
  this._subsystems = new Map();
14
11
  this.bindDefaultHandlers();
15
12
  this.createSubsystem('Default Subsystem', '' /* match everything */);
16
13
  }
17
14
  bindDefaultHandlers() {
18
- this.serviceBus.addHandler((0, createRequestHandler_1.createRequestHandler)(exports.RequestCreateSubsystemFactory, (req) => {
15
+ this.serviceBus.addHandler(createRequestHandler(RequestCreateSubsystemFactory, (req) => {
19
16
  const { name, requestPattern } = req.params;
20
17
  if (this._subsystems.has(name)) {
21
- throw new errors_1.ErrorDuplicateSubsystem(name);
18
+ throw new ErrorDuplicateSubsystem(name);
22
19
  }
23
20
  const sub = createSubsystemServiceBus(name, requestPattern);
24
21
  this._subsystems.set(name, sub);
25
22
  this.serviceBus.addHandler(sub.handler);
26
- return (0, request_1.createResponse)(sub);
23
+ return createResponse(sub);
27
24
  }));
28
25
  }
29
26
  dispatch(request) {
30
27
  return this.serviceBus.dispatch(request);
31
28
  }
32
29
  createSubsystem(name, requestPattern) {
33
- const res = this.dispatch(exports.RequestCreateSubsystemFactory.create({ name, requestPattern }));
34
- (0, assert_1.assert)(res?.value);
30
+ const res = this.dispatch(RequestCreateSubsystemFactory.create({ name, requestPattern }));
31
+ assert(res?.value);
35
32
  return res.value;
36
33
  }
37
34
  registerHandler(requestPrefix, handler) {
38
- const request = exports.RequestRegisterHandlerFactory.create({ requestPrefix, handler });
35
+ const request = RequestRegisterHandlerFactory.create({ requestPrefix, handler });
39
36
  this.serviceBus.dispatch(request);
40
37
  return this;
41
38
  }
42
39
  registerRequestHandler(requestDef, fn, name, description) {
43
- this.registerHandler(requestDef.type, (0, createRequestHandler_1.createRequestHandler)(requestDef, fn, name, description));
40
+ this.registerHandler(requestDef.type, createRequestHandler(requestDef, fn, name, description));
44
41
  return this;
45
42
  }
46
43
  get subsystems() {
47
44
  return new Map(this._subsystems);
48
45
  }
49
46
  }
50
- function createSystemServiceBus() {
47
+ export function createSystemServiceBus() {
51
48
  return new SystemServiceBusImpl();
52
49
  }
53
- exports.createSystemServiceBus = createSystemServiceBus;
54
50
  const TypeRequestRegisterHandler = 'System:RegisterHandler';
55
- exports.RequestRegisterHandlerFactory = (0, requestFactory_1.requestFactory)(TypeRequestRegisterHandler);
51
+ export const RequestRegisterHandlerFactory = requestFactory(TypeRequestRegisterHandler);
56
52
  const TypeRequestCreateSubsystem = 'System:CreateSubsystem';
57
- exports.RequestCreateSubsystemFactory = (0, requestFactory_1.requestFactory)(TypeRequestCreateSubsystem);
58
- class SubsystemServiceBusImpl extends bus_1.ServiceBus {
53
+ export const RequestCreateSubsystemFactory = requestFactory(TypeRequestCreateSubsystem);
54
+ class SubsystemServiceBusImpl extends ServiceBus {
59
55
  constructor(name, requestPattern) {
60
56
  super();
61
57
  this.name = name;
@@ -64,7 +60,7 @@ class SubsystemServiceBusImpl extends bus_1.ServiceBus {
64
60
  typeof requestPattern === 'string'
65
61
  ? (reqType) => reqType.startsWith(requestPattern)
66
62
  : (reqType) => requestPattern.test(reqType);
67
- const handleRegistration = (0, createRequestHandler_1.createRequestHandler)(exports.RequestRegisterHandlerFactory, (req, next) => this.handleRegistrationReq(req, next), 'Subsystem Register Handlers for ' + name, `Matches against: <${requestPattern.toString()}>`);
63
+ const handleRegistration = createRequestHandler(RequestRegisterHandlerFactory, (req, next) => this.handleRegistrationReq(req, next), 'Subsystem Register Handlers for ' + name, `Matches against: <${requestPattern.toString()}>`);
68
64
  this.addHandler(handleRegistration);
69
65
  this.handler = {
70
66
  name: 'Subsystem: ' + name,
@@ -80,19 +76,18 @@ class SubsystemServiceBusImpl extends bus_1.ServiceBus {
80
76
  }
81
77
  // console.log(`${this.name}.handleRegistrationReq add ***`);
82
78
  this.addHandler(request.params.handler);
83
- return (0, request_1.createResponse)(this);
79
+ return createResponse(this);
84
80
  }
85
81
  _handler(dispatcher) {
86
82
  return (next) => (req) => {
87
- if (!this.canHandleType(req.type) && !exports.RequestRegisterHandlerFactory.is(req))
83
+ if (!this.canHandleType(req.type) && !RequestRegisterHandlerFactory.is(req))
88
84
  return next(req);
89
85
  const dispatch = this.reduceHandlers(this.handlers, req, dispatcher, next);
90
86
  return dispatch(req);
91
87
  };
92
88
  }
93
89
  }
94
- function createSubsystemServiceBus(name, requestPattern) {
90
+ export function createSubsystemServiceBus(name, requestPattern) {
95
91
  return new SubsystemServiceBusImpl(name, requestPattern);
96
92
  }
97
- exports.createSubsystemServiceBus = createSubsystemServiceBus;
98
93
  //# sourceMappingURL=SystemServiceBus.js.map
@@ -0,0 +1,2 @@
1
+ export declare function assert(value: unknown, message?: string | Error): asserts value;
2
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1,7 @@
1
+ export function assert(value, message) {
2
+ if (!value) {
3
+ const err = message instanceof Error ? message : Error(message ?? 'AssertionError');
4
+ throw err;
5
+ }
6
+ }
7
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1,16 @@
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { Handler, HandleRequest, HandlerFn } from './handlers.js';
3
+ import type { RequestResponseType, ServiceRequest } from './request.js';
4
+ export declare class ServiceBus implements Dispatcher {
5
+ readonly handlers: Handler[];
6
+ constructor(handlers?: Handler[]);
7
+ addHandler(handler: HandlerFn, name: string, description?: string): this;
8
+ addHandler(handler: Handler): this;
9
+ dispatch<R extends ServiceRequest>(request: R): RequestResponseType<R>;
10
+ defaultHandler<T extends ServiceRequest>(request: T): import("./request.js").ServiceResponseFailure<RequestResponseType<T> extends infer T_1 ? T_1 extends RequestResponseType<T> ? T_1 extends {
11
+ ___T?: infer R;
12
+ } ? R : never : never : never>;
13
+ protected reduceHandlers<R extends ServiceRequest>(handlers: readonly Handler[], request: R, dispatcher: Dispatcher, defaultHandler: HandleRequest): HandleRequest;
14
+ }
15
+ export declare function createServiceBus(handlers?: Handler[]): ServiceBus;
16
+ //# sourceMappingURL=bus.d.ts.map
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createServiceBus = exports.ServiceBus = void 0;
4
- const errors_1 = require("./errors");
5
- const request_1 = require("./request");
1
+ import { ErrorServiceRequestDepthExceeded, ErrorUnhandledRequest, UnhandledHandlerError } from './errors.js';
2
+ import { createResponseFail } from './request.js';
6
3
  const MAX_DEPTH = 10;
7
- class ServiceBus {
4
+ export class ServiceBus {
8
5
  constructor(handlers = []) {
9
6
  this.handlers = [];
10
7
  handlers.forEach((h) => this.addHandler(h));
@@ -22,7 +19,7 @@ class ServiceBus {
22
19
  function dispatch(request) {
23
20
  ++depth;
24
21
  if (depth >= MAX_DEPTH) {
25
- return (0, request_1.createResponseFail)(request, new errors_1.ErrorServiceRequestDepthExceeded(request, depth));
22
+ return createResponseFail(request, new ErrorServiceRequestDepthExceeded(request, depth));
26
23
  }
27
24
  const response = handler(request);
28
25
  --depth;
@@ -31,7 +28,7 @@ class ServiceBus {
31
28
  return dispatch(request);
32
29
  }
33
30
  defaultHandler(request) {
34
- return (0, request_1.createResponseFail)(request, new errors_1.ErrorUnhandledRequest(request));
31
+ return createResponseFail(request, new ErrorUnhandledRequest(request));
35
32
  }
36
33
  reduceHandlers(handlers, request, dispatcher, defaultHandler) {
37
34
  const _handlers = handlers.map((m) => ({ ...m, fn: m.fn(dispatcher) }));
@@ -42,16 +39,14 @@ class ServiceBus {
42
39
  return fn(req);
43
40
  }
44
41
  catch (e) {
45
- return (0, request_1.createResponseFail)(request, new errors_1.UnhandledHandlerError(h.name, h.description, e));
42
+ return createResponseFail(request, new UnhandledHandlerError(h.name, h.description, e));
46
43
  }
47
44
  };
48
45
  }, defaultHandler);
49
46
  return handler;
50
47
  }
51
48
  }
52
- exports.ServiceBus = ServiceBus;
53
- function createServiceBus(handlers = []) {
49
+ export function createServiceBus(handlers = []) {
54
50
  return new ServiceBus(handlers);
55
51
  }
56
- exports.createServiceBus = createServiceBus;
57
52
  //# sourceMappingURL=bus.js.map
@@ -0,0 +1,7 @@
1
+ import type { Handler, HandleRequestFn, HandlerFn } from './handlers.js';
2
+ import type { IsARequest, ServiceRequest } from './request.js';
3
+ import type { ServiceRequestFactory } from './ServiceRequestFactory.js';
4
+ export declare function createRequestHandler<T extends ServiceRequest>(requestDef: ServiceRequestFactory<T>, fn: HandleRequestFn<T>, name?: string, description?: string): Handler;
5
+ export declare function createIsRequestHandlerFn<T extends ServiceRequest>(isA: IsARequest<T>, fn: HandleRequestFn<T>): HandlerFn;
6
+ export declare function createIsRequestHandler<T extends ServiceRequest>(isA: IsARequest<T>, fn: HandleRequestFn<T>, name: string, description?: string): Handler;
7
+ //# sourceMappingURL=createRequestHandler.d.ts.map
@@ -0,0 +1,14 @@
1
+ export function createRequestHandler(requestDef, fn, name, description) {
2
+ return createIsRequestHandler(requestDef.is, fn, name ?? requestDef.type, description);
3
+ }
4
+ export function createIsRequestHandlerFn(isA, fn) {
5
+ return (dispatcher) => (next) => (request) => isA(request) ? fn(request, next, dispatcher) : next(request);
6
+ }
7
+ export function createIsRequestHandler(isA, fn, name, description) {
8
+ return {
9
+ fn: createIsRequestHandlerFn(isA, fn),
10
+ name,
11
+ description,
12
+ };
13
+ }
14
+ //# sourceMappingURL=createRequestHandler.js.map
@@ -0,0 +1,21 @@
1
+ import type { ServiceRequest } from './request.js';
2
+ export declare class ErrorUnhandledRequest extends Error {
3
+ readonly request: ServiceRequest;
4
+ constructor(request: ServiceRequest);
5
+ }
6
+ export declare class ErrorServiceRequestDepthExceeded extends Error {
7
+ readonly request: ServiceRequest;
8
+ readonly depth: number;
9
+ constructor(request: ServiceRequest, depth: number);
10
+ }
11
+ export declare class UnhandledHandlerError extends Error {
12
+ readonly handlerName: string;
13
+ readonly handlerDescription: string | undefined;
14
+ readonly cause: unknown;
15
+ constructor(handlerName: string, handlerDescription: string | undefined, cause: unknown);
16
+ }
17
+ export declare class ErrorDuplicateSubsystem extends Error {
18
+ readonly subsystemName: string;
19
+ constructor(subsystemName: string);
20
+ }
21
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1,28 @@
1
+ export class ErrorUnhandledRequest extends Error {
2
+ constructor(request) {
3
+ super(`Unhandled Request: ${request.type}`);
4
+ this.request = request;
5
+ }
6
+ }
7
+ export class ErrorServiceRequestDepthExceeded extends Error {
8
+ constructor(request, depth) {
9
+ super(`Service Request Depth ${depth} Exceeded: ${request.type}`);
10
+ this.request = request;
11
+ this.depth = depth;
12
+ }
13
+ }
14
+ export class UnhandledHandlerError extends Error {
15
+ constructor(handlerName, handlerDescription, cause) {
16
+ super(`Unhandled Error in Handler: ${handlerName}`);
17
+ this.handlerName = handlerName;
18
+ this.handlerDescription = handlerDescription;
19
+ this.cause = cause;
20
+ }
21
+ }
22
+ export class ErrorDuplicateSubsystem extends Error {
23
+ constructor(subsystemName) {
24
+ super(`Duplicate subsystem: ${subsystemName}`);
25
+ this.subsystemName = subsystemName;
26
+ }
27
+ }
28
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,30 @@
1
+ import type { Dispatcher } from './Dispatcher.js';
2
+ import type { RequestResponseType, ServiceRequest } from './request.js';
3
+ import type { ServiceRequestFactory, ServiceRequestFactoryRequestType } from './ServiceRequestFactory.js';
4
+ export type HandleRequestFn<R extends ServiceRequest> = (request: R, next: HandleRequest, dispatch: Dispatcher) => RequestResponseType<R>;
5
+ export interface HandleRequest {
6
+ <R extends ServiceRequest>(request: R): any;
7
+ }
8
+ export interface HandleRequestKnown<R extends ServiceRequest> {
9
+ (request: R): RequestResponseType<R>;
10
+ }
11
+ export type FactoryRequestHandler<T extends ServiceRequestFactory<ServiceRequest>, R extends ServiceRequest = ServiceRequestFactoryRequestType<T>> = HandleRequestKnown<R>;
12
+ export interface HandlerNext {
13
+ (next: HandleRequest): HandleRequest;
14
+ }
15
+ export interface HandlerFn {
16
+ (dispatcher: Dispatcher): HandlerNext;
17
+ }
18
+ export interface Handler {
19
+ /**
20
+ * Name of the Handler.
21
+ * Useful for debugging and uncaught exceptions.
22
+ */
23
+ readonly name: string;
24
+ /**
25
+ * Optional description of the Handler.
26
+ */
27
+ readonly description?: string | undefined;
28
+ readonly fn: HandlerFn;
29
+ }
30
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1,9 @@
1
+ export { createServiceBus, ServiceBus } from './bus.js';
2
+ export { createIsRequestHandler, createRequestHandler } from './createRequestHandler.js';
3
+ export { Dispatcher } from './Dispatcher.js';
4
+ export type { Handler } from './handlers.js';
5
+ export type { ServiceRequest } from './request.js';
6
+ export { createResponse, createResponseFail, isServiceResponseFailure, isServiceResponseSuccess, ServiceRequestCls, ServiceResponse, } from './request.js';
7
+ export { requestFactory } from './requestFactory.js';
8
+ export type { ServiceRequestFactory, ServiceRequestFactoryRequestType } from './ServiceRequestFactory.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,5 @@
1
+ export { createServiceBus, ServiceBus } from './bus.js';
2
+ export { createIsRequestHandler, createRequestHandler } from './createRequestHandler.js';
3
+ export { createResponse, createResponseFail, isServiceResponseFailure, isServiceResponseSuccess, ServiceRequestCls, } from './request.js';
4
+ export { requestFactory } from './requestFactory.js';
5
+ //# sourceMappingURL=index.js.map