@poe-platform/safe-bash 0.1.12 → 0.1.13
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.
|
@@ -13728,19 +13728,54 @@ ${prefix2} line ${offset + line}: \`${source.split("\n")[line - 1] ?? ""}'
|
|
|
13728
13728
|
|
|
13729
13729
|
// packages/safe-bash/src/shell/input.ts
|
|
13730
13730
|
async function fileInput(fs, path, maxBytes, signal) {
|
|
13731
|
-
|
|
13731
|
+
signal.throwIfAborted();
|
|
13732
|
+
async function bufferedInput() {
|
|
13733
|
+
signal.throwIfAborted();
|
|
13732
13734
|
const bytes = await interruptible(fs.readFile(path, { signal, maxBytes }), signal);
|
|
13733
13735
|
signal.throwIfAborted();
|
|
13734
13736
|
if (bytes.byteLength > maxBytes) throw new FsError("EFBIG", { syscall: "readFile", path });
|
|
13735
13737
|
return toByteSource(bytes);
|
|
13736
13738
|
}
|
|
13737
|
-
const
|
|
13739
|
+
const readStream = fs.readStream;
|
|
13740
|
+
if (!readStream || fs.capabilities.streamingRead === false) return bufferedInput();
|
|
13741
|
+
let iterator;
|
|
13742
|
+
try {
|
|
13743
|
+
iterator = readStream.call(fs, path, { signal })[Symbol.asyncIterator]();
|
|
13744
|
+
} catch (error) {
|
|
13745
|
+
signal.throwIfAborted();
|
|
13746
|
+
if (!(error instanceof FsError) || error.code !== "ENOTSUP") throw error;
|
|
13747
|
+
return bufferedInput();
|
|
13748
|
+
}
|
|
13738
13749
|
let size = 0;
|
|
13750
|
+
let buffered = false;
|
|
13751
|
+
let closed = false;
|
|
13752
|
+
let returned;
|
|
13753
|
+
function closeIterator() {
|
|
13754
|
+
returned ??= Promise.resolve().then(() => iterator.return?.() ?? { done: true, value: void 0 });
|
|
13755
|
+
return returned;
|
|
13756
|
+
}
|
|
13739
13757
|
return {
|
|
13740
13758
|
[Symbol.asyncIterator]: () => ({
|
|
13741
13759
|
async next() {
|
|
13742
13760
|
signal.throwIfAborted();
|
|
13743
|
-
|
|
13761
|
+
if (closed) return { done: true, value: void 0 };
|
|
13762
|
+
let result;
|
|
13763
|
+
try {
|
|
13764
|
+
result = await interruptible(Promise.resolve(iterator.next()), signal);
|
|
13765
|
+
} catch (error) {
|
|
13766
|
+
signal.throwIfAborted();
|
|
13767
|
+
if (buffered || size > 0 || !(error instanceof FsError) || error.code !== "ENOTSUP") throw error;
|
|
13768
|
+
await interruptible(closeIterator(), signal);
|
|
13769
|
+
signal.throwIfAborted();
|
|
13770
|
+
if (closed) return { done: true, value: void 0 };
|
|
13771
|
+
const source = await bufferedInput();
|
|
13772
|
+
if (closed) return { done: true, value: void 0 };
|
|
13773
|
+
iterator = source[Symbol.asyncIterator]();
|
|
13774
|
+
buffered = true;
|
|
13775
|
+
returned = void 0;
|
|
13776
|
+
result = await iterator.next();
|
|
13777
|
+
}
|
|
13778
|
+
signal.throwIfAborted();
|
|
13744
13779
|
if (!result.done) {
|
|
13745
13780
|
if (!(result.value instanceof Uint8Array)) throw new TypeError("Shell stdin must yield Uint8Array");
|
|
13746
13781
|
if (result.value.byteLength > maxBytes - size) throw new FsError("EFBIG", { syscall: "readFile", path });
|
|
@@ -13748,7 +13783,10 @@ async function fileInput(fs, path, maxBytes, signal) {
|
|
|
13748
13783
|
}
|
|
13749
13784
|
return result;
|
|
13750
13785
|
},
|
|
13751
|
-
|
|
13786
|
+
return() {
|
|
13787
|
+
closed = true;
|
|
13788
|
+
return closeIterator();
|
|
13789
|
+
}
|
|
13752
13790
|
})
|
|
13753
13791
|
};
|
|
13754
13792
|
}
|