Commit Graph

1279 Commits

Author SHA1 Message Date
Meghan Denny
4898e4ef0c Merge branch 'main' into nektro-patch-44307 2025-09-09 20:08:52 -08:00
Meghan Denny
b0fc59a836 bun-types: fill out HTTPParser 2025-09-09 20:29:31 -07:00
Alistair Smith
8ec4c0abb3 bun:test: Introduce optional type parameter to make bun:test matchers type-safe by default (#18511)
Fixes #6934
Fixes #7390

This PR also adds a test case for checking matchers, including when they
should fail

---------

Co-authored-by: Claude Bot <claude-bot@bun.sh>
2025-09-09 14:19:51 -07:00
Alistair Smith
e63608fced Fix: Make SQL connection string parsing more sensible (#22260)
This PR makes connection string parsing more sensible in Bun.SQL,
without breaking the default fallback of postgres

Added some tests checking for connection string precedence

---------

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-09-08 20:59:24 -07:00
Alistair Smith
d919a76dd6 @types/bun: A couple missing properties in AbortSignal & RegExpConstructor (#22439)
### What does this PR do?

Fixes #22425
Fixes #22431

### How did you verify your code works?

bun-types integration test
2025-09-05 20:07:39 -07:00
Meghan Denny
78fef11e64 fix test-http-outgoing-finish and test-http-keep-alive-large-write 2025-09-04 18:42:00 -07:00
Meghan Denny
c573f05a47 fix test-http-head-request 2025-09-04 18:36:54 -07:00
Meghan Denny
160d2e2b2b bump 2025-09-04 17:55:04 -07:00
Meghan Denny
e8bc2623ec Merge remote-tracking branch 'origin/main' into nektro-patch-44307 2025-09-04 15:48:38 -07:00
Meghan Denny
5b7fd9ed0e node:_http_server: implement Server.prototype.closeIdleConnections (#22234) 2025-09-04 15:18:31 -07:00
Marko Vejnovic
0759da233f (#22289): Remove misleading type definitions (#22377)
### What does this PR do?

Remove incorrect jsdoc. A user was mislead by the docblocks
in the `ffi.d.ts` file
https://github.com/oven-sh/bun/issues/22289#issuecomment-3250221597 and
this PR attempts to fix that.

### How did you verify your code works?

Tests already appear to exist for all of these types in `ffi.test.js`.
2025-09-03 12:22:13 -07:00
Alistair Smith
9978424177 fix: Return .splitting in the types for Bun.build() (#22362)
### What does this PR do?

Fix #22177

### How did you verify your code works?

bun-types integration test
2025-09-03 10:08:06 -07:00
robobun
c2bd4095eb Add vi export for Vitest compatibility in bun:test (#22304)
## Summary

- Add `vi` export to `bun:test` TypeScript definitions for **partial**
Vitest compatibility
- Provides Vitest-style mocking API aliases for existing Jest functions

## Changes

Added `vi` object export in `packages/bun-types/test.d.ts` with
TypeScript interface for the methods Bun actually supports.

**Note**: This is a **limited subset** of Vitest's full `vi` API. Bun
currently implements only these 5 methods:

 **Implemented in Bun:**
- `vi.fn()` - Create mock functions (alias for `jest.fn`)
- `vi.spyOn()` - Create spies (alias for `spyOn`)  
- `vi.module()` - Mock modules (alias for `mock.module`)
- `vi.restoreAllMocks()` - Restore all mocks (alias for
`jest.restoreAllMocks`)
- `vi.clearAllMocks()` - Clear mock state (alias for
`jest.clearAllMocks`)

 **NOT implemented** (full Vitest supports ~30+ methods):
- Timer mocking (`vi.useFakeTimers`, `vi.advanceTimersByTime`, etc.)
- Environment mocking (`vi.stubEnv`, `vi.stubGlobal`, etc.) 
- Advanced module mocking (`vi.doMock`, `vi.importActual`, etc.)
- Utility methods (`vi.waitFor`, `vi.hoisted`, etc.)

## Test plan

- [x] Verified `vi` can be imported: `import { vi } from "bun:test"`
- [x] Tested all 5 implemented `vi` methods work correctly
- [x] Confirmed TypeScript types work with generics and proper type
inference
- [x] Validated compatibility with basic Vitest usage patterns

## Migration Benefits

This enables easier migration for **simple** Vitest tests that only use
basic mocking:

```typescript
// Basic Vitest tests work in Bun now
import { vi } from 'bun:test'  // Previously would fail

const mockFn = vi.fn()          //  Works
const spy = vi.spyOn(obj, 'method')  //  Works
vi.clearAllMocks()              //  Works

// Advanced Vitest features still need porting to Jest-style APIs
// vi.useFakeTimers()           //  Not supported yet
// vi.stubEnv()                 //  Not supported yet
```

This is a first step toward Vitest compatibility - more advanced
features would need additional implementation in Bun core.

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

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
2025-09-02 01:54:12 -07:00
Dylan Conway
fcaff77ed7 Implement Bun.YAML.stringify (#22183)
### What does this PR do?
This PR adds `Bun.YAML.stringify`. The stringifier will double quote
strings only when necessary (looks for keywords, numbers, or containing
non-printable or escaped characters). Anchors and aliases are detected
by object equality, and anchor name is chosen from property name, array
item, or the root collection.
```js
import { YAML } from "bun"

YAML.stringify(null) // null
YAML.stringify("hello YAML"); // "hello YAML"
YAML.stringify("123.456"); // "\"123.456\""

// anchors and aliases
const userInfo = { name: "bun" };
const obj = { user1: { userInfo }, user2: { userInfo } };
YAML.stringify(obj, null, 2);
// # output
// user1: 
//   userInfo: 
//     &userInfo
//     name: bun
// user2: 
//   userInfo: 
//     *userInfo

// will handle cycles
const obj = {};
obj.cycle = obj;
YAML.stringify(obj, null, 2);
// # output
// &root
// cycle:
//   *root

// default no space
const obj = { one: { two: "three" } };
YAML.stringify(obj);
// # output
// {one: {two: three}}
```

### How did you verify your code works?
Added tests for basic use and edgecases

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- New Features
- Added YAML.stringify to the YAML API, producing YAML from JavaScript
values with quoting, anchors, and indentation support.

- Improvements
- YAML.parse now accepts a wider range of inputs, including Buffer,
ArrayBuffer, TypedArrays, DataView, Blob/File, and SharedArrayBuffer,
with better error propagation and stack protection.

- Tests
- Extensive new tests for YAML.parse and YAML.stringify across data
types, edge cases, anchors/aliases, deep nesting, and round-trip
scenarios.

- Chores
- Added a YAML stringify benchmark script covering multiple libraries
and data shapes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

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-31 18:27:51 -07:00
Meghan Denny
448fad8213 bun-types: define process.binding(http_parser) (#22175)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-27 16:50:27 -07:00
Alistair Smith
fd69af7356 Avoid global React namespace in experimental.d.ts
Co-authored-by: Parbez <imranbarbhuiya.fsd@gmail.com>
2025-08-26 15:15:48 -07:00
Alistair Smith
300f486125 Bundler changes to bring us closer to esbuild's api (#22076)
### What does this PR do?

- Implements .onEnd

Fixes #22061

Once #22144 is merged, this also fixes:
Fixes #9862
Fixes #20806

### How did you verify your code works?

Tests

---

TODO in a followup (#22144)
> ~~Make all entrypoints be called in onResolve~~
> ~~Fixes # 9862~~
> ~~Fixes # 20806~~

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-26 01:50:32 -07:00
Meghan Denny
e5a0f0386c fix verdaccio and others 2025-08-25 18:21:33 -07:00
pfg
e577a965ac Implement xit/xtest/xdescribe aliases (#21529)
For jest compatibility. Fixes #5228

---------

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-25 17:37:12 -07:00
Meghan Denny
096a711247 fix more node test timeouts 2025-08-25 17:18:16 -07:00
Dylan Conway
b99bbe7ee4 add Bun.YAML.parse to types (#22129) 2025-08-25 17:03:25 -07:00
Meghan Denny
5c8cfa44f3 Merge remote-tracking branch 'origin/main' into nektro-patch-44307 2025-08-25 11:24:49 -07:00
Parbez
8c3278b50d Fix ShellError reference in documentation example (#22100) 2025-08-24 13:07:43 -07:00
Alistair Smith
8bc2959a52 small typescript changes for release (#22097) 2025-08-24 12:43:15 -07:00
Jarred Sumner
707fc4c3a2 Introduce Bun.secrets API (#21973)
This PR adds `Bun.secrets`, a new API for securely storing and
retrieving credentials using the operating system's native credential
storage locally. This helps developers avoid storing sensitive data in
plaintext config files.

```javascript
// Store a GitHub token securely
await Bun.secrets.set({
  service: "my-cli-tool",
  name: "github-token",
  value: "ghp_xxxxxxxxxxxxxxxxxxxx"
});

// Retrieve it when needed
const token = await Bun.secrets.get({
  service: "my-cli-tool",
  name: "github-token"
});

// Use with fallback to environment variable
const apiKey = await Bun.secrets.get({
  service: "my-app",
  name: "api-key"
}) || process.env.API_KEY;
```

Marking this as a draft because Linux and Windows have not been manually
tested yet. This API is only really meant for local development usecases
right now, but it would be nice if in the future to support adapters for
production or CI usecases.

### Core API
- `Bun.secrets.get({ service, name })` - Retrieve a stored credential
- `Bun.secrets.set({ service, name, value })` - Store or update a
credential
- `Bun.secrets.delete({ service, name })` - Delete a stored credential

### Platform Support
- **macOS**: Uses Keychain Services via Security.framework
- **Linux**: Uses libsecret (works with GNOME Keyring, KWallet, etc.)
- **Windows**: Uses Windows Credential Manager via advapi32.dll

### Implementation Highlights
- Non-blocking - all operations run on the threadpool
- Dynamic loading - no hard dependencies on system libraries
- Sensitive data is zeroed after use
- Consistent API across all platforms

## Use Cases

This API is particularly useful for:
- CLI tools that need to store authentication tokens
- Development tools that manage API keys
- Any tool that currently stores credentials in `~/.npmrc`,
`~/.aws/credentials` or in environment variables that're globally loaded

## Testing

Comprehensive test suite included with coverage for:
- Basic CRUD operations
- Empty strings and special characters
- Unicode support
- Concurrent operations
- Error handling

All tests pass on macOS. Linux and Windows implementations are complete
but would benefit from additional platform testing.

## Documentation

- Complete API documentation in `docs/api/secrets.md`
- TypeScript definitions with detailed JSDoc comments and examples

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
2025-08-23 06:57:00 -07:00
Dylan Conway
8fad98ffdb Add Bun.YAML.parse and YAML imports (#22073)
### What does this PR do?
This PR adds builtin YAML parsing with `Bun.YAML.parse`
```js
import { YAML } from "bun";
const items = YAML.parse("- item1");
console.log(items); // [ "item1" ]
```

Also YAML imports work just like JSON and TOML imports
```js
import pkg from "./package.yaml"
console.log({ pkg }); // { pkg: { name: "pkg", version: "1.1.1" } }
```
### How did you verify your code works?
Added some tests for YAML imports and parsed values.

---------

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-08-23 06:55:30 -07:00
Jarred Sumner
75f0ac4395 Add Windows metadata flags to bun build --compile (#22067)
## Summary
- Adds support for setting Windows executable metadata through CLI flags
when using `bun build --compile`
- Implements efficient single-operation metadata updates using the
rescle library
- Provides comprehensive error handling and validation

## New CLI Flags
- `--windows-title`: Set the application title
- `--windows-publisher`: Set the publisher/company name  
- `--windows-version`: Set the file version (e.g. "1.0.0.0")
- `--windows-description`: Set the file description
- `--windows-copyright`: Set the copyright notice

## JavaScript API
These options are also available through the `Bun.build()` JavaScript
API:
```javascript
await Bun.build({
  entrypoints: ["./app.js"],
  outfile: "./app.exe",
  compile: true,
  windows: {
    title: "My Application",
    publisher: "My Company",
    version: "1.0.0.0",
    description: "Application description",
    copyright: "© 2025 My Company"
  }
});
```

## Implementation Details
- Uses a unified `rescle__setWindowsMetadata` C++ function that loads
the Windows executable only once for efficiency
- Properly handles UTF-16 string conversion for Windows APIs
- Validates version format (supports "1", "1.2", "1.2.3", or "1.2.3.4"
formats)
- Returns specific error codes for better debugging
- All operations return errors instead of calling `Global.exit(1)`

## Test Plan
Comprehensive test suite added in
`test/bundler/compile-windows-metadata.test.ts` covering:
- All CLI flags individually and in combination
- JavaScript API usage
- Error cases (invalid versions, missing --compile flag, etc.)
- Special character handling in metadata strings

All 20 tests passing (1 skipped as not applicable on Windows).

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

---------

Co-authored-by: Zack Radisic <zack@theradisic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2025-08-23 00:33:24 -07:00
Jarred Sumner
0e37dc4e78 Fixes #20729 (#22048)
### What does this PR do?

Fixes #20729

### How did you verify your code works?

There is a test

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-22 03:41:49 -07:00
Ciro Spaciari
ecbf103bf5 feat(MYSQL) Bun.SQL mysql support (#21968)
### What does this PR do?
Add MySQL support, Refactor will be in a followup PR
### How did you verify your code works?
A lot of tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: cirospaciari <6379399+cirospaciari@users.noreply.github.com>
2025-08-21 15:28:15 -07:00
Alistair Smith
efdbe3b54f bun install Security Scanner API (#21183)
### What does this PR do?

Fixes #22014

todo:
- [x] not spawn sync
- [x] better comm to subprocess (not stderr)
- [x] tty
- [x] more tests (also include some tests for the actual implementation
of a provider)
- [x] disable autoinstall?

Scanner template: https://github.com/oven-sh/security-scanner-template

<!-- **Please explain what your changes do**, example: -->

<!--

This adds a new flag --bail to bun test. When set, it will stop running
tests after the first failure. This is useful for CI environments where
you want to fail fast.

-->

---

- [x] Documentation or TypeScript types (it's okay to leave the rest
blank in this case)
- [x] Code changes

### How did you verify your code works?

<!-- **For code changes, please include automated tests**. Feel free to
uncomment the line below -->

<!-- I wrote automated tests -->

<!-- If JavaScript/TypeScript modules or builtins changed:

- [ ] I included a test for the new code, or existing tests cover it
- [ ] I ran my tests locally and they pass (`bun-debug test
test-file-name.test`)

-->

<!-- If Zig files changed:

- [ ] I checked the lifetime of memory allocated to verify it's (1)
freed and (2) only freed when it should be
- [ ] I included a test for the new code, or an existing test covers it
- [ ] JSValue used outside of the stack is either wrapped in a
JSC.Strong or is JSValueProtect'ed
- [ ] I wrote TypeScript/JavaScript tests and they pass locally
(`bun-debug test test-file-name.test`)
-->

<!-- If new methods, getters, or setters were added to a publicly
exposed class:

- [ ] I added TypeScript types for the new methods, getters, or setters
-->

<!-- If dependencies in tests changed:

- [ ] I made sure that specific versions of dependencies are used
instead of ranged or tagged versions
-->

<!-- If a new builtin ESM/CJS module was added:

- [ ] I updated Aliases in `module_loader.zig` to include the new module
- [ ] I added a test that imports the module
- [ ] I added a test that require() the module
-->


tests (bad currently)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan-conway@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-08-21 14:53:50 -07:00
Michael H
d354714791 Plugins + cross-compilation + Bun.build API support for Bun.build({compile}) (#21915)
### What does this PR do?

in the name

### How did you verify your code works?

tests, but using ci to see if anything else broke

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-08-20 01:25:49 -07:00
Alistair Smith
784271f85e SQLite in Bun.sql (#21640)
### What does this PR do?

Support sqlite in the Bun.sql API

Fixes #18951
Fixes #19701

### How did you verify your code works?

tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-08-19 23:15:53 -07:00
Meghan Denny
5ab767e993 some more 2025-08-18 21:59:10 -07:00
Alistair Smith
50eaa755c7 Bun.redis getex all arguments (#21911)
### What does this PR do?

Fix #21905

### How did you verify your code works?

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-15 17:50:12 -07:00
Ray
22a37b2791 feat(types): add decompress to fetch() (#21855)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-15 13:37:24 -07:00
Meghan Denny
87878d4c0a Merge branch 'main' into nektro-patch-44307 2025-08-15 09:54:46 -08:00
Jarred Sumner
4fa69773a3 Introduce Bun.stripANSI (#21801)
### What does this PR do?

Introduce `Bun.stripANSI`, a SIMD-accelerated drop-in replacement for
the popular `"strip-ansi"` package.

`Bun.stripANSI` performs >10x faster and fixes several bugs in
`strip-ansi`, like [this long-standing
one](https://github.com/chalk/strip-ansi/issues/43).

### How did you verify your code works?

There are tests that check the output of `strip-ansi` matches
`Bun.stripANSI`. For cases where `strip-ansi`'s behavior is incorrect,
the expected value is manually provided.

---------

Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: taylor.fish <contact@taylor.fish>
2025-08-14 22:42:05 -07:00
Meghan Denny
849db19655 a bit more 2025-08-14 19:06:41 -07:00
Jarred Sumner
7b31393d44 Don't run the "Date" header timer every second all the time (#21850)
### What does this PR do?

Only reschedule the Date header while there are in-flight incoming HTTP
requests.

Update the Date header if, at the time we reschedule it, it is now
stale.

Goal: don't wake up Bun's process on every second when we're idly doing
nothing.

| Metric | this branch | main |
|--------|--------------------------|-------------------|
| **task-clock** | **35.24 msec** 🟢 | **102.79 msec** |
| **context-switches** | 619 🟢 | 1,699 |
| **cpu-migrations** | 11 🟢| 35 |
| **page-faults** | 2,173 | 2,174 |
| **cpu_atom/instructions** | **109,904,685 (1.76 insn/cycle)** 🟢 |
**67,880,002 (0.55 insn/cycle)** |
| **cpu_core/instructions** | **87,183,124 (1.07 insn/cycle)** 🟢 |
**32,939,500 (0.44 insn/cycle)** |
| **cpu_atom/cycles** | 62,527,125 (1.774 GHz) 🔻 | 122,448,620 (1.191
GHz) |
| **cpu_core/cycles** | 81,651,366 (2.317 GHz) 🟢 | 75,584,111 (0.735
GHz) |
| **cpu_atom/branches** | 9,632,460 (273.338 M/sec) 🔻 | 12,119,616
(117.909 M/sec) |
| **cpu_core/branches** | 17,417,756 (494.259 M/sec) 🟢 | 6,901,859
(67.147 M/sec) |
| **cpu_atom/branch-misses** | 192,013 (1.99%) 🟢 | 1,735,446 (14.32%) |
| **cpu_core/branch-misses** | 473,567 (2.72%) 🟢 | 499,907 (7.24%) |
| **TopdownL1 (cpu_core)** | 31.4% backend_bound<br>11.7%
bad_speculation<br>36.0% frontend_bound 🔻<br>20.9% retiring<br>34.1%
bad_speculation<br>41.9% retiring<br>0.0% backend_bound<br>24.0%
frontend_bound 🔻 | 21.3% backend_bound<br>9.6% bad_speculation<br>56.2%
frontend_bound<br>12.9% retiring<br>-20.0% bad_speculation<br>55.2%
retiring<br>26.2% backend_bound<br>38.6% frontend_bound |
| **time elapsed** | 1000.0219 s | 1000.0107 s |
| **user time** | — | 0.042667 s |
| **sys time** | — | 0.060309 s |

### How did you verify your code works?

Added a test

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-14 15:39:09 -07:00
Meghan Denny
655cc58d90 node:http client rework 2025-08-12 18:46:36 -07:00
Alistair Smith
8e6184707d fix #21766 (#21767)
### What does this PR do?

### How did you verify your code works?
2025-08-11 14:22:49 -07:00
Michael H
0b7a6024e0 vscode extention: fix oom with test explorer from too many files (#21744)
### What does this PR do?

Limit to only 5k test files for initial scan + ignore node_modules for
subdirs.

### How did you verify your code works?

manual
2025-08-10 21:36:04 -07:00
Jarred Sumner
b0799da968 Harden Transfer-Encoding (#21737)
### What does this PR do?

### How did you verify your code works?

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-10 03:52:40 -07:00
Jarred Sumner
964d4dac2c Rewrite AbortSignal.timeout (#21695)
### What does this PR do?

On Linux, AbortSignal.timeout created a file descriptor for each timeout
and did not keep the event loop alive when a timer was active. This is
fixed.

### How did you verify your code works?

Fewer flaky tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Claude <claude@anthropic.ai>
2025-08-08 23:07:19 -07:00
Alistair Smith
04883a8bdc revert fe28e00d53.
This reverts commit fe28e00d53.
2025-08-05 16:10:29 -07:00
Alistair Smith
fe28e00d53 feat: add Bun.SQL API with initial SQLite support 2025-08-05 16:04:11 -07:00
Ciro Spaciari
ed6f099e5e fix(tls) fix ciphers (#21545)
### What does this PR do?
Uses same ciphers than node.js for compatibility and do the same error
checking on empty ciphers
Fixes https://github.com/oven-sh/bun/issues/9425
Fixes https://github.com/oven-sh/bun/issues/21518
Fixes https://github.com/oven-sh/bun/issues/19859
Fixes https://github.com/oven-sh/bun/issues/18980

You can see more about redis ciphers here
https://redis.io/docs/latest/operate/rs/security/encryption/tls/ciphers/
this should fix redis related ciphers issues
### How did you verify your code works?
Tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-04 19:42:40 -07:00
Alistair Smith
be5c69df79 fix: main is not readonly in @types/node (#21612)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-04 13:07:42 -07:00
Jarred Sumner
b6d3768038 Use stopIfNecessary() instead of heap.{acquireAccess,releaseAccess} (#21598)
### What does this PR do?

dropAllLocks causes Thread::yield several times which means more system
calls which means more thread switches which means slower

### How did you verify your code works?
2025-08-04 00:45:33 -07:00
Jarred Sumner
1ac2391b20 Reduce idle CPU usage in long-running processes (#21579)
### What does this PR do?

Releasing heap access causes all the heap helper threads to wake up and
lock and then unlock futexes, but it's important to do that to ensure
finalizers run quickly.

That means releasing heap access is a balance between:
 1. CPU usage
 2. Memory usage

Not releasing heap access causes benchmarks like
https://github.com/oven-sh/bun/pull/14885 to regress due to finalizers
not being called quickly enough.

Releasing heap access too often causes high idle CPU usage.

 For the following code:
 ```
 setTimeout(() => {}, 10 * 1000)
 ```

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
0:
>
>   Involuntary context switches: 605
>

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
5:
>
>   Involuntary context switches: 350
>

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
10:
>
>  Involuntary context switches: 241
>

 Also comapre the #14885 benchmark with different values.

 The idea here is if you entered JS "recently", running any
 finalizers that might've been waiting to be run is a good idea.
 But if you haven't, like if the process is just waiting on I/O
 then don't bother.

### How did you verify your code works?
2025-08-03 18:14:40 -07:00