3.4 KiB
3.4 KiB
Tasks: enterprise-font-compress
Change ID: enterprise-font-compress
Package: @suaveplan/font-compress
Target path: universal/compression/font-compress
Prerequisite packages on Verdaccio: @suaveplan/error, @suaveplan/types, @suaveplan/mime
1. Scaffold
- Create directory
universal/compression/font-compress/withsrc/,tests/,src/__benchmarks__/, and all feature subdirectories per the layout inproposal.md. - Write
package.jsonat version0.1.0with"type": "module","sideEffects": false, fullexportsmap, deps:@suaveplan/error workspace:^,@suaveplan/types workspace:^,@suaveplan/mime workspace:^,zod catalog:forms,@opentelemetry/api catalog:observability. - Write
tsconfig.jsonextending@suaveplan/typescript-config/library.json. - Write
vitest.config.tsusingcreateTestConfig()from@suaveplan/testing/config. - Add
lint,typecheck,test,test:coverage,build,docs:checkscripts.
2. Types + errors
- Write
src/types/common.ts—FontFormat,FontMetadata,SubsetOptions,CompressFontOptions,FontCompressResult,FontCompressAdapter,FontCompressorOptions. - Write
src/types/common.md. - Write
src/error-codes.ts—FontCompressErrorCode,FONT_COMPRESS_ERROR_METADATA,registerFontCompressErrorCodes(). - Write Zod schemas:
SubsetOptionsSchema,CompressFontOptionsSchema,FontMetadataSchema,FontCompressResultSchema,FontCompressorOptionsSchema.
3. NullFontCompressAdapter
- Implement
NullFontCompressAdapter—probereturns configurable fixture metadata,compressreturns input bytes with a fixture result (ratio = 0.9, same format as outputFormat). - Write
null-adapter.test.tsandnull-adapter.md.
4. Utils
- Implement
parseUnicodeRanges(ranges: string[]): Set<number>— parsesU+XXXXandU+XXXX-XXXX; throwsFontCompressError(FONT_COMPRESS_INVALID_OPTIONS)on bad syntax. - Implement
detectFontFormat(data: Uint8Array): FontFormat— delegates to@suaveplan/mimemagic-byte sniff. - Write
unicode-ranges.test.ts,unicode-ranges.md,format-detect.test.ts,format-detect.md.
5. FontCompressor
- Implement
FontCompressor—probeandcompressdelegate to adapter; wireAbortSignal; validate options via Zod. - Wire OTel: span
font.compress, counterfont_compress_total, histogramfont_compress_duration_ms+font_compress_ratio. - Write
font-compressor.test.ts(≤500 lines): probe, compress, abort, unsupported format throws. - Write
font-compressor.md.
6. Benchmarks
- Write
src/__benchmarks__/font-compress.bench.ts— probe 200 kB TTF fixture, WOFF2 encode (null adapter), subset ASCII range.
7. Tests
- Write
tests/integration.test.ts— full pipeline with NullFontCompressAdapter. - Write
tests/property.test.ts(fast-check) — compressed size ≤ original, ratio ∈ (0, 1].
8. Docs + verify + publish
- All co-located
.mdfiles (≥200 words each). - Write
README.mdat package root. bunx turbo lint typecheck test --filter=@suaveplan/font-compress— green.bunx turbo test:coverage --filter=@suaveplan/font-compress— 100%.bun scripts/publish.ts --package @suaveplan/font-compress.- Archive to
openspec/archive/2026-04-24-enterprise-font-compress/.