mirror of
https://github.com/denoland/deno.git
synced 2025-09-27 04:39:10 +00:00
feat: expose writeAll() and writeAllSync() (#2298)
Symmetric with `readAll()` and `readAllSync()`. Also used in `xeval`. Also correct usage in `writeFile()`/`writeFileSync()`.
This commit is contained in:
parent
70de8dd51d
commit
e49d1e16ca
5 changed files with 46 additions and 17 deletions
18
js/buffer.ts
18
js/buffer.ts
|
@ -274,3 +274,21 @@ export function readAllSync(r: SyncReader): Uint8Array {
|
||||||
buf.readFromSync(r);
|
buf.readFromSync(r);
|
||||||
return buf.bytes();
|
return buf.bytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Write all the content of `arr` to `w`.
|
||||||
|
*/
|
||||||
|
export async function writeAll(w: Writer, arr: Uint8Array): Promise<void> {
|
||||||
|
let nwritten = 0;
|
||||||
|
while (nwritten < arr.length) {
|
||||||
|
nwritten += await w.write(arr.subarray(nwritten));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Write synchronously all the content of `arr` to `w`.
|
||||||
|
*/
|
||||||
|
export function writeAllSync(w: SyncWriter, arr: Uint8Array): void {
|
||||||
|
let nwritten = 0;
|
||||||
|
while (nwritten < arr.length) {
|
||||||
|
nwritten += w.writeSync(arr.subarray(nwritten));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
// https://github.com/golang/go/blob/master/LICENSE
|
// https://github.com/golang/go/blob/master/LICENSE
|
||||||
import { assertEquals, test } from "./test_util.ts";
|
import { assertEquals, test } from "./test_util.ts";
|
||||||
|
|
||||||
const { Buffer, readAll, readAllSync } = Deno;
|
const { Buffer, readAll, readAllSync, writeAll, writeAllSync } = Deno;
|
||||||
type Buffer = Deno.Buffer;
|
type Buffer = Deno.Buffer;
|
||||||
|
|
||||||
// N controls how many iterations of certain checks are performed.
|
// N controls how many iterations of certain checks are performed.
|
||||||
|
@ -253,3 +253,25 @@ test(function testReadAllSync(): void {
|
||||||
assertEquals(testBytes[i], actualBytes[i]);
|
assertEquals(testBytes[i], actualBytes[i]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(async function testWriteAll(): Promise<void> {
|
||||||
|
init();
|
||||||
|
const writer = new Buffer();
|
||||||
|
await writeAll(writer, testBytes);
|
||||||
|
const actualBytes = writer.bytes();
|
||||||
|
assertEquals(testBytes.byteLength, actualBytes.byteLength);
|
||||||
|
for (let i = 0; i < testBytes.length; ++i) {
|
||||||
|
assertEquals(testBytes[i], actualBytes[i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function testWriteAllSync(): void {
|
||||||
|
init();
|
||||||
|
const writer = new Buffer();
|
||||||
|
writeAllSync(writer, testBytes);
|
||||||
|
const actualBytes = writer.bytes();
|
||||||
|
assertEquals(testBytes.byteLength, actualBytes.byteLength);
|
||||||
|
for (let i = 0; i < testBytes.length; ++i) {
|
||||||
|
assertEquals(testBytes[i], actualBytes[i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -38,7 +38,7 @@ export {
|
||||||
ReadWriteCloser,
|
ReadWriteCloser,
|
||||||
ReadWriteSeeker
|
ReadWriteSeeker
|
||||||
} from "./io";
|
} from "./io";
|
||||||
export { Buffer, readAll, readAllSync } from "./buffer";
|
export { Buffer, readAll, readAllSync, writeAll, writeAllSync } from "./buffer";
|
||||||
export { mkdirSync, mkdir } from "./mkdir";
|
export { mkdirSync, mkdir } from "./mkdir";
|
||||||
export {
|
export {
|
||||||
makeTempDirSync,
|
makeTempDirSync,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { stat, statSync } from "./stat";
|
import { stat, statSync } from "./stat";
|
||||||
import { open, openSync } from "./files";
|
import { open, openSync } from "./files";
|
||||||
import { chmod, chmodSync } from "./chmod";
|
import { chmod, chmodSync } from "./chmod";
|
||||||
|
import { writeAll, writeAllSync } from "./buffer";
|
||||||
|
|
||||||
/** Options for writing to a file.
|
/** Options for writing to a file.
|
||||||
* `perm` would change the file's permission if set.
|
* `perm` would change the file's permission if set.
|
||||||
|
@ -40,7 +41,7 @@ export function writeFileSync(
|
||||||
chmodSync(filename, options.perm);
|
chmodSync(filename, options.perm);
|
||||||
}
|
}
|
||||||
|
|
||||||
file.writeSync(data);
|
writeAllSync(file, data);
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +71,6 @@ export async function writeFile(
|
||||||
await chmod(filename, options.perm);
|
await chmod(filename, options.perm);
|
||||||
}
|
}
|
||||||
|
|
||||||
await file.write(data);
|
await writeAll(file, data);
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
14
js/xeval.ts
14
js/xeval.ts
|
@ -1,22 +1,10 @@
|
||||||
import { Buffer } from "./buffer";
|
import { Buffer, writeAll } from "./buffer";
|
||||||
import { stdin } from "./files";
|
import { stdin } from "./files";
|
||||||
import { TextEncoder, TextDecoder } from "./text_encoding";
|
import { TextEncoder, TextDecoder } from "./text_encoding";
|
||||||
import { Reader, EOF } from "./io";
|
import { Reader, EOF } from "./io";
|
||||||
|
|
||||||
export type XevalFunc = (v: string) => void;
|
export type XevalFunc = (v: string) => void;
|
||||||
|
|
||||||
async function writeAll(buffer: Buffer, arr: Uint8Array): Promise<void> {
|
|
||||||
let bytesWritten = 0;
|
|
||||||
while (bytesWritten < arr.length) {
|
|
||||||
try {
|
|
||||||
const nwritten = await buffer.write(arr.subarray(bytesWritten));
|
|
||||||
bytesWritten += nwritten;
|
|
||||||
} catch {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(kevinkassimo): Move this utility to deno_std.
|
// TODO(kevinkassimo): Move this utility to deno_std.
|
||||||
// Import from there once doable.
|
// Import from there once doable.
|
||||||
// Read from reader until EOF and emit string chunks separated
|
// Read from reader until EOF and emit string chunks separated
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue