This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
CRITICAL CONSTRAINT: This library must maintain bundle sizes under strict limits:
- Modern builds: 2.5KB max
- UMD build: 2.5KB max
Always run bun run size after any changes to verify bundle size compliance. Every line of code counts toward these limits.
bun run build- Build the library using microbundle (outputs to dist/)bun test- Run Bun testsbun run lint- Lint source code with ESLintbun run lint:fix- Fix linting issues automaticallybun run format- Format code with Prettierbun run format:check- Check code formattingbun run typecheck- Run TypeScript type checkingbun run size- Build and check bundle size limits./scripts/build.sh- Direct build script execution
bun test- Run all testsbun test src/audio/__tests__/Audio.test.ts- Run specific test filebun test --coverage- Run tests with coverage- Tests use happy-dom for DOM-based audio testing
This is a TypeScript audio library that provides two main components:
- Audio (
src/audio/Audio.ts) - Single audio file player with AudioContext API - AudioPlaylist (
src/playlist/AudioPlaylist.ts) - Multi-file playlist manager with shuffle/loop
- Event-driven: Both components use custom EventEmitter for state management
- AudioContext abstraction: AudioCtx class wraps browser AudioContext with singleton pattern
- State management: Centralized state objects (
states.ts) track playback status - Functional utilities: Helper functions for audio operations in
utils.tsfiles
src/index.ts- Main entry point exporting Audio and AudioPlaylistsrc/audio/- Single audio player implementationsrc/playlist/- Playlist functionalitysrc/EventEmitter.ts&src/EventHandler.ts- Event system__tests__/directories - Bun tests co-located with source
- Uses microbundle for bundling (ES, CJS, UMD outputs)
- TypeScript compilation with strict settings
- Size limits enforced: ~2.5KB for modern builds
- Husky pre-commit hooks run lint + test
demo/audio/- Single audio player example (port 1234)demo/playlist/- Playlist example (port 1235)- Both use Bun's built-in server with on-the-fly bundling
# Audio demo
cd demo/audio
bun install
bun run dev
# Playlist demo
cd demo/playlist
bun install
bun run dev