mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
## Summary Implements wildcard glob pattern support for the `sideEffects` field in `package.json`, fixes #21034, fixes #5241. This enables more flexible tree-shaking optimization by allowing developers to use glob patterns instead of listing individual files. ## Changes ### Core Implementation - **Extended `SideEffects` union** with `glob` and `mixed` variants in `src/resolver/package_json.zig` - **Enhanced parsing logic** to detect and handle glob patterns (`*`, `?`, `[]`, `{}`, `**`) - **Added mixed pattern support** for arrays containing both exact paths and glob patterns - **Updated resolver** in `src/resolver/resolver.zig` to handle new glob variants - **Performance optimized** with different data structures based on pattern types ### Features Supported - ✅ **Basic wildcards**: `src/effects/*.js` - ✅ **Question marks**: `src/file?.js` - ✅ **Character classes**: `src/file[abc].js`, `src/file[a-z].js` - ✅ **Brace expansion**: `src/{components,utils}/*.js` - ✅ **Globstar**: `src/**/effects/*.js` - ✅ **Mixed patterns**: `["src/specific.js", "src/glob/*.js"]` ### Before/After Comparison **Before (shows warning and treats all files as having side effects):** ```json { "sideEffects": ["src/effects/*.js"] } ``` ``` ⚠️ wildcard sideEffects are not supported yet, which means this package will be deoptimized ``` **After (works correctly with proper tree-shaking):** ```json { "sideEffects": ["src/effects/*.js"] } ``` ``` ✅ Bundled 4 modules (preserving only files matching glob patterns) ``` ## Test Coverage ### Comprehensive Test Suite - ✅ **Success cases**: Verify glob patterns correctly preserve intended files - ✅ **Fail cases**: Verify patterns don't match unintended files - ✅ **Edge cases**: Invalid globs, CSS files, deep nesting, mixed patterns - ✅ **Performance**: Test different pattern combinations - ✅ **Regression**: Ensure no warnings and backward compatibility ### Test Categories 1. **Basic glob patterns** (`*.js`, `file?.js`) 2. **Advanced patterns** (brace expansion, character classes) 3. **Mixed exact/glob patterns** 4. **Edge cases** (invalid patterns, CSS handling) 5. **Tree-shaking verification** (positive/negative cases) ## Performance Optimized implementation based on pattern types: - **Exact matches only**: O(1) hashmap lookup - **Glob patterns only**: Bun's optimized glob matcher - **Mixed patterns**: Combined approach for best performance ## Backward Compatibility - ✅ All existing `sideEffects` behavior preserved - ✅ No breaking changes to API - ✅ Graceful fallback for invalid patterns - ✅ CSS files automatically ignored (existing behavior) ## Documentation Added comprehensive documentation covering: - All supported glob patterns with examples - Migration guide from previous versions - Best practices and performance tips - Troubleshooting guide ## Testing Run the test suite: ```bash bun test test/regression/issue/3595-wildcard-side-effects.test.js bun test test/bundler/side-effects-glob.test.ts ``` All tests pass with comprehensive coverage of success/fail scenarios. 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: jarred-sumner-bot <220441119+jarred-sumner-bot@users.noreply.github.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> Co-authored-by: RiskyMH <git@riskymh.dev> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>