From fde59e56570b924a679e6adb7271d629844d9bf4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 18:19:53 +0900 Subject: [PATCH 1/6] fix(browser): fix mocking from outside of root --- packages/mocker/src/node/resolver.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mocker/src/node/resolver.ts b/packages/mocker/src/node/resolver.ts index 888f404b01ac..d4b77dccd23d 100644 --- a/packages/mocker/src/node/resolver.ts +++ b/packages/mocker/src/node/resolver.ts @@ -103,9 +103,9 @@ export class ServerMockResolver { } private async resolveMockId(rawId: string, importer: string) { - if (!importer.startsWith(this.server.config.root)) { - importer = join(this.server.config.root, importer) - } + // if (!importer.startsWith(this.server.config.root)) { + // importer = join(this.server.config.root, importer) + // } const resolved = await this.server.pluginContainer.resolveId( rawId, importer, From 2484bdaca129fbd25cb4c05cf8eb50a3eb19553d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 18:42:33 +0900 Subject: [PATCH 2/6] fix: fix public mocker --- packages/mocker/src/node/resolver.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/mocker/src/node/resolver.ts b/packages/mocker/src/node/resolver.ts index d4b77dccd23d..9e19a06c551c 100644 --- a/packages/mocker/src/node/resolver.ts +++ b/packages/mocker/src/node/resolver.ts @@ -103,9 +103,16 @@ export class ServerMockResolver { } private async resolveMockId(rawId: string, importer: string) { - // if (!importer.startsWith(this.server.config.root)) { - // importer = join(this.server.config.root, importer) - // } + if (!importer.startsWith(this.server.config.root)) { + const resolved = await this.server.pluginContainer.resolveId( + importer, + this.server.config.root, + { + ssr: false, + }, + ) + importer = resolved?.id ?? this.server.config.root + } const resolved = await this.server.pluginContainer.resolveId( rawId, importer, From eeded513563efcf7668ba6e898157b5f0ee743c9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 19:10:56 +0900 Subject: [PATCH 3/6] test: add test --- .../fixtures/mocking-out-of-root/project1/basic.test.js | 1 + .../fixtures/mocking-out-of-root/project3/index.js | 8 ++++++++ test/browser/fixtures/mocking-out-of-root/project3/lib.js | 1 + 3 files changed, 10 insertions(+) create mode 100644 test/browser/fixtures/mocking-out-of-root/project3/index.js create mode 100644 test/browser/fixtures/mocking-out-of-root/project3/lib.js diff --git a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js index 3aed726e695d..e7dabdd06300 100644 --- a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js +++ b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js @@ -1,5 +1,6 @@ import { test, expect, vi } from 'vitest'; import project2 from "../project2/index.js" +import "../project3/index.js" vi.mock("../project2/index.js", () => ({ default: 'project2-mocked' diff --git a/test/browser/fixtures/mocking-out-of-root/project3/index.js b/test/browser/fixtures/mocking-out-of-root/project3/index.js new file mode 100644 index 000000000000..90cd90668f0e --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project3/index.js @@ -0,0 +1,8 @@ +import { vi, test, expect } from "vitest" +import lib from "./lib.js"; + +vi.mock("./lib.js", () => ({ default: "mocked" })) + +test("project3", () => { + expect(lib).toBe("mocked"); +}) diff --git a/test/browser/fixtures/mocking-out-of-root/project3/lib.js b/test/browser/fixtures/mocking-out-of-root/project3/lib.js new file mode 100644 index 000000000000..6d9bb612b1bb --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project3/lib.js @@ -0,0 +1 @@ +export default "lib" From aea6ea190b325d8fd41894fa3334e197f49f6ad0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 4 Apr 2025 10:13:39 +0900 Subject: [PATCH 4/6] test: tweak --- .../browser/fixtures/mocking-out-of-root/project1/basic.test.js | 2 +- .../mocking-out-of-root/project3/{index.js => imported-test.js} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename test/browser/fixtures/mocking-out-of-root/project3/{index.js => imported-test.js} (82%) diff --git a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js index e7dabdd06300..a7d86c998b59 100644 --- a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js +++ b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js @@ -1,6 +1,6 @@ import { test, expect, vi } from 'vitest'; import project2 from "../project2/index.js" -import "../project3/index.js" +import "../project3/imported-test.js" vi.mock("../project2/index.js", () => ({ default: 'project2-mocked' diff --git a/test/browser/fixtures/mocking-out-of-root/project3/index.js b/test/browser/fixtures/mocking-out-of-root/project3/imported-test.js similarity index 82% rename from test/browser/fixtures/mocking-out-of-root/project3/index.js rename to test/browser/fixtures/mocking-out-of-root/project3/imported-test.js index 90cd90668f0e..23c25e106347 100644 --- a/test/browser/fixtures/mocking-out-of-root/project3/index.js +++ b/test/browser/fixtures/mocking-out-of-root/project3/imported-test.js @@ -3,6 +3,6 @@ import lib from "./lib.js"; vi.mock("./lib.js", () => ({ default: "mocked" })) -test("project3", () => { +test("project3 imported", () => { expect(lib).toBe("mocked"); }) From 5a435ca6794902585b6662c0b387207c0aa1caa2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 4 Apr 2025 10:15:51 +0900 Subject: [PATCH 5/6] test: tweak --- .../fixtures/mocking-out-of-root/project1/basic.test.js | 1 + .../mocking-out-of-root/project1/imported-test.js | 8 ++++++++ test/browser/fixtures/mocking-out-of-root/project1/lib.js | 1 + 3 files changed, 10 insertions(+) create mode 100644 test/browser/fixtures/mocking-out-of-root/project1/imported-test.js create mode 100644 test/browser/fixtures/mocking-out-of-root/project1/lib.js diff --git a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js index a7d86c998b59..d12dff4824e7 100644 --- a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js +++ b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js @@ -1,5 +1,6 @@ import { test, expect, vi } from 'vitest'; import project2 from "../project2/index.js" +import "./imported-test.js" import "../project3/imported-test.js" vi.mock("../project2/index.js", () => ({ diff --git a/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js b/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js new file mode 100644 index 000000000000..7744dbdd443b --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js @@ -0,0 +1,8 @@ +import { vi, test, expect } from "vitest" +import lib from "./lib.js"; + +vi.mock("./lib.js", () => ({ default: "mocked" })) + +test("project1 imported", () => { + expect(lib).toBe("mocked"); +}) diff --git a/test/browser/fixtures/mocking-out-of-root/project1/lib.js b/test/browser/fixtures/mocking-out-of-root/project1/lib.js new file mode 100644 index 000000000000..6d9bb612b1bb --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project1/lib.js @@ -0,0 +1 @@ +export default "lib" From c1ebb34bed6c12e8dc57bf9f21de0969666c6bde Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 4 Apr 2025 16:22:52 +0900 Subject: [PATCH 6/6] refactor: getModuleById --- packages/mocker/src/node/resolver.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/mocker/src/node/resolver.ts b/packages/mocker/src/node/resolver.ts index 9e19a06c551c..834472b22ea0 100644 --- a/packages/mocker/src/node/resolver.ts +++ b/packages/mocker/src/node/resolver.ts @@ -103,15 +103,11 @@ export class ServerMockResolver { } private async resolveMockId(rawId: string, importer: string) { - if (!importer.startsWith(this.server.config.root)) { - const resolved = await this.server.pluginContainer.resolveId( - importer, - this.server.config.root, - { - ssr: false, - }, - ) - importer = resolved?.id ?? this.server.config.root + if ( + !this.server.moduleGraph.getModuleById(importer) + && !importer.startsWith(this.server.config.root) + ) { + importer = join(this.server.config.root, importer) } const resolved = await this.server.pluginContainer.resolveId( rawId,