11import type { ZstdStreaming } from 'zstd-codec' ;
2- import type { promisify as utilPromisify } from 'util' ;
32
43let zlib : typeof import ( 'zlib' ) | undefined ;
54try { 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
2023export type SUPPORTED_ENCODING =
2124 | 'identity'
@@ -101,64 +104,64 @@ async function decompressViaStream(data: Uint8Array, format: CompressionFormat):
101104// --- Per-codec buffer functions ---
102105
103106export 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
112115export 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
121124export 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
130133export 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
139142export 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
152155export 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
185188export 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