diff options
-rw-r--r-- | src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp | 8 | ||||
-rw-r--r-- | src/bun.js/builtins/js/ImportMetaObject.js | 6 | ||||
-rw-r--r-- | src/bun.js/modules/EventsModule.h | 18 | ||||
-rw-r--r-- | src/runtime.js | 2 | ||||
-rw-r--r-- | test/bun.js/node-builtins.test.js | 20 |
5 files changed, 41 insertions, 13 deletions
diff --git a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp index 0afe19141..360168176 100644 --- a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp @@ -168,7 +168,7 @@ const char* const s_importMetaObjectLoadCJS2ESMCode = const JSC::ConstructAbility s_importMetaObjectRequireESMCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; const JSC::ConstructorKind s_importMetaObjectRequireESMCodeConstructorKind = JSC::ConstructorKind::None; const JSC::ImplementationVisibility s_importMetaObjectRequireESMCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_importMetaObjectRequireESMCodeLength = 561; +const int s_importMetaObjectRequireESMCodeLength = 626; static const JSC::Intrinsic s_importMetaObjectRequireESMCodeIntrinsic = JSC::NoIntrinsic; const char* const s_importMetaObjectRequireESMCode = "(function (resolved) {\n" \ @@ -184,9 +184,13 @@ const char* const s_importMetaObjectRequireESMCode = " }\n" \ " var exports = @Loader.getModuleNamespaceObject(entry.module);\n" \ " var commonJS = exports.default;\n" \ - " if (commonJS && @isCallable(commonJS) && @commonJSSymbol in commonJS) {\n" \ + " var cjs = commonJS && commonJS[@commonJSSymbol];\n" \ + " if (cjs === 0) {\n" \ + " return commonJS;\n" \ + " } else if (cjs && @isCallable(commonJS)) {\n" \ " return commonJS();\n" \ " }\n" \ + " \n" \ " return exports;\n" \ "})\n" \ ; diff --git a/src/bun.js/builtins/js/ImportMetaObject.js b/src/bun.js/builtins/js/ImportMetaObject.js index d1b409b64..bb943aabf 100644 --- a/src/bun.js/builtins/js/ImportMetaObject.js +++ b/src/bun.js/builtins/js/ImportMetaObject.js @@ -148,9 +148,13 @@ function requireESM(resolved) { } var exports = @Loader.getModuleNamespaceObject(entry.module); var commonJS = exports.default; - if (commonJS && @isCallable(commonJS) && @commonJSSymbol in commonJS) { + var cjs = commonJS && commonJS[@commonJSSymbol]; + if (cjs === 0) { + return commonJS; + } else if (cjs && @isCallable(commonJS)) { return commonJS(); } + return exports; } diff --git a/src/bun.js/modules/EventsModule.h b/src/bun.js/modules/EventsModule.h index d1e14a2db..00966b858 100644 --- a/src/bun.js/modules/EventsModule.h +++ b/src/bun.js/modules/EventsModule.h @@ -3,6 +3,7 @@ namespace Zig { using namespace WebCore; + inline void generateEventsSourceCode(JSC::JSGlobalObject *lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4> &exportNames, @@ -31,6 +32,23 @@ inline void generateEventsSourceCode(JSC::JSGlobalObject *lexicalGlobalObject, exportValues.append(JSC::JSFunction::create( vm, lexicalGlobalObject, 0, MAKE_STATIC_STRING_IMPL("on"), Events_functionOn, ImplementationVisibility::Public)); + + JSFunction *eventEmitterModuleCJS = + jsCast<JSFunction *>(WebCore::JSEventEmitter::getConstructor( + vm, reinterpret_cast<Zig::GlobalObject *>(globalObject))); + + eventEmitterModuleCJS->putDirect( + vm, + PropertyName( + Identifier::fromUid(vm.symbolRegistry().symbolForKey("CommonJS"_s))), + jsNumber(0), 0); + + for (size_t i = 0; i < exportNames.size(); i++) { + eventEmitterModuleCJS->putDirect(vm, exportNames[i], exportValues.at(i), 0); + } + + exportNames.append(JSC::Identifier::fromString(vm, "default"_s)); + exportValues.append(eventEmitterModuleCJS); } } // namespace Zig diff --git a/src/runtime.js b/src/runtime.js index 10223e712..e1cf9e3df 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -128,7 +128,7 @@ export var __commonJS = (cb, name) => { return mod_exports; }; - requireFunction[cjsRequireSymbol] = true; + requireFunction[cjsRequireSymbol] = 1; return requireFunction; }; diff --git a/test/bun.js/node-builtins.test.js b/test/bun.js/node-builtins.test.js index df31c64fc..67050f31a 100644 --- a/test/bun.js/node-builtins.test.js +++ b/test/bun.js/node-builtins.test.js @@ -1,16 +1,18 @@ import { describe, it, expect } from "bun:test"; import { EventEmitter } from "events"; - +var emitters = [EventEmitter, require("events")]; describe("EventEmitter", () => { it("should emit events", () => { - const emitter = new EventEmitter(); - var called = false; - const listener = () => { - called = true; - }; - emitter.on("test", listener); - emitter.emit("test"); - expect(called).toBe(true); + for (let Emitter of emitters) { + const emitter = new Emitter(); + var called = false; + const listener = () => { + called = true; + }; + emitter.on("test", listener); + emitter.emit("test"); + expect(called).toBe(true); + } }); }); |