@vastblast/capnweb 0.4.2 → 0.5.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 -1
- package/dist/index-workers.cjs +165 -0
- package/dist/index-workers.cjs.map +1 -1
- package/dist/index-workers.js +165 -0
- package/dist/index-workers.js.map +1 -1
- package/dist/index.cjs +165 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +207 -221
- package/dist/index.d.ts +207 -221
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index-workers.js
CHANGED
|
@@ -63,6 +63,12 @@ function typeForRpc(value) {
|
|
|
63
63
|
return "writable";
|
|
64
64
|
case ReadableStream.prototype:
|
|
65
65
|
return "readable";
|
|
66
|
+
case Headers.prototype:
|
|
67
|
+
return "headers";
|
|
68
|
+
case Request.prototype:
|
|
69
|
+
return "request";
|
|
70
|
+
case Response.prototype:
|
|
71
|
+
return "response";
|
|
66
72
|
// TODO: All other structured clone types.
|
|
67
73
|
case RpcStub.prototype:
|
|
68
74
|
return "stub";
|
|
@@ -616,6 +622,22 @@ var RpcPayload = class _RpcPayload {
|
|
|
616
622
|
this.hooks.push(hook);
|
|
617
623
|
return stream;
|
|
618
624
|
}
|
|
625
|
+
case "headers":
|
|
626
|
+
return new Headers(value);
|
|
627
|
+
case "request": {
|
|
628
|
+
let req = value;
|
|
629
|
+
if (req.body) {
|
|
630
|
+
this.deepCopy(req.body, req, "body", req, dupStubs, owner);
|
|
631
|
+
}
|
|
632
|
+
return new Request(req);
|
|
633
|
+
}
|
|
634
|
+
case "response": {
|
|
635
|
+
let resp = value;
|
|
636
|
+
if (resp.body) {
|
|
637
|
+
this.deepCopy(resp.body, resp, "body", resp, dupStubs, owner);
|
|
638
|
+
}
|
|
639
|
+
return new Response(resp.body, resp);
|
|
640
|
+
}
|
|
619
641
|
default:
|
|
620
642
|
throw new Error("unreachable");
|
|
621
643
|
}
|
|
@@ -795,6 +817,18 @@ var RpcPayload = class _RpcPayload {
|
|
|
795
817
|
}
|
|
796
818
|
case "rpc-thenable":
|
|
797
819
|
return;
|
|
820
|
+
case "headers":
|
|
821
|
+
return;
|
|
822
|
+
case "request": {
|
|
823
|
+
let req = value;
|
|
824
|
+
if (req.body) this.disposeImpl(req.body, req);
|
|
825
|
+
return;
|
|
826
|
+
}
|
|
827
|
+
case "response": {
|
|
828
|
+
let resp = value;
|
|
829
|
+
if (resp.body) this.disposeImpl(resp.body, resp);
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
798
832
|
case "writable": {
|
|
799
833
|
let stream = value;
|
|
800
834
|
let hook = this.rpcTargets?.get(stream);
|
|
@@ -850,6 +884,9 @@ var RpcPayload = class _RpcPayload {
|
|
|
850
884
|
case "rpc-target":
|
|
851
885
|
case "writable":
|
|
852
886
|
case "readable":
|
|
887
|
+
case "headers":
|
|
888
|
+
case "request":
|
|
889
|
+
case "response":
|
|
853
890
|
return;
|
|
854
891
|
case "array": {
|
|
855
892
|
let array = value;
|
|
@@ -933,6 +970,9 @@ function followPath(value, parent, path, owner) {
|
|
|
933
970
|
case "bytes":
|
|
934
971
|
case "date":
|
|
935
972
|
case "error":
|
|
973
|
+
case "headers":
|
|
974
|
+
case "request":
|
|
975
|
+
case "response":
|
|
936
976
|
value = void 0;
|
|
937
977
|
break;
|
|
938
978
|
case "undefined":
|
|
@@ -1354,6 +1394,73 @@ var Devaluator = class _Devaluator {
|
|
|
1354
1394
|
];
|
|
1355
1395
|
}
|
|
1356
1396
|
}
|
|
1397
|
+
case "headers":
|
|
1398
|
+
return ["headers", [...value]];
|
|
1399
|
+
case "request": {
|
|
1400
|
+
let req = value;
|
|
1401
|
+
let init = {};
|
|
1402
|
+
if (req.method !== "GET") init.method = req.method;
|
|
1403
|
+
let headers = [...req.headers];
|
|
1404
|
+
if (headers.length > 0) {
|
|
1405
|
+
init.headers = headers;
|
|
1406
|
+
}
|
|
1407
|
+
if (req.body) {
|
|
1408
|
+
init.body = this.devaluateImpl(req.body, req, depth + 1);
|
|
1409
|
+
init.duplex = req.duplex || "half";
|
|
1410
|
+
} else if (req.body === void 0 && !["GET", "HEAD", "OPTIONS", "TRACE", "DELETE"].includes(req.method)) {
|
|
1411
|
+
let bodyPromise = req.arrayBuffer();
|
|
1412
|
+
let readable = new ReadableStream({
|
|
1413
|
+
async start(controller) {
|
|
1414
|
+
try {
|
|
1415
|
+
controller.enqueue(new Uint8Array(await bodyPromise));
|
|
1416
|
+
controller.close();
|
|
1417
|
+
} catch (err) {
|
|
1418
|
+
controller.error(err);
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
});
|
|
1422
|
+
let hook = streamImpl.createReadableStreamHook(readable);
|
|
1423
|
+
let importId = this.exporter.createPipe(readable, hook);
|
|
1424
|
+
init.body = ["readable", importId];
|
|
1425
|
+
init.duplex = req.duplex || "half";
|
|
1426
|
+
}
|
|
1427
|
+
if (req.cache && req.cache !== "default") init.cache = req.cache;
|
|
1428
|
+
if (req.redirect !== "follow") init.redirect = req.redirect;
|
|
1429
|
+
if (req.integrity) init.integrity = req.integrity;
|
|
1430
|
+
if (req.mode && req.mode !== "cors") init.mode = req.mode;
|
|
1431
|
+
if (req.credentials && req.credentials !== "same-origin") {
|
|
1432
|
+
init.credentials = req.credentials;
|
|
1433
|
+
}
|
|
1434
|
+
if (req.referrer && req.referrer !== "about:client") init.referrer = req.referrer;
|
|
1435
|
+
if (req.referrerPolicy) init.referrerPolicy = req.referrerPolicy;
|
|
1436
|
+
if (req.keepalive) init.keepalive = req.keepalive;
|
|
1437
|
+
let cfReq = req;
|
|
1438
|
+
if (cfReq.cf) init.cf = cfReq.cf;
|
|
1439
|
+
if (cfReq.encodeResponseBody && cfReq.encodeResponseBody !== "automatic") {
|
|
1440
|
+
init.encodeResponseBody = cfReq.encodeResponseBody;
|
|
1441
|
+
}
|
|
1442
|
+
return ["request", req.url, init];
|
|
1443
|
+
}
|
|
1444
|
+
case "response": {
|
|
1445
|
+
let resp = value;
|
|
1446
|
+
let body = this.devaluateImpl(resp.body, resp, depth + 1);
|
|
1447
|
+
let init = {};
|
|
1448
|
+
if (resp.status !== 200) init.status = resp.status;
|
|
1449
|
+
if (resp.statusText) init.statusText = resp.statusText;
|
|
1450
|
+
let headers = [...resp.headers];
|
|
1451
|
+
if (headers.length > 0) {
|
|
1452
|
+
init.headers = headers;
|
|
1453
|
+
}
|
|
1454
|
+
let cfResp = resp;
|
|
1455
|
+
if (cfResp.cf) init.cf = cfResp.cf;
|
|
1456
|
+
if (cfResp.encodeBody && cfResp.encodeBody !== "automatic") {
|
|
1457
|
+
init.encodeBody = cfResp.encodeBody;
|
|
1458
|
+
}
|
|
1459
|
+
if (cfResp.webSocket) {
|
|
1460
|
+
throw new TypeError("Can't serialize a Response containing a webSocket.");
|
|
1461
|
+
}
|
|
1462
|
+
return ["response", body, init];
|
|
1463
|
+
}
|
|
1357
1464
|
case "error": {
|
|
1358
1465
|
let e = value;
|
|
1359
1466
|
let rewritten = this.exporter.onSendError(e);
|
|
@@ -1453,6 +1560,14 @@ var NullImporter = class {
|
|
|
1453
1560
|
}
|
|
1454
1561
|
};
|
|
1455
1562
|
var NULL_IMPORTER = new NullImporter();
|
|
1563
|
+
function fixBrokenRequestBody(request, body) {
|
|
1564
|
+
let promise = new Response(body).arrayBuffer().then((arrayBuffer) => {
|
|
1565
|
+
let bytes = new Uint8Array(arrayBuffer);
|
|
1566
|
+
let result = new Request(request, { body: bytes });
|
|
1567
|
+
return new PayloadStubHook(RpcPayload.fromAppReturn(result));
|
|
1568
|
+
});
|
|
1569
|
+
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1570
|
+
}
|
|
1456
1571
|
var Evaluator = class _Evaluator {
|
|
1457
1572
|
constructor(importer) {
|
|
1458
1573
|
this.importer = importer;
|
|
@@ -1530,6 +1645,56 @@ var Evaluator = class _Evaluator {
|
|
|
1530
1645
|
return -Infinity;
|
|
1531
1646
|
case "nan":
|
|
1532
1647
|
return NaN;
|
|
1648
|
+
case "headers":
|
|
1649
|
+
if (value.length === 2 && value[1] instanceof Array) {
|
|
1650
|
+
return new Headers(value[1]);
|
|
1651
|
+
}
|
|
1652
|
+
break;
|
|
1653
|
+
case "request": {
|
|
1654
|
+
if (value.length !== 3 || typeof value[1] !== "string") break;
|
|
1655
|
+
let url = value[1];
|
|
1656
|
+
let init = value[2];
|
|
1657
|
+
if (typeof init !== "object" || init === null) break;
|
|
1658
|
+
if (init.body) {
|
|
1659
|
+
init.body = this.evaluateImpl(init.body, init, "body");
|
|
1660
|
+
if (init.body === null || typeof init.body === "string" || init.body instanceof Uint8Array || init.body instanceof ReadableStream) ; else {
|
|
1661
|
+
throw new TypeError("Request body must be of type ReadableStream.");
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
if (init.signal) {
|
|
1665
|
+
init.signal = this.evaluateImpl(init.signal, init, "signal");
|
|
1666
|
+
if (!(init.signal instanceof AbortSignal)) {
|
|
1667
|
+
throw new TypeError("Request siganl must be of type AbortSignal.");
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
if (init.headers && !(init.headers instanceof Array)) {
|
|
1671
|
+
throw new TypeError("Request headers must be serialized as an array of pairs.");
|
|
1672
|
+
}
|
|
1673
|
+
let result = new Request(url, init);
|
|
1674
|
+
if (init.body instanceof ReadableStream && result.body === void 0) {
|
|
1675
|
+
let promise = fixBrokenRequestBody(result, init.body);
|
|
1676
|
+
this.promises.push({ promise, parent, property });
|
|
1677
|
+
return promise;
|
|
1678
|
+
} else {
|
|
1679
|
+
return result;
|
|
1680
|
+
}
|
|
1681
|
+
}
|
|
1682
|
+
case "response": {
|
|
1683
|
+
if (value.length !== 3) break;
|
|
1684
|
+
let body = this.evaluateImpl(value[1], parent, property);
|
|
1685
|
+
if (body === null || typeof body === "string" || body instanceof Uint8Array || body instanceof ReadableStream) ; else {
|
|
1686
|
+
throw new TypeError("Response body must be of type ReadableStream.");
|
|
1687
|
+
}
|
|
1688
|
+
let init = value[2];
|
|
1689
|
+
if (typeof init !== "object" || init === null) break;
|
|
1690
|
+
if (init.webSocket) {
|
|
1691
|
+
throw new TypeError("Can't deserialize a Response containing a webSocket.");
|
|
1692
|
+
}
|
|
1693
|
+
if (init.headers && !(init.headers instanceof Array)) {
|
|
1694
|
+
throw new TypeError("Request headers must be serialized as an array of pairs.");
|
|
1695
|
+
}
|
|
1696
|
+
return new Response(body, init);
|
|
1697
|
+
}
|
|
1533
1698
|
case "import":
|
|
1534
1699
|
case "pipeline": {
|
|
1535
1700
|
if (value.length < 2 || value.length > 4) {
|