capnweb 0.6.1 → 0.8.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/README.md +41 -1
- package/dist/index-bun.cjs +3600 -0
- package/dist/index-bun.cjs.map +1 -0
- package/dist/index-bun.d.cts +125 -0
- package/dist/index-bun.d.ts +125 -0
- package/dist/index-bun.js +3583 -0
- package/dist/index-bun.js.map +1 -0
- package/dist/index-workers-CiDKhXAE.d.cts +445 -0
- package/dist/index-workers-CiDKhXAE.d.ts +445 -0
- package/dist/index-workers.cjs +101 -13
- package/dist/index-workers.cjs.map +1 -1
- package/dist/index-workers.d.cts +1 -1
- package/dist/index-workers.d.ts +1 -1
- package/dist/index-workers.js +101 -13
- package/dist/index-workers.js.map +1 -1
- package/dist/index.cjs +101 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -444
- package/dist/index.d.ts +2 -444
- package/dist/index.js +101 -13
- package/dist/index.js.map +1 -1
- package/package.json +16 -9
package/dist/index-workers.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { RpcCompatible, RpcPromise, RpcSession, RpcSessionOptions, RpcStub, RpcTarget, RpcTransport, deserialize, newHttpBatchRpcResponse, newHttpBatchRpcSession, newMessagePortRpcSession, newWebSocketRpcSession, newWorkersRpcResponse, newWorkersWebSocketRpcResponse, nodeHttpBatchRpcResponse, serialize } from './index.cjs';
|
|
1
|
+
export { c as RpcCompatible, e as RpcPromise, f as RpcSession, b as RpcSessionOptions, d as RpcStub, g as RpcTarget, R as RpcTransport, h as deserialize, n as newHttpBatchRpcResponse, i as newHttpBatchRpcSession, j as newMessagePortRpcSession, k as newWebSocketRpcSession, l as newWorkersRpcResponse, m as newWorkersWebSocketRpcResponse, o as nodeHttpBatchRpcResponse, s as serialize } from './index-workers-CiDKhXAE.cjs';
|
|
2
2
|
import 'node:http';
|
package/dist/index-workers.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { RpcCompatible, RpcPromise, RpcSession, RpcSessionOptions, RpcStub, RpcTarget, RpcTransport, deserialize, newHttpBatchRpcResponse, newHttpBatchRpcSession, newMessagePortRpcSession, newWebSocketRpcSession, newWorkersRpcResponse, newWorkersWebSocketRpcResponse, nodeHttpBatchRpcResponse, serialize } from './index.js';
|
|
1
|
+
export { c as RpcCompatible, e as RpcPromise, f as RpcSession, b as RpcSessionOptions, d as RpcStub, g as RpcTarget, R as RpcTransport, h as deserialize, n as newHttpBatchRpcResponse, i as newHttpBatchRpcSession, j as newMessagePortRpcSession, k as newWebSocketRpcSession, l as newWorkersRpcResponse, m as newWorkersWebSocketRpcResponse, o as nodeHttpBatchRpcResponse, s as serialize } from './index-workers-CiDKhXAE.js';
|
|
2
2
|
import 'node:http';
|
package/dist/index-workers.js
CHANGED
|
@@ -71,6 +71,8 @@ function typeForRpc(value) {
|
|
|
71
71
|
return "request";
|
|
72
72
|
case Response.prototype:
|
|
73
73
|
return "response";
|
|
74
|
+
case Blob.prototype:
|
|
75
|
+
return "blob";
|
|
74
76
|
// TODO: All other structured clone types.
|
|
75
77
|
case RpcStub.prototype:
|
|
76
78
|
return "stub";
|
|
@@ -541,6 +543,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
541
543
|
case "bigint":
|
|
542
544
|
case "date":
|
|
543
545
|
case "bytes":
|
|
546
|
+
case "blob":
|
|
544
547
|
case "error":
|
|
545
548
|
case "undefined":
|
|
546
549
|
return value;
|
|
@@ -777,6 +780,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
777
780
|
case "primitive":
|
|
778
781
|
case "bigint":
|
|
779
782
|
case "bytes":
|
|
783
|
+
case "blob":
|
|
780
784
|
case "date":
|
|
781
785
|
case "error":
|
|
782
786
|
case "undefined":
|
|
@@ -879,6 +883,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
879
883
|
case "primitive":
|
|
880
884
|
case "bigint":
|
|
881
885
|
case "bytes":
|
|
886
|
+
case "blob":
|
|
882
887
|
case "date":
|
|
883
888
|
case "error":
|
|
884
889
|
case "undefined":
|
|
@@ -970,6 +975,7 @@ function followPath(value, parent, path, owner) {
|
|
|
970
975
|
case "primitive":
|
|
971
976
|
case "bigint":
|
|
972
977
|
case "bytes":
|
|
978
|
+
case "blob":
|
|
973
979
|
case "date":
|
|
974
980
|
case "error":
|
|
975
981
|
case "headers":
|
|
@@ -1296,6 +1302,10 @@ var NullExporter = class {
|
|
|
1296
1302
|
}
|
|
1297
1303
|
};
|
|
1298
1304
|
var NULL_EXPORTER = new NullExporter();
|
|
1305
|
+
async function streamToBlob(stream, type) {
|
|
1306
|
+
let b = await new Response(stream).blob();
|
|
1307
|
+
return b.type === type ? b : b.slice(0, b.size, type);
|
|
1308
|
+
}
|
|
1299
1309
|
var ERROR_TYPES = {
|
|
1300
1310
|
Error,
|
|
1301
1311
|
EvalError,
|
|
@@ -1383,8 +1393,10 @@ var Devaluator = class _Devaluator {
|
|
|
1383
1393
|
}
|
|
1384
1394
|
case "bigint":
|
|
1385
1395
|
return ["bigint", value.toString()];
|
|
1386
|
-
case "date":
|
|
1387
|
-
|
|
1396
|
+
case "date": {
|
|
1397
|
+
const time = value.getTime();
|
|
1398
|
+
return ["date", Number.isNaN(time) ? null : time];
|
|
1399
|
+
}
|
|
1388
1400
|
case "bytes": {
|
|
1389
1401
|
let bytes = value;
|
|
1390
1402
|
if (bytes.toBase64) {
|
|
@@ -1470,14 +1482,52 @@ var Devaluator = class _Devaluator {
|
|
|
1470
1482
|
}
|
|
1471
1483
|
return ["response", body, init];
|
|
1472
1484
|
}
|
|
1485
|
+
case "blob": {
|
|
1486
|
+
let blob = value;
|
|
1487
|
+
let readable = blob.stream();
|
|
1488
|
+
let hook = streamImpl.createReadableStreamHook(readable);
|
|
1489
|
+
let importId = this.exporter.createPipe(readable, hook);
|
|
1490
|
+
return ["blob", blob.type, ["readable", importId]];
|
|
1491
|
+
}
|
|
1473
1492
|
case "error": {
|
|
1474
1493
|
let e = value;
|
|
1475
1494
|
let rewritten = this.exporter.onSendError(e);
|
|
1476
1495
|
if (rewritten) {
|
|
1477
1496
|
e = rewritten;
|
|
1478
1497
|
}
|
|
1498
|
+
let anyE = e;
|
|
1499
|
+
let props;
|
|
1500
|
+
let captureProp = (key, val) => {
|
|
1501
|
+
let exportsBefore = this.exports?.length ?? 0;
|
|
1502
|
+
try {
|
|
1503
|
+
let encoded = this.devaluateImpl(val, e, depth + 1);
|
|
1504
|
+
if (!props) props = {};
|
|
1505
|
+
props[key] = encoded;
|
|
1506
|
+
} catch (err) {
|
|
1507
|
+
if (this.exports && this.exports.length > exportsBefore) {
|
|
1508
|
+
let tail = this.exports.splice(exportsBefore);
|
|
1509
|
+
try {
|
|
1510
|
+
this.exporter.unexport(tail);
|
|
1511
|
+
} catch (err2) {
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
};
|
|
1516
|
+
for (let key of Object.keys(e)) {
|
|
1517
|
+
if (key === "name" || key === "message" || key === "stack") continue;
|
|
1518
|
+
captureProp(key, anyE[key]);
|
|
1519
|
+
}
|
|
1520
|
+
if ("cause" in e) {
|
|
1521
|
+
captureProp("cause", anyE.cause);
|
|
1522
|
+
}
|
|
1523
|
+
if (e instanceof AggregateError) {
|
|
1524
|
+
captureProp("errors", e.errors);
|
|
1525
|
+
}
|
|
1479
1526
|
let result = ["error", e.name, e.message];
|
|
1480
|
-
if (
|
|
1527
|
+
if (props) {
|
|
1528
|
+
result.push(rewritten && rewritten.stack ? rewritten.stack : null);
|
|
1529
|
+
result.push(props);
|
|
1530
|
+
} else if (rewritten && rewritten.stack) {
|
|
1481
1531
|
result.push(rewritten.stack);
|
|
1482
1532
|
}
|
|
1483
1533
|
return result;
|
|
@@ -1577,6 +1627,12 @@ function fixBrokenRequestBody(request, body) {
|
|
|
1577
1627
|
});
|
|
1578
1628
|
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1579
1629
|
}
|
|
1630
|
+
function streamToBlobPromise(stream, type) {
|
|
1631
|
+
let promise = streamToBlob(stream, type).then((blob) => {
|
|
1632
|
+
return new PayloadStubHook(RpcPayload.fromAppReturn(blob));
|
|
1633
|
+
});
|
|
1634
|
+
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1635
|
+
}
|
|
1580
1636
|
var Evaluator = class _Evaluator {
|
|
1581
1637
|
constructor(importer) {
|
|
1582
1638
|
this.importer = importer;
|
|
@@ -1612,6 +1668,9 @@ var Evaluator = class _Evaluator {
|
|
|
1612
1668
|
}
|
|
1613
1669
|
break;
|
|
1614
1670
|
case "date":
|
|
1671
|
+
if (value[1] === null) {
|
|
1672
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
1673
|
+
}
|
|
1615
1674
|
if (typeof value[1] == "number") {
|
|
1616
1675
|
return new Date(value[1]);
|
|
1617
1676
|
}
|
|
@@ -1637,10 +1696,22 @@ var Evaluator = class _Evaluator {
|
|
|
1637
1696
|
case "error":
|
|
1638
1697
|
if (value.length >= 3 && typeof value[1] === "string" && typeof value[2] === "string") {
|
|
1639
1698
|
let cls = ERROR_TYPES[value[1]] || Error;
|
|
1640
|
-
let result = new cls(value[2]);
|
|
1699
|
+
let result = cls === AggregateError ? new cls([], value[2]) : new cls(value[2]);
|
|
1641
1700
|
if (typeof value[3] === "string") {
|
|
1642
1701
|
result.stack = value[3];
|
|
1643
1702
|
}
|
|
1703
|
+
if (value.length >= 5) {
|
|
1704
|
+
let props = value[4];
|
|
1705
|
+
if (!props || typeof props !== "object" || Array.isArray(props)) {
|
|
1706
|
+
break;
|
|
1707
|
+
}
|
|
1708
|
+
let anyResult = result;
|
|
1709
|
+
let propsObj = props;
|
|
1710
|
+
for (let key of Object.keys(propsObj)) {
|
|
1711
|
+
if (key === "name" || key === "message" || key === "stack") continue;
|
|
1712
|
+
anyResult[key] = this.evaluateImpl(propsObj[key], result, key);
|
|
1713
|
+
}
|
|
1714
|
+
}
|
|
1644
1715
|
return result;
|
|
1645
1716
|
}
|
|
1646
1717
|
break;
|
|
@@ -1705,6 +1776,17 @@ var Evaluator = class _Evaluator {
|
|
|
1705
1776
|
}
|
|
1706
1777
|
return new Response(body, init);
|
|
1707
1778
|
}
|
|
1779
|
+
case "blob": {
|
|
1780
|
+
if (value.length !== 3 || typeof value[1] !== "string") break;
|
|
1781
|
+
let contentType = value[1];
|
|
1782
|
+
let content = this.evaluateImpl(value[2], parent, property);
|
|
1783
|
+
if (!(content instanceof ReadableStream)) {
|
|
1784
|
+
throw new TypeError("Blob content must be serialized as a ReadableStream.");
|
|
1785
|
+
}
|
|
1786
|
+
let promise = streamToBlobPromise(content, contentType);
|
|
1787
|
+
this.promises.push({ promise, parent, property });
|
|
1788
|
+
return promise;
|
|
1789
|
+
}
|
|
1708
1790
|
case "import":
|
|
1709
1791
|
case "pipeline": {
|
|
1710
1792
|
if (value.length < 2 || value.length > 4) {
|
|
@@ -2045,12 +2127,7 @@ var RpcSessionImpl = class {
|
|
|
2045
2127
|
this.options = options;
|
|
2046
2128
|
this.exports.push({ hook: mainHook, refcount: 1 });
|
|
2047
2129
|
this.imports.push(new ImportTableEntry(this, 0, false));
|
|
2048
|
-
|
|
2049
|
-
let abortPromise = new Promise((resolve, reject) => {
|
|
2050
|
-
rejectFunc = reject;
|
|
2051
|
-
});
|
|
2052
|
-
this.cancelReadLoop = rejectFunc;
|
|
2053
|
-
this.readLoop(abortPromise).catch((err) => this.abort(err));
|
|
2130
|
+
this.readLoop().catch((err) => this.abort(err));
|
|
2054
2131
|
}
|
|
2055
2132
|
exports = [];
|
|
2056
2133
|
reverseExports = /* @__PURE__ */ new Map();
|
|
@@ -2334,7 +2411,8 @@ var RpcSessionImpl = class {
|
|
|
2334
2411
|
}
|
|
2335
2412
|
abort(error, trySendAbortMessage = true) {
|
|
2336
2413
|
if (this.abortReason !== void 0) return;
|
|
2337
|
-
this.cancelReadLoop(error);
|
|
2414
|
+
this.cancelReadLoop?.(error);
|
|
2415
|
+
this.cancelReadLoop = void 0;
|
|
2338
2416
|
if (trySendAbortMessage) {
|
|
2339
2417
|
try {
|
|
2340
2418
|
this.transport.send(JSON.stringify(["abort", Devaluator.devaluate(error, void 0, this)])).catch((err) => {
|
|
@@ -2370,9 +2448,19 @@ var RpcSessionImpl = class {
|
|
|
2370
2448
|
this.exports[i].hook.dispose();
|
|
2371
2449
|
}
|
|
2372
2450
|
}
|
|
2373
|
-
async readLoop(
|
|
2451
|
+
async readLoop() {
|
|
2374
2452
|
while (!this.abortReason) {
|
|
2375
|
-
let
|
|
2453
|
+
let readCanceled = Promise.withResolvers();
|
|
2454
|
+
this.cancelReadLoop = readCanceled.reject;
|
|
2455
|
+
let msgText;
|
|
2456
|
+
try {
|
|
2457
|
+
msgText = await Promise.race([this.transport.receive(), readCanceled.promise]);
|
|
2458
|
+
} finally {
|
|
2459
|
+
if (this.cancelReadLoop === readCanceled.reject) {
|
|
2460
|
+
this.cancelReadLoop = void 0;
|
|
2461
|
+
}
|
|
2462
|
+
}
|
|
2463
|
+
let msg = JSON.parse(msgText);
|
|
2376
2464
|
if (this.abortReason) break;
|
|
2377
2465
|
if (msg instanceof Array) {
|
|
2378
2466
|
switch (msg[0]) {
|