implement require.extensions attempt 2 (#18686)

This commit is contained in:
chloe caruso
2025-04-01 14:31:16 -07:00
committed by GitHub
parent 13068395c0
commit c29933f823
60 changed files with 1448 additions and 194 deletions

View File

@@ -12,6 +12,7 @@
#include <JavaScriptCore/JSInternalPromise.h>
#include "JavaScriptCore/Completion.h"
#include "JavaScriptCore/JSNativeStdFunction.h"
#include "JSCommonJSExtensions.h"
#include "PathInlines.h"
#include "ZigGlobalObject.h"
@@ -562,6 +563,12 @@ static JSValue getModuleCacheObject(VM& vm, JSObject* moduleObject)
->lazyRequireCacheObject();
}
static JSValue getModuleExtensionsObject(VM& vm, JSObject* moduleObject)
{
return jsCast<Zig::GlobalObject*>(moduleObject->globalObject())
->lazyRequireExtensionsObject();
}
static JSValue getModuleDebugObject(VM& vm, JSObject* moduleObject)
{
return JSC::constructEmptyObject(moduleObject->globalObject());
@@ -574,13 +581,6 @@ static JSValue getPathCacheObject(VM& vm, JSObject* moduleObject)
vm, globalObject->nullPrototypeObjectStructure());
}
static JSValue getModuleExtensionsObject(VM& vm, JSObject* moduleObject)
{
auto* globalObject = defaultGlobalObject(moduleObject->globalObject());
return globalObject->requireFunctionUnbound()->getIfPropertyExists(
globalObject, Identifier::fromString(vm, "extensions"_s));
}
static JSValue getSourceMapFunction(VM& vm, JSObject* moduleObject)
{
auto* globalObject = defaultGlobalObject(moduleObject->globalObject());
@@ -951,6 +951,42 @@ void addNodeModuleConstructorProperties(JSC::VM& vm,
JSC::NoIntrinsic, jsFunctionResolveFileName);
init.set(resolveFilenameFunction);
});
globalObject->m_modulePrototypeUnderscoreCompileFunction.initLater(
[](const Zig::GlobalObject::Initializer<JSFunction>& init) {
JSFunction* resolveFilenameFunction = JSFunction::create(
init.vm, init.owner, 2, "_compile"_s,
functionJSCommonJSModule_compile, JSC::ImplementationVisibility::Public,
JSC::NoIntrinsic, functionJSCommonJSModule_compile);
init.set(resolveFilenameFunction);
});
globalObject->m_commonJSRequireESMFromHijackedExtensionFunction.initLater(
[](const Zig::GlobalObject::Initializer<JSFunction>& init) {
JSC::JSFunction* requireESM = JSC::JSFunction::create(init.vm, init.owner, commonJSRequireESMFromHijackedExtensionCodeGenerator(init.vm), init.owner);
init.set(requireESM);
});
globalObject->m_lazyRequireCacheObject.initLater(
[](const Zig::GlobalObject::Initializer<JSObject>& init) {
JSC::VM& vm = init.vm;
JSC::JSGlobalObject* globalObject = init.owner;
auto* function = JSFunction::create(vm, globalObject, static_cast<JSC::FunctionExecutable*>(commonJSCreateRequireCacheCodeGenerator(vm)), globalObject);
NakedPtr<JSC::Exception> returnedException = nullptr;
auto result = JSC::profiledCall(globalObject, ProfilingReason::API, function, JSC::getCallData(function), globalObject, ArgList(), returnedException);
ASSERT(!returnedException);
init.set(result.toObject(globalObject));
});
globalObject->m_lazyRequireExtensionsObject.initLater(
[](const Zig::GlobalObject::Initializer<Bun::JSCommonJSExtensions>& init) {
JSC::VM& vm = init.vm;
JSC::JSGlobalObject* globalObject = init.owner;
init.set(JSCommonJSExtensions::create(vm, globalObject, JSCommonJSExtensions::createStructure(vm, globalObject, globalObject->nullPrototype())));
});
}
JSC_DEFINE_HOST_FUNCTION(jsFunctionIsModuleResolveFilenameSlowPathEnabled,