Commit Graph

160 Commits

Author SHA1 Message Date
robobun
edaa2e487a fix: prevent duplicate Date headers in HTTP responses (#21677) (#21836)
## Summary

Fixes issue #21677 where `Bun.serve()` was adding redundant Date headers
when users provided their own Date header in the response.

The root cause was that the HTTP server was writing user-provided Date
headers and then µWebSockets was automatically adding its own Date
header without checking if one already existed.

## Changes

- **Added Date header detection in `NodeHTTP.cpp`**: When a user
provides a Date header (either in common or uncommon headers), the code
now sets the `HTTP_WROTE_DATE_HEADER` flag to prevent µWebSockets from
automatically adding another Date header
- **Case-insensitive header matching**: Uses
`WTF::equalIgnoringASCIICase` for proper header name comparison in
uncommon headers
- **Comprehensive test coverage**: Added regression tests that verify no
duplicate Date headers in all scenarios (static responses, dynamic
responses, proxy responses)

## Test Plan

- [x] Added comprehensive regression test in
`test/regression/issue/21677.test.ts`
- [x] Tests verify only one Date header exists in all response scenarios
- [x] Tests fail with current main branch (confirms bug exists)
- [x] Tests pass with this fix (confirms bug is resolved)
- [x] Existing Date header tests still pass (no regression)

## Testing

The reproduction case from the issue now works correctly:

**Before (multiple Date headers):**
```
HTTP/1.1 200 OK
Date: Thu, 07 Aug 2025 17:02:24 GMT
content-type: text/plain;charset=utf-8
Date: Thu, 07 Aug 2025 17:02:23 GMT
```

**After (single Date header):**
```
HTTP/1.1 200 OK
Date: Thu, 07 Aug 2025 17:02:23 GMT
content-type: text/plain;charset=utf-8
```

🤖 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>
2025-08-14 16:34:38 -07:00
Jarred Sumner
1dc9fdfd9b Fix process.stdout/stderr missing Symbol.asyncIterator (#21720)
## Summary
- Adds `Symbol.asyncIterator` to `process.stdout` and `process.stderr`
when they are TTY or pipe/socket streams
- Matches Node.js behavior where these streams are Duplex-like and
support async iteration
- Does not add the iterator when streams are redirected to files
(matching Node.js SyncWriteStream behavior)

## Test plan
- Added test in
`test/regression/issue/test-process-stdout-async-iterator.test.ts`
- Verified the fix works with Claude Code on Linux x64
- Test passes with `bun bd test
test/regression/issue/test-process-stdout-async-iterator.test.ts`

Fixes #21704

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-09 06:40:36 -07:00
robobun
584946b0ce Fix comma operator optimization to preserve 'this' binding semantics (#21653)
## Summary
- Fix transpiler bug where comma expressions like `(0, obj.method)()`
were incorrectly optimized to `obj.method()`
- This preserved the `this` binding instead of stripping it as per
JavaScript semantics
- Add comprehensive regression test to prevent future issues

## Root Cause
The comma operator optimization in `src/js_parser.zig:7281` was directly
returning the right operand when the left operand had no side effects,
without checking if the expression was being used as a call target.

## Solution
- Added the same `is_call_target` check that other operators (nullish
coalescing, logical OR/AND) use
- When a comma expression is used as a call target AND the right operand
has a value for `this`, preserve the comma expression to strip the
`this` binding
- Follows existing patterns in the codebase for consistent behavior

## Test Plan
- [x] Reproduce the original bug: `(0, obj.method)()` incorrectly
preserved `this`
- [x] Verify fix: comma expressions now correctly strip `this` binding
in function calls
- [x] All existing transpiler tests continue to pass
- [x] Added regression test covering various comma expression scenarios
- [x] Tested edge cases: nested comma expressions, side effects,
different operand types

🤖 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>
2025-08-09 05:11:50 -07:00
pfg
3652008b0d Update bun:test diff (#21158)
Fixes #6229 (Fixes BAPI-655): 

|before|<img width="806" height="84" alt="image"
src="https://github.com/user-attachments/assets/6d6c8628-40a8-4950-a7a4-8a85ee07a302"
/>|
|-|-|
|after|<img width="802" height="87" alt="image"
src="https://github.com/user-attachments/assets/c336a626-2b08-469e-aa73-676f43a0f176"
/>|

Fixes #21498 (Fixes BAPI-2240), Fixes #10852 (Fixes BAPI-743):

|before|after|
|-|-|
|<img width="474" height="147" alt="image"
src="https://github.com/user-attachments/assets/bf2225de-a573-4672-a095-f9ff359ec86c"
/>|<img width="283" height="226" alt="image"
src="https://github.com/user-attachments/assets/89cb0e45-b1b7-4dbb-9ddb-b9835baa4b74"
/>|
|<img width="279" height="176" alt="image"
src="https://github.com/user-attachments/assets/e9be7308-dc38-43d2-901c-c77ce4757a51"
/>|<img width="278" height="212" alt="image"
src="https://github.com/user-attachments/assets/8c29b385-a053-4606-9474-3e5c0e60278c"
/>|

Improves multiline string and long output

|before|after|
|-|-|
|<img width="537" height="897" alt="image"
src="https://github.com/user-attachments/assets/034800c5-ab22-4915-90d9-19831906bb2e"
/>|<img width="345" height="1016" alt="image"
src="https://github.com/user-attachments/assets/fa95339e-c136-4c7c-af94-5f11400836dd"
/>|

Improves long single line string output

|before|<img width="1903" height="191" alt="image"
src="https://github.com/user-attachments/assets/bae35c81-0566-4291-810e-e65dc0381aef"
/>|
|-|-|
|after|<img width="1905" height="123" alt="image"
src="https://github.com/user-attachments/assets/bf9f492a-1d52-4cfc-9b1b-c6544a072814"
/>|

Puts 'expected' before 'received' on object diffs. The new version
matches Jest and Vitest, and I find it more intuitive:

|before|after|
|-|-|
|<img width="344" height="221" alt="image"
src="https://github.com/user-attachments/assets/44d42655-c441-411e-9b67-c0db7a5dce08"
/>|<img width="342" height="293" alt="image"
src="https://github.com/user-attachments/assets/565e3934-a2a2-4f99-9d6f-b7df1905f933"
/>|

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-06 06:44:46 -07:00
pfg
7c65c35f8f Fix expect(() => { throw undefined; }).toThrow(TypeError) (#21637)
Fixes #19107
2025-08-06 06:39:25 -07:00
pfg
bb67f2b345 Add clearAllMocks to mock. (#21555)
Fixes #21437, Fixes #18820
2025-08-01 19:30:51 -07:00
pfg
0cf2b71ff1 expect.toHaveReturnedWith/toHaveLastReturnedWith/toHaveNthReturnedWith (#21363)
Fixes #10380

DRAFT: not reviewed

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-01 15:09:03 -07:00
Dylan Conway
7a47c945aa Fix bundler cyclic imports with async dependencies (#21423)
## Summary

This PR fixes a bug in Bun's bundler where cyclic imports with async
dependencies would produce invalid JavaScript with syntax errors.

## Problem

When modules have cyclic imports and one uses top-level await, the
bundler wasn't properly marking all modules in the cycle as async. This
resulted in non-async wrapper functions containing `await` statements,
causing syntax errors like:

```
error: "await" can only be used inside an "async" function
```

## Solution

The fix matches esbuild's approach by calling `validateTLA` for all
files before `scanImportsAndExports` begins. This ensures async status
is properly propagated through import chains before dependency
resolution.

Key changes:
1. Added a new phase that validates top-level await for all parsed
JavaScript files before import/export scanning
2. This matches esbuild's `finishScan` function which processes all
files in source index order
3. Ensures the `is_async_or_has_async_dependency` flag is properly set
for all modules in cyclic import chains

## Test Plan

- Fixed the reproduction case provided in
`/Users/dylan/clones/bun-esm-bug`
- All existing bundler tests pass, including
`test/bundler/esbuild/default.test.ts`
- The bundled output now correctly generates async wrapper functions
when needed

fixes #21113

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-28 00:09:16 -07:00
pfg
0bd73b4363 Fix toIncludeRepeated (#21366)
Fixes #12276: toIncludeRepeated should check for the exact repeat count
not >=

This is a breaking change because some people may be relying on the
existing behaviour. Should it be feature-flagged for 1.3?

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-25 22:22:04 -07:00
robobun
8424caa5fa Fix bounds check in lexer for single # character (#21341) 2025-07-25 13:59:33 -07:00
robobun
3e6d792b62 Fix PostgreSQL index out of bounds crash during batch inserts (#21311) (#21316)
## Summary

Fixes the "index out of bounds: index 0, len 0" crash that occurs during
large batch PostgreSQL inserts, particularly on Windows systems.

The issue occurred when PostgreSQL DataRow messages contained data but
the `statement.fields` array was empty (len=0), causing crashes in
`DataCell.Putter.putImpl()`. This typically happens during large batch
operations where there may be race conditions or timing issues between
RowDescription and DataRow message processing.

## Changes

- **Add bounds checking** in `DataCell.Putter.putImpl()` before
accessing `fields` and `list` arrays
(src/sql/postgres/DataCell.zig:1043-1050)
- **Graceful degradation** - return `false` to ignore extra fields
instead of crashing
- **Debug logging** to help diagnose field metadata issues
- **Comprehensive regression tests** covering batch inserts, empty
results, and concurrent operations

## Test Plan

- [x] Added regression tests in `test/regression/issue/21311.test.ts`
- [x] Tests pass with the fix: All 3 tests pass with 212 expect() calls
- [x] Existing PostgreSQL tests still work (no regressions)

The fix prevents the crash while maintaining safe operation, allowing
PostgreSQL batch operations to continue working reliably.

## Root Cause

The crash occurred when:
1. `statement.fields` array was empty (len=0) due to timing issues
2. PostgreSQL DataRow messages contained actual data 
3. Code tried to access `this.list[index]` and `this.fields[index]`
without bounds checking

This was particularly problematic on Windows during batch operations due
to potential differences in:
- Network stack message ordering
- Memory allocation behavior
- Threading/concurrency during batch operations
- Statement preparation timing

Fixes #21311

🤖 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: Ciro Spaciari <ciro.spaciari@gmail.com>
2025-07-25 12:53:49 -07:00
pfg
fe94a36dbc Make execArgv empty when in compiled executable (#21298)
```ts
// a.js
console.log({
    argv: process.argv,
    execArgv: process.execArgv,
});
```

```diff
$> node a.js -a --b
{
  argv: [
    '/opt/homebrew/Cellar/node/24.2.0/bin/node',
    '/tmp/a.js',
    '-a',
    '--b'
  ],
  execArgv: []
}

$> bun a.js -a --b
{
  argv: [ "/Users/pfg/.bun/bin/bun", "/tmp/a.js",
    "-a", "--b"
  ],
  execArgv: [],
}

$> bun build --compile a.js --outfile=a
   [5ms]  bundle  1 modules
  [87ms] compile  

$> ./a -a --b

{
  argv: [ "bun", "/$bunfs/root/a", "-a", "--b" ],
- execArgv: [ "-a", "--b" ],
+ execArgv: [],
}
```

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-25 12:47:10 -07:00
Meghan Denny
9fa8ae9a40 fixes #21274 (#21278)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-23 22:31:42 -07:00
Meghan Denny
73d92c7518 Revert "Fix beforeAll hooks running for unmatched describe blocks when using test filters" (#21292)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-22 12:53:53 -07:00
robobun
6383c8f94c Fix beforeAll hooks running for unmatched describe blocks when using test filters (#21195)
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>
2025-07-21 20:21:29 -07:00
robobun
7940861b87 Fix extra bracket in template literal syntax highlighting (#17327) (#21187)
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>
2025-07-20 23:38:24 -07:00
Jarred Sumner
bbc4f89c25 Deflake test-21049.test.ts 2025-07-20 23:02:10 -07:00
Jarred Sumner
804e76af22 Introduce bun update --interactive (#20850)
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-17 04:33:30 -07:00
190n
6b14f77252 fix nonsense test name and elapsed time when beforeEach callback has thrown (#21118)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-17 02:02:57 -07:00
jarred-sumner-bot
32ce9a3890 Add Windows PE codesigning support for standalone executables (#21091)
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>
2025-07-15 22:31:54 -07:00
jarred-sumner-bot
1cef9399e4 fix: CSS parser crashes with calc() NaN values and system colors in color-mix() (#21079)
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: Zack Radisic <56137411+zackradisic@users.noreply.github.com>
2025-07-15 22:02:03 -07:00
pfg
9d2eb78544 Fetch redirect fix (#21064)
Co-authored-by: pfgithub <6010774+pfgithub@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com>
2025-07-15 20:51:52 -07:00
jarred-sumner-bot
81b4b8ca94 fix(s3): ensure correct alphabetical query parameter order in presigned URLs (#21050)
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>
2025-07-15 16:20:34 -07:00
jarred-sumner-bot
7f29446d9b fix(install): handle lifecycle script spawn failures gracefully instead of crashing (#21054)
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>
2025-07-14 20:50:32 -07:00
Jarred Sumner
2e02d9de28 Use ReadableStream.prototype.* in tests instead of new Response(...).* (#20937)
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Alistair Smith <hi@alistair.sh>
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-14 00:47:53 -07:00
Adam
7ba4b1d01e Fix: deprecated goo.gl links in snapshots raised in issue #20086 (#20424) 2025-07-05 00:58:42 -07:00
Jarred Sumner
0d4089ea7c Fixes #20753 (#20789)
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2025-07-03 01:06:22 -07:00
Kai Tamkun
adfdaab4fd Add test for #20144 (#20171) 2025-06-03 23:41:37 -07:00
Jarred Sumner
1bd44e9ce7 Fixes #18239 (#20152) 2025-06-03 13:23:12 -07:00
Alistair Smith
31980bc151 perf_hooks.Histogram (#19920) 2025-05-26 21:18:22 -07:00
Seth Flynn
c024e73e6a fix(BunRequest): make clone() return a BunRequest (#19813) 2025-05-23 23:37:47 -07:00
pfg
89c5e40544 ReadableStream & ReadableByteStream fixes (#19683) 2025-05-16 22:30:58 -07:00
Jarred Sumner
14b439a115 Fix formatters not running in CI + delete unnecessary files (#19433) 2025-05-08 23:22:16 -07:00
pfg
500199fe8b More node tests (#19197) 2025-05-07 16:21:08 -07:00
Ciro Spaciari
cb6abd2116 fix(node:http) proper send chunked encoding, dont send \r\b twice after headers are flushed (#19344) 2025-04-28 16:48:36 -07:00
Kai Tamkun
5392cd1d28 Call node:http request callback through AsyncContextFrame (#18711) 2025-04-01 19:27:45 -07:00
Dylan Conway
c21fca08e2 fix node:crypto hash name regression (#18481) 2025-03-25 20:43:41 -07:00
Meghan Denny
e602e2b887 Revert "disallow test() within test()" (#18338) 2025-03-20 20:12:20 -07:00
pfg
74768449bc disallow test() within test() (#18203) 2025-03-15 21:34:35 -07:00
Ashcon Partovi
d7e08abce8 Fix setTimeout(() => {}) from emitting a warning (#18160) 2025-03-13 11:37:48 -07:00
Kai Tamkun
4a0e982bb2 node:http improvements (#17093)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: Pham Minh Triet <92496972+Nanome203@users.noreply.github.com>
Co-authored-by: snwy <snwy@snwy.me>
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com>
Co-authored-by: cirospaciari <cirospaciari@users.noreply.github.com>
Co-authored-by: Ben Grant <ben@bun.sh>
2025-03-10 20:19:29 -07:00
Don Isaac
a41d773aaa feat: support Svelte in bundler and dev server (#17735) 2025-03-04 14:16:18 -08:00
pfg
821f42dd8e upgrade webkit (#17889) 2025-03-03 21:38:05 -08:00
Ashcon Partovi
1060558456 Fix Jest globals not being available in non-entrypoint files (#17734) 2025-02-26 16:02:15 -08:00
Dylan Conway
47f9bb84e8 fix: invalid json import regression (#17612) 2025-02-24 01:57:29 -08:00
pfg
92a91ef2fd Fix hosting destructured decl with movable initializer (#17468) 2025-02-19 20:21:52 -08:00
chloe caruso
78e52006c5 Rewrite internal Web Streams to use less memory (#16860)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: pfg <pfg@pfg.pw>
2025-02-15 01:16:28 -08:00
pfg
1ddf3fc097 Fix fetch with formdata on some servers (#16947) 2025-01-31 22:39:43 -08:00
190n
af27f9e697 Allow WTF timers to participate in the event loop (#15557)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: 190n <190n@users.noreply.github.com>
Co-authored-by: 190n <7763597+190n@users.noreply.github.com>
2025-01-28 17:47:53 -08:00
pfg
76f5c91ffb Regression test for 16702 (#16853) 2025-01-28 17:23:57 -08:00