aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-21 21:13:06 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-21 21:13:50 -0700
commitc37d0be027b84192a96e15f6ed70d74269618de5 (patch)
tree6bdd8bac381f31c9f2358b70b6751d047a93dc34
parent4c136cddd7356ad1fb6e03124d7ac60079056d69 (diff)
downloadbun-c37d0be027b84192a96e15f6ed70d74269618de5.tar.gz
bun-c37d0be027b84192a96e15f6ed70d74269618de5.tar.zst
bun-c37d0be027b84192a96e15f6ed70d74269618de5.zip
Fix `import Foo, {bar}` when from hardcoded builtin modules in runtime
Diffstat (limited to '')
-rw-r--r--src/js_printer.zig37
-rw-r--r--test/bun.js/event-emitter.test.ts16
2 files changed, 34 insertions, 19 deletions
diff --git a/src/js_printer.zig b/src/js_printer.zig
index 08064c6e3..707161ffd 100644
--- a/src/js_printer.zig
+++ b/src/js_printer.zig
@@ -690,6 +690,19 @@ pub fn NewPrinter(
p.printIndent();
}
+ if (import.default_name) |default| {
+ p.print("var ");
+ p.printSymbol(default.ref.?);
+ if (comptime Statement == void) {
+ p.print(" = ");
+ p.printRequireOrImportExpr(import.import_record_index, &.{}, Level.lowest, ExprFlag.None());
+ } else {
+ p.print(" = ");
+ p.print(statement);
+ }
+ p.printSemicolonAfterStatement();
+ }
+
if (import.items.len > 0) {
p.print("var ");
p.print("{ ");
@@ -700,13 +713,6 @@ pub fn NewPrinter(
p.printIndent();
}
- if (import.default_name) |default_name| {
- p.print("default:");
- p.printSpaceBeforeIdentifier();
- p.printSymbol(default_name.ref.?);
- p.print(", ");
- }
-
for (import.items) |item, i| {
if (i > 0) {
p.print(",");
@@ -728,7 +734,7 @@ pub fn NewPrinter(
p.printSpace();
}
- if (import.star_name_loc == null) {
+ if (import.star_name_loc == null and import.default_name == null) {
if (comptime Statement == void) {
p.print("} = ");
p.printRequireOrImportExpr(import.import_record_index, &.{}, Level.lowest, ExprFlag.None());
@@ -736,6 +742,10 @@ pub fn NewPrinter(
p.print("} = ");
p.print(statement);
}
+ } else if (import.default_name) |name| {
+ p.print("} =");
+ p.printSpaceBeforeIdentifier();
+ p.printSymbol(name.ref.?);
} else {
p.print("} =");
p.printSpaceBeforeIdentifier();
@@ -743,17 +753,6 @@ pub fn NewPrinter(
}
p.printSemicolonAfterStatement();
- } else if (import.default_name) |default| {
- p.print("var ");
- p.printSymbol(default.ref.?);
- if (comptime Statement == void) {
- p.print(" = ");
- p.printRequireOrImportExpr(import.import_record_index, &.{}, Level.lowest, ExprFlag.None());
- } else {
- p.print(" = ");
- p.print(statement);
- }
- p.printSemicolonAfterStatement();
}
}
diff --git a/test/bun.js/event-emitter.test.ts b/test/bun.js/event-emitter.test.ts
new file mode 100644
index 000000000..4c8d70452
--- /dev/null
+++ b/test/bun.js/event-emitter.test.ts
@@ -0,0 +1,16 @@
+import { test, describe, expect } from "bun:test";
+
+// this is also testing that imports with default and named imports in the same statement work
+// our transpiler transform changes this to a var with import.meta.require
+import EventEmitter, { getEventListeners } from "node:events";
+
+describe("EventEmitter", () => {
+ test("getEventListeners", () => {
+ expect(getEventListeners(new EventEmitter(), "hey").length).toBe(0);
+ });
+ test("EventEmitter constructor", () => {
+ var emitter = new EventEmitter();
+ emitter.setMaxListeners(100);
+ expect(emitter.getMaxListeners()).toBe(100);
+ });
+});