Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
2c9f4b6
Implement createCachedData
heimskr Apr 28, 2025
b0b7b85
Produce a proper Buffer
heimskr Apr 28, 2025
6f41459
Fix wrong SourceCodeType
heimskr Apr 28, 2025
3263005
Add support for produceCachedData and cachedDataProduced
heimskr Apr 29, 2025
737b04e
Some progress on supporting the cachedData option in node:vm
heimskr Apr 30, 2025
9fa3989
Add cachedData support in node:vm (test-vm-cached-data.js)
heimskr Apr 30, 2025
0e35e73
Add test-vm-createcacheddata.js
heimskr Apr 30, 2025
0708bae
Add test for createCachedData
heimskr Apr 30, 2025
618c7c3
Merge branch 'main' into kai/vm-compat-2
heimskr Apr 30, 2025
20769c4
Update WebKit version
heimskr Apr 30, 2025
bae2771
Merge branch 'main' into kai/vm-compat-2
heimskr Apr 30, 2025
fed7962
Address feedback
heimskr Apr 30, 2025
e58a36f
More cachedData tests
heimskr Apr 30, 2025
cb482b3
You can never have too many tests
heimskr Apr 30, 2025
8009728
Address feedback
heimskr Apr 30, 2025
fe6c6ef
Address feedback again
heimskr Apr 30, 2025
6b31f98
Check for parser errors too
heimskr Apr 30, 2025
0bc2397
Add some RETURN_IF_EXCEPTIONs
heimskr Apr 30, 2025
cbd5e1b
Add some more RETURN_IF_EXCEPTIONs
heimskr Apr 30, 2025
6635571
Adjust lifetimes and fix incorrect use of ParserError::isValid()
heimskr Apr 30, 2025
32a094d
Initial work on vm.Module
heimskr May 1, 2025
10d14a3
Add a null check
heimskr May 1, 2025
2c1888d
Merge branch 'kai/vm-compat-2' into kai/vm-compat-modules
heimskr May 1, 2025
bc1654b
Some more work on vm.Module
heimskr May 2, 2025
62dfa74
yay, it links
heimskr May 2, 2025
a8cae28
A couple slight changes
heimskr May 3, 2025
a58c2a9
getModuleRequests
heimskr May 3, 2025
c787145
Implement validateInternalField
heimskr May 3, 2025
a0384f6
Custom inspection for vm.Module
heimskr May 3, 2025
c59f7ad
Reorganize node:vm native code
heimskr May 5, 2025
94db5f9
WIP slop
heimskr May 6, 2025
9ee4d46
Merge branch 'main' into kai/vm-compat-modules
heimskr May 7, 2025
4359ef2
More work on vm.Module linking
heimskr May 7, 2025
d3b6ec6
Merge kai/vm-compat
heimskr May 7, 2025
550eea3
Progress on SourceTextModule evaluation
heimskr May 7, 2025
a8854f8
Fix contextual store detection
heimskr May 7, 2025
68866ab
Get breakOnSigint working for SourceTextModule
heimskr May 9, 2025
1b07336
Support timeouts in SourceTextModule evaluation
heimskr May 9, 2025
dd0d08e
Add test-vm-timeout-escape-promise-module.js
heimskr May 9, 2025
a7e3f31
Safety nitpicks in ZigGlobalObject.cpp that probably make no differen…
heimskr May 13, 2025
72d0151
Pass declared/lexical module variables
heimskr May 13, 2025
d12d0b9
Remove some garbage
heimskr May 13, 2025
e2d5bfa
Recursive module evaluation support (sync-only for now) + namespace o…
heimskr May 14, 2025
dbf3897
test-vm-module-link.js
heimskr May 14, 2025
d6c1de3
Fix vm.runInContext options
heimskr May 14, 2025
b72cf78
Match Node's weird error message
heimskr May 14, 2025
be5e817
vm.compileFunction: handle parser errors better
heimskr May 14, 2025
6fb80d2
Support produceCachedData option in vm.compileFunction
heimskr May 15, 2025
4e5cd8f
Don't support produceCachedData option in vm.compileFunction (oops)
heimskr May 15, 2025
a0ba651
it's a miracle
heimskr May 15, 2025
305fccd
Support options.breakOnSigint in vm.Script.runInContext
heimskr May 15, 2025
09648f3
Support options.breakOnSigint in vm.Script.runInThisContext
heimskr May 15, 2025
e68ada0
test-vm-sigint.js
heimskr May 16, 2025
761b5aa
oops
heimskr May 16, 2025
f2c1d22
test-vm-module-cached-data.js
heimskr May 16, 2025
50a9728
vm.Module.error
heimskr May 16, 2025
aec3c9b
test-vm-module-errors.js
heimskr May 16, 2025
afe9816
Support timeouts better, fix runInNewContext, add test-vm-timeout.js
heimskr May 16, 2025
bbf99ad
Add test-vm-timeout-escape-promise.js
heimskr May 16, 2025
b0ba847
static –> runtime assert in SigintWatcher
heimskr May 16, 2025
6c67a50
Change WebKit version
heimskr May 16, 2025
ea39f03
Merge branch 'main' into kai/vm-compat-modules
heimskr May 17, 2025
1c6a18d
Update WebKit version
heimskr May 21, 2025
a71b080
Update WebKit version again
heimskr May 21, 2025
5dcf255
Merge branch 'main' into kai/vm-compat-modules
heimskr May 23, 2025
02827d3
Merge branch 'main' into kai/vm-compat-modules
heimskr May 23, 2025
659b198
`bun scripts/glob-sources.mjs`
heimskr May 23, 2025
4ba1336
Fix some includes, probably
heimskr May 23, 2025
7ee9a03
Merge branch 'kai/vm-compat-modules' of github.com:oven-sh/bun into k…
heimskr May 23, 2025
cb47360
Can't initialize std::atomic_flag with a boolean
heimskr May 23, 2025
dc509c7
pls don't tear out my new .cpps this time
heimskr May 23, 2025
fc44f65
`bun scripts/glob-sources.mjs`
heimskr May 23, 2025
e27507c
Fix missing root.h include
heimskr May 23, 2025
c463154
"fix" SigintWatcher
heimskr May 23, 2025
6c08fd8
SigintWatcher on Windows, perchance?
heimskr May 23, 2025
59541fd
Fix options.displayErrors validation (allow it to be present but unde…
heimskr May 23, 2025
e34fd75
Remove a static initializer
heimskr May 23, 2025
e930e31
Or I could just do this
heimskr May 23, 2025
be56093
breakOnSigint too I suppose
heimskr May 23, 2025
ed8f576
Remove another static initializer
heimskr May 24, 2025
c2ba7ef
Don't allow null context values
heimskr May 24, 2025
4a08366
Don't allow null context values in createContext
heimskr May 24, 2025
174a0fc
Merge branch 'main' into kai/vm-compat-modules
heimskr May 24, 2025
dbdc63e
Use WTF::Thread, WTF::Lock and WTF::Locker instead of std::thread, st…
heimskr May 24, 2025
76a3ed5
Remove some unused includes
heimskr May 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmake/Sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"src/bun.js/bindings/v8/shim/*.cpp",
"src/bake/*.cpp",
"src/deps/*.cpp",
"src/vm/*.cpp",
"packages/bun-usockets/src/crypto/*.cpp"
]
},
Expand Down
5 changes: 5 additions & 0 deletions cmake/sources/CxxSources.txt
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ src/bun.js/bindings/NodeTLS.cpp
src/bun.js/bindings/NodeURL.cpp
src/bun.js/bindings/NodeValidator.cpp
src/bun.js/bindings/NodeVM.cpp
src/bun.js/bindings/NodeVMModule.cpp
src/bun.js/bindings/NodeVMScript.cpp
src/bun.js/bindings/NodeVMSourceTextModule.cpp
src/bun.js/bindings/NoOpForTesting.cpp
src/bun.js/bindings/ObjectBindings.cpp
src/bun.js/bindings/objects.cpp
Expand Down Expand Up @@ -466,3 +469,5 @@ src/bun.js/modules/NodeUtilTypesModule.cpp
src/bun.js/modules/ObjectModule.cpp
src/deps/libuwsockets.cpp
src/io/io_darwin.cpp
src/vm/Semaphore.cpp
src/vm/SigintWatcher.cpp
4 changes: 2 additions & 2 deletions cmake/targets/BuildBun.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -744,7 +744,7 @@ target_include_directories(${bun} PRIVATE
${NODEJS_HEADERS_PATH}/include
)

