mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(ext/node): use primordials in ext/node/polyfills/_brotli.js
(#24235)
Towards #24236
This commit is contained in:
parent
510db0a86e
commit
6ab143335a
1 changed files with 44 additions and 21 deletions
|
@ -1,9 +1,18 @@
|
|||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
// TODO(petamoriken): enable prefer-primordials for node polyfills
|
||||
// deno-lint-ignore-file prefer-primordials
|
||||
|
||||
import { core } from "ext:core/mod.js";
|
||||
import { core, primordials } from "ext:core/mod.js";
|
||||
const {
|
||||
Uint8Array,
|
||||
PromisePrototypeThen,
|
||||
PromisePrototypeCatch,
|
||||
ObjectValues,
|
||||
TypedArrayPrototypeSlice,
|
||||
TypedArrayPrototypeSubarray,
|
||||
TypedArrayPrototypeGetByteLength,
|
||||
DataViewPrototypeGetBuffer,
|
||||
TypedArrayPrototypeGetBuffer,
|
||||
} = primordials;
|
||||
const { isTypedArray, isDataView, close } = core;
|
||||
import {
|
||||
op_brotli_compress,
|
||||
op_brotli_compress_async,
|
||||
|
@ -28,8 +37,10 @@ const toU8 = (input) => {
|
|||
return enc.encode(input);
|
||||
}
|
||||
|
||||
if (input.buffer) {
|
||||
return new Uint8Array(input.buffer);
|
||||
if (isTypedArray(input)) {
|
||||
return new Uint8Array(TypedArrayPrototypeGetBuffer(input));
|
||||
} else if (isDataView(input)) {
|
||||
return new Uint8Array(DataViewPrototypeGetBuffer(input));
|
||||
}
|
||||
|
||||
return input;
|
||||
|
@ -52,18 +63,20 @@ export class BrotliDecompress extends Transform {
|
|||
// TODO(littledivy): use `encoding` argument
|
||||
transform(chunk, _encoding, callback) {
|
||||
const input = toU8(chunk);
|
||||
const output = new Uint8Array(chunk.byteLength);
|
||||
const output = new Uint8Array(TypedArrayPrototypeGetByteLength(chunk));
|
||||
const avail = op_brotli_decompress_stream(context, input, output);
|
||||
this.push(output.slice(0, avail));
|
||||
// deno-lint-ignore prefer-primordials
|
||||
this.push(TypedArrayPrototypeSlice(output, 0, avail));
|
||||
callback();
|
||||
},
|
||||
flush(callback) {
|
||||
const output = new Uint8Array(1024);
|
||||
let avail;
|
||||
while ((avail = op_brotli_decompress_stream_end(context, output)) > 0) {
|
||||
this.push(output.slice(0, avail));
|
||||
// deno-lint-ignore prefer-primordials
|
||||
this.push(TypedArrayPrototypeSlice(output, 0, avail));
|
||||
}
|
||||
core.close(context);
|
||||
close(context);
|
||||
callback();
|
||||
},
|
||||
});
|
||||
|
@ -84,7 +97,8 @@ export class BrotliCompress extends Transform {
|
|||
const output = new Uint8Array(brotliMaxCompressedSize(input.length));
|
||||
const written = op_brotli_compress_stream(context, input, output);
|
||||
if (written > 0) {
|
||||
this.push(output.slice(0, written));
|
||||
// deno-lint-ignore prefer-primordials
|
||||
this.push(TypedArrayPrototypeSlice(output, 0, written));
|
||||
}
|
||||
callback();
|
||||
},
|
||||
|
@ -92,14 +106,15 @@ export class BrotliCompress extends Transform {
|
|||
const output = new Uint8Array(1024);
|
||||
let avail;
|
||||
while ((avail = op_brotli_compress_stream_end(context, output)) > 0) {
|
||||
this.push(output.slice(0, avail));
|
||||
// deno-lint-ignore prefer-primordials
|
||||
this.push(TypedArrayPrototypeSlice(output, 0, avail));
|
||||
}
|
||||
core.close(context);
|
||||
close(context);
|
||||
callback();
|
||||
},
|
||||
});
|
||||
|
||||
const params = Object.values(options?.params ?? {});
|
||||
const params = ObjectValues(options?.params ?? {});
|
||||
this.#context = op_create_brotli_compress(params);
|
||||
const context = this.#context;
|
||||
}
|
||||
|
@ -144,9 +159,13 @@ export function brotliCompress(
|
|||
}
|
||||
|
||||
const { quality, lgwin, mode } = oneOffCompressOptions(options);
|
||||
op_brotli_compress_async(buf, quality, lgwin, mode)
|
||||
.then((result) => callback(null, Buffer.from(result)))
|
||||
.catch((err) => callback(err));
|
||||
PromisePrototypeCatch(
|
||||
PromisePrototypeThen(
|
||||
op_brotli_compress_async(buf, quality, lgwin, mode),
|
||||
(result) => callback(null, Buffer.from(result)),
|
||||
),
|
||||
(err) => callback(err),
|
||||
);
|
||||
}
|
||||
|
||||
export function brotliCompressSync(
|
||||
|
@ -158,14 +177,18 @@ export function brotliCompressSync(
|
|||
|
||||
const { quality, lgwin, mode } = oneOffCompressOptions(options);
|
||||
const len = op_brotli_compress(buf, output, quality, lgwin, mode);
|
||||
return Buffer.from(output.subarray(0, len));
|
||||
return Buffer.from(TypedArrayPrototypeSubarray(output, 0, len));
|
||||
}
|
||||
|
||||
export function brotliDecompress(input) {
|
||||
const buf = toU8(input);
|
||||
return op_brotli_decompress_async(buf)
|
||||
.then((result) => callback(null, Buffer.from(result)))
|
||||
.catch((err) => callback(err));
|
||||
return PromisePrototypeCatch(
|
||||
PromisePrototypeThen(
|
||||
op_brotli_decompress_async(buf),
|
||||
(result) => callback(null, Buffer.from(result)),
|
||||
),
|
||||
(err) => callback(err),
|
||||
);
|
||||
}
|
||||
|
||||
export function brotliDecompressSync(input) {
|
||||
|
|
Loading…
Reference in a new issue