@nmtjs/protocol 0.15.0-beta.3 → 0.15.0-beta.31
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/dist/client/index.js +5 -5
- package/dist/client/protocol.js +1 -1
- package/dist/client/protocol.js.map +1 -1
- package/dist/client/stream.js +2 -2
- package/dist/client/stream.js.map +1 -1
- package/dist/client/versions/v1.d.ts +38 -38
- package/dist/client/versions/v1.js +3 -3
- package/dist/client/versions/v1.js.map +1 -1
- package/dist/common/binary.d.ts +3 -5
- package/dist/common/binary.js.map +1 -1
- package/dist/common/blob.d.ts +3 -3
- package/dist/common/blob.js +3 -3
- package/dist/common/blob.js.map +1 -1
- package/dist/common/enums.js +12 -6
- package/dist/common/enums.js.map +1 -1
- package/dist/common/index.js +6 -6
- package/dist/common/utils.js +1 -1
- package/dist/common/utils.js.map +1 -1
- package/dist/server/format.d.ts +5 -3
- package/dist/server/format.js +2 -0
- package/dist/server/format.js.map +1 -1
- package/dist/server/index.js +7 -7
- package/dist/server/protocol.js +1 -1
- package/dist/server/protocol.js.map +1 -1
- package/dist/server/stream.js.map +1 -1
- package/dist/server/utils.js.map +1 -1
- package/dist/server/versions/v1.d.ts +27 -27
- package/dist/server/versions/v1.js +3 -3
- package/dist/server/versions/v1.js.map +1 -1
- package/package.json +11 -13
- package/src/client/format.ts +49 -0
- package/src/client/index.ts +8 -0
- package/src/client/protocol.ts +107 -0
- package/src/client/stream.ts +222 -0
- package/src/client/versions/v1.ts +205 -0
- package/src/common/binary.ts +70 -0
- package/src/common/blob.ts +94 -0
- package/src/common/constants.ts +2 -0
- package/src/common/enums.ts +62 -0
- package/src/common/index.ts +6 -0
- package/src/common/types.ts +18 -0
- package/src/common/utils.ts +12 -0
- package/src/server/format.ts +117 -0
- package/src/server/index.ts +10 -0
- package/src/server/protocol.ts +97 -0
- package/src/server/stream.ts +51 -0
- package/src/server/types.ts +42 -0
- package/src/server/utils.ts +22 -0
- package/src/server/versions/v1.ts +198 -0
|
@@ -5,73 +5,73 @@ import { ProtocolVersionInterface } from '../protocol.ts';
|
|
|
5
5
|
export declare class ProtocolVersion1 extends ProtocolVersionInterface {
|
|
6
6
|
version: ProtocolVersion;
|
|
7
7
|
decodeMessage(context: MessageContext, buffer: Buffer): {
|
|
8
|
+
callId?: undefined;
|
|
9
|
+
size?: undefined;
|
|
10
|
+
chunk?: undefined;
|
|
11
|
+
streamId?: undefined;
|
|
12
|
+
reason?: undefined;
|
|
8
13
|
type: ClientMessageType.Rpc;
|
|
9
14
|
rpc: {
|
|
10
15
|
callId: number;
|
|
11
16
|
procedure: string;
|
|
12
17
|
payload: unknown;
|
|
13
18
|
};
|
|
14
|
-
|
|
15
|
-
reason?: undefined;
|
|
16
|
-
streamId?: undefined;
|
|
19
|
+
} | {
|
|
17
20
|
size?: undefined;
|
|
18
21
|
chunk?: undefined;
|
|
19
|
-
|
|
22
|
+
streamId?: undefined;
|
|
23
|
+
reason?: undefined;
|
|
24
|
+
rpc?: undefined;
|
|
20
25
|
type: ClientMessageType.RpcPull;
|
|
21
26
|
callId: number;
|
|
22
|
-
|
|
23
|
-
reason?: undefined;
|
|
24
|
-
streamId?: undefined;
|
|
27
|
+
} | {
|
|
25
28
|
size?: undefined;
|
|
26
29
|
chunk?: undefined;
|
|
27
|
-
|
|
30
|
+
streamId?: undefined;
|
|
31
|
+
rpc?: undefined;
|
|
28
32
|
type: ClientMessageType.RpcAbort;
|
|
29
33
|
callId: number;
|
|
30
34
|
reason: string | undefined;
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
} | {
|
|
36
|
+
callId?: undefined;
|
|
33
37
|
size?: undefined;
|
|
34
38
|
chunk?: undefined;
|
|
35
|
-
|
|
39
|
+
rpc?: undefined;
|
|
36
40
|
type: ClientMessageType.ServerStreamAbort;
|
|
37
41
|
streamId: number;
|
|
38
42
|
reason: string | undefined;
|
|
39
|
-
|
|
43
|
+
} | {
|
|
40
44
|
callId?: undefined;
|
|
41
|
-
size?: undefined;
|
|
42
45
|
chunk?: undefined;
|
|
43
|
-
|
|
46
|
+
reason?: undefined;
|
|
47
|
+
rpc?: undefined;
|
|
44
48
|
type: ClientMessageType.ServerStreamPull;
|
|
45
49
|
streamId: number;
|
|
46
50
|
size: number;
|
|
47
|
-
|
|
51
|
+
} | {
|
|
48
52
|
callId?: undefined;
|
|
49
|
-
|
|
53
|
+
size?: undefined;
|
|
50
54
|
chunk?: undefined;
|
|
51
|
-
|
|
55
|
+
rpc?: undefined;
|
|
52
56
|
type: ClientMessageType.ClientStreamAbort;
|
|
53
57
|
streamId: number;
|
|
54
58
|
reason: string | undefined;
|
|
55
|
-
|
|
59
|
+
} | {
|
|
56
60
|
callId?: undefined;
|
|
57
61
|
size?: undefined;
|
|
58
62
|
chunk?: undefined;
|
|
59
|
-
|
|
63
|
+
reason?: undefined;
|
|
64
|
+
rpc?: undefined;
|
|
60
65
|
type: ClientMessageType.ClientStreamEnd;
|
|
61
66
|
streamId: number;
|
|
62
|
-
|
|
67
|
+
} | {
|
|
63
68
|
callId?: undefined;
|
|
64
|
-
reason?: undefined;
|
|
65
69
|
size?: undefined;
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
reason?: undefined;
|
|
71
|
+
rpc?: undefined;
|
|
68
72
|
type: ClientMessageType.ClientStreamPush;
|
|
69
73
|
streamId: number;
|
|
70
74
|
chunk: Buffer<ArrayBufferLike>;
|
|
71
|
-
rpc?: undefined;
|
|
72
|
-
callId?: undefined;
|
|
73
|
-
reason?: undefined;
|
|
74
|
-
size?: undefined;
|
|
75
75
|
};
|
|
76
76
|
encodeMessage<T extends ServerMessageType>(context: MessageContext, messageType: T, payload: ServerMessageTypePayload[T]): ArrayBufferView<ArrayBufferLike>;
|
|
77
77
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { decodeText, encodeNumber, encodeText } from
|
|
2
|
-
import { ClientMessageType, MessageByteLength, ProtocolVersion, ServerMessageType, } from
|
|
3
|
-
import { ProtocolVersionInterface } from
|
|
1
|
+
import { decodeText, encodeNumber, encodeText } from '../../common/binary.js';
|
|
2
|
+
import { ClientMessageType, MessageByteLength, ProtocolVersion, ServerMessageType, } from '../../common/enums.js';
|
|
3
|
+
import { ProtocolVersionInterface } from '../protocol.js';
|
|
4
4
|
export class ProtocolVersion1 extends ProtocolVersionInterface {
|
|
5
5
|
version = ProtocolVersion.v1;
|
|
6
6
|
decodeMessage(context, buffer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../src/server/versions/v1.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,wBAAwB;IAC5D,OAAO,GAAG,eAAe,CAAC,EAAE,CAAA;IAC5B,aAAa,CAAC,OAAuB,EAAE,MAAc;
|
|
1
|
+
{"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../src/server/versions/v1.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,29 +8,27 @@
|
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"hookable": "6.0.0-rc.1",
|
|
11
|
-
"@nmtjs/common": "0.15.0-beta.
|
|
12
|
-
"@nmtjs/
|
|
13
|
-
"@nmtjs/
|
|
11
|
+
"@nmtjs/common": "0.15.0-beta.31",
|
|
12
|
+
"@nmtjs/contract": "0.15.0-beta.31",
|
|
13
|
+
"@nmtjs/type": "0.15.0-beta.31"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@nmtjs/core": "0.15.0-beta.
|
|
16
|
+
"@nmtjs/core": "0.15.0-beta.31"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@nmtjs/common": "0.15.0-beta.
|
|
20
|
-
"@nmtjs/core": "0.15.0-beta.
|
|
21
|
-
"@nmtjs/
|
|
22
|
-
"@nmtjs/
|
|
19
|
+
"@nmtjs/common": "0.15.0-beta.31",
|
|
20
|
+
"@nmtjs/core": "0.15.0-beta.31",
|
|
21
|
+
"@nmtjs/type": "0.15.0-beta.31",
|
|
22
|
+
"@nmtjs/contract": "0.15.0-beta.31"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist",
|
|
26
|
+
"src",
|
|
26
27
|
"LICENSE.md",
|
|
27
28
|
"README.md"
|
|
28
29
|
],
|
|
29
|
-
"version": "0.15.0-beta.
|
|
30
|
+
"version": "0.15.0-beta.31",
|
|
30
31
|
"scripts": {
|
|
31
|
-
"clean-build": "rm -rf ./dist"
|
|
32
|
-
"build": "tsc --declaration --sourcemap",
|
|
33
|
-
"dev": "tsc --watch",
|
|
34
|
-
"type-check": "tsc --noEmit"
|
|
32
|
+
"clean-build": "rm -rf ./dist"
|
|
35
33
|
}
|
|
36
34
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ProtocolBlob } from '../common/blob.ts'
|
|
2
|
+
import type { DecodeRPCContext } from '../common/types.ts'
|
|
3
|
+
import type {
|
|
4
|
+
ProtocolClientBlobStream,
|
|
5
|
+
ProtocolServerBlobStream,
|
|
6
|
+
} from './stream.ts'
|
|
7
|
+
|
|
8
|
+
export interface EncodeRPCContext<T = any> {
|
|
9
|
+
addStream: (blob: ProtocolBlob) => T
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ProtocolRPCEncode = ArrayBufferView
|
|
13
|
+
|
|
14
|
+
export interface BaseClientDecoder {
|
|
15
|
+
decode(buffer: ArrayBufferView): unknown
|
|
16
|
+
decodeRPC(
|
|
17
|
+
buffer: ArrayBufferView,
|
|
18
|
+
context: DecodeRPCContext<
|
|
19
|
+
(options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
|
|
20
|
+
>,
|
|
21
|
+
): unknown
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface BaseClientEncoder {
|
|
25
|
+
encode(data: unknown): ArrayBufferView
|
|
26
|
+
encodeRPC(
|
|
27
|
+
data: unknown,
|
|
28
|
+
context: EncodeRPCContext<ProtocolClientBlobStream>,
|
|
29
|
+
): ProtocolRPCEncode
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export abstract class BaseClientFormat
|
|
33
|
+
implements BaseClientDecoder, BaseClientEncoder
|
|
34
|
+
{
|
|
35
|
+
abstract contentType: string
|
|
36
|
+
|
|
37
|
+
abstract encode(data: unknown): ArrayBufferView
|
|
38
|
+
abstract encodeRPC(
|
|
39
|
+
data: unknown,
|
|
40
|
+
context: EncodeRPCContext,
|
|
41
|
+
): ProtocolRPCEncode
|
|
42
|
+
abstract decode(buffer: ArrayBufferView): unknown
|
|
43
|
+
abstract decodeRPC(
|
|
44
|
+
buffer: ArrayBufferView,
|
|
45
|
+
context: DecodeRPCContext<
|
|
46
|
+
(options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
|
|
47
|
+
>,
|
|
48
|
+
): unknown
|
|
49
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './format.ts'
|
|
2
|
+
export * from './protocol.ts'
|
|
3
|
+
export * from './stream.ts'
|
|
4
|
+
|
|
5
|
+
import { ProtocolVersion } from '../common/enums.ts'
|
|
6
|
+
import { ProtocolVersion1 } from './versions/v1.ts'
|
|
7
|
+
|
|
8
|
+
export const versions = { [ProtocolVersion.v1]: new ProtocolVersion1() }
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ProtocolBlob, ProtocolBlobMetadata } from '../common/blob.ts'
|
|
2
|
+
import type {
|
|
3
|
+
ClientMessageType,
|
|
4
|
+
ProtocolVersion,
|
|
5
|
+
ServerMessageType,
|
|
6
|
+
} from '../common/enums.ts'
|
|
7
|
+
import type { BaseProtocolError, EncodeRPCStreams } from '../common/types.ts'
|
|
8
|
+
import type { BaseClientDecoder, BaseClientEncoder } from './format.ts'
|
|
9
|
+
import type {
|
|
10
|
+
ProtocolClientBlobStream,
|
|
11
|
+
ProtocolServerBlobStream,
|
|
12
|
+
} from './stream.ts'
|
|
13
|
+
import { concat } from '../common/binary.ts'
|
|
14
|
+
|
|
15
|
+
export type MessageContext = {
|
|
16
|
+
decoder: BaseClientDecoder
|
|
17
|
+
encoder: BaseClientEncoder
|
|
18
|
+
addClientStream: (blob: ProtocolBlob) => ProtocolClientBlobStream
|
|
19
|
+
addServerStream: (
|
|
20
|
+
streamId: number,
|
|
21
|
+
metadata: ProtocolBlobMetadata,
|
|
22
|
+
) => (options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
|
|
23
|
+
transport: { send: (buffer: ArrayBufferView) => void }
|
|
24
|
+
streamId: () => number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type ClientMessageTypePayload = {
|
|
28
|
+
[ClientMessageType.Rpc]: { callId: number; procedure: string; payload: any }
|
|
29
|
+
[ClientMessageType.RpcAbort]: { callId: number; reason?: string }
|
|
30
|
+
[ClientMessageType.RpcPull]: { callId: number }
|
|
31
|
+
[ClientMessageType.ClientStreamPush]: {
|
|
32
|
+
streamId: number
|
|
33
|
+
chunk: ArrayBufferView
|
|
34
|
+
}
|
|
35
|
+
[ClientMessageType.ClientStreamEnd]: { streamId: number }
|
|
36
|
+
[ClientMessageType.ClientStreamAbort]: { streamId: number; reason?: string }
|
|
37
|
+
[ClientMessageType.ServerStreamPull]: { streamId: number; size: number }
|
|
38
|
+
[ClientMessageType.ServerStreamAbort]: { streamId: number; reason?: string }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type ServerMessageTypePayload = {
|
|
42
|
+
[ServerMessageType.RpcResponse]: {
|
|
43
|
+
callId: number
|
|
44
|
+
result?: any
|
|
45
|
+
error?: BaseProtocolError
|
|
46
|
+
streams?: EncodeRPCStreams
|
|
47
|
+
}
|
|
48
|
+
[ServerMessageType.RpcStreamResponse]: {
|
|
49
|
+
callId: number
|
|
50
|
+
error?: BaseProtocolError
|
|
51
|
+
}
|
|
52
|
+
[ServerMessageType.RpcStreamChunk]: { callId: number; chunk: ArrayBufferView }
|
|
53
|
+
[ServerMessageType.RpcStreamEnd]: { callId: number }
|
|
54
|
+
[ServerMessageType.RpcStreamAbort]: { callId: number; reason?: string }
|
|
55
|
+
[ServerMessageType.ServerStreamAbort]: { streamId: number; reason?: string }
|
|
56
|
+
[ServerMessageType.ServerStreamEnd]: { streamId: number }
|
|
57
|
+
[ServerMessageType.ServerStreamPush]: {
|
|
58
|
+
streamId: number
|
|
59
|
+
chunk: ArrayBufferView
|
|
60
|
+
}
|
|
61
|
+
[ServerMessageType.ClientStreamAbort]: { streamId: number; reason?: string }
|
|
62
|
+
[ServerMessageType.ClientStreamPull]: { streamId: number; size: number }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export abstract class ProtocolVersionInterface {
|
|
66
|
+
abstract version: ProtocolVersion
|
|
67
|
+
abstract decodeMessage(
|
|
68
|
+
context: MessageContext,
|
|
69
|
+
buffer: ArrayBufferView,
|
|
70
|
+
): {
|
|
71
|
+
[K in keyof ServerMessageTypePayload]: {
|
|
72
|
+
type: K
|
|
73
|
+
} & ServerMessageTypePayload[K]
|
|
74
|
+
}[keyof ServerMessageTypePayload]
|
|
75
|
+
abstract encodeMessage<T extends ClientMessageType>(
|
|
76
|
+
context: MessageContext,
|
|
77
|
+
messageType: T,
|
|
78
|
+
payload: ClientMessageTypePayload[T],
|
|
79
|
+
): any
|
|
80
|
+
|
|
81
|
+
protected encode(...chunks: (ArrayBuffer | ArrayBufferView)[]) {
|
|
82
|
+
return concat(...chunks)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export class ProtocolError extends Error implements BaseProtocolError {
|
|
87
|
+
code: string
|
|
88
|
+
data?: any
|
|
89
|
+
|
|
90
|
+
constructor(code: string, message?: string, data?: any) {
|
|
91
|
+
super(message)
|
|
92
|
+
this.code = code
|
|
93
|
+
this.data = data
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
get message() {
|
|
97
|
+
return `${this.code} ${super.message}`
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
toString() {
|
|
101
|
+
return `${this.code} ${this.message}`
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
toJSON() {
|
|
105
|
+
return { code: this.code, message: this.message, data: this.data }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { Callback, DuplexStreamOptions } from '@nmtjs/common'
|
|
2
|
+
import { DuplexStream } from '@nmtjs/common'
|
|
3
|
+
|
|
4
|
+
import type {
|
|
5
|
+
ProtocolBlobInterface,
|
|
6
|
+
ProtocolBlobMetadata,
|
|
7
|
+
} from '../common/blob.ts'
|
|
8
|
+
import { concat, decodeText, encodeText } from '../common/binary.ts'
|
|
9
|
+
import { kBlobKey } from '../common/constants.ts'
|
|
10
|
+
|
|
11
|
+
export class ProtocolClientBlobStream
|
|
12
|
+
extends DuplexStream<any, ArrayBufferView>
|
|
13
|
+
implements ProtocolBlobInterface
|
|
14
|
+
{
|
|
15
|
+
readonly [kBlobKey] = true
|
|
16
|
+
|
|
17
|
+
#queue: Uint8Array
|
|
18
|
+
#reader: ReadableStreamDefaultReader
|
|
19
|
+
#sourceReader: ReadableStreamDefaultReader | null = null
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
readonly source: ReadableStream,
|
|
23
|
+
readonly id: number,
|
|
24
|
+
readonly metadata: ProtocolBlobMetadata,
|
|
25
|
+
) {
|
|
26
|
+
let sourceReader: ReadableStreamDefaultReader | null = null
|
|
27
|
+
super({
|
|
28
|
+
start: () => {
|
|
29
|
+
sourceReader = source.getReader()
|
|
30
|
+
},
|
|
31
|
+
pull: async (controller) => {
|
|
32
|
+
const { done, value } = await sourceReader!.read()
|
|
33
|
+
if (done) {
|
|
34
|
+
controller.close()
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
const chunk = value
|
|
38
|
+
controller.enqueue(
|
|
39
|
+
chunk instanceof Uint8Array
|
|
40
|
+
? chunk
|
|
41
|
+
: new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
|
|
42
|
+
)
|
|
43
|
+
},
|
|
44
|
+
transform: (chunk) => {
|
|
45
|
+
if (chunk instanceof ArrayBuffer) {
|
|
46
|
+
return new Uint8Array(chunk)
|
|
47
|
+
} else if (chunk instanceof Uint8Array) {
|
|
48
|
+
return chunk
|
|
49
|
+
} else if (typeof chunk === 'string') {
|
|
50
|
+
return encodeText(chunk)
|
|
51
|
+
} else {
|
|
52
|
+
throw new Error(
|
|
53
|
+
'Invalid chunk data type. Expected ArrayBuffer, Uint8Array, or string.',
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
cancel: (reason) => {
|
|
58
|
+
// Use reader.cancel() if reader exists (stream is locked), otherwise source.cancel()
|
|
59
|
+
if (sourceReader) {
|
|
60
|
+
sourceReader.cancel(reason)
|
|
61
|
+
} else {
|
|
62
|
+
source.cancel(reason)
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
this.#queue = new Uint8Array(0)
|
|
68
|
+
this.#reader = this.readable.getReader()
|
|
69
|
+
this.#sourceReader = sourceReader
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async abort(reason = 'Stream aborted') {
|
|
73
|
+
await this.#reader.cancel(reason)
|
|
74
|
+
this.#reader.releaseLock()
|
|
75
|
+
this.#sourceReader?.releaseLock()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async end() {
|
|
79
|
+
// Release the reader lock when the stream is finished
|
|
80
|
+
this.#reader.releaseLock()
|
|
81
|
+
this.#sourceReader?.releaseLock()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async read(size: number) {
|
|
85
|
+
while (this.#queue.byteLength < size) {
|
|
86
|
+
const { done, value } = await this.#reader.read()
|
|
87
|
+
if (done) {
|
|
88
|
+
if (this.#queue.byteLength > 0) {
|
|
89
|
+
const chunk = this.#queue
|
|
90
|
+
this.#queue = new Uint8Array(0)
|
|
91
|
+
return chunk
|
|
92
|
+
}
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
const buffer = value
|
|
96
|
+
this.#queue = concat(this.#queue, buffer)
|
|
97
|
+
}
|
|
98
|
+
const chunk = this.#queue.subarray(0, size)
|
|
99
|
+
this.#queue = this.#queue.subarray(size)
|
|
100
|
+
return chunk
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export abstract class ProtocolServerStreamInterface<
|
|
105
|
+
O = unknown,
|
|
106
|
+
> extends DuplexStream<O, ArrayBufferView> {
|
|
107
|
+
async *[Symbol.asyncIterator]() {
|
|
108
|
+
const reader = this.readable.getReader()
|
|
109
|
+
try {
|
|
110
|
+
while (true) {
|
|
111
|
+
const { done, value } = await reader.read()
|
|
112
|
+
if (!done) yield value
|
|
113
|
+
else break
|
|
114
|
+
}
|
|
115
|
+
} finally {
|
|
116
|
+
reader.releaseLock()
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export class ProtocolServerStream<T = unknown>
|
|
122
|
+
extends ProtocolServerStreamInterface<T>
|
|
123
|
+
implements ProtocolServerStreamInterface<T> {}
|
|
124
|
+
|
|
125
|
+
export class ProtocolServerRPCStream<
|
|
126
|
+
T = unknown,
|
|
127
|
+
> extends ProtocolServerStream<T> {
|
|
128
|
+
createAsyncIterable(onDone: Callback) {
|
|
129
|
+
return {
|
|
130
|
+
[Symbol.asyncIterator]: () => {
|
|
131
|
+
const iterator = this[Symbol.asyncIterator]()
|
|
132
|
+
return {
|
|
133
|
+
async next() {
|
|
134
|
+
const result = await iterator.next()
|
|
135
|
+
if (result.done) onDone()
|
|
136
|
+
return result
|
|
137
|
+
},
|
|
138
|
+
async return(value) {
|
|
139
|
+
onDone()
|
|
140
|
+
return iterator.return?.(value) ?? { done: true, value }
|
|
141
|
+
},
|
|
142
|
+
async throw(error) {
|
|
143
|
+
onDone()
|
|
144
|
+
return iterator.throw?.(error) ?? Promise.reject(error)
|
|
145
|
+
},
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export class ProtocolServerBlobStream
|
|
153
|
+
extends ProtocolServerStreamInterface<ArrayBufferView>
|
|
154
|
+
implements ProtocolBlobInterface, Blob
|
|
155
|
+
{
|
|
156
|
+
readonly [kBlobKey] = true
|
|
157
|
+
|
|
158
|
+
constructor(
|
|
159
|
+
readonly metadata: ProtocolBlobMetadata,
|
|
160
|
+
options?: DuplexStreamOptions<ArrayBufferView, ArrayBufferView>,
|
|
161
|
+
) {
|
|
162
|
+
super(options)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
get size() {
|
|
166
|
+
return this.metadata.size || Number.NaN
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
get type() {
|
|
170
|
+
return this.metadata.type || 'application/octet-stream'
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async text() {
|
|
174
|
+
const chunks: ArrayBufferView[] = []
|
|
175
|
+
for await (const chunk of this) chunks.push(chunk)
|
|
176
|
+
return decodeText(concat(...chunks))
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async bytes() {
|
|
180
|
+
const chunks: ArrayBufferView[] = []
|
|
181
|
+
for await (const chunk of this) chunks.push(chunk)
|
|
182
|
+
return concat(...chunks)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async arrayBuffer() {
|
|
186
|
+
const bytes = await this.bytes()
|
|
187
|
+
return bytes.buffer
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
async json<T = unknown>() {
|
|
191
|
+
const text = await this.text()
|
|
192
|
+
return JSON.parse(text) as T
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
stream() {
|
|
196
|
+
const transform = new TransformStream<ArrayBufferView, Uint8Array>({
|
|
197
|
+
transform: (chunk, controller) => {
|
|
198
|
+
controller.enqueue(
|
|
199
|
+
chunk instanceof Uint8Array
|
|
200
|
+
? chunk
|
|
201
|
+
: new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
|
|
202
|
+
)
|
|
203
|
+
},
|
|
204
|
+
})
|
|
205
|
+
this.readable.pipeThrough(transform)
|
|
206
|
+
return transform.readable as ReadableStream<Uint8Array<ArrayBuffer>>
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Throws an error
|
|
211
|
+
*/
|
|
212
|
+
async formData(): Promise<FormData> {
|
|
213
|
+
throw new Error('Method not implemented.')
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Throws an error
|
|
218
|
+
*/
|
|
219
|
+
slice(): Blob {
|
|
220
|
+
throw new Error('Unable to slice')
|
|
221
|
+
}
|
|
222
|
+
}
|