capnweb 0.0.0-c2bb17b → 0.0.0-cfa1b95
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 +183 -8
- package/dist/index-workers.cjs.map +1 -1
- package/dist/index-workers.js +183 -8
- package/dist/index-workers.js.map +1 -1
- package/dist/index.cjs +183 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +88 -16
- package/dist/index.d.ts +88 -16
- package/dist/index.js +183 -8
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index-workers.js
CHANGED
|
@@ -27,6 +27,7 @@ var RpcTarget = workersModule ? workersModule.RpcTarget : class {
|
|
|
27
27
|
};
|
|
28
28
|
var AsyncFunction = (async function() {
|
|
29
29
|
}).constructor;
|
|
30
|
+
var BUFFER_PROTOTYPE = typeof Buffer !== "undefined" ? Buffer.prototype : void 0;
|
|
30
31
|
function typeForRpc(value) {
|
|
31
32
|
switch (typeof value) {
|
|
32
33
|
case "boolean":
|
|
@@ -58,11 +59,18 @@ function typeForRpc(value) {
|
|
|
58
59
|
case Date.prototype:
|
|
59
60
|
return "date";
|
|
60
61
|
case Uint8Array.prototype:
|
|
62
|
+
case BUFFER_PROTOTYPE:
|
|
61
63
|
return "bytes";
|
|
62
64
|
case WritableStream.prototype:
|
|
63
65
|
return "writable";
|
|
64
66
|
case ReadableStream.prototype:
|
|
65
67
|
return "readable";
|
|
68
|
+
case Headers.prototype:
|
|
69
|
+
return "headers";
|
|
70
|
+
case Request.prototype:
|
|
71
|
+
return "request";
|
|
72
|
+
case Response.prototype:
|
|
73
|
+
return "response";
|
|
66
74
|
// TODO: All other structured clone types.
|
|
67
75
|
case RpcStub.prototype:
|
|
68
76
|
return "stub";
|
|
@@ -616,6 +624,22 @@ var RpcPayload = class _RpcPayload {
|
|
|
616
624
|
this.hooks.push(hook);
|
|
617
625
|
return stream;
|
|
618
626
|
}
|
|
627
|
+
case "headers":
|
|
628
|
+
return new Headers(value);
|
|
629
|
+
case "request": {
|
|
630
|
+
let req = value;
|
|
631
|
+
if (req.body) {
|
|
632
|
+
this.deepCopy(req.body, req, "body", req, dupStubs, owner);
|
|
633
|
+
}
|
|
634
|
+
return new Request(req);
|
|
635
|
+
}
|
|
636
|
+
case "response": {
|
|
637
|
+
let resp = value;
|
|
638
|
+
if (resp.body) {
|
|
639
|
+
this.deepCopy(resp.body, resp, "body", resp, dupStubs, owner);
|
|
640
|
+
}
|
|
641
|
+
return new Response(resp.body, resp);
|
|
642
|
+
}
|
|
619
643
|
default:
|
|
620
644
|
throw new Error("unreachable");
|
|
621
645
|
}
|
|
@@ -795,6 +819,18 @@ var RpcPayload = class _RpcPayload {
|
|
|
795
819
|
}
|
|
796
820
|
case "rpc-thenable":
|
|
797
821
|
return;
|
|
822
|
+
case "headers":
|
|
823
|
+
return;
|
|
824
|
+
case "request": {
|
|
825
|
+
let req = value;
|
|
826
|
+
if (req.body) this.disposeImpl(req.body, req);
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
case "response": {
|
|
830
|
+
let resp = value;
|
|
831
|
+
if (resp.body) this.disposeImpl(resp.body, resp);
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
798
834
|
case "writable": {
|
|
799
835
|
let stream = value;
|
|
800
836
|
let hook = this.rpcTargets?.get(stream);
|
|
@@ -850,6 +886,9 @@ var RpcPayload = class _RpcPayload {
|
|
|
850
886
|
case "rpc-target":
|
|
851
887
|
case "writable":
|
|
852
888
|
case "readable":
|
|
889
|
+
case "headers":
|
|
890
|
+
case "request":
|
|
891
|
+
case "response":
|
|
853
892
|
return;
|
|
854
893
|
case "array": {
|
|
855
894
|
let array = value;
|
|
@@ -933,6 +972,9 @@ function followPath(value, parent, path, owner) {
|
|
|
933
972
|
case "bytes":
|
|
934
973
|
case "date":
|
|
935
974
|
case "error":
|
|
975
|
+
case "headers":
|
|
976
|
+
case "request":
|
|
977
|
+
case "response":
|
|
936
978
|
value = void 0;
|
|
937
979
|
break;
|
|
938
980
|
case "undefined":
|
|
@@ -1347,12 +1389,86 @@ var Devaluator = class _Devaluator {
|
|
|
1347
1389
|
let bytes = value;
|
|
1348
1390
|
if (bytes.toBase64) {
|
|
1349
1391
|
return ["bytes", bytes.toBase64({ omitPadding: true })];
|
|
1350
|
-
} else {
|
|
1351
|
-
return [
|
|
1352
|
-
"bytes",
|
|
1353
|
-
btoa(String.fromCharCode.apply(null, bytes).replace(/=*$/, ""))
|
|
1354
|
-
];
|
|
1355
1392
|
}
|
|
1393
|
+
let b64;
|
|
1394
|
+
if (typeof Buffer !== "undefined") {
|
|
1395
|
+
let buf = bytes instanceof Buffer ? bytes : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
1396
|
+
b64 = buf.toString("base64");
|
|
1397
|
+
} else {
|
|
1398
|
+
let binary = "";
|
|
1399
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
1400
|
+
binary += String.fromCharCode(bytes[i]);
|
|
1401
|
+
}
|
|
1402
|
+
b64 = btoa(binary);
|
|
1403
|
+
}
|
|
1404
|
+
return ["bytes", b64.replace(/=+$/, "")];
|
|
1405
|
+
}
|
|
1406
|
+
case "headers":
|
|
1407
|
+
return ["headers", [...value]];
|
|
1408
|
+
case "request": {
|
|
1409
|
+
let req = value;
|
|
1410
|
+
let init = {};
|
|
1411
|
+
if (req.method !== "GET") init.method = req.method;
|
|
1412
|
+
let headers = [...req.headers];
|
|
1413
|
+
if (headers.length > 0) {
|
|
1414
|
+
init.headers = headers;
|
|
1415
|
+
}
|
|
1416
|
+
if (req.body) {
|
|
1417
|
+
init.body = this.devaluateImpl(req.body, req, depth + 1);
|
|
1418
|
+
init.duplex = req.duplex || "half";
|
|
1419
|
+
} else if (req.body === void 0 && !["GET", "HEAD", "OPTIONS", "TRACE", "DELETE"].includes(req.method)) {
|
|
1420
|
+
let bodyPromise = req.arrayBuffer();
|
|
1421
|
+
let readable = new ReadableStream({
|
|
1422
|
+
async start(controller) {
|
|
1423
|
+
try {
|
|
1424
|
+
controller.enqueue(new Uint8Array(await bodyPromise));
|
|
1425
|
+
controller.close();
|
|
1426
|
+
} catch (err) {
|
|
1427
|
+
controller.error(err);
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
});
|
|
1431
|
+
let hook = streamImpl.createReadableStreamHook(readable);
|
|
1432
|
+
let importId = this.exporter.createPipe(readable, hook);
|
|
1433
|
+
init.body = ["readable", importId];
|
|
1434
|
+
init.duplex = req.duplex || "half";
|
|
1435
|
+
}
|
|
1436
|
+
if (req.cache && req.cache !== "default") init.cache = req.cache;
|
|
1437
|
+
if (req.redirect !== "follow") init.redirect = req.redirect;
|
|
1438
|
+
if (req.integrity) init.integrity = req.integrity;
|
|
1439
|
+
if (req.mode && req.mode !== "cors") init.mode = req.mode;
|
|
1440
|
+
if (req.credentials && req.credentials !== "same-origin") {
|
|
1441
|
+
init.credentials = req.credentials;
|
|
1442
|
+
}
|
|
1443
|
+
if (req.referrer && req.referrer !== "about:client") init.referrer = req.referrer;
|
|
1444
|
+
if (req.referrerPolicy) init.referrerPolicy = req.referrerPolicy;
|
|
1445
|
+
if (req.keepalive) init.keepalive = req.keepalive;
|
|
1446
|
+
let cfReq = req;
|
|
1447
|
+
if (cfReq.cf) init.cf = cfReq.cf;
|
|
1448
|
+
if (cfReq.encodeResponseBody && cfReq.encodeResponseBody !== "automatic") {
|
|
1449
|
+
init.encodeResponseBody = cfReq.encodeResponseBody;
|
|
1450
|
+
}
|
|
1451
|
+
return ["request", req.url, init];
|
|
1452
|
+
}
|
|
1453
|
+
case "response": {
|
|
1454
|
+
let resp = value;
|
|
1455
|
+
let body = this.devaluateImpl(resp.body, resp, depth + 1);
|
|
1456
|
+
let init = {};
|
|
1457
|
+
if (resp.status !== 200) init.status = resp.status;
|
|
1458
|
+
if (resp.statusText) init.statusText = resp.statusText;
|
|
1459
|
+
let headers = [...resp.headers];
|
|
1460
|
+
if (headers.length > 0) {
|
|
1461
|
+
init.headers = headers;
|
|
1462
|
+
}
|
|
1463
|
+
let cfResp = resp;
|
|
1464
|
+
if (cfResp.cf) init.cf = cfResp.cf;
|
|
1465
|
+
if (cfResp.encodeBody && cfResp.encodeBody !== "automatic") {
|
|
1466
|
+
init.encodeBody = cfResp.encodeBody;
|
|
1467
|
+
}
|
|
1468
|
+
if (cfResp.webSocket) {
|
|
1469
|
+
throw new TypeError("Can't serialize a Response containing a webSocket.");
|
|
1470
|
+
}
|
|
1471
|
+
return ["response", body, init];
|
|
1356
1472
|
}
|
|
1357
1473
|
case "error": {
|
|
1358
1474
|
let e = value;
|
|
@@ -1453,6 +1569,14 @@ var NullImporter = class {
|
|
|
1453
1569
|
}
|
|
1454
1570
|
};
|
|
1455
1571
|
var NULL_IMPORTER = new NullImporter();
|
|
1572
|
+
function fixBrokenRequestBody(request, body) {
|
|
1573
|
+
let promise = new Response(body).arrayBuffer().then((arrayBuffer) => {
|
|
1574
|
+
let bytes = new Uint8Array(arrayBuffer);
|
|
1575
|
+
let result = new Request(request, { body: bytes });
|
|
1576
|
+
return new PayloadStubHook(RpcPayload.fromAppReturn(result));
|
|
1577
|
+
});
|
|
1578
|
+
return new RpcPromise(new PromiseStubHook(promise), []);
|
|
1579
|
+
}
|
|
1456
1580
|
var Evaluator = class _Evaluator {
|
|
1457
1581
|
constructor(importer) {
|
|
1458
1582
|
this.importer = importer;
|
|
@@ -1493,10 +1617,11 @@ var Evaluator = class _Evaluator {
|
|
|
1493
1617
|
}
|
|
1494
1618
|
break;
|
|
1495
1619
|
case "bytes": {
|
|
1496
|
-
let b64 = Uint8Array;
|
|
1497
1620
|
if (typeof value[1] == "string") {
|
|
1498
|
-
if (
|
|
1499
|
-
return
|
|
1621
|
+
if (typeof Buffer !== "undefined") {
|
|
1622
|
+
return Buffer.from(value[1], "base64");
|
|
1623
|
+
} else if (Uint8Array.fromBase64) {
|
|
1624
|
+
return Uint8Array.fromBase64(value[1]);
|
|
1500
1625
|
} else {
|
|
1501
1626
|
let bs = atob(value[1]);
|
|
1502
1627
|
let len = bs.length;
|
|
@@ -1530,6 +1655,56 @@ var Evaluator = class _Evaluator {
|
|
|
1530
1655
|
return -Infinity;
|
|
1531
1656
|
case "nan":
|
|
1532
1657
|
return NaN;
|
|
1658
|
+
case "headers":
|
|
1659
|
+
if (value.length === 2 && value[1] instanceof Array) {
|
|
1660
|
+
return new Headers(value[1]);
|
|
1661
|
+
}
|
|
1662
|
+
break;
|
|
1663
|
+
case "request": {
|
|
1664
|
+
if (value.length !== 3 || typeof value[1] !== "string") break;
|
|
1665
|
+
let url = value[1];
|
|
1666
|
+
let init = value[2];
|
|
1667
|
+
if (typeof init !== "object" || init === null) break;
|
|
1668
|
+
if (init.body) {
|
|
1669
|
+
init.body = this.evaluateImpl(init.body, init, "body");
|
|
1670
|
+
if (init.body === null || typeof init.body === "string" || init.body instanceof Uint8Array || init.body instanceof ReadableStream) ; else {
|
|
1671
|
+
throw new TypeError("Request body must be of type ReadableStream.");
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
if (init.signal) {
|
|
1675
|
+
init.signal = this.evaluateImpl(init.signal, init, "signal");
|
|
1676
|
+
if (!(init.signal instanceof AbortSignal)) {
|
|
1677
|
+
throw new TypeError("Request siganl must be of type AbortSignal.");
|
|
1678
|
+
}
|
|
1679
|
+
}
|
|
1680
|
+
if (init.headers && !(init.headers instanceof Array)) {
|
|
1681
|
+
throw new TypeError("Request headers must be serialized as an array of pairs.");
|
|
1682
|
+
}
|
|
1683
|
+
let result = new Request(url, init);
|
|
1684
|
+
if (init.body instanceof ReadableStream && result.body === void 0) {
|
|
1685
|
+
let promise = fixBrokenRequestBody(result, init.body);
|
|
1686
|
+
this.promises.push({ promise, parent, property });
|
|
1687
|
+
return promise;
|
|
1688
|
+
} else {
|
|
1689
|
+
return result;
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
case "response": {
|
|
1693
|
+
if (value.length !== 3) break;
|
|
1694
|
+
let body = this.evaluateImpl(value[1], parent, property);
|
|
1695
|
+
if (body === null || typeof body === "string" || body instanceof Uint8Array || body instanceof ReadableStream) ; else {
|
|
1696
|
+
throw new TypeError("Response body must be of type ReadableStream.");
|
|
1697
|
+
}
|
|
1698
|
+
let init = value[2];
|
|
1699
|
+
if (typeof init !== "object" || init === null) break;
|
|
1700
|
+
if (init.webSocket) {
|
|
1701
|
+
throw new TypeError("Can't deserialize a Response containing a webSocket.");
|
|
1702
|
+
}
|
|
1703
|
+
if (init.headers && !(init.headers instanceof Array)) {
|
|
1704
|
+
throw new TypeError("Request headers must be serialized as an array of pairs.");
|
|
1705
|
+
}
|
|
1706
|
+
return new Response(body, init);
|
|
1707
|
+
}
|
|
1533
1708
|
case "import":
|
|
1534
1709
|
case "pipeline": {
|
|
1535
1710
|
if (value.length < 2 || value.length > 4) {
|