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 pastdataare 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 installfixes (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?