nstdlib-nightly
Version:
Node.js standard library converted to runtime-agnostic ES modules.
151 lines (133 loc) • 3.51 kB
JavaScript
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/internal/webstreams/compression.js
import { newReadableWritablePairFromDuplex } from "nstdlib/lib/internal/webstreams/adapters";
import { customInspect } from "nstdlib/lib/internal/webstreams/util";
import {
customInspectSymbol as kInspect,
kEnumerableProperty,
} from "nstdlib/lib/internal/util";
import { createEnumConverter } from "nstdlib/lib/internal/webidl";
import * as __hoisted_zlib__ from "nstdlib/lib/zlib";
let zlib;
function lazyZlib() {
zlib ??= __hoisted_zlib__;
return zlib;
}
const formatConverter = createEnumConverter("CompressionFormat", [
"deflate",
"deflate-raw",
"gzip",
]);
/**
* @typedef {import('./readablestream').ReadableStream} ReadableStream
* @typedef {import('./writablestream').WritableStream} WritableStream
*/
class CompressionStream {
#handle;
#transform;
/**
* @param {'deflate'|'deflate-raw'|'gzip'} format
*/
constructor(format) {
format = formatConverter(format, {
prefix: "Failed to construct 'CompressionStream'",
context: "1st argument",
});
switch (format) {
case "deflate":
this.#handle = lazyZlib().createDeflate();
break;
case "deflate-raw":
this.#handle = lazyZlib().createDeflateRaw();
break;
case "gzip":
this.#handle = lazyZlib().createGzip();
break;
}
this.#transform = newReadableWritablePairFromDuplex(this.#handle);
}
/**
* @readonly
* @type {ReadableStream}
*/
get readable() {
return this.#transform.readable;
}
/**
* @readonly
* @type {WritableStream}
*/
get writable() {
return this.#transform.writable;
}
[kInspect](depth, options) {
return customInspect(depth, options, "CompressionStream", {
readable: this.#transform.readable,
writable: this.#transform.writable,
});
}
}
class DecompressionStream {
#handle;
#transform;
/**
* @param {'deflate'|'deflate-raw'|'gzip'} format
*/
constructor(format) {
format = formatConverter(format, {
prefix: "Failed to construct 'DecompressionStream'",
context: "1st argument",
});
switch (format) {
case "deflate":
this.#handle = lazyZlib().createInflate();
break;
case "deflate-raw":
this.#handle = lazyZlib().createInflateRaw();
break;
case "gzip":
this.#handle = lazyZlib().createGunzip();
break;
}
this.#transform = newReadableWritablePairFromDuplex(this.#handle);
}
/**
* @readonly
* @type {ReadableStream}
*/
get readable() {
return this.#transform.readable;
}
/**
* @readonly
* @type {WritableStream}
*/
get writable() {
return this.#transform.writable;
}
[kInspect](depth, options) {
return customInspect(depth, options, "DecompressionStream", {
readable: this.#transform.readable,
writable: this.#transform.writable,
});
}
}
Object.defineProperties(CompressionStream.prototype, {
readable: kEnumerableProperty,
writable: kEnumerableProperty,
[Symbol.toStringTag]: {
__proto__: null,
configurable: true,
value: "CompressionStream",
},
});
Object.defineProperties(DecompressionStream.prototype, {
readable: kEnumerableProperty,
writable: kEnumerableProperty,
[Symbol.toStringTag]: {
__proto__: null,
configurable: true,
value: "DecompressionStream",
},
});
export { CompressionStream };
export { DecompressionStream };