diff options
author | 2023-09-18 19:29:56 -0400 | |
---|---|---|
committer | 2023-09-18 16:29:56 -0700 | |
commit | 333e217c320fdf5a6b62fa31df18389f01887bdd (patch) | |
tree | 2959dfcf1fe6c3b8390390913f9ec42a7a811870 /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | f77df12894e7952ea58605432bf9f6d252fff273 (diff) | |
download | bun-333e217c320fdf5a6b62fa31df18389f01887bdd.tar.gz bun-333e217c320fdf5a6b62fa31df18389f01887bdd.tar.zst bun-333e217c320fdf5a6b62fa31df18389f01887bdd.zip |
feat(runtime): Implement `console.Console` (#5448)
* prototype
* asdfg
* It works!
* okay its done now fr
* self review
* ok
* fix
* fix test
---------
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index a75135844..9b36157fe 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -3315,11 +3315,44 @@ JSValue getEventSourceConstructor(VM& vm, JSObject* thisObject) if (returnedException) { throwException(globalObject, scope, returnedException.get()); + return jsUndefined(); } RELEASE_AND_RETURN(scope, result); } +// `console.Console` or `import { Console } from 'console';` +JSC_DEFINE_CUSTOM_GETTER(getConsoleConstructor, (JSGlobalObject * globalObject, EncodedJSValue thisValue, PropertyName property)) +{ + auto& vm = globalObject->vm(); + auto console = JSValue::decode(thisValue).getObject(); + JSC::JSFunction* createConsoleConstructor = JSC::JSFunction::create(vm, consoleObjectCreateConsoleConstructorCodeGenerator(vm), globalObject); + JSC::MarkedArgumentBuffer args; + args.append(console); + JSC::CallData callData = JSC::getCallData(createConsoleConstructor); + NakedPtr<JSC::Exception> returnedException = nullptr; + auto result = JSC::call(globalObject, createConsoleConstructor, callData, console, args, returnedException); + if (returnedException) { + auto scope = DECLARE_THROW_SCOPE(vm); + throwException(globalObject, scope, returnedException.get()); + } + console->putDirect(vm, property, result, 0); + return JSValue::encode(result); +} + +JSC_DEFINE_CUSTOM_SETTER(EventSource_setter, + (JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue thisValue, + JSC::EncodedJSValue value, JSC::PropertyName property)) +{ + if (JSValue::decode(thisValue) != globalObject) { + return false; + } + + auto& vm = globalObject->vm(); + globalObject->putDirect(vm, property, JSValue::decode(value), 0); + return true; +} + EncodedJSValue GlobalObject::assignToStream(JSValue stream, JSValue controller) { JSC::VM& vm = this->vm(); @@ -3542,7 +3575,8 @@ void GlobalObject::addBuiltinGlobals(JSC::VM& vm) JSC::JSObject* consoleObject = this->get(this, JSC::Identifier::fromString(vm, "console"_s)).getObject(); consoleObject->putDirectBuiltinFunction(vm, this, vm.propertyNames->asyncIteratorSymbol, consoleObjectAsyncIteratorCodeGenerator(vm), PropertyAttribute::Builtin | 0); - consoleObject->putDirectBuiltinFunction(vm, this, clientData->builtinNames().writePublicName(), consoleObjectWriteCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::ReadOnly | 0); + consoleObject->putDirectBuiltinFunction(vm, this, clientData->builtinNames().writePublicName(), consoleObjectWriteCodeGenerator(vm), PropertyAttribute::Builtin | 0); + consoleObject->putDirectCustomAccessor(vm, Identifier::fromString(vm, "Console"_s), CustomGetterSetter::create(vm, getConsoleConstructor, nullptr), 0); } extern "C" bool JSC__JSGlobalObject__startRemoteInspector(JSC__JSGlobalObject* globalObject, unsigned char* host, uint16_t arg1) |