From 2992d1d8ea347c47b79678dbe044215ff0cd49ce Mon Sep 17 00:00:00 2001 From: Jack Kavanagh Date: Mon, 8 Jun 2026 16:17:21 +0200 Subject: [PATCH] fix: import dialog (#10040) * is renderer check * 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 * fix: define __IS_RENDERER__ constant in vitest config The __IS_RENDERER__ constant was undefined in test environments, breaking the conditional logic in import.ts that determines whether to use the renderer IPC path or the Node.js path. Define it as false in vitest config so tests run with the correct code path. (cherry picked from commit ed388d2fa96518dcbc162d8e1342216cfff8744b) --- packages/insomnia/src/common/import.ts | 6 ++++-- 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 + packages/insomnia/vitest.config.ts | 3 +++ 6 files changed, 14 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 55a696e288..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) => - process.type === 'renderer' + __IS_RENDERER__ ? window.main.insecureReadFile({ path }) : (await import('../main/secure-read-file')).insecureReadFile(path); @@ -207,7 +207,9 @@ 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). diff --git a/packages/insomnia/vitest.config.ts b/packages/insomnia/vitest.config.ts index 5309c74196..c7623db234 100644 --- a/packages/insomnia/vitest.config.ts +++ b/packages/insomnia/vitest.config.ts @@ -3,6 +3,9 @@ import path from 'node:path'; import { defineConfig } from 'vitest/config'; export default defineConfig({ + define: { + '__IS_RENDERER__': JSON.stringify(false), + }, test: { setupFiles: ['./setup-vitest.ts'], hideSkippedTests: true,