From c33ea973c4140f2f78ddd2e3d3c9ebee0aefc090 Mon Sep 17 00:00:00 2001 From: jackkav Date: Mon, 8 Jun 2026 15:16:56 +0200 Subject: [PATCH] fix: use __IS_RENDERER__ constant for treeshaking node-only imports The recent change to guard Node-only code with `typeof window !== 'undefined' && window.main != null` broke Vite's treeshaking because the expression is not statically resolvable at build time. This caused Rollup to include both the renderer (IPC) and Node-only code paths, pulling transitive imports of `node:url` and `node:crypto` into the renderer bundle. Introduced `__IS_RENDERER__` constant in the Vite `define` block (set to `true` for the renderer build) which is statically resolvable, allowing Rollup to eliminate the Node-only branch via dead code elimination. Also added the constant declarations to a new `types/vite.d.ts` file so TypeScript recognizes `__IS_RENDERER__` as a valid global constant. Fixes: MISSING_EXPORT error for node:url and node:crypto in curl.ts, openapi-3.ts, and swagger-2.ts --- packages/insomnia/src/common/import.ts | 4 ++-- packages/insomnia/tsconfig.json | 2 +- packages/insomnia/types/global.d.ts | 1 + packages/insomnia/types/vite.d.ts | 4 ++++ packages/insomnia/vite.config.ts | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 packages/insomnia/types/vite.d.ts diff --git a/packages/insomnia/src/common/import.ts b/packages/insomnia/src/common/import.ts index 2e55af1c37..1f4538ea49 100644 --- a/packages/insomnia/src/common/import.ts +++ b/packages/insomnia/src/common/import.ts @@ -92,7 +92,7 @@ export async function fetchImportContentFromURI({ uri }: { uri: string }) { } else if (uri.match(/^(file):\/\//)) { const path = uri.replace(/^(file):\/\//, ''); const readFileProcessFork = async (path: string) => - typeof window !== 'undefined' && window.main != null + __IS_RENDERER__ ? window.main.insecureReadFile({ path }) : (await import('../main/secure-read-file')).insecureReadFile(path); @@ -207,7 +207,7 @@ export async function scanResources(importEntries: ImportEntry[]): Promise + +declare const __DEV__: boolean; +declare const __IS_RENDERER__: boolean; diff --git a/packages/insomnia/vite.config.ts b/packages/insomnia/vite.config.ts index 389c08e226..b480fc9d7c 100644 --- a/packages/insomnia/vite.config.ts +++ b/packages/insomnia/vite.config.ts @@ -12,6 +12,7 @@ export default defineConfig(({ mode }) => { return { define: { '__DEV__': JSON.stringify(__DEV__), + '__IS_RENDERER__': JSON.stringify(true), 'process.env.NODE_ENV': JSON.stringify(mode), 'process.env.INSOMNIA_ENV': JSON.stringify(mode), // Only apply in production builds: Rollup does text substitution (safe).