Compare commits

...

798 Commits

Author SHA1 Message Date
Dylan Conway
e9470121d2 more docs 2023-10-10 18:50:46 -07:00
Dylan Conway
ee2e34866e Merge branch 'main' into dylan/github-api-option 2023-10-10 15:28:08 -07:00
Ciro Spaciari
6301778a58 fix(AbortSignal/fetch) fix AbortSignal.timeout, fetch lock behavior and fetch errors (#6390)
* fix abort signal and fetch error

* fix fetch error and lock behavior
2023-10-09 19:56:48 -07:00
Ashcon Partovi
3667b93871 Fix npm tag for canary bun-types, again 2023-10-09 12:14:26 -07:00
otterDeveloper
0a8aab6b23 Add Fedora build instructions to development.md (#6359) 2023-10-09 11:52:16 -07:00
babar
6a73f2b1e7 added commands (#6314)
added commands to install unzip package and to check Linux kernel version
2023-10-09 11:51:41 -07:00
TPLJ
99a78f8540 Update README.md (#6291)
fixed some minor documentation.
2023-10-09 11:50:08 -07:00
Michael Di Prisco
8d4b296bd2 docs: fixing a couple typos (#6331) 2023-10-09 11:48:07 -07:00
Liz
a9e1792607 fix: support uint8 exit code range (#6303)
The exit code support is between 0-255 and not only in the signed positive range
(0-127).
Node.js does not seam to throw on a bigger integer and just wraps around,
but throwing a error is a good approach and makes the behaviour more defined.

This allows the range to be 0-255

Fixes: https://github.com/oven-sh/bun/issues/6284
2023-10-09 11:47:38 -07:00
2hu
0965e6ddfd Fix array variables preview in debugger (#6379) 2023-10-09 11:47:00 -07:00
Ciro Spaciari
35109160ca feat(KeyObject) (#5940)
* oops

* createSecretKey but weird error

* use the right prototype, do not add a function called export lol

* HMAC JWT export + base64 fix

* Fix Equals, Fix Get KeySize, add complete export RSA

* fix RSA export

* add EC exports

* X25519 and ED25519 export + fixes

* fix default exports

* better asymmetricKeyType

* fix private exports

* fix symmetricKeySize

* createPublicKey validations + refactor

* jwt + der fixes

* oopsies

* add PEM into createPublicKey

* cleanup

* WIP

* bunch of fixes

* public from private + private OKP

* encrypted keys fixes

* oops

* fix clear tls error, add some support to jwk and other formats on publicEncrypt/publicDecrypt

* more fixes and tests working

* more fixes more tests

* more clear hmac errors

* more tests and fixes

* add generateKeyPair

* more tests passing, some skips

* fix EC key from private

* fix OKP JWK

* nodejs ignores ext and key_ops on KeyObject.exports

* add EC sign verify test

* some fixes

* add crypto.generateKeyPairSync(type, options)

* more fixes and more tests

* fix hmac tests

* jsonwebtoken tests

* oops

* oops2

* generated files

* revert package.json

* vm tests

* todos instead of failues

* toBunString -> toString

* undo simdutf

* improvements

* unlikely

* cleanup

* cleanup 2

* oops

* move _generateKeyPairSync checks to native
2023-10-07 15:22:45 -07:00
Jarred Sumner
bb9933fa7e Exclude more files 2023-10-07 14:15:53 -07:00
Jarred Sumner
673f6fc634 Exclude more files 2023-10-07 14:14:42 -07:00
Jarred Sumner
09663a5558 Update settings.json 2023-10-07 14:11:39 -07:00
Jarred Sumner
66b15a8df6 Update settings.json 2023-10-07 14:10:54 -07:00
Dylan Conway
96aa9c0a38 fix a couple install tests 2023-10-06 22:06:28 -07:00
Dylan Conway
46736d5ecb format 2023-10-06 22:02:55 -07:00
Jarred Sumner
25cf4016d3 Fix memory leak in fetch() (#6350)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-06 20:14:44 -07:00
Silver
48635fd910 [types] allow onLoad plugin callbacks to return undefined (#6346)
Returning undefined simply falls through to the next plugin, or to the default loader.
This is defined by esbuild, and supported by Bun, but the types don't reflect it properly.
2023-10-06 19:22:38 -07:00
Paul Nodet
456d6be022 docs: file.stream() is not a promise (#6337) 2023-10-06 03:26:42 -07:00
Colin McDonnell
16cf1fe5f3 Generate compat docs (wip) 2023-10-05 17:19:33 -07:00
Ai Hoshino
e0e9bc16bf fix(serve): fix close_connection behaviour in endWithoutBody (#6315)
Close: #6031
2023-10-05 20:43:58 -03:00
Filip Skokan
30b8993edd WebCryptoAPI: remove JWK "EdDSA" alg checks (#6294) 2023-10-05 20:43:42 -03:00
Dylan Conway
e6d97f2581 add install.github.api option 2023-10-05 16:39:12 -07:00
Justin "J.R." Hill
5c37d5293c test(bun install): cover http(s) non-github case (#6190) 2023-10-05 16:12:07 -07:00
Colin McDonnell
323ae0f2a3 Update Node.js compat docs (#6282)
* Update nodejs-apis

* No commas

* Updates
2023-10-05 16:03:21 -07:00
Jake Boone
7ef4cd26ac Use singular nouns when appropriate on install messages (#2543)
* Use singular nouns when appropriate on install messages

* Fix one more pluralization

* Fix bun-add tests for "1 package installed"

* Fix bun install/remove/update tests for "1 package installed"
2023-10-05 15:59:02 -07:00
Dylan Conway
df1b0c4332 fix printing latest available version 2023-10-05 11:30:52 -07:00
Dylan Conway
4a2e1574e4 fix semver and repository host bugs (#6312)
* releases before prereleases

* handle different repo hosts

* remove log

* Update bun-install.test.ts

* test for `bun add`

* gitlab test

* use comptime hash map, another test case

* don't need length

* bump timeout, use tld

* infer git dependencies for https and ssh
2023-10-04 22:46:21 -07:00
Dylan Conway
5a315f4df0 fix another os test failure 2023-10-04 22:45:11 -07:00
Dylan Conway
f0a914ea8d fix os test failure 2023-10-04 22:27:28 -07:00
Dylan Conway
d4a458a95b generated 2023-10-04 21:40:02 -07:00
Jarred Sumner
5c8233515a Fix query property of url object (#6274)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-04 21:31:29 -07:00
Gavin John
c5c7934ebc Update preload documentation to make applicability to plugins more obvious (#6298) 2023-10-04 21:29:54 -07:00
Jarred Sumner
b0ffe68675 Create AbortSignal without JS (#6278)
* Create `AbortSignal` without JS

* Don't leak

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-04 21:29:35 -07:00
Colin McDonnell
5da79a8366 Closes #6309 (#6310) 2023-10-04 21:28:23 -07:00
Jarred Sumner
ff88510e5f Bump! 2023-10-04 21:19:33 -07:00
Colin McDonnell
df9461ecc5 Update tsconfigs 2023-10-03 23:16:55 -07:00
Dylan Conway
98e9e9b112 Upgrade webkit (#6277)
* `reportExtraMemoryAllocated` parameters changed

* bump webkit

* Update Dockerfile

* format
2023-10-03 19:56:33 -07:00
Ashcon Partovi
9308e1bf09 Support bun run --if-present (#6248)
* Support --if-present
Closes #5670

* More robust tests, handle more cases
2023-10-03 17:39:45 -07:00
Andrey Smirnov
aa8ccce952 compat: Buffer: allow optional positional arguments to be undefined (#4911)
* fix `Buffer` compat with Node.js: compare

* fix `Buffer` compat with Node.js: copy
2023-10-03 15:30:04 -07:00
Dylan Conway
ffe6bb0b7f fix decorator tests 2023-10-03 13:50:36 -07:00
Ai Hoshino
b7982ac131 fix(blob): Add the current offset to the new blob. (#6259)
Close: #6252
2023-10-03 12:03:57 -07:00
Ashcon Partovi
60e7ae9aee Remove old package 2023-10-03 12:02:28 -07:00
Ashcon Partovi
86e4f72f00 Fix permissions for Github Actions 2023-10-03 12:02:15 -07:00
axel escalada
0ca9a7889a Fix bunx command for github package #5974 (#6042)
* fix bunx command for github package

* refactor fmt package to use it when the path is seted

* use labeled block to assign const instead of use 'undefined'
2023-10-03 11:49:24 -07:00
WingLim
476fa4deda feat(encoding): support BOM detection with test passed (#6074) 2023-10-03 10:28:59 -07:00
JS Park
4f1710d2d6 docs: update typescript.md (#6222)
Fix inconsistent results from `bun init`.
2023-10-03 09:12:37 -07:00
John Beene
1acc8191f5 Docs: Update context.md (#6256)
Use token from cookies, not from ws.data
2023-10-03 09:11:52 -07:00
Mathias Wulff
0ee04261b9 Add license information to package.json (#6255) 2023-10-03 09:11:02 -07:00
Dylan Conway
745b6b94ee Store workspace package versions (#6258)
* Store workspace package versions in the lockfile

* more logging

* wip

* keep information from workspace name array and cache

* hash key

* remove cache, compare workspaces with initially loaded

* uncomment sort

* remove comments

* remove allocation

* package json

* test `bun add <package>` without workspace prefix

* Update test/cli/install/bun-install.test.ts

Co-authored-by: Markus Staab <maggus.staab@googlemail.com>

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Markus Staab <maggus.staab@googlemail.com>
2023-10-03 02:17:21 -07:00
Colin McDonnell
47651f321a Update ws example 2023-10-02 19:02:27 -07:00
Jarred Sumner
b444c0b98d Set fetch timeout to 5 minutes (#6217)
* Increase timeouts

* Update uws.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-02 18:01:59 -07:00
Ashcon Partovi
15880308b7 Fix bun install reading Github API from wrong environment variable (#6247)
* Fix `bun install` reading Github API from wrong environment variable

* Update src/install/install.zig

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-10-02 18:00:17 -07:00
Jarred Sumner
89bb526e14 Warn at start when using AVX build of Bun without AVX support (#6242)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-02 17:59:38 -07:00
Colin McDonnell
63a00791fa Update development and document env var expansion 2023-10-02 17:52:29 -07:00
Cícero Santos
a6af1c89b9 Update development.md (#6221) 2023-10-02 15:18:55 -07:00
Colin McDonnell
08bf8b8ad1 Add Bun.TOML to types (#6161) 2023-10-02 15:18:29 -07:00
Colin McDonnell
0c3c57cc35 Add dns.reverse and dns.getServers to types 2023-10-02 14:11:55 -07:00
Ashcon Partovi
237a5ada47 Fix npm tag for canary bun-types 2023-10-02 13:56:14 -07:00
Corné Dorrestijn
0a2d490bf8 Added the fileExtensions field to file-system-router.md (#6231) 2023-10-02 02:42:17 -07:00
Jarred Sumner
ea956e58e9 more logging 2023-10-02 02:38:47 -07:00
Jarred Sumner
46b5069c40 Slightly reduce number of open file descriptors in bun install (#6219)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-10-01 16:55:05 -07:00
Ai Hoshino
f7618aba20 fix(node:process): fix return value of process.kill (#6207) 2023-10-01 12:55:38 -07:00
Jarred Sumner
e020ecec15 Fix bug causing "Connection Refused" errors (#6206)
* Loop through the return values of getaddrinfo

* Remove incorrect assertion

* Remove extra check

* Remove extra check

* Update bsd.c

* More consistent

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-30 22:59:42 -07:00
Jarred Sumner
8775d37559 Fix regression 2023-09-30 17:16:06 -07:00
Jarred Sumner
54d25b8f6b Update cp.test.ts 2023-09-30 17:09:27 -07:00
Jarred Sumner
960922bba9 Add title 2023-09-30 17:09:12 -07:00
Jarred Sumner
c21be13be4 tweak github actions (#6195)
* Discord comments

* better

* better

* actions

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-30 02:50:38 -07:00
Jarred Sumner
c0b758ad45 Bump 2023-09-29 23:44:57 -07:00
Jarred Sumner
d65fdb6035 Fix hang in bun install (#6192)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-29 20:45:51 -07:00
Jarred Sumner
a97847a494 Implement virtual module support in Bun.plugin (#6167)
* Add support for `build.module` in `Bun.plugin`

* Another test

* Update docs

* Update isBuiltinModule.cpp

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
2023-09-29 16:34:20 -07:00
dave caruso
eddb0078b5 fix(runtime): followup for server.requestIP (#6185)
* fix(runtime): followup for `server.requestIP`

* oops

* yeah

* sure

* Update src/deps/libuwsockets.cpp

* Update Dockerfile

* lol

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-29 16:17:54 -07:00
Liz
fa7d7bd1e4 fix: don't set default request method when creating a Request (#6154)
In the case of creating a Request with the parameters `(Request, object)`,
there was a bug that method and headers are set from the default created by
the init rather then the already present value from the request param.
This is because for a to me unknown reason the order in which the parameters
are processed is reversed.

This fixes that by adding a check which stops the defaults from being set,
unless they are explicitly passed.

Fixes: https://github.com/oven-sh/bun/issues/6144
2023-09-29 16:13:49 -07:00
dave caruso
72bdd380af add Socket.prototype; lol (#5945) 2023-09-29 15:42:06 -07:00
dave caruso
10bee33909 fix(resolver): support encoded file urls (#5766)
* start working on this

* it works now

* better implementation imo

* yippee

* more tests and better unrefing

* fix leak?
2023-09-29 14:58:39 -07:00
dave caruso
6afa78120a feat(runtime): implement server.requestIp + node:http socket.address() (#6165)
* [server] requestIp and AnyRequestContext
Changed Request.uws_request to the new AnyRequestContext. This
allows grabbing the IP from a Request. Unfinished.

* [server] basic `requestIp` implementation

Currently using uws's requestIpAsText, which always returns a ipv6
string. We should return a `SocketAddress` object to the user instead,
which will contain the formatted address string and what type it is.
We'll have to use requestIpAsBinary and parse that ourselves.

* TypeScript docs, use `bun.String`, return `undefined` instead of `null`
if we can't get the ip.

* binary address formatting

* uws getRemoteAddress binding

* remove dead code

* working

* final touches

* I will abide by the results of this poll.

---------

Co-authored-by: Parzival-3141 <29632054+Parzival-3141@users.noreply.github.com>
2023-09-29 03:39:26 -07:00
Jarred Sumner
6514dcf4cb Fixes #6053 (#6162)
Fixes #6053

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-29 00:03:58 -07:00
Jarred Sumner
d3caf37b49 Upgrade to latest Node.js version (#6158)
* Upgrade to latest reported Node.js version

* Upgrade

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-28 23:20:26 -07:00
Devin Johw
315125c43a docs (runtime): the order of checking files when using bare impoort (#5919) 2023-09-28 22:13:52 -07:00
Dylan Conway
f6fbf86910 fix decorator tests 2023-09-28 19:18:36 -07:00
axel escalada
e1117c6ae5 Add local tarball install #5812 (#6118)
* check if the value passed for add command is a local tarball and install it, test for local tarball

* use bunExe()

* use absolute path to copy tarball

* fmt ts
2023-09-28 19:07:51 -07:00
Jarred Sumner
4bdec01619 Reduce memory usage of HTTP server (#6135)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-28 19:06:04 -07:00
dave caruso
2e8d9d4607 Revert WebKit submodule to where it should be 2023-09-28 18:01:14 -07:00
Colin McDonnell
640b0b4df9 Improve docs 2023-09-28 14:14:44 -07:00
Alba Silvente Fuentes
16be721d8a docs: update image astro.md (#6149) 2023-09-28 12:52:00 -07:00
Colin McDonnell
26794680dd Update prisma 2023-09-28 11:32:46 -07:00
Colin McDonnell
5fedc8bd6c Revert "Update prisma guide"
This reverts commit e62fef6765.
2023-09-28 11:31:47 -07:00
Colin McDonnell
e62fef6765 Update prisma guide 2023-09-28 11:27:08 -07:00
dave caruso
387f1260c9 Get Next.js Pages Router to work (#6095)
* hell

* make it so bun-debug-src

* teag

* wild

* yippee

* fas

* fix async hooks assertions

* yap

* yeah that's wild

* aa

* a

* increase time allowed

* so trivial
2023-09-28 03:53:24 -07: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
Dylan Conway
31d96a1b7f fix typescript metadata for import identifiers (#6130)
* handle import identifiers

* a test

* handle dot case
2023-09-27 23:37:53 -07:00
Dylan Conway
3ee09bfe79 update snapshots 2023-09-27 22:35:06 -07:00
jhmaster
3d37684253 deadCodeElimination toggle for Bun.Transpiler (#5932)
* add Bun.Transpiler DCE option

* mark DCE toggle experimental + tests

* full (hopefully) DCE toggle

* update DCE toggle tests

* add DCE option to types

* run fmt

* Removed uws submodule
2023-09-27 19:26:03 -07:00
Dylan Conway
06a82b7725 real fix was #5679 (#6123) 2023-09-27 19:23:28 -07:00
Justin "J.R." Hill
1d6d639352 fix(bun install): Handle vercel and github tarball path dependencies (#6122)
* fix(bun install): Handle vercel and github tarball path dependencies

* test(bun install): test tarball path with when

* Simplify github tarball detection

---------

Co-authored-by: bun <noreply@oven.sh>
2023-09-27 19:22:50 -07:00
Daniel Amemba
7cd1dc2817 Update run.md (#6099)
Changed the verb form from ignores to ignored.
2023-09-27 17:44:38 -07:00
Justin "J.R." Hill
57d1ae234c Update developer arch install steps for llvm and clang (#6120)
`llvm` and `clang` are both at v16

`llvm16` and `clang16` are AUR packages https://aur.archlinux.org/packages/llvm16 https://aur.archlinux.org/packages/clang16 and need extra steps to setup
2023-09-27 17:41:06 -07:00
Liz
8608b5286a fix: implement correct behaviour for urls with blob: scheme (#5825)
* fix: implement correct behaviour for urls with blob: scheme

Urls using the blob scheme can have special behaviour if their origin itself
is a url.
This fixes that by parsing the subdomain and if valid and the schemes(protocols)
are valid returns its origin.
Ive used node.js here a lot to make sure its behaviour is copied 1:1 and enabled
the automated tests for it.

Fixes https://github.com/oven-sh/bun/issues/5805

* fix: subUrl can be const, we are not modifying it

* style: add spaces after `if` keyword
2023-09-27 16:15:45 -07:00
Brennan Kinney
a5f76e690a fix: Docker - Apply workaround with RUN to symlink bunx (#6100)
Using `RUN --mount`, we can run the command with the build stage files overlayed for the `ln` and `which` commands.

`/bin` is a symlink to `/usr/bin`, both seem required to work correctly.
2023-09-27 09:49:33 -07:00
Ai Hoshino
a0081f9e29 fix(node:fs): fix fs.exists callback parameters (#6097)
Close: #6073
2023-09-27 03:40:45 -07:00
Dylan Conway
4d2b442a33 Update bun-install.test.ts 2023-09-26 22:19:33 -07:00
Dylan Conway
0268807be2 fix workspace dependency install (#6092)
* handle `*`

* test

* always use the package name

* more tests

* install dependency in each
2023-09-26 21:53:14 -07:00
Ashcon Partovi
f354a29683 Remove one of the tags 2023-09-26 20:07:27 -07:00
Ashcon Partovi
e5b62bf074 Fix docker tags 2023-09-26 20:01:39 -07:00
Ashcon Partovi
e05d190e6a Fix plain tag not releasing 2023-09-26 19:50:12 -07:00
Liz
d7b43f8ea1 fix: support console.dir options object correctly (#6059)
* fix: support console,dir options object correctly

`console.dir` can be passed a second argument which is a object of options.
This implements that logic with the currently supported properties: `depth`
and `colors`.
I used node as a reference for implementation details.

Fixes: https://github.com/oven-sh/bun/issues/6039

* style: format zig file

* fix: implement changes from review

Implements changes requested from review, like adding
more test cases and refactoring code style.
2023-09-26 19:47:37 -07:00
Ciro Spaciari
648d5aecf3 fix server end of stream, fix fetch not streaming without content-length or chunked encoding, fix case when stream do not return a promise on pull (#6086) 2023-09-26 19:31:20 -07:00
Ashcon Partovi
dc55492698 Add Docker section to docs 2023-09-26 19:30:00 -07:00
Ashcon Partovi
2b2927dedc Fix latest tag 2023-09-26 19:22:38 -07:00
Ashcon Partovi
500c52af62 Add is-latest flag to manual release 2023-09-26 19:18:24 -07:00
Ashcon Partovi
c1deec3c16 Use ln -s instead of ln due to image size 2023-09-26 19:05:39 -07:00
Ashcon Partovi
fbbf184b1d Fix homebrew 2023-09-26 18:57:32 -07:00
Ashcon Partovi
e127c520a9 Better bun-release workflow 2023-09-26 18:51:57 -07:00
Ashcon Partovi
80195557c9 Fix alpine image for arm64 2023-09-26 17:59:38 -07:00
Ashcon Partovi
9e26485b04 Fix docker release tag 2023-09-26 17:40:17 -07:00
Ashcon Partovi
5cf29df066 Fix debian-slim docker workflow 2023-09-26 17:12:26 -07:00
Ashcon Partovi
1bf36cf123 Fix github workflow permissions 2023-09-26 17:08:11 -07:00
Brennan Kinney
d060474f3a fix: Docker - Include bunx symlink in distroless variant (#6090) 2023-09-26 17:06:44 -07:00
Ashcon Partovi
fae646da3b Remove latest tag from canary Docker workflow 2023-09-26 16:38:44 -07:00
Ashcon Partovi
298515c368 Improve Docker images (#5771)
* Improve Docker images

* Add alpine and distroless images

* Update docker workflow
2023-09-26 16:35:12 -07:00
Alba Silvente Fuentes
2a14d9e5c9 Update astro.md to v3 (#6070) 2023-09-26 16:13:59 -07:00
0xflotus
549d01a4d6 docs: fixed small error (#6077) 2023-09-26 16:13:27 -07:00
Dylan Conway
aec0d35f9b no this value (#6063) 2023-09-25 23:27:55 -07:00
Colin McDonnell
b5c80d9476 Better typings for test.each() 2023-09-25 20:01:34 -07:00
Jarred Sumner
17fa9378e9 Drain microtasks at end of abort() if called into JS (#6036)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-25 16:09:37 -07:00
Jarred Sumner
6cde1d3b89 Add Module._extensions (#5998)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-25 16:09:09 -07:00
Jarred Sumner
6d842e7dcb Make error message for new URL(invalid) better (#6032)
* Make error message for `new URL(invalid)` better

Thanks to @karlcow https://github.com/WebKit/WebKit/pull/13802

* redact

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-25 16:07:33 -07:00
Colin McDonnell
9d9fcbbdeb Update docs 2023-09-25 15:22:12 -07:00
Vlad
cd09bb0e9b Add fs.statfs{Sync} to missing fs apis (#6030) 2023-09-25 10:55:55 -07:00
axel escalada
bbc70d2b73 Fix create command with template prefixed with @ char #6007 (#6013)
* fix create command with template prefixed with @ char

* add typescript test for create command

* format test
2023-09-25 05:22:47 -07:00
Ai Hoshino
3eca2c7fee fix c-string sentinel (#6026) 2023-09-25 05:19:33 -07:00
Jarred Sumner
af0cb893b5 Add microbenchmark for symbol-based private variables 2023-09-25 03:27:38 -07:00
Jarred Sumner
7027493196 Update nodejs-apis.md 2023-09-25 00:39:53 -07:00
Jarred Sumner
bd4523798f Clarify 2023-09-24 23:47:20 -07:00
Jarred Sumner
6326eb4246 Add buggy note 2023-09-24 21:28:33 -07:00
Jarred Sumner
96411580c1 Do not use removefileat() (#6001)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-24 18:27:55 -07:00
Jarred Sumner
3f463786a5 Correctly fix #5888 (#6000)
* Update our MultiArrayList

* More consistent CI

* Fix serialization issue

* Update bun.lockb

* Update bun.lockb

* fixup

* Fix `Bin{}`

* `bun update` should not cache the manifest

* Make bun install tests more consistent

* This differs by platform evidently

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-24 17:43:59 -07:00
Jeroen van Rensen
43f092807b Update writing.md - Remove duplicate code snippet (#5966) 2023-09-24 08:50:18 -07:00
cyfung1031
b8817ab188 Update README.md (#5989) 2023-09-24 08:49:57 -07:00
asrar
ef7f679edf Fix link to vitejs (#5959) 2023-09-24 08:49:14 -07:00
Jarred Sumner
57010cc448 Avoid using std.net.Address.parse (#5950)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-24 03:17:19 -07:00
Jarred Sumner
b6a4161cc5 Fixes #5985 (#5986)
* Fixes #5985

* Update confirm-fixture.js

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-24 03:16:51 -07:00
Ai Hoshino
a5908e9f27 fix(lockfile): ensure all bytes of union are initialized before serialization. (#5957) 2023-09-23 20:09:45 -07:00
Moritz Eck
72f9017b21 docs: update link to templates in remix guide (#5965) 2023-09-23 09:56:37 -07:00
Sony AK
93f1d91083 Update installation.md (#5968)
* Update installation.md

Adding notes for users that currently use canary version and want to  switch back to stable version.

* Upadte

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-23 09:56:03 -07:00
Jarred Sumner
ec0e931e9f Bump! 2023-09-22 21:26:59 -07:00
Jarred Sumner
a229cfd3c6 Make this function inline 2023-09-22 21:26:35 -07:00
Dylan Conway
966b636e5d isBinary (#5944) 2023-09-22 19:48:36 -07:00
Dylan Conway
ee93f1b88c [install] fix GitHub dependency bugs (#5941)
* handle branches with slashes

* handle empty repo string
2023-09-22 18:41:55 -07:00
Colin McDonnell
ffd21e98e7 Remove bun dev stuff from create_command (#5939) 2023-09-22 18:41:05 -07:00
Kilian von Pflugk
a3db02832e use the correct channel name for feedback (#5899) 2023-09-22 18:40:37 -07:00
Ai Hoshino
1445775d64 fix(runtime): exclude unevaluated module in require.cache (#5903)
Close: #5898
2023-09-22 18:40:06 -07:00
Colin McDonnell
feefaf00d7 Update workspaces.md 2023-09-22 16:42:23 -07:00
dave caruso
25e69c71e7 Implement module.parent (#5889)
* Make module.parent work

* yay

* oops

* yay
2023-09-21 22:09:55 -07:00
Dylan Conway
9d5459221f fix #5865 (#5890)
* make sure types are the same

* tests
2023-09-21 21:02:34 -07:00
dave caruso
341c1c1804 disable child_process execArgv + fix crash in cli parsing (#5843)
* stuff

* stuff

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-21 20:37:32 -07:00
Colin McDonnell
b218c40a5d Hide env elapsed time when loglevel=info (#5882)
* Hide env elapsed time when loglevel=info

* Updates

* Update

* Fix test
2023-09-21 20:07:25 -07:00
Dylan Conway
09d6e8553b ref and deinit (#5883)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-21 20:02:51 -07:00
Imamuzzaki Abu Salam
0502c134e8 docs: add await to all Bun.build() call (#5885) 2023-09-21 19:08:57 -07:00
Jarred Sumner
e34ff61339 Don't use arena in node:fs (#5863)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-21 18:59:01 -07:00
Igor Shapiro
8684a59029 chore(git): ignore .envrc file (#5873) 2023-09-21 18:44:59 -07:00
Liz
b297fabd17 fix: correctly pass the encrypted(bool) property on "Socket" for express.js (#5878)
* fix: correctly pass the encrypted property on "Socket" for express.js

Express relies on this for setting the requests protocol.
Since this is on a dummy object, a property is simply set with the actual value.
Which seams okay as a workaround.

* chore: add generated files

* chore: add test

* refactor: set property directly rather then through a getter
2023-09-21 18:44:05 -07:00
dave caruso
b05e10cd8b fix(node:fs): use the right copyFile constants (#5874) 2023-09-21 18:42:49 -07:00
Ai Hoshino
92a5d845ae chore: Update ZSH completions (#4428) 2023-09-21 17:43:01 -07:00
Colin McDonnell
030407c52e Update completions list 2023-09-21 17:32:19 -07:00
Colin McDonnell
cfc56dafeb Update install docs 2023-09-21 15:17:16 -07:00
Colin McDonnell
b011f94250 Update test script 2023-09-21 12:55:27 -07:00
Colin McDonnell
66cdb077ad Add docs for extending process.env 2023-09-21 12:35:41 -07:00
Dylan Conway
4a1573e007 decorator metadata defaults and rest args 2023-09-21 12:20:53 -07:00
Jarred Sumner
0b4a34bbd6 Fix test failures (#5862)
* Fix test failures

* Fixes #5851

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-21 07:56:44 -07:00
Jarred Sumner
d1e9b33cac On Linux, respect memory limit from cgroups (#5849)
* Implement `process.constrainedMemory()`

* Add a comment

* Handle max

* Missing header

* We can use WTF::ramSize now

* Update WebKit

* Update ZigGlobalObject.cpp

* WebKit

* ✂️

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-21 07:25:18 -07:00
Jarred Sumner
abfc10afeb Revert "feat(encoding): support BOM detection (#5550)"
This reverts commit 5f66b4e729.

This caused test failures in text-encoder. cc @WingLim
2023-09-21 07:10:07 -07:00
Jarred Sumner
a18ef053a4 Don't await plugins 2023-09-21 06:16:31 -07:00
Jarred Sumner
6abc9af472 Add another test 2023-09-21 06:04:58 -07:00
Jarred Sumner
e1cf08b3a6 Fixes #5859 2023-09-21 05:48:40 -07:00
Jarred Sumner
28f3453466 Regenerate builtins 2023-09-21 02:59:50 -07:00
Aaron Dewes
9c45487763 Fix make jsc on Linux (#4779)
* Fix `make jsc` on Linux

Previously, it failed with `/usr/bin/bash: Line 3: -DUSE_BUN_JSC_ADDITIONS=ON: Command not found`.

* Update Makefile

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-21 02:10:54 -07:00
Jarred Sumner
01d2cb5d98 Prettier 2023-09-21 00:51:48 -07:00
Liz
2664dfad9b fix: add check to sqlite extension loading logic (#5773)
The sqlite3 logic to dynamically load extensions can be disabled to save space,
which macos does by default.
sqlite3 provides a api to check for these compile time settings at runtime,
we can use that to throw a js error rather then crashing.
It is worth noting though that the api to check for these settings at runtime
itself can be disabled through SQLITE_OMIT_COMPILEOPTION_DIAGS but this seams
to be a edge case.
2023-09-20 23:43:21 -07:00
Jibran Kalia
e0c5debc57 fix(console.log): change default depth from 8 to 2 (#5839)
This make it as the same default depth in Node.
Source: 480ab8c3a4/doc/api/console.md (L285)
2023-09-20 23:42:44 -07:00
Jarred Sumner
e160223627 In http client, use .toOwnedSlice() instead of potentially re-using the WTFString here 2023-09-20 23:40:42 -07:00
Ai Hoshino
b00588e98c fix(fetch): fix redirect in relative path location. (#5781)
* fix(fetch): fix redirect in relative path location.

* fix utf-8 encoding

* use server.reload

* check buf size

* add RedirectURLTooLong test
2023-09-20 23:34:00 -07:00
dave caruso
ac19c7c62e remove /test.js and git ignore it - sorry 2023-09-20 20:30:15 -07:00
saurabh
539eec85db docs(project): development fix Arch install-dependencies command (#5270)
sudo is required to run pacman if not root user
2023-09-20 20:11:13 -07:00
dave caruso
b7951511a3 fix(run): interpret extensionless files as typescript (#5711)
* test

* gadsgsagdsa

* add better err msg

* r

* oops

* ok
2023-09-20 19:48:46 -07:00
Ciro Spaciari
b65862e23b fix(ffi) fix size limit for dlopen (#5516)
* fix size limit

* 63

* throw error

* ffi.test.js

* add macos tests

* oops
2023-09-20 18:50:10 -07:00
WingLim
5f66b4e729 feat(encoding): support BOM detection (#5550)
* fix(encoding): export `getIgnoreBOM`

* feat(encoding): support ignoreBOM

* fix(encoding): not replace BOM to 0xFFFD

* chore: use strict equal
2023-09-20 18:44:05 -07:00
Ai Hoshino
7319142fd8 feat(node:dns): implement dns.lookupService (#5613)
* feat(node:dns): implement dns.lookupService
Close: #4347

* fix flags

* add `getSockaddr`

* fix sockaddr size

* flaky test
2023-09-20 18:43:08 -07:00
dave caruso
365fc0d39d implement Module.prototype._compile (#5840) 2023-09-20 18:31:57 -07:00
dave caruso
34d191be67 feat(runtime): implement console._stdout (#5842)
* implement console._stdout

* nonenum
2023-09-20 18:28:07 -07:00
Colin McDonnell
5c6d7760a5 Improve types for test.each, describe.each (#5838)
* Improve types for each

* more

* remove
2023-09-20 17:43:08 -07:00
Ashcon Partovi
3c7b9353e1 Fix rendering of bun.lockb in vscode extension 2023-09-20 17:39:33 -07:00
Ashcon Partovi
64a717ab33 Run bun fmt 2023-09-20 17:24:09 -07:00
Colin McDonnell
bbff5b7735 Update quickstart 2023-09-20 16:32:51 -07:00
Colin McDonnell
2e06dbaffe Update prisma guide 2023-09-20 15:42:03 -07:00
Colin McDonnell
19151bb1d2 Update env doc 2023-09-20 13:04:03 -07:00
Colin McDonnell
f8343f25b8 Clarify hot mode 2023-09-20 13:04:02 -07:00
Jonah Snider
67defd95af [bun install] Add -E as alias of --exact (#5104)
* [bun install] Add `-E` as alias of `--exact`

* Add test for -E flag
2023-09-20 11:14:55 -07:00
Lucas Coratger
aa3355dc82 feat: switch disableTelemetry to bunfig (#5690)
* feat: switch disableTelemetry to bunfig

* feat: zig fmt

* revert: the env variable and invert the logic of telemetry

---------

Co-authored-by: MrPalixir <73360179+MrPalixir@users.noreply.github.com>
2023-09-20 10:13:31 -07:00
LongYinan
8c612adcdb Treat undefined value as empty in expect.toThrow (#5788)
Fix: https://github.com/napi-rs/napi-rs/blob/main/examples/napi/__tests__/test.framework.js#L16-L19
2023-09-20 10:11:41 -07:00
JeremyFunk
711a2bcdd1 Fix various bugs in vscode extension (#5772)
* Fix bugs

* Fix bugs

* Revert "Fix bugs"

This reverts commit 608639eb22.
2023-09-20 10:09:51 -07:00
Dylan Conway
689b28455c add emitDecoratorMetadata (#5777)
* some progess

* needs more tests

* make tests easier to debug

* get metadata for constructor arg decorators

* fix some things

* merge `emitDecoratorMetadata` option

* remove `^`

* bundler tests and get option from tsconfig earlier

* remove spaces

* fix tests
2023-09-20 08:10:03 -07:00
Ai Hoshino
4439f16155 fix(doc): correct server.reload (#5799) 2023-09-20 08:08:11 -07:00
Jarred Sumner
ff7f642099 Call Error.prepareStackTrace on new Error().stack (#5802)
* Always call `Error.prepareStackTrace`

* Support node:vm

* Remove this

* Handle more cases

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-20 05:52:59 -07:00
Jarred Sumner
1456c72648 Fixes #5800
Fixes #5800
2023-09-20 04:33:38 -07:00
Jarred Sumner
5d09a06100 Fix path used in bunx (#5785)
* Fix path used in bunx

* Add test

* Use a different package

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-20 01:00:29 -07:00
ggobbe
4a0eb19038 Fix RedirectURLTooLong errors (#5786)
The URL to download the manifest for Artifact Registry in Google
is larger than 4092 bytes.

cf. issue #4748
2023-09-20 00:18:47 -07:00
Jarred Sumner
edee1e3d04 Show when a newer version is available in the install screen (#5780)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 23:03:11 -07:00
Colin McDonnell
e2fb524993 Fix broken links 2023-09-19 22:42:54 -07:00
Sanyam Kamat
ee33d5ced4 docs: add Qwik guide (#4810) 2023-09-19 21:54:45 -07:00
h2210316651
53fd9ff4bf Updated modules.md to address issue #5420 (#5456)
* Update modules.md

Updated docs to address `The ES modules aren't always asynchronous. #5420` Issue. 
- Included an elaborate explanation citing the difference between CommonJS and ES Modules, 
- Added a summary

* Tweaks

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-19 21:39:22 -07:00
Ahmad Addel
e3558b626c add warning to Ensure correct placement of the '--watch' flag (#5447)
* Update run.md

* remove the wrong command example

* Tweak

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-19 21:34:26 -07:00
Jarred Sumner
5defdf3e28 Fixes #5769 (#5775)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 18:16:51 -07:00
Ciro Spaciari
f8d7f50cdb some fix (#5762) 2023-09-19 17:20:50 -07:00
WingLim
ddb1189b2d fix(cli): bun pm cache rm command not work (#4571)
* fix(cli): rm arg is in positionals[1]

* chore(cli): add cache remove test

* chore: remvoe unnecessary join

* chore: run formatter

---------

Co-authored-by: dave caruso <me@paperdave.net>
2023-09-19 16:54:54 -07:00
Colin McDonnell
4fce34854b Doc updates (#5759)
* WIP

* WIP
2023-09-19 16:31:38 -07:00
Colin McDonnell
615beee1ae More improvements to azure guide 2023-09-19 13:48:59 -07:00
Colin McDonnell
ef98a1b761 Improve formatting again 2023-09-19 13:38:00 -07:00
sum117
8709fd7855 docs(development): typo which would lead to wrong llvm installation (#5513) 2023-09-19 13:35:37 -07:00
Colin McDonnell
ebc7b037ed Update azure guide 2023-09-19 13:31:31 -07:00
Weyert de Boer
f4e7f6db7c docs: update node compability (#5562) 2023-09-19 13:26:50 -07:00
Kilian von Pflugk
f6eaf4bc78 remind users of the latest version (#5597)
Reduce Bug reports for fixed issues.
2023-09-19 13:26:23 -07:00
Andrey Gurtovoy
fc14902f73 Added react installation to react.md (#5620)
* Update react.md

Added install react part

* Updates

* Updates

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-19 13:25:13 -07:00
Brooks Lybrand
d362a8b9ec docs: Update Remix guide (#5702)
* Update Remix guide

* Update callout

* Update docs/guides/ecosystem/remix.md

Co-authored-by: Michael Jackson <michael@jackson.us>

* update

* Add link to remix

---------

Co-authored-by: Michael Jackson <michael@jackson.us>
Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-19 12:39:23 -07:00
Jarred Sumner
8677ae9fb1 Get artifactory to work (#5744)
* Get artifactory to work

* Cleanup url normalization a ltitle more

* Clean up tests

* prettier

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 08:01:47 -07:00
Jarred Sumner
66d490d109 Align fetch() redirect behavior with spec (#5729)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 05:51:05 -07:00
Jarred Sumner
19fc8ecba2 Fixes #3712 (#5730)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 05:50:23 -07:00
Jarred Sumner
ed9e64805f Delete long-broken package which is causing confusion 2023-09-19 04:33:58 -07:00
Jarred Sumner
8ca691693f Delete extremely out of date docs 2023-09-19 04:32:45 -07:00
Jarred Sumner
4b5dcc8a6a Make bun install --verbose more verbose (#5726)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-19 03:58:55 -07:00
Jarred Sumner
d2328285f9 Update azure-artifacts.md 2023-09-19 00:13:52 -07:00
Jarred Sumner
346f8e9c94 Update azure-artifacts.md 2023-09-18 23:52:42 -07:00
Jarred Sumner
b34da183bd Update azure-artifacts.md 2023-09-18 23:50:37 -07:00
Jarred Sumner
db1263662c Update azure-artifacts.md 2023-09-18 23:49:42 -07:00
Jarred Sumner
63afadcb91 Update azure-artifacts.md 2023-09-18 23:46:42 -07:00
Jarred Sumner
8b690aaf0d Update azure-artifacts.md 2023-09-18 23:43:06 -07:00
Jarred Sumner
9b7fb8b0f3 Update azure-artifacts.md 2023-09-18 23:42:34 -07:00
Jarred Sumner
cc54b62fac Encode slashes in package names in the registry manifest request (#5716)
* Encode slashes in package names in the registry manifest request

Co-Authored-By: Max Brosnahan <1177034+gingermusketeer@users.noreply.github.com>

* Update dummy.registry.ts

* Fix tests

* Add guide for Azure Artifacts

* Update azure-artifacts.md

* Update azure-artifacts.md

* Typo

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Max Brosnahan <1177034+gingermusketeer@users.noreply.github.com>
2023-09-18 23:27:02 -07:00
Jarred Sumner
9d3f60d44e Prettier 2023-09-18 21:30:17 -07:00
Rui He
b453ec38d6 add navigator type definition (#5444) 2023-09-18 20:23:18 -07:00
Julian
1b949d4f5a bun run fix missing script error on empty file (#5025)
* Fix empty file not found bug

* Add tests

* fix test

---------

Co-authored-by: Jeremy Funk <jeremy@kombo.dev>
Co-authored-by: dave caruso <me@paperdave.net>
2023-09-18 20:14:32 -07:00
Liz
0647216687 fix: provide empty string to 0 length process environment variables (#5679)
* fix: provide empty string to len 0 process env vars

For process loaded env vars, its a bug to give them the literal value '""'
if the provided length is 0.

* fix: add test and remove unneeded branch

Removes the redundant branch for empty env vars and adds a test for the
process specific case.

* fix: remove empty_string_value

Removes the constant in favor of using the empty values or passing the
literal "".

* style: format env.test.ts
2023-09-18 18:14:29 -07:00
Nithin K Joy
6df837cff1 updated llvm version from 15 to 16 in makefile (#5696) 2023-09-18 17:34:57 -07:00
Liz
c55b2c56a4 fix: remove unneeded branch in toJSONWithBytes (#5684)
This branch resulted in the same the same statement so having the branch,
is not needed
2023-09-18 17:34:39 -07:00
dave caruso
eb1dc7eede fix(runtime/node): Allow new Buffer.alloc() + Upgrade WebKit (#5699)
* make bufferconstructor a static hash table

* chore: Upgrade WebKit to 4d995edbc44062b251be638818edcd88d7d14dd7

* make it constructable now

* fix comment

* yippee

* update CI workflows
2023-09-18 17:33:58 -07:00
Jarred Sumner
79dd196edd Implement node_api_create_external_string_latin1 and node_api_create_external_string_utf16 (#5675)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-18 17:31:26 -07:00
dave caruso
333e217c32 feat(runtime): Implement console.Console (#5448)
* prototype

* asdfg

* It works!

* okay its done now fr

* self review

* ok

* fix

* fix test

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-18 16:29:56 -07:00
dave caruso
f77df12894 Fix HTTP listen behavior being non-compliant with node (#5689)
* Fix HTTP listen behavior being non-compliant with node

* Add error code for address in use

* use SystemError

---------

Co-authored-by: SuperAuguste <19855629+SuperAuguste@users.noreply.github.com>
2023-09-18 14:57:48 -07:00
Hamed Zakery Miab
8f8ab301b4 change circles for color-blinds (#5594) 2023-09-18 10:31:53 -07:00
Kilian von Pflugk
0800f7017c docs: add missing options from bun init (#5638) 2023-09-18 10:28:57 -07:00
Rauny
8c1c2a0d9d fix(docs): update formatting (#5685) 2023-09-18 10:26:25 -07:00
Ai Hoshino
bab9889601 fix(config): support for registry url without trailing slash (#5662)
* fix(config): support for registry URLs without trailing slash
Close: #4589, #5368

* Update src/bunfig.zig

* Update src/bunfig.zig

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-18 04:32:02 -07:00
Jarred Sumner
b27b04690b In bun:sqlite, make sure we set the number tag correctly when creating the JSValue (#5655)
* Make sure we set the number tag correctly when returning values from SQLite

* Add DOMJIT test

* Update JSSQLStatement.cpp

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-18 03:01:19 -07:00
WingLim
c7de270bbb feat(test): Implement arrayContaining (#5572)
* feat(test): implement `arrayContaining`

* feat: early return when expectedArray is empty

* feat: add test for toEqual

* chore: use `JSC::isArray`

* chore: use getIndex for performance

* fix: use deepEqual

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-18 02:59:09 -07:00
Jibran Kalia
c66d4a724b feat(console.log): Print annonymus when class name is unknown (#5595)
This matches the functionality in Node.
2023-09-18 00:33:07 -07:00
Reagan
9acc081c3a Remove hardcoded references to zig in Makefile (#5660) 2023-09-18 00:32:20 -07:00
Jarred Sumner
630bbfca91 Add a way to disable the GC timer (#5656)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-18 00:11:18 -07:00
Jarred Sumner
57e38e8312 Fix assertion failure in debug builds 2023-09-17 19:41:51 -07:00
Jarred Sumner
ffa88a1f81 Fix make headers 2023-09-17 19:41:33 -07:00
Quentin
2a6fdc2298 Fix a 'app.server' is possibly 'null'. error (#5626) 2023-09-17 18:18:18 -07:00
Jarred Sumner
bca88b67e3 Workaround #5604 (#5615)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-17 17:38:03 -07:00
Cilooth
c6899940ab Added .DS_Store to gitignore-for-init (#5628) 2023-09-17 17:34:35 -07:00
Shinichi Katayama
639a12f59f Fix ZLS commit hash in the document (#5510)
* Fix ZLS commit hash in the document

* Remove ZLS section from the doc
2023-09-17 09:13:30 -07:00
pan93412
25aa51dfc4 fix(install): Return NotSupported when errno == XDEV (#5610) 2023-09-17 09:09:57 -07:00
JeremyFunk
c6b25adeea Implement VSCode tasks for bun (#5529)
* Fix VSCode extension configuration documentation

* Fix config descriptions

* Fix typo

* Implement bun.lockb highlighter

* Update style

* Improve styling

* Revert bunlock change

* Implement bun tasks

* Revert change

* Package json codelens

* Fixes

* Refactor
2023-09-17 08:59:01 -07:00
Jarred Sumner
0404d09cc7 Bump minimum macOS version 2023-09-16 23:45:09 -07:00
Jarred Sumner
f5b37fa0b0 Use a better error label 2023-09-16 22:53:23 -07:00
Ciro Spaciari
4e0c589562 fix(child_process) unref next tick so exit/close event can be fired before application exits (#5481)
* unref next tick so exit callback can be called

* fmt + test

* oops

* add ref_count

* update pending

* comment and fix
2023-09-16 22:44:13 -07:00
WingLim
a098c6e5f6 feat(encoding): TextDecoder support undefined (#5387)
* feat(encoding): TextDecoder support undefined

* chore: format test file
2023-09-16 22:41:52 -07:00
Ciro Spaciari
383d5b55d6 fix(fetch) handle 100 continue (#5496)
* handle 100 continue

* move comment

* cleanup

* fmt
2023-09-16 21:55:41 -07:00
Ethan Steere
80e1f32ca1 Update tsconfig-paths.md (#5593)
Change string:string mapping in the docs to match the expected string:array[string] mapping. 

See: https://www.typescriptlang.org/tsconfig#paths
2023-09-16 21:44:02 -07:00
Vilsol
eca93d4257 docs: fix typo in lockflie nav (#5576)
Looks like someone shifted their hand a bit to the right.

Changes `ytrr` to `tree`
2023-09-16 21:43:43 -07:00
Jarred Sumner
77781e2fa1 Make this error message clearer (#5603)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-16 21:32:52 -07:00
MrPalixir
0a318ecca1 fix: node compatibility with empty path string (#4693)
Co-authored-by: MrPalixir <73360179+MrPalixir@users.noreply.github.com>
2023-09-16 18:51:18 -07:00
Max Karou
08426962fa fix: failing array-buffer.test-d.ts test (#5580) 2023-09-16 12:07:01 -07:00
Max Karou
7f45866d76 fix: ArrayBufferConstructor type signature (#5579) 2023-09-16 11:19:36 -07:00
Bruce Denham
5e6490d905 Update workspaces.md to reflect "workspace:*" syntax (#5555) 2023-09-16 10:21:42 -07:00
Dylan Conway
b651b16fdd webkit upgrade (#5535)
* update files

* Update cold-jsc-start.cpp

* bump webkit
2023-09-16 00:44:07 -07:00
Dylan Conway
caa192480c mark binding 2023-09-15 23:39:36 -07:00
Jarred Sumner
6d8056554e Update build-id 2023-09-15 22:22:39 -07:00
David Hewitt
43c463f078 fix(node/fs.watch): Check first char before trimming event filenames (#5505)
* Add failing test

* fix(node/fs.watch): Don't lose first char in event

* run prettier
2023-09-15 21:21:15 -07:00
David Hewitt
787281ee5e fix(bundler): Add a space before minified require (#5521)
Fixes #5501
2023-09-15 21:19:49 -07:00
Ciro Spaciari
cb057e61ba fix(request) handle undefined/null/empty signal on request (#5503)
* handle undefined/null/empty signal on request

* better approach
2023-09-15 21:19:26 -07:00
Ciro Spaciari
b54e3f3c04 fix(corking) uncork if needed (#5525)
* fix size limit

* uncork if needed instead of terminating

* undo unrelated changes
2023-09-15 21:18:57 -07:00
Sony AK
7f2e40af46 Update development.md (#5531)
Fix to version 16 on docs
2023-09-15 20:28:52 -07:00
Dylan Conway
d976b22c95 Update InternalModuleRegistryConstants.h 2023-09-15 16:00:59 -07:00
Zong
575a85a3fd docs(runtime): fix some typo. (#5451) 2023-09-15 14:10:04 -07:00
JeremyFunk
8eabb4d1d5 Improve rending of lockfiles in VSCode extension (#4652)
* Fix VSCode extension configuration documentation

* Fix config descriptions

* Fix typo

* Implement bun.lockb highlighter

* Update style

* Improve styling

* Revert bunlock change
2023-09-15 13:25:44 -07:00
Jarred Sumner
99a92465f3 Add Permission 2023-09-15 09:54:58 -07:00
Jarred Sumner
37edd5a6e3 Add missing visitors
cc @paperdave
2023-09-15 08:24:35 -07:00
dave caruso
29b22175bf feat(runtime): add process.binding uv/natives/config + make global object properties lazy (#5355)
* binding uv

* we did that

* some more bindings

* fix doc

* fix uv

* yo

* static hash table nonsense <3

* huge refactor to the global object i am not ready for merge conflicts

* it works part 3

* lose

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-15 08:22:06 -07:00
Jarred Sumner
75697890ce Rename this file 2023-09-15 07:10:30 -07:00
Jarred Sumner
7662f99ee0 Update README.md 2023-09-15 07:09:48 -07:00
Jarred Sumner
1e99419127 Set permissions 2023-09-15 07:09:06 -07:00
Jarred Sumner
cd1846a414 Update build-id 2023-09-15 07:04:38 -07:00
Jarred Sumner
a39b0d86a0 Fixes #5465 (#5468)
* Fixes #5465

Fixes #5465

* Update tty.js

* Update InternalModuleRegistryConstants.h

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-15 06:53:39 -07:00
Jarred Sumner
6cc5872765 Fixes #5461 (#5467)
* Fixes #5461

* Update runtime-transpiler.test.ts

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-15 06:04:34 -07:00
Jarred Sumner
898962770e Implement URL.canParse (#5463)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-15 05:36:06 -07:00
Ai Hoshino
7d0db82bb3 fix(proxy): allow empty string http_proxy env. (#5464)
Close: #5380
2023-09-15 05:24:03 -07:00
Jarred Sumner
4b00144211 Revert "decode regex if needed (#5167)"
This reverts commit 32664df254.
2023-09-15 05:07:22 -07:00
Jarred Sumner
92f2d9ab27 Does not fix #4622 (#5452)
* Fixes #4622

* cleanup

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-15 04:23:37 -07:00
Jarred Sumner
56c471a005 Make bun run --silent omit "error: "..." exited with code 1 (#5459)
* Make --silent behave as expected

* Make the "tsconfig.json extends" error a debug level

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-15 04:21:43 -07:00
Jarred Sumner
20f61b2369 Fix test 2023-09-15 04:10:05 -07:00
Jarred Sumner
9168be4f15 Add missing "size" getter to URLSearchParams prototype 2023-09-15 03:50:03 -07:00
Dylan Conway
d26addeca1 dup and close file descriptors (#5341)
* track one shot fds

* dup fd

* skip for rearm on mac

* dup if fd

* cleanup

* force unregister on close

* deinitForceUnregister

* test

* add prompts

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-15 01:39:42 -07:00
Dylan Conway
f84fbd6e3e remove convertToASCIILowercase 2023-09-15 00:45:47 -07:00
Jarred Sumner
f2a8575e4d Reduce log level for loading tsconfig.json extends message 2023-09-15 00:15:22 -07:00
Dylan Conway
29a6ece6c6 next bun.lockb 2023-09-15 00:03:21 -07:00
Dylan Conway
9c44ec1b0d next 2023-09-15 00:02:39 -07:00
Sony AK
819a1fde28 Update docs/quickstart.md (#5425)
* Update quickstart.md

Update quickstart.md

* Update quickstart.md

Update quickstart.md
2023-09-15 00:01:05 -07:00
Colin McDonnell
31fec8f704 Clean up run.md 2023-09-14 23:44:19 -07:00
Jarred Sumner
c5e8271cdc [build] --force on git submodule update 2023-09-14 23:27:37 -07:00
Ciro Spaciari
da7db2230f fix(nitro) fix sourcemaps and JSSink closing (#5422)
* fix JSSink progress on sourcemap checking

* fix sourcemaps

* update JSSink fix

* undo + tests

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-14 23:25:01 -07:00
Dylan Conway
94e9f8bdca fix http set cookie headers (#5428)
* allow multiple set-cookie values

* make it work for `getHeader`

* move `getHeader` to cpp

* remove set-cookie check

* move `setHeader` to cpp

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-14 23:03:20 -07:00
Jarred Sumner
2e6898470e fix dockerfile (#5439)
* fixup docker

* Update Dockerfile

* Update Dockerfile

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-14 22:23:10 -07:00
Dylan Conway
d606958f11 thread 2023-09-14 21:43:58 -07:00
Jarred Sumner
ced69d3818 async-ify all node:fs functions (#5360)
* async all node:fs functions

* draw the rest of the owl

* LLVM & Clang 16

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-14 21:26:37 -07:00
Colin McDonnell
b262b0153a Clean up bunfig.md 2023-09-14 21:25:57 -07:00
Colin McDonnell
75e68e356b Mention dotenv 2023-09-14 21:09:14 -07:00
Colin McDonnell
31691e3898 Fix links 2023-09-14 21:02:52 -07:00
Colin McDonnell
332141a6f2 Rework bunfig docs 2023-09-14 20:54:53 -07:00
Dylan Conway
308237752a v8 date parser tests (#5332)
* Create v8-date-parser.test.js

* one more test

* add permalinks and enable parser in bun

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-14 19:43:11 -07:00
dave caruso
e8d58f24af fix(runtime): emit node:net connect error event vs throw (#5336)
* fix(runtime): emit `node:net` connect error event vs throw

* oops

* finally

* ok

* we are good
2023-09-14 17:30:30 -07:00
Colin McDonnell
07b10bbc16 Clean up trustedDependencies guide 2023-09-14 17:28:11 -07:00
Dylan Conway
969b0cf539 remove tsconfig warning 2023-09-14 17:10:32 -07:00
Nang Chan
23b1276ee2 fix warnings during bun run publish-layer (#5419)
- add missing package @oclif/plugin-plugins to resolved warning: could not find package.json with { type: 'dev',
2023-09-14 15:47:44 -07:00
Colin McDonnell
a983ec713f Improve run.md 2023-09-14 15:30:14 -07:00
DuGlaser
a31d69bf93 fix(docs): Fix the text that bun run --bun is the same as bun (#4647)
* fix(docs): Fix the text that `bun run --bun` is the same as `bun`

* Updates

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-14 15:19:37 -07:00
Dylan Greene
f3fe4508ae docs - Add "workspace:*" to workspace docs. (#5379)
* add workspace:* to docs

* Updates

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-14 15:04:26 -07:00
Colin McDonnell
96a1d5382f Improve docs 2023-09-14 14:51:42 -07:00
Dylan Conway
e923e23270 oops 2023-09-14 14:38:46 -07:00
Dylan Conway
f815ffa467 bump webkit 2023-09-14 14:01:33 -07:00
Chris Boette
6e1472b9f8 Fix typo in HTTPThread name. (#5376) 2023-09-14 09:09:22 -07:00
Jarred Sumner
92e95c86dd Always get latest version when @tag is explicitly passed (#5346) 2023-09-14 00:48:18 -07:00
Nathan Hammond
8ae9aeea6b Remove the ability to configure lockfile. (#5335) 2023-09-13 22:32:03 -07:00
Colin McDonnell
4ebed280dc Fix helptext for bun update 2023-09-13 22:01:31 -07:00
Soheil Nazari
b31d76b03d Update nuxt.md (#4452)
* Update nuxt.md

* --bun

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-13 22:00:31 -07:00
Twan L
0a5e44cd39 Update simple.md (#4881)
I have removed the / before ${server.port} because it its incorrect and I replaced the localhost to ${server.hostname}

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-13 22:00:05 -07:00
kryparnold
49a44eef0f Update nextjs.md (#4905) 2023-09-13 21:59:16 -07:00
Ciro Spaciari
fa2ef0972b fix(Bun.serve) fix buffering edge case (#5152)
* fix buffering clean

* fix resolveMaybeNeedsTrailingSlash and try to fix ci/cd error

* fix resolveMaybeNeedsTrailingSlash and try to fix ci/cd error

* oops

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-13 21:48:30 -07:00
dave caruso
9976e3f528 fix(runtime): make most globals configurable/deletable, allow resuming the console iterator (#5216)
* Fix #5177

* Fix #5175

* make most globals deletable/overridable

* not done

* cool

* a

* done

* fix test

* oops

* yippee
2023-09-13 21:39:36 -07:00
Colin McDonnell
fbafbd3394 Reorganize Intro section 2023-09-13 21:36:35 -07:00
Colin McDonnell
66c0401426 Make TypeScript instructions easier to find 2023-09-13 21:22:41 -07:00
Colin McDonnell
631c826866 Use Bun global 2023-09-13 21:22:41 -07:00
Mordy Tikotzky
088bea026e Fix bug with multiline string in CRLF terminated files (#4893) (#5318)
* Fix bug with multiline string in CRLF terminated files (#4893)

* add test for #4893
2023-09-13 21:05:02 -07:00
dave caruso
503c808929 test (#5244) 2023-09-13 20:54:46 -07:00
Jacques Desmarais
0927624608 fix link to "local template" (#5115) 2023-09-13 20:50:58 -07:00
miccou
cf834964a6 modules documentation didn't have correct import example (#5225) 2023-09-13 20:50:21 -07:00
Colin McDonnell
6ac70a6dd2 Use bun create everywhere 2023-09-13 20:47:36 -07:00
Madhurjya Roy
a8cef7ae75 doc(guides): update sveltekit guide (#5285)
* doc(guides): update sveltekit guide

Use `bun create svelte` instead of `bunx create-svelte`. 

This is to bring the documentation at par with the SvelteKit official doc to [create a project](https://kit.svelte.dev/docs/creating-a-project).

* Update text instructions for sveltekit.md
2023-09-13 20:45:37 -07:00
Colin McDonnell
c99caccdb2 More docs & helptext cleanup (#5229)
* wip

* Flesh out resolution docs

* Polish

* More

* WIP

* WIP

* WIP

* Document --watch
2023-09-13 20:43:39 -07:00
Colin McDonnell
22f14129e5 Fix mock example 2023-09-13 20:42:10 -07:00
Ciro Spaciari
d37602f316 fix(BunFile.slice) fix slice when length is greater than the size (#5186)
* check the limits for file, when slicing

* check eof

* undo test
2023-09-13 19:49:43 -07:00
Patrick Klitzke
cb52556bd1 fix(doc): Add "compilerOptions" to bun-types README.md (#5325)
Reading the documentation on bun-types it was not clear to me that the tsconfig.ts needs to look like this:

```
{
  "compilerOptions": {
    "types": ["bun-types"]
  }
}
```

So i added the "compilerOptions" information.
2023-09-13 19:27:49 -07:00
Ai Hoshino
03d9bcd440 fix(node:dns): fix the crash. (#5200) 2023-09-13 17:43:10 -07:00
Ciro Spaciari
972a6f29cc fix(console.log) fix printing long custom format (#5164)
* avoid overflow

* Update src/bun.js/bindings/exports.zig

* add mongodb inspect test

* bun db test

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-13 17:41:47 -07:00
WingLim
932fa35f99 feat(nodejs): implement os.availableParallelism (#5109)
* feat(nodejs): implement `os.availableParallelism`

* chore: do not throw error as same as node

* refactor: use `navigator.hardwareConcurrency`
2023-09-13 17:41:09 -07:00
Jarred Sumner
9c9f4ed6ad Make --watch instant (#5236)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-13 17:31:59 -07:00
dave caruso
4f8edb825f fix(runtime): require cache should not include unevaluated ESM modules. (#5233) 2023-09-13 16:57:59 -07:00
James Gordo
cb01cb0d4a Fixed api & cli docs typo. (#5262)
* Fixed api & cli docs typo.

* Fix

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-13 16:36:11 -07:00
Steven
64033f11cc chore(docs): include missing links to Node.js APIs (#5281)
These links make it easy to click and jump to another section.
2023-09-13 14:08:28 -07:00
wing
1c570b41bc docs(guide): fix expect assertion example in guide for spyOn (#5294)
Fixes example with `spyOn` and assertions. The example failed because the spied function would be called once but the expectation asserted 0 calls.
2023-09-13 14:08:09 -07:00
Andrew Brown
500bd15fb5 add uninstall instructions (#5311)
it's always good to have uninstall instructions as well as install, and I couldn't find them anywhere else on the site.

IMO, this gives users a little more confidence to try new tools out, as they know it's easily reversible.

I'm not familiar with how to uninstall with Docker, so would appreciate some help there.

We could possibly add a note for "bash" on how to remove Bun from the `$PATH`.
2023-09-13 14:07:43 -07:00
Guilherme J. Tramontina
687e31dc3a docs: update lockfile diff instructions (#5275) 2023-09-13 10:27:32 -07:00
David Hewitt
c3455c0cee fix(node/fetch): Make data URL fetch consistent with node (#5126) 2023-09-13 05:35:39 -07:00
iidebyo
9101774593 avoid inserting extraneous"accept-encoding" header (#5057)
* add no extraneous accept-encoding header test

* ensure fetch honors no decompress opt

* fix format on test/js/node/http/node-http.test.ts
2023-09-13 02:02:25 -07:00
Zong
9a0ea00705 docs(runtime): fix plugins loader extensions typo (#5250) 2023-09-13 02:00:11 -07:00
Gareth Jones
ec6b75ff54 chore: make comment grammatically correct (#5140) 2023-09-13 01:56:19 -07:00
Colin McDonnell
a18e3ff451 Add informative message on 'bun create react' (#5248) 2023-09-13 01:48:42 -07:00
Zong
eeb790a2f1 docs(runtime): fix jsx FragmentFactory output example (#5243) 2023-09-13 01:47:54 -07:00
amt8u
878b473085 file.exists() needs to be awaited to get the value (#5061) 2023-09-13 01:41:18 -07:00
Antonin CLAUZIER
6161c201e1 Update discordjs.md (#5227) 2023-09-13 01:38:17 -07:00
Dylan Conway
32664df254 decode regex if needed (#5167)
* decode regex if non-ascii

* make it comptime

* add test

* use `bun.BabyList(u16)`
2023-09-13 01:26:18 -07:00
Nathan Hammond
15f7bacb8b Correct the configuration file names. (#5234) 2023-09-13 01:19:15 -07:00
Colin McDonnell
473513db7e Update tsconfig.json for bun init 2023-09-12 23:53:28 -07:00
cfal
75b5c71540 js/node/stream.js: call write() callback when encoding is not provided (#4841)
* js/node/stream.js: call write() callback when encoding is not provided

* js/out/InternalModuleRegistryConstants.h: update
2023-09-12 22:21:58 -07:00
Gordon Goldbach
c9c62f37e5 docs: Made bun-types install as dev dependency in example (#5120) 2023-09-12 22:04:39 -07:00
Colin McDonnell
18b521d9b8 Various docs (#5201)
* Updates

* Improve jest guide

* Improve
2023-09-12 21:51:49 -07:00
Southpaw
534fd30dbd Use git's --global flag for lockfile diffs instead of manually modifying config files (#5143) 2023-09-12 21:51:07 -07:00
Jonathan Neal
3b2c0941e4 docs: fix typo in import.meta.resolve (#5146) 2023-09-12 19:14:26 -07:00
Nazeel
8d3829114e Update hot.md (#4990) 2023-09-12 18:54:23 -07:00
Tom Redman
5f9c30b717 Update simple.md (#4997)
Remove errant slash preventing the correct console log
2023-09-12 18:53:55 -07:00
xnacly
c55574b4d3 fix typo and grammar errors (#5046) 2023-09-12 18:53:23 -07:00
mi4uu
2f27e24778 clang and llvm on arch install v16, update to use v15 (#5069) 2023-09-12 18:52:30 -07:00
Diogo Goncalves
b910db74be Add missing full stop on nodejs-apis.md (#5072) 2023-09-12 18:51:15 -07:00
Toby
b37cb98a6e udate README.md (#5127)
update path
2023-09-12 18:50:50 -07:00
Samuel Rigaud
263382103f docs: fix typos (#5151) 2023-09-12 18:50:05 -07:00
Thomas Rupprecht
8777c3f72c fix lifecycle docu (#5159) 2023-09-12 18:49:19 -07:00
Colin McDonnell
996491f719 Clean up Modules doc 2023-09-12 16:54:07 -07:00
Colin McDonnell
12c2da0ebf Create SECURITY.md 2023-09-12 16:53:59 -07:00
Dylan Conway
a3166457d3 Update node-dns.test.js 2023-09-12 16:50:11 -07:00
Mitchell K
b1bd93bffc fix(bun-lambda) Fix API Gateway V1 events and expand on Lambda documentation (#5161)
* Fix issues with using V1 API Gateway events with Bun Lambda Layer.

* Remove aws-lambda as it is not needed
2023-09-12 14:59:19 -07:00
James Gordo
4c113d1866 Fixed Websocket Compression Example. (#5087)
* Passed message variable to ws.send() method.

* Passed message variable to ws.send() method.
2023-09-12 08:30:23 -07:00
ped
f9d2e687f5 Fix typo in http file upload example (#5088) 2023-09-12 08:30:06 -07:00
Jarred Sumner
31aec4ebe3 Fix bug with bun build --compile (#5102)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-12 07:07:07 -07:00
Jarred Sumner
b432006e43 Clean up some edgecases with posix_spawn usage (#5079)
* Check that the pid matches

* Fixup EINTR check

* Remove extra slashes

* fixup

* fixup

* != 0

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-12 06:34:20 -07:00
Alex Lam S.L
015f0a6e9a fix up with prettier (#5092) 2023-09-12 05:53:55 -07:00
David Hewitt
07a6443a80 fix(node/path): Prevent memory corruption in parse (#5083)
* Add failing test for issue #4954

* fix(node/path): Return results with toValueGC
2023-09-12 05:05:00 -07:00
Jarred Sumner
6e4f746ace Fix some bugs blocking Turborepo from using bun run (#5071)
* Clean up some error handling when loading `tsconfig.json`

* [bun run] don't parse tsconfig.json for package.json scripts

* Make this error message better

* Bump

* Don't print build errors twice

* Handle quotes in error messages a little better

* Add a couple tests

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-12 03:35:29 -07:00
Ai Hoshino
b5a3bed7f2 fix(JSC): copy string in toJSStringValueGC (#5067) 2023-09-12 03:08:42 -07:00
Ciro Spaciari
8615b8ad6b add NODE_TLS_REJECT_UNAUTHORIZED (#4829) 2023-09-11 21:52:31 -07:00
Eric Bidelman
4992839232 Update gzip.md (#5041)
typo
2023-09-11 21:47:35 -07:00
Colin McDonnell
03b8e9d5cf fix formatting in sveltekit guide 2023-09-11 20:12:48 -07:00
Ai Hoshino
f267c1d097 fix(path): Fix edge case in path.relative (#4811)
Close: #4789
2023-09-11 17:53:43 -07:00
Ai Hoshino
c4507a5db3 Fix Buffer.from to handle double-byte hex encoding strings (#4933)
Close: #4919
2023-09-11 17:27:12 -07:00
Ciro Spaciari
c9a0ea96cd fix(BunFile) .slice offset on macOS (#4991)
* fix offset

* simplify error
2023-09-11 17:19:43 -07:00
Dylan Conway
ca461f9e83 fix loading env from .env.production and friends (#4630)
* reload conditional vars

* test

* change `get` and `put` methods

* dont clone empty env variables
2023-09-11 17:19:21 -07:00
Colin McDonnell
9c4765f616 Update benchmark readme 2023-09-11 16:53:34 -07:00
Justin "J.R." Hill
e091290748 fix(bun-lambda): Don't drop arguments in console.log(...) (#4992)
Closes #4826
2023-09-11 12:39:56 -07:00
Ben Jervis
350403663e Fix error message typo in js_ast.zig (#4937) 2023-09-11 11:03:45 -07:00
Dylan Conway
895f3824b5 update test 2023-09-11 10:43:33 -07:00
Diogo Goncalves
58e69ef9f4 Remove unnecessary backticks in quickstart doc page (#4927) 2023-09-11 08:54:22 -07:00
Vladimir Pesterev
decad91d24 Fixed inconsistent log messages in the Quickstart guide (#4942)
Looks like it is just a typo and needs to be fixed.

Signed-off-by: Vladimir Pesterev <8786922+pesterev@users.noreply.github.com>
2023-09-11 08:53:54 -07:00
Yonathan Benolol
ea56182c5a Update http.js - Fix Methods Fallback naming (#4948) 2023-09-11 08:51:35 -07:00
Matthew Yu
9d6a8ee79d Fix punctuation (#4870) 2023-09-11 08:50:39 -07:00
fehnomenal
b55b511f68 Make detect-libc package match the upstream api (#4910) 2023-09-11 08:49:57 -07:00
Krzysztof Szala
49b9306dce fix: changes wrong command name in the tests chapter (#4965)
This PR fixes the command name for running tests flagged with `.only`
2023-09-11 08:48:53 -07:00
Krystian Pracuk
2956ed4289 added .idea to .gitignore (#4951) 2023-09-11 08:48:26 -07:00
Jarred Sumner
51d3d43822 Support named imports for json & toml files at runtime (#4783)
* Support named exports in json imports

* Support named imports for `*.json` files

* Remove stale comments

* Don't export arrays as non-default

* Add test for default exports

* Don't break webpack

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-10 23:15:35 -07:00
Jarred Sumner
edea4f095a Fixes #4588 (#4804)
* Fixes #4588

* typo

* fixup

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-09-10 21:40:46 -07:00
Diogo Goncalves
07c88435e0 Replace unnecessary '' wih "` in code snippets (#4792) 2023-09-10 11:34:04 -07:00
Jeroen van Rensen
7121c1d6ab Update modules.md - Explain case-insensitivity (#4782) 2023-09-10 11:33:39 -07:00
Ed Knowles
60dc76676c docs: remove duplicate sentence from debugger (#4807) 2023-09-10 11:33:04 -07:00
toneyzhen
f64b504bae Update todo-tests.md (#4771) 2023-09-10 11:32:31 -07:00
Vyacheslav Kulik
97153c5a5f Add compatibility page link to index.md (#4809)
Add a link to compatibility page (https://bun.sh/docs/runtime/nodejs-apis) to its reference in index.md, so it's easier to reach out to.
2023-09-10 11:30:46 -07:00
Tom Sherman
d48ff53e4e docs: Update Bun.write(path, Response) example to be clear that it writes the body (#4802) 2023-09-10 05:06:25 -07:00
WingLim
afcbed218c fix(bindings): add missing binding (#4682) 2023-09-10 02:58:10 -07:00
Rinku Chaudhari
682406c42c docs: fix spelling (#4763) 2023-09-09 22:40:56 -07:00
Richard
6fe40f383a Fix mongoose ecosystem guid (#4740)
Fix missing method declaration on schema and Schema database name from Kitten to Animal
2023-09-09 19:05:13 -07:00
thunfisch987
e2d327881c fix(docs); typo on Nuxt guide page (#4745) 2023-09-09 19:04:05 -07:00
Robert Soriano
4280f74429 docs: fix wasi-js link (#4741) 2023-09-09 19:03:46 -07:00
Chris Hutchinson
8139a20c9f fix: remove from bun-server.test.ts test case (#4709) 2023-09-09 19:03:28 -07:00
akumarujon
620f6c51ce fix typo (#4639) 2023-09-09 14:46:41 -07:00
Ashcon Partovi
ffe4f561a3 Fix listen() using unix socket if argument is a valid port (#4620)
* Fix listen() using unix socket if argument is a valid port

Fixes #4582

* Add test
2023-09-08 16:27:44 -07:00
Ana Margarida Silva
c896792c37 fix(docs): connect websocket client repeated documentation (#4615) 2023-09-08 14:22:28 -07:00
Colin McDonnell
088491cb59 Add extension guide 2023-09-08 13:49:12 -07:00
xxxhussein
f27ef667c7 Delete docs/ecosystem/buchta.md (#4536)
Delete buchta.md since its development is discontinued by LowByteFox: https://twitter.com/LowByteFox/status/1694025965452636612
2023-09-08 13:21:41 -07:00
Arjunkumar
7d9820d478 Update mongoose.md (#4534) 2023-09-08 13:20:07 -07:00
Ethan Steere
b5da5168bf Update Svelte Kit Docs (#4541)
* Update Svelte Kit Docs

I added some guidance about how to build for production. Still WIP since I would like to add a more complete deployment guide.

* Formatting

---------

Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
2023-09-08 13:19:53 -07:00
rajatdua
61569fab80 docs(template.md): spelling (#4614) 2023-09-08 13:19:33 -07:00
Frederik De Bleser
0887825f54 Fix code typo in transpiler.md (#4604)
There are some extra closing brackets at the end of the `scanImports` example. These cause a syntax error ("Unterminated string literal")
2023-09-08 12:10:17 -07:00
Colin McDonnell
6d02b18680 Remove await plugin 2023-09-08 11:42:27 -07:00
Vitor Dino
1b8c6f266f docs: fix --backend options list on cache.md (#4599)
`symlink` wasn’t an item, it appeared the same as `copyfile`
2023-09-08 11:19:29 -07:00
Dan Fabulich
989dd92ea8 Move "Importing CJS from CJS" back out of low-level details section (#4600)
This section appears to have been accidentally moved into the low-level details section in 5424ea3403.

This fixes the example in the low-level details section, because the "Importing CJS from CJS" section is not the example code that the low-level details section is intended to provide.
2023-09-08 11:18:52 -07:00
Colin McDonnell
9e3cabc540 Remove community-templates 2023-09-08 10:55:16 -07:00
Ondrej Brablc
3170cf08ba Make the link to application clickable in the terminal (#4544)
Terminals like iTerm require valid URL to make them clickable. Adding a space to make it valid. Similar problem is on https://bun.sh/, where protocol is missing.
2023-09-08 09:33:35 -07:00
Samual Norman
182d3f1567 Fix Bun.CryptoHasher missing argument in docs (#4585) 2023-09-08 09:32:36 -07:00
Tiramify (A.K. Daniel)
189f0f7c36 Update development.md (#4578) 2023-09-08 09:32:15 -07:00
Ashcon Partovi
a05a1780c1 Fix bun-types 2023-09-08 08:29:59 -07:00
Jarred Sumner
822a00c4d5 Fix a couple important bugs (#4560) 2023-09-07 21:07:00 -08:00
Adam
f6a621f36a Fix typo in sveltekit.md (#4550) 2023-09-07 13:11:09 -07:00
dave caruso
5b9d8b87c4 Bump version to Bun 1.0.0 (#4543)
* hi

* Update Version to 1.0.0

* 2

---------

Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
2023-09-07 10:57:46 -07:00
Colin McDonnell
a7c3bc8a5a Fix markdown 2023-09-07 10:12:52 -07:00
Colin McDonnell
5424ea3403 Doc updates for v1.0 (#4485)
* Remove v0.x messages

* Add windows section to Installatino

* update

* update

* Update

* Comment out windows
2023-09-07 10:09:09 -07:00
dave caruso
4b63ced72d fix(cli): final touches for 1.0 (#4538)
* better

* cli

* remove submodule

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-07 09:04:21 -07:00
Ciro Spaciari
c8883a39a5 fix(fetch) closeAndFail instead of close (#4537)
* closeAndFail instead of close

* use constant

* add some protection

* dont deinit

---------

Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-07 08:34:13 -07:00
dave caruso
36e5a072a9 revert (#4539)
* Revert "remove native events from streams"

This reverts commit e063a47a53.

* finish revert

* remove accidental submodule

* dfghj
2023-09-07 07:45:00 -07:00
dave caruso
57a06745a4 Progress for Next.js (#4468)
* L

* ipc

* asdfghjkl

* dfghjk

* it works!

* types

* patches for next.js

* sdfghj

* wsdfgn,./

* this

* yolo

* okay loser

* asdfghjk

* add some more APIs

* MESS

* sdfghjkl

* remove native events from streams

* stuff

* remove lazy(primordials) test

* debugging

* okay

* less fake extensions object

* fix `Buffer.toString()` args logic

* fix deserialize

* make tests work

* add test for `Buffer.toString` args

* Update server.zig

* remove test

* update test

* Update spawn-streaming-stdin.test.ts

* fix linux build

* Update fs.test.ts

* cli message improvements

* dfshaj

* Fix fs.watch bug maybe?

* remove

---------

Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
2023-09-07 04:58:44 -07:00
Ciro Spaciari
4360ec83b4 feat(fetch) rejectUnauthorized and checkServerIdentity (#4514)
* enable root certs on fetch

* rebase

* fix lookup

* some fixes and improvements

* fmt

* more fixes

* more fixes

* check detached onHandshake

* fix promise case

* fix cert non-Native

* add fetch tls tests

* more one test
2023-09-06 22:23:24 -07:00
Birk Skyum
3b9829f171 Update nodejs compat docs cp/cpSync/watchFile/unwatchFile (#4525) 2023-09-06 14:04:07 -07:00
Ashcon Partovi
849a2cdfae Add bun-types to 'bun fmt' script 2023-09-06 10:03:12 -07:00
Ashcon Partovi
77f1f2480d Add types for watchFile and unwatchFile 2023-09-06 10:02:48 -07:00
Ashcon Partovi
5e074209c6 Add types for cp and cpSync 2023-09-06 09:58:00 -07:00
Ashcon Partovi
0c2675c8d3 Remove issue template for install
It's not used, and use the bug issue instead.
2023-09-06 09:37:39 -07:00
dave caruso
a79440f0c3 fix(runtime): fix events.once not working (#4520) 2023-09-06 07:13:05 -07:00
Dylan Conway
daaac7792c allocate task for ThreadSafeFunction (#4513)
* create thread safe function task

* Update napi.zig

* Update napi.zig
2023-09-06 02:04:00 -07:00
Derrick Farris
7c82dc86ba Update development.md (#4480)
Remove comment about removed `BUN_OVERRIDE_MODULE_PATH` env var
2023-09-05 20:28:39 -07:00
Ciro Spaciari
125880af7d update root certs (#4499) 2023-09-05 20:28:20 -07:00
Dylan Conway
70a5cfe908 fix text decode trim (#4495)
* remove trim

* separate function

* a test

* trim when `stream` is true

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-05 17:53:31 -07:00
Jarred Sumner
1bd5b245b8 Align process.nextTick execution order with Node (#4409)
* Align `process.nextTick` execution order with Node

* some tests

* formatting

* fixups

* fix the test failures

* simplify the logic here

* push it up

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: dave caruso <me@paperdave.net>
2023-09-05 17:52:57 -07:00
dave caruso
acfd028e8f feat(runtime): Implement fs.watchFile (#4467)
* really lame prototype

* uses threads but badly

* it works i guess

* unwatchFile but lame

* it works

* test

* a

* aomitcs

* fix unwatching race condition

* use hasPendingActivity and GC stuff better

* test

* revert this
2023-09-05 17:41:39 -07:00
dave caruso
6f8a393492 fix(node:net): emit close event on connection error (#4336)
* emit close event on connection error

* re-review

* add test
2023-09-05 16:59:40 -07:00
Ciro Spaciari
6e50dd210f fix(fetch) always use readable stream if it is available (#4503)
* always use readable stream if it is available

* use bun sleep

* fix tests

* rm uws dep
2023-09-05 15:22:09 -07:00
Ciro Spaciari
d268097ded fix SSL proxy tunneling on fetch (#4510) 2023-09-05 15:21:34 -07:00
dave caruso
1e998c1bf2 fix(install): ensure all lockfile structs do not have undefined padding (#4401)
* padding sucks

* this assertion is already done elsewhere

* remove test. will be covered alex's pr i believe?

* fix webkit submodule

* fix uws submodule
2023-09-05 14:25:19 -07:00
Alex Lam S.L
bc2b55fdee fix checkout/build failure due to src/deps/uws (#4505) 2023-09-05 19:16:11 +03:00
Dylan Conway
7dae4db52a fix ipv6 localhost fetch (#4498)
* `node` null for localhost getaddrinfo

* more test
2023-09-05 06:12:54 -07:00
Alex Lam S.L
bcab2f9a0e minor rebuild diffs (#4486) 2023-09-05 14:49:07 +03:00
Jason
a85bd5d083 fix dup syscall on Windows (#4496) 2023-09-05 01:33:30 -07:00
Dylan Conway
f73f77d0de no need to chmod (#4490) 2023-09-04 17:16:37 -08:00
Ciro Spaciari
f1afd58338 fix zlib deflate on fetch (#4483)
* fix zlib deflate on fetch

* mention issue on test

* more tests

* oops
2023-09-04 17:37:47 -07:00
Ai Hoshino
5f34c44ec6 chore: fix typo (#4476)
Close: #4377
2023-09-04 12:35:08 -07:00
Ciro Spaciari
2d80f94eda fix(HTMLRewriter) buffer response before transform (#4418)
* html rewriter response buffering

* pipe the data when marked as used

* fix empty response

* add some fetch tests

* deinit parent stream

* fix decompression

* keep byte_reader alive

* update builds

* remove nonsense

* was not nonsense after all

* protect tmp ret value from GC, fix readable strong ref deinit/init

* fmt

* if we detach the stream we cannot update the fetch stream

* detach checking source

* more tests, progress with javascript and Direct sink

* drop support for pure readable stream for now

* more fixes

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-04 12:26:49 -07:00
Dylan Conway
18767906db initialize JSC for macros from cli 2023-09-03 20:49:06 -07:00
Ai Hoshino
f1b109d5dd fix(syscall): fix handling syscall errno (#4461)
* fix(syscall): fix handling syscall errno
Close: #4198

* remove unused code

* add more tests

* remove unused code
2023-09-03 17:30:30 -07:00
dave caruso
5c43744bce workaround a zig bug (#4440) 2023-09-02 01:39:39 -07:00
Karl Böhlmark
db2faf7c5b docs: fix http simple example log statement (#4320)
Co-authored-by: Karl Böhlmark <karl.bohlmark@netinsight.net>
2023-09-01 23:49:50 -07:00
Jorge Jiménez
bd690bb2b5 Fix typo (#4445)
Replace
`key: [Bun.file('./key1.pem'), Bun.file('./key2.pem']`
with
`key: [Bun.file('./key1.pem'), Bun.file('./key2.pem')]`
2023-09-01 23:49:09 -07:00
Dylan Conway
900f38d144 keep export star as (#4451) 2023-09-01 22:32:27 -07:00
Colin McDonnell
4920f458bc bun-vscode 0.0.8 2023-09-01 22:16:54 -07:00
Colin McDonnell
48cf9dddcb Update commands 2023-09-01 21:35:34 -07:00
Dylan Conway
0019073c8a fix Bun.serve with tls and Bun.file (#4450)
* check sendfile ctx

* add test

* undo blob check

* undo undo and add assert
2023-09-01 20:10:54 -07:00
Dylan Conway
45edb7bcf7 exclusive max 2023-09-01 20:09:45 -07:00
Ashcon Partovi
f0f91a2a31 Fix debug console from appears on start 2023-09-01 19:34:57 -07:00
Ashcon Partovi
94a4cda713 Add configuration options to extension 2023-09-01 18:56:25 -07:00
Ashcon Partovi
eeb683d977 Fix run button starting cwd at / 2023-09-01 15:35:14 -07:00
dave caruso
0fd0ad993b fix(runtime): fix dns_resolver crash (#4435)
* fix incorrect c pointer

* format

* lets go

* random other test case fixed

* hanassagi patch

* Update dns_resolver.zig

* Revert "Update dns_resolver.zig"

This reverts commit 53eb338048.

* See if the tests pass

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-09-01 15:27:59 -07:00
Ashcon Partovi
27de8bbf7b Fix background color 2023-09-01 13:55:19 -07:00
Ashcon Partovi
6bdf24c8ef Allow older versions of VSCode 2023-09-01 13:49:52 -07:00
Ashcon Partovi
57caea5ae7 Fix README for extension 2023-09-01 13:40:48 -07:00
Ashcon Partovi
fe3be666bc Update VSCode extension 2023-09-01 13:34:29 -07:00
Ashcon Partovi
2b421be06f Fix breakpoint on entry for extension 2023-09-01 10:19:14 -07:00
Ashcon Partovi
1ff8155c28 Add Bun.canReload event to inspector 2023-09-01 00:33:33 -07:00
Ashcon Partovi
40d749b480 JavaScript Debug Terminal == Bun Terminal 2023-08-31 23:19:04 -07:00
dave caruso
5288178c86 fix(runtime): fs.cp edge cases (#4439)
* yippee

* enable cpSync tests

* much better

* that doesnt actually do anything

* lose
2023-08-31 23:04:19 -07:00
Dylan Conway
6ae4dd808b only set initial debugger breakpoint once (#4441)
* unset `set_breakpoint_on_first_line` on reload

* move to `module_loader.zig`
2023-08-31 23:03:44 -07:00
Ashcon Partovi
b07bb3ce17 Make breakpoints faster in VSCode extension 2023-08-31 21:42:11 -07:00
Julian
59edbe645c bun install correctly join dependency URLs (#4421)
* use WTF to join registry strings

* show dependency error messages, better join error

We actually report errors when enqueuing dependencies now. I also made
the join URLs error message read better. It'd be cleaner to handle it
all in one place, but there's currently no way to propagate the data up.

* starting on registry URL tests

* added more registry URL tests

* [install] prevent optional/peer deps from failing builds

Couldn't get the peer dependency test to work, but the code is there.

* ran prettier

* changed error note to use realname, updated tests

* ran prettier again...
2023-08-31 17:36:03 -07:00
Dylan Conway
fef70f2473 get name if not provided in FormData.append (#4434)
* get file name from blob if not provided

* add test

* another test

* format
2023-08-31 17:33:08 -07:00
Ashcon Partovi
bd7262f037 Fix vscode debug terminal 2023-08-31 00:18:59 -07:00
Jarred Sumner
10c8013ef2 Create cp-r.mjs 2023-08-30 22:18:04 -07:00
Jarred Sumner
82d26dd9bd Add bench 2023-08-30 21:00:44 -07:00
Ai Hoshino
9334fbe9b4 fix(install): resolve semver matching with pre-release tags. (#4412)
Close: #4398
2023-08-30 18:49:09 -07:00
dave caruso
0a5d2a8195 feat(node:fs): add cp/cpSync/promises.cp + async copyFile (#4340)
* half working disaster code

* this

* async copyFile

* .

* its failing symlink tests

* asdfg

* asdf

* hmm

* okay i think ti works

* small edits

* fix test on linux

* i hate atomics / atomics hate me back <3

* add a message in the builtins bundler that 0.8 is needed. it breaks on older versions lol.

* fixed

* rebase
2023-08-30 18:30:06 -07:00
Dylan Conway
89f24e66ff add life cycle scripts to lockfile metahash (#4420)
* add life cycle scripts to lockfile metahash

* Update lockfile.zig
2023-08-30 18:29:08 -07:00
Alex Lam S.L
037463fc48 [install] fix stale root life-cycle script in lockfile (#4411)
fixes #4319
2023-08-30 17:35:28 -07:00
Dylan Conway
04215e2f3a reset tty at exit (#4419) 2023-08-30 16:38:25 -07:00
Alex Lam S.L
c19714aff7 minor rebuild diffs (#4416) 2023-08-30 14:48:30 -07:00
Ciro Spaciari
908018a4df fix(http/https) disable decompress on http/https client (#4399)
* disable decompress on http/https module

* make js again
2023-08-30 13:50:09 -03:00
Jarred Sumner
f24ca39004 Fix bug in util/types.{isGeneratorFunction,isAsyncFunction} 2023-08-30 00:19:39 -07:00
Jarred Sumner
e3dc5b6b4c reset signal handlers in Bun.spawn (#4405)
* see if this fixes it

* We don't need this

* Remove extra flag

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-30 00:16:08 -07:00
Ashcon Partovi
f2553d2454 More support for DAP (#4380)
* Fix reconnect with --watch

* Support setVariable

* Support setExpression

* Support watch variables

* Conditional and hit breakpoints

* Support exceptionInfo

* Support goto and gotoTargets

* Support completions

* Support both a URL and UNIX inspector at the same time

* Fix url

* WIP, add timeouts to figure out issue

* Fix messages being dropped from debugger.ts

* Progress

* Fix breakpoints and ref-event-loop

* More fixes

* Fix exit

* Make hovers better

* Fix --hot
2023-08-29 23:44:39 -07:00
Jarred Sumner
c028b206bc Fix assertion failure in spawn-related tests (#4400)
* Clean up some of the event loop code

* Support timeouts

* Defer freeing FilePoll

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-29 21:17:56 -07:00
dave caruso
a846852818 fix(node-fetch): use stream.Readable instead of web streams (#4394)
* fix blobFrom

* fix(node-fetch): use stream.Readable instead of web streams

* uncomment

* comment why
2023-08-29 19:45:16 -07:00
Ai Hoshino
3f4bc625ff parse unix socket path param in http.server (#4390) 2023-08-29 19:39:12 -07:00
Jarred Sumner
5d84ef7780 Rename uws_event_loop to event_loop_handle 2023-08-29 15:31:06 -07:00
Jarred Sumner
a77ed151af [git] Normalize line endings 2023-08-29 15:30:07 -07:00
Jarred Sumner
cf151a256c Enforce unix line endings in git 2023-08-29 15:29:09 -07:00
Dylan Conway
de58e9d583 emit open and call close callback (#4384) 2023-08-29 09:44:45 -07:00
Dylan Conway
07d8623976 fix #4356 (#4386) 2023-08-29 01:49:12 -07:00
Ai Hoshino
c53372c9f3 feat(node:dns): implement dns.reverse. (#4332)
* feat(node:dns): implement `dns.reverse`.
Close: #4299

* fix dns reverse for ipv6

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-28 20:10:33 -07:00
Dylan Conway
d1c2d6b25c use options.fd if provided for fs.Read/WriteStream (#4378)
* use `options.fd` over path

* tests

* fix `@clack/prompts`

* == null
2023-08-28 20:08:08 -07:00
Colin McDonnell
a2aad40171 docs: use table tag 2023-08-28 13:05:23 -07:00
Colin McDonnell
177e02b304 docs: hot reloading with Bun.serve 2023-08-28 12:55:22 -07:00
Colin McDonnell
726f8aa3ef Update nuxi output 2023-08-28 12:24:51 -07:00
Prabhat Sachdeva
d3626287bd remove uws from .gitmodules (#4374) 2023-08-28 10:39:45 -07:00
Jarred Sumner
a2ddfe6913 Bring uSockets & uWebSockets forks into Bun's repository (#4372)
* Move uWebSockets and uSockets forks into Bun's repository

* Update Makefile

* Update settings.json

* Update libuwsockets.cpp

* Remove backends we won't be using

* Update bindings.cpp

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-28 08:38:30 -07:00
Ciro Spaciari
6e4a1f2918 make pending_response and metdata life cycle more clear and make fetch more reliable (#4331)
* make pending_response and metdata life cycle more clear

* typo

* WIP: memory investigation

* check zlib and fix zlib

* use state allocator for metadata

* remove postBodyProcess

* undo some test things

* fix race condition

* fix removing compressed header

* some extra checks

* remove arenas on zlib and comment repoter.assert because of toOwnedSliceZ

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-28 07:21:46 -07:00
Jarred Sumner
ebfaa682f7 More renaming 2023-08-28 04:53:51 -07:00
Jarred Sumner
277e5c0b77 mv src/bun.js/node/syscall.zig -> src/sys.zig 2023-08-28 04:53:18 -07:00
Jarred Sumner
e2a17344dc just kernel32 things (#4354)
* just kernel32 things

* more

* Update linux_c.zig

* Update windows_c.zig

* Add workaround

Workaround https://github.com/ziglang/zig/issues/16980

* Rename http.zig to bun_dev_http_server.zig

* Rename usages

* more

* more

* more

* thanks tigerbeetle

* Rename `JSC.Node.Syscall` -> `bun.sys`

* more

* woops

* more!

* hmm

* it says there are only 37 errors, but that's not true

* populate argv

* it says 32 errors!

* 24 errors

* fix regular build

* 12 left!

* Still 12 left!

* more

* 2 errors left...

* 1 more error

* Add link to Tigerbeetle

* Fix the remainign error

* Fix test timeout

* Update syscall.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-28 04:39:16 -07:00
Ai Hoshino
efe987e8d1 Fix some edge cases in the env param of spawn. (#4364)
Close: #4362
2023-08-27 23:58:31 -07:00
Jarred Sumner
ed5dc5bbf9 @electroid's dap changes (#4367)
* Rework terminal, launch is still WIP

* Use the proper Terminal profile API

* More changes

* progress

---------

Co-authored-by: Ashcon Partovi <ashcon@partovi.net>
2023-08-27 09:03:15 -07:00
Jarred Sumner
36f9d2291c Workaround zig wasm bug 2023-08-26 21:09:08 -07:00
Jarred Sumner
9e653e610c Update WebKit 2023-08-26 03:10:16 -07:00
Jarred Sumner
f16d729c76 Set the timezone in spawn (#4337)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-26 02:35:10 -07:00
Ashcon Partovi
2a9e967fd1 More improvements to debugger support (#4345)
* More fixes for dap

* More changes

* More changes 2

* More fixes

* Fix debugger.ts

* Bun Terminal
2023-08-26 02:34:25 -07:00
Ai Hoshino
910daeff27 Fix the crash when importing a module that does not exist. (#4348)
Close: #4240
2023-08-26 01:14:40 -07:00
Jarred Sumner
e1dacf88d0 don't get too excited but there are at least hundreds of compiler errors when you run this command 2023-08-25 22:05:02 -07:00
Jarred Sumner
d72763dc29 bump! 2023-08-25 21:54:16 -07:00
Jarred Sumner
d98a93c318 Automatically hot reload Bun.serve() (#4344)
* Automatically hot reload Bun.serve()

* Update doc

* Update example

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-25 21:08:41 -07:00
Colin McDonnell
f70bb2497b Fix link 2023-08-25 12:50:13 -07:00
Colin McDonnell
d62b0c3652 Readability tweaks 2023-08-25 12:47:47 -07:00
Jarred Sumner
21b2d5c3a5 Update executables.md 2023-08-25 04:45:41 -07:00
Jarred Sumner
10815a7d43 Update executables.md 2023-08-25 04:33:54 -07:00
Jarred Sumner
f839640c17 Update executables.md 2023-08-25 04:32:20 -07:00
Jarred Sumner
557e912d9a Fix assertion failure with sourcemaps in multi-threaded transpiler (#4321)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-25 04:00:54 -07:00
Jarred Sumner
1e75a978e5 Skip disabled test 2023-08-25 04:00:23 -07:00
Jarred Sumner
95e8c24db1 Update WebKit 2023-08-25 03:56:44 -07:00
Jarred Sumner
755f41fe2a [Inspector] Get firefox to work 2023-08-25 03:56:39 -07:00
Jarred Sumner
9aabe4eea1 Upgrade peechy 2023-08-25 01:43:25 -07:00
Jarred Sumner
90f3bf2796 Update http.md 2023-08-24 23:05:27 -07:00
Jarred Sumner
16b4bf341a Disable minifying "str".length until https://github.com/oven-sh/bun/issues/4217 is fixed 2023-08-24 23:00:53 -07:00
Ashcon Partovi
1480889205 Improved support for debug-adapter-protocol (#4186)
* Improve support for \`debug-adapter-protocol\`

* More improvements, fix formatting in debug console

* Fix attaching

* Prepare for source maps

* Start of source map support, breakpoints work

* Source map support

* add some package.jsons

* wip

* Update package.json

* More fixes

* Make source maps safer if exception occurs

* Check bun version if it fails

* Fix console.log formatting

* Fix source maps partly

* More source map fixes

* Prepare for extension

* watch mode with dap

* Improve preview code

* Prepare for extension 2

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-24 22:53:34 -07:00
Jarred Sumner
f269432d90 Listen on a unix domain socket with Bun.serve() (#4311)
* Update response.zig

* Comment this out for now

* Support unix domain socket in Bun.serve()

* Add test

* add types

* Update JSFetchHeaders.cpp

* comment this test out

* tls unix web socket serve options

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: dave caruso <me@paperdave.net>
2023-08-24 22:49:58 -07:00
Colin McDonnell
73b3fb7b0f Add guides for test runner (#4308) 2023-08-24 22:28:07 -07:00
Ashcon Partovi
2bcbafe7d3 Fix debugger not updating after reload with --hot 2023-08-24 20:09:32 -07:00
Colin McDonnell
f7f734788c Update tsconfig.base.json 2023-08-24 19:54:03 -07:00
Colin McDonnell
2cd1d59387 Update toml import type test 2023-08-24 19:52:53 -07:00
Colin McDonnell
b70210a005 Use noEmit 2023-08-24 19:51:14 -07:00
Code Hz
b9c2309c8a Remove conflict option in tsconfig-for-init.json (#4284)
fix https://github.com/oven-sh/bun/issues/4283
2023-08-24 19:41:23 -07:00
Jarred Sumner
43c4da8c9a Update build-id 2023-08-24 19:39:54 -07:00
Jarred Sumner
8a48e8bb0b Report extra memory more (#4289)
* Report memory allocated in fetch

* Memory size reporting to `Headers`

* Fixup memory reporting allocator

* Make these tests do more

* cleanup some of this

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-24 19:39:00 -07:00
Dylan Conway
097ae4e982 fix build 2023-08-24 19:05:40 -07:00
Alex Lam S.L
213f5bef9d [install] fix stale life-cycle scripts from lockfile (#4307)
fixes #4269
2023-08-24 17:18:51 -07:00
Alex Lam S.L
e115638cba [install] fix crash when installing package that uses loose semver pre-release (#4302)
- also fix parsing of `1.2.3pre+build`

fixes #4266
2023-08-24 17:17:48 -07:00
Ai Hoshino
6e57556fad Fix(node:http): fix URL formatting when using a proxy. (#4297)
Close: #4295
2023-08-24 17:17:18 -07:00
Ai Hoshino
339d2c7f19 Make the server not crash if an error occurs in dev build. (#4300)
Close: #4298
2023-08-24 17:16:51 -07:00
Jarred Sumner
d2bef4fbea Don't inline require/import errors at runtime (#4306)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-24 17:03:05 -07:00
Jason
19aa9d93de update zig to 0.11.0 (#4233)
* WIP

* backup

* more change

* json related error sovled

* number related issue solved

* revert WriterType changed before

* destroy -> free

* jsonStringify related issues solved

* fix mem.free expected []T or *[_]T, passed [*]const u8

* fix expected []T or *[_]T, passed [*:0]const u8

* fix build script

* fix build script, for real

* replace 0.11.0-dev.4006+bf827d0b5 to 0.12.0-dev.161+6a5463951

* fix build on macOS, COPYFILE.DATA -> COPYFILE_DATA

* fix the last destroy on [*]ptr issue

---------

Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
2023-08-24 16:13:14 -07:00
jhmaster
55eb4ffe8f Update bun-polyfills & bun-wasm (#4246)
* automate Bun.version & revision polyfills

* polyfill Bun.gc

* bun:jsc module initial polyfills

* update peechy schema

* bun-polyfills: fix some project configs

* bun-wasm: lots of fixes

* bun-polyfills: Bun.Transpiler impl.

* revision hash update
2023-08-24 14:39:28 -07:00
Jarred Sumner
a051a6f620 Fix performance regression in reading from the request body (#4291)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-24 14:36:39 -07:00
Jarred Sumner
9c68abdb8d wip (#4282)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-24 01:32:22 -07:00
Jarred Sumner
ad326b7734 [Inspector] Fix bug with sourcemaps including internal metadata bytes 2023-08-23 22:22:55 -07:00
Colin McDonnell
aa08c35c06 Add Debugger docs and a couple guides (#4281)
* Add debugger docs. Add guides.

* Add files
2023-08-23 18:15:21 -07:00
dave caruso
20d42dfaa3 Fix <const T>() => (#4278) 2023-08-23 17:22:54 -07:00
VietnamecDevelopment
3556fa3b1e Update globals.d.ts (#4276) 2023-08-23 16:25:05 -07:00
Code Hz
5e07fd4fbc Fix ffi type (#4265)
* add readonly so it works with as const

* split ffi type infer to args and returns

* add JSCallback to FFITypeToArgsType

* add read functions

* simplify FFITypeOrString

* fix cstring type

* fix pointer type test

* fix readonly

* add unknown handling

* trigger action

* use Parameters

* add read type test

* add other read function to tests
2023-08-23 15:56:46 -07:00
Jarred Sumner
c60385716b Bunch of streams fixes (#4251)
* Update WebKit

* Don't do async hooks things when async hooks are not enabled

* Smarter scheduling of event loop tasks with the http server

* less exciting approach

* Bump WebKit

* Another approach

* Fix body-stream tests

* Fixes #1886

* Fix UAF in fetch body streaming

* Missing from commit

* Fix leak

* Fix the other leak

* Fix test

* Fix crash

* missing duperef

* Make this code clearer

* Ignore empty chunks

* Fixes #3969

* Delete flaky test

* Update bun-linux-build.yml

* Fix memory issue

* fix result body, and .done status before the last callback, dont touch headers after sent once

* refactor HTTPClientResult

* less flasky corrupted test

* oops

* fix mutex invalid state

* fix onProgressUpdate deinit/unlock

* fix onProgressUpdate deinit/unlock

* oops

* remove verbose

* fix posible null use

* avoid http null

* metadata can still be used onReject after toResponse

* dont leak task.http

* fix flask tests

* less flask close tests

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: cirospaciari <ciro.spaciari@gmail.com>
2023-08-23 14:05:05 -07:00
Quentin
f3266ff436 docs: remove broken DNS link which is also not present in the official docs (#4268) 2023-08-23 10:36:26 -07:00
xxxhussein
b01764b31e Fix more types. (#4273) 2023-08-23 10:35:51 -07:00
Jozef Steinhübl
851763174e ask for bun --revision instead bun -v (#4256) 2023-08-23 00:42:33 -07:00
dave caruso
8518fbb573 fix yield (#4264) 2023-08-22 21:54:59 -07:00
Colin McDonnell
d86084dd8e Fix Bun.inspect types 2023-08-22 14:28:01 -07:00
dave caruso
52802a4c55 fix fsevents and stub for qwikcity (#4247)
* fix test

* ok

* cm

* EE

* remove the hack we didnt need
2023-08-21 23:39:56 -07:00
Dylan Conway
44e4d5852a fix stdin stream unref and resuming (#4250)
* fix stream unref and resuming stream

* fix `child-process-stdio` test
2023-08-21 23:39:41 -07:00
Colin McDonnell
3a45f2c71b Docs and types for v0.8.0 (#4199)
* Improve test documentation

* Update nodejs compat docs with tty

* Add debugger guide

* Document Bun.inspect.custom, improve bun test nav

* Address reviews

* Update Bun.file types

* Add Nuxt guide

* Add tty types
2023-08-21 21:34:03 -07:00
Jarred Sumner
9eeb7bdbff Bun v0.8 2023-08-21 21:26:45 -07:00
Jarred Sumner
ed14b64e65 Make the code generator less duplicative 2023-08-21 21:24:49 -07:00
Jarred Sumner
bca1bcf29c import errors have code set to ERR_MODULE_NOT_FOUND and require errors have code set to MODULE_NOT_FOUND (#4244)
* ResolveMessage

* Fix it

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-21 21:11:27 -07:00
Ciro Spaciari
9027484ae1 fetch(stream) add stream support for compressed and uncompressed data (#4127)
* streams non compressed data in 64kb chunks (at least)

* fmt

* wip remove pause

* fix default streaming and buffering

* fix atomic lags

* fix size

* make chunked encoding work again (WIP streaming chunked)

* WIP: chunked encoding streaming

* fix end of streamings

* working streaming + compression

* add fixes + tests

* fmt + fix proxy

* fix oopsies

* codegen after merge

* fmt + fixes

* more fixes

* more fixes and logs

* avoid double free

* check empty before pop

* check empty on pop

* fix copy to real when complete

* remove unnecessary logs

* better has_schedule_callback swap, body locked size helper, remove isEmpty from unbounded_queue pop

* fix response ref, fix body_size

* add deflate support, fix error throw, add more tests

* codegen after merge

* remove logs, add connection close test

* fix macOS build

* fix redirect error option

* make body_size more clear

* support new Reponse(response)

* toString DOMWrapper objects properly instead of supporting response in Response constructor

* ignore headers with no name, add more tests

* oops

* handle transform with fetch

* add gz image stream test

* remove duplicate test

* fix missing chunk on macOS under pressure

* oops include all OS

* some fixes

* compare buffers instead of sizes

* refactor err.err and protect it
2023-08-21 20:30:34 -07:00
dave caruso
91eacade97 Fix inquirer (#4245) 2023-08-21 19:32:41 -07:00
Jarred Sumner
6a02edef5d Update module_loader.zig 2023-08-21 19:04:18 -07:00
Ai Hoshino
a61953bbfd Fix(bundler): allow generating exe file in nested path. (#4226)
* Fix(bundler): allow generating binary file in nested path.
Close: #4195

* Add read flag for fd.

* refactor
2023-08-21 18:22:37 -07:00
Colin McDonnell
f629365cb7 Fix typo 2023-08-21 17:48:48 -07:00
dave caruso
cdace9bffb Fix crypto.EC constructor (#4242)
* Fix EC constructor

* make js
2023-08-21 16:40:25 -07:00
dave caruso
664119841a Implement napi_ref_threadsafe_function (#4156)
* Implement napi_ref_threadsafe_function

* work on this

* i hate event loops

* little better

* clean
2023-08-21 16:26:07 -07:00
dave caruso
397182b400 feat: Implement Bun.inspect.custom (#4243)
* add Bun.inspect.custom

* test

* Add Types
2023-08-21 16:25:37 -07:00
Jarred Sumner
752e59f23c Fixes #4089 (#4105)
* Fixes #4089

* Update bindings.cpp

* address PR feedback

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-21 16:25:23 -07:00
Jarred Sumner
def5a85d90 40x faster .toString('hex') (#4237)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-21 08:31:17 -07:00
Jarred Sumner
1b8f569792 Fix memory leak in buffer.toString("hex") (#4235)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-21 03:31:33 -07:00
xxxhussein
183b818462 Update README.md (#4232)
Fix typo in README.md
2023-08-21 01:32:08 -07:00
Jarred Sumner
9cf868fef4 Add missing header change 2023-08-21 01:30:45 -07:00
Jarred Sumner
ed803f7d1c Add LazyProperty 2023-08-21 01:30:13 -07:00
Jarred Sumner
c13a27121c Fix BigIntStats generated class
cc @paperdave, code generator script misses a constructor decl when this isn't true
2023-08-21 01:30:01 -07:00
Jarred Sumner
8c23e77e99 Regenerate 2023-08-21 01:29:15 -07:00
Jarred Sumner
c99a9ba33a Implement File 2023-08-21 01:29:06 -07:00
Jarred Sumner
f75b949524 Fixes #1675 (#4230)
* Fixes https://github.com/oven-sh/bun/issues/1675

* Add fallback for Bun.write

* Update blob.zig

* Fix test

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-20 21:29:09 -07:00
Jarred Sumner
3de9ce5f30 Implement --inspect-brk (#4222)
* Implement `--inspect-brk`

* Bump WebKit

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-20 19:34:33 -07:00
Jarred Sumner
65280853ac Fix test failures from 3a9a6c63a (#4231)
cc @Hanaasagi

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-20 19:22:55 -07:00
Ai Hoshino
3a9a6c63ac Fix(bundler): use different alias mappings based on the target. (#4163)
* Fix(bundler): use different alias mappings based on the target.
Close: #3844

* chore: reduce duplicated code.

* chore: split to two separate ComptimeStringMap.
2023-08-20 01:52:17 -07:00
Jarred Sumner
360acf5a80 Update BunDebugger.cpp 2023-08-19 22:11:48 -07:00
Jarred Sumner
d432dad666 Introduce bun --inspect-wait
This waits for the inspector to connect before beginning execution
2023-08-19 22:07:35 -07:00
Jarred Sumner
eec5bfb23a misc non-posix fixes 2023-08-19 20:14:29 -07:00
Jarred Sumner
53c755467b Update lockfile.md 2023-08-19 19:10:20 -07:00
Jarred Sumner
039404800f Update lockfile.md 2023-08-19 19:09:10 -07:00
Jarred Sumner
3c4b689050 Update lockfile.md 2023-08-19 19:08:17 -07:00
Omar
394dd86797 Update Dockerfile-distroless (#4210) 2023-08-19 18:48:59 -07:00
Jarred Sumner
62bde005b2 Fix symbol visibility 2023-08-19 18:48:07 -07:00
Jarred Sumner
19054ebc35 [napi] Implement node_api_create_syntax_error, node_api_symbol_for, node_api_throw_syntax_error
These were marked as experimental
2023-08-19 18:34:56 -07:00
Jarred Sumner
507761b463 Fix crash impacting sharp & resvg (#4221)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-19 18:17:16 -07:00
Jarred Sumner
196620183f Fixes #172 (#4220)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-19 17:46:59 -07:00
Jarred Sumner
86ad015147 Add inline sourcemaps when --inspect is enabled (#4213)
* Add inline sourcemaps when --inspect is enabled

* Add some assertions

* Update javascript.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-19 00:20:23 -07:00
Dylan Conway
db09ed15fd tty ReadStream, WriteStream, and readline rawmode (#4179)
* tty `WriteStream`, `ReadStream`, and rawmode

* tests

* refactor prototypes

* fix failing test

* fix test and library usage

* more merge

* fix child_process test

* create pseudo terminal for tty tests

* match node logic

* handle invalid tty

* close descriptors

* move tests to another process

* fix test again

* fix test on linux
2023-08-19 00:11:24 -07:00
Jarred Sumner
bf517d9f8e Fix make headers (again) 2023-08-18 22:14:38 -07:00
Jarred Sumner
e9b684c972 Add HTMLRewriter microbnechmark 2023-08-18 22:14:24 -07:00
Jarred Sumner
e8f0ed3beb Fix make headers 2023-08-18 22:09:27 -07:00
Jarred Sumner
3ca7fde363 prettier 2023-08-18 20:41:54 -07:00
Brúnó Salomon
c2ec47ff32 feat: add self-closing & can-have-content (#4206) 2023-08-18 19:59:23 -07:00
dave caruso
26036a390b Implement BigIntStats (#4208)
* Implement BigIntStats

* changes

* rename test

* comment

* test changes?
2023-08-18 19:59:03 -07:00
Jarred Sumner
943a664224 Remove most C API usages, add debugger pretty printers for Headers, URLSearchParams, FormData, Worker, EventTarget (#4187)
* Add pretty printers for `Headers`, `URLSearchParams`, and `FormData`

* [untested] Add way to code generate getInternalProperties

* bump

* Bump Webkit

* Ref the event loop while loaded

* wip

* checkpoint

* another checkpoint

* The code has been written

* Fixup exports

* Fix all the errors

* Fix bug

* [console.log] Fix bug when printing non-reified types missing values

* Fix loading hash table

* fix plugin

* Fix ref & unref

* auto-unref

* various fixes

* Update bun.zig

* Set toStringTag

* Delete code for macro JSX

* Delete code for `bun dev` HTTP JS

* Move Bun.serve to C++ API

* Delete JSC C API code

* ✂️ 💀 code

* Use JSC C++ for `confirm`, `Crypto`, `prompt`, `alert`

* more dead code

* Update exports.zig

* Use JSC C++ API for FFI

* Remove remaining usages

* Remove remaining usages

* Update ffi.ts

* Update InternalModuleRegistryConstants.h

* draw the rest of the owl

* Update webcore.zig

* bind it

* Fix performance regression in crypto.randomUIUD()

* Update js_parser.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-18 19:58:03 -07:00
Dylan Conway
d0664f8377 fix --bail test 2023-08-18 14:51:55 -07:00
dave caruso
6fd0043f6b Add util.inspect.custom support to util.inspect/Bun.inspect/console.log (#4194)
* start work on util.inspect.custom

* asdf

* finish util inspect custom inspect

* inspect

* fix tests

* revert

* tidy

* revert

* oops

* test

* fix issues
2023-08-17 20:56:52 -07:00
dave caruso
0424fd8f6e Support Nitro (#4098)
* Add formatWithOptions

* tests and tweaks

* adjust

* changes

* hi

* add mark/measure stubs

* stuff

* allow unix absolute paths here

* typo

* rebase

* fix stats
2023-08-17 19:34:05 -07:00
Colin McDonnell
cfbd1373e2 Update Astro guide 2023-08-17 18:38:10 -07:00
dave caruso
f74585ff01 Allow IncomingRequest.req to be overwritten. (#4154)
* Allow IncomingRequest.req to be overwritten.

* add test

* fix test

* yoo
2023-08-17 14:57:43 -07:00
Ai Hoshino
b2f8ef4dff Fix(node:fs): add buffer parameter in fs.read callback. (#4191)
Close: #4178
2023-08-17 14:27:33 -07:00
Brúnó Salomon
b0e76a965d refactor: move HTMLRewriter to c++ bindings (#4193) 2023-08-17 14:25:09 -07:00
Colin McDonnell
cfce38858f Fix description for executables page 2023-08-17 14:07:36 -07:00
Colin McDonnell
540740c129 Add Astro guide (#4110) 2023-08-17 12:51:45 -07:00
xxxhussein
b1356718ad correct guide's bunfig example option (#4192) 2023-08-17 12:13:16 -07:00
Colin McDonnell
b9b50e39d6 Fix broken link 2023-08-16 22:58:36 -07:00
Jarred Sumner
6c3dabd84e Fix leaking .ptr (#4181)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-16 22:10:01 -07:00
Colin McDonnell
d4438e9496 Add solidstart guide (#4182) 2023-08-16 21:30:37 -07:00
Colin McDonnell
56d591b903 Add sveltekit guide (#4180) 2023-08-16 20:52:49 -07:00
Jarred Sumner
0486cea35a bun --inspect (#4158)
* Let the debugger to pause/resume the event loop

* Add initial support for Debug Adapter Protocol

* Add progress

* Update Worker.cpp

* Fix require("console") #3820 (#4073)

* Fix #3820

* Add Module (#4074)

* Set exports to {} in user-constructed CommonJSModuleRecords (#4076)

* feat(bun/test): Implement "toSatisfy" & "toIncludeRepeated" (fwup) (#3651)

* Fix merge issues

* oop

* make codegen

* Fix build issues

---------

Co-authored-by: dave caruso <me@paperdave.net>

* worker tests (#4058)

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* feat(bun:test) add support for test.each() and describe.each() (#4047)

* rename callback to func

* update testscope to handle function arguments

* works

* big cleanup

* works in debug, not release

* fix memory issue & update tests

* catch & str test

* write types for each() & switch tests to ts

* rm & typo

* move some code around & support describe

* review changes

* Fix one of the astro segfaults, also fix bun init version (#4079)

* 4->16

* add assertions

* fix version stuff

* Remove unintentional logs from #4043

* Run prettier

* Update main-worker-file.js

* Update SIMDUTF (#4078)

* Fix constructing buffer from a UTF16 string with the Latin1 encoding. (#4086)

Close: #3914

* Add support for `bun --revision` (#4027)

Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>

* Updates

* Update __global.zig

* remove non-node node-fallbacks (#4082)

* remove non-node node-fallbacks.

* organize the imports

* Fix test

* Sync bun-polyfills branch (#4081)

* bun-polyfills: initial impl. & baseline refactor

* move @types/ws dep from root to /test/

* bun-types: remove ReadableStream.forEach method
(this does not exist, probably added by mistake)

* bun-polyfills: remove extraneous stream utils

* bun-polyfills: add types syncing file

* bun-polyfills: re-arrange global polyfills

* bun-polyfills: fix FileBlob streams types again

* bun-polyfills: sync all of @types/node

* bun-polyfills: typeguard all current polyfills

* bun-polyfills: fix import paths

* bun-polyfills: switch to wasm impl. of farmhash

* bun-polyfills: support default import of bun obj

* bun-polyfills: transpiler placeholder file

* bun-polyfills: loaderless import.meta polyfill

* bun-polyfills: refactor import.meta polyfill

* bun-polyfills: repl entrypoint & todo list index

* bun-types: Add null to return type of Bun.which

* bun-types: match Bun.sha with Bun.hash.SHA512_256

* bun-polyfills: new "repl" package.json script

* bun-polyfills: full refactor of toplevel hashes

* bun-polyfills: these are fixed

* bun-types: NODE_ENV is optional

* bun-polyfills: fix Bun.env types

* bun-types+polyfills: fix HeapSnapshot.version type

* bun-polyfills: fix some web streams type conflicts

* bun-polyfills: update internal FileBlob.slice

* bun-polyfills: fix subproc stdin conversions

* bun-polyfills: better internal fileblob types

* bun-polyfills: try to sync global performance type

* bun-polyfills: working zig wasm polyfills setup

* bun-polyfills: update scripts

* bun-polyfills: fix wasm file location resolution

* bun-polyfills: goodbye farmhash (replaced by zig)

* bun-polyfills: move all Bun.hash polyfills to zig

* bun-polyfills: reimpl. seeding of seeded hashes

* bun-polyfills: impl. undocumented murmur32v2

* bun-polyfills: switch zighash from jsdoc to .d.ts

* bun-types: partial fix of Hash types

* bun-polyfills: documented Hash.murmur32v2

* bun-polyfills: misc updates

* bun-polyfills: enable sourcemaps

* bun-polyfills: handle empty inputs to hash funcs

* bun-types: narrow down hash func types

* bun-polyfills: remove unnecessary bigint casts

* bun-polyfills: impl. Bun.isMainThread

* bun-polyfills: impl. Bun.sleep and fix sleepSync

* bun-polyfills: impl. indexOfLine

* bun-polyfills: impl. Bun.peek.status

* bun-types: fix hashing test

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* Add remix guide

* Fix title

* add util.formatWithOptions (#4090)

* Add formatWithOptions

* tests and tweaks

* adjust

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* bun test: format description of test.each (#4092)

* bun test: format description

* add tests for tests

* only

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* Fixes #4062 (#4106)

* Fixes #4062

* Update encoding.zig

* Use faster C++ impl

* Update wtf-bindings.cpp

* undo

* Fixup

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* zig fmt

* Update remix guide

* fs.zig: create temp files with 0o700, not 0o007 (#4107)

* Handle thundering herd of setInterval (#4109)

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* Fix memory leak in base64url (#4111)

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* run files without extensions (#4113)

* run script without extension

* process stdio write fix

* don't check for trailing slash, var stream

* More lazily initialize these static strings

* Remove assertion

* wip

* Add --inspect flag

* Deprecate loading `node_modules.bun`

* realpath

* regenerate schema

* More

* more

* Update cli.zig

* Debugger JS loads

* have fun

* Most of the code

* Its starting to work.

* more progress

* win some, lose some

* Update dap.ts

* Async Context Tracking

* untested websocket

* Emit Console messages

* Error handling

* errors

* Make profiling work better

* [clap] CLI arguments with optional values ignore positional params

In `bun --inspect foo.js`, `foo.js` should not be the value of `--inspect`. It is a positional parameter. `--inspect=foo`

* Support multiple simultaneous clients, automatically unpause on disconnect

* regenerate

* Update Makefile

* Update WebKit

* Update cli.zig

* Update InternalModuleRegistry+createInternalModuleById.h

* BaseURL

* Update WebKit

* Add web-inspector-bun

* Update build.ts

* formatting, mostly

* Update debugger.ts

* Update InternalModuleRegistryConstants.h

* wrap

* Update test

* Update test

---------

Co-authored-by: Ashcon Partovi <ashcon@partovi.net>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: dave caruso <me@paperdave.net>
Co-authored-by: Tiramify (A.K. Daniel) <94789999+TiranexDev@users.noreply.github.com>
Co-authored-by: Jacques <25390037+jecquas@users.noreply.github.com>
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Ai Hoshino <ambiguous404@gmail.com>
Co-authored-by: Yash Sharma <yashosharma@gmail.com>
Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>
Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
Co-authored-by: jhmaster <32803471+jhmaster2000@users.noreply.github.com>
Co-authored-by: Adhityaa Chandrasekar <github@adtac.in>
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
2023-08-16 19:40:20 -07:00
Ciro Spaciari
2634c64aa3 Fix prisma linux generation (#4150)
* check

* fmt + fix

* fmt

* ops

* add more targets

* more targets

* oops

* update bun lock and prisma

* manually add openssl

* targets on sqlite
2023-08-16 16:12:02 -07:00
Dylan Conway
af23dab833 Create domjit.test.ts (#4173) 2023-08-15 22:13:13 -07:00
Dylan Conway
9efeef2e24 res.then 2023-08-15 21:51:43 -07:00
dave caruso
67a8b75183 fix this page (#4172) 2023-08-15 19:02:46 -07:00
Dylan Conway
bdaa712357 disable domjit for Buffer.alloc 2023-08-15 19:00:02 -07:00
dave caruso
b682e5bf59 Fix event loop issue with Bun.connect (#4157)
* Fix event loop issue with Bun.connect

* sorry

* add test and fix another edge case
2023-08-15 18:09:11 -07:00
Dylan Conway
17c348ed0a fix make headers 2023-08-15 14:56:21 -07:00
Dylan Conway
f05a38757a fix build 2023-08-15 14:33:45 -07:00
Ai Hoshino
553a471cdf chore: fix method name typo (#4162) 2023-08-15 08:11:11 -07:00
dave caruso
1a6a52314f fix importing too long of strings (#4155) 2023-08-15 01:56:37 -07:00
dave caruso
47450ed12c Make builtins' source origin use a valid url (#4152)
* Make source origin use a valid url

* disable minifyWhiteSpace

* the change
2023-08-14 20:28:18 -07:00
Colin McDonnell
eab7b4c3ea Small docs change 2023-08-14 12:08:33 -07:00
dave caruso
0329061f15 fix makefile (#4148) 2023-08-13 20:43:44 -07:00
Revenity
1e96cbfb02 Update Stric guides (#4137) 2023-08-12 20:03:41 -07:00
dave caruso
78defe7a87 Fix worker event loop ref/unref + leak (#4114)
* make more tests pass

* worker changes

* fix some bugs

* remove this

* progress

* uh

* okay

* remove console log

* a

* comment assert for later

* mergable state

* remove test

* remove test
2023-08-12 13:51:03 -07:00
Ai Hoshino
b94433ce86 Fix using uninitialized variable when formatting config_path. (#4129)
Close: #4128
2023-08-11 22:14:08 -07:00
Jarred Sumner
ca26780b27 Deprecate loading node_modules.bun (#4131)
* Deprecate loading `node_modules.bun`

* realpath

* regenerate schema

* More

* more

* Update cli.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-11 22:13:46 -07:00
jhmaster
117cee5ca5 bun-wasm fixes & improvements (#4126)
* automate Bun.version & revision polyfills

* polyfill Bun.gc

* bun:jsc module initial polyfills

* fixes & improvements to bun-wasm
2023-08-11 18:20:21 -07:00
Jarred Sumner
43ebffedcd Support TypeScript's export type * as Foo from 'bar' (#4125)
* [TypeScript] Support `export type * as Foo from 'bar'`

* Update js_parser.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-11 18:06:48 -07:00
Jarred Sumner
ccb9daf7a4 Fix wasm build 2023-08-11 16:24:29 -07:00
Jarred Sumner
c6d3b375b8 async realpath (#4117)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-10 22:15:07 -07:00
Jarred Sumner
4731a460a2 Remove assertion 2023-08-10 19:58:59 -07:00
Jarred Sumner
99af827f25 More lazily initialize these static strings 2023-08-10 19:56:02 -07:00
Dylan Conway
a6ec7fe9b1 don't check for trailing slash, var stream 2023-08-10 19:06:51 -07:00
Dylan Conway
513a6d0df3 run files without extensions (#4113)
* run script without extension

* process stdio write fix
2023-08-10 19:00:06 -07:00
Jarred Sumner
115704b27b Fix memory leak in base64url (#4111)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-10 16:43:19 -07:00
Jarred Sumner
85b81624dc Handle thundering herd of setInterval (#4109)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-10 15:25:52 -07:00
Adhityaa Chandrasekar
cf12d80f5e fs.zig: create temp files with 0o700, not 0o007 (#4107) 2023-08-10 14:00:13 -07:00
Colin McDonnell
58e74eadb5 Update remix guide 2023-08-10 13:54:17 -07:00
Jarred Sumner
be05b93f39 zig fmt 2023-08-10 13:32:37 -07:00
Jarred Sumner
e25833d009 Fixes #4062 (#4106)
* Fixes #4062

* Update encoding.zig

* Use faster C++ impl

* Update wtf-bindings.cpp

* undo

* Fixup

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-10 13:32:04 -07:00
Jacques
e65535cc05 bun test: format description of test.each (#4092)
* bun test: format description

* add tests for tests

* only

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-10 13:29:53 -07:00
dave caruso
74f9fabd01 add util.formatWithOptions (#4090)
* Add formatWithOptions

* tests and tweaks

* adjust

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-10 13:09:03 -07:00
Colin McDonnell
8d207925d7 Fix title 2023-08-10 12:37:14 -07:00
Colin McDonnell
e0569ac47a Add remix guide 2023-08-10 12:36:54 -07:00
jhmaster
40befd8770 Sync bun-polyfills branch (#4081)
* bun-polyfills: initial impl. & baseline refactor

* move @types/ws dep from root to /test/

* bun-types: remove ReadableStream.forEach method
(this does not exist, probably added by mistake)

* bun-polyfills: remove extraneous stream utils

* bun-polyfills: add types syncing file

* bun-polyfills: re-arrange global polyfills

* bun-polyfills: fix FileBlob streams types again

* bun-polyfills: sync all of @types/node

* bun-polyfills: typeguard all current polyfills

* bun-polyfills: fix import paths

* bun-polyfills: switch to wasm impl. of farmhash

* bun-polyfills: support default import of bun obj

* bun-polyfills: transpiler placeholder file

* bun-polyfills: loaderless import.meta polyfill

* bun-polyfills: refactor import.meta polyfill

* bun-polyfills: repl entrypoint & todo list index

* bun-types: Add null to return type of Bun.which

* bun-types: match Bun.sha with Bun.hash.SHA512_256

* bun-polyfills: new "repl" package.json script

* bun-polyfills: full refactor of toplevel hashes

* bun-polyfills: these are fixed

* bun-types: NODE_ENV is optional

* bun-polyfills: fix Bun.env types

* bun-types+polyfills: fix HeapSnapshot.version type

* bun-polyfills: fix some web streams type conflicts

* bun-polyfills: update internal FileBlob.slice

* bun-polyfills: fix subproc stdin conversions

* bun-polyfills: better internal fileblob types

* bun-polyfills: try to sync global performance type

* bun-polyfills: working zig wasm polyfills setup

* bun-polyfills: update scripts

* bun-polyfills: fix wasm file location resolution

* bun-polyfills: goodbye farmhash (replaced by zig)

* bun-polyfills: move all Bun.hash polyfills to zig

* bun-polyfills: reimpl. seeding of seeded hashes

* bun-polyfills: impl. undocumented murmur32v2

* bun-polyfills: switch zighash from jsdoc to .d.ts

* bun-types: partial fix of Hash types

* bun-polyfills: documented Hash.murmur32v2

* bun-polyfills: misc updates

* bun-polyfills: enable sourcemaps

* bun-polyfills: handle empty inputs to hash funcs

* bun-types: narrow down hash func types

* bun-polyfills: remove unnecessary bigint casts

* bun-polyfills: impl. Bun.isMainThread

* bun-polyfills: impl. Bun.sleep and fix sleepSync

* bun-polyfills: impl. indexOfLine

* bun-polyfills: impl. Bun.peek.status

* bun-types: fix hashing test

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-10 12:17:39 -07:00
Jarred Sumner
6718950a39 Fix test 2023-08-10 12:08:05 -07:00
dave caruso
68ac8c12c2 remove non-node node-fallbacks (#4082)
* remove non-node node-fallbacks.

* organize the imports
2023-08-10 11:57:37 -07:00
Jarred Sumner
28d1676d50 Update __global.zig 2023-08-09 16:50:00 -07:00
Colin McDonnell
883c4d8778 Updates 2023-08-09 13:47:32 -07:00
Yash Sharma
8717303a80 Add support for bun --revision (#4027)
Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>
2023-08-09 10:43:04 -07:00
Ai Hoshino
385d440694 Fix constructing buffer from a UTF16 string with the Latin1 encoding. (#4086)
Close: #3914
2023-08-09 09:45:50 -07:00
Jarred Sumner
b3019270c9 Update SIMDUTF (#4078) 2023-08-09 09:14:51 -07:00
Jarred Sumner
5d7c77aab0 Update main-worker-file.js 2023-08-08 23:02:45 -07:00
Jarred Sumner
2c70837ae7 Run prettier 2023-08-08 23:01:03 -07:00
Jarred Sumner
bed7ff7dd0 Remove unintentional logs from #4043 2023-08-08 22:59:40 -07:00
dave caruso
450b066cb8 Fix one of the astro segfaults, also fix bun init version (#4079)
* 4->16

* add assertions

* fix version stuff
2023-08-08 22:27:18 -07:00
Jacques
63f58f4026 feat(bun:test) add support for test.each() and describe.each() (#4047)
* rename callback to func

* update testscope to handle function arguments

* works

* big cleanup

* works in debug, not release

* fix memory issue & update tests

* catch & str test

* write types for each() & switch tests to ts

* rm & typo

* move some code around & support describe

* review changes
2023-08-08 22:25:32 -07:00
dave caruso
009fe18fa2 worker tests (#4058)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2023-08-08 22:19:46 -07:00
Tiramify (A.K. Daniel)
40d00a961e feat(bun/test): Implement "toSatisfy" & "toIncludeRepeated" (fwup) (#3651)
* Fix merge issues

* oop

* make codegen

* Fix build issues

---------

Co-authored-by: dave caruso <me@paperdave.net>
2023-08-08 22:14:30 -07:00
dave caruso
1941dbbd71 Set exports to {} in user-constructed CommonJSModuleRecords (#4076) 2023-08-08 19:37:36 -07:00
dave caruso
320cdcf97e Fix require("console") #3820 (#4073)
* Fix #3820

* Add Module (#4074)
2023-08-08 18:23:33 -07:00
Dylan Conway
454407003e Update Worker.cpp 2023-08-08 15:08:16 -07:00
Ai Hoshino
511f6bdf79 1. Check if the argument is an empty string in path.format. (#4064)
2. Avoid duplicating '/' at the beginning of the path.
Close: #4005
2023-08-08 07:03:18 -07:00
Jarred Sumner
320ee6b6b7 import bun (#4055)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-08 01:42:44 -07:00
Jarred Sumner
38df5b146f Enable Headers.prototype.getSetCookie
Fixes #4057
2023-08-08 01:18:36 -07:00
Jarred Sumner
25c91aecab Remove printf 2023-08-08 00:31:46 -07:00
dave caruso
5497accbdb Add env option for node:worker_threads (#4052)
* almost works

* env stuff

* test fixes

* wtfmove

* ok

* ok

* ref by default

* it now does the ref stuff by default

* cool
2023-08-07 23:58:38 -07:00
jhmaster
182e600eb7 Fix Bun.hash functions (#4054)
* fix `Bun.hash` functions to behave as expected

* update Bun.hash tests
* properly test the returned hash
* include murmur32v2

* update Bun.hash docs

* run fmt
2023-08-07 23:30:05 -07:00
Dylan Conway
cb873cc081 fix worker.ref() 2023-08-07 22:40:32 -07:00
Jarred Sumner
330d19e344 add bun update to help menu 2023-08-07 21:14:42 -07:00
Dylan Conway
2fe6a965af implement fetching data urls (#4000)
* fetch data urls

* `byteSlice`

* deinit slice

* allocate `mime_type` string if needed

* `content_type_allocated` and uncomment tests

* `str_`

* createAtom and slice decode result
2023-08-07 20:15:53 -07:00
Alex Lam S.L
a32097aa9f implement bun update (#4046)
- analogous to `npm update`
- `bun update <name>` to refresh specified package under `package.json`
- `bun update` to refresh all package to latest versions
2023-08-07 20:11:32 -07:00
Dylan Conway
1239c9460a fix iterating headers with set-cookie (#4048)
* fix iterating headers with `set-cookie`

* a test

* move work to `HTTPHeaderMap::set`

* append set-cookie after sort

* remove compare function
2023-08-07 19:32:23 -07:00
Jarred Sumner
f2f227720b WASM test analyzer (#4043)
* wasm

* WASM test scanner

* Update Makefile

* Update Makefile

* Configurable heap limit

* slightly better error

* Update js_parser.zig

* Update path.test.js

* Update node.mjs

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-07 18:51:16 -07:00
Colin McDonnell
0b183beb51 Improve plugin docs 2023-08-07 14:02:43 -07:00
Ai Hoshino
5ce393aab8 Fix path.normalize edge case. (#4042)
Close: #4041
2023-08-07 06:44:04 -07:00
Jarred Sumner
00a907c7de Fixes #4001 (#4034)
* Avoid a utf8 conversion in isDetached

* Fixes #4001

* hit the long url codepath

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 22:49:10 -07:00
Jarred Sumner
0665733b03 Fixes #4029 and fixes #4022 (#4032)
* Fixes #4029 and Fixes #4022

Fixes #4029

Fixes #4022

* Add test for all the fetches

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 20:39:40 -07:00
Jarred Sumner
70c3371b14 Fixes #4010 (#4031)
* Fixes #4010

* Update websocket_http_client.zig

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 19:30:06 -07:00
Jarred Sumner
0b2be88bac Update build-id 2023-08-06 18:07:15 -07:00
Jarred Sumner
8297fb0d2f Bind require.resolve() (#4030)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 18:06:18 -07:00
Jarred Sumner
04925bb94c Fixes #4020 2023-08-06 17:57:44 -07:00
Yash Sharma
3185ca2d95 Running missing scripts exits with non-0 (#4026)
Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>
2023-08-06 17:43:24 -07:00
Alex Lam S.L
b93f304c06 [install] handle bun add of existing peerDependencies correctly (#4028) 2023-08-06 17:42:08 -07:00
Jarred Sumner
a9b3d58353 fix nan 2023-08-06 07:55:22 -07:00
Jarred Sumner
cf48379921 Update coverage.md 2023-08-06 07:48:06 -07:00
Jarred Sumner
f8026df821 Update lol-html 2023-08-06 07:35:29 -07:00
Jarred Sumner
fa4e5d033e Fixes #3129 (#4018)
* Fixes #3129

* add CloseEvent

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 07:35:07 -07:00
Jarred Sumner
1462445419 Code coverage for bun test (#3975)
* WIP code coverage initial commit

* almost works

* one approach

* Code Coverage

* Update WebKit

* it works but is not yet accurate

* skip double ascii check

* wrapper

* it works but i'm not sure what to do about blocks

* hide blocks for now

* Update ZigSourceProvider.cpp

* Create coverage.md

* Update nav.ts

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 06:30:23 -07:00
Ai Hoshino
ecdf2ffa6c feat: impl dns.getServers (#3982)
* feat: impl `dns.getServers`
Close: #3981

* check return value of `ares_inet_ntop`
2023-08-06 06:16:54 -07:00
dave caruso
cd0774cd89 Implement --test-name-pattern (#3998)
* Fix end not being emitted all the time

* stuff

* Implement -t

* Undo js_printer changes

* Undo http changes

* Update InternalModuleRegistryConstants.h

* Delete unrelated test

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-06 06:13:39 -07:00
Ai Hoshino
cf8650937a Fix(cli/init): support subpath entrypoint. (#4002) 2023-08-05 04:48:22 -07:00
dave caruso
3803d39840 Remove Bun.plugin transpiler hook, encourage usage of --preload instead (#3987)
* Remove Bun.plugin transpiler hook

* one missing case
2023-08-05 04:42:30 -07:00
Colin McDonnell
78081cbb40 Support --dev/-D and support more flags on bun install (#3989) 2023-08-04 20:41:16 -07:00
Dylan Conway
6bdee80cfc fix macro string escaping (#3967)
* handle macro escaping

* remove printer

* use `js_lexer.decodeEscapeSequences`
2023-08-04 19:34:09 -07:00
Jarred Sumner
637a38f394 Fixes #3991
Fixes #3991
2023-08-04 18:54:08 -07:00
Alex Lam S.L
190ba6b743 [install] handle workspace:* correctly (#3994)
- parse as path so it works on unversioned workspaces
- fix missed storage of workspace version

fixes #3985
2023-08-04 18:21:13 -07:00
Jarred Sumner
e2c526708a Update import-meta.md 2023-08-04 17:40:11 -07:00
Jarred Sumner
f06f178862 Fix incorrect docs 2023-08-04 17:38:17 -07:00
Alex Lam S.L
8275b8ccd2 [types] fix blob.json() (#3995) 2023-08-04 17:30:38 -07:00
dave caruso
d196aa2de6 FFI typo (#3973)
* FFI typo

* add tests

* it was a newline
2023-08-04 16:08:50 -07:00
Yifei Wang
bdbc21ff7b Buffer.copy should ignore out-of-range sourceEnd (#3971) 2023-08-04 16:08:25 -07:00
Alex Lam S.L
ff315a3bf2 [install] store resolved workspace path in lockfile (#3974)
- resolve cwd consistently
- speed up package diff
- update `test/bun.lockb`

fixes #3685
fixes #3958
2023-08-04 23:28:42 +03:00
Colin McDonnell
63d265780f Fix types (#3963)
* Fix types

* Add ws module

* Add *.toml module declaration

* Clean up
2023-08-04 12:56:34 -07:00
simylein
18a2e18ae1 feat(hot-clear-screen): clear terminal on hot reload (#3976)
* feat(hot-clear-screen): clear terminal on hot reload

* fix(hot-clear-screen): is now I n the correct place

* fix(hot-clear-screen): enable buffering after terminal clear
2023-08-04 04:01:10 -07:00
Jarred Sumner
76dee9312b Add microbenchmark for private properties 2023-08-03 20:14:17 -07:00
Jarred Sumner
9beccc3305 Fix thread safety issue in async fs functions file paths (#3964)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-03 20:09:05 -07:00
Jarred Sumner
717f0a2f42 Make the test better 2023-08-03 18:23:57 -07:00
Jarred Sumner
c2ebdf812b Test for Module.wrap() 2023-08-03 18:22:45 -07:00
Jarred Sumner
9ab2acced6 Implement Module.wrap() 2023-08-03 18:22:45 -07:00
Jarred Sumner
944fcebc2b Update build-id (#3940)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-03 18:15:55 -07:00
Colin McDonnell
9222316101 Update Node.js compat docs 2023-08-03 17:48:18 -07:00
Colin McDonnell
d10860d272 Add type tests 2023-08-03 17:44:18 -07:00
Colin McDonnell
76fa3076cd Add type tests, update modules.md 2023-08-03 17:41:47 -07:00
Colin McDonnell
112030481f More guides and fixing links (#3960)
* More guides

* WIP

* Updates

* Fix
2023-08-03 16:31:05 -07:00
Dylan Conway
9574db355f allow bundling builtins for browser (#3959)
* Update resolver.zig

* bundle resolve error for non-existent builtins

* tests
2023-08-03 16:27:45 -07:00
Ai Hoshino
a4d996c337 Fix edge case in path.relative. (#3952)
Close: #3924
2023-08-03 15:40:37 -07:00
Ashcon Partovi
08cf0d562a Bunch of fixes (#3516)
* Fix #3497

* Fix #3497

* Run prettier

* Fix package.json

* remove this too

* yeah

* Fix missing tests

* Use native for utf-8-validate

* Add module ID names to builtins

* Defer evaluation of ESM & CJS modules until link time

* Use builtin name for exports in plugins

* Add module IDs to builtins

* Update JSC build with new flag

* WebKit upgrade fixes

* Update WebKit

* prettier

* Upgrade WebKit

* bump

* Update once again

* Add visitAdditionalChildren, remove .fill() usage

* Update process.test.js

* Update fs.test.ts

---------

Co-authored-by: dave caruso <me@paperdave.net>
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-03 15:31:55 -07:00
Alex Lam S.L
9a2c3dea88 [install] fix stale bun.lockb on workspaces (#3945)
- handle workspaces under `--production` correctly
- fix `Makefile`
2023-08-03 12:37:29 -07:00
Ai Hoshino
2c9ff9584a Minor optimization: Avoid extra copying when the chunk has only one element. (#3946)
* Optimize the case where there is only one chunk.

* add generated code
2023-08-03 12:35:04 -07:00
Ai Hoshino
30dde62521 Fix the string encoding in path.extname. (#3949)
Close: #3948
2023-08-03 12:34:41 -07:00
Jarred Sumner
928816bef0 SvelteKit compatibility hack 2023-08-02 21:07:39 -07:00
dave caruso
f17655b2eb typo (#3941) 2023-08-02 20:43:39 -07:00
Ashcon Partovi
9f2dcb064d Fix formatting 2023-08-02 19:02:54 -07:00
dave caruso
6c176cb243 Dave/removedeprecation (#3938)
* hide deprecated stuff

* this edit

* hi
2023-08-02 18:57:11 -07:00
dave caruso
e83058cfe7 Fix http write (#3939)
* Fix encoding problem when uploading a binary file.
Close: #3116

* use BufferList

* Finish rebase

---------

Co-authored-by: Hanaasagi <ambiguous404@gmail.com>
2023-08-02 18:56:41 -07:00
dave caruso
aaaaf744a8 Remove module and browser conditions (#3935)
* fix astro compiler

* clean this up

* Update options.zig

---------

Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
2023-08-02 18:46:57 -07:00
Jarred Sumner
207c7eb509 Implement node:worker_threads (#3923)
* Start to implement `worker_threads`

* more

* more!!

* more

* Update bundle_v2.zig

* delete outdated tests

* `receiveMessageOnPort`

* props test and export default

* fix merge

* not implemented tests

* individual imports

* `receiveMessageOnPort` tests

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
2023-08-02 18:12:12 -07:00
Ashcon Partovi
505e77c2d0 Implement node:diagnostics_channel (#3934)
* Add types for `node:async_hooks`

* Implement \`node:diagnostics_channel\`
2023-08-02 18:04:24 -07:00
Jarred Sumner
ef6d25a48f Fix 2023-08-02 17:55:42 -07:00
dave caruso
c2a77cf7ec Rewrite built-in modules to use CommonJS over ESM (#3814)
* stfdsafsd

sadffdsa

stuff

finish commonjs stuff

asdf

not done but work

not done but work

not done yet but this is how far i am

remove files

lol

update built files

uncomment everything in events lol

export default

stuff

* afdsafsd

* its not perfect but almost done

* okay

* cool

* remove temp file

* finish rebase

* revert settings.json

* a

* ch-ch-ch-ch-changes

* okay

* remove this check in release for now

* sxdcfghnjm,

* lkjhgf

* fmt

* filename can be null

* Update NodeModuleModule.h

* weee

* fmt

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-02 16:27:36 -07:00
Jarred Sumner
7656b4b17e Fixes #3931 (#3933)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2023-08-02 16:16:22 -07:00
Ciro Spaciari
25553e62c1 Fix path_watcher (#3920)
* fix callback and onError

* fix main watcher error return

* fixup

* rename to be more clear
2023-08-02 13:00:01 -07:00
Vaughan Rouesnel
4f39d5b54a Update streams.md (#3926) 2023-08-02 12:59:21 -07:00
Ciro Spaciari
d9f162ff95 clean declare structs (#3929) 2023-08-02 12:58:44 -07:00
Dylan Conway
9bbac35fd0 close BroadcastChannel in tests 2023-08-01 19:12:30 -07:00
Ciro Spaciari
eba27540b0 Fix some flaky tests (#3919)
* fix some flask tests

* fix condition on prisma test

* oops
2023-08-01 19:06:08 -07:00
Ciro Spaciari
9cb3f3386e Fix expanding on .env files (#3918)
* fix expanding

* refactor locks

* bound checks

* fix comment

* one more test

* oops
2023-08-01 19:04:05 -07:00
Dylan Conway
6c40d6f2f5 add BroadcastChannel (#3922)
* copy and format

* update `SerializedScriptValue.cpp`

* use `expect().fail()` in message channel tests

* rename `BroadcastChannelIdentifier.h`

* copy registries

* progress and tests

* cleanup

* worker and broadcast channel test

* `BroadcastChannel` ref and unref

* `MessagePort` ref, unref, and hasRef

* remove `SecurityContext.cpp/h`

* add types
2023-08-01 18:40:02 -07:00
Dylan Conway
0ced5520e6 Update worker.test.ts 2023-08-01 18:05:11 -07:00
Jarred Sumner
8aa5892f70 Update types 2023-08-01 16:44:16 -07:00
Jarred Sumner
bd2563ef4c Update JSWorker.cpp 2023-08-01 16:43:48 -07:00
Jarred Sumner
214dc039e0 Implement Worker.prototype.threadId 2023-08-01 16:42:49 -07:00
Emilio Sánchez
e2b39d0807 Fix prisma.md typo (#3921) 2023-08-01 12:03:53 -07:00
Vlad Sirenko
7a8f57c4e5 throw error if node module does not exist (#3913) 2023-07-31 19:41:41 -07:00
Colin McDonnell
8589ba2f17 Update stricjs 2023-07-31 17:07:01 -07:00
Colin McDonnell
dd8fdd87dc Switch table to headings in Nodejs compat page 2023-07-31 16:39:09 -07:00
Colin McDonnell
7b8df184b3 Add env guides 2023-07-31 14:24:08 -07:00
Colin McDonnell
90991da908 Update titles, add Workspaces guide 2023-07-31 13:57:17 -07:00
Colin McDonnell
404b90badc Add ecosystem guides (#3847)
* Add ecosystem guides

* Update titles

* Rename stric

* Add unlink and fetch guides

* Add formdata guide

* Tweak title

* Moar
2023-07-31 12:20:23 -07:00
30513 changed files with 430502 additions and 98113 deletions

8
.editorconfig Normal file
View File

@@ -0,0 +1,8 @@
# https://EditorConfig.org
root = true
[*]
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf

22
.gitattributes vendored
View File

@@ -1,3 +1,22 @@
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.jsx text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.tsx text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.ts text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.c text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.cpp text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.cc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.zig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.rs text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.h text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.mjs text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.mts text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
.vscode/launch.json linguist-generated
src/api/schema.d.ts linguist-generated
fixture.*.c linguist-generated
@@ -5,7 +24,6 @@ src/api/schema.js linguist-generated
src/bun.js/bindings/sqlite/sqlite3.c linguist-vendored
src/bun.js/bindings/sqlite/sqlite3_local.h linguist-vendored
*.lockb binary diff=lockb
*.zig text eol=lf
src/bun.js/bindings/simdutf.cpp linguist-vendored
src/bun.js/bindings/simdutf.h linguist-vendored
@@ -31,3 +49,5 @@ src/bun.js/bindings/ZigGeneratedClasses+lazyStructureHeader.h linguist-generated
src/bun.js/bindings/ZigGeneratedClasses+lazyStructureImpl.h linguist-generated
docs/**/* linguist-documentation
packages/bun-uws/fuzzing/seed-corpus/**/* linguist-generated

View File

@@ -1,35 +0,0 @@
name: 📥 Install Problem
description: Report an issue during install or upgrade
labels: [bug, install]
body:
- type: markdown
attributes:
value: |
Thank you for submitting a bug report. It helps make Bun better.
If you need help or support using Bun, and are not reporting an issue, please
join our [Discord](https://discord.gg/CXdq2DP29u) server, where you can ask questions in the [`#help`](https://discord.gg/32EtH6p7HN) forum.
Please try to include as much information as possible.
- type: input
attributes:
label: What platform is your computer?
description: |
For MacOS and Linux: copy the output of `uname -mprs`
For Windows: copy the output of `"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"` in the PowerShell console
- type: textarea
attributes:
label: How did you attempt to install or upgrade?
description: Please provide the commands you ran to install or upgrade.
validations:
required: true
- type: textarea
attributes:
label: What do you see instead?
description: If possible, please provide text instead of a screenshot.
validations:
required: true
- type: textarea
attributes:
label: Additional information
description: Is there anything else you think we should know?

View File

@@ -10,11 +10,15 @@ body:
If you need help or support using Bun, and are not reporting a bug, please
join our [Discord](https://discord.gg/CXdq2DP29u) server, where you can ask questions in the [`#help`](https://discord.gg/32EtH6p7HN) forum.
Make sure you are running the [latest](https://bun.sh/docs/installation#upgrading) version of Bun.
The bug you are experiencing may already have been fixed.
Please try to include as much information as possible.
- type: input
attributes:
label: What version of Bun is running?
description: Copy the output of `bun -v`
description: Copy the output of `bun --revision`
- type: input
attributes:
label: What platform is your computer?

View File

@@ -8,7 +8,7 @@ body:
Thank you for submitting an idea. It helps make Bun better.
If you want to discuss Bun, or learn how others are using Bun, please
join our [Discord](https://discord.gg/CXdq2DP29u) server, where you can share in the [`#feedback-ideas`](https://discord.gg/unwUnHBNqy) channel.
join our [Discord](https://discord.gg/CXdq2DP29u) server, where you can share in the [`#feedback`](https://discord.gg/unwUnHBNqy) channel.
- type: textarea
attributes:
label: What is the problem this feature would solve?

View File

@@ -1,50 +0,0 @@
name: bun-ecosystem-test
on:
schedule:
- cron: "0 15 * * *" # every day at 7am PST
workflow_dispatch:
inputs:
version:
description: "The version of Bun to run"
required: true
default: "canary"
type: string
jobs:
test:
name: ${{ matrix.tag }}
runs-on: ${{ matrix.os }}
if: github.repository_owner == 'oven-sh'
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
tag: linux-x64
url: linux/x64?avx2=true
- os: ubuntu-latest
tag: linux-x64-baseline
url: linux/x64?baseline=true
# FIXME: runner fails with "No tests found"?
#- os: macos-latest
# tag: darwin-x64
# url: darwin/x64?avx2=true
- os: macos-latest
tag: darwin-x64-baseline
url: darwin/x64?baseline=true
steps:
- id: checkout
name: Checkout
uses: Bhacaz/checkout-files@v2
with:
files: packages/bun-internal-test
- id: setup
name: Setup
uses: oven-sh/setup-bun@v1
with:
bun-download-url: https://bun.sh/download/${{ github.event.inputs.version }}/${{ matrix.url }}
- id: test
name: Test
working-directory: packages/bun-internal-test
run: bun run test:ecosystem

View File

@@ -1,41 +0,0 @@
name: bun-framework-next
on:
push:
paths:
- packages/bun-framework-next/**/*
branches: [main, bun-framework-next-actions]
pull_request:
paths:
- packages/bun-framework-next/**/*
branches: [main]
jobs:
build:
name: lint, test and build on Node ${{ matrix.node }} and ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: ["14.x"]
os: [macOS-latest]
steps:
- name: Checkout repo
uses: actions/checkout@v2
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
- name: Install PNPM
uses: pnpm/action-setup@v2.0.1
with:
version: 6.21.0
- name: Install dependencies
run: cd packages/bun-framework-next && pnpm install
- name: Type check bun-framework-next
run: cd packages/bun-framework-next && pnpm check

View File

@@ -28,6 +28,7 @@ jobs:
runs-on: ${{matrix.runner}}
if: github.repository_owner == 'oven-sh'
timeout-minutes: 90
permissions: write-all
strategy:
matrix:
include:
@@ -36,7 +37,7 @@ jobs:
arch: aarch64
build_arch: arm64
runner: linux-arm64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-linux-arm64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-linux-arm64-lto.tar.gz"
webkit_basename: "bun-webkit-linux-arm64-lto"
build_machine_arch: aarch64

View File

@@ -37,6 +37,7 @@ jobs:
runs-on: ${{matrix.runner}}
if: github.repository_owner == 'oven-sh'
timeout-minutes: 90
permissions: write-all
strategy:
fail-fast: false
matrix:
@@ -46,7 +47,7 @@ jobs:
arch: x86_64
build_arch: amd64
runner: big-ubuntu
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-linux-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-linux-amd64-lto.tar.gz"
webkit_basename: "bun-webkit-linux-amd64-lto"
build_machine_arch: x86_64
- cpu: nehalem
@@ -54,7 +55,7 @@ jobs:
arch: x86_64
build_arch: amd64
runner: big-ubuntu
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-linux-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-linux-amd64-lto.tar.gz"
webkit_basename: "bun-webkit-linux-amd64-lto"
build_machine_arch: x86_64
@@ -152,13 +153,33 @@ jobs:
name: "Canary (${{github.sha}})"
tag: "canary"
artifacts: "${{runner.temp}}/release/bun-${{matrix.tag}}.zip,${{runner.temp}}/release/bun-${{matrix.tag}}-profile.zip"
- uses: sarisia/actions-status-discord@v1
if: failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
noprefix: true
nocontext: true
description: |
Pull Request
### [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}
Build failed on ${{ matrix.tag }}:
**[View build output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
[Commit ${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}})
linux-test:
name: Tests ${{matrix.tag}}
runs-on: ubuntu-latest
needs: [linux]
if: github.event_name == 'pull_request'
timeout-minutes: 20
permissions:
pull-requests: write
outputs:
failing_tests: ${{ steps.test.outputs.failing_tests }}
failing_tests_count: ${{ steps.test.outputs.failing_tests_count }}
@@ -180,8 +201,8 @@ jobs:
with:
name: bun-${{matrix.tag}}
path: ${{runner.temp}}/release
- id: install
name: Install
- id: install-bun
name: Install Bun
run: |
cd ${{runner.temp}}/release
unzip bun-${{matrix.tag}}.zip
@@ -189,6 +210,13 @@ jobs:
chmod +x bun
pwd >> $GITHUB_PATH
./bun --version
- id: install-dependnecies
name: Install dependencies
run: |
sudo apt-get update && sudo apt-get install -y openssl
bun install --verbose
bun install --cwd=test --verbose
bun install --cwd=packages/bun-internal-test --verbose
- id: test
name: Test (node runner)
env:
@@ -197,10 +225,24 @@ jobs:
TLS_POSTGRES_DATABASE_URL: ${{ secrets.TLS_POSTGRES_DATABASE_URL }}
# if: ${{github.event.inputs.use_bun == 'false'}}
run: |
bun install
bun install --cwd test
bun install --cwd packages/bun-internal-test
node packages/bun-internal-test/src/runner.node.mjs || true
- uses: sarisia/actions-status-discord@v1
if: always() && steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: "failure"
noprefix: true
nocontext: true
description: |
Pull Request
### ❌ [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}, there are ${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
${{ steps.test.outputs.failing_tests }}
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
- name: Comment on PR
if: steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
uses: thollander/actions-comment-pull-request@v2

View File

@@ -115,36 +115,36 @@ jobs:
# arch: x86_64
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: true
# compile_obj: false
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: true
# compile_obj: false
# - cpu: nehalem
# arch: x86_64
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: false
# compile_obj: true
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: false
# compile_obj: true
- cpu: native
@@ -152,14 +152,14 @@ jobs:
tag: bun-darwin-aarch64
obj: bun-obj-darwin-aarch64
artifact: bun-obj-darwin-aarch64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-arm64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-arm64-lto.tar.gz"
runner: macos-arm64
dependencies: true
compile_obj: true
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -172,11 +172,11 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install ccache rust llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install ccache rust llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix ccache)/bin" >> $GITHUB_PATH
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
@@ -247,6 +247,7 @@ jobs:
if: github.repository_owner == 'oven-sh'
needs: [macOS-cpp, macos-object-files]
timeout-minutes: 90
permissions: write-all
strategy:
matrix:
include:
@@ -255,29 +256,29 @@ jobs:
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# package: bun-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# package: bun-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
- cpu: native
arch: aarch64
tag: bun-darwin-aarch64
obj: bun-obj-darwin-aarch64
package: bun-darwin-aarch64
artifact: bun-obj-darwin-aarch64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-arm64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-arm64-lto.tar.gz"
runner: macos-arm64
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -290,10 +291,10 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install rust ccache llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install rust ccache llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
@@ -392,11 +393,32 @@ jobs:
name: "Canary (${{github.sha}})"
tag: "canary"
artifacts: "${{runner.temp}}/release/${{matrix.tag}}.zip,${{runner.temp}}/release/${{matrix.tag}}-profile.zip"
- uses: sarisia/actions-status-discord@v1
if: failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
noprefix: true
nocontext: true
description: |
Pull Request
### [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}
Build failed on ${{ matrix.tag }}:
**[View build output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
[Commit ${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}})
macOS-test:
name: Tests ${{matrix.tag}}
runs-on: ${{ matrix.runner }}
needs: [macOS]
if: github.event_name == 'pull_request' && github.repository_owner == 'oven-sh'
permissions:
pull-requests: write
timeout-minutes: 30
outputs:
failing_tests: ${{ steps.test.outputs.failing_tests }}
@@ -419,8 +441,8 @@ jobs:
with:
name: ${{matrix.tag}}
path: ${{runner.temp}}/release
- id: install
name: Install
- id: install-bun
name: Install Bun
run: |
cd ${{runner.temp}}/release
unzip ${{matrix.tag}}.zip
@@ -428,6 +450,12 @@ jobs:
chmod +x bun
pwd >> $GITHUB_PATH
./bun --version
- id: install
name: Install dependencies
run: |
bun install --verbose
bun install --cwd=test --verbose
bun install --cwd=packages/bun-internal-test --verbose
- id: test
name: Test (node runner)
env:
@@ -436,10 +464,24 @@ jobs:
TLS_POSTGRES_DATABASE_URL: ${{ secrets.TLS_POSTGRES_DATABASE_URL }}
# if: ${{github.event.inputs.use_bun == 'false'}}
run: |
bun install
bun install --cwd test
bun install --cwd packages/bun-internal-test
node packages/bun-internal-test/src/runner.node.mjs || true
- uses: sarisia/actions-status-discord@v1
if: always() && steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: "failure"
noprefix: true
nocontext: true
description: |
Pull Request
### ❌ [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}, there are ${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
${{ steps.test.outputs.failing_tests }}
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
- name: Comment on PR
if: steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
uses: thollander/actions-comment-pull-request@v2

View File

@@ -115,36 +115,36 @@ jobs:
arch: x86_64
tag: bun-darwin-x64-baseline
obj: bun-obj-darwin-x64-baseline
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64-baseline
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
dependencies: true
compile_obj: false
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: true
# compile_obj: false
- cpu: nehalem
arch: x86_64
tag: bun-darwin-x64-baseline
obj: bun-obj-darwin-x64-baseline
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64-baseline
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
dependencies: false
compile_obj: true
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: false
# compile_obj: true
# - cpu: native
@@ -152,14 +152,14 @@ jobs:
# tag: bun-darwin-aarch64
# obj: bun-obj-darwin-aarch64
# artifact: bun-obj-darwin-aarch64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# runner: macos-arm64
# dependencies: true
# compile_obj: true
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -172,11 +172,11 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install ccache rust llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install ccache rust llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix ccache)/bin" >> $GITHUB_PATH
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: ccache (dependencies)
uses: hendrikmuhs/ccache-action@v1.2
if: matrix.dependencies
@@ -248,6 +248,7 @@ jobs:
if: github.repository_owner == 'oven-sh'
needs: [macOS-cpp, macos-object-files]
timeout-minutes: 90
permissions: write-all
strategy:
matrix:
include:
@@ -256,29 +257,29 @@ jobs:
tag: bun-darwin-x64-baseline
obj: bun-obj-darwin-x64-baseline
package: bun-darwin-x64
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64-baseline
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# - cpu: haswell
# arch: x86_64
# tag: bun-darwin-x64
# obj: bun-obj-darwin-x64
# package: bun-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# - cpu: native
# arch: aarch64
# tag: bun-darwin-aarch64
# obj: bun-obj-darwin-aarch64
# package: bun-darwin-aarch64
# artifact: bun-obj-darwin-aarch64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# runner: macos-arm64
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -291,10 +292,10 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install ccache rust llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install ccache rust llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: ccache (link)
uses: hendrikmuhs/ccache-action@v1.2
with:
@@ -396,11 +397,32 @@ jobs:
name: "Canary (${{github.sha}})"
tag: "canary"
artifacts: "${{runner.temp}}/release/${{matrix.tag}}.zip,${{runner.temp}}/release/${{matrix.tag}}-profile.zip"
- uses: sarisia/actions-status-discord@v1
if: failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
noprefix: true
nocontext: true
description: |
Pull Request
### [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}
Build failed on ${{ matrix.tag }}:
**[View build output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
[Commit ${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}})
macOS-test:
name: Tests ${{matrix.tag}}
runs-on: ${{ matrix.runner }}
needs: [macOS]
if: github.event_name == 'pull_request' && github.repository_owner == 'oven-sh'
permissions:
pull-requests: write
timeout-minutes: 30
outputs:
failing_tests: ${{ steps.test.outputs.failing_tests }}
@@ -410,7 +432,7 @@ jobs:
matrix:
include:
- tag: bun-darwin-x64-baseline
runner: macos-11
runner: macos-12
steps:
- id: checkout
name: Checkout
@@ -423,8 +445,8 @@ jobs:
with:
name: ${{matrix.tag}}
path: ${{runner.temp}}/release
- id: install
name: Install
- id: install-bun
name: Install Bun
run: |
cd ${{runner.temp}}/release
unzip ${{matrix.tag}}.zip
@@ -432,6 +454,12 @@ jobs:
chmod +x bun
pwd >> $GITHUB_PATH
./bun --version
- id: install
name: Install dependencies
run: |
bun install --verbose
bun install --cwd=test --verbose
bun install --cwd=packages/bun-internal-test --verbose
- id: test
name: Test (node runner)
env:
@@ -440,10 +468,27 @@ jobs:
TLS_POSTGRES_DATABASE_URL: ${{ secrets.TLS_POSTGRES_DATABASE_URL }}
# if: ${{github.event.inputs.use_bun == 'false'}}
run: |
bun install
bun install --cwd test
bun install --cwd packages/bun-internal-test
node packages/bun-internal-test/src/runner.node.mjs || true
- uses: sarisia/actions-status-discord@v1
if: always() && steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: "failure"
noprefix: true
nocontext: true
description: |
Pull Request
### ❌ [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
Hey @${{ github.actor }},
${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
${{ steps.test.outputs.failing_tests }}
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
- name: Comment on PR
if: steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
uses: thollander/actions-comment-pull-request@v2

View File

@@ -115,36 +115,36 @@ jobs:
# arch: x86_64
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: true
# compile_obj: false
- cpu: haswell
arch: x86_64
tag: bun-darwin-x64
obj: bun-obj-darwin-x64
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
dependencies: true
compile_obj: false
# - cpu: nehalem
# arch: x86_64
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# dependencies: false
# compile_obj: true
- cpu: haswell
arch: x86_64
tag: bun-darwin-x64
obj: bun-obj-darwin-x64
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
dependencies: false
compile_obj: true
# - cpu: native
@@ -152,14 +152,14 @@ jobs:
# tag: bun-darwin-aarch64
# obj: bun-obj-darwin-aarch64
# artifact: bun-obj-darwin-aarch64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-arm64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-arm64-lto.tar.gz"
# runner: macos-arm64
# dependencies: true
# compile_obj: true
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -172,10 +172,10 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install rust ccache llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install rust ccache llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: Download WebKit
if: matrix.compile_obj
env:
@@ -250,6 +250,7 @@ jobs:
if: github.repository_owner == 'oven-sh'
needs: [macOS-cpp, macos-object-files]
timeout-minutes: 90
permissions: write-all
strategy:
matrix:
include:
@@ -258,29 +259,29 @@ jobs:
# tag: bun-darwin-x64-baseline
# obj: bun-obj-darwin-x64-baseline
# package: bun-darwin-x64
# runner: macos-11
# runner: macos-12
# artifact: bun-obj-darwin-x64-baseline
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
- cpu: haswell
arch: x86_64
tag: bun-darwin-x64
obj: bun-obj-darwin-x64
package: bun-darwin-x64
runner: macos-11
runner: macos-12
artifact: bun-obj-darwin-x64
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-amd64-lto.tar.gz"
webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-amd64-lto.tar.gz"
# - cpu: native
# arch: aarch64
# tag: bun-darwin-aarch64
# obj: bun-obj-darwin-aarch64
# package: bun-darwin-aarch64
# artifact: bun-obj-darwin-aarch64
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-july23/bun-webkit-macos-arm64-lto.tar.gz"
# webkit_url: "https://github.com/oven-sh/WebKit/releases/download/2023-oct3/bun-webkit-macos-arm64-lto.tar.gz"
# runner: macos-arm64
steps:
- uses: actions/checkout@v3
- name: Checkout submodules
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu)
run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) --force
- name: Install dependencies
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -293,10 +294,10 @@ jobs:
OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj
BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps
run: |
brew install rust ccache llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
brew install rust ccache llvm@16 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force
echo "$(brew --prefix coreutils)/libexec/gnubin" >> $GITHUB_PATH
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@15
echo "$(brew --prefix llvm@16)/bin" >> $GITHUB_PATH
brew link --overwrite llvm@16
- name: Download WebKit
env:
CPU_TARGET: ${{ matrix.cpu }}
@@ -398,11 +399,32 @@ jobs:
name: "Canary (${{github.sha}})"
tag: "canary"
artifacts: "${{runner.temp}}/release/${{matrix.tag}}.zip,${{runner.temp}}/release/${{matrix.tag}}-profile.zip"
- uses: sarisia/actions-status-discord@v1
if: failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
noprefix: true
nocontext: true
description: |
Pull Request
### [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}
Build failed on ${{ matrix.tag }}:
**[View build output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
[Commit ${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}})
macOS-test:
name: Tests ${{matrix.tag}}
runs-on: ${{ matrix.runner }}
needs: [macOS]
if: github.event_name == 'pull_request' && github.repository_owner == 'oven-sh'
permissions:
pull-requests: write
timeout-minutes: 30
outputs:
failing_tests: ${{ steps.test.outputs.failing_tests }}
@@ -412,7 +434,7 @@ jobs:
matrix:
include:
- tag: bun-darwin-x64
runner: macos-11
runner: macos-12
steps:
- id: checkout
name: Checkout
@@ -425,8 +447,8 @@ jobs:
with:
name: ${{matrix.tag}}
path: ${{runner.temp}}/release
- id: install
name: Install
- id: install-bun
name: Install Bun
run: |
cd ${{runner.temp}}/release
unzip ${{matrix.tag}}.zip
@@ -434,6 +456,12 @@ jobs:
chmod +x bun
pwd >> $GITHUB_PATH
./bun --version
- id: install
name: Install dependencies
run: |
bun install --verbose
bun install --cwd=test --verbose
bun install --cwd=packages/bun-internal-test --verbose
- id: test
name: Test (node runner)
env:
@@ -442,10 +470,24 @@ jobs:
TLS_POSTGRES_DATABASE_URL: ${{ secrets.TLS_POSTGRES_DATABASE_URL }}
# if: ${{github.event.inputs.use_bun == 'false'}}
run: |
bun install
bun install --cwd test
bun install --cwd packages/bun-internal-test
node packages/bun-internal-test/src/runner.node.mjs || true
- uses: sarisia/actions-status-discord@v1
if: always() && steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
with:
title: ""
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: "failure"
noprefix: true
nocontext: true
description: |
Pull Request
### ❌ [${{github.event.pull_request.title}}](https://github.com/oven-sh/bun/pull/${{github.event.number}})
@${{ github.actor }}, there are ${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
${{ steps.test.outputs.failing_tests }}
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{github.run_id}})**
- name: Comment on PR
if: steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request'
uses: thollander/actions-comment-pull-request@v2

View File

@@ -1,179 +0,0 @@
name: bun-release-canary
concurrency: release-canary
on:
schedule:
- cron: "0 14 * * *" # every day at 6am PST
workflow_dispatch:
jobs:
sign:
name: Sign Release
runs-on: ubuntu-latest
if: github.repository_owner == 'oven-sh'
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
uses: actions/checkout@v3
- id: setup-gpg
name: Setup GPG
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- id: setup-bun
name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
run: bun install
- id: bun-run
name: Sign Release
run: |
echo "$GPG_PASSPHRASE" | bun upload-assets -- "canary"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
npm:
name: Release to NPM
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
uses: actions/checkout@v3
- id: setup-bun
name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
run: bun install
- id: bun-run
name: Release
run: bun upload-npm -- canary publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# npm-types:
# name: Release types to NPM
# runs-on: ubuntu-latest
# defaults:
# run:
# working-directory: packages/bun-types
# steps:
# - id: checkout
# name: Checkout
# uses: actions/checkout@v3
# - id: setup-node
# name: Setup Node.js
# uses: actions/setup-node@v3
# with:
# node-version: latest
# - id: setup-bun
# name: Setup Bun
# uses: oven-sh/setup-bun@v1
# with:
# bun-version: canary
# - id: bun-install
# name: Install Dependencies
# run: bun install
# - id: setup-env
# name: Setup Environment
# run: |
# SHA=$(git rev-parse --short "$GITHUB_SHA")
# VERSION=$(bun --version)
# TAG="${VERSION}-canary.$(date '+%Y%m%d').1+${SHA}"
# echo "Setup tag: ${TAG}"
# echo "TAG=${TAG}" >> ${GITHUB_ENV}
# - id: bun-run
# name: Build
# run: bun run build
# env:
# BUN_VERSION: ${{ env.TAG }}
# - id: npm-publish
# name: Release
# uses: JS-DevTools/npm-publish@v1
# with:
# package: packages/bun-types/dist/package.json
# token: ${{ secrets.NPM_TOKEN }}
# tag: canary
docker:
name: Release to Dockerhub
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
steps:
- id: checkout
name: Checkout
uses: actions/checkout@v3
- id: qemu
name: Setup Docker QEMU
uses: docker/setup-qemu-action@v2
- id: buildx
name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
with:
platforms: linux/amd64,linux/arm64
- id: metadata
name: Setup Docker metadata
uses: docker/metadata-action@v4
with:
images: oven/bun
tags: canary
- id: login
name: Login to Docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- id: push
name: Push to Docker
uses: docker/build-push-action@v3
with:
context: ./dockerhub
file: ./dockerhub/Dockerfile-debian
platforms: linux/amd64,linux/arm64
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
build-args: |
BUN_VERSION=canary
s3:
name: Upload to S3
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
uses: actions/checkout@v3
- id: setup-bun
name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
run: bun install
- id: bun-run
name: Release
run: bun upload-s3 -- canary
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
AWS_ENDPOINT: ${{ secrets.AWS_ENDPOINT }}
AWS_BUCKET: bun

View File

@@ -1,54 +0,0 @@
name: bun-release-types-canary
concurrency: release-canary
on:
push:
branches:
- main
paths:
- "packages/bun-types/**"
workflow_dispatch:
jobs:
npm-types:
name: Release types to NPM
runs-on: ubuntu-latest
if: github.repository_owner == 'oven-sh'
defaults:
run:
working-directory: packages/bun-types
steps:
- id: checkout
name: Checkout
uses: actions/checkout@v3
- id: setup-node
name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: latest
- id: setup-bun
name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
run: bun install
- id: setup-env
name: Setup Environment
run: |
SHA=$(git rev-parse --short "$GITHUB_SHA")
VERSION=$(bun --version)
TAG="${VERSION}-canary.$(date +'%Y%m%dT%H%M%S')"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: bun-run
name: Build
run: bun run build
env:
BUN_VERSION: ${{ env.TAG }}
- id: npm-publish
name: Release
uses: JS-DevTools/npm-publish@v1
with:
package: packages/bun-types/dist/package.json
token: ${{ secrets.NPM_TOKEN }}
tag: canary

View File

@@ -1,52 +1,71 @@
name: bun-release
concurrency: release
env:
BUN_VERSION: ${{ github.event.inputs.tag || github.event.release.tag_name || 'canary' }}
BUN_LATEST: ${{ github.event.inputs.is-latest || github.event.release.prerelease == 'false' }}
on:
release:
types:
- published
schedule:
- cron: "0 14 * * *" # every day at 6am PST
workflow_dispatch:
inputs:
is-latest:
description: Is this the latest release?
type: boolean
default: false
tag:
type: string
description: The tag to publish
description: What is the release tag? (e.g. "1.0.2", "canary")
required: true
use-docker:
description: Should Docker images be released?
type: boolean
default: false
use-npm:
description: Should npm packages be published?
type: boolean
default: false
use-homebrew:
description: Should binaries be released to Homebrew?
type: boolean
default: false
use-s3:
description: Should binaries be uploaded to S3?
type: boolean
default: false
use-types:
description: Should types be released to npm?
type: boolean
default: false
jobs:
sign:
name: Sign Release
runs-on: ubuntu-latest
if: github.repository_owner == 'oven-sh'
if: ${{ github.repository_owner == 'oven-sh' }}
permissions:
contents: write
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
- id: setup-env
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: setup-gpg
name: Setup GPG
- name: Setup GPG
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- id: setup-bun
name: Setup Bun
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
bun-version: latest
- name: Install Dependencies
run: bun install
- id: bun-run
name: Sign Release
- name: Sign Release
run: |
echo "$GPG_PASSPHRASE" | bun upload-assets -- "${{ env.TAG }}"
echo "$GPG_PASSPHRASE" | bun upload-assets -- "${{ env.BUN_VERSION }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
@@ -54,32 +73,23 @@ jobs:
name: Release to NPM
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.use-npm == 'true' }}
permissions:
contents: read
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
- id: setup-env
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: setup-bun
name: Setup Bun
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
bun-version: latest
- name: Install Dependencies
run: bun install
- id: bun-run
name: Release
run: bun upload-npm -- "${{ env.TAG }}" publish
- name: Release
run: bun upload-npm -- "${{ env.BUN_VERSION }}" publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -87,41 +97,45 @@ jobs:
name: Release types to NPM
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.use-types == 'true' }}
permissions:
contents: read
defaults:
run:
working-directory: packages/bun-types
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
- id: setup-env
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: setup-node
name: Setup Node.js
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: latest
- id: setup-bun
name: Setup Bun
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
bun-version: latest
- name: Install Dependencies
run: bun install
- id: bun-run
name: Build
- name: Setup Tag
if: ${{ env.BUN_VERSION == 'canary' }}
run: |
VERSION=$(bun --version)
TAG="${VERSION}-canary.$(date +'%Y%m%dT%H%M%S')"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- name: Build
run: bun run build
env:
BUN_VERSION: ${{ env.TAG }}
- id: npm-publish
name: Release
BUN_VERSION: ${{ env.TAG || env.BUN_VERSION }}
- name: Release (canary)
if: ${{ env.BUN_VERSION == 'canary' }}
uses: JS-DevTools/npm-publish@v1
with:
package: packages/bun-types/dist/package.json
token: ${{ secrets.NPM_TOKEN }}
tag: canary
- name: Release (latest)
if: ${{ env.BUN_LATEST == 'true' }}
uses: JS-DevTools/npm-publish@v1
with:
package: packages/bun-types/dist/package.json
@@ -130,20 +144,28 @@ jobs:
name: Release to Dockerhub
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.use-docker == 'true' }}
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- variant: debian
suffix: ''
- variant: debian
suffix: -debian
- variant: slim
suffix: -slim
dir: debian-slim
- variant: alpine
suffix: -alpine
- variant: distroless
suffix: -distroless
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
- id: environment
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: qemu
name: Setup Docker QEMU
- name: Setup Docker emulator
uses: docker/setup-qemu-action@v2
- id: buildx
name: Setup Docker buildx
@@ -155,67 +177,60 @@ jobs:
uses: docker/metadata-action@v4
with:
images: oven/bun
flavor: |
latest=false
tags: |
type=match,pattern=(bun-v)?(\d+.\d+.\d+),group=2,value=${{ env.TAG }}
type=match,pattern=(bun-v)?(\d+.\d+),group=2,value=${{ env.TAG }}
- id: login
name: Login to Docker
type=raw,value=latest,enable=${{ env.BUN_LATEST == 'true' && matrix.suffix == '' }}
type=raw,value=${{ matrix.variant }},enable=${{ env.BUN_LATEST == 'true' }}
type=match,pattern=(bun-v)?(canary|\d+.\d+.\d+),group=2,value=${{ env.BUN_VERSION }},suffix=${{ matrix.suffix }}
type=match,pattern=(bun-v)?(canary|\d+.\d+),group=2,value=${{ env.BUN_VERSION }},suffix=${{ matrix.suffix }}
type=match,pattern=(bun-v)?(canary|\d+),group=2,value=${{ env.BUN_VERSION }},suffix=${{ matrix.suffix }}
- name: Login to Docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- id: push
name: Push to Docker
- name: Push to Docker
uses: docker/build-push-action@v3
with:
context: ./dockerhub
file: ./dockerhub/Dockerfile-debian
context: ./dockerhub/${{ matrix.dir || matrix.variant }}
platforms: linux/amd64,linux/arm64
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
build-args: |
BUN_VERSION=${{ env.TAG }}
BUN_VERSION=${{ env.BUN_VERSION }}
homebrew:
name: Release to Homebrew
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
permissions:
contents: read
if: ${{ github.event_name == 'release' || github.event.inputs.use-homebrew == 'true' }}
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
with:
repository: oven-sh/homebrew-bun
token: ${{ secrets.ROBOBUN_TOKEN }}
- id: setup-gpg
- id: gpg
name: Setup GPG
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- id: setup-env
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: setup-ruby
name: Setup Ruby
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "2.6"
- id: update-tap
name: Update Tap
run: ruby scripts/release.rb "${{ env.TAG }}"
- id: commit-tap
name: Commit Tap
- name: Update Tap
run: ruby scripts/release.rb "${{ env.BUN_VERSION }}"
- name: Commit Tap
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_options: --gpg-sign=${{ steps.setup-gpg.outputs.keyid }}
commit_message: Release ${{ env.TAG }}
commit_options: --gpg-sign=${{ steps.gpg.outputs.keyid }}
commit_message: Release ${{ env.BUN_VERSION }}
commit_user_name: robobun
commit_user_email: robobun@oven.sh
commit_author: robobun <robobun@oven.sh>
@@ -223,32 +238,23 @@ jobs:
name: Upload to S3
runs-on: ubuntu-latest
needs: sign
if: github.repository_owner == 'oven-sh'
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.use-s3 == 'true' }}
permissions:
contents: read
defaults:
run:
working-directory: packages/bun-release
steps:
- id: checkout
name: Checkout
- name: Checkout
uses: actions/checkout@v3
- id: setup-env
name: Setup Environment
run: |
TAG="${{ github.event.inputs.tag }}"
TAG="${TAG:-"${{ github.event.release.tag_name }}"}"
echo "Setup tag: ${TAG}"
echo "TAG=${TAG}" >> ${GITHUB_ENV}
- id: setup-bun
name: Setup Bun
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: canary
- id: bun-install
name: Install Dependencies
bun-version: latest
- name: Install Dependencies
run: bun install
- id: bun-run
name: Release
run: bun upload-s3 -- "${{ env.TAG }}"
- name: Release
run: bun upload-s3 -- "${{ env.BUN_VERSION }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}

View File

@@ -12,6 +12,8 @@ jobs:
prettier-fmt:
name: prettier
runs-on: ubuntu-latest
permissions:
pull-requests: write
outputs:
prettier_fmt_errs: ${{ steps.fmt.outputs.prettier_fmt_errs }}
steps:

View File

@@ -1,7 +1,7 @@
name: zig-fmt
env:
ZIG_VERSION: 0.11.0-dev.4006+bf827d0b5
ZIG_VERSION: 0.12.0-dev.163+6780a6bbf
on:
pull_request:
@@ -18,6 +18,8 @@ jobs:
zig-fmt:
name: zig fmt
runs-on: ubuntu-latest
permissions:
pull-requests: write
outputs:
zig_fmt_errs: ${{ steps.fmt.outputs.zig_fmt_errs }}
steps:

12
.gitignore vendored
View File

@@ -6,6 +6,7 @@ packages/*/*.wasm
profile.json
node_modules
.envrc
.swcrc
yarn.lock
dist
@@ -96,6 +97,8 @@ packages/bun-wasm/*.cjs
packages/bun-wasm/*.map
packages/bun-wasm/*.js
packages/bun-wasm/*.d.ts
packages/bun-wasm/*.d.cts
packages/bun-wasm/*.d.mts
*.bc
src/fallback.version
@@ -121,7 +124,14 @@ cold-jsc-start
cold-jsc-start.d
/test.ts
/test.js
src/js/out/modules_dev
src/js/out/modules*
src/js/out/functions*
src/js/out/tmp
src/js/out/DebugPath.h
make-dev-stats.csv
.uuid
tsconfig.tsbuildinfo

7
.gitmodules vendored
View File

@@ -48,13 +48,6 @@ ignore = dirty
depth = 1
shallow = true
fetchRecurseSubmodules = false
[submodule "src/deps/uws"]
path = src/deps/uws
url = https://github.com/Jarred-Sumner/uWebSockets
ignore = dirty
depth = 1
shallow = true
fetchRecurseSubmodules = true
[submodule "src/deps/tinycc"]
path = src/deps/tinycc
url = https://github.com/Jarred-Sumner/tinycc.git

View File

@@ -10,4 +10,4 @@ fi
# sets up vscode C++ intellisense
rm -f .vscode/clang++
ln -s $(which clang++-15 || which clang++) .vscode/clang++ 2>/dev/null
ln -s $(which clang++-16 || which clang++) .vscode/clang++ 2>/dev/null

3
.scripts/write-versions.sh Normal file → Executable file
View File

@@ -7,11 +7,9 @@ LIBARCHIVE_VERSION=$(git rev-parse HEAD:./src/deps/libarchive)
PICOHTTPPARSER_VERSION=$(git rev-parse HEAD:./src/deps/picohttpparser)
BORINGSSL_VERSION=$(git rev-parse HEAD:./src/deps/boringssl)
ZLIB_VERSION=$(git rev-parse HEAD:./src/deps/zlib)
UWS_VERSION=$(git rev-parse HEAD:./src/deps/uws)
LOLHTML=$(git rev-parse HEAD:./src/deps/lol-html)
TINYCC=$(git rev-parse HEAD:./src/deps/tinycc)
C_ARES=$(git rev-parse HEAD:./src/deps/c-ares)
USOCKETS=$(cd src/deps/uws/uSockets && git rev-parse HEAD)
rm -rf src/generated_versions_list.zig
echo "// AUTO-GENERATED FILE. Created via .scripts/write-versions.sh" >src/generated_versions_list.zig
@@ -20,7 +18,6 @@ echo "pub const boringssl = \"$BORINGSSL_VERSION\";" >>src/generated_versions_li
echo "pub const libarchive = \"$LIBARCHIVE_VERSION\";" >>src/generated_versions_list.zig
echo "pub const mimalloc = \"$MIMALLOC_VERSION\";" >>src/generated_versions_list.zig
echo "pub const picohttpparser = \"$PICOHTTPPARSER_VERSION\";" >>src/generated_versions_list.zig
echo "pub const uws = \"$UWS_VERSION\";" >>src/generated_versions_list.zig
echo "pub const webkit = \"$WEBKIT_VERSION\";" >>src/generated_versions_list.zig
echo "pub const zig = @import(\"std\").fmt.comptimePrint(\"{}\", .{@import(\"builtin\").zig_version});" >>src/generated_versions_list.zig
echo "pub const zlib = \"$ZLIB_VERSION\";" >>src/generated_versions_list.zig

View File

@@ -15,11 +15,14 @@
"${workspaceFolder}/src/bun.js/bindings/webcore/",
"${workspaceFolder}/src/bun.js/bindings/sqlite/",
"${workspaceFolder}/src/bun.js/bindings/webcrypto/",
"${workspaceFolder}/src/bun.js/modules/",
"${workspaceFolder}/src/js/builtins/",
"${workspaceFolder}/src/js/out",
"${workspaceFolder}/src/deps/boringssl/include/",
"${workspaceFolder}/src/deps",
"${workspaceFolder}/src/deps/uws/uSockets/src"
"${workspaceFolder}/src/napi/*",
"${workspaceFolder}/packages/bun-usockets/src",
"${workspaceFolder}/packages/"
],
"browse": {
"path": [
@@ -31,6 +34,8 @@
"${workspaceFolder}/src/bun.js/WebKit/WebKitBuild/Release/WTF/Headers/**",
"${workspaceFolder}/src/bun.js/WebKit/WebKitBuild/Release/bmalloc/Headers/**",
"${workspaceFolder}/src/bun.js/bindings/*",
"${workspaceFolder}/src/bun.js/bindings/*",
"${workspaceFolder}/src/napi/*",
"${workspaceFolder}/src/bun.js/bindings/sqlite/",
"${workspaceFolder}/src/bun.js/bindings/webcrypto/",
"${workspaceFolder}/src/bun.js/bindings/webcore/",
@@ -39,7 +44,9 @@
"${workspaceFolder}/src/bun.js/modules/*",
"${workspaceFolder}/src/deps",
"${workspaceFolder}/src/deps/boringssl/include/",
"${workspaceFolder}/src/deps/uws/uSockets/src"
"${workspaceFolder}/packages/bun-usockets/",
"${workspaceFolder}/packages/bun-uws/",
"${workspaceFolder}/src/napi"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ".vscode/cppdb"

23
.vscode/launch.json generated vendored
View File

@@ -4,8 +4,6 @@
// it makes our tests very slow
// But it helps catch memory bugs
// SIGHUP must be ignored or the debugger will pause when a spawned subprocess exits:
// { "initCommands": ["process handle -p false -s false -n false SIGHUP"] }
"version": "0.2.0",
"configurations": [
{
@@ -21,7 +19,6 @@
"BUN_DEBUG_QUIET_LOGS": "1",
"BUN_GARBAGE_COLLECTOR_LEVEL": "2"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -36,7 +33,6 @@
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
@@ -51,7 +47,6 @@
"env": {
"FORCE_COLOR": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -66,7 +61,6 @@
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -81,7 +75,6 @@
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -96,7 +89,6 @@
"BUN_DEBUG_QUIET_LOGS": "1",
"BUN_GARBAGE_COLLECTOR_LEVEL": "2"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -111,7 +103,6 @@
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -126,7 +117,6 @@
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -134,13 +124,12 @@
"request": "launch",
"name": "bun run [file]",
"program": "bun-debug",
"args": ["run", "${file}"],
"args": ["run", "${file}", "${file}"],
"cwd": "${fileDirname}",
"env": {
"FORCE_COLOR": "1",
"BUN_DEBUG_QUIET_LOGS": "1"
"NODE_ENV": "development"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -155,7 +144,6 @@
"BUN_DEBUG_QUIET_LOGS": "1",
"BUN_GARBAGE_COLLECTOR_LEVEL": "2"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -168,7 +156,6 @@
"env": {
"FORCE_COLOR": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -181,7 +168,6 @@
"env": {
"FORCE_COLOR": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -194,7 +180,6 @@
"env": {
"FORCE_COLOR": "1"
},
"initCommands": ["process handle -p false -s false -n false SIGHUP"],
"console": "internalConsole"
},
{
@@ -216,9 +201,7 @@
"console": "internalConsole",
"env": {
"BUN_CONFIG_MINIFY_WHITESPACE": "1"
},
// SIGHUP must be ignored or the debugger will pause when a spawned subprocess exits.
"initCommands": ["process handle -p false -s false -n false SIGHUP"]
}
},
{
"type": "lldb",

View File

@@ -27,7 +27,8 @@
"editor.formatOnSave": true
},
"zig.zls.enableInlayHints": false,
"zig.zls.enabled": true,
"git.ignoreSubmodules": true,
"[jsx]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
@@ -79,7 +80,10 @@
"src/deps/tinycc": true,
"src/deps/zstd": true,
"test/snippets/package-json-exports/_node_modules_copy": true,
"src/js/out": true
"src/js/out": true,
"packages/bun-uws/fuzzing/seed-corpus/": true,
"**/*.dep": true,
"**/CMakeFiles": true
},
"C_Cpp.files.exclude": {
"**/.vscode": true,

View File

@@ -47,34 +47,18 @@ TODO: document this (see [`bindings.zig`](src/bun.js/bindings/bindings.zig) and
Copy from examples like `Subprocess` or `Response`.
### ESM modules
### ESM Modules and Builtins JS
Bun implements ESM modules in a mix of native code and JavaScript.
Several Node.js modules are implemented in JavaScript and loosely based on browserify polyfills.
The ESM modules in Bun are located in [`src/bun.js/*.exports.js`](src/bun.js/). Unlike other code in Bun, these files are NOT transpiled. They are loaded directly into the JavaScriptCore VM. That means `require` does not work in these files. Instead, you must use `import.meta.require`, or ideally, not use require/import other files at all.
Builtin modules in Bun are located in [`src/js`](src/js/). These files are transpiled and support a JavaScriptCore-only syntax for internal slots, which is explained further in [`src/js/README.md`](src/js/README.md).
Native C++ modules are in `src/bun.js/modules/`.
The module loader is in [`src/bun.js/module_loader.zig`](src/bun.js/module_loader.zig).
### JavaScript Builtins
TODO: update this with the new build process that uses TypeScript and `$` instead of `@`.
JavaScript builtins are located in [`src/js/builtins/*.ts`](src/js/builtins).
These files support a JavaScriptCore-only syntax for internal slots. `@` is used to access an internal slot. For example: `new @Array(123)` will create a new `Array` similar to `new Array(123)`, except if a library modifies the `Array` global, it will not affect the internal slot (`@Array`). These names must be allow-listed in `BunBuiltinNames.h` (though JavaScriptCore allowlists some names by default).
They can not use or reference ESM-modules. The files that end with `*Internals.js` are automatically loaded globally. Most usage of internals right now are the stream implementations (which share a lot of code from Safari/WebKit) and ImportMetaObject (which is how `require` is implemented in the runtime)
To regenerate the builtins:
```sh
make clean-bindings && make generate-builtins && make bindings -j10
```
It is recommended that you have ccache installed or else you will spend a lot of time waiting for the bindings to compile.
### Memory management in Bun's JavaScript runtime
TODO: fill this out (for now, use `JSC.Strong` in most cases)

View File

@@ -10,9 +10,9 @@ ARG ARCH=x86_64
ARG BUILD_MACHINE_ARCH=x86_64
ARG TRIPLET=${ARCH}-linux-gnu
ARG BUILDARCH=amd64
ARG WEBKIT_TAG=2023-july23
ARG WEBKIT_TAG=2023-oct3
ARG ZIG_TAG=jul1
ARG ZIG_VERSION="0.11.0-dev.4006+bf827d0b5"
ARG ZIG_VERSION="0.12.0-dev.163+6780a6bbf"
ARG WEBKIT_BASENAME="bun-webkit-linux-$BUILDARCH"
ARG ZIG_FOLDERNAME=zig-linux-${BUILD_MACHINE_ARCH}-${ZIG_VERSION}
@@ -20,19 +20,17 @@ ARG ZIG_FILENAME=${ZIG_FOLDERNAME}.tar.xz
ARG WEBKIT_URL="https://github.com/oven-sh/WebKit/releases/download/$WEBKIT_TAG/${WEBKIT_BASENAME}.tar.gz"
ARG ZIG_URL="https://ziglang.org/builds/${ZIG_FILENAME}"
ARG GIT_SHA=""
ARG BUN_BASE_VERSION=0.7
ARG BUN_BASE_VERSION=1.0
FROM bitnami/minideb:bullseye as bun-base
RUN install_packages ca-certificates curl wget lsb-release software-properties-common gnupg gnupg1 gnupg2
RUN wget https://apt.llvm.org/llvm.sh && \
chmod +x llvm.sh && \
./llvm.sh 15
RUN install_packages \
RUN install_packages ca-certificates curl wget lsb-release software-properties-common gnupg gnupg1 gnupg2 && \
echo "deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-16 main" > /etc/apt/sources.list.d/llvm.list && \
echo "deb-src https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-16 main" >> /etc/apt/sources.list.d/llvm.list && \
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
install_packages \
cmake \
curl \
file \
git \
gnupg \
@@ -46,16 +44,16 @@ RUN install_packages \
rsync \
ruby \
unzip \
clang-16 \
lld-16 \
lldb-16 \
clangd-16 \
xz-utils \
bash tar gzip ccache
ENV CXX=clang++-15
ENV CC=clang-15
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
install_packages nodejs && \
bash tar gzip ccache nodejs && \
npm install -g esbuild
ENV CXX=clang++-16
ENV CC=clang-16
ARG DEBIAN_FRONTEND
ARG GITHUB_WORKSPACE
@@ -72,10 +70,10 @@ ARG ZIG_FILENAME
ENV WEBKIT_OUT_DIR=${WEBKIT_DIR}
ENV BUILDARCH=${BUILDARCH}
ENV AR=/usr/bin/llvm-ar-15
ENV AR=/usr/bin/llvm-ar-16
ENV ZIG "${ZIG_PATH}/zig"
ENV PATH="$ZIG/bin:$PATH"
ENV LD=lld-15
ENV LD=lld-16
RUN mkdir -p $BUN_DIR $BUN_DEPS_OUT_DIR
@@ -157,7 +155,7 @@ COPY src/deps/lol-html ${BUN_DIR}/src/deps/lol-html
ENV CCACHE_DIR=/ccache
RUN --mount=type=cache,target=/ccache export PATH=$PATH:$HOME/.cargo/bin && export CC=$(which clang-15) && cd ${BUN_DIR} && \
RUN --mount=type=cache,target=/ccache export PATH=$PATH:$HOME/.cargo/bin && export CC=$(which clang-16) && cd ${BUN_DIR} && \
make lolhtml && rm -rf src/deps/lol-html Makefile
FROM bun-base as mimalloc
@@ -284,16 +282,18 @@ ARG CPU_TARGET
ENV CPU_TARGET=${CPU_TARGET}
COPY Makefile ${BUN_DIR}/Makefile
COPY src/deps/uws ${BUN_DIR}/src/deps/uws
COPY packages/bun-uws ${BUN_DIR}/packages/bun-uws
COPY packages/bun-usockets ${BUN_DIR}/packages/bun-usockets
COPY src/deps/zlib ${BUN_DIR}/src/deps/zlib
COPY src/deps/boringssl/include ${BUN_DIR}/src/deps/boringssl/include
COPY src/deps/c-ares/include ${BUN_DIR}/src/deps/c-ares/include
COPY src/deps/libuwsockets.cpp ${BUN_DIR}/src/deps/libuwsockets.cpp
COPY src/deps/_libusockets.h ${BUN_DIR}/src/deps/_libusockets.h
WORKDIR $BUN_DIR
RUN cd $BUN_DIR && \
make uws && rm -rf src/deps/uws Makefile
make uws && rm -rf packages/bun-uws Makefile
FROM bun-base as base64

206
Makefile
View File

@@ -6,8 +6,6 @@ BUN_AUTO_UPDATER_REPO = Jarred-Sumner/bun-releases-for-updater
CMAKE_CXX_COMPILER_LAUNCHER_FLAG :=
# 'make' command will trigger the help target
.DEFAULT_GOAL := help
@@ -20,7 +18,7 @@ CPU_TARGET ?= native
MARCH_NATIVE = -mtune=$(CPU_TARGET)
NATIVE_OR_OLD_MARCH =
MMD_IF_LOCAL =
MMD_IF_LOCAL =
DEFAULT_MIN_MACOS_VERSION=
ARCH_NAME :=
DOCKER_BUILDARCH =
@@ -40,7 +38,7 @@ NATIVE_OR_OLD_MARCH = -march=nehalem
endif
MIN_MACOS_VERSION ?= $(DEFAULT_MIN_MACOS_VERSION)
BUN_BASE_VERSION = 0.7
BUN_BASE_VERSION = 1.0
CI ?= false
@@ -84,9 +82,9 @@ ZIG ?= $(shell which zig 2>/dev/null || echo -e "error: Missing zig. Please make
# This is easier to happen than you'd expect.
# Using realpath here causes issues because clang uses clang++ as a symlink
# so if that's resolved, it won't build for C++
REAL_CC = $(shell which clang-15 2>/dev/null || which clang 2>/dev/null)
REAL_CXX = $(shell which clang++-15 2>/dev/null || which clang++ 2>/dev/null)
CLANG_FORMAT = $(shell which clang-format-15 2>/dev/null || which clang-format 2>/dev/null)
REAL_CC = $(shell which clang-16 2>/dev/null || which clang 2>/dev/null)
REAL_CXX = $(shell which clang++-16 2>/dev/null || which clang++ 2>/dev/null)
CLANG_FORMAT = $(shell which clang-format-16 2>/dev/null || which clang-format 2>/dev/null)
CC = $(REAL_CC)
CXX = $(REAL_CXX)
@@ -110,14 +108,14 @@ CC_WITH_CCACHE = $(CCACHE_PATH) $(CC)
ifeq ($(OS_NAME),darwin)
# Find LLVM
ifeq ($(wildcard $(LLVM_PREFIX)),)
LLVM_PREFIX = $(shell brew --prefix llvm@15)
LLVM_PREFIX = $(shell brew --prefix llvm@16)
endif
ifeq ($(wildcard $(LLVM_PREFIX)),)
LLVM_PREFIX = $(shell brew --prefix llvm)
endif
ifeq ($(wildcard $(LLVM_PREFIX)),)
# This is kinda ugly, but I can't find a better way to error :(
LLVM_PREFIX = $(shell echo -e "error: Unable to find llvm. Please run 'brew install llvm@15' or set LLVM_PREFIX=/path/to/llvm")
LLVM_PREFIX = $(shell echo -e "error: Unable to find llvm. Please run 'brew install llvm@16' or set LLVM_PREFIX=/path/to/llvm")
endif
LDFLAGS += -L$(LLVM_PREFIX)/lib
@@ -157,7 +155,7 @@ CMAKE_FLAGS_WITHOUT_RELEASE = -DCMAKE_C_COMPILER=$(CC) \
-DCMAKE_OSX_DEPLOYMENT_TARGET=$(MIN_MACOS_VERSION) \
$(CMAKE_CXX_COMPILER_LAUNCHER_FLAG) \
-DCMAKE_AR=$(AR) \
-DCMAKE_RANLIB=$(which llvm-15-ranlib 2>/dev/null || which llvm-ranlib 2>/dev/null)
-DCMAKE_RANLIB=$(which llvm-16-ranlib 2>/dev/null || which llvm-ranlib 2>/dev/null)
@@ -179,7 +177,7 @@ endif
ifeq ($(OS_NAME),linux)
LIBICONV_PATH =
AR = $(shell which llvm-ar-15 2>/dev/null || which llvm-ar 2>/dev/null || which ar 2>/dev/null)
AR = $(shell which llvm-ar-16 2>/dev/null || which llvm-ar 2>/dev/null || which ar 2>/dev/null)
endif
OPTIMIZATION_LEVEL=-O3 $(MARCH_NATIVE)
@@ -276,7 +274,7 @@ STRIP=/usr/bin/strip
endif
ifeq ($(OS_NAME),linux)
STRIP=$(shell which llvm-strip 2>/dev/null || which llvm-strip-15 2>/dev/null || which strip 2>/dev/null || echo "Missing strip")
STRIP=$(shell which llvm-strip 2>/dev/null || which llvm-strip-16 2>/dev/null || which strip 2>/dev/null || echo "Missing strip")
endif
@@ -351,10 +349,10 @@ LINUX_INCLUDE_DIRS := $(ALL_JSC_INCLUDE_DIRS) \
-I$(ZLIB_INCLUDE_DIR)
UWS_INCLUDE_DIR := -I$(BUN_DEPS_DIR)/uws/uSockets/src -I$(BUN_DEPS_DIR)/uws/src -I$(BUN_DEPS_DIR)
UWS_INCLUDE_DIR := -I$(BUN_DIR)/packages/bun-usockets/src -I$(BUN_DIR)/packages -I$(BUN_DEPS_DIR)
INCLUDE_DIRS := $(UWS_INCLUDE_DIR) -I$(BUN_DEPS_DIR)/mimalloc/include -I$(BUN_DEPS_DIR)/zstd/include -Isrc/napi -I$(BUN_DEPS_DIR)/boringssl/include -I$(BUN_DEPS_DIR)/c-ares/include
INCLUDE_DIRS := $(UWS_INCLUDE_DIR) -I$(BUN_DEPS_DIR)/mimalloc/include -I$(BUN_DEPS_DIR)/zstd/include -Isrc/napi -I$(BUN_DEPS_DIR)/boringssl/include -I$(BUN_DEPS_DIR)/c-ares/include -Isrc/bun.js/modules
ifeq ($(OS_NAME),linux)
@@ -403,6 +401,7 @@ CLANG_FLAGS = $(INCLUDE_DIRS) \
-DSTATICALLY_LINKED_WITH_BMALLOC=1 \
-DBUILDING_WITH_CMAKE=1 \
-DBUN_SINGLE_THREADED_PER_VM_ENTRY_SCOPE=1 \
-DNAPI_EXPERIMENTAL=ON \
-DNDEBUG=1 \
-DNOMINMAX \
-DIS_BUILD \
@@ -551,27 +550,18 @@ tinycc:
cd $(TINYCC_DIR) && \
make clean && \
AR=$(AR) $(CCACHE_CC_FLAG) CFLAGS='$(CFLAGS_WITHOUT_MARCH) $(NATIVE_OR_OLD_MARCH) -mtune=native $(TINYCC_CFLAGS)' ./configure --enable-static --cc=$(CCACHE_CC_OR_CC) --ar=$(AR) --config-predefs=yes && \
make -j10 && \
make libtcc.a -j10 && \
cp $(TINYCC_DIR)/*.a $(BUN_DEPS_OUT_DIR)
PYTHON=$(shell which python 2>/dev/null || which python3 2>/dev/null || which python2 2>/dev/null)
.PHONY: builtins
builtins:
NODE_ENV=production bun src/js/builtins/codegen/index.ts --minify
.PHONY: esm
esm:
NODE_ENV=production bun src/js/build-esm.ts
js: # to rebundle js (rebuilding binary not needed to reload js code)
NODE_ENV=production bun src/js/_codegen/index.ts
esm-debug:
BUN_DEBUG_QUIET_LOGS=1 NODE_ENV=production bun-debug src/js/build-esm.ts
.PHONY: generate-builtins
generate-builtins: builtins
BUN_TYPES_REPO_PATH ?= $(realpath packages/bun-types)
ifeq ($(DEBUG),true)
@@ -671,10 +661,10 @@ else
PKGNAME_NINJA := ninja-build
endif
.PHONY: require
require:
.PHONY: assert-deps
assert-deps:
@echo "Checking if the required utilities are available..."
@if [ $(CLANG_VERSION) -lt "15" ]; then echo -e "ERROR: clang version >=15 required, found: $(CLANG_VERSION). Install with:\n\n $(POSIX_PKG_MANAGER) install llvm@15"; exit 1; fi
@if [ $(CLANG_VERSION) -lt "15" ]; then echo -e "ERROR: clang version >=15 required, found: $(CLANG_VERSION). Install with:\n\n $(POSIX_PKG_MANAGER) install llvm@16"; exit 1; fi
@cmake --version >/dev/null 2>&1 || (echo -e "ERROR: cmake is required."; exit 1)
@$(PYTHON) --version >/dev/null 2>&1 || (echo -e "ERROR: python is required."; exit 1)
@$(ESBUILD) --version >/dev/null 2>&1 || (echo -e "ERROR: esbuild is required."; exit 1)
@@ -684,6 +674,9 @@ require:
@which $(LIBTOOL) > /dev/null || (echo -e "ERROR: libtool is required. Install with:\n\n $(POSIX_PKG_MANAGER) install libtool"; exit 1)
@which ninja > /dev/null || (echo -e "ERROR: Ninja is required. Install with:\n\n $(POSIX_PKG_MANAGER) install $(PKGNAME_NINJA)"; exit 1)
@which pkg-config > /dev/null || (echo -e "ERROR: pkg-config is required. Install with:\n\n $(POSIX_PKG_MANAGER) install pkg-config"; exit 1)
@which rustc > /dev/null || (echo -e "ERROR: rustc is required." exit 1)
@which cargo > /dev/null || (echo -e "ERROR: cargo is required." exit 1)
@test $(shell cargo --version | awk '{print $$2}' | cut -d. -f2) -gt 57 || (echo -e "ERROR: cargo version must be at least 1.57."; exit 1)
@echo "You have the dependencies installed! Woo"
# the following allows you to run `make submodule` to update or init submodules. but we will exclude webkit
@@ -714,44 +707,46 @@ dev-build-obj-wasm:
.PHONY: dev-wasm
dev-wasm: dev-build-obj-wasm
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init']" \
-g -s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/libmimalloc.a.wasm \
packages/debug-bun-freestanding-wasm32/bun-wasm.o $(OPTIMIZATION_LEVEL) --no-entry --allow-undefined -s ASSERTIONS=0 -s ALLOW_MEMORY_GROWTH=1 -s WASM_BIGINT=1 \
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init', '_getTests']" \
-g2 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/$(MIMALLOC_FILE).wasm \
packages/debug-bun-freestanding-wasm32/bun-wasm.o --no-entry --allow-undefined -s ASSERTIONS=0 -s ALLOW_MEMORY_GROWTH=1 -s WASM_BIGINT=1 \
-o packages/debug-bun-freestanding-wasm32/bun-wasm.wasm
cp packages/debug-bun-freestanding-wasm32/bun-wasm.wasm src/api/demo/public/bun-wasm.wasm
cp packages/debug-bun-freestanding-wasm32/bun-wasm.wasm packages/bun-wasm/bun.wasm
.PHONY: build-obj-wasm
build-obj-wasm:
$(ZIG) build bun-wasm -Doptimize=ReleaseFast -Dtarget=wasm32-freestanding
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init']" \
-g -s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/libmimalloc.a.wasm \
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init', '_getTests']" \
-s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/$(MIMALLOC_FILE).wasm \
packages/bun-freestanding-wasm32/bun-wasm.o $(OPTIMIZATION_LEVEL) --no-entry --allow-undefined -s ASSERTIONS=0 -s ALLOW_MEMORY_GROWTH=1 -s WASM_BIGINT=1 \
-o packages/bun-freestanding-wasm32/bun-wasm.wasm
cp packages/bun-freestanding-wasm32/bun-wasm.wasm src/api/demo/public/bun-wasm.wasm
cp packages/bun-freestanding-wasm32/bun-wasm.wasm packages/bun-wasm/bun.wasm
.PHONY: build-obj-wasm-small
build-obj-wasm-small:
$(ZIG) build bun-wasm -Doptimize=ReleaseSmall -Dtarget=wasm32-freestanding
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init']" \
-g -s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/libmimalloc.a.wasm \
$(ZIG) build bun-wasm -Doptimize=ReleaseFast -Dtarget=wasm32-freestanding
emcc -sEXPORTED_FUNCTIONS="['_bun_free', '_cycleStart', '_cycleEnd', '_bun_malloc', '_scan', '_transform', '_init', '_getTests']" \
-Oz -s ERROR_ON_UNDEFINED_SYMBOLS=0 -DNDEBUG \
$(BUN_DEPS_DIR)/$(MIMALLOC_FILE).wasm \
packages/bun-freestanding-wasm32/bun-wasm.o -Oz --no-entry --allow-undefined -s ASSERTIONS=0 -s ALLOW_MEMORY_GROWTH=1 -s WASM_BIGINT=1 \
-o packages/bun-freestanding-wasm32/bun-wasm.wasm
cp packages/bun-freestanding-wasm32/bun-wasm.wasm src/api/demo/public/bun-wasm.wasm
cp packages/bun-freestanding-wasm32/bun-wasm.wasm packages/bun-wasm/bun.wasm
.PHONY: wasm
wasm: api build-obj-wasm-small
@rm -rf packages/bun-wasm/*.{d.ts,js,wasm,cjs,mjs,tsbuildinfo}
wasm: api mimalloc-wasm build-obj-wasm-small
@rm -rf packages/bun-wasm/*.{d.ts,d.cts,d.mts,js,wasm,cjs,mjs,tsbuildinfo}
@cp packages/bun-freestanding-wasm32/bun-wasm.wasm packages/bun-wasm/bun.wasm
@cp src/api/schema.d.ts packages/bun-wasm/schema.d.ts
@cp src/api/schema.js packages/bun-wasm/schema.js
@cd packages/bun-wasm && $(NPM_CLIENT) run tsc -- -p .
@$(ESBUILD) --sourcemap=external --external:fs --define:process.env.NODE_ENV='"production"' --outdir=packages/bun-wasm --target=esnext --bundle packages/bun-wasm/index.ts --format=esm --minify 2> /dev/null
@cp packages/bun-wasm/index.d.ts packages/bun-wasm/index.d.cts
@mv packages/bun-wasm/index.d.ts packages/bun-wasm/index.d.mts
@bun build --sourcemap=external --external=fs --outdir=packages/bun-wasm --target=browser --minify ./packages/bun-wasm/index.ts
@mv packages/bun-wasm/index.js packages/bun-wasm/index.mjs
@mv packages/bun-wasm/index.js.map packages/bun-wasm/index.mjs.map
@$(ESBUILD) --sourcemap=external --external:fs --define:process.env.NODE_ENV='"production"' --outdir=packages/bun-wasm --target=esnext --bundle packages/bun-wasm/index.ts --format=cjs --minify --platform=node 2> /dev/null
@$(ESBUILD) --sourcemap=external --external:fs --outdir=packages/bun-wasm --target=esnext --bundle packages/bun-wasm/index.ts --format=cjs --minify --platform=node 2> /dev/null
@mv packages/bun-wasm/index.js packages/bun-wasm/index.cjs
@mv packages/bun-wasm/index.js.map packages/bun-wasm/index.cjs.map
@rm -rf packages/bun-wasm/*.tsbuildinfo
@@ -765,17 +760,17 @@ build-obj-safe:
UWS_CC_FLAGS = -pthread -DLIBUS_USE_OPENSSL=1 -DUWS_HTTPRESPONSE_NO_WRITEMARK=1 -DLIBUS_USE_BORINGSSL=1 -DWITH_BORINGSSL=1 -Wpedantic -Wall -Wextra -Wsign-conversion -Wconversion $(UWS_INCLUDE) -DUWS_WITH_PROXY
UWS_CXX_FLAGS = $(UWS_CC_FLAGS) -std=$(CXX_VERSION) -fno-exceptions -fno-rtti
UWS_LDFLAGS = -I$(BUN_DEPS_DIR)/boringssl/include -I$(ZLIB_INCLUDE_DIR)
USOCKETS_DIR = $(BUN_DEPS_DIR)/uws/uSockets/
USOCKETS_SRC_DIR = $(BUN_DEPS_DIR)/uws/uSockets/src/
USOCKETS_DIR = $(BUN_DIR)/packages/bun-usockets
USOCKETS_SRC_DIR = $(USOCKETS_DIR)/src
usockets:
rm -rf $(BUN_DEPS_DIR)/uws/uSockets/*.o $(BUN_DEPS_DIR)/uws/uSockets/**/*.o $(BUN_DEPS_DIR)/uws/uSockets/*.a $(BUN_DEPS_DIR)/uws/uSockets/*.bc
cd $(USOCKETS_DIR) && $(CC_WITH_CCACHE) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CFLAGS) $(UWS_CC_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -c $(wildcard $(USOCKETS_SRC_DIR)/*.c) $(wildcard $(USOCKETS_SRC_DIR)/**/*.c)
cd $(USOCKETS_DIR) && $(CXX_WITH_CCACHE) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CXXFLAGS) $(UWS_CXX_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -c $(wildcard $(USOCKETS_SRC_DIR)/*.cpp) $(wildcard $(USOCKETS_SRC_DIR)/**/*.cpp)
rm -rf $(USOCKETS_DIR)/*.i $(USOCKETS_DIR)/*.bc $(USOCKETS_DIR)/*.o $(USOCKETS_DIR)/*.s $(USOCKETS_DIR)/*.ii $(USOCKETS_DIR)/*.s
cd $(USOCKETS_DIR) && $(CC_WITH_CCACHE) -I$(USOCKETS_SRC_DIR) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CFLAGS) $(UWS_CC_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -c $(wildcard $(USOCKETS_SRC_DIR)/*.c) $(wildcard $(USOCKETS_SRC_DIR)/**/*.c)
cd $(USOCKETS_DIR) && $(CXX_WITH_CCACHE) -I$(USOCKETS_SRC_DIR) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CXXFLAGS) $(UWS_CXX_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -c $(wildcard $(USOCKETS_SRC_DIR)/*.cpp) $(wildcard $(USOCKETS_SRC_DIR)/**/*.cpp)
cd $(USOCKETS_DIR) && $(AR) rcvs $(BUN_DEPS_OUT_DIR)/libusockets.a $(USOCKETS_DIR)/*.{o,bc}
uws: usockets
$(CXX_WITH_CCACHE) -O2 $(EMIT_LLVM_FOR_RELEASE) -fPIC -I$(BUN_DEPS_DIR)/uws/uSockets/src $(CLANG_FLAGS) $(CFLAGS) $(UWS_CXX_FLAGS) $(UWS_LDFLAGS) $(PLATFORM_LINKER_FLAGS) -c -I$(BUN_DEPS_DIR) $(BUN_DEPS_OUT_DIR)/libusockets.a $(BUN_DEPS_DIR)/libuwsockets.cpp -o $(BUN_DEPS_OUT_DIR)/libuwsockets.o
$(CXX_WITH_CCACHE) -O2 $(EMIT_LLVM_FOR_RELEASE) -fPIC -I$(USOCKETS_SRC_DIR) $(CLANG_FLAGS) $(CFLAGS) $(UWS_CXX_FLAGS) $(UWS_LDFLAGS) $(PLATFORM_LINKER_FLAGS) -c -I$(BUN_DEPS_DIR) $(BUN_DEPS_OUT_DIR)/libusockets.a $(BUN_DEPS_DIR)/libuwsockets.cpp -o $(BUN_DEPS_OUT_DIR)/libuwsockets.o
.PHONY: sign-macos-x64
sign-macos-x64:
@@ -816,7 +811,7 @@ fmt-cpp:
.PHONY: fmt-zig
fmt-zig:
cd src && zig fmt **/*.zig
cd src && $(ZIG) fmt **/*.zig
.PHONY: fmt
fmt: fmt-cpp fmt-zig
@@ -905,7 +900,8 @@ check-glibc-version-dependency:
ifeq ($(OS_NAME),darwin)
zig-win32:
$(ZIG) build -Dtarget=x86_64-windows
# Hardened runtime will not work with debugging
bun-codesign-debug:
@@ -949,6 +945,7 @@ headers:
$(ZIG) translate-c src/bun.js/bindings/headers.h > src/bun.js/bindings/headers.zig
$(BUN_OR_NODE) misctools/headers-cleaner.js
$(ZIG) fmt src/bun.js/bindings/headers.zig
$(CLANG_FORMAT) -i src/bun.js/bindings/ZigGeneratedCode.cpp
.PHONY: jsc-bindings-headers
jsc-bindings-headers: headers
@@ -1117,9 +1114,6 @@ endif
dev-obj-linux:
$(ZIG) build obj -Dtarget=x86_64-linux-gnu -Dcpu="$(CPU_TARGET)"
.PHONY: dev
dev: mkdir-dev esm dev-obj link ## compile zig changes + link bun
mkdir-dev:
mkdir -p $(DEBUG_PACKAGE_DIR)
@@ -1203,10 +1197,12 @@ jsc-build-mac-compile:
-DPORT="JSCOnly" \
-DENABLE_STATIC_JSC=ON \
-DENABLE_SINGLE_THREADED_VM_ENTRY_SCOPE=ON \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_THIN_ARCHIVES=OFF \
-DBUN_FAST_TLS=ON \
-DENABLE_FTL_JIT=ON \
-DUSE_BUN_JSC_ADDITIONS=ON \
-G Ninja \
$(CMAKE_FLAGS_WITHOUT_RELEASE) \
-DPTHREAD_JIT_PERMISSIONS_API=1 \
@@ -1225,9 +1221,11 @@ jsc-build-mac-compile-lto:
-DPORT="JSCOnly" \
-DENABLE_STATIC_JSC=ON \
-DENABLE_SINGLE_THREADED_VM_ENTRY_SCOPE=ON \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_THIN_ARCHIVES=OFF \
-DBUN_FAST_TLS=ON \
-DUSE_BUN_JSC_ADDITIONS=ON \
-DCMAKE_C_FLAGS="-flto=full" \
-DCMAKE_CXX_FLAGS="-flto=full" \
-DENABLE_FTL_JIT=ON \
@@ -1252,6 +1250,8 @@ jsc-build-mac-compile-debug:
-DUSE_THIN_ARCHIVES=OFF \
-DENABLE_FTL_JIT=ON \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DUSE_BUN_JSC_ADDITIONS=ON \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-G Ninja \
$(CMAKE_FLAGS_WITHOUT_RELEASE) \
-DPTHREAD_JIT_PERMISSIONS_API=1 \
@@ -1272,9 +1272,11 @@ jsc-build-linux-compile-config:
-DENABLE_STATIC_JSC=ON \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_THIN_ARCHIVES=OFF \
-DUSE_BUN_JSC_ADDITIONS=ON \
-DENABLE_FTL_JIT=ON \
-DENABLE_REMOTE_INSPECTOR=ON \
-DJSEXPORT_PRIVATE=WTF_EXPORT_DECLARATION \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-USE_VISIBILITY_ATTRIBUTE=1 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-G Ninja \
@@ -1289,7 +1291,7 @@ jsc-build-linux-compile-config:
jsc-build-linux-compile-build:
mkdir -p $(WEBKIT_RELEASE_DIR) && \
cd $(WEBKIT_RELEASE_DIR) && \
CFLAGS="$(CFLAGS) -Wl,--whole-archive -ffat-lto-objects" CXXFLAGS="$(CXXFLAGS) -Wl,--whole-archive -ffat-lto-objects" \
CFLAGS="$(CFLAGS) -Wl,--whole-archive -ffat-lto-objects" CXXFLAGS="$(CXXFLAGS) -Wl,--whole-archive -ffat-lto-objects -DUSE_BUN_JSC_ADDITIONS=ON" \
cmake --build $(WEBKIT_RELEASE_DIR) --config relwithdebuginfo --target jsc
@@ -1386,7 +1388,8 @@ mimalloc:
mimalloc-wasm:
cd $(BUN_DEPS_DIR)/mimalloc; emcmake cmake -DMI_BUILD_SHARED=OFF -DMI_BUILD_STATIC=ON -DMI_BUILD_TESTS=OFF -DMI_BUILD_OBJECT=ON ${MIMALLOC_OVERRIDE_FLAG} -DMI_USE_CXX=ON .; emmake make;
rm -rf $(BUN_DEPS_DIR)/mimalloc/CMakeCache* $(BUN_DEPS_DIR)/mimalloc/CMakeFiles
cd $(BUN_DEPS_DIR)/mimalloc; emcmake cmake -DMI_BUILD_SHARED=OFF -DMI_BUILD_STATIC=ON -DMI_BUILD_TESTS=OFF -GNinja -DMI_BUILD_OBJECT=ON ${MIMALLOC_OVERRIDE_FLAG} -DMI_USE_CXX=OFF .; emmake cmake --build .;
cp $(BUN_DEPS_DIR)/mimalloc/$(MIMALLOC_INPUT_PATH) $(BUN_DEPS_OUT_DIR)/$(MIMALLOC_FILE).wasm
# alias for link, incase anyone still types that
@@ -1479,7 +1482,7 @@ bun-relink: bun-relink-copy bun-link-lld-release bun-link-lld-release-dsym
bun-relink-fast: bun-relink-copy bun-link-lld-release-no-lto
wasm-return1:
zig build-lib -OReleaseSmall test/bun.js/wasm-return-1-test.zig -femit-bin=test/bun.js/wasm-return-1-test.wasm -target wasm32-freestanding
$(ZIG) build-lib -OReleaseSmall test/bun.js/wasm-return-1-test.zig -femit-bin=test/bun.js/wasm-return-1-test.wasm -target wasm32-freestanding
generate-classes:
bun src/bun.js/scripts/generate-classes.ts
@@ -1515,7 +1518,7 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1526,7 +1529,7 @@ $(OBJ_DIR)/%.o: src/bun.js/modules/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1537,7 +1540,7 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/webcore/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1548,7 +1551,7 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/sqlite/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1559,7 +1562,7 @@ $(OBJ_DIR)/%.o: src/io/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1570,7 +1573,7 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/node_os/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1581,7 +1584,7 @@ $(OBJ_DIR)/%.o: src/js/out/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1593,7 +1596,7 @@ $(OBJ_DIR)/%.o: src/bun.js/bindings/webcrypto/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM) \
-c -o $@ $<
@@ -1607,7 +1610,7 @@ $(DEBUG_OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
-DBUN_DEBUG \
$(EMIT_LLVM_FOR_DEBUG) \
-g3 -c -o $@ $<
@@ -1622,7 +1625,7 @@ $(DEBUG_OBJ_DIR)/%.o: $(SRC_DIR)/webcore/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1635,7 +1638,7 @@ $(DEBUG_OBJ_DIR)/%.o: src/io/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
-DBUN_DEBUG \
$(EMIT_LLVM_FOR_DEBUG) \
-g3 -c -o $@ $<
@@ -1651,7 +1654,7 @@ $(DEBUG_OBJ_DIR)/%.o: $(SRC_DIR)/sqlite/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1666,7 +1669,7 @@ $(DEBUG_OBJ_DIR)/%.o: $(SRC_DIR)/node_os/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1681,7 +1684,7 @@ $(DEBUG_OBJ_DIR)/%.o: src/js/out/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1694,7 +1697,7 @@ $(DEBUG_OBJ_DIR)/%.o: src/bun.js/modules/%.cpp
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1709,7 +1712,7 @@ $(DEBUG_OBJ_DIR)/%.o: src/bun.js/bindings/webcrypto/%.cpp
-fno-exceptions \
-I$(SRC_DIR) \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(EMIT_LLVM_FOR_DEBUG) \
-DBUN_DEBUG \
-g3 -c -o $@ $<
@@ -1822,7 +1825,7 @@ endif
build-unit: # to build your unit tests
@rm -rf zig-out/bin/$(testname)
@mkdir -p zig-out/bin
zig test $(realpath $(testpath)) \
$(ZIG) test $(realpath $(testpath)) \
$(testfilterflag) \
$(PACKAGE_MAP) \
--main-pkg-path $(BUN_DIR) \
@@ -1840,7 +1843,7 @@ build-unit: # to build your unit tests
run-all-unit-tests: # to run your unit tests
@rm -rf zig-out/bin/__main_test
@mkdir -p zig-out/bin
zig test src/main.zig \
$(ZIG) test src/main.zig \
$(PACKAGE_MAP) \
--main-pkg-path $(BUN_DIR) \
--test-no-exec \
@@ -1877,7 +1880,7 @@ PACKAGE_MAP = --pkg-begin async_io $(BUN_DIR)/src/io/io_darwin.zig --pkg-begin b
.PHONY: base64
base64:
cd $(BUN_DEPS_DIR)/base64 && make clean && cmake $(CMAKE_FLAGS) . && make
cd $(BUN_DEPS_DIR)/base64 && make clean && rm -rf CMakeCache.txt CMakeFiles && cmake $(CMAKE_FLAGS) . && make
cp $(BUN_DEPS_DIR)/base64/libbase64.a $(BUN_DEPS_OUT_DIR)/libbase64.a
.PHONY: cold-jsc-start
@@ -1888,7 +1891,7 @@ cold-jsc-start:
${MMD_IF_LOCAL} \
-fno-exceptions \
-fno-rtti \
-ferror-limit=1000 \
-ferror-limit=10 \
$(LIBICONV_PATH) \
$(DEFAULT_LINKER_FLAGS) \
$(PLATFORM_LINKER_FLAGS) \
@@ -1904,26 +1907,49 @@ vendor-without-npm: node-fallbacks runtime_js fallback_decoder bun_error mimallo
vendor-without-check: npm-install vendor-without-npm
.PHONY: vendor
vendor: require submodule vendor-without-check
vendor: assert-deps submodule vendor-without-check
.PHONY: vendor-dev
vendor-dev: require submodule npm-install-dev vendor-without-npm
vendor-dev: assert-deps submodule npm-install-dev vendor-without-npm
.PHONY: bun
bun: vendor identifier-cache build-obj bun-link-lld-release bun-codesign-release-local
.PHONY: regenerate-bindings
regenerate-bindings: ## compile src/js/builtins + all c++ code, does not link
@make clean-bindings builtins
.PHONY: static-hash-table
static-hash-table:
bun src/js/_codegen/static-hash-tables.ts
.PHONY: cpp
cpp: ## compile src/js/builtins + all c++ code then link
@make clean-bindings js
@make static-hash-table
@make bindings -j$(CPU_COUNT)
@make link
.PHONY: cpp
cpp-no-link:
@make clean-bindings js
@make bindings -j$(CPU_COUNT)
.PHONY: zig
zig: ## compile zig code then link
@make mkdir-dev dev-obj link
.PHONY: zig-no-link
zig-no-link:
@make mkdir-dev dev-obj
.PHONY: dev
dev: # combo of `make cpp` and `make zig`
@make cpp-no-link zig-no-link -j2
@make link
.PHONY: setup
setup: vendor-dev identifier-cache clean-bindings
make jsc-check
make bindings -j$(CPU_COUNT)
make jsc-check dev
@echo ""
@echo "Development environment setup complete"
@echo "Run \`make dev\` to build \`bun-debug\`"
@echo "First build complete!"
@echo "\"bun-debug\" is available at $(DEBUG_BIN)/bun-debug"
@echo ""
.PHONY: help

View File

@@ -24,14 +24,14 @@
## What is Bun?
> **Bun is still under development.** Use it to speed up your development workflows or run simpler production code in resource-constrained environments like serverless functions. We're working on more complete Node.js compatibility and integration with existing frameworks. Join the [Discord](https://bun.sh/discord) and watch the [GitHub repository](https://github.com/oven-sh/bun) to keeps tabs on future releases.
> **Bun is under active development.** Use it to speed up your development workflows or run simpler production code in resource-constrained environments like serverless functions. We're working on more complete Node.js compatibility and integration with existing frameworks. Join the [Discord](https://bun.sh/discord) and watch the [GitHub repository](https://github.com/oven-sh/bun) to keep tabs on future releases.
Bun is an all-in-one toolkit for JavaScript and TypeScript apps. It ships as a single executable called `bun`.
At its core is the _Bun runtime_, a fast JavaScript runtime designed as a drop-in replacement for Node.js. It's written in Zig and powered by JavaScriptCore under the hood, dramatically reducing startup times and memory usage.
```bash
bun run index.tsx # TS and JSX supported out of the box
bun run index.tsx # TS and JSX supported out-of-the-box
```
The `bun` command-line tool also implements a test runner, script runner, and Node.js-compatible package manager. Instead of 1,000 node_modules for development, you only need `bun`. Bun's built-in tools are significantly faster than existing options and usable in existing Node.js projects with little to no changes.
@@ -93,7 +93,8 @@ bun upgrade --canary
- [`bun run`](https://bun.sh/docs/cli/run)
- [`bun install`](https://bun.sh/docs/cli/install)
- [`bun test`](https://bun.sh/docs/cli/test)
- [`bun create`](https://bun.sh/docs/cli/create)
- [`bun init`](https://bun.sh/docs/templates#bun-init)
- [`bun create`](https://bun.sh/docs/templates#bun-create)
- [`bunx`](https://bun.sh/docs/cli/bunx)
- Runtime
- [Runtime](https://bun.sh/docs/runtime/index)
@@ -123,7 +124,6 @@ bun upgrade --canary
- [HTMLRewriter](https://bun.sh/docs/api/html-rewriter)
- [Testing](https://bun.sh/docs/api/test)
- [Utils](https://bun.sh/docs/api/utils)
- [DNS](https://bun.sh/docs/api/dns)
- [Node-API](https://bun.sh/docs/api/node-api)
## Contributing

12
SECURITY.md Normal file
View File

@@ -0,0 +1,12 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| 1.x.x | :white_check_mark: |
## Reporting a Vulnerability
Report any discovered vulnerabilities to the Bun team by emailing `security@bun.sh`. Your report will acknowledged within 5 days, and a team member will be assigned as the primary handler. To the greatest extent possible, the security team will endeavor to keep you informed of the progress being made towards a fix and full announcement, and may ask for additional information or guidance surrounding the reported issue.

View File

@@ -10,7 +10,7 @@ To run in Bun:
```bash
# so it doesn't run the vitest one
bun wiptest expect-to-equal.test.js
bun test expect-to-equal.test.js
```
To run in Jest:

View File

@@ -1,11 +1,33 @@
# `install` benchmark
Requires [`hyperfine`](https://github.com/sharkdp/hyperfine)
Requires [`hyperfine`](https://github.com/sharkdp/hyperfine). The goal of this benchmark is to compare installation performance of Bun with other package managers _when caches are hot_.
```
### With lockfile, online mode
To run the benchmark with the standard "install" command for each package manager:
```sh
$ hyperfine --prepare 'rm -rf node_modules' --warmup 1 --runs 3 'bun install' 'pnpm install' 'yarn' 'npm install'
```
### With lockfile, offline mode
Even though all packages are cached, some tools may hit the npm API during the version resolution step. (This is not the same as re-downloading a package.) To entirely avoid network calls, the other package managers require `--prefer-offline/--offline` flag. To run the benchmark using "offline" mode:
```sh
$ hyperfine --prepare 'rm -rf node_modules' --runs 1 'bun install' 'pnpm install --prefer-offline' 'yarn --offline' 'npm install --prefer-offline'
```
### Without lockfile, offline mode
To run the benchmark with offline mode but without lockfiles:
```sh
$ hyperfine --prepare 'rm -rf node_modules' --warmup 1 'rm bun.lockb && bun install' 'rm pnpm-lock.yaml && pnpm install --prefer-offline' 'rm yarn.lock && yarn --offline' 'rm package-lock.json && npm install --prefer-offline'
```
##
To check that the app is working as expected:
```

View File

@@ -1,14 +0,0 @@
import { bench, run } from "./runner.mjs";
import { Buffer } from "node:buffer";
const bigBuffer = Buffer.from("hello world".repeat(10000));
const converted = bigBuffer.toString("base64");
bench("Buffer.toString('base64')", () => {
return bigBuffer.toString("base64");
});
// bench("Buffer.from(str, 'base64')", () => {
// return Buffer.from(converted, "base64");
// });
await run();

View File

@@ -0,0 +1,29 @@
import { bench, run } from "./runner.mjs";
import { Buffer } from "node:buffer";
import crypto from "node:crypto";
const bigBuffer = Buffer.from("hello world".repeat(10000));
const converted = bigBuffer.toString("base64");
const uuid = crypto.randomBytes(16);
bench(`Buffer(${bigBuffer.byteLength}).toString('base64')`, () => {
return bigBuffer.toString("base64");
});
bench(`Buffer(${uuid.byteLength}).toString('base64')`, () => {
return uuid.toString("base64");
});
bench(`Buffer(${bigBuffer.byteLength}).toString('hex')`, () => {
return bigBuffer.toString("hex");
});
bench(`Buffer(${uuid.byteLength}).toString('hex')`, () => {
return uuid.toString("hex");
});
bench(`Buffer(${bigBuffer.byteLength}).toString('ascii')`, () => {
return bigBuffer.toString("ascii");
});
await run();

3
bench/snippets/cp-r.mjs Normal file
View File

@@ -0,0 +1,3 @@
import { cp } from "fs/promises";
await cp(process.argv[2], process.argv[3], { recursive: true });

31
bench/snippets/cp.mjs Normal file
View File

@@ -0,0 +1,31 @@
import { mkdirSync, writeFileSync } from "fs";
import { bench, run } from "./runner.mjs";
import { cp } from "fs/promises";
import { join } from "path";
import { tmpdir } from "os";
const hugeDirectory = (() => {
const root = join(tmpdir(), "huge");
const base = join(root, "directory", "for", "benchmarks", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
mkdirSync(base, {
recursive: true,
});
for (let i = 0; i < 1000; i++) {
writeFileSync(join(base, "file-" + i + ".txt"), "Hello, world! " + i);
}
return root;
})();
const hugeFilePath = join(tmpdir(), "huge-file-0.txt");
const hugeText = "Hello, world!".repeat(1000000);
writeFileSync(hugeFilePath, hugeText);
var hugeCopyI = 0;
bench("cp -r (1000 files)", async b => {
await cp(hugeDirectory, join(tmpdir(), "huge-copy" + hugeCopyI++), { recursive: true });
});
bench("cp 1 " + ((hugeText.length / 1024) | 0) + " KB file", async b => {
await cp(hugeFilePath, join(tmpdir(), "huge-file" + hugeCopyI++));
});
await run();

100
bench/snippets/private.mjs Normal file
View File

@@ -0,0 +1,100 @@
import { bench, run } from "../node_modules/mitata/src/cli.mjs";
// This is a benchmark of the performance impact of using private properties.
bench("Polyfillprivate", () => {
"use strict";
var __classPrivateFieldGet =
(this && this.__classPrivateFieldGet) ||
function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet =
(this && this.__classPrivateFieldSet) ||
function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
throw new TypeError("Cannot write private member to an object whose class did not declare it");
return kind === "a" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;
};
var _Foo_state, _Foo_inc;
class Foo {
constructor() {
_Foo_state.set(this, 1);
_Foo_inc.set(this, 13);
}
run() {
let n = 1000000;
while (n-- > 0) {
__classPrivateFieldSet(
this,
_Foo_state,
__classPrivateFieldGet(this, _Foo_state, "f") + __classPrivateFieldGet(this, _Foo_inc, "f"),
"f",
);
}
return n;
}
}
(_Foo_state = new WeakMap()), (_Foo_inc = new WeakMap());
new Foo().run();
});
bench("NativePrivates", () => {
class Foo {
#state = 1;
#inc = 13;
run() {
let n = 1000000;
while (n-- > 0) {
this.#state += this.#inc;
}
return n;
}
}
new Foo().run();
});
bench("ConventionalPrivates", () => {
class Foo {
_state = 1;
_inc = 13;
run() {
let n = 1000000;
while (n-- > 0) {
this._state += this._inc;
}
return n;
}
}
new Foo().run();
});
const _state = Symbol("state");
const _inc = Symbol("inc");
bench("SymbolPrivates", () => {
class Foo {
[_state] = 1;
[_inc] = 13;
run() {
let n = 1000000;
while (n-- > 0) {
this[_state] += this[_inc];
}
return n;
}
}
new Foo().run();
});
await run();

View File

@@ -0,0 +1,37 @@
import { bench, run } from "./runner.mjs";
const blob = new Blob(["<p id='foo'>Hello</p>"]);
bench("prepend", async () => {
await new HTMLRewriter()
.on("p", {
element(element) {
element.prepend("Hello");
},
})
.transform(new Response(blob))
.text();
});
bench("append", async () => {
await new HTMLRewriter()
.on("p", {
element(element) {
element.append("Hello");
},
})
.transform(new Response(blob))
.text();
});
bench("getAttribute", async () => {
await new HTMLRewriter()
.on("p", {
element(element) {
element.getAttribute("id");
},
})
.transform(new Response(blob))
.text();
});
await run();

22
bench/snippets/rmdir.mjs Normal file
View File

@@ -0,0 +1,22 @@
import { tmpdir } from "node:os";
import { promises, existsSync, mkdirSync } from "node:fs";
const count = 1024 * 12;
var queue = new Array(count);
var paths = new Array(count);
for (let i = 0; i < count; i++) {
const path = `${tmpdir()}/${Date.now()}.rm.dir${i}`;
try {
mkdirSync(path);
} catch (e) {}
paths[i] = path;
queue[i] = promises.rmdir(path);
}
await Promise.all(queue);
for (let i = 0; i < count; i++) {
if (existsSync(paths[i])) {
throw new Error(`Path ${paths[i]} was not removed`);
}
}

View File

@@ -9,9 +9,8 @@ bench("writeFile(/tmp/foo.txt, short string)", async () => {
await writeFile("/tmp/foo.txt", "short string", "utf8");
});
const buffer = Buffer.from("short string");
bench("writeFile(/tmp/foo.txt, Buffer.from(short string))", async () => {
await writeFile("/tmp/foo.txt", buffer);
await writeFile("/tmp/foo.txt", Buffer.from("short string"));
});
const fd = openSync("/tmp/foo.txt", "w");
@@ -22,7 +21,7 @@ bench("write(fd, short string)", () => {
});
bench("write(fd, Uint8Array(short string))", () => {
const bytesWritten = write(fd, buffer);
const bytesWritten = write(fd, Buffer.from("short string"));
if (bytesWritten !== 12) throw new Error("wrote !== 12");
});

119
build.zig
View File

@@ -1,4 +1,5 @@
const std = @import("std");
const pathRel = std.fs.path.relative;
const Wyhash = @import("./src/wyhash.zig").Wyhash;
var is_debug_build = false;
fn moduleSource(comptime out: []const u8) FileSource {
@@ -33,6 +34,10 @@ fn addInternalPackages(b: *Build, step: *CompileStep, _: std.mem.Allocator, _: [
break :brk b.createModule(.{
.source_file = FileSource.relative("src/io/io_linux.zig"),
});
} else if (target.isWindows()) {
break :brk b.createModule(.{
.source_file = FileSource.relative("src/io/io_windows.zig"),
});
}
break :brk b.createModule(.{
@@ -96,6 +101,7 @@ const BunBuildOptions = struct {
}
};
// relative to the prefix
var output_dir: []const u8 = "";
fn panicIfNotFound(comptime filepath: []const u8) []const u8 {
var file = std.fs.cwd().openFile(filepath, .{ .optimize = .read_only }) catch |err| {
@@ -130,6 +136,16 @@ const Module = std.build.Module;
const fs = std.fs;
pub fn build(b: *Build) !void {
build_(b) catch |err| {
if (@errorReturnTrace()) |trace| {
std.debug.dumpStackTrace(trace.*);
}
return err;
};
}
pub fn build_(b: *Build) !void {
// Standard target options allows the person running `zig build` to choose
// what target to build for. Here we do not override the defaults, which
// means any target is allowed, and the default is native. Other options
@@ -172,26 +188,25 @@ pub fn build(b: *Build) !void {
var triplet = triplet_buf[0 .. osname.len + cpuArchName.len + 1];
if (b.option([]const u8, "output-dir", "target to install to") orelse std.os.getenv("OUTPUT_DIR")) |output_dir_| {
output_dir = b.pathFromRoot(output_dir_);
output_dir = try pathRel(b.allocator, b.install_prefix, output_dir_);
} else {
const output_dir_base = try std.fmt.bufPrint(&output_dir_buf, "{s}{s}", .{ bin_label, triplet });
output_dir = b.pathFromRoot(output_dir_base);
output_dir = try pathRel(b.allocator, b.install_prefix, output_dir_base);
}
std.fs.cwd().makePath(output_dir) catch {};
is_debug_build = optimize == OptimizeMode.Debug;
const bun_executable_name = if (optimize == std.builtin.OptimizeMode.Debug) "bun-debug" else "bun";
const root_src = if (target.getOsTag() == std.Target.Os.Tag.freestanding)
"src/main_wasm.zig"
"root_wasm.zig"
else
"root.zig";
const min_version: std.SemanticVersion = if (target.getOsTag() != .freestanding)
const min_version: std.SemanticVersion = if (!(target.isWindows() or target.getOsTag() == .freestanding))
target.getOsVersionMin().semver
else
.{ .major = 0, .minor = 0, .patch = 0 };
const max_version: std.SemanticVersion = if (target.getOsTag() != .freestanding)
const max_version: std.SemanticVersion = if (!(target.isWindows() or target.getOsTag() == .freestanding))
target.getOsVersionMax().semver
else
.{ .major = 0, .minor = 0, .patch = 0 };
@@ -202,8 +217,11 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative(root_src),
.target = target,
.optimize = optimize,
.main_pkg_path = .{ .cwd_relative = b.pathFromRoot(".") },
});
b.reference_trace = 16;
var default_build_options: BunBuildOptions = brk: {
const is_baseline = arch.isX86() and (target.cpu_model == .baseline or
!std.Target.x86.featureSetHas(target.getCpuFeatures(), .avx2));
@@ -218,7 +236,6 @@ pub fn build(b: *Build) !void {
.argv = &.{
"git",
"rev-parse",
"--short",
"HEAD",
},
.cwd = b.pathFromRoot("."),
@@ -240,8 +257,6 @@ pub fn build(b: *Build) !void {
};
{
obj.setMainPkgPath(b.pathFromRoot("."));
try addInternalPackages(
b,
obj,
@@ -272,9 +287,15 @@ pub fn build(b: *Build) !void {
std.io.getStdErr().writer().print("Output: {s}/{s}\n\n", .{ output_dir, bun_executable_name }) catch unreachable;
defer obj_step.dependOn(&obj.step);
obj.emit_bin = .{
.emit_to = b.fmt("{s}/{s}.o", .{ output_dir, bun_executable_name }),
};
var install = b.addInstallFileWithDir(
obj.getEmittedBin(),
.{ .custom = output_dir },
b.fmt("{s}.o", .{bun_executable_name}),
);
install.step.dependOn(&obj.step);
obj_step.dependOn(&install.step);
var actual_build_options = default_build_options;
if (b.option(bool, "generate-sizes", "Generate sizes of things") orelse false) {
actual_build_options.sizegen = true;
@@ -291,7 +312,8 @@ pub fn build(b: *Build) !void {
if (target.getCpuArch().isX86()) obj.disable_stack_probing = true;
if (b.option(bool, "for-editor", "Do not emit bin, just check for errors") orelse false) {
obj.emit_bin = .no_emit;
// obj.emit_bin = .no_emit;
obj.generated_bin = null;
}
if (target.getOsTag() == .linux) {
@@ -309,9 +331,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("src/bindgen.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
var headers_build_options = default_build_options;
headers_build_options.bindgen = true;
headers_obj.addOptions("build_options", default_build_options.step(b));
@@ -319,19 +342,22 @@ pub fn build(b: *Build) !void {
}
{
const wasm = b.step("bun-wasm", "Build WASM");
var wasm_step = b.addStaticLibrary(.{
const wasm_step = b.step("bun-wasm", "Build WASM");
var wasm = b.addStaticLibrary(.{
.name = "bun-wasm",
.root_source_file = FileSource.relative("src/main_wasm.zig"),
.root_source_file = FileSource.relative("root_wasm.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer wasm.dependOn(&wasm_step.step);
wasm_step.strip = false;
defer wasm_step.dependOn(&wasm.step);
wasm.strip = false;
// wasm_step.link_function_sections = true;
// wasm_step.link_emit_relocs = true;
// wasm_step.single_threaded = true;
try configureObjectStep(b, wasm_step, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, wasm, wasm_step, @TypeOf(target), target);
var build_opts = default_build_options;
wasm.addOptions("build_options", build_opts.step(b));
}
{
@@ -341,9 +367,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("misctools/http_bench.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -354,9 +381,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("misctools/machbench.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -367,9 +395,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("misctools/fetch.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -380,9 +409,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("src/bench/string-handling.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -393,9 +423,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("src/sha.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -406,9 +437,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("src/sourcemap/vlq_bench.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -419,9 +451,10 @@ pub fn build(b: *Build) !void {
.root_source_file = FileSource.relative("misctools/tgz.zig"),
.target = target,
.optimize = optimize,
.main_pkg_path = obj.main_pkg_path,
});
defer headers_step.dependOn(&headers_obj.step);
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_obj.addOptions("build_options", default_build_options.step(b));
}
@@ -435,16 +468,23 @@ pub fn build(b: *Build) !void {
var headers_obj: *CompileStep = b.addTest(.{
.root_source_file = FileSource.relative(test_file orelse "src/main.zig"),
.target = target,
.main_pkg_path = obj.main_pkg_path,
});
headers_obj.filter = test_filter;
if (test_bin_) |test_bin| {
headers_obj.name = std.fs.path.basename(test_bin);
if (std.fs.path.dirname(test_bin)) |dir| headers_obj.emit_bin = .{
.emit_to = b.fmt("{s}/{s}", .{ dir, headers_obj.name }),
};
if (std.fs.path.dirname(test_bin)) |dir| {
var install = b.addInstallFileWithDir(
headers_obj.getEmittedBin(),
.{ .custom = try std.fs.path.relative(b.allocator, output_dir, dir) },
headers_obj.name,
);
install.step.dependOn(&headers_obj.step);
headers_step.dependOn(&install.step);
}
}
try configureObjectStep(b, headers_obj, @TypeOf(target), target, obj.main_pkg_path.?);
try configureObjectStep(b, headers_obj, headers_step, @TypeOf(target), target);
headers_step.dependOn(&headers_obj.step);
headers_obj.addOptions("build_options", default_build_options.step(b));
@@ -455,9 +495,7 @@ pub fn build(b: *Build) !void {
pub var original_make_fn: ?*const fn (step: *std.build.Step) anyerror!void = null;
pub fn configureObjectStep(b: *std.build.Builder, obj: *CompileStep, comptime Target: type, target: Target, main_pkg_path: []const u8) !void {
obj.setMainPkgPath(main_pkg_path);
pub fn configureObjectStep(b: *std.build.Builder, obj: *CompileStep, obj_step: *std.build.Step, comptime Target: type, target: Target) !void {
// obj.setTarget(target);
try addInternalPackages(b, obj, std.heap.page_allocator, b.zig_exe, target);
@@ -465,11 +503,16 @@ pub fn configureObjectStep(b: *std.build.Builder, obj: *CompileStep, comptime Ta
// obj.setBuildMode(optimize);
obj.bundle_compiler_rt = false;
if (obj.emit_bin == .default)
obj.emit_bin = .{
.emit_to = b.fmt("{s}/{s}.o", .{ output_dir, obj.name }),
};
if (obj.emit_directory == null) {
var install = b.addInstallFileWithDir(
obj.getEmittedBin(),
.{ .custom = output_dir },
b.fmt("{s}.o", .{obj.name}),
);
install.step.dependOn(&obj.step);
obj_step.dependOn(&install.step);
}
if (target.getOsTag() != .freestanding) obj.linkLibC();
if (target.getOsTag() != .freestanding) obj.bundle_compiler_rt = false;

BIN
bun.lockb

Binary file not shown.

View File

@@ -1,8 +1,8 @@
[test]
# Large monorepos (like Bun) may want to specify the test directory more specifically
# By default, `bun test` scans every single folder recurisvely which, if you
# have a gigantic submodule (like WebKit), it has to do lots of directory
# By default, `bun test` scans every single folder recursively which, if you
# have a gigantic submodule (like WebKit), requires lots of directory
# traversals
#
# Instead, we can just make it scan only the test directory for Bun's runtime tests
# Instead, we can only scan the test directory for Bun's runtime tests
root = "test"

View File

@@ -92,12 +92,12 @@ _bun_completions() {
PACKAGE_OPTIONS[REMOVE_OPTIONS_LONG]="";
PACKAGE_OPTIONS[REMOVE_OPTIONS_SHORT]="";
PACKAGE_OPTIONS[SHARED_OPTIONS_LONG]="--config --yarn --production --frozen-lockfile --no-save --dry-run --lockfile --force --cache-dir --no-cache --silent --verbose --global --cwd --backend --link-native-bins --help";
PACKAGE_OPTIONS[SHARED_OPTIONS_LONG]="--config --yarn --production --frozen-lockfile --no-save --dry-run --force --cache-dir --no-cache --silent --verbose --global --cwd --backend --link-native-bins --help";
PACKAGE_OPTIONS[SHARED_OPTIONS_SHORT]="-c -y -p -f -g";
PM_OPTIONS[LONG_OPTIONS]="--config --yarn --production --frozen-lockfile --no-save --dry-run --lockfile --force --cache-dir --no-cache --silent --verbose --no-progress --no-summary --no-verify --ignore-scripts --global --cwd --backend --link-native-bins --help"
PM_OPTIONS[LONG_OPTIONS]="--config --yarn --production --frozen-lockfile --no-save --dry-run --force --cache-dir --no-cache --silent --verbose --no-progress --no-summary --no-verify --ignore-scripts --global --cwd --backend --link-native-bins --help"
PM_OPTIONS[SHORT_OPTIONS]="-c -y -p -f -g"
local cur_word="${COMP_WORDS[${COMP_CWORD}]}";
local prev="${COMP_WORDS[$(( COMP_CWORD - 1 ))]}";

File diff suppressed because it is too large Load Diff

View File

@@ -119,9 +119,6 @@ subcommands:
- no-save --
- dry-run -- "Don't install anything"
- force -- "Always request the latest versions from the registry & reinstall all dependenices"
- name: lockfile
type: string
summary: "Store & load a lockfile at a specific filepath"
- name: cache-dir
type: string
summary: "Store & load cached data from a specific directory path"
@@ -160,9 +157,6 @@ subcommands:
- no-cache -- "Ignore manifest cache entirely"
- silent -- "Don't output anything"
- verbose -- "Excessively verbose logging"
- name: lockfile
type: string
summary: "Store & load a lockfile at a specific filepath"
- name: cache-dir
type: string
summary: "Store & load cached data from a specific directory path"
@@ -198,9 +192,6 @@ subcommands:
- no-save --
- dry-run -- "Don't install anything"
- force -- "Always request the latest versions from the registry & reinstall all dependenices"
- name: lockfile
type: string
summary: "Store & load a lockfile at a specific filepath"
- name: cache-dir
type: string
summary: "Store & load cached data from a specific directory path"

View File

@@ -1,29 +0,0 @@
# bun:alpine
# Not officially supported (yet)
ARG GLIBC_RELEASE=2.35-r0
FROM alpine:latest AS build
WORKDIR /tmp
RUN apk --no-cache add unzip
ARG GLIBC_RELEASE
RUN wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_RELEASE}/glibc-${GLIBC_RELEASE}.apk
ADD https://github.com/oven-sh/bun/releases/latest/download/bun-linux-x64.zip bun-linux-x64.zip
RUN unzip bun-linux-x64.zip
FROM alpine:latest
ARG GLIBC_RELEASE
COPY --from=build /tmp/sgerrand.rsa.pub /etc/apk/keys
COPY --from=build /tmp/glibc-${GLIBC_RELEASE}.apk /tmp
COPY --from=build /tmp/bun-linux-x64/bun /usr/local/bin
RUN apk --no-cache --force-overwrite add /tmp/glibc-${GLIBC_RELEASE}.apk \
&& rm /etc/apk/keys/sgerrand.rsa.pub \
&& rm /tmp/glibc-${GLIBC_RELEASE}.apk
RUN bun --version

View File

@@ -1,77 +0,0 @@
FROM debian:bullseye-slim AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=latest
RUN apt-get update -qq \
&& apt-get install -qq --no-install-recommends \
ca-certificates \
curl \
dirmngr \
gpg \
gpg-agent \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& arch="$(dpkg --print-architecture)" \
&& case "${arch##*-}" in \
amd64) build="x64-baseline";; \
arm64) build="aarch64";; \
*) echo "error: unsupported architecture: ($arch)"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
latest | canary | bun-v*) tag="$version"; ;; \
v*) tag="bun-$version"; ;; \
*) tag="bun-v$version"; ;; \
esac \
&& case "$tag" in \
latest) release="latest/download"; ;; \
*) release="download/$tag"; ;; \
esac \
&& curl "https://github.com/oven-sh/bun/releases/$release/bun-linux-$build.zip" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: unknown release: ($tag)" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& gpg --update-trustdb \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
FROM debian:bullseye-slim
RUN groupadd bun \
--gid 1000 \
&& useradd bun \
--uid 1000 \
--gid bun \
--shell /bin/sh \
--create-home
COPY docker-entrypoint.sh /usr/local/bin
COPY --from=build /usr/local/bin/bun /usr/local/bin
COPY --from=build /usr/local/bin/bunx /usr/local/bin
WORKDIR /home/bun/app
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["/usr/local/bin/bun"]

View File

@@ -1,68 +0,0 @@
FROM debian:bullseye-slim AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=latest
RUN apt-get update -qq \
&& apt-get install -qq --no-install-recommends \
ca-certificates \
curl \
dirmngr \
gpg \
gpg-agent \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& arch="$(dpkg --print-architecture)" \
&& case "${arch##*-}" in \
amd64) build="x64-baseline";; \
arm64) build="aarch64";; \
*) echo "error: unsupported architecture: ($arch)"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
latest | canary | bun-v*) tag="$version"; ;; \
v*) tag="bun-$version"; ;; \
*) tag="bun-v$version"; ;; \
esac \
&& case "$tag" in \
latest) release="latest/download"; ;; \
*) release="download/$tag"; ;; \
esac \
&& curl "https://github.com/oven-sh/bun/releases/$release/bun-linux-$build.zip" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: unknown release: ($tag)" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& gpg --update-trustdb \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
FROM gcr.io/distroless/base-nossl-debian11
COPY --from=build /usr/local/bin/bun /usr/local/bin
COPY --from=build /usr/local/bin/bunx /usr/local/bin
WORKDIR /app
ENTRYPOINT ["/usr/local/bin/bun"]
CMD ["/usr/local/bin/bun"]

113
dockerhub/alpine/Dockerfile Normal file
View File

@@ -0,0 +1,113 @@
FROM alpine:3.18 AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=latest
# TODO: Instead of downloading glibc from a third-party source, we should
# build it from source. This is a temporary solution.
# See: https://github.com/sgerrand/alpine-pkg-glibc
# https://github.com/sgerrand/alpine-pkg-glibc/releases
# https://github.com/sgerrand/alpine-pkg-glibc/issues/176
ARG GLIBC_VERSION=2.34-r0
# https://github.com/oven-sh/bun/issues/5545#issuecomment-1722461083
ARG GLIBC_VERSION_AARCH64=2.26-r1
RUN apk --no-cache add \
ca-certificates \
curl \
dirmngr \
gpg \
gpg-agent \
unzip \
&& arch="$(apk --print-arch)" \
&& case "${arch##*-}" in \
x86_64) build="x64-baseline";; \
aarch64) build="aarch64";; \
*) echo "error: unsupported architecture: $arch"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
latest | canary | bun-v*) tag="$version"; ;; \
v*) tag="bun-$version"; ;; \
*) tag="bun-v$version"; ;; \
esac \
&& case "$tag" in \
latest) release="latest/download"; ;; \
*) release="download/$tag"; ;; \
esac \
&& curl "https://github.com/oven-sh/bun/releases/$release/bun-linux-$build.zip" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: $tag" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& cd /tmp \
&& case "${arch##*-}" in \
x86_64) curl "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: glibc v${GLIBC_VERSION}" && exit 1) \
&& mv "glibc-${GLIBC_VERSION}.apk" glibc.apk \
&& curl "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: glibc-bin v${GLIBC_VERSION}" && exit 1) \
&& mv "glibc-bin-${GLIBC_VERSION}.apk" glibc-bin.apk ;; \
aarch64) curl "https://raw.githubusercontent.com/squishyu/alpine-pkg-glibc-aarch64-bin/master/glibc-${GLIBC_VERSION_AARCH64}.apk" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: glibc v${GLIBC_VERSION_AARCH64}" && exit 1) \
&& mv "glibc-${GLIBC_VERSION_AARCH64}.apk" glibc.apk \
&& curl "https://raw.githubusercontent.com/squishyu/alpine-pkg-glibc-aarch64-bin/master/glibc-bin-${GLIBC_VERSION_AARCH64}.apk" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: glibc-bin v${GLIBC_VERSION_AARCH64}" && exit 1) \
&& mv "glibc-bin-${GLIBC_VERSION_AARCH64}.apk" glibc-bin.apk ;; \
*) echo "error: unsupported architecture '$arch'"; exit 1 ;; \
esac
FROM alpine:3.18
COPY --from=build /tmp/glibc.apk /tmp/
COPY --from=build /tmp/glibc-bin.apk /tmp/
COPY --from=build /usr/local/bin/bun /usr/local/bin/
COPY docker-entrypoint.sh /usr/local/bin/
RUN addgroup -g 1000 bun \
&& adduser -u 1000 -G bun -s /bin/sh -D bun \
&& apk --no-cache --force-overwrite --allow-untrusted add \
/tmp/glibc.apk \
/tmp/glibc-bin.apk \
&& rm /tmp/glibc.apk \
&& rm /tmp/glibc-bin.apk \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
WORKDIR /home/bun/app
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["/usr/local/bin/bun"]

View File

@@ -1,7 +1,7 @@
FROM debian:bullseye-slim AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=0.5.7
ARG BUN_VERSION=latest
RUN apt-get update -qq \
&& apt-get install -qq --no-install-recommends \
@@ -17,7 +17,7 @@ RUN apt-get update -qq \
&& case "${arch##*-}" in \
amd64) build="x64-baseline";; \
arm64) build="aarch64";; \
*) echo "error: unsupported architecture: ($arch)"; exit 1 ;; \
*) echo "error: unsupported architecture: $arch"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
@@ -33,44 +33,44 @@ RUN apt-get update -qq \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: unknown release: ($tag)" && exit 1) \
|| (echo "error: failed to download: $tag" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& gpg --update-trustdb \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
FROM debian:bullseye-slim
COPY docker-entrypoint.sh /usr/local/bin
COPY --from=build /usr/local/bin/bun /usr/local/bin/bun
RUN groupadd bun \
--gid 1000 \
&& useradd bun \
--uid 1000 \
--gid bun \
--shell /bin/sh \
--create-home
COPY docker-entrypoint.sh /usr/local/bin
COPY --from=build /usr/local/bin/bun /usr/local/bin
COPY --from=build /usr/local/bin/bunx /usr/local/bin
--create-home \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
WORKDIR /home/bun/app
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

View File

@@ -1,7 +1,7 @@
FROM debian:bullseye-slim AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=0.5.7
ARG BUN_VERSION=latest
RUN apt-get update -qq \
&& apt-get install -qq --no-install-recommends \
@@ -17,7 +17,7 @@ RUN apt-get update -qq \
&& case "${arch##*-}" in \
amd64) build="x64-baseline";; \
arm64) build="aarch64";; \
*) echo "error: unsupported architecture: ($arch)"; exit 1 ;; \
*) echo "error: unsupported architecture: $arch"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
@@ -33,44 +33,42 @@ RUN apt-get update -qq \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: unknown release: ($tag)" && exit 1) \
|| (echo "error: failed to download: $tag" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& gpg --update-trustdb \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify release: ($tag)" && exit 1) \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
&& chmod +x /usr/local/bin/bun
FROM debian:bullseye
COPY docker-entrypoint.sh /usr/local/bin
COPY --from=build /usr/local/bin/bun /usr/local/bin/bun
RUN groupadd bun \
--gid 1000 \
&& useradd bun \
--uid 1000 \
--gid bun \
--shell /bin/sh \
--create-home
COPY docker-entrypoint.sh /usr/local/bin
COPY --from=build /usr/local/bin/bun /usr/local/bin
COPY --from=build /usr/local/bin/bunx /usr/local/bin
--create-home \
&& ln -s /usr/local/bin/bun /usr/local/bin/bunx \
&& which bun \
&& which bunx \
&& bun --version
WORKDIR /home/bun/app
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

View File

@@ -0,0 +1,69 @@
FROM debian:bullseye-slim AS build
# https://github.com/oven-sh/bun/releases
ARG BUN_VERSION=latest
RUN apt-get update -qq \
&& apt-get install -qq --no-install-recommends \
ca-certificates \
curl \
dirmngr \
gpg \
gpg-agent \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& arch="$(dpkg --print-architecture)" \
&& case "${arch##*-}" in \
amd64) build="x64-baseline";; \
arm64) build="aarch64";; \
*) echo "error: unsupported architecture: $arch"; exit 1 ;; \
esac \
&& version="$BUN_VERSION" \
&& case "$version" in \
latest | canary | bun-v*) tag="$version"; ;; \
v*) tag="bun-$version"; ;; \
*) tag="bun-v$version"; ;; \
esac \
&& case "$tag" in \
latest) release="latest/download"; ;; \
*) release="download/$tag"; ;; \
esac \
&& curl "https://github.com/oven-sh/bun/releases/$release/bun-linux-$build.zip" \
-fsSLO \
--compressed \
--retry 5 \
|| (echo "error: failed to download: $tag" && exit 1) \
&& for key in \
"F3DCC08A8572C0749B3E18888EAB4D40A7B22B59" \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" \
|| gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& curl "https://github.com/oven-sh/bun/releases/$release/SHASUMS256.txt.asc" \
-fsSLO \
--compressed \
--retry 5 \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& grep " bun-linux-$build.zip\$" SHASUMS256.txt | sha256sum -c - \
|| (echo "error: failed to verify: $tag" && exit 1) \
&& unzip "bun-linux-$build.zip" \
&& mv "bun-linux-$build/bun" /usr/local/bin/bun \
&& rm -f "bun-linux-$build.zip" SHASUMS256.txt.asc SHASUMS256.txt \
&& chmod +x /usr/local/bin/bun \
&& which bun \
&& bun --version
FROM gcr.io/distroless/base-nossl-debian11
COPY --from=build /usr/local/bin/bun /usr/local/bin/
# Temporarily use the `build`-stage image binaries to create a symlink:
RUN --mount=type=bind,from=build,source=/usr/bin,target=/usr/bin \
--mount=type=bind,from=build,source=/bin,target=/bin <<EOF
ln -s /usr/local/bin/bun /usr/local/bin/bunx
which bunx
EOF
ENTRYPOINT ["/usr/local/bin/bun"]

View File

@@ -74,7 +74,7 @@ dv.getUint8(0); // => 3
// [0x11, 0x0, 0x0, 0x0]
```
Now lets write a `Uint16` at byte offset `1`. This requires two bytes. We're using the value `513`, which is `2 * 256 + 1`; in bytes, that's `00000010 00000001`.
Now let's write a `Uint16` at byte offset `1`. This requires two bytes. We're using the value `513`, which is `2 * 256 + 1`; in bytes, that's `00000010 00000001`.
```ts
dv.setUint16(1, 513);
@@ -90,7 +90,7 @@ console.log(dv.getUint8(1)); // => 2
console.log(dv.getUint8(2)); // => 1
```
Attempting to write a value that requires more space than is available in the underlying `ArrayBuffer` will cuase an error. Below we attempt to write a `Float64` (which requires 8 bytes) at byte offset `0`, but there are only four total bytes in the buffer.
Attempting to write a value that requires more space than is available in the underlying `ArrayBuffer` will cause an error. Below we attempt to write a `Float64` (which requires 8 bytes) at byte offset `0`, but there are only four total bytes in the buffer.
```ts
dv.setFloat64(0, 3.1415);
@@ -412,7 +412,7 @@ For complete documentation, refer to the [Node.js documentation](https://nodejs.
`Blob` is a Web API commonly used for representing files. `Blob` was initially implemented in browsers (unlike `ArrayBuffer` which is part of JavaScript itself), but it is now supported in Node and Bun.
It isn't common to directly create `Blob` instances. More often, you'll recieve instances of `Blob` from an external source (like an `<input type="file">` element in the browser) or library. That said, it is possible to create a `Blob` from one or more string or binary "blob parts".
It isn't common to directly create `Blob` instances. More often, you'll receive instances of `Blob` from an external source (like an `<input type="file">` element in the browser) or library. That said, it is possible to create a `Blob` from one or more string or binary "blob parts".
```ts
const blob = new Blob(["<html>Hello</html>"], {
@@ -507,7 +507,7 @@ for await (const chunk of stream) {
}
```
For a more complete discusson of streams in Bun, see [API > Streams](/docs/api/streams).
For a more complete discussion of streams in Bun, see [API > Streams](/docs/api/streams).
## Conversion

View File

@@ -229,7 +229,11 @@ const lib = linkSymbols({
},
});
const [major, minor, patch] = [lib.symbols.getMajor(), lib.symbols.getMinor(), lib.symbols.getPatch()];
const [major, minor, patch] = [
lib.symbols.getMajor(),
lib.symbols.getMinor(),
lib.symbols.getPatch(),
];
```
## Callbacks
@@ -249,10 +253,13 @@ const {
},
});
const searchIterator = new JSCallback((ptr, length) => /hello/.test(new CString(ptr, length)), {
returns: "bool",
args: ["ptr", "usize"],
});
const searchIterator = new JSCallback(
(ptr, length) => /hello/.test(new CString(ptr, length)),
{
returns: "bool",
args: ["ptr", "usize"],
},
);
const str = Buffer.from("wwutwutwutwutwutwutwutwutwutwutut\0", "utf8");
if (search(ptr(str), searchIterator)) {
@@ -376,10 +383,6 @@ If you want to track when a `TypedArray` is no longer in use from JavaScript, yo
#### From C, Rust, Zig, etc
{% callout %}
**Note** — Available in Bun v0.1.8 and later.
{% /callout %}
If you want to track when a `TypedArray` is no longer in use from C or FFI, you can pass a callback and an optional context pointer to `toArrayBuffer` or `toBuffer`. This function is called at some point later, once the garbage collector frees the underlying `ArrayBuffer` JavaScript object.
The expected signature is the same as in [JavaScriptCore's C API](https://developer.apple.com/documentation/javascriptcore/jstypedarraybytesdeallocator?language=objc):

View File

@@ -1,8 +1,8 @@
{% callout %}
<!-- **Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. Existing Node.js projects may use Bun's [nearly complete](/docs/runtime/nodejs-apis#node_fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module. -->
<!-- **Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. Existing Node.js projects may use Bun's [nearly complete](/docs/runtime/nodejs-apis#node-fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module. -->
**Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. For operations that are not yet available with `Bun.file`, such as `mkdir`, you can use Bun's [nearly complete](/docs/runtime/nodejs-apis#node_fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module.
**Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. For operations that are not yet available with `Bun.file`, such as `mkdir` or `readdir`, you can use Bun's [nearly complete](/docs/runtime/nodejs-apis#node-fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module.
{% /callout %}
@@ -195,7 +195,7 @@ const input = Bun.file("input.txt");
await Bun.write(Bun.stdout, input);
```
To write an HTTP response to disk:
To write the body of an HTTP response to disk:
```ts
const response = await fetch("https://bun.sh");

View File

@@ -93,6 +93,7 @@ interface Bun {
style: "nextjs";
origin?: string;
assetPrefix?: string;
fileExtensions?: string[];
});
reload(): void;

View File

@@ -34,7 +34,7 @@ Bun implements the following globals.
- [`Buffer`](https://nodejs.org/api/buffer.html#class-buffer)
- Node.js
- See [Node.js > `Buffer`](/docs/runtime/nodejs-apis#node_buffer)
- See [Node.js > `Buffer`](/docs/runtime/nodejs-apis#node-buffer)
---
@@ -172,7 +172,7 @@ Bun implements the following globals.
- [`global`](https://nodejs.org/api/globals.html#global)
- Node.js
- See [Node.js > `global`](/docs/runtime/nodejs-apis#node_global).
- See [Node.js > `global`](/docs/runtime/nodejs-apis#global).
---
@@ -220,7 +220,7 @@ Bun implements the following globals.
- [`process`](https://nodejs.org/api/process.html)
- Node.js
- See [Node.js > `process`](/docs/runtime/nodejs-apis#node_process)
- See [Node.js > `process`](/docs/runtime/nodejs-apis#node-process)
---

View File

@@ -6,10 +6,6 @@ Bun implements the `createHash` and `createHmac` functions from [`node:crypto`](
## `Bun.password`
{% callout %}
**Note** — Added in Bun 0.6.8.
{% /callout %}
`Bun.password` is a collection of utility functions for hashing and verifying passwords with various cryptographically secure algorithms.
```ts
@@ -77,7 +73,7 @@ The standard `Bun.hash` functions uses [Wyhash](https://github.com/wangyi-fudan/
```ts
Bun.hash("some data here");
// 976213160445840
// 11562320457524636935n
```
The input can be a string, `TypedArray`, `DataView`, `ArrayBuffer`, or `SharedArrayBuffer`.
@@ -91,14 +87,14 @@ Bun.hash(arr.buffer);
Bun.hash(new DataView(arr.buffer));
```
Optionally, an integer seed can be specified as the second parameter.
Optionally, an integer seed can be specified as the second parameter. For 64-bit hashes seeds above `Number.MAX_SAFE_INTEGER` should be given as BigInt to avoid loss of precision.
```ts
Bun.hash("some data here", 1234);
// 1173484059023252
// 15724820720172937558n
```
Additional hashing algorithms are available as properties on `Bun.hash`. The API is the same for each.
Additional hashing algorithms are available as properties on `Bun.hash`. The API is the same for each, only changing the return type from number for 32-bit hashes to bigint for 64-bit hashes.
```ts
Bun.hash.wyhash("data", 1234); // equivalent to Bun.hash()
@@ -107,6 +103,7 @@ Bun.hash.adler32("data", 1234);
Bun.hash.cityHash32("data", 1234);
Bun.hash.cityHash64("data", 1234);
Bun.hash.murmur32v3("data", 1234);
Bun.hash.murmur32v2("data", 1234);
Bun.hash.murmur64v2("data", 1234);
```
@@ -135,7 +132,7 @@ hasher.digest();
Once initialized, data can be incrementally fed to to the hasher using `.update()`. This method accepts `string`, `TypedArray`, and `ArrayBuffer`.
```ts
const hasher = new Bun.CryptoHasher();
const hasher = new Bun.CryptoHasher("sha256");
hasher.update("hello world");
hasher.update(new Uint8Array([1, 2, 3]));
@@ -173,7 +170,7 @@ hasher.update("hello world", "latin1");
After the data has been feed into the hasher, a final hash can be computed using `.digest()`. By default, this method returns a `Uint8Array` containing the hash.
```ts
const hasher = new Bun.CryptoHasher();
const hasher = new Bun.CryptoHasher("sha256");
hasher.update("hello world");
hasher.digest();

View File

@@ -13,7 +13,7 @@ Start an HTTP server in Bun with `Bun.serve`.
```ts
Bun.serve({
fetch(req) {
return new Response(`Bun!`);
return new Response("Bun!");
},
});
```
@@ -24,9 +24,9 @@ The `fetch` handler handles incoming requests. It receives a [`Request`](https:/
Bun.serve({
fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/") return new Response(`Home page!`);
if (url.pathname === "/") return new Response("Home page!");
if (url.pathname === "/blog") return new Response("Blog!");
return new Response(`404!`);
return new Response("404!");
},
});
```
@@ -35,8 +35,19 @@ To configure which port and hostname the server will listen on:
```ts
Bun.serve({
port: 8080, // defaults to $PORT, then 3000
port: 8080, // defaults to $BUN_PORT, $PORT, $NODE_PORT otherwise 3000
hostname: "mydomain.com", // defaults to "0.0.0.0"
fetch(req) {
return new Response("404!");
},
});
```
To listen on a [unix domain socket](https://en.wikipedia.org/wiki/Unix_domain_socket):
```ts
Bun.serve({
unix: "/tmp/my-socket.sock", // path to socket
fetch(req) {
return new Response(`404!`);
},
@@ -60,7 +71,7 @@ In development mode, Bun will surface errors in-browser with a built-in error pa
{% image src="/images/exception_page.png" caption="Bun's built-in 500 page" /%}
To handle server-side errors, implement an `error` handler. This function should return a `Response` to served to the client when an error occurs. This response will supercede Bun's default error page in `development` mode.
To handle server-side errors, implement an `error` handler. This function should return a `Response` to serve to the client when an error occurs. This response will supersede Bun's default error page in `development` mode.
```ts
Bun.serve({
@@ -78,7 +89,7 @@ Bun.serve({
```
{% callout %}
**Note** — Full debugger support is planned.
[Learn more about debugging in Bun](https://bun.sh/docs/runtime/debugger)
{% /callout %}
The call to `Bun.serve` returns a `Server` object. To stop the server, call the `.stop()` method.
@@ -129,12 +140,6 @@ Bun.serve({
});
```
{% callout %}
**Note** — Earlier versions of Bun supported passing a file path as `keyFile` and `certFile`; this has been deprecated as of `v0.6.3`.
{% /callout %}
If your private key is encrypted with a passphrase, provide a value for `passphrase` to decrypt it.
```ts-diff
@@ -178,7 +183,7 @@ Bun.serve({
});
```
## Hot reloading
## Object syntax
Thus far, the examples on this page have used the explicit `Bun.serve` API. Bun also supports an alternate syntax.
@@ -187,29 +192,27 @@ import {type Serve} from "bun";
export default {
fetch(req) {
return new Response(`Bun!`);
return new Response("Bun!");
},
} satisfies Serve;
```
Instead of passing the server options into `Bun.serve`, export it. This file can be executed as-is; when Bun runs a file with a `default` export containing a `fetch` handler, it passes it into `Bun.serve` under the hood.
Instead of passing the server options into `Bun.serve`, `export default` it. This file can be executed as-is; when Bun sees a file with a `default` export containing a `fetch` handler, it passes it into `Bun.serve` under the hood.
This syntax has one major advantage: it is hot-reloadable out of the box. When any source file is changed, Bun will reload the server with the updated code _without restarting the process_. This makes hot reloads nearly instantaneous. Use the `--hot` flag when starting the server to enable hot reloading.
<!-- This syntax has one major advantage: it is hot-reloadable out of the box. When any source file is changed, Bun will reload the server with the updated code _without restarting the process_. This makes hot reloads nearly instantaneous. Use the `--hot` flag when starting the server to enable hot reloading. -->
```bash
<!-- ```bash
$ bun --hot server.ts
```
``` -->
It's possible to configure hot reloading while using the explicit `Bun.serve` API; for details refer to [Runtime > Hot reloading](/docs/runtime/hot).
<!-- It's possible to configure hot reloading while using the explicit `Bun.serve` API; for details refer to [Runtime > Hot reloading](/docs/runtime/hot). -->
## Streaming files
To stream a file, return a `Response` object with a `BunFile` object as the body.
```ts
import { serve, file } from "bun";
serve({
Bun.serve({
fetch(req) {
return new Response(Bun.file("./hello.txt"));
},
@@ -220,7 +223,7 @@ serve({
⚡️ **Speed** — Bun automatically uses the [`sendfile(2)`](https://man7.org/linux/man-pages/man2/sendfile.2.html) system call when possible, enabling zero-copy file transfers in the kernel—the fastest way to send files.
{% /callout %}
**[v0.3.0+]** You can send part of a file using the [`slice(start, end)`](https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice) method on the `Bun.file` object. This automatically sets the `Content-Range` and `Content-Length` headers on the `Response` object.
You can send part of a file using the [`slice(start, end)`](https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice) method on the `Bun.file` object. This automatically sets the `Content-Range` and `Content-Length` headers on the `Response` object.
```ts
Bun.serve({
@@ -249,7 +252,7 @@ Below are Bun and Node.js implementations of a simple HTTP server that responds
```ts#Bun
Bun.serve({
fetch(req: Request) {
return new Response(`Bun!`);
return new Response("Bun!");
},
port: 3000,
});

View File

@@ -19,17 +19,17 @@ import.meta.resolveSync("zod")
---
- `import.meta.dir`
- Absolute path to the directory containing the current fil, e.g. `/path/to/project`. Equivalent to `__dirname` in Node.js.
- Absolute path to the directory containing the current file, e.g. `/path/to/project`. Equivalent to `__dirname` in CommonJS modules (and Node.js)
---
- `import.meta.file`
- The name of the current file, e.g. `index.tsx`. Equivalent to `__filename` in Node.js.
- The name of the current file, e.g. `index.tsx`
---
- `import.meta.path`
- Absolute path to the current file, e.g. `/path/to/project/index.tx`.
- Absolute path to the current file, e.g. `/path/to/project/index.tx`. Equivalent to `__filename` in CommonJS modules (and Node.js)
---
@@ -39,7 +39,7 @@ import.meta.resolveSync("zod")
---
- `import.meta.resolve{Sync}`
- Resolve a module specifier (e.g. `"zod"` or `"./file.tsx`) to an absolute path. While file would be imported if the specifier were imported from this file?
- Resolve a module specifier (e.g. `"zod"` or `"./file.tsx"`) to an absolute path. While file would be imported if the specifier were imported from this file?
```ts
import.meta.resolveSync("zod");

View File

@@ -28,7 +28,9 @@ By default, the input stream of the subprocess is undefined; it can be configure
```ts
const proc = Bun.spawn(["cat"], {
stdin: await fetch("https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js"),
stdin: await fetch(
"https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js",
),
});
const text = await new Response(proc.stdout).text();
@@ -209,7 +211,7 @@ Bun's `spawnSync` spawns processes 60% faster than the Node.js `child_process` m
```bash
$ bun spawn.mjs
cpu: Apple M1 Max
runtime: bun 0.2.0 (arm64-darwin)
runtime: bun 1.x (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995
--------------------------------------------------------- -----------------------------
@@ -230,10 +232,15 @@ A simple reference of the Spawn API and types are shown below. The real types ha
```ts
interface Bun {
spawn(command: string[], options?: SpawnOptions.OptionsObject): Subprocess;
spawnSync(command: string[], options?: SpawnOptions.OptionsObject): SyncSubprocess;
spawnSync(
command: string[],
options?: SpawnOptions.OptionsObject,
): SyncSubprocess;
spawn(options: { cmd: string[] } & SpawnOptions.OptionsObject): Subprocess;
spawnSync(options: { cmd: string[] } & SpawnOptions.OptionsObject): SyncSubprocess;
spawnSync(
options: { cmd: string[] } & SpawnOptions.OptionsObject,
): SyncSubprocess;
}
namespace SpawnOptions {
@@ -243,7 +250,12 @@ namespace SpawnOptions {
stdin?: SpawnOptions.Readable;
stdout?: SpawnOptions.Writable;
stderr?: SpawnOptions.Writable;
onExit?: (proc: Subprocess, exitCode: number | null, signalCode: string | null, error: Error | null) => void;
onExit?: (
proc: Subprocess,
exitCode: number | null,
signalCode: string | null,
error: Error | null,
) => void;
}
type Readable =

View File

@@ -99,6 +99,20 @@ const query = db.prepare("SELECT * FROM foo WHERE bar = ?");
{% /callout %}
## WAL mode
SQLite supports [write-ahead log mode](https://www.sqlite.org/wal.html) (WAL) which dramatically improves performance, especially in situations with many concurrent writes. It's broadly recommended to enable WAL mode for most typical applications.
To enable WAL mode, run this pragma query at the beginning of your application:
```ts
db.exec("PRAGMA journal_mode = WAL;");
```
{% details summary="What is WAL mode" %}
In WAL mode, writes to the database are written directly to a separate file called the "WAL file" (write-ahead log). This file will be later integrated into the main database file. Think of it as a buffer for pending writes. Refer to the [SQLite docs](https://www.sqlite.org/wal.html) for a more detailed overview.
{% /details %}
## Statements
A `Statement` is a _prepared query_, which means it's been parsed and compiled into an efficient binary form. It can be executed multiple times in a performant way.

View File

@@ -1,6 +1,6 @@
Streams are an important abstraction for working with binary data without loading it all into memory at once. They are commonly used for reading and writing files, sending and receiving network requests, and processing large amounts of data.
Bun implements the Web APIs [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) and [`WritableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream).
Bun implements the Web APIs [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) and [`WritableStream`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream).
{% callout %}
Bun also implements the `node:stream` module, including [`Readable`](https://nodejs.org/api/stream.html#stream_readable_streams), [`Writable`](https://nodejs.org/api/stream.html#stream_writable_streams), and [`Duplex`](https://nodejs.org/api/stream.html#stream_duplex_and_transform_streams). For complete documentation, refer to the [Node.js docs](https://nodejs.org/api/stream.html).

View File

@@ -76,12 +76,6 @@ Bun.listen({
});
```
{% callout %}
**Note** Earlier versions of Bun supported passing a file path as `keyFile` and `certFile`; this has been deprecated as of `v0.6.3`.
{% /callout %}
The `key` and `cert` fields expect the _contents_ of your TLS key and certificate. This can be a string, `BunFile`, `TypedArray`, or `Buffer`.
```ts
@@ -95,7 +89,7 @@ Bun.listen({
// string
key: fs.readFileSync("./key.pem", "utf8"),
// array of above
key: [Bun.file('./key1.pem'), Bun.file('./key2.pem']
key: [Bun.file("./key1.pem"), Bun.file("./key2.pem")],
},
});
```

View File

@@ -76,7 +76,7 @@ await transpiler.transform("<div>hi!</div>", "tsx");
```
{% details summary="Nitty gritty" %}
The `.tranform()` method runs the transpiler in Bun's worker threadpool, so if you run it 100 times, it will run it across `Math.floor($cpu_count * 0.8)` threads, without blocking the main JavaScript thread.
The `.transform()` method runs the transpiler in Bun's worker threadpool, so if you run it 100 times, it will run it across `Math.floor($cpu_count * 0.8)` threads, without blocking the main JavaScript thread.
If your code uses a macro, it will potentially spawn a new copy of Bun's JavaScript runtime environment in that new thread.
{% /details %}
@@ -160,7 +160,6 @@ export const name = "hello";
`;
const result = transpiler.scanImports(code);
`);
```
```json#Results

View File

@@ -43,7 +43,7 @@ This is analogous to the [`require.main = module` trick](https://stackoverflow.c
## `Bun.sleep()`
`Bun.sleep(ms: number)` (added in Bun v0.5.6)
`Bun.sleep(ms: number)`
Returns a `Promise` that resolves after the given number of milliseconds.
@@ -65,7 +65,7 @@ console.log("hello one second later!");
## `Bun.sleepSync()`
`Bun.sleepSync(ms: number)` (added in Bun v0.5.6)
`Bun.sleepSync(ms: number)`
A blocking synchronous version of `Bun.sleep`.
@@ -108,7 +108,7 @@ console.log(ls); // null
## `Bun.peek()`
`Bun.peek(prom: Promise)` (added in Bun v0.2.2)
`Bun.peek(prom: Promise)`
Reads a promise's result without `await` or `.then`, but only if the promise has already fulfilled or rejected.
@@ -183,7 +183,7 @@ const currentFile = import.meta.url;
Bun.openInEditor(currentFile);
```
You can override this via the `debug.editor` setting in your [`bunfig.toml`](/docs/runtime/configuration)
You can override this via the `debug.editor` setting in your [`bunfig.toml`](/docs/runtime/bunfig)
```toml-diff#bunfig.toml
+ [debug]
@@ -204,7 +204,7 @@ Bun.ArrayBufferSink;
## `Bun.deepEquals()`
Nestedly checks if two objects are equivalent. This is used internally by `expect().toEqual()` in `bun:test`.
Recursively checks if two objects are equivalent. This is used internally by `expect().toEqual()` in `bun:test`.
```ts
const foo = { a: 1, b: 2, c: { d: 3 } };
@@ -428,6 +428,21 @@ const str = Bun.inspect(arr);
// => "Uint8Array(3) [ 1, 2, 3 ]"
```
## `Bun.inspect.custom`
This is the symbol that Bun uses to implement `Bun.inspect`. You can override this to customize how your objects are printed. It is identical to `util.inspect.custom` in Node.js.
```ts
class Foo {
[Bun.inspect.custom]() {
return "foo";
}
}
const foo = new Foo();
console.log(foo); // => "foo"
```
## `Bun.nanoseconds()`
Returns the number of nanoseconds since the current `bun` process started, as a `number`. Useful for high-precision timing and benchmarking.

View File

@@ -87,7 +87,7 @@ ws.send(new Uint8Array([1, 2, 3])); // TypedArray | DataView
### Headers
Once the upgrade succeeds, Bun will send a `101 Switching Protocols` response per the [spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism). Additional `headers` can be attched to this `Response` in the call to `server.upgrade()`.
Once the upgrade succeeds, Bun will send a `101 Switching Protocols` response per the [spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism). Additional `headers` can be attached to this `Response` in the call to `server.upgrade()`.
```ts
Bun.serve({
@@ -161,7 +161,7 @@ socket.addEventListener("message", event => {
### Pub/Sub
Bun's `ServerWebSocket` implementation implements a native publish-subscribe API for topic-based broadcasting. Individual sockets can `.subscribe()` to a topic (specified with a string identifier) and `.publish()` messages to all other subscribers to that topic. This topic-based broadcast API is similar to [MQTT](https://en.wikipedia.org/wiki/MQTT) and [Redis Pub/Sub](https://redis.io/topics/pubsub).
Bun's `ServerWebSocket` implementation implements a native publish-subscribe API for topic-based broadcasting. Individual sockets can `.subscribe()` to a topic (specified with a string identifier) and `.publish()` messages to all other subscribers to that topic (excluding itself). This topic-based broadcast API is similar to [MQTT](https://en.wikipedia.org/wiki/MQTT) and [Redis Pub/Sub](https://redis.io/topics/pubsub).
```ts
const server = Bun.serve<{ username: string }>({
@@ -192,7 +192,7 @@ const server = Bun.serve<{ username: string }>({
close(ws) {
const msg = `${ws.data.username} has left the chat`;
ws.unsubscribe("the-group-chat");
ws.publish("the-group-chat", msg);
server.publish("the-group-chat", msg);
},
},
});
@@ -200,7 +200,18 @@ const server = Bun.serve<{ username: string }>({
console.log(`Listening on ${server.hostname}:${server.port}`);
```
Calling `.publish(data)` will send the message to all subscribers of a topic _except_ the socket that called `.publish()`.
Calling `.publish(data)` will send the message to all subscribers of a topic _except_ the socket that called `.publish()`. To send a message to all subscribers of a topic, use the `.publish()` method on the `Server` instance.
```ts
const server = Bun.serve({
websocket: {
// ...
},
});
// listen for some external event
server.publish("the-group-chat", "Hello world");
```
### Compression
@@ -236,7 +247,11 @@ This gives you better control over backpressure in your server.
## Connect to a `Websocket` server
To connect to an external socket server, either from a browser or from Bun, create an instance of `WebSocket` with the constructor.
{% callout %}
**🚧** — The `WebSocket` client still does not pass the full [Autobahn test suite](https://github.com/crossbario/autobahn-testsuite) and should not be considered ready for production.
{% /callout %}
Bun implements the `WebSocket` class. To create a WebSocket client that connects to a `ws://` or `wss://` server, create an instance of `WebSocket`, as you would in the browser.
```ts
const socket = new WebSocket("ws://localhost:3000");

View File

@@ -1,5 +1,5 @@
{% callout %}
`Worker` support was added in Bun v0.7.0.
**🚧** — The `Worker` API is still experimental and should not be considered ready for production.
{% /callout %}
[`Worker`](https://developer.mozilla.org/en-US/docs/Web/API/Worker) lets you start and communicate with a new JavaScript instance running on a separate thread while sharing I/O resources with the main thread.
@@ -10,7 +10,7 @@ Bun implements a minimal version of the [Web Workers API](https://developer.mozi
Like in browsers, [`Worker`](https://developer.mozilla.org/en-US/docs/Web/API/Worker) is a global. Use it to create a new worker thread.
From the main thread:
### From the main thread
```js#Main_thread
const workerURL = new URL("worker.ts", import.meta.url).href;
@@ -22,16 +22,25 @@ worker.onmessage = event => {
};
```
Worker thread:
### Worker thread
```ts#worker.ts_(Worker_thread)
// prevents TS errors
declare var self: Worker;
self.onmessage = (event: MessageEvent) => {
console.log(event.data);
postMessage("world");
};
```
You can use `import`/`export` syntax in your worker code. Unlike in browsers, there's no need to specify `{type: "module"}` to use ES Modules.
To prevent TypeScript errors when using `self`, add this line to the top of your worker file.
```ts
declare var self: Worker;
```
You can use `import` and `export` syntax in your worker code. Unlike in browsers, there's no need to specify `{type: "module"}` to use ES Modules.
To simplify error handling, the initial script to load is resolved at the time `new Worker(url)` is called.
@@ -88,7 +97,7 @@ worker.addEventListener("message", event => {
## Terminating a worker
A `Worker` instance terminate automatically when Bun's process exits. To terminate a `Worker` sooner, call `worker.terminate()`.
A `Worker` instance terminates automatically once it's event loop has no work left to do. Attaching a `"message"` listener on the global or any `MessagePort`s will keep the event loop alive. To forcefully terminate a `Worker`, call `worker.terminate()`.
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href);
@@ -97,18 +106,20 @@ const worker = new Worker(new URL("worker.ts", import.meta.url).href);
worker.terminate();
```
This will cause the worker's to exit as soon as possible.
### `process.exit()`
A worker can terminate itself with `process.exit()`. This does not terminate the main process. Like in Node.js, `process.on('beforeExit', callback)` and `process.on('exit', callback)` are emitted on the worker thread (and not on the main thread).
A worker can terminate itself with `process.exit()`. This does not terminate the main process. Like in Node.js, `process.on('beforeExit', callback)` and `process.on('exit', callback)` are emitted on the worker thread (and not on the main thread), and the exit code is passed to the `"close"` event.
### `"close"`
The `"close"` event is emitted when a worker has been terminated. It can take some time for the worker to actually terminate, so this event is emitted when the worker has been marked as terminated.
The `"close"` event is emitted when a worker has been terminated. It can take some time for the worker to actually terminate, so this event is emitted when the worker has been marked as terminated. The `CloseEvent` will contain the exit code passed to `process.exit()`, or 0 if closed for other reasons.
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href);
worker.addEventListener("close", () => {
worker.addEventListener("close", event => {
console.log("worker is being closed");
});
```
@@ -117,14 +128,27 @@ This event does not exist in browsers.
## Managing lifetime
By default, an active `Worker` will _not_ keep the main (spawning) process alive. Once the main script finishes, the main thread will terminate, shutting down any workers it created.
By default, an active `Worker` will keep the main (spawning) process alive, so async tasks like `setTimeout` and promises will keep the process alive. Attaching `message` listeners will also keep the `Worker` alive.
### `worker.ref`
### `worker.unref()`
To keep the process alive until the `Worker` terminates, call `worker.ref()`. This couples the lifetime of the worker to the lifetime of the main process.
To stop a running worker from keeping the process alive, call `worker.unref()`. This decouples the lifetime of the worker to the lifetime of the main process, and is equivalent to what Node.js' `worker_threads` does.
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href);
worker.unref();
```
Note: `worker.unref()` is not available in browsers.
### `worker.ref()`
To keep the process alive until the `Worker` terminates, call `worker.ref()`. A ref'd worker is the default behavior, and still needs something going on in the event loop (such as a `"message"` listener) for the worker to continue running.
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href);
worker.unref();
// later...
worker.ref();
```
@@ -132,22 +156,11 @@ Alternatively, you can also pass an `options` object to `Worker`:
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href, {
ref: true,
ref: false,
});
```
### `worker.unref`
To stop keeping the process alive, call `worker.unref()`.
```ts
const worker = new Worker(new URL("worker.ts", import.meta.url).href);
worker.ref();
// ...later on
worker.unref();
```
Note: `worker.ref()` and `worker.unref()` do not exist in browsers.
Note: `worker.ref()` is not available in browsers.
## Memory usage with `smol`

View File

@@ -52,7 +52,6 @@ Run this with `bun cat.js /path/to/big/file`.
## Reading from standard input
```ts
// As of Bun v0.3.0, console is an AsyncIterable
for await (const line of console) {
// line of text from stdin
console.log(line);

View File

@@ -28,6 +28,33 @@ All imported files and packages are bundled into the executable, along with a co
- `--outdir` — use `outfile` instead.
- `--external`
- `--splitting`
- `--publicPath`
- `--public-path`
{% /callout %}
## Embedding files
Standalone executables support embedding files.
To embed files into an executable with `bun build --compile`, import the file in your code
```js
// this becomes an internal file path
import icon from "./icon.png";
import { file } from "bun";
export default {
fetch(req) {
return new Response(file(icon));
},
};
```
You may need to specify a `--loader` for it to be treated as a `"file"` loader (so you get back a file path).
Embedded files can be read using `Bun.file`'s functions or the Node.js `fs.readFile` function (in `"node:fs"`).
## Minification
To trim down the size of the executable a little, pass `--minify` to `bun build --compile`. This uses Bun's minifier to reduce the code size. Overall though, Bun's binary is still way too big and we need to make it smaller.

View File

@@ -29,6 +29,10 @@ The bundler is a key piece of infrastructure in the JavaScript ecosystem. As a b
Let's jump into the bundler API.
{% callout %}
Note that the Bun bundler is not intended to replace `tsc` for typechecking or generating type declarations.
{% /callout %}
## Basic example
Let's build our first bundle. You have the following two files, which implement a simple client-side rendered React app.
@@ -132,6 +136,14 @@ Visit `http://localhost:5000` to see your bundled app in action.
{% /details %}
## Watch mode
Like the runtime and test runner, the bundler supports watch mode natively.
```sh
$ bun build ./index.tsx --outdir ./out --watch
```
## Content types
Like the Bun runtime, the bundler supports an array of file types out of the box. The following table breaks down the bundler's set of standard "loaders". Refer to [Bundler > File types](/docs/runtime/loaders) for full documentation.
@@ -960,7 +972,7 @@ By specifying `.` as `root`, the generated file structure will look like this:
A prefix to be appended to any import paths in bundled code.
<!-- $ bun build ./index.tsx --outdir ./out --publicPath https://cdn.example.com -->
<!-- $ bun build ./index.tsx --outdir ./out --public-path https://cdn.example.com -->
In many cases, generated bundles will contain no `import` statements. After all, the goal of bundling is to combine all of the code into a single file. However there are a number of cases with the generated bundles will contain `import` statements.
@@ -1084,7 +1096,7 @@ interface BuildArtifact extends Blob {
The `outputs` array contains all the files that were generated by the build. Each artifact implements the `Blob` interface.
```ts
const build = Bun.build({
const build = await Bun.build({
/* */
});
@@ -1128,7 +1140,7 @@ Each artifact also contains the following properties:
Similar to `BunFile`, `BuildArtifact` objects can be passed directly into `new Response()`.
```ts
const build = Bun.build({
const build = await Bun.build({
/* */
});
@@ -1144,7 +1156,7 @@ The Bun runtime implements special pretty-printing of `BuildArtifact` object to
```ts#Build_script
// build.ts
const build = Bun.build({/* */});
const build = await Bun.build({/* */});
const artifact = build.outputs[0];
console.log(artifact);

View File

@@ -40,7 +40,7 @@ When a user visits this website, the files are loaded in the following order:
This approach works, it requires three round-trip HTTP requests before the browser is ready to render the page. On slow internet connections, this may add up to a non-trivial delay.
This example is extremely simplistic. A modern app may be loading dozens of modules from `node_modules`, each consisting of hundrends of files. Loading each of these files with a separate HTTP request becomes untenable very quickly. While most of these requests will be running in parallel, the number of round-trip requests can still be very high; plus, there are limits on how many simultaneous requests a browser can make.
This example is extremely simplistic. A modern app may be loading dozens of modules from `node_modules`, each consisting of hundred of files. Loading each of these files with a separate HTTP request becomes untenable very quickly. While most of these requests will be running in parallel, the number of round-trip requests can still be very high; plus, there are limits on how many simultaneous requests a browser can make.
{% callout %}
Some recent advances like modulepreload and HTTP/3 are intended to solve some of these problems, but at the moment bundling is still the most performant approach.

View File

@@ -16,7 +16,7 @@ Parses the code and applies a set of default transforms, like dead-code eliminat
**JavaScript + JSX.**. Default for `.js` and `.jsx`.
Same as the `js` loader, but JSX syntax is supported. By default, JSX is downconverted to plain JavaScript; the details of how this is done depends on the `jsx*` compiler options in your `tsconfig.json`. Refer to the TypeScript documentation [on JSX](https://www.typescriptlang.org/docs/handbook/jsx.html) for more information.
Same as the `js` loader, but JSX syntax is supported. By default, JSX is down-converted to plain JavaScript; the details of how this is done depends on the `jsx*` compiler options in your `tsconfig.json`. Refer to the TypeScript documentation [on JSX](https://www.typescriptlang.org/docs/handbook/jsx.html) for more information.
### `ts`

View File

@@ -129,7 +129,7 @@ if (returnFalse()) {
}
```
## Serializablility
## Serializability
Bun's transpiler needs to be able to serialize the result of the macro so it can be inlined into the AST. All JSON-compatible data structures are supported:

View File

@@ -1,20 +1,18 @@
{% callout %}
**Note** — Introduced in Bun v0.1.11.
{% /callout %}
Bun provides a universal plugin API that can be used to extend both the _runtime_ and _bundler_.
Plugins intercept imports and perform custom loading logic: reading files, transpiling code, etc. They can be used to add support for additional file types, like `.scss` or `.yaml`. In the context of Bun's bundler, plugins can be used to implement framework-level features like CSS extraction, macros, and client-server code co-location.
For more complete documentation of the Plugin API, see [Runtime > Plugins](/docs/runtime/plugins).
## Usage
A plugin is defined as simple JavaScript object containing a `name` property and a `setup` function. Register a plugin with Bun using the `plugin` function.
```tsx#yamlPlugin.ts
```tsx#myPlugin.ts
import type { BunPlugin } from "bun";
const myPlugin: BunPlugin = {
name: "YAML loader",
name: "Custom loader",
setup(build) {
// implementation
},
@@ -30,307 +28,3 @@ Bun.build({
plugins: [myPlugin],
});
```
<!-- It can also be "registered" with the Bun runtime using the `Bun.plugin()` function. Once registered, the currently executing `bun` process will incorporate the plugin into its module resolution algorithm.
```ts
import {plugin} from "bun";
plugin(myPlugin);
``` -->
## `--preload`
To consume this plugin, add this file to the `preload` option in your [`bunfig.toml`](/docs/runtime/configuration). Bun automatically loads the files/modules specified in `preload` before running a file.
```toml
preload = ["./yamlPlugin.ts"]
```
To preload files during `bun test`:
```toml
[test]
preload = ["./loader.ts"]
```
{% details summary="Usage without preload" %}
Alternatively, you can import this file manually at the top of your project's entrypoint, before any application code is imported.
```ts#app.ts
import "./yamlPlugin.ts";
import { config } from "./config.yml";
console.log(config);
```
{% /details %}
## Third-party plugins
By convention, third-party plugins intended for consumption should export a factory function that accepts some configuration and returns a plugin object.
```ts
import { plugin } from "bun";
import fooPlugin from "bun-plugin-foo";
plugin(
fooPlugin({
// configuration
}),
);
// application code
```
Bun's plugin API is based on [esbuild](https://esbuild.github.io/plugins). Only [a subset](/docs/bundler/vs-esbuild#plugin-api) of the esbuild API is implemented, but some esbuild plugins "just work" in Bun, like the official [MDX loader](https://mdxjs.com/packages/esbuild/):
```jsx
import { plugin } from "bun";
import mdx from "@mdx-js/esbuild";
plugin(mdx());
import { renderToStaticMarkup } from "react-dom/server";
import Foo from "./bar.mdx";
console.log(renderToStaticMarkup(<Foo />));
```
## Loaders
<!-- The plugin logic is implemented in the `setup` function using the builder provided as the first argument (`build` in the example above). The `build` variable provides two methods: `onResolve` and `onLoad`. -->
<!-- ## `onResolve` -->
<!-- The `onResolve` method lets you intercept imports that match a particular regex and modify the resolution behavior, such as re-mapping the import to another file. In the simplest case, you can simply remap the matched import to a new path.
```ts
import { plugin } from "bun";
plugin({
name: "YAML loader",
setup(build) {
build.onResolve();
// implementation
},
});
``` -->
<!--
Internally, Bun's transpiler automatically turns `plugin()` calls into separate files (at most 1 per file). This lets loaders activate before the rest of your application runs with zero configuration. -->
Plugins are primarily used to extend Bun with loaders for additional file types. Let's look at a simple plugin that implements a loader for `.yaml` files.
```ts#yamlPlugin.ts
import { plugin } from "bun";
plugin({
name: "YAML",
async setup(build) {
const { load } = await import("js-yaml");
const { readFileSync } = await import("fs");
// when a .yaml file is imported...
build.onLoad({ filter: /\.(yaml|yml)$/ }, (args) => {
// read and parse the file
const text = readFileSync(args.path, "utf8");
const exports = load(text) as Record<string, any>;
// and returns it as a module
return {
exports,
loader: "object", // special loader for JS objects
};
});
},
});
```
With this plugin, data can be directly imported from `.yaml` files.
{% codetabs %}
```ts#index.ts
import "./yamlPlugin.ts"
import {name, releaseYear} from "./data.yml"
console.log(name, releaseYear);
```
```yaml#data.yml
name: Fast X
releaseYear: 2023
```
{% /codetabs %}
Note that the returned object has a `loader` property. This tells Bun which of its internal loaders should be used to handle the result. Even though we're implementing a loader for `.yaml`, the result must still be understandable by one of Bun's built-in loaders. It's loaders all the way down.
In this case we're using `"object"`—a built-in loader (intended for use by plugins) that converts a plain JavaScript object to an equivalent ES module. Any of Bun's built-in loaders are supported; these same loaders are used by Bun internally for handling files of various kinds. The table below is a quick reference; refer to [Bundler > Loaders](/docs/bundler/loaders) for complete documentation.
{% table %}
- Loader
- Extensions
- Output
---
- `js`
- `.mjs` `.cjs`
- Transpile to JavaScript files
---
- `jsx`
- `.js` `.jsx`
- Transform JSX then transpile
---
- `ts`
- `.ts` `.mts` `cts`
- Transform TypeScript then transpile
---
- `tsx`
- `.tsx`
- Transform TypeScript, JSX, then transpile
---
- `toml`
- `.toml`
- Parse using Bun's built-in TOML parser
---
- `json`
- `.json`
- Parse using Bun's built-in JSON parser
---
- `napi`
- `.node`
- Import a native Node.js addon
---
- `wasm`
- `.wasm`
- Import a native Node.js addon
---
- `object`
- _none_
- A special loader intended for plugins that converts a plain JavaScript object to an equivalent ES module. Each key in the object corresponds to a named export.
{% /callout %}
Loading a YAML file is useful, but plugins support more than just data loading. Let's look at a plugin that lets Bun import `*.svelte` files.
```ts#sveltePlugin.ts
import { plugin } from "bun";
await plugin({
name: "svelte loader",
async setup(build) {
const { compile } = await import("svelte/compiler");
const { readFileSync } = await import("fs");
// when a .svelte file is imported...
build.onLoad({ filter: /\.svelte$/ }, ({ path }) => {
// read and compile it with the Svelte compiler
const file = readFileSync(path, "utf8");
const contents = compile(file, {
filename: path,
generate: "ssr",
}).js.code;
// and return the compiled source code as "js"
return {
contents,
loader: "js",
};
});
},
});
```
> Note: in a production implementation, you'd want to cache the compiled output and include additional error handling.
The object returned from `build.onLoad` contains the compiled source code in `contents` and specifies `"js"` as its loader. That tells Bun to consider the returned `contents` to be a JavaScript module and transpile it using Bun's built-in `js` loader.
With this plugin, Svelte components can now be directly imported and consumed.
```js
import "./sveltePlugin.ts";
import MySvelteComponent from "./component.svelte";
console.log(mySvelteComponent.render());
```
## Reading the config
Plugins can read and write to the [build config](/docs/bundler#api) with `build.config`.
```ts
Bun.build({
entrypoints: ["./app.ts"],
outdir: "./dist",
sourcemap: "external",
plugins: [
{
name: "demo",
setup(build) {
console.log(build.config.sourcemap); // "external"
build.config.minify = true; // enable minification
// `plugins` is readonly
console.log(`Number of plugins: ${build.config.plugins.length}`);
},
},
],
});
```
## Reference
```ts
namespace Bun {
function plugin(plugin: {
name: string;
setup: (build: PluginBuilder) => void;
}): void;
}
type PluginBuilder = {
onResolve: (
args: { filter: RegExp; namespace?: string },
callback: (args: { path: string; importer: string }) => {
path: string;
namespace?: string;
} | void,
) => void;
onLoad: (
args: { filter: RegExp; namespace?: string },
callback: (args: { path: string }) => {
loader?: Loader;
contents?: string;
exports?: Record<string, any>;
},
) => void;
config: BuildConfig;
};
type Loader = "js" | "jsx" | "ts" | "tsx" | "json" | "toml" | "object";
```
The `onLoad` method optionally accepts a `namespace` in addition to the `filter` regex. This namespace will be be used to prefix the import in transpiled code; for instance, a loader with a `filter: /\.yaml$/` and `namespace: "yaml:"` will transform an import from `./myfile.yaml` into `yaml:./myfile.yaml`.

View File

@@ -1,7 +1,3 @@
{% callout %}
**Note** — Available in Bun v0.6.0 and later.
{% /callout %}
Bun's bundler API is inspired heavily by [esbuild](https://esbuild.github.io/). Migrating to Bun's bundler from esbuild should be relatively painless. This guide will briefly explain why you might consider migrating to Bun's bundler and provide a side-by-side API comparison reference for those who are already familiar with esbuild's API.
There are a few behavioral differences to note.
@@ -129,13 +125,13 @@ In Bun's CLI, simple boolean flags like `--minify` do not accept an argument. Ot
- `--target`
- n/a
- No supported. Bun's bundler performs no syntactic downleveling at this time.
- No supported. Bun's bundler performs no syntactic down-leveling at this time.
---
- `--watch`
- n/a
- Not applicable
- `--watch`
- No differences
---
@@ -897,7 +893,7 @@ const myPlugin: BunPlugin = {
};
```
The `builder` object provides some methods for hooking into parts of the bundling process. Bun implements `onResolve` and `onLoad`; it does not yet implement the esbuild hooks `onStart`, `onEnd`, and `onDispose`, and `resolve` utilities. `initialOptions` is partially implemented, being read-only and only having a subset of esbuild's options; use [`config`](/docs/bundler/plugins#reading-the-config) (same thing but with Bun's `BuildConfig` format) instead.
The `builder` object provides some methods for hooking into parts of the bundling process. Bun implements `onResolve` and `onLoad`; it does not yet implement the esbuild hooks `onStart`, `onEnd`, and `onDispose`, and `resolve` utilities. `initialOptions` is partially implemented, being read-only and only having a subset of esbuild's options; use [`config`](/docs/bundler/plugins) (same thing but with Bun's `BuildConfig` format) instead.
```ts
import type { BunPlugin } from "bun";

View File

@@ -13,8 +13,6 @@ If you pass `-y` or `--yes`, it will assume you want to continue without asking
At the end, it runs `bun install` to install `bun-types`.
Added in Bun v0.1.7.
#### How is `bun init` different than `bun create`?
`bun init` is for blank projects. `bun create` applies templates.

View File

@@ -21,7 +21,7 @@ Configuring with `bunfig.toml` is optional. Bun tries to be zero configuration i
# Scope name The value can be a URL string or an object
"@mybigcompany" = { token = "123456", url = "https://registry.mybigcompany.com" }
# URL is optional and fallsback to the default registry
# URL is optional and falls back to the default registry
# The "@" in the scope is optional
mybigcompany2 = { token = "123456" }
@@ -47,7 +47,7 @@ registry = "https://registry.yarnpkg.com/"
# Install for production? This is the equivalent to the "--production" CLI argument
production = false
# Disallow changes to lockfile? This is the equivalent to the "--fozen-lockfile" CLI argument
# Disallow changes to lockfile? This is the equivalent to the "--frozen-lockfile" CLI argument
frozenLockfile = false
# Don't actually install
@@ -62,6 +62,9 @@ dev = true
# Install peerDependencies (default: false)
peer = false
# Whether to use the github REST api (unauthenticated)
github.api = true
# When using `bun install -g`, install packages here
globalDir = "~/.bun/install/global"
@@ -89,12 +92,6 @@ disableManifest = false
# Note: it does not load the lockfile, it just converts bun.lockb into a yarn.lock
print = "yarn"
# Path to read bun.lockb from
path = "bun.lockb"
# Path to save bun.lockb to
savePath = "bun.lockb"
# Save the lockfile to disk
save = true
@@ -142,8 +139,6 @@ export interface Cache {
export interface Lockfile {
print?: "yarn";
path: string;
savePath: string;
save: boolean;
}
```
@@ -156,7 +151,6 @@ Environment variables have a higher priority than `bunfig.toml`.
| -------------------------------- | ------------------------------------------------------------- |
| BUN_CONFIG_REGISTRY | Set an npm registry (default: <https://registry.npmjs.org>) |
| BUN_CONFIG_TOKEN | Set an auth token (currently does nothing) |
| BUN_CONFIG_LOCKFILE_SAVE_PATH | File path to save the lockfile to (default: bun.lockb) |
| BUN_CONFIG_YARN_LOCKFILE | Save a Yarn v1-style yarn.lock |
| BUN_CONFIG_LINK_NATIVE_BINS | Point `bin` in package.json to a platform-specific dependency |
| BUN_CONFIG_SKIP_SAVE_LOCKFILE | Dont save a lockfile |

View File

@@ -1,6 +1,6 @@
Bundling is currently an important mechanism for building complex web apps.
Modern apps typically consist of a large number of files and package dependencies. Despite the fact that modern browsers support [ES Module](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) imports, it's still too slow to fetch each file via inidividual HTTP requests. _Bundling_ is the process of concatenating several source files into a single large file that can be loaded in a single request.
Modern apps typically consist of a large number of files and package dependencies. Despite the fact that modern browsers support [ES Module](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) imports, it's still too slow to fetch each file via individual HTTP requests. _Bundling_ is the process of concatenating several source files into a single large file that can be loaded in a single request.
{% callout %}
**On bundling** — Despite recent advances like [`modulepreload`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/modulepreload) and [HTTP/3](https://en.wikipedia.org/wiki/HTTP/3), bundling is still the most performant approach.

View File

@@ -50,7 +50,7 @@ Running `bun create` performs the following steps:
- Initialize a fresh Git repo. Opt out with the `--no-git` flag.
- Run the template's configured `start` script, if defined.
## Official templates
<!-- ## Official templates
The following official templates are available.
@@ -73,7 +73,7 @@ Welcome to bun! Create a new project by pasting any of the following:
{% callout %}
⚡️ **Speed** — At the time of writing, `bun create react app` runs ~11x faster on a M1 Macbook Pro than `yarn create react-app app`.
{% /callout %}
{% /callout %} -->
## GitHub repos

View File

@@ -23,9 +23,7 @@ sudo apt install --install-recommends linux-generic-hwe-20.04
{% /details %}
## Manage dependencies
### `bun install`
## `bun install`
To install all dependencies of a project:
@@ -43,7 +41,7 @@ Running `bun install` will:
- **Run** your project's `{pre|post}install` and `{pre|post}prepare` scripts at the appropriate time. For security reasons Bun _does not execute_ lifecycle scripts of installed dependencies.
- **Write** a `bun.lockb` lockfile to the project root.
To install in production mode (i.e. without `devDependencies`):
To install in production mode (i.e. without `devDependencies` or `optionalDependencies`):
```bash
$ bun install --production
@@ -69,7 +67,7 @@ $ bun install --silent # no logging
```
{% details summary="Configuring behavior" %}
The default behavior of `bun install` can be configured in `bun.toml`:
The default behavior of `bun install` can be configured in `bunfig.toml`:
```toml
[install]
@@ -91,11 +89,14 @@ frozenLockfile = false
# equivalent to `--dry-run` flag
dryRun = false
# whether to use the github REST api (unauthenticated)
github.api = true
```
{% /details %}
### `bun add`
## `bun add`
To add a particular package:
@@ -114,7 +115,7 @@ $ bun add zod@latest
To add a package as a dev dependency (`"devDependencies"`):
```bash
$ bun add --development @types/react
$ bun add --dev @types/react
$ bun add -d @types/react
```
@@ -177,7 +178,7 @@ To view a complete list of options for a given command:
$ bun add --help
```
### `bun remove`
## `bun remove`
To remove a dependency:
@@ -185,7 +186,17 @@ To remove a dependency:
$ bun remove preact
```
## Local packages (`bun link`)
## `bun update`
To update all dependencies to the latest version _that's compatible with the version range specified in your `package.json`_:
```sh
$ bun update
```
This will not edit your `package.json`. There's currently no command to force-update all dependencies to the latest version regardless version ranges.
## `bun link`
Use `bun link` in a local directory to register the current package as a "linkable" package.
@@ -197,7 +208,7 @@ $ cat package.json
"version": "1.0.0"
}
$ bun link
bun link v0.5.7 (7416672e)
bun link v1.x (7416672e)
Success! Registered "cool-pkg"
To use cool-pkg in a project, run:
@@ -289,7 +300,7 @@ Bun supports a variety of protocols, including [`github`](https://docs.npmjs.com
## Tarball dependencies
A package name can correspond to a publically hosted `.tgz` file. During `bun install`, Bun will download and install the package from the specified tarball URL, rather than from the package registry.
A package name can correspond to a publicly hosted `.tgz` file. During `bun install`, Bun will download and install the package from the specified tarball URL, rather than from the package registry.
```json#package.json
{

View File

@@ -1,5 +1,28 @@
The `bun` CLI can be used to execute JavaScript/TypeScript files, `package.json` scripts, and [executable packages](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bin).
## Performance
Bun is designed to start fast and run fast.
Under the hood Bun uses the [JavaScriptCore engine](https://developer.apple.com/documentation/javascriptcore), which is developed by Apple for Safari. In most cases, the startup and running performance is faster than V8, the engine used by Node.js and Chromium-based browsers. Its transpiler and runtime are written in Zig, a modern, high-performance language. On Linux, this translates into startup times [4x faster](https://twitter.com/jarredsumner/status/1499225725492076544) than Node.js.
{% table %}
---
- `bun hello.js`
- `5.2ms`
---
- `node hello.js`
- `25.1ms`
{% /table %}
{% caption content="Running a simple Hello World script on Linux" /%}
<!-- {% image src="/images/bun-run-speed.jpeg" caption="Bun vs Node.js vs Deno running Hello World" /%} -->
<!-- ## Speed -->
<!--
@@ -26,10 +49,11 @@ $ bun run index.ts
$ bun run index.tsx
```
The "naked" `bun` command is equivalent to `bun run`.
Alternatively, you can omit the `run` keyword and use the "naked" command; it behaves identically.
```bash
$ bun index.tsx
$ bun index.js
```
### `--watch`
@@ -40,12 +64,19 @@ To run a file in watch mode, use the `--watch` flag.
$ bun --watch run index.tsx
```
### `--smol`
{% callout %}
Added in Bun v0.7.0.
**Note** — When using `bun run`, put Bun flags like `--watch` immediately after `bun`.
```bash
$ bun --watch run dev # ✔️ do this
$ bun run dev --watch # ❌ don't do this
```
Flags that occur at the end of the command will be ignored and passed through to the `"dev"` script itself.
{% /callout %}
### `--smol`
In memory-constrained environments, use the `--smol` flag to reduce memory usage at a cost to performance.
```bash
@@ -58,6 +89,10 @@ $ bun --smol run index.tsx
Compare to `npm run <script>` or `yarn <script>`
{% /note %}
```sh
$ bun [bun flags] run <script> [script flags]
```
Your `package.json` can define a number of named `"scripts"` that correspond to shell commands.
```jsonc
@@ -70,10 +105,10 @@ Your `package.json` can define a number of named `"scripts"` that correspond to
}
```
Use `bun <script>` to execute these scripts.
Use `bun run <script>` to execute these scripts.
```bash
$ bun clean
$ bun run clean
$ rm -rf dist && echo 'Done.'
Cleaning...
Done.
@@ -108,22 +143,18 @@ quickstart scripts:
Bun respects lifecycle hooks. For instance, `bun run clean` will execute `preclean` and `postclean`, if defined. If the `pre<script>` fails, Bun will not execute the script itself.
## Environment variables
### `--bun`
Bun automatically loads environment variables from `.env` files before running a file, script, or executable. The following files are checked, in order:
It's common for `package.json` scripts to reference locally-installed CLIs like `vite` or `next`. These CLIs are often JavaScript files marked with a [shebang](<https://en.wikipedia.org/wiki/Shebang_(Unix)>) to indicate that they should be executed with `node`.
1. `.env.local` (first)
2. `NODE_ENV` === `"production"` ? `.env.production` : `.env.development`
3. `.env`
```js
#!/usr/bin/env node
To debug environment variables, run `bun run env` to view a list of resolved environment variables.
// do stuff
```
## Performance
By default, Bun respects this shebang and executes the script with `node`. However, you can override this behavior with the `--bun` flag. For Node.js-based CLIs, this will run the CLI with Bun instead of Node.js.
Bun is designed to start fast and run fast.
Under the hood Bun uses the [JavaScriptCore engine](https://developer.apple.com/documentation/javascriptcore), which is developed by Apple for Safari. In most cases, the startup and running performance is faster than V8, the engine used by Node.js and Chromium-based browsers. Its transpiler and runtime are written in Zig, a modern, high-performance language. On Linux, this translates into startup times [4x faster](https://twitter.com/jarredsumner/status/1499225725492076544) than Node.js.
{% image src="/images/bun-run-speed.jpeg" caption="Bun vs Node.js vs Deno running Hello World" /%}
<!-- If no `node_modules` directory is found in the working directory or above, Bun will abandon Node.js-style module resolution in favor of the `Bun module resolution algorithm`. Under Bun-style module resolution, all packages are _auto-installed_ on the fly into a [global module cache](/docs/install/cache). For full details on this algorithm, refer to [Runtime > Modules](/docs/runtime/modules). -->
```bash
$ bun run --bun vite
```

View File

@@ -1,4 +1,4 @@
Bun ships with a fast built-in test runner. Tests are executed with the Bun runtime, and support the following features.
Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed with the Bun runtime, and support the following features.
- TypeScript and JSX
- Lifecycle hooks
@@ -7,6 +7,10 @@ Bun ships with a fast built-in test runner. Tests are executed with the Bun runt
- Watch mode with `--watch`
- Script pre-loading with `--preload`
{% callout %}
Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see [this tracking issue](https://github.com/oven-sh/bun/issues/1825).
{% /callout %}
## Run tests
```bash
@@ -30,14 +34,50 @@ The runner recursively searches the working directory for files that match the f
- `*.spec.{js|jsx|ts|tsx}`
- `*_spec.{js|jsx|ts|tsx}`
You can filter the set of tests to run by passing additional positional arguments to `bun test`. Any file in the directory with an _absolute path_ that contains one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
You can filter the set of _test files_ to run by passing additional positional arguments to `bun test`. Any test file with a path that matches one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
```bash
$ bun test <filter> <filter> ...
```
To filter by _test name_, use the `-t`/`--test-name-pattern` flag.
```sh
# run all tests or test suites with "addition" in the name
$ bun test --test-name-pattern addition
```
The test runner runs all tests in a single process. It loads all `--preload` scripts (see [Lifecycle](/docs/test/lifecycle) for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
## Timeouts
Use the `--timeout` flag to specify a _per-test_ timeout in milliseconds. If a test times out, it will be marked as failed. The default value is `5000`.
```bash
# default value is 5000
$ bun test --timeout 20
```
## Rerun tests
Use the `--rerun-each` flag to run each test multiple times. This is useful for detecting flaky or non-deterministic test failures.
```sh
$ bun test --rerun-each 100
```
## Bail out with `--bail`
Use the `--bail` flag to abort the test run early after a pre-determined number of test failures. By default Bun will run all tests and report all failures, but sometimes in CI environments it's preferable to terminate earlier to reduce CPU usage.
```sh
# bail after 1 failure
$ bun test --bail
# bail after 10 failure
$ bun test --bail 10
```
## Watch mode
Similar to `bun run`, you can pass the `--watch` flag to `bun test` to watch for changes and re-run tests.
@@ -67,7 +107,11 @@ See [Test > Lifecycle](/docs/test/lifecycle) for complete documentation.
## Mocks
Create mocks with the `mock` function. Mocks are automatically reset between tests.
{% callout %}
Module mocking (`jest.mock()`) is not yet supported. Track support for it [here](https://github.com/oven-sh/bun/issues/5394).
{% /callout %}
Create mock functions with the `mock` function. Mocks are automatically reset between tests.
```ts
import { test, expect, mock } from "bun:test";
@@ -81,11 +125,38 @@ test("random", async () => {
});
```
Alternatively, you can use `jest.fn()`, it behaves identically.
```ts-diff
- import { test, expect, mock } from "bun:test";
+ import { test, expect, jest } from "bun:test";
- const random = mock(() => Math.random());
+ const random = jest.fn(() => Math.random());
```
See [Test > Mocks](/docs/test/mocks) for complete documentation.
## Snapshot testing
Snapshots are supported by `bun test`. See [Test > Snapshots](/docs/test/snapshots) for complete documentation.
Snapshots are supported by `bun test`.
```ts
// example usage of toMatchSnapshot
import { test, expect } from "bun:test";
test("snapshot", async () => {
expect({ a: 1 }).toMatchSnapshot();
});
```
To update snapshots, use the `--update-snapshots` flag.
```sh
$ bun test --update-snapshots
```
See [Test > Snapshots](/docs/test/snapshots) for complete documentation.
## UI & DOM testing

View File

@@ -49,7 +49,7 @@ This is useful for preventing flash of unstyled content.
## With `bun bun`
Bun bundles `.css` files imported via `@import` into a single file. It doesnt autoprefix or minify CSS today. Multiple `.css` files imported in one JavaScript file will _not_ be bundled into one file. Youll have to import those from a `.css` file.
Bun bundles `.css` files imported via `@import` into a single file. It doesnt auto-prefix or minify CSS today. Multiple `.css` files imported in one JavaScript file will _not_ be bundled into one file. Youll have to import those from a `.css` file.
This input:

View File

@@ -1,151 +0,0 @@
{% callout %}
**Warning** — This will soon have breaking changes. It was designed when Bun was mostly a dev server and not a JavaScript runtime.
{% /callout %}
Frameworks preconfigure Bun to enable developers to use Bun with their existing tooling.
Frameworks are configured via the `framework` object in the `package.json` of the framework (not in the applications `package.json`):
Here is an example:
```json
{
"name": "bun-framework-next",
"version": "0.0.0-18",
"description": "",
"framework": {
"displayName": "Next.js",
"static": "public",
"assetPrefix": "_next/",
"router": {
"dir": ["pages", "src/pages"],
"extensions": [".js", ".ts", ".tsx", ".jsx"]
},
"css": "onimportcss",
"development": {
"client": "client.development.tsx",
"fallback": "fallback.development.tsx",
"server": "server.development.tsx",
"css": "onimportcss",
"define": {
"client": {
".env": "NEXT_PUBLIC_",
"defaults": {
"process.env.__NEXT_TRAILING_SLASH": "false",
"process.env.NODE_ENV": "\"development\"",
"process.env.__NEXT_ROUTER_BASEPATH": "''",
"process.env.__NEXT_SCROLL_RESTORATION": "false",
"process.env.__NEXT_I18N_SUPPORT": "false",
"process.env.__NEXT_HAS_REWRITES": "false",
"process.env.__NEXT_ANALYTICS_ID": "null",
"process.env.__NEXT_OPTIMIZE_CSS": "false",
"process.env.__NEXT_CROSS_ORIGIN": "''",
"process.env.__NEXT_STRICT_MODE": "false",
"process.env.__NEXT_IMAGE_OPTS": "null"
}
},
"server": {
".env": "NEXT_",
"defaults": {
"process.env.__NEXT_TRAILING_SLASH": "false",
"process.env.__NEXT_OPTIMIZE_FONTS": "false",
"process.env.NODE_ENV": "\"development\"",
"process.env.__NEXT_OPTIMIZE_IMAGES": "false",
"process.env.__NEXT_OPTIMIZE_CSS": "false",
"process.env.__NEXT_ROUTER_BASEPATH": "''",
"process.env.__NEXT_SCROLL_RESTORATION": "false",
"process.env.__NEXT_I18N_SUPPORT": "false",
"process.env.__NEXT_HAS_REWRITES": "false",
"process.env.__NEXT_ANALYTICS_ID": "null",
"process.env.__NEXT_CROSS_ORIGIN": "''",
"process.env.__NEXT_STRICT_MODE": "false",
"process.env.__NEXT_IMAGE_OPTS": "null",
"global": "globalThis",
"window": "undefined"
}
}
}
}
}
}
```
Here are type definitions:
```ts
type Framework = Environment & {
// This changes whats printed in the console on load
displayName?: string;
// This allows a prefix to be added (and ignored) to requests.
// Useful for integrating an existing framework that expects internal routes to have a prefix
// e.g. "_next"
assetPrefix?: string;
development?: Environment;
production?: Environment;
// The directory used for serving unmodified assets like fonts and images
// Defaults to "public" if exists, else "static", else disabled.
static?: string;
// "onimportcss" disables the automatic "onimportcss" feature
// If the framework does routing, you may want to handle CSS manually
// "facade" removes CSS imports from JavaScript files,
// and replaces an imported object with a proxy that mimics CSS module support without doing any class renaming.
css?: "onimportcss" | "facade";
// Bun's filesystem router
router?: Router;
};
type Define = {
// By passing ".env", Bun will automatically load .env.local, .env.development, and .env if exists in the project root
// (in addition to the processes environment variables)
// When "*", all environment variables will be automatically injected into the JavaScript loader
// When a string like "NEXT_PUBLIC_", only environment variables starting with that prefix will be injected
".env": string | "*";
// These environment variables will be injected into the JavaScript loader
// These are the equivalent of Webpacks resolve.alias and esbuilds --define.
// Values are parsed as JSON, so they must be valid JSON. The only exception is '' is a valid string, to simplify writing stringified JSON in JSON.
// If not set, `process.env.NODE_ENV` will be transformed into "development".
"defaults": Record<string, string>;
};
type Environment = {
// This is a wrapper for the client-side entry point for a route.
// This allows frameworks to run initialization code on pages.
client: string;
// This is a wrapper for the server-side entry point for a route.
// This allows frameworks to run initialization code on pages.
server: string;
// This runs when "server" code fails to load due to an exception.
fallback: string;
// This is how environment variables and .env is configured.
define?: Define;
};
// Bun's filesystem router
// Currently, Bun supports pages by either an absolute match or a parameter match.
// pages/index.tsx will be executed on navigation to "/" and "/index"
// pages/posts/[id].tsx will be executed on navigation to "/posts/123"
// Routes & parameters are automatically passed to `fallback` and `server`.
type Router = {
// This determines the folder to look for pages
dir: string[];
// These are the allowed file extensions for pages.
extensions?: string[];
};
```
To use a framework, you pass `bun bun --use package-name`.
Your frameworks `package.json` `name` should start with `bun-framework-`. This is so that people can type something like `bun bun --use next` and it will check `bun-framework-next` first. This is similar to how Babel plugins tend to start with `babel-plugin-`.
For developing frameworks, you can also do `bun bun --use ./relative-path-to-framework`.
If youre interested in adding a framework integration, please reach out. Theres a lot here, and its not entirely documented yet.

View File

@@ -1,33 +0,0 @@
To create a new Next.js app with bun:
```bash
$ bun create next ./app
$ cd app
$ bun dev # start dev server
```
To use an existing Next.js app with bun:
```bash
$ bun add bun-framework-next
$ echo "framework = 'next'" > bunfig.toml
$ bun bun # bundle dependencies
$ bun dev # start dev server
```
Many of Next.js features are supported, but not all.
Heres what doesnt work yet:
- `getStaticPaths`
- same-origin `fetch` inside of `getStaticProps` or `getServerSideProps`
- locales, zones, `assetPrefix` (workaround: change `--origin \"http://localhost:3000/assetPrefixInhere\"`)
- `next/image` is polyfilled to a regular `<img src>` tag.
- `proxy` and anything else in `next.config.js`
- API routes, middleware (middleware is easier to support, though! Similar SSR API)
- styled-jsx (technically not Next.js, but often used with it)
- React Server Components
When using Next.js, Bun automatically reads configuration from `.env.local`, `.env.development` and `.env` (in that order). `process.env.NEXT_PUBLIC_` and `process.env.NEXT_` automatically are replaced via `--define`.
Currently, any time you import new dependencies from `node_modules`, you will need to re-run `bun bun --use next`. This will eventually be automatic.

View File

@@ -1,36 +0,0 @@
[Buchta](https://buchtajs.com) is a fullstack framework designed to take full advantage of Bun's strengths. It currently supports Preact and Svelte.
To get started:
```bash
$ bunx buchta init myapp
Project templates:
- svelte
- default
- preact
Name of template: preact
Do you want TSX? y
Do you want SSR? y
Enable livereload? y
Buchta Preact project was setup successfully!
$ cd myapp
$ bun install
$ bunx buchta serve
```
To implement a simple HTTP server with Buchta:
```ts#server.ts
import { Buchta, type BuchtaRequest, type BuchtaResponse } from "buchta";
const app = new Buchta();
app.get("/api/hello/", (req: BuchtaRequest, res: BuchtaResponse) => {
res.send("Hello, World!");
});
app.run();
```
For more information, refer to Buchta's [documentation](https://buchtajs.com/docs/).

View File

@@ -1,7 +1,7 @@
[Elysia](https://elysiajs.com) is a Bun-first performance focused web framework that takes full advantage of Bun's HTTP, file system, and hot reloading APIs.
Designed with TypeScript in mind, you don't need to understand TypeScript to gain the benefit of TypeScript with Elysia. The library understands what you want and automatically infers the type from your code.
:zap: Elysia is [one of the fastest Bun web frameworks](https://github.com/SaltyAom/bun-http-framework-benchmark)
⚡️ Elysia is [one of the fastest Bun web frameworks](https://github.com/SaltyAom/bun-http-framework-benchmark)
```ts#server.ts
import { Elysia } from 'elysia'
@@ -9,7 +9,7 @@ import { Elysia } from 'elysia'
const app = new Elysia()
.get('/', () => 'Hello Elysia')
.listen(8080)
console.log(`🦊 Elysia is running at on port ${app.server.port}...`)
```

View File

@@ -22,7 +22,7 @@ app.listen(port, () => {
Bun implements the [`node:http`](https://nodejs.org/api/http.html) and [`node:https`](https://nodejs.org/api/https.html) modules that these libraries rely on. These modules can also be used directly, though [`Bun.serve`](/docs/api/http) is recommended for most use cases.
{% callout %}
**Note** — Refer to the [Runtime > Node.js APIs](/docs/runtime/nodejs-apis#node_http) page for more detailed compatibility information.
**Note** — Refer to the [Runtime > Node.js APIs](/docs/runtime/nodejs-apis#node-http) page for more detailed compatibility information.
{% /callout %}
```ts

View File

@@ -1,15 +1,16 @@
[Hono](https://github.com/honojs/hono) is a lightweight ultrafast web framework designed for the edge.
```ts
import { Hono } from 'hono'
const app = new Hono()
import { Hono } from "hono";
const app = new Hono();
app.get('/', (c) => c.text('Hono!'))
app.get("/", c => c.text("Hono!"));
export default app
export default app;
```
Get started with `bun create` or follow Hono's [Bun quickstart](https://hono.dev/getting-started/bun).
```bash
$ bun create hono ./myapp
$ cd myapp

View File

@@ -2,7 +2,7 @@
name: Convert a Blob to a ReadableStream
---
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, inluding `.stream()`. This returns `Promise<ReadableStream>`.
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, including `.stream()`. This returns `Promise<ReadableStream>`.
```ts
const blob = new Blob(["hello world"]);

View File

@@ -2,7 +2,7 @@
name: Convert a Blob to a string
---
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, inluding `.text()`.
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, including `.text()`.
```ts
const blob = new Blob(["hello world"]);

View File

@@ -0,0 +1,72 @@
---
name: Build an app with Astro and Bun
---
Initialize a fresh Astro app with `bun create astro`. The `create-astro` package detects when you are using `bunx` and will automatically install dependencies using `bun`.
```sh
$ bun create astro
╭─────╮ Houston:
│ ◠ ◡ ◠ We're glad to have you on board.
╰─────╯
astro v3.1.4 Launch sequence initiated.
dir Where should we create your new project?
./fumbling-field
tmpl How would you like to start your new project?
Use blog template
✔ Template copied
deps Install dependencies?
Yes
✔ Dependencies installed
ts Do you plan to write TypeScript?
Yes
use How strict should TypeScript be?
Strict
✔ TypeScript customized
git Initialize a new git repository?
Yes
✔ Git initialized
next Liftoff confirmed. Explore your project!
Enter your project directory using cd ./fumbling-field
Run `bun run dev` to start the dev server. CTRL+C to stop.
Add frameworks like react or tailwind using astro add.
Stuck? Join us at https://astro.build/chat
╭─────╮ Houston:
│ ◠ ◡ ◠ Good luck out there, astronaut! 🚀
╰─────╯
```
---
Start the dev server with `bunx`.
By default, Bun will run the dev server with Node.js. To use the Bun runtime instead, use the `--bun` flag.
```sh
$ bunx --bun astro dev
🚀 astro v3.1.4 started in 200ms
┃ Local http://localhost:4321/
┃ Network use --host to expose
```
---
Open [http://localhost:4321](http://localhost:4321) with your browser to see the result. Astro will hot-reload your app as you edit your source files.
{% image src="https://i.imgur.com/Dswiu6w.png" caption="An Astro v3 starter app running on Bun" %}
---
Refer to the [Astro docs](https://docs.astro.build/en/getting-started/) for complete documentation.

View File

@@ -2,7 +2,7 @@
name: Create a Discord bot
---
Discord.js works [out of the box](https://bun.sh/blog/bun-v0.6.7) with Bun. Let's write a simple bot. First create a directory and initialize it with `bun init`.
Discord.js works out of the box with Bun. Let's write a simple bot. First create a directory and initialize it with `bun init`.
```bash
mkdir my-bot
@@ -74,4 +74,4 @@ Ready! Logged in as my-bot#1234
---
You're up and running with a bare-bones Discord.js bot! This is a basic guide to setting up your bot with Bun; we recommend the [official Discord docs](https://discordjs.guide/) for complete information on the `discord.js` API.
You're up and running with a bare-bones Discord.js bot! This is a basic guide to setting up your bot with Bun; we recommend the [official discord.js docs](https://discordjs.guide/) for complete information on the `discord.js` API.

View File

@@ -0,0 +1,31 @@
---
name: Build an HTTP server using Elysia and Bun
---
[Elysia](https://elysiajs.com) is a Bun-first performance focused web framework that takes full advantage of Bun's HTTP, file system, and hot reloading APIs. Get started with `bun create`.
```bash
$ bun create elysia myapp
$ cd myapp
$ bun run dev
```
---
To define a simple HTTP route and start a server with Elysia:
```ts#server.ts
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/', () => 'Hello Elysia')
.listen(8080)
console.log(`🦊 Elysia is running at on port ${app.server?.port}...`)
```
---
Elysia is a full-featured server framework with Express-like syntax, type inference, middleware, file uploads, and plugins for JWT authentication, tRPC, and more. It's also is one of the [fastest Bun web frameworks](https://github.com/SaltyAom/bun-http-framework-benchmark).
Refer to the Elysia [documentation](https://elysiajs.com/quick-start.html) for more information.

View File

@@ -0,0 +1,40 @@
---
name: Build an HTTP server using Express and Bun
---
Express and other major Node.js HTTP libraries should work out of the box. Bun implements the [`node:http`](https://nodejs.org/api/http.html) and [`node:https`](https://nodejs.org/api/https.html) modules that these libraries rely on.
{% callout %}
Refer to the [Runtime > Node.js APIs](/docs/runtime/nodejs-apis#node-http) page for more detailed compatibility information.
{% /callout %}
```sh
$ bun add express
```
---
To define a simple HTTP route and start a server with Express:
```ts#server.ts
import express from "express";
const app = express();
const port = 8080;
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.listen(port, () => {
console.log(`Listening on port ${port}...`);
});
```
---
To start the server on `localhost`:
```sh
$ bun server.ts
```

View File

@@ -0,0 +1,39 @@
---
name: Build an HTTP server using Hono and Bun
---
[Hono](https://github.com/honojs/hono) is a lightweight ultrafast web framework designed for the edge.
```ts
import { Hono } from "hono";
const app = new Hono();
app.get("/", c => c.text("Hono!"));
export default app;
```
---
Use `create-hono` to get started with one of Hono's project templates. Select `bun` when prompted for a template.
```bash
$ bun create hono myapp
✔ Which template do you want to use? bun
cloned honojs/starter#main to /path/to/myapp
✔ Copied project files
$ cd myapp
$ bun install
```
---
Then start the dev server and visit [localhost:3000](http://localhost:3000).
```bash
$ bun run dev
```
---
Refer to Hono's guide on [getting started with Bun](https://hono.dev/getting-started/bun) for more information.

View File

@@ -1,5 +1,5 @@
---
name: Use MongoDB and Mongoose
name: Read and write data to MongoDB using Mongoose and Bun
---
MongoDB and Mongoose work out of the box with Bun. This guide assumes you've already installed MongoDB and are running it as background process/service on your development machine. Follow [this guide](https://www.mongodb.com/docs/manual/installation/) for details.
@@ -33,11 +33,18 @@ const animalSchema = new mongoose.Schema(
{
name: {type: String, required: true},
sound: {type: String, required: true},
},
{
methods: {
speak() {
console.log(`${this.sound}!`);
},
},
}
);
export type Animal = mongoose.InferSchemaType<typeof animalSchema>;
export const Animal = mongoose.model('Kitten', animalSchema);
export const Animal = mongoose.model('Animal', animalSchema);
```
---
@@ -62,13 +69,13 @@ await cow.save(); // saves to the database
const animals = await Animal.find();
animals[0].speak(); // logs "Moo!"
// disconect
// disconnect
await mongoose.disconnect();
```
---
Lets run this with `bun run`.
Let's run this with `bun run`.
```bash
$ bun run index.ts

View File

@@ -0,0 +1,44 @@
---
name: Build an app with Next.js and Bun
---
{% callout %}
The Next.js [App Router](https://nextjs.org/docs/app) currently relies on Node.js APIs that Bun does not yet implement. The guide below uses Bun to initialize a project and install dependencies, but it uses Node.js to run the dev server.
{% /callout %}
---
Initialize a Next.js app with `create-next-app`. This automatically installs dependencies using `npm`.
```sh
$ bun create next-app
✔ What is your project named? … my-app
✔ Would you like to use TypeScript with this project? … No / Yes
✔ Would you like to use ESLint with this project? … No / Yes
✔ Would you like to use `src/` directory with this project? … No / Yes
✔ Would you like to use experimental `app/` directory with this project? … No / Yes
✔ What import alias would you like configured? … @/*
Creating a new Next.js app in /path/to/my-app.
```
---
To start the dev server with Bun, run `bun --bun run dev` from the project root.
```sh
$ cd my-app
$ bun --bun run dev
```
---
To run the dev server with Node.js instead, omit `--bun`.
```sh
$ cd my-app
$ bun run dev
```
---
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. Any changes you make to `(pages/app)/index.tsx` will be hot-reloaded in the browser.

Some files were not shown because too many files have changed in this diff Show More