capnweb 0.7.0 → 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 +1 -0
- package/dist/index-bun.cjs +101 -13
- package/dist/index-bun.cjs.map +1 -1
- package/dist/index-bun.d.cts +2 -2
- package/dist/index-bun.d.ts +2 -2
- package/dist/index-bun.js +101 -13
- package/dist/index-bun.js.map +1 -1
- package/dist/{index-workers-C1na2_sM.d.cts → index-workers-CiDKhXAE.d.cts} +1 -0
- package/dist/{index-workers-C1na2_sM.d.ts → index-workers-CiDKhXAE.d.ts} +1 -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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +101 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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-
|
|
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.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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-
|
|
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.js
CHANGED
|
@@ -68,6 +68,8 @@ function typeForRpc(value) {
|
|
|
68
68
|
return "request";
|
|
69
69
|
case Response.prototype:
|
|
70
70
|
return "response";
|
|
71
|
+
case Blob.prototype:
|
|
72
|
+
return "blob";
|
|
71
73
|
// TODO: All other structured clone types.
|
|
72
74
|
case RpcStub.prototype:
|
|
73
75
|
return "stub";
|
|
@@ -538,6 +540,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
538
540
|
case "bigint":
|
|
539
541
|
case "date":
|
|
540
542
|
case "bytes":
|
|
543
|
+
case "blob":
|
|
541
544
|
case "error":
|
|
542
545
|
case "undefined":
|
|
543
546
|
return value;
|
|
@@ -774,6 +777,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
774
777
|
case "primitive":
|
|
775
778
|
case "bigint":
|
|
776
779
|
case "bytes":
|
|
780
|
+
case "blob":
|
|
777
781
|
case "date":
|
|
778
782
|
case "error":
|
|
779
783
|
case "undefined":
|
|
@@ -876,6 +880,7 @@ var RpcPayload = class _RpcPayload {
|
|
|
876
880
|
case "primitive":
|
|
877
881
|
case "bigint":
|
|
878
882
|
case "bytes":
|
|
883
|
+
case "blob":
|
|
879
884
|
case "date":
|
|
880
885
|
case "error":
|
|
881
886
|
case "undefined":
|
|
@@ -967,6 +972,7 @@ function followPath(value, parent, path, owner) {
|
|
|
967
972
|
case "primitive":
|
|
968
973
|
case "bigint":
|
|
969
974
|
case "bytes":
|
|
975
|
+
case "blob":
|
|
970
976
|
case "date":
|
|
971
977
|
case "error":
|
|
972
978
|
case "headers":
|
|
@@ -1293,6 +1299,10 @@ var NullExporter = class {
|
|
|
1293
1299
|
}
|
|
1294
1300
|
};
|
|
1295
1301
|
var NULL_EXPORTER = new NullExporter();
|
|
1302
|
+
async function streamToBlob(stream, type) {
|
|
1303
|
+
let b = await new Response(stream).blob();
|
|
1304
|
+
return b.type === type ? b : b.slice(0, b.size, type);
|
|
1305
|
+
}
|
|
1296
1306
|
var ERROR_TYPES = {
|
|
1297
1307
|
Error,
|
|
1298
1308
|
EvalError,
|
|
@@ -1380,8 +1390,10 @@ var Devaluator = class _Devaluator {
|
|
|
1380
1390
|
}
|
|
1381
1391
|
case "bigint":
|
|
1382
1392
|
return ["bigint", value.toString()];
|
|
1383
|
-
case "date":
|
|
1384
|
-
|
|
1393
|
+
case "date": {
|
|
1394
|
+
const time = value.getTime();
|
|
1395
|
+
return ["date", Number.isNaN(time) ? null : time];
|
|
1396
|
+
}
|
|
1385
1397
|
case "bytes": {
|
|
1386
1398
|
let bytes = value;
|
|
1387
1399
|
if (bytes.toBase64) {
|
|
@@ -1467,14 +1479,52 @@ var Devaluator = class _Devaluator {
|
|
|
1467
1479
|
}
|
|
1468
1480
|
return ["response", body, init];
|
|
1469
1481
|
}
|
|
1482
|
+
case "blob": {
|
|
1483
|
+
let blob = value;
|
|
1484
|
+
let readable = blob.stream();
|
|
1485
|
+
let hook = streamImpl.createReadableStreamHook(readable);
|
|
1486
|
+
let importId = this.exporter.createPipe(readable, hook);
|
|
1487
|
+
return ["blob", blob.type, ["readable", importId]];
|
|
1488
|
+
}
|
|
1470
1489
|
case "error": {
|
|
1471
1490
|
let e = value;
|
|
1472
1491
|
let rewritten = this.exporter.onSendError(e);
|
|
1473
1492
|
if (rewritten) {
|
|
1474
1493
|
e = rewritten;
|
|
1475
1494
|
}
|
|
1495
|
+
let anyE = e;
|
|
1496
|
+
let props;
|
|
1497
|
+
let captureProp = (key, val) => {
|
|
1498
|
+
let exportsBefore = this.exports?.length ?? 0;
|
|
1499
|
+
try {
|
|
1500
|
+
let encoded = this.devaluateImpl(val, e, depth + 1);
|
|
1501
|
+
if (!props) props = {};
|
|
1502
|
+
props[key] = encoded;
|
|
1503
|
+
} catch (err) {
|
|
1504
|
+
if (this.exports && this.exports.length > exportsBefore) {
|
|
1505
|
+
let tail = this.exports.splice(exportsBefore);
|
|
1506
|
+
try {
|
|
1507
|
+
this.exporter.unexport(tail);
|
|
1508
|
+
} catch (err2) {
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
};
|
|
1513
|
+
for (let key of Object.keys(e)) {
|
|
1514
|
+
if (key === "name" || key === "message" || key === "stack") continue;
|
|
1515
|
+
captureProp(key, anyE[key]);
|
|
1516
|
+
}
|
|
1517
|
+
if ("cause" in e) {
|
|
1518
|
+
captureProp("cause", anyE.cause);
|
|
1519
|
+
}
|
|
1520
|
+
if (e instanceof AggregateError) {
|
|
1521
|
+
captureProp("errors", e.errors);
|
|
1522
|
+
}
|
|
1476
1523
|
let result = ["error", e.name, e.message];
|
|
1477
|
-
if (
|
|
1524
|
+
if (props) {
|
|
1525
|
+
result.push(rewritten && rewritten.stack ? rewritten.stack : null);
|
|
1526
|
+
result.push(props);
|
|
1527
|
+
} else if (rewritten && rewritten.stack) {
|
|
1478
1528
|
result.push(rewritten.stack);
|
|
1479
1529
|
}
|
|
1480
1530
|
return result;
|
|
@@ -1574,6 +1624,12 @@ function fixBrokenRequestBody(request, body) {
|
|
|
1574
1624
|
});
|
|
1575
1625
|
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1576
1626
|
}
|
|
1627
|
+
function streamToBlobPromise(stream, type) {
|
|
1628
|
+
let promise = streamToBlob(stream, type).then((blob) => {
|
|
1629
|
+
return new PayloadStubHook(RpcPayload.fromAppReturn(blob));
|
|
1630
|
+
});
|
|
1631
|
+
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1632
|
+
}
|
|
1577
1633
|
var Evaluator = class _Evaluator {
|
|
1578
1634
|
constructor(importer) {
|
|
1579
1635
|
this.importer = importer;
|
|
@@ -1609,6 +1665,9 @@ var Evaluator = class _Evaluator {
|
|
|
1609
1665
|
}
|
|
1610
1666
|
break;
|
|
1611
1667
|
case "date":
|
|
1668
|
+
if (value[1] === null) {
|
|
1669
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
1670
|
+
}
|
|
1612
1671
|
if (typeof value[1] == "number") {
|
|
1613
1672
|
return new Date(value[1]);
|
|
1614
1673
|
}
|
|
@@ -1634,10 +1693,22 @@ var Evaluator = class _Evaluator {
|
|
|
1634
1693
|
case "error":
|
|
1635
1694
|
if (value.length >= 3 && typeof value[1] === "string" && typeof value[2] === "string") {
|
|
1636
1695
|
let cls = ERROR_TYPES[value[1]] || Error;
|
|
1637
|
-
let result = new cls(value[2]);
|
|
1696
|
+
let result = cls === AggregateError ? new cls([], value[2]) : new cls(value[2]);
|
|
1638
1697
|
if (typeof value[3] === "string") {
|
|
1639
1698
|
result.stack = value[3];
|
|
1640
1699
|
}
|
|
1700
|
+
if (value.length >= 5) {
|
|
1701
|
+
let props = value[4];
|
|
1702
|
+
if (!props || typeof props !== "object" || Array.isArray(props)) {
|
|
1703
|
+
break;
|
|
1704
|
+
}
|
|
1705
|
+
let anyResult = result;
|
|
1706
|
+
let propsObj = props;
|
|
1707
|
+
for (let key of Object.keys(propsObj)) {
|
|
1708
|
+
if (key === "name" || key === "message" || key === "stack") continue;
|
|
1709
|
+
anyResult[key] = this.evaluateImpl(propsObj[key], result, key);
|
|
1710
|
+
}
|
|
1711
|
+
}
|
|
1641
1712
|
return result;
|
|
1642
1713
|
}
|
|
1643
1714
|
break;
|
|
@@ -1702,6 +1773,17 @@ var Evaluator = class _Evaluator {
|
|
|
1702
1773
|
}
|
|
1703
1774
|
return new Response(body, init);
|
|
1704
1775
|
}
|
|
1776
|
+
case "blob": {
|
|
1777
|
+
if (value.length !== 3 || typeof value[1] !== "string") break;
|
|
1778
|
+
let contentType = value[1];
|
|
1779
|
+
let content = this.evaluateImpl(value[2], parent, property);
|
|
1780
|
+
if (!(content instanceof ReadableStream)) {
|
|
1781
|
+
throw new TypeError("Blob content must be serialized as a ReadableStream.");
|
|
1782
|
+
}
|
|
1783
|
+
let promise = streamToBlobPromise(content, contentType);
|
|
1784
|
+
this.promises.push({ promise, parent, property });
|
|
1785
|
+
return promise;
|
|
1786
|
+
}
|
|
1705
1787
|
case "import":
|
|
1706
1788
|
case "pipeline": {
|
|
1707
1789
|
if (value.length < 2 || value.length > 4) {
|
|
@@ -2042,12 +2124,7 @@ var RpcSessionImpl = class {
|
|
|
2042
2124
|
this.options = options;
|
|
2043
2125
|
this.exports.push({ hook: mainHook, refcount: 1 });
|
|
2044
2126
|
this.imports.push(new ImportTableEntry(this, 0, false));
|
|
2045
|
-
|
|
2046
|
-
let abortPromise = new Promise((resolve, reject) => {
|
|
2047
|
-
rejectFunc = reject;
|
|
2048
|
-
});
|
|
2049
|
-
this.cancelReadLoop = rejectFunc;
|
|
2050
|
-
this.readLoop(abortPromise).catch((err) => this.abort(err));
|
|
2127
|
+
this.readLoop().catch((err) => this.abort(err));
|
|
2051
2128
|
}
|
|
2052
2129
|
exports = [];
|
|
2053
2130
|
reverseExports = /* @__PURE__ */ new Map();
|
|
@@ -2331,7 +2408,8 @@ var RpcSessionImpl = class {
|
|
|
2331
2408
|
}
|
|
2332
2409
|
abort(error, trySendAbortMessage = true) {
|
|
2333
2410
|
if (this.abortReason !== void 0) return;
|
|
2334
|
-
this.cancelReadLoop(error);
|
|
2411
|
+
this.cancelReadLoop?.(error);
|
|
2412
|
+
this.cancelReadLoop = void 0;
|
|
2335
2413
|
if (trySendAbortMessage) {
|
|
2336
2414
|
try {
|
|
2337
2415
|
this.transport.send(JSON.stringify(["abort", Devaluator.devaluate(error, void 0, this)])).catch((err) => {
|
|
@@ -2367,9 +2445,19 @@ var RpcSessionImpl = class {
|
|
|
2367
2445
|
this.exports[i].hook.dispose();
|
|
2368
2446
|
}
|
|
2369
2447
|
}
|
|
2370
|
-
async readLoop(
|
|
2448
|
+
async readLoop() {
|
|
2371
2449
|
while (!this.abortReason) {
|
|
2372
|
-
let
|
|
2450
|
+
let readCanceled = Promise.withResolvers();
|
|
2451
|
+
this.cancelReadLoop = readCanceled.reject;
|
|
2452
|
+
let msgText;
|
|
2453
|
+
try {
|
|
2454
|
+
msgText = await Promise.race([this.transport.receive(), readCanceled.promise]);
|
|
2455
|
+
} finally {
|
|
2456
|
+
if (this.cancelReadLoop === readCanceled.reject) {
|
|
2457
|
+
this.cancelReadLoop = void 0;
|
|
2458
|
+
}
|
|
2459
|
+
}
|
|
2460
|
+
let msg = JSON.parse(msgText);
|
|
2373
2461
|
if (this.abortReason) break;
|
|
2374
2462
|
if (msg instanceof Array) {
|
|
2375
2463
|
switch (msg[0]) {
|