2.2 KiB
2.2 KiB
OpenSpec Change: enterprise-compress-image
- Change ID: enterprise-compress-image
- Package:
@suaveplan/compress-image - Category: universal
- Target path:
universal/compression/compress-image - Status: PROPOSED
- Date: 2026-04-19
- Reference spec:
/mnt/s/web/suaveplan/enterprise/compress-image.md
Summary
High-level image compression façade. Orchestrates format-specific encoders (JPEG/MozJPEG, PNG/OxiPNG, WebP, AVIF) behind a uniform ImageCompressor.compress(input, options) API. Accepts quality presets, format override, max-dimension resize, and returns a CompressionResult with before/after stats.
Current-state audit (genesis)
Package does not exist yet — fresh build.
Dependencies
- Workspace:
@suaveplan/error,@suaveplan/types - External (via catalog):
zod,tslib,@opentelemetry/api,@jsquash/jpeg,@jsquash/png,@jsquash/webp,@jsquash/avif,@jsquash/resize - Dev (via catalog):
vitest,@vitest/coverage-istanbul,fast-check,mitata
Preserved public surface
ImageCompressor—compress(input, options?): Promise<CompressionResult>- Errors:
CompressionError,CompressionErrorCode,CompressionErrorContext,compressionFailed,dimensionTooLarge,invalidQuality,unsupportedFormat,CompressImageErrorCode,COMPRESS_IMAGE_ERROR_METADATA,registerCompressImageErrorCodes - Types:
CompressionFormat,CompressionOptions,CompressionPlan,CompressionResult,CompressionStep,PresetConfig,QualityPreset,ResolvedCompressionOptions - Constants:
FORMAT_QUALITY_RANGES,MAX_DIMENSION,QUALITY_PRESETS,VALID_FORMATS,VALID_PRESETS
New genesis additions
- Additional codes:
COMPRESS_IMAGE.ENCODER_UNAVAILABLE,COMPRESS_IMAGE.INPUT_TOO_LARGE,COMPRESS_IMAGE.OUTPUT_LARGER_THAN_INPUT. - Zod schemas for every option / result type.
- OTel histogram
compress_image.compress.duration_ms{format, preset}; counter for outcome; gaugecompress_image.bytes.saved. - Property tests: output byte length ≤ input byte length for any input under a fixed preset (or error thrown).
Impact
- Adds one new package:
universal/compression/compress-image - Adds one new spec capability:
compress-image