Brotli compression plugin for Parcel bundler that provides optimized file compression using the Brotli algorithm in production builds
npx @tessl/cli install tessl/npm-parcel--compressor-brotli@2.15.0Brotli compression plugin for Parcel bundler that provides optimized file compression using the Brotli algorithm in production builds. This plugin integrates seamlessly with Parcel's plugin architecture to enable high-efficiency compression utilizing Node.js's built-in zlib module.
npm install @parcel/compressor-brotli// Default import - the only public export
import BrotliCompressor from "@parcel/compressor-brotli";For CommonJS:
const BrotliCompressor = require("@parcel/compressor-brotli");This plugin is designed for automatic usage within Parcel's build pipeline and does not require direct instantiation by end users. Parcel automatically loads and uses this compressor during production builds when configured.
// Parcel configuration example (.parcelrc)
{
"extends": "@parcel/config-default",
"compressors": {
"*.{js,css,html,svg}": ["@parcel/compressor-brotli", "..."]
}
}The plugin follows Parcel's standard plugin architecture:
Compressor from @parcel/pluginzlib.createBrotliCompress() with maximum quality settingsnull in development)The default export provides a pre-configured Brotli compressor instance that automatically compresses files during Parcel's production build process.
/**
* Pre-configured Brotli compressor instance for Parcel bundler
* @type {Compressor}
*/
declare const BrotliCompressor: Compressor;
export default BrotliCompressor;The compress method from the base Compressor class, which this plugin implements.
interface Compressor {
compress(params: CompressParams): Promise<CompressResult | null>;
}/**
* Base Compressor class from @parcel/plugin
*/
interface Compressor {
compress(params: CompressParams): Promise<CompressResult | null>;
}
/**
* Parameters passed to the compress method
*/
interface CompressParams {
/** Stream of content to compress */
stream: Readable;
/** Plugin options including build mode */
options: PluginOptions;
/** Logger instance for diagnostics */
logger: PluginLogger;
/** Tracer instance for performance monitoring */
tracer: PluginTracer;
}
/**
* Plugin options containing build configuration
*/
interface PluginOptions {
/** Build mode - 'development' or 'production' */
mode: 'development' | 'production';
}
/**
* Result of compression operation
*/
interface CompressResult {
/** Compressed content stream */
stream: Readable;
/** Content encoding type ('br' for Brotli) */
type?: string;
}
/**
* Logger interface for plugin diagnostics
*/
interface PluginLogger {
/** Logs a diagnostic at the verbose log level */
verbose(diagnostic: DiagnosticWithoutOrigin | Array<DiagnosticWithoutOrigin>): void;
/** Logs a diagnostic at the info log level */
info(diagnostic: DiagnosticWithoutOrigin | Array<DiagnosticWithoutOrigin>): void;
/** Logs a diagnostic at the warn log level */
warn(diagnostic: DiagnosticWithoutOrigin | Array<DiagnosticWithoutOrigin>): void;
/** Logs a diagnostic at the error log level */
error(diagnostic: DiagnosticWithoutOrigin | Array<DiagnosticWithoutOrigin>): void;
}
/**
* Tracer interface for performance monitoring
*/
interface PluginTracer {
/** Returns whether the tracer is enabled */
enabled: boolean;
/** Create a measurement for performance tracking */
createMeasurement(name: string, category?: string, argumentName?: string): any;
}
/**
* Diagnostic message without origin information
*/
interface DiagnosticWithoutOrigin {
/** The diagnostic message */
message: string;
/** Optional hints for fixing the issue */
hints?: Array<string>;
/** Optional documentation URL for more information */
documentationURL?: string;
}null (no compression applied)zlib.constants.BROTLI_MAX_QUALITY for optimal compressiontype: 'br' content encoding.br files alongside original fileszlib.constants.BROTLI_MAX_QUALITY)zlib.createBrotliCompress()This plugin works in conjunction with:
The plugin handles errors through Parcel's standard plugin error reporting system. Common scenarios: