simple-zstd 1.4.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.github/workflows/ci.yml +46 -0
  2. package/.github/workflows/release.yml +45 -0
  3. package/.prettierignore +5 -0
  4. package/.prettierrc +8 -0
  5. package/.release-it.json +28 -0
  6. package/CHANGELOG.md +26 -0
  7. package/README.md +690 -47
  8. package/dist/src/buffer-writable.d.ts +12 -0
  9. package/dist/src/buffer-writable.js +41 -0
  10. package/dist/src/index.d.ts +49 -0
  11. package/dist/src/index.js +430 -0
  12. package/dist/src/peek-transform.d.ts +16 -0
  13. package/dist/src/peek-transform.js +145 -0
  14. package/dist/src/process-duplex.d.ts +11 -0
  15. package/dist/src/process-duplex.js +157 -0
  16. package/dist/src/process-queue.d.ts +8 -0
  17. package/dist/src/process-queue.js +94 -0
  18. package/dist/src/types.d.ts +34 -0
  19. package/dist/src/types.js +3 -0
  20. package/eslint.config.js +49 -0
  21. package/package.json +32 -16
  22. package/src/buffer-writable.ts +30 -0
  23. package/src/index.ts +472 -0
  24. package/src/is-zst.d.ts +5 -0
  25. package/src/peek-transform.ts +153 -0
  26. package/src/process-duplex.ts +164 -0
  27. package/src/process-queue.ts +97 -0
  28. package/src/types.ts +35 -0
  29. package/tsconfig.json +110 -0
  30. package/.eslintrc.js +0 -18
  31. package/.nyc_output/4b36a1ef-a01d-4de7-a4be-e966f315cbd7.json +0 -1
  32. package/.nyc_output/5d73987b-f188-488b-8441-66c67bb19076.json +0 -1
  33. package/.nyc_output/processinfo/4b36a1ef-a01d-4de7-a4be-e966f315cbd7.json +0 -1
  34. package/.nyc_output/processinfo/5d73987b-f188-488b-8441-66c67bb19076.json +0 -1
  35. package/.nyc_output/processinfo/index.json +0 -1
  36. package/.travis.yml +0 -9
  37. package/coverage/base.css +0 -224
  38. package/coverage/block-navigation.js +0 -87
  39. package/coverage/buffer-writable.js.html +0 -154
  40. package/coverage/favicon.png +0 -0
  41. package/coverage/index.html +0 -146
  42. package/coverage/index.js.html +0 -841
  43. package/coverage/oven.js.html +0 -235
  44. package/coverage/prettify.css +0 -1
  45. package/coverage/prettify.js +0 -2
  46. package/coverage/sort-arrow-sprite.png +0 -0
  47. package/coverage/sorter.js +0 -196
  48. package/index.js +0 -68
