diff options
Diffstat (limited to 'src/bun.js/modules/NodeModuleModule.h')
-rw-r--r-- | src/bun.js/modules/NodeModuleModule.h | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/src/bun.js/modules/NodeModuleModule.h b/src/bun.js/modules/NodeModuleModule.h index 0da967f65..eeac4c0ea 100644 --- a/src/bun.js/modules/NodeModuleModule.h +++ b/src/bun.js/modules/NodeModuleModule.h @@ -152,6 +152,40 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionIsBuiltinModule, return JSValue::encode(jsBoolean(Bun::isBuiltinModule(moduleStr))); } +// Might be faster as a JS builtin +JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModulePreloadModules, + (JSC::JSGlobalObject * globalObject, + JSC::CallFrame *callFrame)) { + JSC::VM &vm = globalObject->vm(); + auto scope = DECLARE_THROW_SCOPE(vm); + + JSValue requests = callFrame->argument(0); + + JSArray *requestsArray = jsDynamicCast<JSArray *>(requests.asCell()); + if (!requestsArray) + return JSValue::encode(jsUndefined()); + + auto length = requestsArray->length(); + auto requireFn = jsCast<Zig::GlobalObject *>(globalObject) + ->getDirect(vm, WebCore::clientData(vm) + ->builtinNames() + .overridableRequirePrivateName()); + + if (!requireFn.isCallable()) + return JSValue::encode(jsUndefined()); + + JSC::CallData callData = JSC::getCallData(requireFn); + WTF::NakedPtr<JSC::Exception> exception; + for (unsigned i = 0; i < length; ++i) { + MarkedArgumentBuffer args; + args.append(requestsArray->getIndex(globalObject, i)); + JSValue result = JSC::call(globalObject, requireFn, callData, + JSC::jsUndefined(), args, exception); + if (exception) + return JSValue::encode(jsUndefined()); + } +} + JSC_DEFINE_HOST_FUNCTION(jsFunctionWrap, (JSC::JSGlobalObject * globalObject, JSC::CallFrame *callFrame)) { auto &vm = globalObject->vm(); @@ -201,6 +235,16 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionFindSourceMap, return JSValue::encode(jsUndefined()); } +JSC_DEFINE_HOST_FUNCTION(jsFunctionRegister, (JSGlobalObject * globalObject, + CallFrame *callFrame)) { + auto &vm = globalObject->vm(); + auto scope = DECLARE_THROW_SCOPE(vm); + throwException( + globalObject, scope, + createError(globalObject, "Bun does not support ESM loaders"_s)); + return JSValue::encode(jsUndefined()); +} + JSC_DEFINE_HOST_FUNCTION(jsFunctionSyncBuiltinExports, (JSGlobalObject * globalObject, CallFrame *callFrame)) { @@ -354,8 +398,8 @@ DEFINE_NATIVE_MODULE(NodeModule) { exportNames.append(name); exportValues.append(value); }; - exportNames.reserveCapacity(16); - exportValues.ensureCapacity(16); + exportNames.reserveCapacity(17); + exportValues.ensureCapacity(17); exportNames.append(vm.propertyNames->defaultKeyword); exportValues.append(defaultObject); @@ -366,6 +410,9 @@ DEFINE_NATIVE_MODULE(NodeModule) { globalObject->requireFunctionUnbound()->get( globalObject, Identifier::fromString(vm, "extensions"_s))); + put(Identifier::fromString(vm, "_pathCache"_s), + JSC::constructEmptyObject(globalObject)); + defaultObject->putDirectCustomAccessor( vm, JSC::Identifier::fromString(vm, "_resolveFilename"_s), JSC::CustomGetterSetter::create(vm, get_resolveFilename, @@ -374,6 +421,8 @@ DEFINE_NATIVE_MODULE(NodeModule) { putNativeFn(Identifier::fromString(vm, "__resolveFilename"_s), jsFunctionResolveFileName); + putNativeFn(Identifier::fromString(vm, "_preloadModules"_s), + jsFunctionNodeModulePreloadModules); putNativeFn(Identifier::fromString(vm, "createRequire"_s), jsFunctionNodeModuleCreateRequire); putNativeFn(Identifier::fromString(vm, "paths"_s), |