1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

BREAKING(io): remove Deno.copy() (#25345)

Towards #22079

---------

Signed-off-by: Asher Gomez <ashersaupingomez@gmail.com>
This commit is contained in:
Asher Gomez 2024-09-03 20:46:13 +10:00 committed by GitHub
parent 241fa7bc97
commit 03d8e474d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 0 additions and 139 deletions

View file

@ -1833,27 +1833,6 @@ declare namespace Deno {
seekSync(offset: number | bigint, whence: SeekMode): number; seekSync(offset: number | bigint, whence: SeekMode): number;
} }
/**
* Copies from `src` to `dst` until either EOF (`null`) is read from `src` or
* an error occurs. It resolves to the number of bytes copied or rejects with
* the first error encountered while copying.
*
* @deprecated This will be removed in Deno 2.0. See the
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
* for migration instructions.
*
* @category I/O
*
* @param src The source to copy from
* @param dst The destination to copy to
* @param options Can be used to tune size of the buffer. Default size is 32kB
*/
export function copy(
src: Reader,
dst: Writer,
options?: { bufSize?: number },
): Promise<number>;
/** Open a file and resolve to an instance of {@linkcode Deno.FsFile}. The /** Open a file and resolve to an instance of {@linkcode Deno.FsFile}. The
* file does not need to previously exist if using the `create` or `createNew` * file does not need to previously exist if using the `create` or `createNew`
* open options. The caller may have the resulting file automatically closed * open options. The caller may have the resulting file automatically closed

View file

@ -20,7 +20,6 @@ import {
writableStreamForRid, writableStreamForRid,
} from "ext:deno_web/06_streams.js"; } from "ext:deno_web/06_streams.js";
const DEFAULT_BUFFER_SIZE = 32 * 1024;
// Seek whence values. // Seek whence values.
// https://golang.org/pkg/io/#pkg-constants // https://golang.org/pkg/io/#pkg-constants
const SeekMode = { const SeekMode = {
@ -33,37 +32,6 @@ const SeekMode = {
End: 2, End: 2,
}; };
async function copy(
src,
dst,
options,
) {
internals.warnOnDeprecatedApi(
"Deno.copy()",
new Error().stack,
"Use `copy()` from `https://jsr.io/@std/io/doc/copy/~` instead.",
);
let n = 0;
const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE;
const b = new Uint8Array(bufSize);
let gotEOF = false;
while (gotEOF === false) {
const result = await src.read(b);
if (result === null) {
gotEOF = true;
} else {
let nwritten = 0;
while (nwritten < result) {
nwritten += await dst.write(
TypedArrayPrototypeSubarray(b, nwritten, result),
);
}
n += nwritten;
}
}
return n;
}
function readSync(rid, buffer) { function readSync(rid, buffer) {
if (buffer.length === 0) return 0; if (buffer.length === 0) return 0;
const nread = core.readSync(rid, buffer); const nread = core.readSync(rid, buffer);
@ -295,7 +263,6 @@ const stdout = new Stdout();
const stderr = new Stderr(); const stderr = new Stderr();
export { export {
copy,
read, read,
readAll, readAll,
readAllSync, readAllSync,

View file

@ -801,7 +801,6 @@ function bootstrapMainRuntime(runtimeOptions, warmup = false) {
if (future) { if (future) {
delete globalThis.window; delete globalThis.window;
delete Deno.Buffer; delete Deno.Buffer;
delete Deno.copy;
delete Deno.File; delete Deno.File;
delete Deno.fstat; delete Deno.fstat;
delete Deno.fstatSync; delete Deno.fstatSync;
@ -979,7 +978,6 @@ function bootstrapWorkerRuntime(
if (future) { if (future) {
delete Deno.Buffer; delete Deno.Buffer;
delete Deno.copy;
delete Deno.File; delete Deno.File;
delete Deno.fstat; delete Deno.fstat;
delete Deno.fstatSync; delete Deno.fstatSync;

View file

@ -47,7 +47,6 @@ util::unit_test_factory!(
image_data_test, image_data_test,
internals_test, internals_test,
intl_test, intl_test,
io_test,
jupyter_test, jupyter_test,
kv_test, kv_test,
kv_queue_test_no_db_close, kv_queue_test_no_db_close,

View file

@ -1,6 +1,5 @@
console.log("window is", globalThis.window); console.log("window is", globalThis.window);
console.log("Deno.Buffer is", Deno.Buffer); console.log("Deno.Buffer is", Deno.Buffer);
console.log("Deno.copy is", Deno.copy);
console.log("Deno.File is", Deno.File); console.log("Deno.File is", Deno.File);
console.log("Deno.fstat is", Deno.fstat); console.log("Deno.fstat is", Deno.fstat);
console.log("Deno.fstatSync is", Deno.fstatSync); console.log("Deno.fstatSync is", Deno.fstatSync);

View file

@ -1,6 +1,5 @@
window is undefined window is undefined
Deno.Buffer is undefined Deno.Buffer is undefined
Deno.copy is undefined
Deno.File is undefined Deno.File is undefined
Deno.fstat is undefined Deno.fstat is undefined
Deno.fstatSync is undefined Deno.fstatSync is undefined

View file

@ -1,80 +0,0 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { assertEquals, DENO_FUTURE } from "./test_util.ts";
import { Buffer } from "@std/io/buffer";
const DEFAULT_BUF_SIZE = 32 * 1024;
type Spy = { calls: number };
function repeat(c: string, bytes: number): Uint8Array {
assertEquals(c.length, 1);
const ui8 = new Uint8Array(bytes);
ui8.fill(c.charCodeAt(0));
return ui8;
}
function spyRead(obj: Buffer): Spy {
const spy: Spy = {
calls: 0,
};
const orig = obj.read.bind(obj);
obj.read = (p: Uint8Array): Promise<number | null> => {
spy.calls++;
return orig(p);
};
return spy;
}
Deno.test({ ignore: DENO_FUTURE }, async function copyWithDefaultBufferSize() {
const xBytes = repeat("b", DEFAULT_BUF_SIZE);
const reader = new Buffer(xBytes.buffer as ArrayBuffer);
const write = new Buffer();
const readSpy = spyRead(reader);
// deno-lint-ignore no-deprecated-deno-api
const n = await Deno.copy(reader, write);
assertEquals(n, xBytes.length);
assertEquals(write.length, xBytes.length);
assertEquals(readSpy.calls, 2); // read with DEFAULT_BUF_SIZE bytes + read with 0 bytes
});
Deno.test({ ignore: DENO_FUTURE }, async function copyWithCustomBufferSize() {
const bufSize = 1024;
const xBytes = repeat("b", DEFAULT_BUF_SIZE);
const reader = new Buffer(xBytes.buffer as ArrayBuffer);
const write = new Buffer();
const readSpy = spyRead(reader);
// deno-lint-ignore no-deprecated-deno-api
const n = await Deno.copy(reader, write, { bufSize });
assertEquals(n, xBytes.length);
assertEquals(write.length, xBytes.length);
assertEquals(readSpy.calls, DEFAULT_BUF_SIZE / bufSize + 1);
});
Deno.test(
{ ignore: DENO_FUTURE, permissions: { write: true } },
async function copyBufferToFile() {
const filePath = "test-file.txt";
// bigger than max File possible buffer 16kb
const bufSize = 32 * 1024;
const xBytes = repeat("b", bufSize);
const reader = new Buffer(xBytes.buffer as ArrayBuffer);
const write = await Deno.open(filePath, { write: true, create: true });
// deno-lint-ignore no-deprecated-deno-api
const n = await Deno.copy(reader, write, { bufSize });
assertEquals(n, xBytes.length);
write.close();
await Deno.remove(filePath);
},
);