aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/modules/NodeModuleModule.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/modules/NodeModuleModule.h')
-rw-r--r--src/bun.js/modules/NodeModuleModule.h53
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),