pipecircuit 0.0.1
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/README.md +11 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/packed_frame.d.ts +25 -0
- package/dist/packed_frame.d.ts.map +1 -0
- package/dist/packed_frame.js +144 -0
- package/dist/packed_frame.js.map +1 -0
- package/dist/pipe.d.ts +11 -0
- package/dist/pipe.d.ts.map +1 -0
- package/dist/pipe.js +13 -0
- package/dist/pipe.js.map +1 -0
- package/dist/postcard.d.ts +32 -0
- package/dist/postcard.d.ts.map +1 -0
- package/dist/postcard.js +52 -0
- package/dist/postcard.js.map +1 -0
- package/dist/web_worker.d.ts +36 -0
- package/dist/web_worker.d.ts.map +1 -0
- package/dist/web_worker.js +157 -0
- package/dist/web_worker.js.map +1 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# pipecircuit
|
|
2
|
+
|
|
3
|
+
Browser fittings and Postcard program boundaries for Rust-first Pipecircuit
|
|
4
|
+
applications.
|
|
5
|
+
|
|
6
|
+
The authoritative program remains Rust. This package provides transferable
|
|
7
|
+
Web Worker transport, strict packed framing, and command-specific TypeScript
|
|
8
|
+
outcome inference for generated Postcard contracts.
|
|
9
|
+
|
|
10
|
+
See the [Pipecircuit repository](https://github.com/KenAKAFrosty/pipecircuit-scaffold/tree/main/libraries/browser)
|
|
11
|
+
for the Rust crate, architecture, and Green Room example.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MAXIMUM_PACKED_FRAME_PAYLOAD_BYTE_LENGTH, PACKED_FRAME_HEADER_BYTE_LENGTH, PackedFrameError, } from "./packed_frame.js";
|
|
2
|
+
export { Pipe, type TransportTo } from "./pipe.js";
|
|
3
|
+
export { PostcardPipe, PostcardPipeError, type DecodedPostcard, type PostcardContractCodec, type PostcardOutcomeFor, type PostcardPipeFailure, type TaggedPostcardValue, } from "./postcard.js";
|
|
4
|
+
export { TransferableWebWorkerFitting, WorkerTransportError, installTransferableWebWorkerProgram, type PackedByteProgram, type TransferableWebWorkerEvidence, type TransferableWorkerEndpoint, type TransferableWorkerScope, type WorkerTransportFailure, } from "./web_worker.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wCAAwC,EACxC,+BAA+B,EAC/B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,mCAAmC,EACnC,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MAXIMUM_PACKED_FRAME_PAYLOAD_BYTE_LENGTH, PACKED_FRAME_HEADER_BYTE_LENGTH, PackedFrameError, } from "./packed_frame.js";
|
|
2
|
+
export { Pipe } from "./pipe.js";
|
|
3
|
+
export { PostcardPipe, PostcardPipeError, } from "./postcard.js";
|
|
4
|
+
export { TransferableWebWorkerFitting, WorkerTransportError, installTransferableWebWorkerProgram, } from "./web_worker.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wCAAwC,EACxC,+BAA+B,EAC/B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,iBAAiB,GAMlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,mCAAmC,GAMpC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const MAXIMUM_PACKED_FRAME_PAYLOAD_BYTE_LENGTH: number;
|
|
2
|
+
export declare const PACKED_FRAME_HEADER_BYTE_LENGTH = 16;
|
|
3
|
+
export type PackedFrameFailure = "invalid-buffer" | "frame-too-short" | "invalid-magic" | "unsupported-revision" | "invalid-kind" | "invalid-request-id" | "payload-too-long" | "payload-length-mismatch";
|
|
4
|
+
export declare class PackedFrameError extends Error {
|
|
5
|
+
readonly failure: PackedFrameFailure;
|
|
6
|
+
constructor(failure: PackedFrameFailure);
|
|
7
|
+
}
|
|
8
|
+
export declare function encodeRequestFrame(requestId: number, payload: Uint8Array<ArrayBufferLike>): ArrayBuffer;
|
|
9
|
+
export declare function decodeRequestFrame(value: unknown): {
|
|
10
|
+
readonly buffer: ArrayBuffer;
|
|
11
|
+
readonly requestId: number;
|
|
12
|
+
readonly payload: Uint8Array<ArrayBuffer>;
|
|
13
|
+
};
|
|
14
|
+
export declare function encodeResponseFrame(requestId: number, payload: Uint8Array<ArrayBufferLike>, reusable: ArrayBuffer): ArrayBuffer;
|
|
15
|
+
export declare function decodeResponseFrame(value: unknown): {
|
|
16
|
+
readonly requestId: number;
|
|
17
|
+
readonly payload: Uint8Array<ArrayBuffer>;
|
|
18
|
+
};
|
|
19
|
+
export declare function encodeFailureFrame(requestId: number, failure: string, reusable: ArrayBuffer): ArrayBuffer;
|
|
20
|
+
export declare function decodeFailureFrame(value: unknown): {
|
|
21
|
+
readonly requestId: number;
|
|
22
|
+
readonly failure: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function decodeFrameKind(value: unknown): "response" | "failure";
|
|
25
|
+
//# sourceMappingURL=packed_frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packed_frame.d.ts","sourceRoot":"","sources":["../src/packed_frame.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wCAAwC,QAAqB,CAAC;AAO3E,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAQlD,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,sBAAsB,GACtB,cAAc,GACd,oBAAoB,GACpB,kBAAkB,GAClB,yBAAyB,CAAC;AAE9B,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,OAAO,EAAE,kBAAkB,CAAC;IAE5C,YAAmB,OAAO,EAAE,kBAAkB,EAI7C;CACF;AAmGD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,CAAC,eAAe,CAAC,GACnC,WAAW,CAOb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAC3C,CAUA;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,CAAC,eAAe,CAAC,EACpC,QAAQ,EAAE,WAAW,GACpB,WAAW,CAQb;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAC3C,CASA;AAKD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,WAAW,CASb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CASA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAUtE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
const PACKED_FRAME_MAGIC = 0x50495045;
|
|
2
|
+
const PACKED_FRAME_REVISION = 1;
|
|
3
|
+
const MAXIMUM_REQUEST_ID = 0xffff_ffff;
|
|
4
|
+
export const MAXIMUM_PACKED_FRAME_PAYLOAD_BYTE_LENGTH = 16 * 1_024 * 1_024;
|
|
5
|
+
const MAGIC_OFFSET = 0;
|
|
6
|
+
const REVISION_OFFSET = 4;
|
|
7
|
+
const KIND_OFFSET = 6;
|
|
8
|
+
const REQUEST_ID_OFFSET = 8;
|
|
9
|
+
const PAYLOAD_BYTE_LENGTH_OFFSET = 12;
|
|
10
|
+
export const PACKED_FRAME_HEADER_BYTE_LENGTH = 16;
|
|
11
|
+
var PackedFrameKind;
|
|
12
|
+
(function (PackedFrameKind) {
|
|
13
|
+
PackedFrameKind[PackedFrameKind["Request"] = 1] = "Request";
|
|
14
|
+
PackedFrameKind[PackedFrameKind["Response"] = 2] = "Response";
|
|
15
|
+
PackedFrameKind[PackedFrameKind["Failure"] = 3] = "Failure";
|
|
16
|
+
})(PackedFrameKind || (PackedFrameKind = {}));
|
|
17
|
+
export class PackedFrameError extends Error {
|
|
18
|
+
failure;
|
|
19
|
+
constructor(failure) {
|
|
20
|
+
super(failure);
|
|
21
|
+
this.name = "PackedFrameError";
|
|
22
|
+
this.failure = failure;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function validateRequestId(requestId) {
|
|
26
|
+
if (!Number.isInteger(requestId) ||
|
|
27
|
+
requestId <= 0 ||
|
|
28
|
+
requestId > MAXIMUM_REQUEST_ID) {
|
|
29
|
+
throw new PackedFrameError("invalid-request-id");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function validatePayloadByteLength(payloadByteLength) {
|
|
33
|
+
if (!Number.isSafeInteger(payloadByteLength) ||
|
|
34
|
+
payloadByteLength < 0 ||
|
|
35
|
+
payloadByteLength > MAXIMUM_PACKED_FRAME_PAYLOAD_BYTE_LENGTH) {
|
|
36
|
+
throw new PackedFrameError("payload-too-long");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function encodeFrame(requestId, kind, payloadByteLength, encodePayload, reusable) {
|
|
40
|
+
validateRequestId(requestId);
|
|
41
|
+
validatePayloadByteLength(payloadByteLength);
|
|
42
|
+
const frameByteLength = PACKED_FRAME_HEADER_BYTE_LENGTH + payloadByteLength;
|
|
43
|
+
const buffer = reusable?.byteLength === frameByteLength
|
|
44
|
+
? reusable
|
|
45
|
+
: new ArrayBuffer(frameByteLength);
|
|
46
|
+
const header = new DataView(buffer, 0, PACKED_FRAME_HEADER_BYTE_LENGTH);
|
|
47
|
+
header.setUint32(MAGIC_OFFSET, PACKED_FRAME_MAGIC);
|
|
48
|
+
header.setUint16(REVISION_OFFSET, PACKED_FRAME_REVISION);
|
|
49
|
+
header.setUint16(KIND_OFFSET, kind);
|
|
50
|
+
header.setUint32(REQUEST_ID_OFFSET, requestId);
|
|
51
|
+
header.setUint32(PAYLOAD_BYTE_LENGTH_OFFSET, payloadByteLength);
|
|
52
|
+
encodePayload(new Uint8Array(buffer, PACKED_FRAME_HEADER_BYTE_LENGTH, payloadByteLength));
|
|
53
|
+
return buffer;
|
|
54
|
+
}
|
|
55
|
+
function decodeFrame(value) {
|
|
56
|
+
if (!(value instanceof ArrayBuffer)) {
|
|
57
|
+
throw new PackedFrameError("invalid-buffer");
|
|
58
|
+
}
|
|
59
|
+
if (value.byteLength < PACKED_FRAME_HEADER_BYTE_LENGTH) {
|
|
60
|
+
throw new PackedFrameError("frame-too-short");
|
|
61
|
+
}
|
|
62
|
+
const header = new DataView(value, 0, PACKED_FRAME_HEADER_BYTE_LENGTH);
|
|
63
|
+
if (header.getUint32(MAGIC_OFFSET) !== PACKED_FRAME_MAGIC) {
|
|
64
|
+
throw new PackedFrameError("invalid-magic");
|
|
65
|
+
}
|
|
66
|
+
if (header.getUint16(REVISION_OFFSET) !== PACKED_FRAME_REVISION) {
|
|
67
|
+
throw new PackedFrameError("unsupported-revision");
|
|
68
|
+
}
|
|
69
|
+
const kind = header.getUint16(KIND_OFFSET);
|
|
70
|
+
if (kind !== PackedFrameKind.Request &&
|
|
71
|
+
kind !== PackedFrameKind.Response &&
|
|
72
|
+
kind !== PackedFrameKind.Failure) {
|
|
73
|
+
throw new PackedFrameError("invalid-kind");
|
|
74
|
+
}
|
|
75
|
+
const requestId = header.getUint32(REQUEST_ID_OFFSET);
|
|
76
|
+
validateRequestId(requestId);
|
|
77
|
+
const payloadByteLength = header.getUint32(PAYLOAD_BYTE_LENGTH_OFFSET);
|
|
78
|
+
validatePayloadByteLength(payloadByteLength);
|
|
79
|
+
if (value.byteLength !==
|
|
80
|
+
PACKED_FRAME_HEADER_BYTE_LENGTH + payloadByteLength) {
|
|
81
|
+
throw new PackedFrameError("payload-length-mismatch");
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
buffer: value,
|
|
85
|
+
requestId,
|
|
86
|
+
kind,
|
|
87
|
+
payload: new Uint8Array(value, PACKED_FRAME_HEADER_BYTE_LENGTH, payloadByteLength),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function encodeRequestFrame(requestId, payload) {
|
|
91
|
+
return encodeFrame(requestId, PackedFrameKind.Request, payload.byteLength, (destination) => destination.set(payload));
|
|
92
|
+
}
|
|
93
|
+
export function decodeRequestFrame(value) {
|
|
94
|
+
const frame = decodeFrame(value);
|
|
95
|
+
if (frame.kind !== PackedFrameKind.Request) {
|
|
96
|
+
throw new PackedFrameError("invalid-kind");
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
buffer: frame.buffer,
|
|
100
|
+
requestId: frame.requestId,
|
|
101
|
+
payload: frame.payload,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function encodeResponseFrame(requestId, payload, reusable) {
|
|
105
|
+
return encodeFrame(requestId, PackedFrameKind.Response, payload.byteLength, (destination) => destination.set(payload), reusable);
|
|
106
|
+
}
|
|
107
|
+
export function decodeResponseFrame(value) {
|
|
108
|
+
const frame = decodeFrame(value);
|
|
109
|
+
if (frame.kind !== PackedFrameKind.Response) {
|
|
110
|
+
throw new PackedFrameError("invalid-kind");
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
requestId: frame.requestId,
|
|
114
|
+
payload: frame.payload,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const textEncoder = new TextEncoder();
|
|
118
|
+
const textDecoder = new TextDecoder();
|
|
119
|
+
export function encodeFailureFrame(requestId, failure, reusable) {
|
|
120
|
+
const payload = textEncoder.encode(failure);
|
|
121
|
+
return encodeFrame(requestId, PackedFrameKind.Failure, payload.byteLength, (destination) => destination.set(payload), reusable);
|
|
122
|
+
}
|
|
123
|
+
export function decodeFailureFrame(value) {
|
|
124
|
+
const frame = decodeFrame(value);
|
|
125
|
+
if (frame.kind !== PackedFrameKind.Failure) {
|
|
126
|
+
throw new PackedFrameError("invalid-kind");
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
requestId: frame.requestId,
|
|
130
|
+
failure: textDecoder.decode(frame.payload),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export function decodeFrameKind(value) {
|
|
134
|
+
const frame = decodeFrame(value);
|
|
135
|
+
switch (frame.kind) {
|
|
136
|
+
case PackedFrameKind.Response:
|
|
137
|
+
return "response";
|
|
138
|
+
case PackedFrameKind.Failure:
|
|
139
|
+
return "failure";
|
|
140
|
+
case PackedFrameKind.Request:
|
|
141
|
+
throw new PackedFrameError("invalid-kind");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=packed_frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packed_frame.js","sourceRoot":"","sources":["../src/packed_frame.ts"],"names":[],"mappings":"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"}
|
package/dist/pipe.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface TransportTo<Input, Output> {
|
|
2
|
+
send(input: Input): Promise<Output>;
|
|
3
|
+
close(): void;
|
|
4
|
+
}
|
|
5
|
+
export declare class Pipe<Input, Output> {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(transport: TransportTo<Input, Output>);
|
|
8
|
+
send(input: Input): Promise<Output>;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=pipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,KAAK,EAAE,MAAM;IACxC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,IAAI,CAAC,KAAK,EAAE,MAAM;;IAG7B,YAAmB,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAEvD;IAEM,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzC;IAEM,KAAK,IAAI,IAAI,CAEnB;CACF"}
|
package/dist/pipe.js
ADDED
package/dist/pipe.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../src/pipe.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,IAAI;IACN,UAAU,CAA6B;IAEhD,YAAmB,SAAqC;QACtD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,IAAI,CAAC,KAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Pipe } from "./pipe.js";
|
|
2
|
+
export type DecodedPostcard<Value> = Value extends bigint ? bigint | number : Value extends object ? {
|
|
3
|
+
[Key in keyof Value]: DecodedPostcard<Value[Key]>;
|
|
4
|
+
} : Value;
|
|
5
|
+
export type TaggedPostcardValue = {
|
|
6
|
+
readonly tag: PropertyKey;
|
|
7
|
+
readonly value?: unknown;
|
|
8
|
+
};
|
|
9
|
+
export type PostcardOutcomeFor<Command extends TaggedPostcardValue, Outcome extends TaggedPostcardValue> = DecodedPostcard<Extract<Outcome, {
|
|
10
|
+
tag: Command["tag"];
|
|
11
|
+
}> extends {
|
|
12
|
+
value: infer Value;
|
|
13
|
+
} ? Value : undefined>;
|
|
14
|
+
export interface PostcardContractCodec<Command extends TaggedPostcardValue, Outcome extends TaggedPostcardValue> {
|
|
15
|
+
encode(command: Command): Uint8Array<ArrayBufferLike>;
|
|
16
|
+
decode(bytes: Uint8Array<ArrayBuffer>): {
|
|
17
|
+
readonly value: DecodedPostcard<Outcome>;
|
|
18
|
+
readonly remainder: Uint8Array<ArrayBufferLike>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export type PostcardPipeFailure = "invalid-command" | "invalid-outcome" | "trailing-outcome-bytes" | "unexpected-outcome";
|
|
22
|
+
export declare class PostcardPipeError extends Error {
|
|
23
|
+
readonly failure: PostcardPipeFailure;
|
|
24
|
+
constructor(failure: PostcardPipeFailure, cause?: unknown);
|
|
25
|
+
}
|
|
26
|
+
export declare class PostcardPipe<Command extends TaggedPostcardValue, Outcome extends TaggedPostcardValue> {
|
|
27
|
+
#private;
|
|
28
|
+
constructor(pipe: Pipe<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>, codec: PostcardContractCodec<Command, Outcome>);
|
|
29
|
+
exchange<const Input extends Command>(command: Input): Promise<PostcardOutcomeFor<Input, Outcome>>;
|
|
30
|
+
close(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=postcard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postcard.d.ts","sourceRoot":"","sources":["../src/postcard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI,KAAK,SAAS,MAAM,GACrD,MAAM,GAAG,MAAM,GACf,KAAK,SAAS,MAAM,GAClB;KAAG,GAAG,IAAI,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAAE,GACrD,KAAK,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAC5B,OAAO,SAAS,mBAAmB,EACnC,OAAO,SAAS,mBAAmB,IACjC,eAAe,CACjB,OAAO,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,GACpE,KAAK,GACL,SAAS,CACd,CAAC;AAEF,MAAM,WAAW,qBAAqB,CACpC,OAAO,SAAS,mBAAmB,EACnC,OAAO,SAAS,mBAAmB;IAEnC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG;QACtC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;KACjD,CAAC;CACH;AAED,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,iBAAiB,GACjB,wBAAwB,GACxB,oBAAoB,CAAC;AAEzB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAE7C,YAAmB,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,OAAO,EAI/D;CACF;AAED,qBAAa,YAAY,CACvB,OAAO,SAAS,mBAAmB,EACnC,OAAO,SAAS,mBAAmB;;IAKnC,YACE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,EAC5D,KAAK,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAI/C;IAEY,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,OAAO,EAC/C,OAAO,EAAE,KAAK,GACb,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAuB7C;IAEM,KAAK,IAAI,IAAI,CAEnB;CACF"}
|
package/dist/postcard.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export class PostcardPipeError extends Error {
|
|
2
|
+
failure;
|
|
3
|
+
constructor(failure, cause) {
|
|
4
|
+
super(failure, { cause });
|
|
5
|
+
this.name = "PostcardPipeError";
|
|
6
|
+
this.failure = failure;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class PostcardPipe {
|
|
10
|
+
#pipe;
|
|
11
|
+
#codec;
|
|
12
|
+
constructor(pipe, codec) {
|
|
13
|
+
this.#pipe = pipe;
|
|
14
|
+
this.#codec = codec;
|
|
15
|
+
}
|
|
16
|
+
async exchange(command) {
|
|
17
|
+
let encoded;
|
|
18
|
+
try {
|
|
19
|
+
encoded = this.#codec.encode(command);
|
|
20
|
+
}
|
|
21
|
+
catch (cause) {
|
|
22
|
+
throw new PostcardPipeError("invalid-command", cause);
|
|
23
|
+
}
|
|
24
|
+
const response = await this.#pipe.send(transferableBytes(encoded));
|
|
25
|
+
try {
|
|
26
|
+
const decoded = this.#codec.decode(response);
|
|
27
|
+
if (decoded.remainder.byteLength !== 0) {
|
|
28
|
+
throw new PostcardPipeError("trailing-outcome-bytes");
|
|
29
|
+
}
|
|
30
|
+
if (decoded.value.tag !== command.tag) {
|
|
31
|
+
throw new PostcardPipeError("unexpected-outcome");
|
|
32
|
+
}
|
|
33
|
+
return decoded.value.value;
|
|
34
|
+
}
|
|
35
|
+
catch (cause) {
|
|
36
|
+
if (cause instanceof PostcardPipeError) {
|
|
37
|
+
throw cause;
|
|
38
|
+
}
|
|
39
|
+
throw new PostcardPipeError("invalid-outcome", cause);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
close() {
|
|
43
|
+
this.#pipe.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function transferableBytes(bytes) {
|
|
47
|
+
if (bytes.buffer instanceof ArrayBuffer) {
|
|
48
|
+
return new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
49
|
+
}
|
|
50
|
+
return Uint8Array.from(bytes);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=postcard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postcard.js","sourceRoot":"","sources":["../src/postcard.ts"],"names":[],"mappings":"AAuCA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1B,OAAO,CAAsB;IAE7C,YAAmB,OAA4B,EAAE,KAAe;QAC9D,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IAId,KAAK,CAAyD;IAC9D,MAAM,CAA0C;IAEzD,YACE,IAA4D,EAC5D,KAA8C;QAE9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,QAAQ,CACnB,OAAc;QAEd,IAAI,OAAoC,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAA2C,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED,SAAS,iBAAiB,CACxB,KAAkC;IAElC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE,CAAC;QACxC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { TransportTo } from "./pipe.js";
|
|
2
|
+
export interface TransferableWorkerEndpoint {
|
|
3
|
+
postMessage(message: unknown, transfer: Transferable[]): void;
|
|
4
|
+
addEventListener(type: "message", listener: (event: MessageEvent<unknown>) => void): void;
|
|
5
|
+
addEventListener(type: "error", listener: (event: ErrorEvent) => void): void;
|
|
6
|
+
addEventListener(type: "messageerror", listener: (event: MessageEvent<unknown>) => void): void;
|
|
7
|
+
terminate(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface TransferableWorkerScope {
|
|
10
|
+
postMessage(message: unknown, transfer: Transferable[]): void;
|
|
11
|
+
addEventListener(type: "message", listener: (event: MessageEvent<unknown>) => void): void;
|
|
12
|
+
}
|
|
13
|
+
export interface PackedByteProgram {
|
|
14
|
+
exchange(input: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBufferLike> | Promise<Uint8Array<ArrayBufferLike>>;
|
|
15
|
+
}
|
|
16
|
+
export type WorkerTransportFailure = "backpressured" | "closed" | "worker-error" | "message-error" | "protocol-error" | "remote-failure";
|
|
17
|
+
export declare class WorkerTransportError extends Error {
|
|
18
|
+
readonly failure: WorkerTransportFailure;
|
|
19
|
+
constructor(failure: WorkerTransportFailure, detail?: string);
|
|
20
|
+
}
|
|
21
|
+
export type TransferableWebWorkerEvidence = {
|
|
22
|
+
readonly sentMessageCount: number;
|
|
23
|
+
readonly receivedMessageCount: number;
|
|
24
|
+
readonly sentByteCount: number;
|
|
25
|
+
readonly receivedByteCount: number;
|
|
26
|
+
readonly detachedOutboundBufferCount: number;
|
|
27
|
+
};
|
|
28
|
+
export declare class TransferableWebWorkerFitting implements TransportTo<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>> {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(worker: TransferableWorkerEndpoint, maximumPendingRequestCount: number);
|
|
31
|
+
send(input: Uint8Array<ArrayBuffer>): Promise<Uint8Array<ArrayBuffer>>;
|
|
32
|
+
close(): void;
|
|
33
|
+
evidence(): TransferableWebWorkerEvidence;
|
|
34
|
+
}
|
|
35
|
+
export declare function installTransferableWebWorkerProgram(scope: TransferableWorkerScope, program: PackedByteProgram): void;
|
|
36
|
+
//# sourceMappingURL=web_worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web_worker.d.ts","sourceRoot":"","sources":["../src/web_worker.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9D,gBAAgB,CACd,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,GAC/C,IAAI,CAAC;IACR,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7E,gBAAgB,CACd,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,GAC/C,IAAI,CAAC;IACR,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9D,gBAAgB,CACd,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,GAC/C,IAAI,CAAC;CACT;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CACN,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAE5B,UAAU,CAAC,eAAe,CAAC,GAC3B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,QAAQ,GACR,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CAAC;AAErB,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,OAAO,EAAE,sBAAsB,CAAC;IAEhD,YAAmB,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAIlE;CACF;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C,CAAC;AAOF,qBAAa,4BACX,YACE,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;;IAgB/D,YACE,MAAM,EAAE,0BAA0B,EAClC,0BAA0B,EAAE,MAAM,EAkBnC;IAEM,IAAI,CACT,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CA8BlC;IAEM,KAAK,IAAI,IAAI,CAEnB;IAEM,QAAQ,IAAI,6BAA6B,CAQ/C;CAoEF;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAoCN"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { decodeFailureFrame, decodeFrameKind, decodeRequestFrame, decodeResponseFrame, encodeFailureFrame, encodeRequestFrame, encodeResponseFrame, } from "./packed_frame.js";
|
|
2
|
+
export class WorkerTransportError extends Error {
|
|
3
|
+
failure;
|
|
4
|
+
constructor(failure, detail) {
|
|
5
|
+
super(detail === undefined ? failure : `${failure}: ${detail}`);
|
|
6
|
+
this.name = "WorkerTransportError";
|
|
7
|
+
this.failure = failure;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class TransferableWebWorkerFitting {
|
|
11
|
+
#worker;
|
|
12
|
+
#maximumPendingRequestCount;
|
|
13
|
+
#pending = new Map();
|
|
14
|
+
#nextRequestId = 1;
|
|
15
|
+
#closed = false;
|
|
16
|
+
#sentMessageCount = 0;
|
|
17
|
+
#receivedMessageCount = 0;
|
|
18
|
+
#sentByteCount = 0;
|
|
19
|
+
#receivedByteCount = 0;
|
|
20
|
+
#detachedOutboundBufferCount = 0;
|
|
21
|
+
constructor(worker, maximumPendingRequestCount) {
|
|
22
|
+
if (!Number.isSafeInteger(maximumPendingRequestCount) ||
|
|
23
|
+
maximumPendingRequestCount <= 0 ||
|
|
24
|
+
maximumPendingRequestCount > 0xffff_ffff) {
|
|
25
|
+
throw new RangeError("maximumPendingRequestCount must be positive");
|
|
26
|
+
}
|
|
27
|
+
this.#worker = worker;
|
|
28
|
+
this.#maximumPendingRequestCount = maximumPendingRequestCount;
|
|
29
|
+
worker.addEventListener("message", (event) => this.#receive(event.data));
|
|
30
|
+
worker.addEventListener("error", (event) => {
|
|
31
|
+
this.#closeWith(new WorkerTransportError("worker-error", event.message));
|
|
32
|
+
});
|
|
33
|
+
worker.addEventListener("messageerror", () => {
|
|
34
|
+
this.#closeWith(new WorkerTransportError("message-error"));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
send(input) {
|
|
38
|
+
if (this.#closed) {
|
|
39
|
+
return Promise.reject(new WorkerTransportError("closed"));
|
|
40
|
+
}
|
|
41
|
+
if (this.#pending.size >= this.#maximumPendingRequestCount) {
|
|
42
|
+
return Promise.reject(new WorkerTransportError("backpressured"));
|
|
43
|
+
}
|
|
44
|
+
const requestId = this.#takeRequestId();
|
|
45
|
+
const frame = encodeRequestFrame(requestId, input);
|
|
46
|
+
const frameByteLength = frame.byteLength;
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
this.#pending.set(requestId, { resolve, reject });
|
|
49
|
+
try {
|
|
50
|
+
this.#worker.postMessage(frame, [frame]);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.#pending.delete(requestId);
|
|
54
|
+
reject(new WorkerTransportError("worker-error", error instanceof Error ? error.message : String(error)));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.#sentMessageCount += 1;
|
|
58
|
+
this.#sentByteCount += frameByteLength;
|
|
59
|
+
if (frame.byteLength === 0) {
|
|
60
|
+
this.#detachedOutboundBufferCount += 1;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
close() {
|
|
65
|
+
this.#closeWith(new WorkerTransportError("closed"));
|
|
66
|
+
}
|
|
67
|
+
evidence() {
|
|
68
|
+
return {
|
|
69
|
+
sentMessageCount: this.#sentMessageCount,
|
|
70
|
+
receivedMessageCount: this.#receivedMessageCount,
|
|
71
|
+
sentByteCount: this.#sentByteCount,
|
|
72
|
+
receivedByteCount: this.#receivedByteCount,
|
|
73
|
+
detachedOutboundBufferCount: this.#detachedOutboundBufferCount,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
#takeRequestId() {
|
|
77
|
+
for (;;) {
|
|
78
|
+
const requestId = this.#nextRequestId;
|
|
79
|
+
this.#nextRequestId = requestId === 0xffff_ffff ? 1 : requestId + 1;
|
|
80
|
+
if (!this.#pending.has(requestId)) {
|
|
81
|
+
return requestId;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
#receive(value) {
|
|
86
|
+
if (this.#closed) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (!(value instanceof ArrayBuffer)) {
|
|
90
|
+
this.#closeWith(new WorkerTransportError("protocol-error"));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.#receivedMessageCount += 1;
|
|
94
|
+
this.#receivedByteCount += value.byteLength;
|
|
95
|
+
try {
|
|
96
|
+
const kind = decodeFrameKind(value);
|
|
97
|
+
if (kind === "response") {
|
|
98
|
+
const response = decodeResponseFrame(value);
|
|
99
|
+
const pending = this.#pending.get(response.requestId);
|
|
100
|
+
if (pending === undefined) {
|
|
101
|
+
this.#closeWith(new WorkerTransportError("protocol-error"));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.#pending.delete(response.requestId);
|
|
105
|
+
pending.resolve(response.payload);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const failure = decodeFailureFrame(value);
|
|
109
|
+
const pending = this.#pending.get(failure.requestId);
|
|
110
|
+
if (pending === undefined) {
|
|
111
|
+
this.#closeWith(new WorkerTransportError("protocol-error"));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.#pending.delete(failure.requestId);
|
|
115
|
+
pending.reject(new WorkerTransportError("remote-failure", failure.failure));
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
this.#closeWith(new WorkerTransportError("protocol-error", error instanceof Error ? error.message : String(error)));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
#failAll(reason) {
|
|
122
|
+
for (const pending of this.#pending.values()) {
|
|
123
|
+
pending.reject(reason);
|
|
124
|
+
}
|
|
125
|
+
this.#pending.clear();
|
|
126
|
+
}
|
|
127
|
+
#closeWith(reason) {
|
|
128
|
+
if (this.#closed) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.#closed = true;
|
|
132
|
+
this.#worker.terminate();
|
|
133
|
+
this.#failAll(reason);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export function installTransferableWebWorkerProgram(scope, program) {
|
|
137
|
+
scope.addEventListener("message", (event) => {
|
|
138
|
+
const request = decodeRequestFrame(event.data);
|
|
139
|
+
let exchange;
|
|
140
|
+
try {
|
|
141
|
+
exchange = program.exchange(request.payload);
|
|
142
|
+
}
|
|
143
|
+
catch (reason) {
|
|
144
|
+
const response = encodeFailureFrame(request.requestId, reason instanceof Error ? reason.message : String(reason), request.buffer);
|
|
145
|
+
scope.postMessage(response, [response]);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
void Promise.resolve(exchange).then((output) => {
|
|
149
|
+
const response = encodeResponseFrame(request.requestId, output, request.buffer);
|
|
150
|
+
scope.postMessage(response, [response]);
|
|
151
|
+
}, (reason) => {
|
|
152
|
+
const response = encodeFailureFrame(request.requestId, reason instanceof Error ? reason.message : String(reason), request.buffer);
|
|
153
|
+
scope.postMessage(response, [response]);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=web_worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web_worker.js","sourceRoot":"","sources":["../src/web_worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pipecircuit",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Browser fittings and Postcard program boundaries for Pipecircuit",
|
|
5
|
+
"license": "MIT OR Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/KenAKAFrosty/pipecircuit-scaffold.git",
|
|
9
|
+
"directory": "libraries/browser/typescript"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc --project tsconfig.build.json",
|
|
25
|
+
"check": "tsc --noEmit",
|
|
26
|
+
"prepublishOnly": "npm run check && npm test && npm run build",
|
|
27
|
+
"prepare": "npm run build",
|
|
28
|
+
"test": "vitest run"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"typescript": "7.0.2",
|
|
32
|
+
"vitest": "5.0.2"
|
|
33
|
+
}
|
|
34
|
+
}
|