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