if(NOT WIN32)
if(NOT WIN32)
target_include_directories(${bun} PRIVATE ${CWD}/src/bun.js/bindings/libuv)
endif()

Expand Down Expand Up @@ -877,7 +877,7 @@ if(NOT WIN32)
-Wno-nullability-completeness
-Werror
)

if(ENABLE_ASAN)
target_compile_options(${bun} PUBLIC
-fsanitize=address
Expand Down
4 changes: 2 additions & 2 deletions src/bun.js/bindings/BunProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -875,8 +875,8 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionChdir, (JSC::JSGlobalObject * globalObj
RELEASE_AND_RETURN(scope, JSC::JSValue::encode(result));
}

static HashMap<String, int>* signalNameToNumberMap = nullptr;
static HashMap<int, String>* signalNumberToNameMap = nullptr;
static HashMap<String, int>* signalNameToNumberMap = nullptr;

// On windows, signals need to have a handle to the uv_signal_t. When sigaction is used, this is kept track globally for you.
struct SignalHandleValue {
Expand Down Expand Up @@ -1143,7 +1143,7 @@ static void onDidChangeListeners(EventEmitter& eventEmitter, const Identifier& e
{
if (Bun__isMainThreadVM()) {
// IPC handlers
if (eventName.string() == "message"_s || eventName.string() == "disconnect"_s) {
if (eventName == "message" || eventName == "disconnect") {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's undo this diff

Suggested change
if (eventName == "message" || eventName == "disconnect") {
if (eventName.string() == "message"_s || eventName.string() == "disconnect"_s) {

auto* global = jsCast<GlobalObject*>(eventEmitter.scriptExecutionContext()->jsGlobalObject());
auto& vm = JSC::getVM(global);
auto messageListenerCount = eventEmitter.listenerCount(vm.propertyNames->message);
Expand Down
28 changes: 28 additions & 0 deletions src/bun.js/bindings/ErrorCode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2224,6 +2224,26 @@ JSC_DEFINE_HOST_FUNCTION(Bun::jsFunctionMakeErrorWithCode, (JSC::JSGlobalObject
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_CHILD_PROCESS_STDIO_MAXBUFFER, message));
}

case Bun::ErrorCode::ERR_VM_MODULE_STATUS: {
auto arg0 = callFrame->argument(1);
auto str0 = arg0.toWTFString(globalObject);
RETURN_IF_EXCEPTION(scope, {});
auto message = makeString("Module status "_s, str0);
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_VM_MODULE_STATUS, message));
}

case Bun::ErrorCode::ERR_VM_MODULE_LINK_FAILURE: {
auto arg0 = callFrame->argument(1);
auto message = arg0.toWTFString(globalObject);
RETURN_IF_EXCEPTION(scope, {});
auto cause = callFrame->argument(2);
JSObject* error = createError(globalObject, ErrorCode::ERR_VM_MODULE_LINK_FAILURE, message);
RETURN_IF_EXCEPTION(scope, {});
error->putDirect(vm, Identifier::fromString(vm, "cause"_s), cause);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
error->putDirect(vm, Identifier::fromString(vm, "cause"_s), cause);
error->putDirect(vm, vm.propertyNames->cause, cause);

RETURN_IF_EXCEPTION(scope, {});
return JSC::JSValue::encode(error);
}

case ErrorCode::ERR_IPC_DISCONNECTED:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_IPC_DISCONNECTED, "IPC channel is already disconnected"_s));
case ErrorCode::ERR_SERVER_NOT_RUNNING:
Expand Down Expand Up @@ -2332,6 +2352,14 @@ JSC_DEFINE_HOST_FUNCTION(Bun::jsFunctionMakeErrorWithCode, (JSC::JSGlobalObject
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_HTTP_SOCKET_ASSIGNED, "Socket already assigned"_s));
case ErrorCode::ERR_STREAM_RELEASE_LOCK:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_STREAM_RELEASE_LOCK, "Stream reader cancelled via releaseLock()"_s));
case ErrorCode::ERR_VM_MODULE_ALREADY_LINKED:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_VM_MODULE_ALREADY_LINKED, "Module has already been linked"_s));
case ErrorCode::ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA, "Cached data cannot be created for a module which has been evaluated"_s));
case ErrorCode::ERR_VM_MODULE_NOT_MODULE:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_VM_MODULE_NOT_MODULE, "Provided module is not an instance of Module"_s));
case ErrorCode::ERR_VM_MODULE_DIFFERENT_CONTEXT:
return JSC::JSValue::encode(createError(globalObject, ErrorCode::ERR_VM_MODULE_DIFFERENT_CONTEXT, "Linked modules must use the same context"_s));

