@enkaku/client 0.8.3 → 0.9.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 +43 -39
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +96 -89
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +0 -1
- package/package.json +6 -7
- package/lib/constants.d.ts +0 -2
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -1
package/lib/client.d.ts
CHANGED
|
@@ -1,56 +1,44 @@
|
|
|
1
1
|
import type { AnyProcedureDefinition, AnyRequestProcedureDefinition, ChannelProcedureDefinition, ClientTransportOf, DataOf, EventProcedureDefinition, ProtocolDefinition, RequestProcedureDefinition, ReturnOf, StreamProcedureDefinition } from '@enkaku/protocol';
|
|
2
2
|
import { type TokenSigner } from '@enkaku/token';
|
|
3
|
-
import type
|
|
4
|
-
import { Result } from 'typescript-result';
|
|
5
|
-
import { ABORTED } from './constants.js';
|
|
6
|
-
import { RequestError } from './error.js';
|
|
3
|
+
import { type Disposer } from '@enkaku/util';
|
|
7
4
|
type FilterNever<T> = {
|
|
8
5
|
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
9
6
|
};
|
|
10
|
-
export type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
abort: (reason?: any) => void;
|
|
14
|
-
id: string;
|
|
15
|
-
result: Promise<CallResult<ResultValue>>;
|
|
7
|
+
export type RequestCall<Result> = Promise<Result> & {
|
|
8
|
+
abort: (reason?: string) => void;
|
|
9
|
+
signal: AbortSignal;
|
|
16
10
|
};
|
|
17
|
-
export type
|
|
18
|
-
|
|
11
|
+
export type StreamCall<Receive, Result> = RequestCall<Result> & {
|
|
12
|
+
close: () => void;
|
|
13
|
+
readable: ReadableStream<Receive>;
|
|
19
14
|
};
|
|
20
|
-
export type
|
|
15
|
+
export type ChannelCall<Receive, Send, Result> = StreamCall<Receive, Result> & {
|
|
21
16
|
send: (value: Send) => Promise<void>;
|
|
22
|
-
|
|
23
|
-
export type ProcedureCall<ResultValue, Return> = Promise<Return> & {
|
|
24
|
-
result: Promise<CallResult<ResultValue>>;
|
|
25
|
-
toValue(): Promise<ResultValue>;
|
|
17
|
+
writable: WritableStream<Send>;
|
|
26
18
|
};
|
|
27
19
|
export type EventDefinitionsType<Protocol extends ProtocolDefinition> = FilterNever<{
|
|
28
20
|
[Procedure in keyof Protocol & string]: Protocol[Procedure] extends EventProcedureDefinition ? {
|
|
29
|
-
|
|
30
|
-
Return: undefined;
|
|
21
|
+
Data: DataOf<Protocol[Procedure]['data']>;
|
|
31
22
|
} : never;
|
|
32
23
|
}>;
|
|
33
24
|
export type RequestDefinitionsType<Protocol extends ProtocolDefinition> = FilterNever<{
|
|
34
25
|
[Procedure in keyof Protocol & string]: Protocol[Procedure] extends RequestProcedureDefinition ? {
|
|
35
|
-
|
|
26
|
+
Param: DataOf<Protocol[Procedure]['param']>;
|
|
36
27
|
Result: ReturnOf<Protocol[Procedure]['result']>;
|
|
37
|
-
Return: CallReturn<ReturnOf<Protocol[Procedure]['result']>>;
|
|
38
28
|
} : never;
|
|
39
29
|
}>;
|
|
40
30
|
export type StreamDefinitionsType<Protocol extends ProtocolDefinition> = FilterNever<{
|
|
41
31
|
[Procedure in keyof Protocol & string]: Protocol[Procedure] extends StreamProcedureDefinition ? {
|
|
42
|
-
|
|
32
|
+
Param: Protocol[Procedure]['param'] extends undefined ? never : DataOf<Protocol[Procedure]['param']>;
|
|
43
33
|
Receive: DataOf<Protocol[Procedure]['receive']>;
|
|
44
34
|
Result: ReturnOf<Protocol[Procedure]['result']>;
|
|
45
|
-
Return: CallStreamReturn<DataOf<Protocol[Procedure]['receive']>, ReturnOf<Protocol[Procedure]['result']>>;
|
|
46
35
|
} : never;
|
|
47
36
|
}>;
|
|
48
37
|
export type ChannelDefinitionsType<Protocol extends ProtocolDefinition> = FilterNever<{
|
|
49
38
|
[Procedure in keyof Protocol & string]: Protocol[Procedure] extends ChannelProcedureDefinition ? {
|
|
50
|
-
|
|
39
|
+
Param: DataOf<Protocol[Procedure]['param']>;
|
|
51
40
|
Receive: DataOf<Protocol[Procedure]['receive']>;
|
|
52
41
|
Result: ReturnOf<Protocol[Procedure]['result']>;
|
|
53
|
-
Return: CallChannelReturn<DataOf<Protocol[Procedure]['send']>, DataOf<Protocol[Procedure]['receive']>, ReturnOf<Protocol[Procedure]['result']>>;
|
|
54
42
|
Send: DataOf<Protocol[Procedure]['send']>;
|
|
55
43
|
} : never;
|
|
56
44
|
}>;
|
|
@@ -60,16 +48,14 @@ export type ClientDefinitionsType<Protocol extends ProtocolDefinition> = {
|
|
|
60
48
|
Requests: RequestDefinitionsType<Protocol>;
|
|
61
49
|
Streams: StreamDefinitionsType<Protocol>;
|
|
62
50
|
};
|
|
63
|
-
export type CallArgumentType<Procedure extends AnyProcedureDefinition> = Procedure extends EventProcedureDefinition ? Procedure['data'] : Procedure extends AnyRequestProcedureDefinition ? Procedure['
|
|
64
|
-
export type
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
export declare function createController<T>(): RequestController<T>;
|
|
72
|
-
export declare function createCall<ResultValue, Return>(controller: RequestController<ResultValue>, promise: Promise<Return>): ProcedureCall<ResultValue, Return>;
|
|
51
|
+
export type CallArgumentType<Procedure extends AnyProcedureDefinition> = Procedure extends EventProcedureDefinition ? Procedure['data'] : Procedure extends AnyRequestProcedureDefinition ? Procedure['param'] : never;
|
|
52
|
+
export type RequestArguments<Param> = Param extends never ? [config?: {
|
|
53
|
+
param?: never;
|
|
54
|
+
signal?: AbortSignal;
|
|
55
|
+
}] : [config: {
|
|
56
|
+
param: Param;
|
|
57
|
+
signal?: AbortSignal;
|
|
58
|
+
}];
|
|
73
59
|
export type ClientParams<Protocol extends ProtocolDefinition> = {
|
|
74
60
|
getRandomID?: () => string;
|
|
75
61
|
transport: ClientTransportOf<Protocol>;
|
|
@@ -81,10 +67,28 @@ export declare class Client<Protocol extends ProtocolDefinition, ClientDefinitio
|
|
|
81
67
|
constructor(params: ClientParams<Protocol>);
|
|
82
68
|
get disposed(): Promise<void>;
|
|
83
69
|
dispose(): Promise<void>;
|
|
84
|
-
sendEvent<Procedure extends keyof ClientDefinitions['Events'] & string, T extends ClientDefinitions['Events'][Procedure] = ClientDefinitions['Events'][Procedure]>(procedure: Procedure, ...args: T['
|
|
85
|
-
request<Procedure extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Procedure] = ClientDefinitions['Requests'][Procedure]>(procedure: Procedure, ...args: T['
|
|
86
|
-
|
|
87
|
-
|
|
70
|
+
sendEvent<Procedure extends keyof ClientDefinitions['Events'] & string, T extends ClientDefinitions['Events'][Procedure] = ClientDefinitions['Events'][Procedure]>(procedure: Procedure, ...args: T['Data'] extends never ? [] : [T['Data']]): Promise<void>;
|
|
71
|
+
request<Procedure extends keyof ClientDefinitions['Requests'] & string, T extends ClientDefinitions['Requests'][Procedure] = ClientDefinitions['Requests'][Procedure]>(procedure: Procedure, ...args: T['Param'] extends never ? [config?: {
|
|
72
|
+
param?: never;
|
|
73
|
+
signal?: AbortSignal;
|
|
74
|
+
}] : [config: {
|
|
75
|
+
param: T['Param'];
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
}]): RequestCall<T['Result']> & Promise<T['Result']>;
|
|
78
|
+
createStream<Procedure extends keyof ClientDefinitions['Streams'] & string, T extends ClientDefinitions['Streams'][Procedure] = ClientDefinitions['Streams'][Procedure]>(procedure: Procedure, ...args: T['Param'] extends never ? [config?: {
|
|
79
|
+
param?: never;
|
|
80
|
+
signal?: AbortSignal;
|
|
81
|
+
}] : [config: {
|
|
82
|
+
param: T['Param'];
|
|
83
|
+
signal?: AbortSignal;
|
|
84
|
+
}]): StreamCall<T['Receive'], T['Result']>;
|
|
85
|
+
createChannel<Procedure extends keyof ClientDefinitions['Channels'] & string, T extends ClientDefinitions['Channels'][Procedure] = ClientDefinitions['Channels'][Procedure]>(procedure: Procedure, ...args: T['Param'] extends never ? [config?: {
|
|
86
|
+
param?: never;
|
|
87
|
+
signal?: AbortSignal;
|
|
88
|
+
}] : [config: {
|
|
89
|
+
param: T['Param'];
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
}]): ChannelCall<T['Receive'], T['Send'], T['Result']>;
|
|
88
92
|
}
|
|
89
93
|
export {};
|
|
90
94
|
//# 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":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,iBAAiB,EACjB,MAAM,EACN,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,QAAQ,EACR,yBAAyB,EAC1B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { createPipe } from '@enkaku/stream';
|
|
2
2
|
import { createUnsignedToken } from '@enkaku/token';
|
|
3
|
-
import {
|
|
4
|
-
import { ABORTED } from './constants.js';
|
|
3
|
+
import { defer } from '@enkaku/util';
|
|
5
4
|
import { RequestError } from './error.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const result = new Promise((res)=>{
|
|
9
|
-
resolve = res;
|
|
10
|
-
});
|
|
5
|
+
function createController() {
|
|
6
|
+
const deferred = defer();
|
|
11
7
|
return Object.assign(new AbortController(), {
|
|
12
|
-
result,
|
|
13
|
-
ok: (value)=>resolve(
|
|
14
|
-
error: (error)=>
|
|
15
|
-
aborted: ()=>
|
|
8
|
+
result: deferred.promise,
|
|
9
|
+
ok: (value)=>deferred.resolve(value),
|
|
10
|
+
error: (error)=>deferred.reject(error),
|
|
11
|
+
aborted: (signal)=>deferred.reject(signal)
|
|
16
12
|
});
|
|
17
13
|
}
|
|
18
|
-
|
|
19
|
-
return Object.assign(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (result.isOk()) {
|
|
24
|
-
return result.value;
|
|
25
|
-
}
|
|
26
|
-
throw result.error;
|
|
14
|
+
function createRequest(controller, signal, sent) {
|
|
15
|
+
return Object.assign(sent.then(()=>controller.result), {
|
|
16
|
+
abort: (reason)=>{
|
|
17
|
+
void sent.then(()=>{
|
|
18
|
+
controller.abort(reason);
|
|
27
19
|
});
|
|
28
|
-
}
|
|
20
|
+
},
|
|
21
|
+
signal
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function createStream(controller, signal, sent, readable) {
|
|
25
|
+
const request = createRequest(controller, signal, sent);
|
|
26
|
+
return Object.assign(request, {
|
|
27
|
+
close: ()=>request.abort('Close'),
|
|
28
|
+
readable
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
function getCreateMessage(signer, aud) {
|
|
@@ -95,6 +95,27 @@ export class Client {
|
|
|
95
95
|
const message = await this.#createMessage(payload);
|
|
96
96
|
await this.#transport.write(message);
|
|
97
97
|
}
|
|
98
|
+
#handleSignal(rid, controller, providedSignal) {
|
|
99
|
+
const signal = providedSignal ? AbortSignal.any([
|
|
100
|
+
controller.signal,
|
|
101
|
+
providedSignal
|
|
102
|
+
]) : controller.signal;
|
|
103
|
+
signal.addEventListener('abort', ()=>{
|
|
104
|
+
const reason = signal.reason.name ?? signal.reason;
|
|
105
|
+
void this.#write({
|
|
106
|
+
typ: 'abort',
|
|
107
|
+
rid,
|
|
108
|
+
rsn: reason
|
|
109
|
+
});
|
|
110
|
+
if (signal.reason !== 'Close') {
|
|
111
|
+
controller.aborted(signal);
|
|
112
|
+
delete this.#controllers[rid];
|
|
113
|
+
}
|
|
114
|
+
}, {
|
|
115
|
+
once: true
|
|
116
|
+
});
|
|
117
|
+
return signal;
|
|
118
|
+
}
|
|
98
119
|
get disposed() {
|
|
99
120
|
return this.#transport.disposed;
|
|
100
121
|
}
|
|
@@ -113,113 +134,99 @@ export class Client {
|
|
|
113
134
|
await this.#write(payload);
|
|
114
135
|
}
|
|
115
136
|
request(procedure, ...args) {
|
|
116
|
-
const rid = this.#getRandomID();
|
|
117
137
|
const controller = createController();
|
|
138
|
+
const providedSignal = args[0]?.signal;
|
|
139
|
+
if (providedSignal?.aborted) {
|
|
140
|
+
return createRequest(controller, providedSignal, Promise.reject(providedSignal));
|
|
141
|
+
}
|
|
142
|
+
const rid = this.#getRandomID();
|
|
118
143
|
this.#controllers[rid] = controller;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
typ: 'abort',
|
|
122
|
-
rid
|
|
123
|
-
});
|
|
124
|
-
controller.aborted();
|
|
125
|
-
delete this.#controllers[rid];
|
|
126
|
-
});
|
|
127
|
-
const payload = args.length ? {
|
|
144
|
+
const prm = args[0]?.param;
|
|
145
|
+
const payload = prm ? {
|
|
128
146
|
typ: 'request',
|
|
129
147
|
rid,
|
|
130
148
|
prc: procedure,
|
|
131
|
-
prm
|
|
149
|
+
prm
|
|
132
150
|
} : {
|
|
133
151
|
typ: 'request',
|
|
134
152
|
rid,
|
|
135
153
|
prc: procedure
|
|
136
154
|
};
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
id: rid,
|
|
141
|
-
result: controller.result
|
|
142
|
-
};
|
|
143
|
-
});
|
|
144
|
-
return createCall(controller, promise);
|
|
155
|
+
const sent = this.#write(payload);
|
|
156
|
+
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
157
|
+
return createRequest(controller, signal, sent);
|
|
145
158
|
}
|
|
146
159
|
createStream(procedure, ...args) {
|
|
147
|
-
const rid = this.#getRandomID();
|
|
148
160
|
const receive = createPipe();
|
|
149
161
|
const controller = Object.assign(createController(), {
|
|
150
162
|
receive: receive.writable.getWriter()
|
|
151
163
|
});
|
|
164
|
+
const providedSignal = args[0]?.signal;
|
|
165
|
+
if (providedSignal?.aborted) {
|
|
166
|
+
return createStream(controller, providedSignal, Promise.reject(providedSignal), receive.readable);
|
|
167
|
+
}
|
|
168
|
+
const rid = this.#getRandomID();
|
|
152
169
|
this.#controllers[rid] = controller;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
typ: 'abort',
|
|
156
|
-
rid
|
|
157
|
-
});
|
|
158
|
-
controller.aborted();
|
|
159
|
-
delete this.#controllers[rid];
|
|
160
|
-
});
|
|
161
|
-
const action = args.length ? {
|
|
170
|
+
const prm = args[0]?.param;
|
|
171
|
+
const payload = prm ? {
|
|
162
172
|
typ: 'stream',
|
|
163
173
|
rid,
|
|
164
174
|
prc: procedure,
|
|
165
|
-
prm
|
|
175
|
+
prm
|
|
166
176
|
} : {
|
|
167
177
|
typ: 'stream',
|
|
168
178
|
rid,
|
|
169
179
|
prc: procedure
|
|
170
180
|
};
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
id: rid,
|
|
175
|
-
receive: receive.readable,
|
|
176
|
-
result: controller.result
|
|
177
|
-
};
|
|
178
|
-
});
|
|
179
|
-
return createCall(controller, promise);
|
|
181
|
+
const sent = this.#write(payload);
|
|
182
|
+
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
183
|
+
return createStream(controller, signal, sent, receive.readable);
|
|
180
184
|
}
|
|
181
185
|
createChannel(procedure, ...args) {
|
|
182
|
-
const rid = this.#getRandomID();
|
|
183
186
|
const receive = createPipe();
|
|
184
|
-
const send = createPipe();
|
|
185
187
|
const controller = Object.assign(createController(), {
|
|
186
|
-
receive: receive.writable.getWriter()
|
|
187
|
-
send: send.writable
|
|
188
|
+
receive: receive.writable.getWriter()
|
|
188
189
|
});
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
const providedSignal = args[0]?.signal;
|
|
191
|
+
if (providedSignal?.aborted) {
|
|
192
|
+
// no-op
|
|
193
|
+
const send = async (val)=>{};
|
|
194
|
+
const writable = new WritableStream({
|
|
195
|
+
write: send
|
|
194
196
|
});
|
|
195
|
-
controller.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
return Object.assign(createStream(controller, providedSignal, Promise.reject(providedSignal), receive.readable), {
|
|
198
|
+
send,
|
|
199
|
+
writable
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
const rid = this.#getRandomID();
|
|
203
|
+
this.#controllers[rid] = controller;
|
|
204
|
+
const prm = args[0]?.param;
|
|
205
|
+
const payload = prm ? {
|
|
199
206
|
typ: 'channel',
|
|
200
207
|
rid,
|
|
201
208
|
prc: procedure,
|
|
202
|
-
prm
|
|
209
|
+
prm
|
|
203
210
|
} : {
|
|
204
211
|
typ: 'channel',
|
|
205
212
|
rid,
|
|
206
213
|
prc: procedure
|
|
207
214
|
};
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
215
|
+
const sent = this.#write(payload);
|
|
216
|
+
const signal = this.#handleSignal(rid, controller, providedSignal);
|
|
217
|
+
const send = async (val)=>{
|
|
218
|
+
await this.#write({
|
|
219
|
+
typ: 'send',
|
|
220
|
+
rid,
|
|
221
|
+
val
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
const writable = new WritableStream({
|
|
225
|
+
write: send
|
|
226
|
+
});
|
|
227
|
+
return Object.assign(createStream(controller, signal, sent, receive.readable), {
|
|
228
|
+
send,
|
|
229
|
+
writable
|
|
222
230
|
});
|
|
223
|
-
return createCall(controller, promise);
|
|
224
231
|
}
|
|
225
232
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* @module client
|
|
11
11
|
*/
|
|
12
12
|
export { Client } from './client.js';
|
|
13
|
-
export type {
|
|
14
|
-
export { ABORTED } from './constants.js';
|
|
13
|
+
export type { ChannelCall, ChannelDefinitionsType, ClientDefinitionsType, ClientParams, EventDefinitionsType, RequestCall, RequestDefinitionsType, StreamCall, StreamDefinitionsType, } from './client.js';
|
|
15
14
|
export { type ErrorObjectType, RequestError, type RequestErrorParams } from './error.js';
|
|
16
15
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
|
package/lib/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enkaku/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://enkaku.dev",
|
|
6
6
|
"description": "Enkaku RPC client",
|
|
@@ -26,14 +26,13 @@
|
|
|
26
26
|
],
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"
|
|
30
|
-
"@enkaku/
|
|
31
|
-
"@enkaku/
|
|
29
|
+
"@enkaku/util": "^0.9.0",
|
|
30
|
+
"@enkaku/token": "^0.9.0",
|
|
31
|
+
"@enkaku/stream": "^0.9.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@enkaku/
|
|
35
|
-
"@enkaku/
|
|
36
|
-
"@enkaku/util": "^0.8.0"
|
|
34
|
+
"@enkaku/transport": "^0.9.0",
|
|
35
|
+
"@enkaku/protocol": "^0.9.0"
|
|
37
36
|
},
|
|
38
37
|
"scripts": {
|
|
39
38
|
"build:clean": "del lib",
|
package/lib/constants.d.ts
DELETED
package/lib/constants.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAwB,CAAA"}
|
package/lib/constants.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const ABORTED = Symbol.for('aborted');
|