From 4e4cae0fc308c448fb73d59228fb30bd994453ed Mon Sep 17 00:00:00 2001 From: Dylan Conway <35280289+dylan-conway@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:16:59 -0700 Subject: [PATCH] webpack test and add empty `prototype` prop to module (#3421) --- src/bun.js/modules/NodeModuleModule.cpp | 9 ++++--- test/js/third_party/webpack/package.json | 7 ++++++ test/js/third_party/webpack/test.js | 11 +++++++++ test/js/third_party/webpack/webpack.test.ts | 27 +++++++++++++++++++++ test/js/third_party/webpack/world.js | 3 +++ test/package.json | 4 ++- 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 test/js/third_party/webpack/package.json create mode 100644 test/js/third_party/webpack/test.js create mode 100644 test/js/third_party/webpack/webpack.test.ts create mode 100644 test/js/third_party/webpack/world.js diff --git a/src/bun.js/modules/NodeModuleModule.cpp b/src/bun.js/modules/NodeModuleModule.cpp index 34d45698f0..88e08a3acc 100644 --- a/src/bun.js/modules/NodeModuleModule.cpp +++ b/src/bun.js/modules/NodeModuleModule.cpp @@ -142,10 +142,10 @@ void generateNodeModuleModule(JSC::JSGlobalObject *globalObject, exportValues.append( jsCast(globalObject)->lazyRequireCacheObject()); - exportNames.append(JSC::Identifier::fromString(vm, "builtinModules"_s)); + exportNames.append(JSC::Identifier::fromString(vm, "prototype"_s)); + exportValues.append(constructEmptyObject(globalObject)); - exportNames.append(JSC::Identifier::fromString(vm, "globalPaths"_s)); - exportValues.append(JSC::constructEmptyArray(globalObject, 0)); + exportNames.append(JSC::Identifier::fromString(vm, "builtinModules"_s)); JSC::JSArray *builtinModules = JSC::JSArray::create( vm, @@ -167,5 +167,8 @@ void generateNodeModuleModule(JSC::JSGlobalObject *globalObject, builtinModules->putDirectIndex(globalObject, 6, JSC::jsString(vm, String("bun:sqlite"_s))); exportValues.append(builtinModules); + + exportNames.append(JSC::Identifier::fromString(vm, "globalPaths"_s)); + exportValues.append(JSC::constructEmptyArray(globalObject, 0)); } } // namespace Zig diff --git a/test/js/third_party/webpack/package.json b/test/js/third_party/webpack/package.json new file mode 100644 index 0000000000..fb08bfdc55 --- /dev/null +++ b/test/js/third_party/webpack/package.json @@ -0,0 +1,7 @@ +{ + "name": "webpack-test", + "version": "2.0.0", + "dependencies": { + "webpack": "5.88.0" + } +} \ No newline at end of file diff --git a/test/js/third_party/webpack/test.js b/test/js/third_party/webpack/test.js new file mode 100644 index 0000000000..bfd3e80a19 --- /dev/null +++ b/test/js/third_party/webpack/test.js @@ -0,0 +1,11 @@ +import { world } from "./world.js"; + +function component() { + const element = document.createElement("div"); + + element.innerHTML = "hello " + world(); + + return element; +} + +document.body.appendChild(component()); diff --git a/test/js/third_party/webpack/webpack.test.ts b/test/js/third_party/webpack/webpack.test.ts new file mode 100644 index 0000000000..ffc8195c67 --- /dev/null +++ b/test/js/third_party/webpack/webpack.test.ts @@ -0,0 +1,27 @@ +import { bunExe, bunEnv } from "harness"; +import { existsSync, rmdirSync } from "fs"; +import { join } from "path"; + +afterEach(() => { + rmdirSync(join(import.meta.dir, "dist"), { recursive: true }); +}); + +test("webpack works", () => { + Bun.spawnSync({ + cmd: [bunExe(), "-b", "webpack", "--entry", "./test.js", "-o", "./dist/test1/main.js"], + cwd: import.meta.dir, + env: bunEnv, + }); + + expect(existsSync(join(import.meta.dir, "dist", "test1/main.js"))).toBe(true); +}); + +test("webpack --watch works", async () => { + Bun.spawnSync({ + cmd: ["timeout", "3", bunExe(), "-b", "webpack", "--entry", "./test.js", "-o", "./dist/test2/main.js", "--watch"], + cwd: import.meta.dir, + env: bunEnv, + }); + + expect(existsSync(join(import.meta.dir, "dist", "test2/main.js"))).toBe(true); +}); diff --git a/test/js/third_party/webpack/world.js b/test/js/third_party/webpack/world.js new file mode 100644 index 0000000000..3fa21bf678 --- /dev/null +++ b/test/js/third_party/webpack/world.js @@ -0,0 +1,3 @@ +export function world() { + return "world"; +} diff --git a/test/package.json b/test/package.json index b9aa55ae28..d4246ea430 100644 --- a/test/package.json +++ b/test/package.json @@ -23,7 +23,9 @@ "svelte": "^3.55.1", "typescript": "^5.0.2", "undici": "^5.20.0", - "vitest": "^0.32.2" + "vitest": "^0.32.2", + "webpack": "5.88.0", + "webpack-cli": "4.7.2" }, "private": true, "scripts": {