Commit Graph

11 Commits

Author SHA1 Message Date
robobun
20dddd1819 feat(minify): optimize Error constructors by removing 'new' keyword (#22493)
## Summary
- Refactored `maybeMarkConstructorAsPure` to `minifyGlobalConstructor`
that returns `?Expr`
- Added minification optimizations for global constructors that work
identically with/without `new`
- Converts constructors to more compact forms: `new Object()` → `{}`,
`new Array()` → `[]`, etc.
- Fixed issue where minification was incorrectly applied to runtime
node_modules code

## Details

This PR refactors the existing `maybeMarkConstructorAsPure` function to
`minifyGlobalConstructor` and changes it to return an optional
expression. This enables powerful minification optimizations for global
constructors.

### Optimizations Added:

#### 1. Error Constructors (4 bytes saved each)
- `new Error(...)` → `Error(...)`
- `new TypeError(...)` → `TypeError(...)`
- `new SyntaxError(...)` → `SyntaxError(...)`
- `new RangeError(...)` → `RangeError(...)`
- `new ReferenceError(...)` → `ReferenceError(...)`
- `new EvalError(...)` → `EvalError(...)`
- `new URIError(...)` → `URIError(...)`
- `new AggregateError(...)` → `AggregateError(...)`

#### 2. Object Constructor
- `new Object()` → `{}` (11 bytes saved)
- `new Object({a: 1})` → `{a: 1}` (11 bytes saved)
- `new Object([1, 2])` → `[1, 2]` (11 bytes saved)
- `new Object(null)` → `{}` (15 bytes saved)
- `new Object(undefined)` → `{}` (20 bytes saved)

#### 3. Array Constructor
- `new Array()` → `[]` (10 bytes saved)
- `new Array(1, 2, 3)` → `[1, 2, 3]` (9 bytes saved)
- `new Array(5)` → `Array(5)` (4 bytes saved, preserves sparse array
semantics)

#### 4. Function and RegExp Constructors
- `new Function(...)` → `Function(...)` (4 bytes saved)
- `new RegExp(...)` → `RegExp(...)` (4 bytes saved)

### Important Fixes:
- Added check to prevent minification of node_modules code at runtime
(only applies during bundling)
- Preserved sparse array semantics for `new Array(number)`
- Extracted `callFromNew` helper to reduce code duplication

### Size Impact:
- React SSR bundle: 463 bytes saved
- Each optimization safely preserves JavaScript semantics

## Test plan
 All tests pass:
- Added comprehensive tests in `bundler_minify.test.ts`
- Verified Error constructors work identically with/without `new`
- Tested Object/Array literal conversions
- Ensured sparse array semantics are preserved
- Updated source map positions in `bundler_npm.test.ts`

🤖 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: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
2025-09-09 15:00:40 -07:00
Dylan Conway
41388204b9 update webkit (#19238) 2025-04-23 23:21:22 -07:00
chloe caruso
834ad11d48 get node:fs tests passing part 1 (#16270) 2025-01-14 20:53:02 -08:00
Jarred Sumner
2b2ca3275c Improve stack overflow, show more properties in Error objects (#15985)
Co-authored-by: Dave Caruso <me@paperdave.net>
2024-12-25 21:47:13 -08:00
Jarred Sumner
cd6785771e run prettier and add back format action (#13722) 2024-09-03 21:32:52 -07:00
Dylan Conway
94bf404c41 Print bun version on unhandled errors (#10760)
Co-authored-by: dave caruso <me@paperdave.net>
2024-05-02 15:06:14 -07:00
Dylan Conway
c538bf87d1 fix(windows): transpiler cache and other test fixes (#8471)
* umask

* process args

* update reportError.test.ts

* file exists

* transpiler cache

* back to const

* remove failing comments

* [autofix.ci] apply automated fixes

* update comment

* debug assert and remmove branch

* oops

* escape

* path sep

* seekTo

* disable

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2024-01-29 15:17:23 -08:00
dave caruso
072f2f15ea ci: run windows tests and also run them concurrently (#7758) 2024-01-12 17:02:20 -08:00
Jarred Sumner
52e1c2de08 feat: syntax highlight stack traces + overall visual improvements (#7335)
* Parse stack trace string

* Syntax highlight error messages

* Fix off-by-one

* Undo changes to populateStackTrace

* Highlight more things

* Add a way to write tests for it

* Create highlight-cat.ts

* Bump

* fix: off by ones

* feat: add function highlighting to these errors

* revisions

* undo

* l

* fix webkit submodule

* imo this looks worse

* [autofix.ci] apply automated fixes

* fix off by one <3

* fix more situations

* ch changes

* ok

* [autofix.ci] apply automated fixes

* fix this

* fix snapshot

* ok

* mark test as todo

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: dave caruso <me@paperdave.net>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2023-12-01 14:02:08 -08:00
jhmaster
e60b3607c1 Complete rework of the majority of node:util, primarily util.inspect (#4493)
* 1st revision of new util.inspect impl. (not done)

* fix util.types.isArrayBuffer

* fix some utl tests and bugs

* fix node:tty missing primordials

* fix utl stackoverflow handling & some tests

* narrow down diff. context test

* util.inspect indirect circulars optimization

* temp workaround for buggy is...Function checks

* impl. Map/Set/Iterator entries inspection

* fix bigint & symbol objects inspection

* error inspection fixes

* misc util tests stuff

* inline getExternalValue stub

* leftovers

* util.inspect promise internals

* run bun fmt

* commit make js changes

* cut out unnecessary utl files

* reorganize utl folder structure

* remove browserify buffer check

* Try to revert git messing up uws somehow

This reverts commit 2c27e16e7d.

* commit src/js/out files again

* redo this edit too

* refresh js/out files

* Removed uws submodule

* tidy up

* unused primordials

* run fmt

---------

Co-authored-by: dave caruso <me@paperdave.net>
2023-09-27 23:51:49 -07:00
Ashcon Partovi
99485bec4c Fix tests that pass but generate annotation 2023-06-09 05:53:23 -07:00