@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 +28 -7
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +75 -45
- package/package.json +7 -6
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 {
|
|
3
|
-
|
|
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:
|
|
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']]):
|
|
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']]):
|
|
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']]):
|
|
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
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,
|
|
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 {
|
|
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.
|
|
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.
|
|
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
|
-
|
|
94
|
+
request(command, ...args) {
|
|
70
95
|
const rid = globalThis.crypto.randomUUID();
|
|
71
|
-
const controller =
|
|
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.
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
125
|
+
createStream(command, ...args) {
|
|
100
126
|
const rid = globalThis.crypto.randomUUID();
|
|
101
127
|
const receive = createPipe();
|
|
102
|
-
const controller = Object.assign(
|
|
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.
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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(
|
|
164
|
+
const controller = Object.assign(createController(), {
|
|
137
165
|
receive: receive.writable.getWriter(),
|
|
138
|
-
|
|
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.
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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.
|
|
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
|
-
"
|
|
18
|
-
"@enkaku/
|
|
19
|
-
"@enkaku/stream": "^0.
|
|
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.
|
|
23
|
-
"@enkaku/transport": "^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",
|