@@ -0,0 +1,12 @@
1
+ import { Writable, WritableOptions } from 'node:stream';
2
+ export default class BufferWritable extends Writable {
3
+ #private;
4
+ constructor(options: WritableOptions);
5
+ _write(chunk: Buffer, encoding: string, callback?: () => void): void;
6
+ _writev(chunks: Array<{
7
+ chunk: Buffer;
8
+ encoding: string;
9
+ }>, callback?: () => void): void;
10
+ _final(callback?: () => void): void;
11
+ getBuffer(): Buffer;
12
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _BufferWritable_buf;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_stream_1 = require("node:stream");
16
+ class BufferWritable extends node_stream_1.Writable {
17
+ constructor(options) {
18
+ super(options);
19
+ _BufferWritable_buf.set(this, void 0);
20
+ __classPrivateFieldSet(this, _BufferWritable_buf, [], "f");
21
+ }
22
+ _write(chunk, encoding, callback = () => null) {
23
+ __classPrivateFieldGet(this, _BufferWritable_buf, "f").push(chunk);
24
+ callback();
25
+ }
26
+ _writev(chunks, callback = () => null) {
27
+ for (const { chunk } of chunks) {
28
+ __classPrivateFieldGet(this, _BufferWritable_buf, "f").push(chunk);
29
+ }
30
+ callback();
31
+ }
32
+ _final(callback = () => null) {
33
+ callback();
34
+ }
35
+ getBuffer() {
36
+ return Buffer.concat(__classPrivateFieldGet(this, _BufferWritable_buf, "f")) || Buffer.alloc(0);
37
+ }
38
+ }
39
+ _BufferWritable_buf = new WeakMap();
40
+ exports.default = BufferWritable;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLXdyaXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1ZmZlci13cml0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUF3RDtBQUV4RCxNQUFxQixjQUFlLFNBQVEsc0JBQVE7SUFHbEQsWUFBWSxPQUF3QjtRQUNsQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIakIsc0NBQW9CO1FBSWxCLHVCQUFBLElBQUksdUJBQVEsRUFBRSxNQUFBLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxXQUF1QixHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ3ZFLHVCQUFBLElBQUksMkJBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWtELEVBQUUsV0FBdUIsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUMzRixLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMvQix1QkFBQSxJQUFJLDJCQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBdUIsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUN0QyxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUFBLElBQUksMkJBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGOztrQkEzQm9CLGNBQWMifQ==
@@ -0,0 +1,49 @@
1
+ import { Duplex } from 'node:stream';
2
+ import { ZSTDOpts, PoolOpts } from './types';
3
+ export type { ZSTDOpts, PoolOpts, CompressOpts, DecompressOpts, DictionaryObject } from './types';
4
+ /**
5
+ * Clear the dictionary cache and cleanup all temporary files
6
+ * This is useful for testing or manual cache management
7
+ * @returns Promise that resolves when all cleanups are complete
8
+ */
9
+ export declare function clearDictionaryCache(): Promise<void>;
10
+ export declare function compress(compLevel: number, opts?: ZSTDOpts): Promise<Duplex>;
11
+ export declare function compressBuffer(buffer: Buffer, compLevel: number, opts?: ZSTDOpts): Promise<Buffer>;
12
+ export declare function decompress(opts?: ZSTDOpts): Promise<Duplex>;
13
+ export declare function decompressBuffer(buffer: Buffer, opts?: ZSTDOpts): Promise<Buffer>;
14
+ export declare class SimpleZSTD {
15
+ #private;
16
+ private constructor();
17
+ /**
18
+ * Create a new SimpleZSTD instance with process pooling
19
+ * @param poolOptions - Configuration for compression and decompression process pools
20
+ * @returns Promise resolving to initialized SimpleZSTD instance
21
+ */
22
+ static create(poolOptions?: PoolOpts): Promise<SimpleZSTD>;
23
+ get queueStats(): {
24
+ compress: {
25
+ hits: number;
26
+ misses: number;
27
+ };
28
+ decompress: {
29
+ hits: number;
30
+ misses: number;
31
+ };
32
+ };
33
+ destroy(): Promise<void>;
34
+ /**
35
+ * Get a compression stream from the pool, or create a one-off stream with custom compression level
36
+ * @param compLevel - Optional compression level (1-22). If provided, creates a new stream instead of using the pool
37
+ * @returns Promise resolving to a Duplex compression stream
38
+ */
39
+ compress(compLevel?: number): Promise<Duplex>;
40
+ /**
41
+ * Compress a buffer using the pool, or with a custom compression level
42
+ * @param buffer - Buffer to compress
43
+ * @param compLevel - Optional compression level (1-22). If provided, uses this level instead of pool default
44
+ * @returns Promise resolving to compressed buffer
45
+ */
46
+ compressBuffer(buffer: Buffer, compLevel?: number): Promise<Buffer>;
47
+ decompress(): Promise<Duplex>;
48
+ decompressBuffer(buffer: Buffer): Promise<Buffer>;
49
+ }
@@ -0,0 +1,430 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _SimpleZSTD_compressQueue, _SimpleZSTD_decompressQueue, _SimpleZSTD_compressDictCleanup, _SimpleZSTD_decompressDictCleanup, _SimpleZSTD_ready, _SimpleZSTD_poolOptions;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.SimpleZSTD = void 0;
19
+ exports.clearDictionaryCache = clearDictionaryCache;
20
+ exports.compress = compress;
21
+ exports.compressBuffer = compressBuffer;
22
+ exports.decompress = decompress;
23
+ exports.decompressBuffer = decompressBuffer;
24
+ const node_fs_1 = __importDefault(require("node:fs"));
25
+ const promises_1 = require("node:fs/promises");
26
+ const node_crypto_1 = require("node:crypto");
27
+ const node_stream_1 = require("node:stream");
28
+ const promises_2 = require("node:stream/promises");
29
+ const node_child_process_1 = require("node:child_process");
30
+ const is_zst_1 = __importDefault(require("is-zst"));
31
+ const tmp_promise_1 = require("tmp-promise");
32
+ const debug_1 = __importDefault(require("debug"));
33
+ const debug = (0, debug_1.default)('SimpleZSTD');
34
+ const process_queue_1 = __importDefault(require("./process-queue"));
35
+ const buffer_writable_1 = __importDefault(require("./buffer-writable"));
36
+ const process_duplex_1 = __importDefault(require("./process-duplex"));
37
+ const peek_transform_1 = __importDefault(require("./peek-transform"));
38
+ // Dictionary cache to avoid recreating temp files for the same dictionary buffer
39
+ // Map: hash -> { path: string, cleanup: () => void, refCount: number }
40
+ const dictionaryCache = new Map();
41
+ function hashBuffer(buffer) {
42
+ return (0, node_crypto_1.createHash)('sha256').update(buffer).digest('hex');
43
+ }
44
+ async function getCachedDictionaryPath(dictionary) {
45
+ const hash = hashBuffer(dictionary);
46
+ let cached = dictionaryCache.get(hash);
47
+ if (cached) {
48
+ cached.refCount++;
49
+ debug(`Dictionary cache hit: ${hash.slice(0, 8)}... (refCount: ${cached.refCount})`);
50
+ return {
51
+ path: cached.path,
52
+ cleanup: () => {
53
+ cached.refCount--;
54
+ debug(`Dictionary refCount decreased: ${hash.slice(0, 8)}... (refCount: ${cached.refCount})`);
55
+ // Don't call async cleanup here - it will be handled by clearDictionaryCache()
56
+ // or when all references are released
57
+ },
58
+ };
59
+ }
60
+ debug(`Dictionary cache miss: ${hash.slice(0, 8)}... - creating temp file`);
61
+ const { path, cleanup: tmpCleanup } = await (0, tmp_promise_1.file)({ prefix: 'zstd-dict-' });
62
+ await (0, promises_1.writeFile)(path, dictionary);
63
+ dictionaryCache.set(hash, {
64
+ path,
65
+ cleanup: tmpCleanup,
66
+ refCount: 1,
67
+ });
68
+ return {
69
+ path,
70
+ cleanup: () => {
71
+ const cached = dictionaryCache.get(hash);
72
+ if (cached) {
73
+ cached.refCount--;
74
+ debug(`Dictionary refCount decreased: ${hash.slice(0, 8)}... (refCount: ${cached.refCount})`);
75
+ // Don't call async cleanup here - it will be handled by clearDictionaryCache()
76
+ // or when all references are released
77
+ }
78
+ },
79
+ };
80
+ }
81
+ /**
82
+ * Clear the dictionary cache and cleanup all temporary files
83
+ * This is useful for testing or manual cache management
84
+ * @returns Promise that resolves when all cleanups are complete
85
+ */
86
+ async function clearDictionaryCache() {
87
+ debug('Clearing dictionary cache');
88
+ const cleanupPromises = [];
89
+ for (const [hash, cached] of dictionaryCache.entries()) {
90
+ debug(`Cleaning up cached dictionary: ${hash.slice(0, 8)}...`);
91
+ // tmp-promise cleanup() returns a Promise
92
+ cleanupPromises.push(Promise.resolve(cached.cleanup()));
93
+ }
94
+ await Promise.all(cleanupPromises);
95
+ dictionaryCache.clear();
96
+ }
97
+ const find = process.platform === 'win32' ? 'where zstd.exe' : 'which zstd';
98
+ let bin;
99
+ try {
100
+ bin = (0, node_child_process_1.execSync)(find, { env: process.env }).toString().replace(/\n$/, '').replace(/\r$/, '');
101
+ debug(bin);
102
+ }
103
+ catch {
104
+ throw new Error('Can not access zstd! Is it installed?');
105
+ }
106
+ try {
107
+ node_fs_1.default.accessSync(bin, node_fs_1.default.constants.X_OK);
108
+ }
109
+ catch {
110
+ throw new Error('zstd is not executable');
111
+ }
112
+ async function CreateCompressStream(compLevel, opts) {
113
+ let lvl = compLevel;
114
+ let zo = opts.zstdOptions || [];
115
+ let path = null;
116
+ let cleanup = () => null;
117
+ if (!lvl)
118
+ lvl = 3;
119
+ if (lvl < 1 || lvl > 22)
120
+ lvl = 3;
121
+ // Dictionary
122
+ if (opts.dictionary && 'path' in opts.dictionary) {
123
+ zo = [...zo, '-D', `${opts.dictionary.path}`];
124
+ }
125
+ else if (Buffer.isBuffer(opts.dictionary)) {
126
+ // Use cached dictionary to avoid recreating temp files
127
+ ({ path, cleanup } = await getCachedDictionaryPath(opts.dictionary));
128
+ zo = [...zo, '-D', `${path}`];
129
+ }
130
+ let c;
131
+ try {
132
+ debug(bin, ['-zc', `-${lvl}`, ...zo], opts.spawnOptions, opts.streamOptions);
133
+ c = new process_duplex_1.default(bin, ['-zc', `-${lvl}`, ...zo], opts.spawnOptions, opts.streamOptions);
134
+ }
135
+ catch (err) {
136
+ // cleanup if error;
137
+ cleanup();
138
+ throw err;
139
+ }
140
+ c.on('exit', (code, signal) => {
141
+ debug('c exit', code, signal);
142
+ if (code !== 0) {
143
+ setImmediate(() => {
144
+ c.destroy(new Error(`zstd exited non zero. code: ${code} signal: ${signal}`));
145
+ });
146
+ }
147
+ cleanup();
148
+ });
149
+ return c;
150
+ }
151
+ function CompressBuffer(buffer, c) {
152
+ return new Promise((resolve, reject) => {
153
+ const w = new buffer_writable_1.default({});
154
+ c.once('close', () => {
155
+ setImmediate(() => {
156
+ const result = w.getBuffer();
157
+ if (result) {
158
+ resolve(result);
159
+ }
160
+ else {
161
+ reject(new Error('Compression failed'));
162
+ }
163
+ });
164
+ });
165
+ (0, promises_2.pipeline)(node_stream_1.Readable.from(buffer), c, w)
166
+ .then(() => {
167
+ c.destroy();
168
+ })
169
+ .catch((err) => {
170
+ reject(err);
171
+ c.destroy();
172
+ });
173
+ });
174
+ }
175
+ async function CreateDecompressStream(opts) {
176
+ // Dictionary
177
+ let zo = opts.zstdOptions || [];
178
+ let path = null;
179
+ let cleanup = () => null;
180
+ let terminate = false;
181
+ if (opts.dictionary && 'path' in opts.dictionary) {
182
+ zo = [...zo, '-D', `${opts.dictionary.path}`];
183
+ }
184
+ else if (Buffer.isBuffer(opts.dictionary)) {
185
+ // Use cached dictionary to avoid recreating temp files
186
+ ({ path, cleanup } = await getCachedDictionaryPath(opts.dictionary));
187
+ zo = [...zo, '-D', `${path}`];
188
+ }
189
+ let d;
190
+ try {
191
+ debug(bin, ['-dc', ...zo], opts.spawnOptions, opts.streamOptions);
192
+ d = new process_duplex_1.default(bin, ['-dc', ...zo], opts.spawnOptions, opts.streamOptions);
193
+ }
194
+ catch (err) {
195
+ // cleanup if error
196
+ cleanup();
197
+ throw err;
198
+ }
199
+ d.on('exit', (code, signal) => {
200
+ debug('d exit', code, signal);
201
+ if (code !== 0 && !terminate) {
202
+ setImmediate(() => {
203
+ d.destroy(new Error(`zstd exited non zero. code: ${code} signal: ${signal}`));
204
+ });
205
+ }
206
+ cleanup();
207
+ });
208
+ const wrapper = new peek_transform_1.default({ maxBuffer: 10 }, (data, swap) => {
209
+ if ((0, is_zst_1.default)(data)) {
210
+ swap(null, d);
211
+ }
212
+ else {
213
+ debug('not zstd');
214
+ terminate = true;
215
+ d.end();
216
+ swap(null, new node_stream_1.PassThrough());
217
+ }
218
+ });
219
+ // CRITICAL: Wrap _destroy to ensure ProcessDuplex is always destroyed
220
+ const originalDestroy = wrapper._destroy.bind(wrapper);
221
+ wrapper._destroy = function (error, callback) {
222
+ if (!d.destroyed) {
223
+ d.destroy();
224
+ }
225
+ originalDestroy(error, callback);
226
+ };
227
+ return wrapper;
228
+ }
229
+ function DecompressBuffer(buffer, d) {
230
+ return new Promise((resolve, reject) => {
231
+ const w = new buffer_writable_1.default({});
232
+ d.once('close', () => {
233
+ setImmediate(() => {
234
+ resolve(w.getBuffer() || Buffer.alloc(0));
235
+ });
236
+ });
237
+ (0, promises_2.pipeline)(node_stream_1.Readable.from(buffer), d, w)
238
+ .then(() => {
239
+ d.destroy();
240
+ })
241
+ .catch((err) => {
242
+ reject(err);
243
+ d.destroy();
244
+ });
245
+ });
246
+ }
247
+ // Standalone Functions
248
+ function compress(compLevel, opts = {}) {
249
+ return CreateCompressStream(compLevel, opts);
250
+ }
251
+ async function compressBuffer(buffer, compLevel, opts = {}) {
252
+ const c = await CreateCompressStream(compLevel, opts);
253
+ return CompressBuffer(buffer, c);
254
+ }
255
+ function decompress(opts = {}) {
256
+ return CreateDecompressStream(opts);
257
+ }
258
+ async function decompressBuffer(buffer, opts = {}) {
259
+ const d = await CreateDecompressStream(opts);
260
+ return DecompressBuffer(buffer, d);
261
+ }
262
+ // SimpleZSTD Class
263
+ class SimpleZSTD {
264
+ constructor(poolOptions) {
265
+ _SimpleZSTD_compressQueue.set(this, void 0);
266
+ _SimpleZSTD_decompressQueue.set(this, void 0);
267
+ _SimpleZSTD_compressDictCleanup.set(this, () => null);
268
+ _SimpleZSTD_decompressDictCleanup.set(this, () => null);
269
+ _SimpleZSTD_ready.set(this, void 0);
270
+ _SimpleZSTD_poolOptions.set(this, void 0);
271
+ debug('constructor', poolOptions);
272
+ __classPrivateFieldSet(this, _SimpleZSTD_poolOptions, poolOptions, "f");
273
+ __classPrivateFieldSet(this, _SimpleZSTD_compressDictCleanup, () => null, "f");
274
+ __classPrivateFieldSet(this, _SimpleZSTD_decompressDictCleanup, () => null, "f");
275
+ __classPrivateFieldSet(this, _SimpleZSTD_ready, new Promise((resolve, reject) => {
276
+ (async () => {
277
+ try {
278
+ // Handle compress queue dictionary
279
+ let compressDictPath = undefined;
280
+ const compressDict = poolOptions?.compressQueue?.dictionary;
281
+ if (compressDict && 'path' in compressDict) {
282
+ compressDictPath = compressDict.path;
283
+ }
284
+ else if (compressDict && Buffer.isBuffer(compressDict)) {
285
+ const { path, cleanup } = await (0, tmp_promise_1.file)({ prefix: 'zstd-dict-' });
286
+ __classPrivateFieldSet(this, _SimpleZSTD_compressDictCleanup, cleanup, "f");
287
+ await (0, promises_1.writeFile)(path, compressDict);
288
+ compressDictPath = path;
289
+ }
290
+ // Handle decompress queue dictionary
291
+ let decompressDictPath = undefined;
292
+ const decompressDict = poolOptions?.decompressQueue?.dictionary;
293
+ if (decompressDict && 'path' in decompressDict) {
294
+ decompressDictPath = decompressDict.path;
295
+ }
296
+ else if (decompressDict && Buffer.isBuffer(decompressDict)) {
297
+ const { path, cleanup } = await (0, tmp_promise_1.file)({ prefix: 'zstd-dict-' });
298
+ __classPrivateFieldSet(this, _SimpleZSTD_decompressDictCleanup, cleanup, "f");
299
+ await (0, promises_1.writeFile)(path, decompressDict);
300
+ decompressDictPath = path;
301
+ }
302
+ __classPrivateFieldSet(this, _SimpleZSTD_compressQueue, new process_queue_1.default(poolOptions?.compressQueueSize || 0, () => {
303
+ debug('compress factory');
304
+ return CreateCompressStream(poolOptions?.compressQueue?.compLevel || 3, {
305
+ ...poolOptions?.compressQueue,
306
+ dictionary: compressDictPath ? { path: compressDictPath } : undefined,
307
+ });
308
+ }, async (p) => {
309
+ debug('compress cleanup');
310
+ const stream = await p;
311
+ await new Promise((resolve) => {
312
+ if (stream.destroyed) {
313
+ resolve();
314
+ }
315
+ else {
316
+ stream.once('close', () => resolve());
317
+ stream.destroy();
318
+ }
319
+ });
320
+ }), "f");
321
+ __classPrivateFieldSet(this, _SimpleZSTD_decompressQueue, new process_queue_1.default(poolOptions?.decompressQueueSize || 0, () => {
322
+ debug('decompress factory');
323
+ return CreateDecompressStream({
324
+ ...poolOptions?.decompressQueue,
325
+ dictionary: decompressDictPath ? { path: decompressDictPath } : undefined,
326
+ });
327
+ }, async (p) => {
328
+ debug('decompress cleanup');
329
+ const stream = await p;
330
+ await new Promise((resolve) => {
331
+ if (stream.destroyed) {
332
+ resolve();
333
+ }
334
+ else {
335
+ stream.once('close', () => resolve());
336
+ stream.destroy();
337
+ }
338
+ });
339
+ }), "f");
340
+ debug('READY');
341
+ resolve(null);
342
+ }
343
+ catch (err) {
344
+ reject(err);
345
+ }
346
+ })();
347
+ }).catch((err) => {
348
+ debug('ready error', err);
349
+ __classPrivateFieldGet(this, _SimpleZSTD_compressDictCleanup, "f").call(this);
350
+ __classPrivateFieldGet(this, _SimpleZSTD_decompressDictCleanup, "f").call(this);
351
+ __classPrivateFieldSet(this, _SimpleZSTD_compressDictCleanup, () => null, "f");
352
+ __classPrivateFieldSet(this, _SimpleZSTD_decompressDictCleanup, () => null, "f");
353
+ }), "f");
354
+ }
355
+ /**
356
+ * Create a new SimpleZSTD instance with process pooling
357
+ * @param poolOptions - Configuration for compression and decompression process pools
358
+ * @returns Promise resolving to initialized SimpleZSTD instance
359
+ */
360
+ static async create(poolOptions) {
361
+ const instance = new SimpleZSTD(poolOptions);
362
+ await __classPrivateFieldGet(instance, _SimpleZSTD_ready, "f");
363
+ return instance;
364
+ }
365
+ get queueStats() {
366
+ return {
367
+ compress: {
368
+ hits: __classPrivateFieldGet(this, _SimpleZSTD_compressQueue, "f").hits,
369
+ misses: __classPrivateFieldGet(this, _SimpleZSTD_compressQueue, "f").misses,
370
+ },
371
+ decompress: {
372
+ hits: __classPrivateFieldGet(this, _SimpleZSTD_decompressQueue, "f").hits,
373
+ misses: __classPrivateFieldGet(this, _SimpleZSTD_decompressQueue, "f").misses,
374
+ },
375
+ };
376
+ }
377
+ async destroy() {
378
+ await Promise.all([__classPrivateFieldGet(this, _SimpleZSTD_compressQueue, "f").destroy(), __classPrivateFieldGet(this, _SimpleZSTD_decompressQueue, "f").destroy()]);
379
+ __classPrivateFieldGet(this, _SimpleZSTD_compressDictCleanup, "f").call(this);
380
+ __classPrivateFieldGet(this, _SimpleZSTD_decompressDictCleanup, "f").call(this);
381
+ __classPrivateFieldSet(this, _SimpleZSTD_compressDictCleanup, () => null, "f");
382
+ __classPrivateFieldSet(this, _SimpleZSTD_decompressDictCleanup, () => null, "f");
383
+ }
384
+ /**
385
+ * Get a compression stream from the pool, or create a one-off stream with custom compression level
386
+ * @param compLevel - Optional compression level (1-22). If provided, creates a new stream instead of using the pool
387
+ * @returns Promise resolving to a Duplex compression stream
388
+ */
389
+ async compress(compLevel) {
390
+ await __classPrivateFieldGet(this, _SimpleZSTD_ready, "f");
391
+ // If custom compression level is provided, create a one-off stream
392
+ if (compLevel !== undefined) {
393
+ return CreateCompressStream(compLevel, {
394
+ ...__classPrivateFieldGet(this, _SimpleZSTD_poolOptions, "f")?.compressQueue,
395
+ });
396
+ }
397
+ // Otherwise, acquire from pool
398
+ return __classPrivateFieldGet(this, _SimpleZSTD_compressQueue, "f").acquire();
399
+ }
400
+ /**
401
+ * Compress a buffer using the pool, or with a custom compression level
402
+ * @param buffer - Buffer to compress
403
+ * @param compLevel - Optional compression level (1-22). If provided, uses this level instead of pool default
404
+ * @returns Promise resolving to compressed buffer
405
+ */
406
+ async compressBuffer(buffer, compLevel) {
407
+ await __classPrivateFieldGet(this, _SimpleZSTD_ready, "f");
408
+ const c = await this.compress(compLevel);
409
+ return CompressBuffer(buffer, c);
410
+ }
411
+ async decompress() {
412
+ await __classPrivateFieldGet(this, _SimpleZSTD_ready, "f");
413
+ return __classPrivateFieldGet(this, _SimpleZSTD_decompressQueue, "f").acquire();
414
+ }
415
+ async decompressBuffer(buffer) {
416
+ await __classPrivateFieldGet(this, _SimpleZSTD_ready, "f");
417
+ const d = await __classPrivateFieldGet(this, _SimpleZSTD_decompressQueue, "f").acquire();
418
+ return DecompressBuffer(buffer, d);
419
+ }
420
+ }
421
+ exports.SimpleZSTD = SimpleZSTD;
422
+ _SimpleZSTD_compressQueue = new WeakMap(), _SimpleZSTD_decompressQueue = new WeakMap(), _SimpleZSTD_compressDictCleanup = new WeakMap(), _SimpleZSTD_decompressDictCleanup = new WeakMap(), _SimpleZSTD_ready = new WeakMap(), _SimpleZSTD_poolOptions = new WeakMap();
423
+ // module.exports = {
424
+ // SimpleZSTD,
425
+ // compress,
426
+ // compressBuffer,
427
+ // decompress,
428
+ // decompressBuffer,
429
+ // };
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUZBLG9EQVlDO0FBMEtELDRCQUVDO0FBRUQsd0NBT0M7QUFFRCxnQ0FFQztBQUVELDRDQUdDO0FBN1JELHNEQUF5QjtBQUN6QiwrQ0FBNkM7QUFDN0MsNkNBQXlDO0FBQ3pDLDZDQUE0RDtBQUM1RCxtREFBZ0Q7QUFDaEQsMkRBQThDO0FBRTlDLG9EQUEyQjtBQUMzQiw2Q0FBbUM7QUFDbkMsa0RBQTBCO0FBRTFCLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFlBQVksQ0FBQyxDQUFDO0FBRWxDLG9FQUEyQztBQUMzQyx3RUFBK0M7QUFDL0Msc0VBQTZDO0FBQzdDLHNFQUErQztBQU0vQyxpRkFBaUY7QUFDakYsdUVBQXVFO0FBQ3ZFLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFtRSxDQUFDO0FBRW5HLFNBQVMsVUFBVSxDQUFDLE1BQWM7SUFDaEMsT0FBTyxJQUFBLHdCQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsS0FBSyxVQUFVLHVCQUF1QixDQUNwQyxVQUFrQjtJQUVsQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFcEMsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNyRixPQUFPO1lB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
@@ -0,0 +1,16 @@
1
+ import { Duplex } from 'node:stream';
2
+ import type { DuplexOptions } from 'node:stream';
3
+ type SwapCallback = (err: Error | null, stream: Duplex | null) => void;
4
+ type PeekCallback = (data: Buffer, swap: SwapCallback) => void;
5
+ interface PeekOptions extends DuplexOptions {
6
+ maxBuffer?: number;
7
+ }
8
+ export default class PeekPassThrough extends Duplex {
9
+ #private;
10
+ constructor(options: PeekOptions, peekCallback: PeekCallback);
11
+ _write(chunk: Buffer, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
12
+ _final(callback: (error?: Error | null) => void): void;
13
+ _read(_size: number): void;
14
+ _destroy(error: Error | null, callback: (error: Error | null) => void): void;
15
+ }
16
+ export {};