diff options
Diffstat (limited to '')
-rw-r--r-- | src/bun.js/modules/NodeModuleModule.cpp | 134 |
1 files changed, 66 insertions, 68 deletions
diff --git a/src/bun.js/modules/NodeModuleModule.cpp b/src/bun.js/modules/NodeModuleModule.cpp index f11277709..3019ea95c 100644 --- a/src/bun.js/modules/NodeModuleModule.cpp +++ b/src/bun.js/modules/NodeModuleModule.cpp @@ -19,34 +19,15 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModuleCreateRequire, return JSC::JSValue::encode(JSC::jsUndefined()); } - auto str = callFrame->uncheckedArgument(0).toStringOrNull(globalObject); + auto val = callFrame->uncheckedArgument(0).toWTFString(globalObject); RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); - WTF::String val = str->value(globalObject); - auto *meta = Zig::ImportMetaObject::create(globalObject, str); auto clientData = WebCore::clientData(vm); - auto requireFunction = - Zig::ImportMetaObject::createRequireFunction(vm, globalObject, val); - auto nameStr = jsCast<JSFunction *>(requireFunction)->name(vm); - JSC::JSBoundFunction *boundRequireFunction = - JSC::JSBoundFunction::create(vm, globalObject, requireFunction, meta, - ArgList(), 0, jsString(vm, nameStr)); - boundRequireFunction->putDirect( - vm, clientData->builtinNames().resolvePublicName(), - requireFunction->getDirect( - vm, clientData->builtinNames().resolvePublicName()), - 0); - - RELEASE_AND_RETURN(scope, JSValue::encode(boundRequireFunction)); -} -JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModulePaths, - (JSC::JSGlobalObject * globalObject, - JSC::CallFrame *callFrame)) { - return JSC::JSValue::encode(JSC::JSArray::create( - globalObject->vm(), - globalObject->arrayStructureForIndexingTypeDuringAllocation( - ArrayWithContiguous), - 0)); + RELEASE_AND_RETURN( + scope, JSValue::encode(Zig::ImportMetaObject::createRequireFunction( + vm, globalObject, val))); } +extern "C" EncodedJSValue Resolver__nodeModulePathsForJS(JSGlobalObject *, + CallFrame *); JSC_DEFINE_HOST_FUNCTION(jsFunctionFindSourceMap, (JSGlobalObject * globalObject, @@ -122,48 +103,56 @@ void generateNodeModuleModule(JSC::JSGlobalObject *globalObject, JSC::MarkedArgumentBuffer &exportValues) { JSC::VM &vm = globalObject->vm(); - exportValues.append(JSFunction::create( - vm, globalObject, 1, String("createRequire"_s), - jsFunctionNodeModuleCreateRequire, ImplementationVisibility::Public)); - exportValues.append(JSFunction::create(vm, globalObject, 1, String("paths"_s), - jsFunctionNodeModulePaths, - ImplementationVisibility::Public)); - exportValues.append(JSFunction::create( - vm, globalObject, 1, String("findSourceMap"_s), jsFunctionFindSourceMap, - ImplementationVisibility::Public)); - exportValues.append(JSFunction::create( - vm, globalObject, 0, String("syncBuiltinExports"_s), - jsFunctionSyncBuiltinExports, ImplementationVisibility::Public)); - exportValues.append( - JSFunction::create(vm, globalObject, 1, String("SourceMap"_s), - jsFunctionSourceMap, ImplementationVisibility::Public, - NoIntrinsic, jsFunctionSourceMap, nullptr)); - - exportNames.append(JSC::Identifier::fromString(vm, "createRequire"_s)); - exportNames.append(JSC::Identifier::fromString(vm, "paths"_s)); - exportNames.append(JSC::Identifier::fromString(vm, "findSourceMap"_s)); - exportNames.append(JSC::Identifier::fromString(vm, "syncBuiltinExports"_s)); - exportNames.append(JSC::Identifier::fromString(vm, "SourceMap"_s)); - - // note: this is not technically correct - // it doesn't set process.mainModule - exportNames.append(JSC::Identifier::fromString(vm, "_resolveFileName"_s)); - exportValues.append(JSFunction::create( - vm, globalObject, 3, String("_resolveFileName"_s), - jsFunctionResolveFileName, ImplementationVisibility::Public)); - - exportNames.append(JSC::Identifier::fromString(vm, "_nodeModulePaths"_s)); - exportValues.append(JSFunction::create( - vm, globalObject, 0, String("_nodeModulePaths"_s), - jsFunctionNodeModulePaths, ImplementationVisibility::Public)); - - exportNames.append(JSC::Identifier::fromString(vm, "_cache"_s)); - exportValues.append(JSC::constructEmptyObject(globalObject)); - - exportNames.append(JSC::Identifier::fromString(vm, "builtinModules"_s)); - - exportNames.append(JSC::Identifier::fromString(vm, "globalPaths"_s)); - exportValues.append(JSC::constructEmptyArray(globalObject, 0)); + JSObject *defaultObject = JSC::constructEmptyObject( + vm, globalObject->nullPrototypeObjectStructure()); + auto append = [&](Identifier name, JSValue value) { + defaultObject->putDirect(vm, name, value); + exportNames.append(name); + exportValues.append(value); + }; + + append(Identifier::fromString(vm, "createRequire"_s), + JSFunction::create(vm, globalObject, 1, String("createRequire"_s), + jsFunctionNodeModuleCreateRequire, + ImplementationVisibility::Public)); + + append(Identifier::fromString(vm, "paths"_s), + JSFunction::create(vm, globalObject, 1, String("paths"_s), + Resolver__nodeModulePathsForJS, + ImplementationVisibility::Public)); + + append(Identifier::fromString(vm, "findSourceMap"_s), + JSFunction::create(vm, globalObject, 1, String("findSourceMap"_s), + jsFunctionFindSourceMap, + ImplementationVisibility::Public)); + append(Identifier::fromString(vm, "syncBuiltinExports"_s), + JSFunction::create(vm, globalObject, 0, String("syncBuiltinExports"_s), + jsFunctionSyncBuiltinExports, + ImplementationVisibility::Public)); + append(Identifier::fromString(vm, "SourceMap"_s), + JSFunction::create(vm, globalObject, 1, String("SourceMap"_s), + jsFunctionSourceMap, + ImplementationVisibility::Public, NoIntrinsic, + jsFunctionSourceMap, nullptr)); + + append(JSC::Identifier::fromString(vm, "_resolveFilename"_s), + JSFunction::create(vm, globalObject, 3, String("_resolveFilename"_s), + jsFunctionResolveFileName, + ImplementationVisibility::Public)); + + append(JSC::Identifier::fromString(vm, "_nodeModulePaths"_s), + JSFunction::create(vm, globalObject, 0, String("_nodeModulePaths"_s), + Resolver__nodeModulePathsForJS, + ImplementationVisibility::Public)); + + append(JSC::Identifier::fromString(vm, "_cache"_s), + jsCast<Zig::GlobalObject *>(globalObject)->lazyRequireCacheObject()); + + append(JSC::Identifier::fromString(vm, "globalPaths"_s), + JSC::constructEmptyArray(globalObject, nullptr, 0)); + + append(JSC::Identifier::fromString(vm, "prototype"_s), + JSC::constructEmptyObject(globalObject)); JSC::JSArray *builtinModules = JSC::JSArray::create( vm, @@ -184,6 +173,15 @@ void generateNodeModuleModule(JSC::JSGlobalObject *globalObject, JSC::jsString(vm, String("bun:ffi"_s))); builtinModules->putDirectIndex(globalObject, 6, JSC::jsString(vm, String("bun:sqlite"_s))); - exportValues.append(builtinModules); + + append(JSC::Identifier::fromString(vm, "builtinModules"_s), builtinModules); + + defaultObject->putDirect(vm, + JSC::PropertyName(Identifier::fromUid( + vm.symbolRegistry().symbolForKey("CommonJS"_s))), + jsNumber(0), 0); + + exportNames.append(vm.propertyNames->defaultKeyword); + exportValues.append(defaultObject); } } // namespace Zig |