aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ZigGlobalObject.cpp
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-09-18 19:29:56 -0400
committerGravatar GitHub <noreply@github.com> 2023-09-18 16:29:56 -0700
commit333e217c320fdf5a6b62fa31df18389f01887bdd (patch)
tree2959dfcf1fe6c3b8390390913f9ec42a7a811870 /src/bun.js/bindings/ZigGlobalObject.cpp
parentf77df12894e7952ea58605432bf9f6d252fff273 (diff)
downloadbun-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.cpp36
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)