import { Plugin } from 'vite'; import { InputType, ZlibOptions, BrotliOptions } from 'zlib'; import { FilterPattern } from '@rollup/pluginutils'; type Algorithm = 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'; interface UserCompressionOptions { [key: string]: any; } type InferDefault = T extends infer K ? K : UserCompressionOptions; type CompressionOptions = InferDefault; type Pretty = { [key in keyof T]: T[key]; } & NonNullable; interface BaseCompressionPluginOptions { include?: FilterPattern; exclude?: FilterPattern; threshold?: number; filename?: string | ((id: string) => string); deleteOriginalAssets?: boolean; skipIfLargerOrEqual?: boolean; } interface AlgorithmToZlib { gzip: ZlibOptions; brotliCompress: BrotliOptions; deflate: ZlibOptions; deflateRaw: ZlibOptions; } type AlgorithmFunction = (buf: InputType, options: T) => Promise; type InternalCompressionPluginOptionsFunction> = { algorithm?: A; compressionOptions: T; }; type InternalWithoutCompressionPluginOptionsFunction = { algorithm?: AlgorithmFunction; }; type InternalCompressionPluginOptionsAlgorithm = { algorithm?: A; compressionOptions?: Pretty; }; type ViteCompressionPluginConfigFunction> = BaseCompressionPluginOptions & InternalCompressionPluginOptionsFunction; type ViteWithoutCompressionPluginConfigFunction = Pretty; type ViteCompressionPluginConfigAlgorithm = BaseCompressionPluginOptions & InternalCompressionPluginOptionsAlgorithm; type ViteCompressionPluginConfig = ViteCompressionPluginConfigFunction> | ViteCompressionPluginConfigAlgorithm; type ViteCompressionPluginOption = A extends undefined ? Pretty : A extends Algorithm ? Pretty> : A extends UserCompressionOptions ? Pretty>> : never; interface ViteTarballPluginOptions { dest?: string; gz?: boolean; } interface CompressionPluginAPI { staticOutputs: Set; } declare function tarball(opts?: ViteTarballPluginOptions): Plugin; declare function compression(): Plugin; declare function compression | AlgorithmFunction>(opts: A extends Algorithm ? Pretty> : ViteCompressionPluginConfigFunction>): Plugin; declare function compression(opts: ViteCompressionPluginConfigFunction>): Plugin; declare function compression(opts: ViteWithoutCompressionPluginConfigFunction): Plugin; declare namespace compression { var getPluginAPI: (plugins: readonly Plugin[]) => CompressionPluginAPI | undefined; } declare function defineCompressionOption(option: ViteCompressionPluginConfig): ViteCompressionPluginConfig; export { type Algorithm, type CompressionOptions, type ViteCompressionPluginConfig, type ViteCompressionPluginOption, type ViteTarballPluginOptions, compression, compression as default, defineCompressionOption, tarball };