@enkaku/client 0.2.1 → 0.3.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/client.d.ts CHANGED
@@ -1,16 +1,25 @@
1
1
  import type { AnyDefinitions, ChannelDefinition, ClientTransportOf, EventDefinition, RequestDefinition, StreamDefinition } from '@enkaku/protocol';
2
- import { type Disposer } from '@enkaku/util';
3
- export type InvokeReturn<Result> = {
2
+ import type { Disposer } from '@enkaku/util';
3
+ import { Result } from 'typescript-result';
4
+ import { ABORTED } from './constants.js';
5
+ import { RequestError } from './error.js';
6
+ export type InvokeError = typeof ABORTED | RequestError;
7
+ export type InvokeResult<T> = Result<T, InvokeError>;
8
+ export type InvokeReturn<ResultValue> = {
4
9
  abort: (reason?: any) => void;
5
10
  id: string;
6
- result: Promise<Result>;
11
+ result: Promise<Result<ResultValue, InvokeError>>;
7
12
  };
8
13
  export type InvokeStreamReturn<Receive, Result> = InvokeReturn<Result> & {
9
- receive: ReadableStreamDefaultReader<Receive>;
14
+ receive: ReadableStream<Receive>;
10
15
  };
11
16
  export type InvokeChannelReturn<Send, Receive, Result> = InvokeStreamReturn<Receive, Result> & {
12
17
  send: (value: Send) => Promise<void>;
13
18
  };
19
+ export type Invocation<ResultValue, Return> = Promise<Return> & {
20
+ result: Promise<InvokeResult<ResultValue>>;
21
+ toValue(): Promise<ResultValue>;
22
+ };
14
23
  export type EventDefinitionsType<Definitions extends AnyDefinitions, Commands extends keyof Definitions & string = keyof Definitions & string> = {
15
24
  [Command in Commands]: Definitions[Command] extends EventDefinition<infer Data> ? {
16
25
  Argument: Data extends undefined ? never : Data;
@@ -20,6 +29,7 @@ export type EventDefinitionsType<Definitions extends AnyDefinitions, Commands ex
20
29
  export type RequestDefinitionsType<Definitions extends AnyDefinitions, Commands extends keyof Definitions & string = keyof Definitions & string> = {
21
30
  [Command in Commands]: Definitions[Command] extends RequestDefinition<infer Params, infer Result> ? {
22
31
  Argument: Params extends undefined ? never : Params;
32
+ Result: Result;
23
33
  Return: InvokeReturn<Result>;
24
34
  } : never;
25
35
  };
@@ -27,6 +37,7 @@ export type StreamDefinitionsType<Definitions extends AnyDefinitions, Commands e
27
37
  [Command in Commands]: Definitions[Command] extends StreamDefinition<infer Params, infer Receive, infer Result> ? {
28
38
  Argument: Params extends undefined ? never : Params;
29
39
  Receive: Receive;
40
+ Result: Result;
30
41
  Return: InvokeStreamReturn<Receive, Result>;
31
42
  } : never;
32
43
  };
@@ -34,6 +45,7 @@ export type ChannelDefinitionsType<Definitions extends AnyDefinitions, Commands
34
45
  [Command in Commands]: Definitions[Command] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? {
35
46
  Argument: Params extends undefined ? never : Params;
36
47
  Receive: Receive;
48
+ Result: Result;
37
49
  Return: InvokeChannelReturn<Send, Receive, Result>;
38
50
  Send: Send;
39
51
  } : never;
@@ -46,6 +58,14 @@ export type ClientDefinitionsType<Definitions extends AnyDefinitions> = {
46
58
  };
47
59
  export type InvokeArgumentType<Definitions extends AnyDefinitions, Name extends keyof Definitions & string = keyof Definitions & string> = Definitions[Name] extends EventDefinition<infer Data> ? Data : Definitions[Name] extends RequestDefinition<infer Params> ? Params : Definitions[Name] extends StreamDefinition<infer Params> ? Params : Definitions[Name] extends ChannelDefinition<infer Params> ? Params : never;
48
60
  export type InvokeReturnType<Definitions extends AnyDefinitions, Name extends keyof Definitions & string> = Definitions[Name] extends EventDefinition<infer Data> ? undefined : Definitions[Name] extends RequestDefinition<infer Params, infer Result> ? InvokeReturn<Result> : Definitions[Name] extends StreamDefinition<infer Params, infer Receive, infer Result> ? InvokeStreamReturn<Receive, Result> : Definitions[Name] extends ChannelDefinition<infer Params, infer Send, infer Receive, infer Result> ? InvokeChannelReturn<Send, Receive, Result> : never;
61
+ type RequestController<ResultValue> = AbortController & {
62
+ result: Promise<InvokeResult<ResultValue>>;
63
+ ok: (value: ResultValue) => void;
64
+ error: (error: RequestError) => void;
65
+ aborted: () => void;
66
+ };
67
+ export declare function createController<T>(): RequestController<T>;
68
+ export declare function createInvovation<ResultValue, Return>(controller: RequestController<ResultValue>, promise: Promise<Return>): Invocation<ResultValue, Return>;
49
69
  export type ClientParams<Definitions extends AnyDefinitions> = {
50
70
  transport: ClientTransportOf<Definitions>;
51
71
  };
@@ -55,8 +75,9 @@ export declare class Client<Definitions extends AnyDefinitions, ClientDefinition
55
75
  get disposed(): Promise<void>;
56
76
  dispose(): Promise<void>;
57
77
  sendEvent<Command extends keyof ClientDefinitions['Events'] & string, T extends ClientDefinitions['Events'][Command] = ClientDefinitions['Events'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Promise<void>;
58
- request<Command extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Command] = ClientDefinitions['Requests'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Promise<InvokeReturn<T['Return']>>;
59
- createStream<Command extends keyof ClientDefinitions['Streams'] & string, T extends ClientDefinitions['Streams'][Command] = ClientDefinitions['Streams'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Promise<InvokeStreamReturn<T['Receive'], T['Return']>>;
60
- createChannel<Command extends keyof ClientDefinitions['Channels'] & string, T extends ClientDefinitions['Channels'][Command] = ClientDefinitions['Channels'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Promise<InvokeChannelReturn<T['Send'], T['Receive'], T['Return']>>;
78
+ request<Command extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Command] = ClientDefinitions['Requests'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
79
+ createStream<Command extends keyof ClientDefinitions['Streams'] & string, T extends ClientDefinitions['Streams'][Command] = ClientDefinitions['Streams'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
80
+ createChannel<Command extends keyof ClientDefinitions['Channels'] & string, T extends ClientDefinitions['Channels'][Command] = ClientDefinitions['Channels'][Command]>(command: Command, ...args: T['Argument'] extends never ? [] : [T['Argument']]): Invocation<T['Result'], T['Return']>;
61
81
  }
82
+ export {};
62
83
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/lib/client.js CHANGED
@@ -1,8 +1,33 @@
1
1
  import { createUnsignedToken } from '@enkaku/jwt';
2
2
  import { createPipe } from '@enkaku/stream';
3
- import { defer } from '@enkaku/util';
3
+ import { Result } from 'typescript-result';
4
4
  import { ABORTED } from './constants.js';
5
5
  import { RequestError } from './error.js';
6
+ export function createController() {
7
+ let resolve = ()=>{};
8
+ const result = new Promise((res)=>{
9
+ resolve = res;
10
+ });
11
+ return Object.assign(new AbortController(), {
12
+ result,
13
+ ok: (value)=>resolve(Result.ok(value)),
14
+ error: (error)=>resolve(Result.error(error)),
15
+ aborted: ()=>resolve(Result.error(ABORTED))
16
+ });
17
+ }
18
+ export function createInvovation(controller, promise) {
19
+ return Object.assign(promise, {
20
+ result: controller.result,
21
+ toValue: ()=>{
22
+ return controller.result.then((result)=>{
23
+ if (result.isOk()) {
24
+ return result.value;
25
+ }
26
+ throw result.error;
27
+ });
28
+ }
29
+ });
30
+ }
6
31
  export class Client {
7
32
  #transport;
8
33
  #controllers = {};
@@ -32,7 +57,7 @@ export class Client {
32
57
  switch(msg.payload.typ){
33
58
  case 'error':
34
59
  void controller.receive?.close();
35
- controller.result.reject(RequestError.fromPayload(msg.payload));
60
+ controller.error(RequestError.fromPayload(msg.payload));
36
61
  delete this.#controllers[msg.payload.rid];
37
62
  break;
38
63
  case 'receive':
@@ -40,7 +65,7 @@ export class Client {
40
65
  break;
41
66
  case 'result':
42
67
  void controller.receive?.close();
43
- controller.result.resolve(msg.payload.val);
68
+ controller.ok(msg.payload.val);
44
69
  delete this.#controllers[msg.payload.rid];
45
70
  break;
46
71
  }
@@ -66,18 +91,17 @@ export class Client {
66
91
  };
67
92
  await this.#write(payload);
68
93
  }
69
- async request(command, ...args) {
94
+ request(command, ...args) {
70
95
  const rid = globalThis.crypto.randomUUID();
71
- const controller = Object.assign(new AbortController(), {
72
- result: defer()
73
- });
96
+ const controller = createController();
74
97
  this.#controllers[rid] = controller;
75
98
  controller.signal.addEventListener('abort', ()=>{
76
99
  void this.#write({
77
100
  typ: 'abort',
78
101
  rid
79
102
  });
80
- controller.result.reject(ABORTED);
103
+ controller.aborted();
104
+ delete this.#controllers[rid];
81
105
  });
82
106
  const payload = args.length ? {
83
107
  typ: 'request',
@@ -89,19 +113,20 @@ export class Client {
89
113
  rid,
90
114
  cmd: command
91
115
  };
92
- await this.#write(payload);
93
- return {
94
- abort: ()=>controller.abort(),
95
- id: rid,
96
- result: controller.result.promise
97
- };
116
+ const promise = this.#write(payload).then(()=>{
117
+ return {
118
+ abort: ()=>controller.abort(),
119
+ id: rid,
120
+ result: controller.result
121
+ };
122
+ });
123
+ return createInvovation(controller, promise);
98
124
  }
99
- async createStream(command, ...args) {
125
+ createStream(command, ...args) {
100
126
  const rid = globalThis.crypto.randomUUID();
101
127
  const receive = createPipe();
102
- const controller = Object.assign(new AbortController(), {
103
- receive: receive.writable.getWriter(),
104
- result: defer()
128
+ const controller = Object.assign(createController(), {
129
+ receive: receive.writable.getWriter()
105
130
  });
106
131
  this.#controllers[rid] = controller;
107
132
  controller.signal.addEventListener('abort', ()=>{
@@ -109,7 +134,8 @@ export class Client {
109
134
  typ: 'abort',
110
135
  rid
111
136
  });
112
- controller.result.reject(ABORTED);
137
+ controller.aborted();
138
+ delete this.#controllers[rid];
113
139
  });
114
140
  const action = args.length ? {
115
141
  typ: 'stream',
@@ -121,22 +147,23 @@ export class Client {
121
147
  rid,
122
148
  cmd: command
123
149
  };
124
- await this.#write(action);
125
- return {
126
- abort: ()=>controller.abort(),
127
- id: rid,
128
- receive: receive.readable.getReader(),
129
- result: controller.result.promise
130
- };
150
+ const promise = this.#write(action).then(()=>{
151
+ return {
152
+ abort: ()=>controller.abort(),
153
+ id: rid,
154
+ receive: receive.readable,
155
+ result: controller.result
156
+ };
157
+ });
158
+ return createInvovation(controller, promise);
131
159
  }
132
- async createChannel(command, ...args) {
160
+ createChannel(command, ...args) {
133
161
  const rid = globalThis.crypto.randomUUID();
134
162
  const receive = createPipe();
135
163
  const send = createPipe();
136
- const controller = Object.assign(new AbortController(), {
164
+ const controller = Object.assign(createController(), {
137
165
  receive: receive.writable.getWriter(),
138
- result: defer(),
139
- send: send.writable.getWriter()
166
+ send: send.writable
140
167
  });
141
168
  this.#controllers[rid] = controller;
142
169
  controller.signal.addEventListener('abort', ()=>{
@@ -144,7 +171,8 @@ export class Client {
144
171
  typ: 'abort',
145
172
  rid
146
173
  });
147
- controller.result.reject(ABORTED);
174
+ controller.aborted();
175
+ delete this.#controllers[rid];
148
176
  });
149
177
  const payload = args.length ? {
150
178
  typ: 'channel',
@@ -156,19 +184,21 @@ export class Client {
156
184
  rid,
157
185
  cmd: command
158
186
  };
159
- await this.#write(payload);
160
- return {
161
- abort: ()=>controller.abort(),
162
- id: rid,
163
- receive: receive.readable.getReader(),
164
- result: controller.result.promise,
165
- send: async (val)=>{
166
- await this.#write({
167
- typ: 'send',
168
- rid,
169
- val
170
- });
171
- }
172
- };
187
+ const promise = this.#write(payload).then(()=>{
188
+ return {
189
+ abort: ()=>controller.abort(),
190
+ id: rid,
191
+ receive: receive.readable,
192
+ result: controller.result,
193
+ send: async (val)=>{
194
+ await this.#write({
195
+ typ: 'send',
196
+ rid,
197
+ val
198
+ });
199
+ }
200
+ };
201
+ });
202
+ return createInvovation(controller, promise);
173
203
  }
174
204
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enkaku/client",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "license": "MIT",
5
5
  "keywords": [],
6
6
  "type": "module",
@@ -14,13 +14,14 @@
14
14
  ],
15
15
  "sideEffects": false,
16
16
  "dependencies": {
17
- "@enkaku/jwt": "^0.2.1",
18
- "@enkaku/util": "^0.2.0",
19
- "@enkaku/stream": "^0.2.1"
17
+ "typescript-result": "^3.0.0",
18
+ "@enkaku/jwt": "^0.3.0",
19
+ "@enkaku/stream": "^0.3.0"
20
20
  },
21
21
  "devDependencies": {
22
- "@enkaku/protocol": "^0.2.1",
23
- "@enkaku/transport": "^0.2.0"
22
+ "@enkaku/protocol": "^0.3.0",
23
+ "@enkaku/transport": "^0.3.0",
24
+ "@enkaku/util": "^0.3.0"
24
25
  },
25
26
  "scripts": {
26
27
  "build:clean": "del lib",