@ricsam/isolate-fetch 0.1.10 → 0.1.12
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/dist/cjs/consistency/origins.cjs +518 -0
- package/dist/cjs/consistency/origins.cjs.map +10 -0
- package/dist/cjs/index.cjs +71 -50
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/mjs/consistency/origins.mjs +488 -0
- package/dist/mjs/consistency/origins.mjs.map +10 -0
- package/dist/mjs/index.mjs +71 -50
- package/dist/mjs/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/types/consistency/origins.d.ts +179 -0
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -423,77 +423,79 @@ var hostBackedStreamCode = `
|
|
|
423
423
|
(function() {
|
|
424
424
|
const _streamIds = new WeakMap();
|
|
425
425
|
|
|
426
|
-
|
|
426
|
+
// Polyfill values() on ReadableStream if not available (older V8 versions)
|
|
427
|
+
if (typeof ReadableStream.prototype.values !== 'function') {
|
|
428
|
+
ReadableStream.prototype.values = function(options) {
|
|
429
|
+
const reader = this.getReader();
|
|
430
|
+
return {
|
|
431
|
+
async next() {
|
|
432
|
+
const { value, done } = await reader.read();
|
|
433
|
+
if (done) {
|
|
434
|
+
reader.releaseLock();
|
|
435
|
+
return { value: undefined, done: true };
|
|
436
|
+
}
|
|
437
|
+
return { value, done: false };
|
|
438
|
+
},
|
|
439
|
+
async return(value) {
|
|
440
|
+
reader.releaseLock();
|
|
441
|
+
return { value, done: true };
|
|
442
|
+
},
|
|
443
|
+
[Symbol.asyncIterator]() {
|
|
444
|
+
return this;
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Create a proper ReadableStream subclass that reports as "ReadableStream"
|
|
451
|
+
class HostBackedReadableStream extends ReadableStream {
|
|
427
452
|
constructor(streamId) {
|
|
428
453
|
if (streamId === undefined) {
|
|
429
454
|
streamId = __Stream_create();
|
|
430
455
|
}
|
|
431
|
-
_streamIds.set(this, streamId);
|
|
432
|
-
}
|
|
433
456
|
|
|
434
|
-
|
|
435
|
-
return _streamIds.get(this);
|
|
436
|
-
}
|
|
457
|
+
let closed = false;
|
|
437
458
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
459
|
+
super({
|
|
460
|
+
async pull(controller) {
|
|
461
|
+
if (closed) return;
|
|
441
462
|
|
|
442
|
-
return {
|
|
443
|
-
read: async () => {
|
|
444
|
-
if (released) {
|
|
445
|
-
throw new TypeError("Reader has been released");
|
|
446
|
-
}
|
|
447
463
|
const resultJson = __Stream_pull_ref.applySyncPromise(undefined, [streamId]);
|
|
448
464
|
const result = JSON.parse(resultJson);
|
|
449
465
|
|
|
450
466
|
if (result.done) {
|
|
451
|
-
|
|
467
|
+
closed = true;
|
|
468
|
+
controller.close();
|
|
469
|
+
return;
|
|
452
470
|
}
|
|
453
|
-
|
|
471
|
+
controller.enqueue(new Uint8Array(result.value));
|
|
454
472
|
},
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
released = true;
|
|
458
|
-
},
|
|
459
|
-
|
|
460
|
-
get closed() {
|
|
461
|
-
return new Promise(() => {});
|
|
462
|
-
},
|
|
463
|
-
|
|
464
|
-
cancel: async (reason) => {
|
|
473
|
+
cancel(reason) {
|
|
474
|
+
closed = true;
|
|
465
475
|
__Stream_error(streamId, String(reason || "cancelled"));
|
|
466
476
|
}
|
|
467
|
-
};
|
|
468
|
-
}
|
|
477
|
+
});
|
|
469
478
|
|
|
470
|
-
|
|
471
|
-
__Stream_error(this._getStreamId(), String(reason || "cancelled"));
|
|
479
|
+
_streamIds.set(this, streamId);
|
|
472
480
|
}
|
|
473
481
|
|
|
474
|
-
|
|
475
|
-
|
|
482
|
+
// Override to report as ReadableStream for spec compliance
|
|
483
|
+
get [Symbol.toStringTag]() {
|
|
484
|
+
return 'ReadableStream';
|
|
476
485
|
}
|
|
477
486
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
try {
|
|
481
|
-
while (true) {
|
|
482
|
-
const { value, done } = await reader.read();
|
|
483
|
-
if (done) return;
|
|
484
|
-
yield value;
|
|
485
|
-
}
|
|
486
|
-
} finally {
|
|
487
|
-
reader.releaseLock();
|
|
488
|
-
}
|
|
487
|
+
_getStreamId() {
|
|
488
|
+
return _streamIds.get(this);
|
|
489
489
|
}
|
|
490
490
|
|
|
491
|
-
// Static method to create from existing stream ID
|
|
492
491
|
static _fromStreamId(streamId) {
|
|
493
492
|
return new HostBackedReadableStream(streamId);
|
|
494
493
|
}
|
|
495
494
|
}
|
|
496
495
|
|
|
496
|
+
// Make constructor.name return 'ReadableStream' for spec compliance
|
|
497
|
+
Object.defineProperty(HostBackedReadableStream, 'name', { value: 'ReadableStream' });
|
|
498
|
+
|
|
497
499
|
globalThis.HostBackedReadableStream = HostBackedReadableStream;
|
|
498
500
|
})();
|
|
499
501
|
`;
|
|
@@ -673,6 +675,7 @@ function setupResponse(context, stateMap) {
|
|
|
673
675
|
#headers;
|
|
674
676
|
#streamId = null;
|
|
675
677
|
#blobInitPromise = null; // For async Blob body initialization
|
|
678
|
+
#cachedBody = null; // Memoized body stream for spec compliance
|
|
676
679
|
|
|
677
680
|
constructor(body, init = {}) {
|
|
678
681
|
// Handle internal construction from instance ID
|
|
@@ -835,9 +838,15 @@ function setupResponse(context, stateMap) {
|
|
|
835
838
|
}
|
|
836
839
|
|
|
837
840
|
get body() {
|
|
841
|
+
// Return cached body if available (WHATWG spec requires same object on repeated access)
|
|
842
|
+
if (this.#cachedBody !== null) {
|
|
843
|
+
return this.#cachedBody;
|
|
844
|
+
}
|
|
845
|
+
|
|
838
846
|
const streamId = __Response_getStreamId(this.#instanceId);
|
|
839
847
|
if (streamId !== null) {
|
|
840
|
-
|
|
848
|
+
this.#cachedBody = HostBackedReadableStream._fromStreamId(streamId);
|
|
849
|
+
return this.#cachedBody;
|
|
841
850
|
}
|
|
842
851
|
|
|
843
852
|
// Fallback: create host-backed stream from buffered body
|
|
@@ -850,7 +859,8 @@ function setupResponse(context, stateMap) {
|
|
|
850
859
|
}
|
|
851
860
|
__Stream_close(newStreamId);
|
|
852
861
|
|
|
853
|
-
|
|
862
|
+
this.#cachedBody = HostBackedReadableStream._fromStreamId(newStreamId);
|
|
863
|
+
return this.#cachedBody;
|
|
854
864
|
}
|
|
855
865
|
|
|
856
866
|
async text() {
|
|
@@ -1726,6 +1736,12 @@ async function setupFetch(context, options) {
|
|
|
1726
1736
|
const request = Request._fromInstanceId(${requestInstanceId});
|
|
1727
1737
|
const server = new __Server__();
|
|
1728
1738
|
const response = await Promise.resolve(__serveOptions__.fetch(request, server));
|
|
1739
|
+
if (response == null) {
|
|
1740
|
+
throw new TypeError("fetch handler did not return a Response object (got " + (response === null ? "null" : "undefined") + ")");
|
|
1741
|
+
}
|
|
1742
|
+
if (typeof response._getInstanceId !== 'function') {
|
|
1743
|
+
throw new TypeError("fetch handler must return a Response object (got " + (typeof response) + ")");
|
|
1744
|
+
}
|
|
1729
1745
|
return response._getInstanceId();
|
|
1730
1746
|
})()
|
|
1731
1747
|
`, { promise: true });
|
|
@@ -1810,12 +1826,17 @@ async function setupFetch(context, options) {
|
|
|
1810
1826
|
response._originalStatus = responseState.status;
|
|
1811
1827
|
return response;
|
|
1812
1828
|
} finally {
|
|
1829
|
+
if (requestStreamId !== null) {
|
|
1830
|
+
const startTime = Date.now();
|
|
1831
|
+
let streamState = streamRegistry.get(requestStreamId);
|
|
1832
|
+
while (streamState && !streamState.closed && !streamState.errored && Date.now() - startTime < 100) {
|
|
1833
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
1834
|
+
streamState = streamRegistry.get(requestStreamId);
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1813
1837
|
if (streamCleanup) {
|
|
1814
1838
|
await streamCleanup();
|
|
1815
1839
|
}
|
|
1816
|
-
if (requestStreamId !== null) {
|
|
1817
|
-
streamRegistry.delete(requestStreamId);
|
|
1818
|
-
}
|
|
1819
1840
|
}
|
|
1820
1841
|
},
|
|
1821
1842
|
getUpgradeRequest() {
|
|
@@ -1930,4 +1951,4 @@ async function setupFetch(context, options) {
|
|
|
1930
1951
|
};
|
|
1931
1952
|
}
|
|
1932
1953
|
|
|
1933
|
-
//# debugId=
|
|
1954
|
+
//# debugId=B1E0412945057BF364756E2164756E21
|