default: {
break;
Expand Down
9 changes: 7 additions & 2 deletions src/bun.js/bindings/ErrorCode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,6 @@ const errors: ErrorCodeMapping = [
["ERR_UNKNOWN_ENCODING", TypeError],
["ERR_UNKNOWN_SIGNAL", TypeError],
["ERR_USE_AFTER_CLOSE", Error],
["ERR_VM_MODULE_CACHED_DATA_REJECTED", Error],
["ERR_VM_MODULE_LINK_FAILURE", Error],
["ERR_WASI_NOT_STARTED", Error],
["ERR_WORKER_INIT_FAILED", Error],
["ERR_WORKER_NOT_RUNNING", Error],
Expand Down Expand Up @@ -283,6 +281,13 @@ const errors: ErrorCodeMapping = [
["HPE_INVALID_EOF_STATE", Error],
["HPE_INVALID_METHOD", Error],
["HPE_INTERNAL", Error],
["ERR_VM_MODULE_STATUS", Error],
["ERR_VM_MODULE_ALREADY_LINKED", Error],
["ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA", Error],
["ERR_VM_MODULE_NOT_MODULE", Error],
["ERR_VM_MODULE_DIFFERENT_CONTEXT", Error],
["ERR_VM_MODULE_LINK_FAILURE", Error],
["ERR_VM_MODULE_CACHED_DATA_REJECTED", Error],
["HPE_INVALID_HEADER_TOKEN", Error],
["HPE_HEADER_OVERFLOW", Error],
];
Expand Down
1 change: 1 addition & 0 deletions src/bun.js/bindings/JSNextTickQueue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ void JSNextTickQueue::drain(JSC::VM& vm, JSC::JSGlobalObject* globalObject)
RETURN_IF_EXCEPTION(throwScope, );
if (mustResetContext) {
globalObject->m_asyncContextData.get()->putInternalField(vm, 0, jsUndefined());
RETURN_IF_EXCEPTION(throwScope, );
}
auto* drainFn = internalField(2).get().getObject();
MarkedArgumentBuffer drainArgs;
Expand Down
Loading