From 29ee7f1178de8752081948c28cf37e046b2de56d Mon Sep 17 00:00:00 2001 From: Kenny Daniel Date: Wed, 19 Mar 2025 23:02:32 -0700 Subject: [PATCH] Split out exports for more efficient packaging --- README.md | 2 +- eslint.config.js | 2 +- package.json | 1 + src/brotli.js | 2 +- src/compressors.js | 15 +++++++++++++++ src/index.d.ts | 8 ++++++++ src/index.js | 37 +++++++++++++++++++++---------------- src/lz4.js | 4 ++-- 8 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 src/compressors.js diff --git a/README.md b/README.md index d0eef56..524894f 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Uses [fzstd](https://github.com/101arrowz/fzstd) for Zstandard decompression. | File | Size | | --- | --- | -| hyparquet-compressors.min.js | 116.1kb | +| hyparquet-compressors.min.js | 116.4kb | | hyparquet-compressors.min.js.gz | 75.2kb | ## References diff --git a/eslint.config.js b/eslint.config.js index 20e4723..8cfd2b2 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -47,7 +47,7 @@ export default [ 'no-constant-condition': 'off', 'no-extra-parens': 'error', 'no-multi-spaces': 'error', - 'no-trailing-spaces': 'warn', + 'no-trailing-spaces': 'error', 'no-undef': 'error', 'no-unused-vars': 'error', 'no-useless-concat': 'error', diff --git a/package.json b/package.json index 8c62745..4a86d10 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "build": "rollup -c", "coverage": "vitest run --coverage", "lint": "eslint", + "lint:fix": "eslint --fix", "test": "vitest run" }, "dependencies": { diff --git a/src/brotli.js b/src/brotli.js index bb06176..60c7c10 100644 --- a/src/brotli.js +++ b/src/brotli.js @@ -55,7 +55,7 @@ const maxDictionaryWordLength = 24 * @param {number} outputLength * @returns {Uint8Array} */ -export function BROTLI(input, outputLength) { +export function decompressBrotli(input, outputLength) { const output = new Uint8Array(outputLength) const brotliInput = new BrotliInput(input) const brotliOutput = new BrotliOutput(output) diff --git a/src/compressors.js b/src/compressors.js new file mode 100644 index 0000000..380ad46 --- /dev/null +++ b/src/compressors.js @@ -0,0 +1,15 @@ +import { decompress as decompressZstd } from 'fzstd' +import { snappyUncompressor } from 'hysnappy' +import { decompressBrotli } from './brotli.js' +import { gunzip } from './gzip.js' +import { decompressLz4, decompressLz4Raw } from './lz4.js' + +/** @type {import('hyparquet').Compressors} */ +export const compressors = { + SNAPPY: snappyUncompressor(), // loads wasm + GZIP: (input, length) => gunzip(input, new Uint8Array(length)), + BROTLI: decompressBrotli, + ZSTD: input => decompressZstd(input), + LZ4: decompressLz4, + LZ4_RAW: decompressLz4Raw, +} diff --git a/src/index.d.ts b/src/index.d.ts index 978f963..5914286 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -13,3 +13,11 @@ export type Compressors = { } export const compressors: Compressors + +export function decompressBrotli(input: Uint8Array, outputLength: number): Uint8Array +export function decompressGzip(input: Uint8Array, outputLength: number): Uint8Array +export function decompressLz4(input: Uint8Array, outputLength: number): Uint8Array +export function decompressLz4Raw(input: Uint8Array, outputLength: number): Uint8Array +export function decompressSnappy(input: Uint8Array, outputLength: number): Uint8Array +export function decompressZstd(input: Uint8Array, outputLength: number): Uint8Array +export function gunzip(input: Uint8Array, output?: Uint8Array): Uint8Array diff --git a/src/index.js b/src/index.js index 95596f1..59971fb 100644 --- a/src/index.js +++ b/src/index.js @@ -1,21 +1,26 @@ -import { decompress as ZSTD } from 'fzstd' -import { snappyUncompressor } from 'hysnappy' -import { BROTLI } from './brotli.js' +import { decompress as decompressZstd } from 'fzstd' +import { snappyUncompress as decompressSnappy } from 'hysnappy' +import { decompressBrotli } from './brotli.js' import { gunzip } from './gzip.js' -import { LZ4, LZ4_RAW } from './lz4.js' +import { decompressLz4, decompressLz4Raw } from './lz4.js' + +export { compressors } from './compressors.js' /** - * @type {import('hyparquet').Compressors} + * @param {Uint8Array} input + * @param {number} outputLength + * @returns {Uint8Array} */ -export const compressors = { - SNAPPY: snappyUncompressor(), - GZIP: (input, length) => { - const out = new Uint8Array(length) - gunzip(input, out) - return out - }, - BROTLI, - ZSTD: input => ZSTD(input), - LZ4, - LZ4_RAW, +function decompressGzip(input, outputLength) { + return gunzip(input, new Uint8Array(outputLength)) +} + +export { + decompressBrotli, + decompressGzip, + decompressLz4, + decompressLz4Raw, + decompressSnappy, + decompressZstd, + gunzip, } diff --git a/src/lz4.js b/src/lz4.js index 03128d7..d551b80 100644 --- a/src/lz4.js +++ b/src/lz4.js @@ -6,7 +6,7 @@ * @param {number} outputLength * @returns {Uint8Array} */ -export function LZ4(input, outputLength) { +export function decompressLz4(input, outputLength) { const output = new Uint8Array(outputLength) try { let i = 0 // input index @@ -41,7 +41,7 @@ export function LZ4(input, outputLength) { * @param {number} outputLength * @returns {Uint8Array} */ -export function LZ4_RAW(input, outputLength) { +export function decompressLz4Raw(input, outputLength) { const output = new Uint8Array(outputLength) lz4basic(input, output, 0) return output