fix(preload): keep zod out of sandbox bundle
This commit is contained in:
1 parent
fa006524c2
commit
710448a75f
4 files changed
+19
-7
No files matched your search
@@ -58,6 +58,7 @@ oldreference/
|
||||
!/docs/architecture/*.md
|
||||
!/CLAUDE.md
|
||||
!/AGENTS.md
|
||||
!/问题.md
|
||||
!/.planning/**/*.md
|
||||
!/src/main/prompt-builder/**/*.md
|
||||
!/scripts/README.md
|
||||
|
||||
@@ -22,10 +22,7 @@ export default defineConfig({
|
||||
},
|
||||
},
|
||||
preload: {
|
||||
// zod is bundled into preload because preload runs as sandboxed CJS
|
||||
// and cannot resolve externalized ESM deps at runtime. Inlining keeps
|
||||
// IPC Zod validation working inside the preload layer.
|
||||
plugins: [externalizeDepsPlugin({ exclude: ["zod"] })],
|
||||
plugins: [externalizeDepsPlugin()],
|
||||
resolve: {
|
||||
alias: {
|
||||
"@shared": resolve("src/shared"),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { contextBridge, ipcRenderer } from "electron";
|
||||
import { IPC_CHANNELS } from "@shared/contracts/channels";
|
||||
import type { DesktopApi } from "@shared/contracts/desktop-api";
|
||||
import {
|
||||
IPC_CHANNELS,
|
||||
PRELOAD_FORWARDERS,
|
||||
mapPreloadInvokeArgs,
|
||||
type DesktopApi,
|
||||
type PreloadForwardedApi,
|
||||
} from "@shared/contracts";
|
||||
} from "@shared/contracts/preload-forwarders";
|
||||
import type { DesktopEvent } from "@shared/types";
|
||||
|
||||
function createForwardedApi(): PreloadForwardedApi {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
describe("preload bundling contract", () => {
|
||||
it("keeps Zod validation on the main-process IPC boundary", () => {
|
||||
const configSource = readFileSync(join(process.cwd(), "electron.vite.config.ts"), "utf8");
|
||||
const preloadSource = readFileSync(join(process.cwd(), "src/preload/index.ts"), "utf8");
|
||||
|
||||
expect(configSource).not.toContain('exclude: ["zod"]');
|
||||
expect(preloadSource).not.toContain('from "@shared/contracts"');
|
||||
expect(preloadSource).not.toMatch(/from ["']zod["']|require\(["']zod["']\)/);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user