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.h68
1 files changed, 45 insertions, 23 deletions
diff --git a/src/bun.js/modules/NodeModuleModule.h b/src/bun.js/modules/NodeModuleModule.h
index e51f2ac86..3f2caaba6 100644
--- a/src/bun.js/modules/NodeModuleModule.h
+++ b/src/bun.js/modules/NodeModuleModule.h
@@ -157,6 +157,25 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionIsBuiltinModule,
return JSValue::encode(jsBoolean(isBuiltinModule(moduleStr)));
}
+JSC_DEFINE_HOST_FUNCTION(jsFunctionWrap, (JSC::JSGlobalObject * globalObject,
+ JSC::CallFrame *callFrame)) {
+ auto &vm = globalObject->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ JSString *code = callFrame->argument(0).toStringOrNull(globalObject);
+ RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined()));
+ if (!code) {
+ return JSC::JSValue::encode(JSC::jsUndefined());
+ }
+
+ JSString *prefix = jsString(
+ vm,
+ String(
+ "(function (exports, require, module, __filename, __dirname) { "_s));
+ JSString *suffix = jsString(vm, String("\n});"_s));
+
+ return JSValue::encode(jsString(globalObject, prefix, code, suffix));
+}
+
JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModuleCreateRequire,
(JSC::JSGlobalObject * globalObject,
JSC::CallFrame *callFrame)) {
@@ -250,31 +269,33 @@ template <std::size_t N, class T> consteval std::size_t countof(T (&)[N]) {
namespace Zig {
DEFINE_NATIVE_MODULE(NodeModule) {
- // the default object here is a function, so we cant use the INIT_NATIVE_MODULE helper
+ // the default object here is a function, so we cant use the
+ // INIT_NATIVE_MODULE helper
- Zig::GlobalObject *globalObject = reinterpret_cast<Zig::GlobalObject *>(lexicalGlobalObject);
- JSC::VM &vm = globalObject->vm();
- JSC::JSObject *defaultObject = JSC::JSFunction::create(
- vm, globalObject, 0, "Module"_s, jsFunctionNodeModuleModuleConstructor,
- JSC::ImplementationVisibility::Public, JSC::NoIntrinsic,
+ Zig::GlobalObject *globalObject =
+ reinterpret_cast<Zig::GlobalObject *>(lexicalGlobalObject);
+ JSC::VM &vm = globalObject->vm();
+ JSC::JSObject *defaultObject = JSC::JSFunction::create(
+ vm, globalObject, 0, "Module"_s, jsFunctionNodeModuleModuleConstructor,
+ JSC::ImplementationVisibility::Public, JSC::NoIntrinsic,
jsFunctionNodeModuleModuleConstructor);
- auto put = [&](JSC::Identifier name, JSC::JSValue value) {
- defaultObject->putDirect(vm, name, value);
- exportNames.append(name);
- exportValues.append(value);
- };
- auto putNativeFn = [&](JSC::Identifier name, JSC::NativeFunction ptr) {
- JSC::JSFunction *value = JSC::JSFunction::create(
- vm, globalObject, 1, name.string(), ptr,
- JSC::ImplementationVisibility::Public, JSC::NoIntrinsic, ptr);
- defaultObject->putDirect(vm, name, value);
- exportNames.append(name);
- exportValues.append(value);
- };
- exportNames.reserveCapacity(13);
- exportValues.ensureCapacity(13);
- exportNames.append(vm.propertyNames->defaultKeyword);
- exportValues.append(defaultObject);
+ auto put = [&](JSC::Identifier name, JSC::JSValue value) {
+ defaultObject->putDirect(vm, name, value);
+ exportNames.append(name);
+ exportValues.append(value);
+ };
+ auto putNativeFn = [&](JSC::Identifier name, JSC::NativeFunction ptr) {
+ JSC::JSFunction *value = JSC::JSFunction::create(
+ vm, globalObject, 1, name.string(), ptr,
+ JSC::ImplementationVisibility::Public, JSC::NoIntrinsic, ptr);
+ defaultObject->putDirect(vm, name, value);
+ exportNames.append(name);
+ exportValues.append(value);
+ };
+ exportNames.reserveCapacity(14);
+ exportValues.ensureCapacity(14);
+ exportNames.append(vm.propertyNames->defaultKeyword);
+ exportValues.append(defaultObject);
putNativeFn(Identifier::fromString(vm, "createRequire"_s),
jsFunctionNodeModuleCreateRequire);
@@ -291,6 +312,7 @@ DEFINE_NATIVE_MODULE(NodeModule) {
jsFunctionResolveFileName);
putNativeFn(Identifier::fromString(vm, "_nodeModulePaths"_s),
Resolver__nodeModulePathsForJS);
+ putNativeFn(Identifier::fromString(vm, "wrap"_s), jsFunctionWrap);
put(Identifier::fromString(vm, "_cache"_s),
jsCast<Zig::GlobalObject *>(globalObject)->lazyRequireCacheObject());