@enkaku/server 0.9.1 → 0.10.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/lib/error.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import type { ErrorReplyPayload } from '@enkaku/protocol';
2
- import { ErrorRejection, type ErrorRejectionOptions } from './rejections.js';
3
- export type HandlerErrorParams<Code extends string = string, Data extends Record<string, unknown> = Record<string, unknown>, Info extends Record<string, unknown> = Record<string, unknown>> = Partial<ErrorRejectionOptions<Info>> & {
2
+ export type HandlerErrorParams<Code extends string = string, Data extends Record<string, unknown> = Record<string, unknown>> = {
3
+ cause?: unknown;
4
4
  code: Code;
5
5
  data?: Data;
6
6
  message?: string;
7
7
  };
8
- export declare class HandlerError<Code extends string, Data extends Record<string, unknown> = Record<string, unknown>, Info extends Record<string, unknown> = Record<string, unknown>> extends ErrorRejection<Info> {
8
+ export declare class HandlerError<Code extends string, Data extends Record<string, unknown> = Record<string, unknown>> extends Error {
9
9
  #private;
10
- static from<Code extends string, Data extends Record<string, unknown> = Record<string, unknown>, Info extends Record<string, unknown> = Record<string, unknown>>(cause: unknown, params: HandlerErrorParams<Code, Data, Info>): HandlerError<Code, Data, Info>;
11
- constructor(params: HandlerErrorParams<Code, Data, Info>);
10
+ static from<Code extends string, Data extends Record<string, unknown> = Record<string, unknown>>(cause: unknown, params: HandlerErrorParams<Code, Data>): HandlerError<Code, Data>;
11
+ constructor(params: HandlerErrorParams<Code, Data>);
12
12
  get code(): Code;
13
13
  get data(): Data;
14
14
  toPayload(rid: string): ErrorReplyPayload<Code, Data>;
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,MAAM,MAAM,kBAAkB,CAC5B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG;IACzC,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,YAAY,CACvB,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC9D,SAAQ,cAAc,CAAC,IAAI,CAAC;;IAC5B,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBAWnF,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAOxD,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;CAStD"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,MAAM,kBAAkB,CAC5B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D;IACF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,YAAY,CACvB,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC9D,SAAQ,KAAK;;IACb,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7F,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,GACrC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;gBAWf,MAAM,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;IAOlD,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;CAStD"}
package/lib/error.js CHANGED
@@ -1,5 +1,4 @@
1
- import { ErrorRejection } from './rejections.js';
2
- export class HandlerError extends ErrorRejection {
1
+ export class HandlerError extends Error {
3
2
  static from(cause, params) {
4
3
  return cause instanceof HandlerError ? cause : cause instanceof Error ? new HandlerError({
5
4
  message: cause.message,
@@ -14,8 +13,10 @@ export class HandlerError extends ErrorRejection {
14
13
  #code;
15
14
  #data;
16
15
  constructor(params){
17
- const { code, data, message, ...options } = params;
18
- super(message ?? `Handler error code: ${code}`, options);
16
+ const { cause, code, data, message } = params;
17
+ super(message ?? `Handler error code: ${code}`, {
18
+ cause
19
+ });
19
20
  this.#code = code;
20
21
  this.#data = data ?? {};
21
22
  }
@@ -1,6 +1,5 @@
1
1
  import type { ChannelPayloadOf, ClientMessage, ProtocolDefinition } from '@enkaku/protocol';
2
- import { ErrorRejection } from '../rejections.js';
3
2
  import type { HandlerContext } from '../types.js';
4
3
  export type ChannelMessageOf<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string = keyof Protocol & string> = ClientMessage<ChannelPayloadOf<Procedure, Protocol[Procedure]>>;
5
- export declare function handleChannel<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: ChannelMessageOf<Protocol, Procedure>): ErrorRejection | Promise<void>;
4
+ export declare function handleChannel<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: ChannelMessageOf<Protocol, Procedure>): Error | Promise<void>;
6
5
  //# sourceMappingURL=channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAGV,cAAc,EAGf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChC"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/handlers/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAGV,cAAc,EAGf,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CvB"}
@@ -1,12 +1,9 @@
1
1
  import { createPipe } from '@enkaku/stream';
2
- import { ErrorRejection } from '../rejections.js';
3
- import { consumeReader, executeHandler } from '../utils.js';
2
+ import { executeHandler } from '../utils.js';
4
3
  export function handleChannel(ctx, msg) {
5
4
  const handler = ctx.handlers[msg.payload.prc];
6
5
  if (handler == null) {
7
- return new ErrorRejection(`No handler for procedure: ${msg.payload.prc}`, {
8
- info: msg.payload
9
- });
6
+ return new Error(`No handler for procedure: ${msg.payload.prc}`);
10
7
  }
11
8
  const sendStream = createPipe();
12
9
  const controller = Object.assign(new AbortController(), {
@@ -17,19 +14,19 @@ export function handleChannel(ctx, msg) {
17
14
  });
18
15
  ctx.controllers[msg.payload.rid] = controller;
19
16
  const receiveStream = createPipe();
20
- // @ts-ignore type instantiation too deep
21
- consumeReader({
22
- // @ts-ignore type instantiation too deep
23
- onValue: async (val)=>{
17
+ receiveStream.readable.pipeTo(// @ts-ignore type instantiation too deep
18
+ new WritableStream({
19
+ async write (val) {
20
+ if (controller.signal.aborted) {
21
+ return;
22
+ }
24
23
  await ctx.send({
25
24
  typ: 'receive',
26
25
  rid: msg.payload.rid,
27
26
  val
28
27
  });
29
- },
30
- reader: receiveStream.readable.getReader(),
31
- signal: controller.signal
32
- });
28
+ }
29
+ }));
33
30
  const handlerContext = {
34
31
  message: msg,
35
32
  param: msg.payload.prm,
@@ -1,6 +1,5 @@
1
1
  import type { ClientMessage, EventPayloadOf, ProtocolDefinition } from '@enkaku/protocol';
2
- import { ErrorRejection } from '../rejections.js';
3
2
  import type { HandlerContext } from '../types.js';
4
3
  export type EventMessageOf<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string = keyof Protocol & string> = ClientMessage<EventPayloadOf<Procedure, Protocol[Procedure]>>;
5
- export declare function handleEvent<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: EventMessageOf<Protocol, Procedure>): ErrorRejection | Promise<void>;
4
+ export declare function handleEvent<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: EventMessageOf<Protocol, Procedure>): Error | Promise<void>;
6
5
  //# sourceMappingURL=event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/handlers/event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAqC,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpF,MAAM,MAAM,cAAc,CACxB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEjE,wBAAgB,WAAW,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,GACvC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhC"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/handlers/event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,KAAK,EAAqC,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpF,MAAM,MAAM,cAAc,CACxB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEjE,wBAAgB,WAAW,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhG"}
@@ -1,21 +1,20 @@
1
1
  import { toPromise } from '@enkaku/async';
2
- import { ErrorRejection } from '../rejections.js';
3
2
  export function handleEvent(ctx, msg) {
4
3
  const handler = ctx.handlers[msg.payload.prc];
5
4
  if (handler == null) {
6
- return new ErrorRejection(`No handler for procedure: ${msg.payload.prc}`, {
7
- info: msg.payload
8
- });
5
+ return new Error(`No handler for procedure: ${msg.payload.prc}`);
9
6
  }
10
7
  const handlerContext = {
11
8
  message: msg,
12
9
  data: msg.payload.data
13
10
  };
11
+ // @ts-ignore type instantiation too deep
14
12
  return toPromise(()=>handler(handlerContext)).catch((cause)=>{
15
- const err = new ErrorRejection(`Error handling procedure: ${msg.payload.prc}`, {
16
- info: msg.payload,
17
- cause
13
+ ctx.events.emit('handlerError', {
14
+ error: new Error(`Error handling procedure: ${msg.payload.prc}`, {
15
+ cause
16
+ }),
17
+ payload: msg.payload
18
18
  });
19
- ctx.reject(err);
20
19
  });
21
20
  }
@@ -1,6 +1,5 @@
1
1
  import type { ClientMessage, ProtocolDefinition, RequestPayloadOf } from '@enkaku/protocol';
2
- import { ErrorRejection } from '../rejections.js';
3
2
  import type { HandlerContext } from '../types.js';
4
3
  export type RequestMessageOf<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string = keyof Protocol & string> = ClientMessage<RequestPayloadOf<Procedure, Protocol[Procedure]>>;
5
- export declare function handleRequest<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: RequestMessageOf<Protocol, Procedure>): ErrorRejection | Promise<void>;
4
+ export declare function handleRequest<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: RequestMessageOf<Protocol, Procedure>): Error | Promise<void>;
6
5
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAGjE,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/handlers/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAGjE,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnE,wBAAgB,aAAa,CAC3B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,GACzC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvB"}
@@ -1,11 +1,8 @@
1
- import { ErrorRejection } from '../rejections.js';
2
1
  import { executeHandler } from '../utils.js';
3
2
  export function handleRequest(ctx, msg) {
4
3
  const handler = ctx.handlers[msg.payload.prc];
5
4
  if (handler == null) {
6
- return new ErrorRejection(`No handler for procedure: ${msg.payload.prc}`, {
7
- info: msg.payload
8
- });
5
+ return new Error(`No handler for procedure: ${msg.payload.prc}`);
9
6
  }
10
7
  const controller = new AbortController();
11
8
  ctx.controllers[msg.payload.rid] = controller;
@@ -1,6 +1,5 @@
1
1
  import type { ClientMessage, ProtocolDefinition, StreamPayloadOf } from '@enkaku/protocol';
2
- import { ErrorRejection } from '../rejections.js';
3
2
  import type { HandlerContext } from '../types.js';
4
3
  export type StreamMessageOf<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string = keyof Protocol & string> = ClientMessage<StreamPayloadOf<Procedure, Protocol[Procedure]>>;
5
- export declare function handleStream<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: StreamMessageOf<Protocol, Procedure>): ErrorRejection | Promise<void>;
4
+ export declare function handleStream<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string>(ctx: HandlerContext<Protocol>, msg: StreamMessageOf<Protocol, Procedure>): Error | Promise<void>;
6
5
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAG7E,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,YAAY,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EAEzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GACxC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChC"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAG7E,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,QAAQ,GAAG,MAAM,IACjE,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAElE,wBAAgB,YAAY,CAC1B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCjG"}
@@ -1,29 +1,26 @@
1
1
  import { createPipe } from '@enkaku/stream';
2
- import { ErrorRejection } from '../rejections.js';
3
- import { consumeReader, executeHandler } from '../utils.js';
2
+ import { executeHandler } from '../utils.js';
4
3
  export function handleStream(ctx, msg) {
5
4
  const handler = ctx.handlers[msg.payload.prc];
6
5
  if (handler == null) {
7
- return new ErrorRejection(`No handler for procedure: ${msg.payload.prc}`, {
8
- info: msg.payload
9
- });
6
+ return new Error(`No handler for procedure: ${msg.payload.prc}`);
10
7
  }
11
8
  const controller = new AbortController();
12
9
  ctx.controllers[msg.payload.rid] = controller;
13
10
  const receiveStream = createPipe();
14
- // @ts-ignore type instantiation too deep
15
- consumeReader({
16
- // @ts-ignore type instantiation too deep
17
- onValue: async (val)=>{
11
+ receiveStream.readable.pipeTo(// @ts-ignore type instantiation too deep
12
+ new WritableStream({
13
+ async write (val) {
14
+ if (controller.signal.aborted) {
15
+ return;
16
+ }
18
17
  await ctx.send({
19
18
  typ: 'receive',
20
19
  rid: msg.payload.rid,
21
20
  val
22
21
  });
23
- },
24
- reader: receiveStream.readable.getReader(),
25
- signal: controller.signal
26
- });
22
+ }
23
+ }));
27
24
  const handlerContext = {
28
25
  message: msg,
29
26
  param: msg.payload.prm,
package/lib/index.d.ts CHANGED
@@ -10,7 +10,6 @@
10
10
  * @module server
11
11
  */
12
12
  export type { ProcedureAccessRecord } from './access-control.js';
13
- export { AbortRejection, ErrorRejection, type RejectionType } from './rejections.js';
14
13
  export { type ServeParams, Server, type ServerParams, serve } from './server.js';
15
- export type { ChannelHandler, ChannelHandlerContext, ProcedureHandlers, EventHandler, EventHandlerContext, HandlerReturn, RequestHandler, RequestHandlerContext, StreamHandler, StreamHandlerContext, } from './types.js';
14
+ export type { ChannelHandler, ChannelHandlerContext, ProcedureHandlers, EventHandler, EventHandlerContext, HandlerReturn, RequestHandler, RequestHandlerContext, ServerEmitter, ServerEvents, StreamHandler, StreamHandlerContext, } from './types.js';
16
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,oBAAoB,GACrB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,GACrB,MAAM,YAAY,CAAA"}
package/lib/index.js CHANGED
@@ -8,5 +8,4 @@
8
8
  * ```
9
9
  *
10
10
  * @module server
11
- */ export { AbortRejection, ErrorRejection } from './rejections.js';
12
- export { Server, serve } from './server.js';
11
+ */ export { Server, serve } from './server.js';
package/lib/server.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- import { type Disposer } from '@enkaku/async';
1
+ import { Disposer } from '@enkaku/async';
2
2
  import { type AnyClientMessageOf, type ProtocolDefinition, type ServerTransportOf } from '@enkaku/protocol';
3
3
  import { type Validator } from '@enkaku/schema';
4
4
  import { type ProcedureAccessRecord } from './access-control.js';
5
- import { type RejectionType } from './rejections.js';
6
- import type { ProcedureHandlers } from './types.js';
5
+ import type { ProcedureHandlers, ServerEmitter } from './types.js';
7
6
  export type AccessControlParams = {
8
7
  public: true;
9
8
  serverID?: string;
@@ -14,8 +13,8 @@ export type AccessControlParams = {
14
13
  access: ProcedureAccessRecord;
15
14
  };
16
15
  export type HandleMessagesParams<Protocol extends ProtocolDefinition> = AccessControlParams & {
16
+ events: ServerEmitter;
17
17
  handlers: ProcedureHandlers<Protocol>;
18
- reject: (rejection: RejectionType) => void;
19
18
  signal: AbortSignal;
20
19
  transport: ServerTransportOf<Protocol>;
21
20
  validator?: Validator<AnyClientMessageOf<Protocol>>;
@@ -33,12 +32,10 @@ export type HandleOptions = {
33
32
  public?: boolean;
34
33
  access?: ProcedureAccessRecord;
35
34
  };
36
- export declare class Server<Protocol extends ProtocolDefinition> implements Disposer {
35
+ export declare class Server<Protocol extends ProtocolDefinition> extends Disposer {
37
36
  #private;
38
37
  constructor(params: ServerParams<Protocol>);
39
- get disposed(): Promise<void>;
40
- get rejections(): ReadableStream<RejectionType>;
41
- dispose(): Promise<void>;
38
+ get events(): ServerEmitter;
42
39
  handle(transport: ServerTransportOf<Protocol>, options?: HandleOptions): Promise<void>;
43
40
  }
44
41
  export type ServeParams<Protocol extends ProtocolDefinition> = Omit<ServerParams<Protocol>, 'transports'> & {
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,gBAAgB,CAAA;AAIhE,OAAO,EAAE,KAAK,qBAAqB,EAAoB,MAAM,qBAAqB,CAAA;AAKlF,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAQnB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAEtE,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,kBAAkB,IAAI,mBAAmB,GAAG;IAC5F,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;IAC1C,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACtC,SAAS,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;CACpD,CAAA;AA8ID,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,kBAAkB,IAAI;IAC9D,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACrC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAEhF,qBAAa,MAAM,CAAC,QAAQ,SAAS,kBAAkB,CAAE,YAAW,QAAQ;;gBAU9D,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;IAqD1C,IAAI,QAAQ,kBAEX;IAED,IAAI,UAAU,kCAEb;IAEK,OAAO;IAIb,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B3F;AAED,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,kBAAkB,IAAI,IAAI,CACjE,YAAY,CAAC,QAAQ,CAAC,EACtB,YAAY,CACb,GAAG;IACF,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;CACvC,CAAA;AAED,wBAAgB,KAAK,CAAC,QAAQ,SAAS,kBAAkB,EACvD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC5B,MAAM,CAAC,QAAQ,CAAC,CAGlB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,KAAK,qBAAqB,EAAoB,MAAM,qBAAqB,CAAA;AAKlF,OAAO,KAAK,EAIV,iBAAiB,EACjB,aAAa,EAEd,MAAM,YAAY,CAAA;AAQnB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAEtE,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,kBAAkB,IAAI,mBAAmB,GAAG;IAC5F,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACtC,SAAS,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;CACpD,CAAA;AAyJD,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,kBAAkB,IAAI;IAC9D,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACrC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAEhF,qBAAa,MAAM,CAAC,QAAQ,SAAS,kBAAkB,CAAE,SAAQ,QAAQ;;gBAQ3D,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;IA+C1C,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B3F;AAED,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,kBAAkB,IAAI,IAAI,CACjE,YAAY,CAAC,QAAQ,CAAC,EACtB,YAAY,CACb,GAAG;IACF,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;CACvC,CAAA;AAED,wBAAgB,KAAK,CAAC,QAAQ,SAAS,kBAAkB,EACvD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC5B,MAAM,CAAC,QAAQ,CAAC,CAGlB"}
package/lib/server.js CHANGED
@@ -1,48 +1,60 @@
1
- import { createDisposer } from '@enkaku/async';
1
+ import { Disposer } from '@enkaku/async';
2
+ import { EventEmitter } from '@enkaku/event';
2
3
  import { createClientMessageSchema } from '@enkaku/protocol';
3
- import { createValidator } from '@enkaku/schema';
4
- import { createPipe } from '@enkaku/stream';
4
+ import { ValidationError, createValidator } from '@enkaku/schema';
5
5
  import { createUnsignedToken, isSignedToken } from '@enkaku/token';
6
6
  import { checkClientToken } from './access-control.js';
7
7
  import { handleChannel } from './handlers/channel.js';
8
8
  import { handleEvent } from './handlers/event.js';
9
9
  import { handleRequest } from './handlers/request.js';
10
10
  import { handleStream } from './handlers/stream.js';
11
- import { ErrorRejection } from './rejections.js';
12
11
  async function handleMessages(params) {
13
- const { handlers, reject, signal, transport, validator } = params;
12
+ const { events, handlers, signal, transport, validator } = params;
14
13
  const controllers = Object.create(null);
15
14
  const context = {
16
15
  controllers,
16
+ events,
17
17
  handlers,
18
- reject,
19
18
  send: (payload)=>transport.write(createUnsignedToken(payload))
20
19
  };
21
20
  const running = Object.create(null);
22
- const disposer = createDisposer(async ()=>{
23
- // Abort all currently running handlers
24
- for (const controller of Object.values(controllers)){
25
- controller.abort('Dispose');
26
- }
27
- // Wait until all running handlers are done
28
- await Promise.all(Object.values(running));
29
- }, signal);
21
+ const disposer = new Disposer({
22
+ dispose: async ()=>{
23
+ // Abort all currently running handlers
24
+ for (const controller of Object.values(controllers)){
25
+ controller.abort('Dispose');
26
+ }
27
+ // Wait until all running handlers are done
28
+ await Promise.all(Object.values(running));
29
+ },
30
+ signal
31
+ });
32
+ // Abort inflight handlers when the transport fails to write
33
+ transport.events.on('writeFailed', (event)=>{
34
+ controllers[event.rid]?.abort('Transport');
35
+ });
30
36
  const processMessage = validator ? (message)=>{
31
37
  const result = validator(message);
32
- if (result.isError()) {
33
- reject(new ErrorRejection('Invalid protocol message', {
34
- cause: result.error,
35
- info: {
36
- message
37
- }
38
- }));
38
+ if (result instanceof ValidationError) {
39
+ events.emit('invalidMessage', {
40
+ error: new Error('Invalid protocol message', {
41
+ cause: result
42
+ }),
43
+ message
44
+ });
45
+ return null;
39
46
  }
40
47
  return result.value;
41
48
  } : (message)=>message;
42
49
  function processHandler(message, handle) {
43
50
  const returned = handle();
44
- if (returned instanceof ErrorRejection) {
45
- reject(returned);
51
+ if (returned instanceof Error) {
52
+ const rid = message.payload.typ === 'event' ? undefined : message.payload.rid;
53
+ events.emit('handlerError', {
54
+ error: returned,
55
+ payload: message.payload,
56
+ rid
57
+ });
46
58
  } else {
47
59
  const id = message.payload.typ === 'event' ? Math.random().toString(36).slice(2) : message.payload.rid;
48
60
  running[id] = returned;
@@ -62,10 +74,12 @@ async function handleMessages(params) {
62
74
  } catch (err) {
63
75
  const errorMessage = err.message ?? 'Access denied';
64
76
  if (message.payload.typ === 'event') {
65
- reject(new ErrorRejection(errorMessage, {
66
- cause: err,
67
- info: message
68
- }));
77
+ events.emit('handlerError', {
78
+ error: new Error(errorMessage, {
79
+ cause: err
80
+ }),
81
+ payload: message.payload
82
+ });
69
83
  } else {
70
84
  context.send({
71
85
  typ: 'error',
@@ -128,17 +142,31 @@ async function handleMessages(params) {
128
142
  handleNext();
129
143
  return disposer.disposed;
130
144
  }
131
- export class Server {
145
+ export class Server extends Disposer {
132
146
  #abortController;
133
147
  #accessControl;
134
- #disposer;
148
+ #events;
135
149
  #handlers;
136
150
  #handling = [];
137
- #reject;
138
- #rejections;
139
151
  #validator;
140
152
  constructor(params){
153
+ super({
154
+ dispose: async ()=>{
155
+ // Signal messages handler to stop execution and run cleanup logic
156
+ this.#abortController.abort();
157
+ // Dispose of all handling transports
158
+ await Promise.all(// @ts-ignore type instantiation too deep
159
+ this.#handling.map(async (handling)=>{
160
+ // Wait until all handlers are done - they might still need to flush messages to the transport
161
+ await handling.done;
162
+ // Dispose transport
163
+ await handling.transport.dispose();
164
+ }));
165
+ },
166
+ signal: params.signal
167
+ });
141
168
  this.#abortController = new AbortController();
169
+ this.#events = new EventEmitter();
142
170
  this.#handlers = params.handlers;
143
171
  if (params.id == null) {
144
172
  if (params.public) {
@@ -156,26 +184,6 @@ export class Server {
156
184
  access: params.access ?? {}
157
185
  };
158
186
  }
159
- this.#disposer = createDisposer(async ()=>{
160
- // Signal messages handler to stop execution and run cleanup logic
161
- this.#abortController.abort();
162
- // Dispose of all handling transports
163
- await Promise.all(// @ts-ignore type instantiation too deep
164
- this.#handling.map(async (handling)=>{
165
- // Wait until all handlers are done - they might still need to flush messages to the transport
166
- await handling.done;
167
- // Dispose transport
168
- await handling.transport.dispose();
169
- }));
170
- // Cleanup rejections writer
171
- await rejectionsWriter.close();
172
- }, params.signal);
173
- const rejections = createPipe();
174
- this.#rejections = rejections.readable;
175
- const rejectionsWriter = rejections.writable.getWriter();
176
- this.#reject = (rejection)=>{
177
- void rejectionsWriter.write(rejection);
178
- };
179
187
  if (params.protocol != null) {
180
188
  this.#validator = createValidator(createClientMessageSchema(params.protocol));
181
189
  }
@@ -183,14 +191,8 @@ export class Server {
183
191
  this.handle(transport);
184
192
  }
185
193
  }
186
- get disposed() {
187
- return this.#disposer.disposed;
188
- }
189
- get rejections() {
190
- return this.#rejections;
191
- }
192
- async dispose() {
193
- return await this.#disposer.dispose();
194
+ get events() {
195
+ return this.#events;
194
196
  }
195
197
  handle(transport, options = {}) {
196
198
  const publicAccess = options.public ?? this.#accessControl.public;
@@ -213,8 +215,8 @@ export class Server {
213
215
  };
214
216
  }
215
217
  const done = handleMessages({
218
+ events: this.#events,
216
219
  handlers: this.#handlers,
217
- reject: this.#reject,
218
220
  signal: this.#abortController.signal,
219
221
  transport,
220
222
  validator: this.#validator,
package/lib/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import type { EventEmitter } from '@enkaku/event';
1
2
  import type { AnyRequestProcedureDefinition, AnyServerPayloadOf, ChannelProcedureDefinition, DataOf, EventCallPayload, EventProcedureDefinition, Message, ProtocolDefinition, RequestCallPayload, RequestProcedureDefinition, ReturnOf, StreamProcedureDefinition } from '@enkaku/protocol';
2
- import type { RejectionType } from './rejections.js';
3
3
  export type RequestController = AbortController;
4
4
  export type ChannelController<Send = unknown> = AbortController & {
5
5
  writer: WritableStreamDefaultWriter<Send>;
@@ -33,10 +33,28 @@ export type ParamType<Protocol extends ProtocolDefinition, Procedure extends key
33
33
  export type ReceiveType<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string> = Protocol[Procedure] extends StreamProcedureDefinition ? DataOf<Protocol[Procedure]['receive']> : Protocol[Procedure] extends ChannelProcedureDefinition ? DataOf<Protocol[Procedure]['receive']> : never;
34
34
  export type ResultType<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string> = Protocol[Procedure] extends AnyRequestProcedureDefinition ? DataOf<Protocol[Procedure]['result']> : never;
35
35
  export type SendType<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string> = Protocol[Procedure] extends ChannelProcedureDefinition ? DataOf<Protocol[Procedure]['send']> : never;
36
+ export type ServerEvents = {
37
+ handlerAbort: {
38
+ rid: string;
39
+ };
40
+ handlerError: {
41
+ error: Error;
42
+ payload: Record<string, unknown>;
43
+ rid?: string;
44
+ };
45
+ handlerTimeout: {
46
+ rid: string;
47
+ };
48
+ invalidMessage: {
49
+ error: Error;
50
+ message: unknown;
51
+ };
52
+ };
53
+ export type ServerEmitter = EventEmitter<ServerEvents>;
36
54
  export type HandlerContext<Protocol extends ProtocolDefinition> = {
37
55
  controllers: Record<string, HandlerController>;
56
+ events: ServerEmitter;
38
57
  handlers: ProcedureHandlers<Protocol>;
39
- reject: (rejection: RejectionType) => void;
40
58
  send: (payload: AnyServerPayloadOf<Protocol>) => Promise<void>;
41
59
  };
42
60
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EACV,6BAA6B,EAC7B,kBAAkB,EAClB,0BAA0B,EAC1B,MAAM,EACN,gBAAgB,EAChB,wBAAwB,EACxB,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,QAAQ,EACR,yBAAyB,EAC1B,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAA;AAE/C,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,GAAG;IAChE,MAAM,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,OAAO,IAAI,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAE3F,MAAM,MAAM,mBAAmB,CAC7B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,wBAAwB,GACpD;IACE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1C,GACD,KAAK,CAAA;AAET,MAAM,MAAM,YAAY,CACtB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,CAAC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/E,MAAM,MAAM,qBAAqB,CAC/B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,6BAA6B,GACzD;IACE,OAAO,EAAE,OAAO,CACd,kBAAkB,CAChB,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAC3B,SAAS,EACT,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CACrC,CACF,CAAA;IACD,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,MAAM,EAAE,WAAW,CAAA;CACpB,GACD,KAAK,CAAA;AAET,MAAM,MAAM,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEnG,MAAM,MAAM,cAAc,CACxB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,6BAA6B,GACzD,CACE,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,KAAK,CAAA;AAET,MAAM,MAAM,oBAAoB,CAC9B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,yBAAyB,GAAG,0BAA0B,GAClF,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAC3C,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;CACjE,GACD,KAAK,CAAA;AAET,MAAM,MAAM,aAAa,CACvB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,yBAAyB,GAAG,0BAA0B,GAClF,CACE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAC/C,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,KAAK,CAAA;AAET,MAAM,MAAM,qBAAqB,CAC/B,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACtD,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAC1C,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAC9D,GACD,KAAK,CAAA;AAET,MAAM,MAAM,cAAc,CACxB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACtD,CACE,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,KAAK,CAAA;AAET,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,kBAAkB,IAAI;KAClE,SAAS,IAAI,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,wBAAwB,GACxF,CAAC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,IAAI,GAC3D,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACpD,CACE,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,QAAQ,CAAC,SAAS,CAAC,SAAS,yBAAyB,GACnD,CACE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAC/C,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACpD,CACE,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACjD,KAAK;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,CACvB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,wBAAwB,GACpD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GACnC,KAAK,CAAA;AAET,MAAM,MAAM,SAAS,CACnB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,6BAA6B,GACzD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GACpC,KAAK,CAAA;AAET,MAAM,MAAM,WAAW,CACrB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,yBAAyB,GACrD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,GACtC,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACpD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,GACtC,KAAK,CAAA;AAEX,MAAM,MAAM,UAAU,CACpB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,6BAA6B,GACzD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GACrC,KAAK,CAAA;AAET,MAAM,MAAM,QAAQ,CAClB,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,IACvC,QAAQ,CAAC,SAAS,CAAC,SAAS,0BAA0B,GACtD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GACnC,KAAK,CAAA;AAET,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,YAAY,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E,cAAc,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,cAAc,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;AAEtD,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,IAAI;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D,CAAA"}
package/lib/utils.d.ts CHANGED
@@ -1,11 +1,4 @@
1
1
  import type { ProtocolDefinition, RequestPayloadOf } from '@enkaku/protocol';
2
2
  import type { HandlerContext, ResultType } from './types.js';
3
- export type ConsumeReaderParams<T> = {
4
- onDone?: () => void;
5
- onValue: (value: T) => Promise<void>;
6
- reader: ReadableStreamDefaultReader<T>;
7
- signal: AbortSignal;
8
- };
9
- export declare function consumeReader<T>(params: ConsumeReaderParams<T>): Promise<void>;
10
3
  export declare function executeHandler<Protocol extends ProtocolDefinition, Procedure extends keyof Protocol & string, Result extends ResultType<Protocol, Procedure> = ResultType<Protocol, Procedure>>(context: HandlerContext<Protocol>, payload: RequestPayloadOf<Procedure, Protocol[Procedure]>, execute: () => Result | Promise<Result>): Promise<void>;
11
4
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAIhG,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACtC,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF;AAOD,wBAAsB,cAAc,CAClC,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,MAAM,SAAS,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAEhF,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,EACjC,OAAO,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EACzD,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGhG,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAO5D,wBAAsB,cAAc,CAClC,QAAQ,SAAS,kBAAkB,EACnC,SAAS,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,MAAM,SAAS,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAEhF,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,EACjC,OAAO,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EACzD,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
package/lib/utils.js CHANGED
@@ -1,24 +1,5 @@
1
1
  import { toPromise } from '@enkaku/async';
2
2
  import { HandlerError } from './error.js';
3
- import { ErrorRejection } from './rejections.js';
4
- export async function consumeReader(params) {
5
- async function handle() {
6
- if (params.signal.aborted) {
7
- return;
8
- }
9
- const next = await params.reader.read();
10
- if (next.done) {
11
- params.onDone?.();
12
- return;
13
- }
14
- if (params.signal.aborted) {
15
- return;
16
- }
17
- await params.onValue(next.value);
18
- handle();
19
- }
20
- handle();
21
- }
22
3
  function canSend(signal) {
23
4
  return !signal.aborted || signal.reason === 'Close';
24
5
  }
@@ -41,11 +22,13 @@ export async function executeHandler(context, payload, execute) {
41
22
  message: cause.message ?? 'Handler execution failed'
42
23
  }).toPayload(payload.rid));
43
24
  }
44
- context.reject(// @ts-ignore type instantiation too deep
45
- new ErrorRejection(`Error handling procedure: ${payload.prc}`, {
46
- info: payload,
47
- cause
48
- }));
25
+ context.events.emit('handlerError', {
26
+ error: new Error(`Error handling procedure: ${payload.prc}`, {
27
+ cause
28
+ }),
29
+ rid: payload.rid,
30
+ payload
31
+ });
49
32
  } finally{
50
33
  delete context.controllers[payload.rid];
51
34
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enkaku/server",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://enkaku.dev",
6
6
  "description": "Server logic for Enkaku RPC",
@@ -25,15 +25,16 @@
25
25
  ],
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@enkaku/capability": "^0.9.0",
29
- "@enkaku/protocol": "^0.9.0",
30
- "@enkaku/schema": "^0.9.0",
31
- "@enkaku/stream": "^0.9.1",
32
- "@enkaku/token": "^0.9.0",
33
- "@enkaku/async": "^0.9.0"
28
+ "@enkaku/async": "^0.10.0",
29
+ "@enkaku/capability": "^0.10.0",
30
+ "@enkaku/event": "^0.10.0",
31
+ "@enkaku/protocol": "^0.10.0",
32
+ "@enkaku/schema": "^0.10.0",
33
+ "@enkaku/stream": "^0.10.0",
34
+ "@enkaku/token": "^0.10.0"
34
35
  },
35
36
  "devDependencies": {
36
- "@enkaku/transport": "^0.9.1"
37
+ "@enkaku/transport": "^0.10.0"
37
38
  },
38
39
  "scripts": {
39
40
  "build:clean": "del lib",
@@ -1,28 +0,0 @@
1
- export declare enum RejectionReason {
2
- ABORT = 1,
3
- ERROR = 2,
4
- TIMEOUT = 3
5
- }
6
- export type RejectionType<Reason extends RejectionReason = RejectionReason, Info extends Record<string, unknown> = Record<string, unknown>> = {
7
- readonly reason: Reason;
8
- readonly info: Info;
9
- };
10
- export declare class Rejection<Reason extends RejectionReason = RejectionReason, Info extends Record<string, unknown> = Record<string, unknown>> implements RejectionType<Reason, Info> {
11
- #private;
12
- constructor(reason: Reason, info: Info);
13
- get reason(): Reason;
14
- get info(): Info;
15
- }
16
- export declare class AbortRejection<Info extends Record<string, unknown> = Record<string, unknown>> extends Rejection<RejectionReason.ABORT, Info> {
17
- constructor(info: Info);
18
- }
19
- export type ErrorRejectionOptions<Info extends Record<string, unknown> = Record<string, unknown>> = ErrorOptions & {
20
- info: Info;
21
- };
22
- export declare class ErrorRejection<Info extends Record<string, unknown> = Record<string, unknown>> extends Error implements RejectionType<RejectionReason.ERROR, Info> {
23
- #private;
24
- constructor(message: string, options?: ErrorRejectionOptions<Info>);
25
- get reason(): RejectionReason.ERROR;
26
- get info(): Info;
27
- }
28
- //# sourceMappingURL=rejections.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rejections.d.ts","sourceRoot":"","sources":["../src/rejections.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,OAAO,IAAI;CACZ;AAED,MAAM,MAAM,aAAa,CACvB,MAAM,SAAS,eAAe,GAAG,eAAe,EAChD,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB,CAAA;AAED,qBAAa,SAAS,CACpB,MAAM,SAAS,eAAe,GAAG,eAAe,EAChD,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC9D,YAAW,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;;gBAK1B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAKtC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;CACF;AAED,qBAAa,cAAc,CACzB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC9D,SAAQ,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC;gBAClC,IAAI,EAAE,IAAI;CAGvB;AAED,MAAM,MAAM,qBAAqB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC9F,YAAY,GAAG;IACb,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAEH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxF,SAAQ,KACR,YAAW,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC;;gBAIzC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAS,qBAAqB,CAAC,IAAI,CAAC;IAKxE,IAAI,MAAM,IAAI,eAAe,CAAC,KAAK,CAElC;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;CACF"}
package/lib/rejections.js DELETED
@@ -1,40 +0,0 @@
1
- export var RejectionReason = /*#__PURE__*/ function(RejectionReason) {
2
- RejectionReason[RejectionReason["ABORT"] = 1] = "ABORT";
3
- RejectionReason[RejectionReason["ERROR"] = 2] = "ERROR";
4
- RejectionReason[RejectionReason["TIMEOUT"] = 3] = "TIMEOUT";
5
- return RejectionReason;
6
- }({});
7
- export class Rejection {
8
- #reason;
9
- #info;
10
- constructor(reason, info){
11
- this.#reason = reason;
12
- this.#info = info;
13
- }
14
- get reason() {
15
- return this.#reason;
16
- }
17
- get info() {
18
- return this.#info;
19
- }
20
- }
21
- export class AbortRejection extends Rejection {
22
- constructor(info){
23
- super(1, info);
24
- }
25
- }
26
- export class ErrorRejection extends Error {
27
- #info;
28
- constructor(message, options = {}){
29
- super(message, {
30
- cause: options.cause
31
- });
32
- this.#info = options.info ?? {};
33
- }
34
- get reason() {
35
- return 2;
36
- }
37
- get info() {
38
- return this.#info;
39
- }
40
- }