| 'use strict'; |
| |
| const { |
| ObjectDefineProperties, |
| SymbolToStringTag, |
| } = primordials; |
| |
| const { |
| newReadableWritablePairFromDuplex, |
| } = require('internal/webstreams/adapters'); |
| |
| const { customInspect } = require('internal/webstreams/util'); |
| |
| const { |
| customInspectSymbol: kInspect, |
| kEnumerableProperty, |
| } = require('internal/util'); |
| |
| const { createEnumConverter } = require('internal/webidl'); |
| |
| let zlib; |
| function lazyZlib() { |
| zlib ??= require('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) { |
| 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) { |
| customInspect(depth, options, 'DecompressionStream', { |
| readable: this.#transform.readable, |
| writable: this.#transform.writable, |
| }); |
| } |
| } |
| |
| ObjectDefineProperties(CompressionStream.prototype, { |
| readable: kEnumerableProperty, |
| writable: kEnumerableProperty, |
| [SymbolToStringTag]: { |
| __proto__: null, |
| configurable: true, |
| value: 'CompressionStream', |
| }, |
| }); |
| |
| ObjectDefineProperties(DecompressionStream.prototype, { |
| readable: kEnumerableProperty, |
| writable: kEnumerableProperty, |
| [SymbolToStringTag]: { |
| __proto__: null, |
| configurable: true, |
| value: 'DecompressionStream', |
| }, |
| }); |
| |
| module.exports = { |
| CompressionStream, |
| DecompressionStream, |
| }; |