aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/modules/NodeModuleModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/modules/NodeModuleModule.cpp')
-rw-r--r--src/bun.js/modules/NodeModuleModule.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/bun.js/modules/NodeModuleModule.cpp b/src/bun.js/modules/NodeModuleModule.cpp
new file mode 100644
index 000000000..319d18478
--- /dev/null
+++ b/src/bun.js/modules/NodeModuleModule.cpp
@@ -0,0 +1,138 @@
+#include "root.h"
+
+#include "./NodeModuleModule.h"
+
+#include "ImportMetaObject.h"
+#include "JavaScriptCore/JSBoundFunction.h"
+
+using namespace Zig;
+using namespace JSC;
+
+JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModuleCreateRequire,
+ (JSC::JSGlobalObject * globalObject,
+ JSC::CallFrame *callFrame)) {
+ JSC::VM &vm = globalObject->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ if (callFrame->argumentCount() < 1) {
+ throwTypeError(globalObject, scope,
+ "createRequire() requires at least one argument"_s);
+ return JSC::JSValue::encode(JSC::jsUndefined());
+ }
+
+ Zig::ImportMetaObject *importMetaObject = Zig::ImportMetaObject::create(
+ globalObject, callFrame->uncheckedArgument(0));
+ auto clientData = WebCore::clientData(vm);
+
+ RETURN_IF_EXCEPTION(scope, {});
+
+ if (!importMetaObject) {
+ throwTypeError(globalObject, scope, "Invalid path"_s);
+ return JSC::JSValue::encode(JSC::jsUndefined());
+ }
+
+ auto requireFunctionValue = importMetaObject->get(
+ globalObject, clientData->builtinNames().requirePublicName());
+ RETURN_IF_EXCEPTION(scope, {});
+
+ JSC::JSBoundFunction *boundRequireFunction = JSC::JSBoundFunction::create(
+ vm, globalObject, requireFunctionValue.getObject(), importMetaObject,
+ nullptr, 1, jsString(vm, String("require"_s)));
+ RETURN_IF_EXCEPTION(scope, {});
+ auto resolveFunction = importMetaObject->get(
+ globalObject, clientData->builtinNames().resolveSyncPublicName());
+
+ JSC::JSBoundFunction *boundResolveFunction = JSC::JSBoundFunction::create(
+ vm, globalObject, resolveFunction.getObject(), importMetaObject, nullptr,
+ 1, jsString(vm, String("resolve"_s)));
+ boundRequireFunction->putDirect(
+ vm, clientData->builtinNames().resolvePublicName(), boundResolveFunction,
+ JSC::PropertyAttribute::Function | 0);
+
+ RELEASE_AND_RETURN(scope, JSC::JSValue::encode(boundRequireFunction));
+}
+JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModulePaths,
+ (JSC::JSGlobalObject * globalObject,
+ JSC::CallFrame *callFrame)) {
+ return JSC::JSValue::encode(JSC::JSArray::create(globalObject->vm(), 0));
+}
+
+JSC_DEFINE_HOST_FUNCTION(jsFunctionFindSourceMap,
+ (JSGlobalObject * globalObject,
+ CallFrame *callFrame)) {
+ auto &vm = globalObject->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ throwException(globalObject, scope,
+ createError(globalObject, "Not implemented"_s));
+ return JSValue::encode(jsUndefined());
+}
+
+JSC_DEFINE_HOST_FUNCTION(jsFunctionSyncBuiltinExports,
+ (JSGlobalObject * globalObject,
+ CallFrame *callFrame)) {
+ return JSValue::encode(jsUndefined());
+}
+
+JSC_DEFINE_HOST_FUNCTION(jsFunctionSourceMap, (JSGlobalObject * globalObject,
+ CallFrame *callFrame)) {
+ auto &vm = globalObject->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ throwException(globalObject, scope,
+ createError(globalObject, "Not implemented"_s));
+ return JSValue::encode(jsUndefined());
+}
+
+namespace Zig {
+
+void generateNodeModuleModule(JSC::JSGlobalObject *globalObject,
+ JSC::Identifier moduleKey,
+ Vector<JSC::Identifier, 4> &exportNames,
+ 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));
+
+ exportNames.append(JSC::Identifier::fromString(vm, "builtinModules"_s));
+
+ JSC::JSArray *builtinModules = JSC::JSArray::create(
+ vm,
+ globalObject->arrayStructureForIndexingTypeDuringAllocation(
+ ArrayWithContiguous),
+ 7);
+ builtinModules->putDirectIndex(globalObject, 0,
+ JSC::jsString(vm, String("node:assert"_s)));
+ builtinModules->putDirectIndex(globalObject, 1,
+ JSC::jsString(vm, String("node:buffer"_s)));
+ builtinModules->putDirectIndex(globalObject, 2,
+ JSC::jsString(vm, String("node:events"_s)));
+ builtinModules->putDirectIndex(globalObject, 3,
+ JSC::jsString(vm, String("node:util"_s)));
+ builtinModules->putDirectIndex(globalObject, 4,
+ JSC::jsString(vm, String("node:path"_s)));
+ builtinModules->putDirectIndex(globalObject, 5,
+ JSC::jsString(vm, String("bun:ffi"_s)));
+ builtinModules->putDirectIndex(globalObject, 6,
+ JSC::jsString(vm, String("bun:sqlite"_s)));
+ exportValues.append(builtinModules);
+}
+} // namespace Zig