Skip to content

Commit eb869fe

Browse files
committed
Drop pify and just promisify ourselves
1 parent 685bfe1 commit eb869fe

2 files changed

Lines changed: 22 additions & 21 deletions

File tree

‎package.json‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,13 @@
4949
},
5050
"dependencies": {
5151
"brotli-wasm": "^3.0.0",
52-
"pify": "^5.0.0",
5352
"zstd-codec": "^0.1.5"
5453
},
5554
"devDependencies": {
5655
"@types/chai": "^4.2.18",
5756
"@types/chai-as-promised": "^7.1.4",
5857
"@types/mocha": "^8.2.2",
5958
"@types/node": "^22.15.16",
60-
"@types/pify": "^5.0.1",
6159
"assert": "^2.0.0",
6260
"buffer": "^6.0.3",
6361
"chai": "^4.3.4",

‎src/index.ts‎

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { ZstdStreaming } from 'zstd-codec';
2-
import type { promisify as utilPromisify } from 'util';
32

43
let zlib: typeof import('zlib') | undefined;
54
try { zlib = require('zlib'); } catch {}
@@ -11,11 +10,15 @@ const isNativeNode = typeof process !== 'undefined'
1110
&& typeof process.versions !== 'undefined'
1211
&& typeof process.versions.node !== 'undefined';
1312

14-
let _promisify: typeof utilPromisify | undefined;
15-
const getPromisify = (): typeof utilPromisify => {
16-
if (!_promisify) _promisify = require('pify');
17-
return _promisify!;
18-
};
13+
// Minimal promisify for zlib-style (err, result) callbacks.
14+
function promisifyFn<T>(fn: Function): (...args: any[]) => Promise<T> {
15+
return (...args: any[]) => new Promise<T>((resolve, reject) => {
16+
fn(...args, (err: Error | null, result: T) => {
17+
if (err) reject(err);
18+
else resolve(result);
19+
});
20+
});
21+
}
1922

2023
export type SUPPORTED_ENCODING =
2124
| 'identity'
@@ -101,64 +104,64 @@ async function decompressViaStream(data: Uint8Array, format: CompressionFormat):
101104
// --- Per-codec buffer functions ---
102105

103106
export async function gzip(buffer: Uint8Array, options?: { level?: number }): Promise<Buffer> {
104-
if (isNativeNode && zlib) return getPromisify()(zlib.gzip)(buffer, options);
107+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.gzip)(buffer, options);
105108
if (typeof CompressionStream !== 'undefined') {
106109
return asBuffer(await compressViaStream(buffer, 'gzip'));
107110
}
108-
if (zlib) return getPromisify()(zlib.gzip)(buffer, options);
111+
if (zlib) return promisifyFn<Buffer>(zlib.gzip)(buffer, options);
109112
throw new Error('No gzip implementation available');
110113
}
111114

112115
export async function gunzip(buffer: Uint8Array): Promise<Buffer> {
113-
if (isNativeNode && zlib) return getPromisify()(zlib.gunzip)(buffer);
116+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.gunzip)(buffer);
114117
if (typeof DecompressionStream !== 'undefined') {
115118
return asBuffer(await decompressViaStream(buffer, 'gzip'));
116119
}
117-
if (zlib) return getPromisify()(zlib.gunzip)(buffer);
120+
if (zlib) return promisifyFn<Buffer>(zlib.gunzip)(buffer);
118121
throw new Error('No gunzip implementation available');
119122
}
120123

121124
export async function deflate(buffer: Uint8Array, options?: { level?: number }): Promise<Buffer> {
122-
if (isNativeNode && zlib) return getPromisify()(zlib.deflate)(buffer, options);
125+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.deflate)(buffer, options);
123126
if (typeof CompressionStream !== 'undefined') {
124127
return asBuffer(await compressViaStream(buffer, 'deflate'));
125128
}
126-
if (zlib) return getPromisify()(zlib.deflate)(buffer, options);
129+
if (zlib) return promisifyFn<Buffer>(zlib.deflate)(buffer, options);
127130
throw new Error('No deflate implementation available');
128131
}
129132

130133
export async function inflate(buffer: Uint8Array): Promise<Buffer> {
131-
if (isNativeNode && zlib) return getPromisify()(zlib.inflate)(buffer);
134+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.inflate)(buffer);
132135
if (typeof DecompressionStream !== 'undefined') {
133136
return asBuffer(await decompressViaStream(buffer, 'deflate'));
134137
}
135-
if (zlib) return getPromisify()(zlib.inflate)(buffer);
138+
if (zlib) return promisifyFn<Buffer>(zlib.inflate)(buffer);
136139
throw new Error('No inflate implementation available');
137140
}
138141

139142
export async function deflateRaw(buffer: Uint8Array, options?: { level?: number }): Promise<Buffer> {
140-
if (isNativeNode && zlib) return getPromisify()(zlib.deflateRaw)(buffer, options);
143+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.deflateRaw)(buffer, options);
141144
if (typeof CompressionStream !== 'undefined') {
142145
try {
143146
return asBuffer(await compressViaStream(buffer, 'deflate-raw' as CompressionFormat));
144147
} catch {
145148
// deflate-raw not supported in this environment
146149
}
147150
}
148-
if (zlib) return getPromisify()(zlib.deflateRaw)(buffer, options);
151+
if (zlib) return promisifyFn<Buffer>(zlib.deflateRaw)(buffer, options);
149152
throw new Error('No deflate-raw implementation available');
150153
}
151154

152155
export async function inflateRaw(buffer: Uint8Array): Promise<Buffer> {
153-
if (isNativeNode && zlib) return getPromisify()(zlib.inflateRaw)(buffer);
156+
if (isNativeNode && zlib) return promisifyFn<Buffer>(zlib.inflateRaw)(buffer);
154157
if (typeof DecompressionStream !== 'undefined') {
155158
try {
156159
return asBuffer(await decompressViaStream(buffer, 'deflate-raw' as CompressionFormat));
157160
} catch {
158161
// deflate-raw not supported in this environment
159162
}
160163
}
161-
if (zlib) return getPromisify()(zlib.inflateRaw)(buffer);
164+
if (zlib) return promisifyFn<Buffer>(zlib.inflateRaw)(buffer);
162165
throw new Error('No inflate-raw implementation available');
163166
}
164167

@@ -183,7 +186,7 @@ export const brotliCompress = zlib?.brotliCompress
183186
});
184187

185188
export const brotliDecompress = zlib?.brotliDecompress
186-
? getPromisify()(zlib.brotliDecompress)
189+
? promisifyFn<Buffer>(zlib.brotliDecompress)
187190
: (async (buffer: Uint8Array): Promise<Uint8Array> => {
188191
const { decompress } = await import('brotli-wasm'); // Sync in node, async in browsers
189192
return decompress(buffer);

0 commit comments

Comments
 (0)