From 6fd0043f6bf766cc488a88339059e8879fa07161 Mon Sep 17 00:00:00 2001 From: dave caruso Date: Thu, 17 Aug 2023 20:56:52 -0700 Subject: Add `util.inspect.custom` support to `util.inspect/Bun.inspect/console.log` (#4194) * start work on util.inspect.custom * asdf * finish util inspect custom inspect * inspect * fix tests * revert * tidy * revert * oops * test * fix issues --- src/bun.js/bindings/ZigGlobalObject.cpp | 38 +++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp') diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 5524166c3..b6ac8e7ea 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -3270,6 +3270,41 @@ void GlobalObject::finishCreation(VM& vm) init.set(JSFunction::create(init.vm, init.owner, 4, "performMicrotaskVariadic"_s, jsFunctionPerformMicrotaskVariadic, ImplementationVisibility::Public)); }); + m_utilInspectFunction.initLater( + [](const Initializer& init) { + JSValue nodeUtilValue = static_cast(init.owner)->internalModuleRegistry()->requireId(init.owner, init.vm, Bun::InternalModuleRegistry::Field::NodeUtil); + RELEASE_ASSERT(nodeUtilValue.isObject()); + init.set(jsCast(nodeUtilValue.getObject()->getIfPropertyExists(init.owner, Identifier::fromString(init.vm, "inspect"_s)))); + }); + + m_utilInspectStylizeColorFunction.initLater( + [](const Initializer& init) { + auto scope = DECLARE_THROW_SCOPE(init.vm); + JSC::JSFunction* getStylize = JSC::JSFunction::create(init.vm, utilInspectGetStylizeWithColorCodeGenerator(init.vm), init.owner); + // RETURN_IF_EXCEPTION(scope, {}); + + JSC::MarkedArgumentBuffer args; + args.append(static_cast(init.owner)->utilInspectFunction()); + + auto clientData = WebCore::clientData(init.vm); + JSC::CallData callData = JSC::getCallData(getStylize); + + NakedPtr returnedException = nullptr; + auto result = JSC::call(init.owner, getStylize, callData, jsNull(), args, returnedException); + // RETURN_IF_EXCEPTION(scope, {}); + + if (returnedException) { + throwException(init.owner, scope, returnedException.get()); + } + // RETURN_IF_EXCEPTION(scope, {}); + init.set(jsCast(result)); + }); + + m_utilInspectStylizeNoColorFunction.initLater( + [](const Initializer& init) { + init.set(JSC::JSFunction::create(init.vm, utilInspectStylizeWithNoColorCodeGenerator(init.vm), init.owner)); + }); + m_nativeMicrotaskTrampoline.initLater( [](const Initializer& init) { init.set(JSFunction::create(init.vm, init.owner, 2, ""_s, functionNativeMicrotaskTrampoline, ImplementationVisibility::Public)); @@ -4606,6 +4641,9 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->m_pendingVirtualModuleResultStructure.visit(visitor); thisObject->m_performMicrotaskFunction.visit(visitor); thisObject->m_performMicrotaskVariadicFunction.visit(visitor); + thisObject->m_utilInspectFunction.visit(visitor); + thisObject->m_utilInspectStylizeColorFunction.visit(visitor); + thisObject->m_utilInspectStylizeNoColorFunction.visit(visitor); thisObject->m_lazyReadableStreamPrototypeMap.visit(visitor); thisObject->m_requireMap.visit(visitor); thisObject->m_encodeIntoObjectStructure.visit(visitor); -- cgit v1.2.3