while trying to get [`node-usb`](https://github.com/node-usb/node-usb) running with bun, it always failed because close() is only allowed when there are no open references.
7e0182df8c/src/node_usb.h (L39-L41)
```c++
inline void ref(){ refs_ = Ref();}
inline void unref(){ refs_ = Unref();}
inline bool canClose(){return refs_ == 0;}
```
`Ref()` and `Unref()` are both called once, with node.js resulting in `refs_ == 0` (which is expected), but with bun `refs_ == 1`.
I've made this small script to reproduce the bug:
https://github.com/alangecker/bun-ref-bug/blob/main/binding.cc
```
run with bun 1.0.6:
- refcount: 2 (expected: 1)
run with node 20.8.1:
- refcount: 1 (expected: 1)
```
during a long debugging journey I found out, that buns `NapiRef::ref()` is also just called once (as expected), but within `napi_wrap()` the `NapiRef` gets initialized already with the refCount set to 1
378385ba60/src/bun.js/bindings/napi.cpp (L669)
```c++
extern "C" napi_status napi_wrap(napi_env env,
napi_value js_object,
void* native_object,
napi_finalize finalize_cb,
void* finalize_hint,
napi_ref* result)
{
// [...]
auto* ref = new NapiRef(globalObject, 1);
// [...]
}
```
After changing it to `new NapiRef(globalObject, 0)` it got the expected behavior / same as with node.js and node-usb works.
as far as I understand it, a `NapiRef`` with refCount=0 should then be weak instead of strong, which is why I have changed this too.
* Update quickstart.md - removed the part for editing `compilerOptions` in `tsconfig.json`
The line is already added to `compilerOptions` in `tsconfig.json` so there is no need to edit the file.
"types": [
"bun-types" // add Bun global
]
This was already added when the project initialized it seems.
* Typescript section
---------
Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
* fix findBestMatch so it finds the best match and not the first match
* update complex-workspaces to include lines-and-columns ^1.1.6
* PR feedback
* PR feedback
* This test doesn't reproduce the original issue
* Support pre release versions the same way
* Add a test that reproduces the original issue
* Sort the list of package versions before serializing to disk
* Remove test that didnt reproduce it
* Fix the count
* Fix 0 and 1 and sorting order
* Fix assertions and ordering
---------
Co-authored-by: Dylan Greene <dgreene@medallia.com>
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
* fix findBestMatch so it finds the best match and not the first match
* update complex-workspaces to include lines-and-columns ^1.1.6
* PR feedback
* PR feedback
* Fix missing function names in Bun.inspect
* Fix failing tests
* Handle @@toStringTag
* Update bindings.cpp
* Revert breaking changes to snapshots until a minor version
* Fix test
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
* fix: support custom file type in Bun.file
In the docs it seamed to suggest this is something supported,
it seamed to be only supported in JSDOMFiles or blob.
This Adds the 2 properties `type` and `lastModified` to be supported on `Bun.file`
Fixes: https://github.com/oven-sh/bun/issues/6507
* fix: implement changes requested in review
Add changes requested in the review and add a test for a non standard
mimetype
* fix(serve): When IPv6 configuration is incorrect, attempt to bind to IPv4 address under the same hostname.
Close: #5315
* fix review
* fix review again
---------
Co-authored-by: Ashcon Partovi <ashcon@partovi.net>
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
In this example there is no server variable in the context, and here it makes more sense to use ws.publish. It is explained below that once the serve is done, the server.publish can be used.
* dfghj
* Handle messages that did not finish
* tidy
* ok
* a
* Merge remote-tracking branch 'origin/main' into dave/ipc-fixes
* test failures
---------
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>