bun
bun copied to clipboard
Support V8 C++ APIs for "nan" addons and other packages to work
Affected packages
- [ ]
better-sqlite3
- [ ]
node-canvas@v2
(node-canvas v3 is supported) - [ ]
midi
- [ ]
libxmljs
- [ ]
bignum
- [ ]
zeromq
- [ ]
node-libcurl
- [ ]
bson-ext
- [ ]
heapdump
- [ ]
@datadog/native-metrics
- [ ]
tiny-secp256k1
- [ ]
tree-sitter-c-sharp
- [ ]
chacha-native
- [ ]
@sentry/profiling-node
- [ ]
pdfjs-dist
- [ ]
gl
- [ ]
leveldown
/pouchdb
- [x]
sleep
- [x]
cpu-features
- [ ]
odbc
- [ ]
msgpackr
- [ ]
re2
- [ ]
node-pty
- [ ]
i2c
Functions implemented
- [x]
v8::Isolate::GetCurrent()
- [x]
v8::Isolate::TryGetCurrent()
- [x]
v8::Isolate::GetCurrentContext()
- [x]
v8::Number::New(v8::Isolate*, double)
- [x]
v8::Number::Value() const
- [x]
v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
- [x]
v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const
- [x]
v8::api_internal::ToLocalEmpty()
- [x]
v8::String::Length() const
- [x]
v8::External::New(v8::Isolate*, void*)
- [x]
v8::External::Value() const
- [x]
v8::Object::New(v8::Isolate*)
- [x]
v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)
- [x]
v8::Object::SetInternalField(int, v8::Local<v8::Data>)
- [x]
v8::Object::SlowGetInternalField(int)
- [x]
v8::HandleScope::HandleScope(v8::Isolate*)
- [x]
v8::HandleScope::~HandleScope()
- [x]
v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)
- [x]
v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int, v8::ConstructorBehavior, v8::SideEffectType, v8::CFunction const*, unsigned short, unsigned short, unsigned short)
(only when all parameters pastdata
are their default values) - [x]
v8::ObjectTemplate::NewInstance(v8::Local<v8::Context>)
- [x]
v8::ObjectTemplate::SetInternalFieldCount(int)
- [x]
v8::ObjectTemplate::InternalFieldCount() const
- [x]
v8::ObjectTemplate::New(v8::Isolate*, v8::Local<v8::FunctionTemplate>)
(only when no FunctionTemplate is provided) - [x]
v8::EscapableHandleScopeBase::EscapeSlot(unsigned long*)
- [x]
v8::EscapableHandleScopeBase::EscapableHandleScopeBase(v8::Isolate*)
- [x]
node_module_register
- [x]
v8::Function::SetName(v8::Local<v8::String>)
- [x]
v8::Value::IsBoolean() const
- [x]
v8::Boolean::Value() const
- [x]
v8::Value::FullIsTrue() const
- [x]
v8::Value::FullIsFalse() const
- [x]
v8::EscapableHandleScope::EscapableHandleScope(v8::Isolate*)
- [x]
v8::EscapableHandleScope::~EscapableHandleScope()
- [x]
v8::Value::IsObject() const
- [x]
v8::Value::IsNumber() const
- [x]
v8::Value::IsUint32() const
- [x]
v8::Value::Uint32Value(v8::Local<v8::Context>) const
- [x]
v8::Value::IsUndefined() const
- [x]
v8::Value::IsNull() const
- [x]
v8::Value::IsNullOrUndefined() const
- [x]
v8::Value::IsTrue() const
- [x]
v8::Value::IsFalse() const
- [x]
v8::Value::IsString() const
- [x]
v8::Boolean::New(v8::Isolate*, bool)
- [x]
v8::Object::GetInternalField(int)
- [ ]
node::AddEnvironmentCleanupHook(v8::Isolate*, void (*)(void*), void*)
- [ ]
node::RemoveEnvironmentCleanupHook(v8::Isolate*, void (*)(void*), void*)
- [x]
v8::HandleScope::CreateHandle(v8::internal::Isolate*, unsigned long)
- [ ]
v8::internal::IsolateFromNeverReadOnlySpaceObject(unsigned long)
- [ ]
v8::Array::New(v8::Isolate*, v8::Local<v8::Value>*, unsigned long)
- [ ]
v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)
Major areas of unimplemented functionality
- [ ] Array
- [ ] ObjectTemplate with a constructor function
- [ ] Less-simple cases of FunctionTemplate
- [ ] ArrayBuffer
- [ ]
bun install
fixes (need to pass node-gyp the right version) - [x] Doubles
- [x] UTF-16 strings
- [x] Persistent handles
What version of Bun is running?
0.8.0+ad326b77342dd3d8585a30b7da803d32f9c11fe2
What platform is your computer?
Linux 6.4.10-artix1-1 x86_64 unknown
What steps can reproduce the bug?
import Database from 'better-sqlite3';
const db = new Database('foobar.db', {});
console.log(db.prepare("CREATE TABLE TEST").run());
What is the expected behavior?
Run as normally
What do you see instead?
/usr/bin/bun: symbol lookup error: /home/hyro/Workspace/booo/node_modules/better-sqlite3/build/Release/better_sqlite3.node: undefined symbol: node_module_register
Additional information
Related thread: 1144181146809270332 Message: https://discord.com/channels/876711213126520882/1144181146809270332/1144184224006557747
All versions are affected
This also happens for node-libcurl
I also encounter this error
this also happens for bson-ext
also for heapdump
same for @datadog/native-metrics
Likewise for tiny-secp256k1
Also for cdktf-cli #5306
Also happens with tree-sitter-c-sharp
Same error for chacha-native
same for node-canvas
bun: symbol lookup error: /root/rut/node_modules/canvas/build/Release/canvas.node: undefined symbol: node_module_register same for canvas
Same for libxmljs
How can we get a little more attention to this. This is holding me back from using bun in production. :cry:
node-libcurl
bun: symbol lookup error: /home/.../node_modules/node-libcurl/lib/binding/node_libcurl.node: undefined symbol: node_module_register
bun: symbol lookup error: /root/rut/node_modules/canvas/build/Release/canvas.node: undefined symbol: node_module_register same for canvas
me too
similar error:
bun: symbol lookup error: /usr/src/app/node_modules/@sentry/profiling-node/lib/sentry_cpu_profiler-linux-x64-glibc-115.node: undefined symbol: _ZN2v87Isolate10GetCurrentEv
Also happening for Sentry & bcrypt Sentry code: Code:
const Sentry = require('@sentry/bun');
const { ProfilingIntegration } = require("@sentry/profiling-node")
Error:
bun: symbol lookup error: /root/projects/userBackend/node_modules/@sentry/profiling-node/lib/sentry_cpu_profiler-linux-x64-glibc-115.node: undefined symbol: _ZN2v87Isolate10GetCurrentEv
Same for https://github.com/TulipCharts/tulipnode
bun: symbol lookup error: node_modules/tulind/lib/binding/Release/node-v115-linux-x64/tulind.node: undefined symbol: node_module_register
node_module_register
uses & expects V8 C++ APIs. Bun uses JavaScriptCore, an entirely different JavaScript engine. This is especially challenging for Bun to support, but not without precedent. node-jsc did it.
Same with New Relic
Same for https://github.com/zeromq/zeromq.js
bun: symbol lookup error: node_modules/zeromq/prebuilds/linux-x64/node.napi.glibc.node: undefined symbol: uv_async_init
node_libcurl.node: undefined symbol: node_module_register wen node-libcurl
bun: symbol lookup error: .../node_modules/gl/build/Release/webgl.node: undefined symbol: node_module_register
Trying to use @testcontainers/postgresql
also leads to the node_module_register
error
Same in pdfjs-dist
(related to canvas
).
This blocks using node-gtk
in combination with bun build --compile
to produce standalone GTK apps.
Trying to use pcsclite
also leads to the node_module_register
error
Also node-pty , Release/pty.node: undefined symbol: node_module_register
I also need this for my project.
I also get this error with the opencv
bindings:
bun: symbol lookup error: /home/arthur/dev/ai/manga/node_modules/opencv4nodejs/build/Release/opencv4nodejs.node: undefined symbol: node_module_register
what is the status on this, is there anything I can do to get it to run ?
I also encountered this problem. This question has been raised for a long time. Is there still no solution?