diff options
author | Asher Gomez <ashersaupingomez@gmail.com> | 2024-09-06 18:28:05 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-06 18:28:05 +1000 |
commit | d8f3123c365d17bfb0f73431160dcb1a2af19c32 (patch) | |
tree | 5c42703ee742a71506eff63e5edab9794f34ee11 /runtime/js | |
parent | 7937ae3f2f5a8c11f52c42676ba56d12fcb59aeb (diff) |
BREAKING(buffer): remove `Deno.Buffer` (#25441)
Towards #22079
---------
Signed-off-by: Asher Gomez <ashersaupingomez@gmail.com>
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/13_buffer.js | 237 | ||||
-rw-r--r-- | runtime/js/90_deno_ns.js | 4 | ||||
-rw-r--r-- | runtime/js/99_main.js | 3 |
3 files changed, 0 insertions, 244 deletions
diff --git a/runtime/js/13_buffer.js b/runtime/js/13_buffer.js deleted file mode 100644 index 4d3f08d4d..000000000 --- a/runtime/js/13_buffer.js +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -// This code has been ported almost directly from Go's src/bytes/buffer.go -// Copyright 2009 The Go Authors. All rights reserved. BSD license. -// https://github.com/golang/go/blob/master/LICENSE - -import { internals, primordials } from "ext:core/mod.js"; -const { - ArrayBufferPrototypeGetByteLength, - TypedArrayPrototypeSubarray, - TypedArrayPrototypeSlice, - TypedArrayPrototypeSet, - TypedArrayPrototypeGetBuffer, - TypedArrayPrototypeGetByteLength, - MathFloor, - MathMin, - PromiseResolve, - Uint8Array, - Error, -} = primordials; - -import { assert } from "ext:deno_web/00_infra.js"; - -// MIN_READ is the minimum ArrayBuffer size passed to a read call by -// buffer.ReadFrom. As long as the Buffer has at least MIN_READ bytes beyond -// what is required to hold the contents of r, readFrom() will not grow the -// underlying buffer. -const MIN_READ = 32 * 1024; -const MAX_SIZE = 2 ** 32 - 2; - -// `off` is the offset into `dst` where it will at which to begin writing values -// from `src`. -// Returns the number of bytes copied. -function copyBytes(src, dst, off = 0) { - const r = TypedArrayPrototypeGetByteLength(dst) - off; - if (TypedArrayPrototypeGetByteLength(src) > r) { - src = TypedArrayPrototypeSubarray(src, 0, r); - } - TypedArrayPrototypeSet(dst, src, off); - return TypedArrayPrototypeGetByteLength(src); -} - -class Buffer { - #buf = null; // contents are the bytes buf[off : len(buf)] - #off = 0; // read at buf[off], write at buf[buf.byteLength] - - constructor(ab) { - internals.warnOnDeprecatedApi( - "new Deno.Buffer()", - new Error().stack, - "Use `Buffer` from `https://jsr.io/@std/io/doc/buffer/~` instead.", - ); - if (ab == null) { - this.#buf = new Uint8Array(0); - return; - } - - this.#buf = new Uint8Array(ab); - } - - bytes(options = { copy: true }) { - if (options.copy === false) { - return TypedArrayPrototypeSubarray(this.#buf, this.#off); - } - return TypedArrayPrototypeSlice(this.#buf, this.#off); - } - - empty() { - return TypedArrayPrototypeGetByteLength(this.#buf) <= this.#off; - } - - get length() { - return TypedArrayPrototypeGetByteLength(this.#buf) - this.#off; - } - - get capacity() { - return ArrayBufferPrototypeGetByteLength( - TypedArrayPrototypeGetBuffer(this.#buf), - ); - } - - truncate(n) { - if (n === 0) { - this.reset(); - return; - } - if (n < 0 || n > this.length) { - throw Error("bytes.Buffer: truncation out of range"); - } - this.#reslice(this.#off + n); - } - - reset() { - this.#reslice(0); - this.#off = 0; - } - - #tryGrowByReslice(n) { - const l = TypedArrayPrototypeGetByteLength(this.#buf); - if (n <= this.capacity - l) { - this.#reslice(l + n); - return l; - } - return -1; - } - - #reslice(len) { - const ab = TypedArrayPrototypeGetBuffer(this.#buf); - assert(len <= ArrayBufferPrototypeGetByteLength(ab)); - this.#buf = new Uint8Array(ab, 0, len); - } - - readSync(p) { - if (this.empty()) { - // Buffer is empty, reset to recover space. - this.reset(); - if (TypedArrayPrototypeGetByteLength(p) === 0) { - // this edge case is tested in 'bufferReadEmptyAtEOF' test - return 0; - } - return null; - } - const nread = copyBytes( - TypedArrayPrototypeSubarray(this.#buf, this.#off), - p, - ); - this.#off += nread; - return nread; - } - - read(p) { - const rr = this.readSync(p); - return PromiseResolve(rr); - } - - writeSync(p) { - const m = this.#grow(TypedArrayPrototypeGetByteLength(p)); - return copyBytes(p, this.#buf, m); - } - - write(p) { - const n = this.writeSync(p); - return PromiseResolve(n); - } - - #grow(n) { - const m = this.length; - // If buffer is empty, reset to recover space. - if (m === 0 && this.#off !== 0) { - this.reset(); - } - // Fast: Try to grow by means of a reslice. - const i = this.#tryGrowByReslice(n); - if (i >= 0) { - return i; - } - const c = this.capacity; - if (n <= MathFloor(c / 2) - m) { - // We can slide things down instead of allocating a new - // ArrayBuffer. We only need m+n <= c to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copyBytes(TypedArrayPrototypeSubarray(this.#buf, this.#off), this.#buf); - } else if (c + n > MAX_SIZE) { - throw new Error("The buffer cannot be grown beyond the maximum size."); - } else { - // Not enough space anywhere, we need to allocate. - const buf = new Uint8Array(MathMin(2 * c + n, MAX_SIZE)); - copyBytes(TypedArrayPrototypeSubarray(this.#buf, this.#off), buf); - this.#buf = buf; - } - // Restore this.#off and len(this.#buf). - this.#off = 0; - this.#reslice(MathMin(m + n, MAX_SIZE)); - return m; - } - - grow(n) { - if (n < 0) { - throw Error("Buffer.grow: negative count"); - } - const m = this.#grow(n); - this.#reslice(m); - } - - async readFrom(r) { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(TypedArrayPrototypeGetBuffer(this.#buf), this.length); - - const nread = await r.read(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) { - this.writeSync(TypedArrayPrototypeSubarray(buf, 0, nread)); - } else this.#reslice(this.length + nread); - - n += nread; - } - } - - readFromSync(r) { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(TypedArrayPrototypeGetBuffer(this.#buf), this.length); - - const nread = r.readSync(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) { - this.writeSync(TypedArrayPrototypeSubarray(buf, 0, nread)); - } else this.#reslice(this.length + nread); - - n += nread; - } - } -} - -export { Buffer }; diff --git a/runtime/js/90_deno_ns.js b/runtime/js/90_deno_ns.js index e8e1ad57a..19f3e46a9 100644 --- a/runtime/js/90_deno_ns.js +++ b/runtime/js/90_deno_ns.js @@ -20,7 +20,6 @@ import * as errors from "ext:runtime/01_errors.js"; import * as version from "ext:runtime/01_version.ts"; import * as permissions from "ext:runtime/10_permissions.js"; import * as io from "ext:deno_io/12_io.js"; -import * as buffer from "ext:runtime/13_buffer.js"; import * as fs from "ext:deno_fs/30_fs.js"; import * as os from "ext:runtime/30_os.js"; import * as fsEvents from "ext:runtime/40_fs_events.js"; @@ -82,9 +81,6 @@ const denoNs = { env: os.env, exit: os.exit, execPath: os.execPath, - Buffer: buffer.Buffer, - readAll: buffer.readAll, - readAllSync: buffer.readAllSync, copy: io.copy, SeekMode: io.SeekMode, File: fs.File, diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index e00c592f1..d83bfbff1 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -1,4 +1,3 @@ -// deno-lint-ignore-file no-deprecated-deno-api // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Remove Intl.v8BreakIterator because it is a non-standard API. @@ -800,7 +799,6 @@ function bootstrapMainRuntime(runtimeOptions, warmup = false) { } if (internals.future) { delete globalThis.window; - delete Deno.Buffer; delete Deno.FsFile.prototype.rid; } } else { @@ -959,7 +957,6 @@ function bootstrapWorkerRuntime( } if (internals.future) { - delete Deno.Buffer; delete Deno.FsFile.prototype.rid; } } else { |