diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 221e2b178f..63e3d7a3d5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -5,7 +5,7 @@ "tasks": [ { "label": "Insomnia: Compile Main", - "detail": "esbuild.main.ts", + "detail": "esbuild.entrypoints.ts", "type": "shell", "promptOnClose": false, "options": { @@ -14,7 +14,7 @@ "NODE_ENV": "development" } }, - "command": "${workspaceRoot}/node_modules/.bin/esr esbuild.main.ts" + "command": "${workspaceRoot}/node_modules/.bin/esr esbuild.entrypoints.ts" }, { "label": "Insomnia: Compile Renderer (Watch)", @@ -57,7 +57,10 @@ { "label": "Insomnia: Compile (Watch)", "detail": "Compile Renderer (Watch) | Compile Main", - "dependsOn": ["Insomnia: Compile Renderer (Watch)", "Insomnia: Compile Main"] + "dependsOn": [ + "Insomnia: Compile Renderer (Watch)", + "Insomnia: Compile Main" + ] }, { "label": "Inso: Compile (Watch)", diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index d5417c6e6e..0a20f0f8ec 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -56,7 +56,7 @@ Unexplored ideas in this area. There are a few notable directories inside it: -- `/main.development.js` Entry for Electron. +- `/entry.main.js` Entry for Electron. - `/src/main` Stuff that runs inside Electron's main process. - `/src/ui` React components and styling. - `/src/common` Utilities used across both main and render processes. diff --git a/eslint.config.mjs b/eslint.config.mjs index b5cc0ce0a9..8687c977ed 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -166,10 +166,7 @@ export default tseslint.config( '**/docker/*', '**/electron/index.js', '**/fixtures', - '**/hidden-window.js', - '**/hidden-window-preload.js', '**/node_modules/*', - '**/preload.js', '**/svgr', '**/traces/*', '**/verify-pkg.js', diff --git a/package.json b/package.json index 17aa7d4deb..1a5f42c3b2 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "install-libcurl-electron": "node_modules/.bin/node-pre-gyp install --directory node_modules/@getinsomnia/node-libcurl --update-binary --runtime=electron --target=$target", "inso-start": "npm start -w insomnia-inso", "inso-package": "npm run build -w insomnia-inso && npm run package -w insomnia-inso", - "watch:app": "cross-env PLAYWRIGHT=1 npm run build:main.min.js -w insomnia && npm run start:dev-server -w insomnia", + "watch:app": "cross-env PLAYWRIGHT=1 npm run build:electron-entrypoints -w insomnia && npm run start:dev-server -w insomnia", "app-build": "cross-env PLAYWRIGHT=1 npm run build -w insomnia", "app-package": "npm run package -w insomnia", "test:smoke:dev": "npm run test:dev -w insomnia-smoke-test -- --project=Smoke", diff --git a/packages/insomnia-scripting-environment/src/objects/send-request.ts b/packages/insomnia-scripting-environment/src/objects/send-request.ts index 8e293c38e4..c2c01eef21 100644 --- a/packages/insomnia-scripting-environment/src/objects/send-request.ts +++ b/packages/insomnia-scripting-environment/src/objects/send-request.ts @@ -33,7 +33,7 @@ export async function sendRequest( cb(undefined, transformedOutput); resolve(transformedOutput); }) - .catch(e => { + .catch((e: string | undefined) => { cb(e, undefined); resolve(undefined); }); diff --git a/packages/insomnia-smoke-test/playwright/paths.ts b/packages/insomnia-smoke-test/playwright/paths.ts index 78cf84970a..583febb277 100644 --- a/packages/insomnia-smoke-test/playwright/paths.ts +++ b/packages/insomnia-smoke-test/playwright/paths.ts @@ -60,8 +60,8 @@ const electronBinary = path.join( export const executablePath = bundleType() === 'package' ? insomniaBinary : electronBinary; -// NOTE: main.min.js is built by app-build in /build and also by the watcher in /src -export const mainPath = path.join(bundleType() === 'dev' ? 'src' : 'build', 'main.min.js'); +// NOTE: entry.main.min.js is built by app-build in /build and also by the watcher in /src +export const mainPath = path.join(bundleType() === 'dev' ? 'src' : 'build', 'entry.main.min.js'); const hasMainBeenBuilt = fs.existsSync(path.resolve(cwd, mainPath)); const hasBinaryBeenBuilt = fs.existsSync(path.resolve(cwd, insomniaBinary)); diff --git a/packages/insomnia/electron-builder.config.js b/packages/insomnia/electron-builder.config.js index 26556a7faa..50fe03f7ba 100644 --- a/packages/insomnia/electron-builder.config.js +++ b/packages/insomnia/electron-builder.config.js @@ -33,7 +33,7 @@ const config = { }, ], extraMetadata: { - main: 'main.min.js', // Override the main path in package.json + main: 'entry.main.min.js', // Override the main path in package.json }, fileAssociations: [], mac: { diff --git a/packages/insomnia/esbuild.main.ts b/packages/insomnia/esbuild.entrypoints.ts similarity index 92% rename from packages/insomnia/esbuild.main.ts rename to packages/insomnia/esbuild.entrypoints.ts index 3ccaeffb11..09c8989457 100644 --- a/packages/insomnia/esbuild.main.ts +++ b/packages/insomnia/esbuild.entrypoints.ts @@ -35,8 +35,8 @@ export default async function build(options: Options) { }; const preloadBuildOptions: BuildOptions = { - entryPoints: ['./src/preload.ts'], - outfile: path.join(outdir, 'preload.js'), + entryPoints: ['./src/entry.preload.ts'], + outfile: path.join(outdir, 'entry.preload.min.js'), target: 'esnext', bundle: true, platform: 'node', @@ -46,8 +46,8 @@ export default async function build(options: Options) { }; const hiddenBrowserWindowPreloadBuildOptions: BuildOptions = { - entryPoints: ['./src/hidden-window-preload.ts'], - outfile: path.join(outdir, 'hidden-window-preload.js'), + entryPoints: ['./src/entry.hidden-window-preload.ts'], + outfile: path.join(outdir, 'entry.hidden-window-preload.min.js'), target: 'esnext', bundle: true, platform: 'node', @@ -60,9 +60,8 @@ export default async function build(options: Options) { }; const hiddenBrowserWindowBuildOptions: BuildOptions = { - entryPoints: ['./src/hidden-window.ts'], - // TODO: make all of these outputs use a .min.js convention to simplify ignore files - outfile: path.join(outdir, 'hidden-window.js'), + entryPoints: ['./src/entry.hidden-window.ts'], + outfile: path.join(outdir, 'entry.hidden-window.min.js'), target: 'esnext', bundle: true, platform: 'node', @@ -76,8 +75,8 @@ export default async function build(options: Options) { }; const mainBuildOptions: BuildOptions = { - entryPoints: ['./src/main.development.ts'], - outfile: path.join(outdir, 'main.min.js'), + entryPoints: ['./src/entry.main.ts'], + outfile: path.join(outdir, 'entry.main.min.js'), bundle: true, platform: 'node', sourcemap: true, diff --git a/packages/insomnia/package.json b/packages/insomnia/package.json index 3ad238cae9..c2861c27cf 100644 --- a/packages/insomnia/package.json +++ b/packages/insomnia/package.json @@ -15,13 +15,13 @@ }, "license": "Apache-2.0", "author": "Kong ", - "main": "src/main.min.js", + "main": "src/entry.main.min.js", "scripts": { "verify-bundle-plugins": "esr --cache ./scripts/verify-bundle-plugins.ts", "build": "react-router build && esr --cache ./scripts/build.ts --noErrorTruncation", "build:react-router": "react-router build", "generate:schema": "esr ./src/schema.ts", - "build:main.min.js": "cross-env NODE_ENV=development esr esbuild.main.ts", + "build:electron-entrypoints": "cross-env NODE_ENV=development esr esbuild.entrypoints.ts", "lint": "eslint . --ext .js,.ts,.tsx --cache", "package": "npm run build && cross-env USE_HARD_LINKS=false electron-builder build --config electron-builder.config.js", "package:windows:unpacked": "npm run build && cross-env USE_HARD_LINKS=false electron-builder build --config electron-builder.config.js --win squirrel nsis --dir", @@ -29,18 +29,18 @@ "start": "npx -y concurrently -n browser,main --kill-others \"npm run start:dev-server\" \"npm run start:electron\"", "start:autoRestart": "npx -y concurrently -n browser,main --kill-others \"npm run start:dev-server\" \"npm run start:electron:autoRestart\"", "start:dev-server": "vite dev", - "start:electron": "cross-env NODE_ENV=development esr esbuild.main.ts && electron --inspect=5858 .", - "start:electron:autoRestart": "cross-env NODE_ENV=development esr esbuild.main.ts --autoRestart", + "start:electron": "cross-env NODE_ENV=development esr esbuild.entrypoints.ts && electron --inspect=5858 .", + "start:electron:autoRestart": "cross-env NODE_ENV=development esr esbuild.entrypoints.ts --autoRestart", "test": "vitest run", "type-check": "react-router typegen && tsc --noEmit --project tsconfig.json", "type-check:watch": "npm run type-check -- --watch", "convert-svg": "npm_config_yes=true npx @svgr/cli@6.4.0 --no-index --config-file svgr.config.js --out-dir src/ui/components/assets/svgr src/ui/components/assets/" }, "//": [ - "dependencies will be external to the vite bundle and electron main (commonjs)", + "dependencies will be external to the vite bundle and electron entrypoints (commonjs)", "devDependencies will be included in the vite bundle (esm)", "See: packages/insomnia/vite.config.ts", - "and: packages/insomnia/esbuild.main.ts" + "and: packages/insomnia/esbuild.entrypoints.ts" ], "dependencies": { "@apideck/better-ajv-errors": "^0.3.6", diff --git a/packages/insomnia/scripts/build.ts b/packages/insomnia/scripts/build.ts index ca2c31b2da..471bb46db4 100644 --- a/packages/insomnia/scripts/build.ts +++ b/packages/insomnia/scripts/build.ts @@ -1,7 +1,7 @@ import { cp, mkdir } from 'node:fs/promises'; import path from 'node:path'; -import buildMainAndPreload from '../esbuild.main'; +import buildEntrypoints from '../esbuild.entrypoints'; // Start build if ran from CLI if (require.main === module) { @@ -27,8 +27,8 @@ export const start = async () => { const buildFolder = path.join('../build'); - console.log('[build] Building main.min.js and preload'); - await buildMainAndPreload({ + console.log('[build] Building entry.main.min.js and entry.preload.min.js'); + await buildEntrypoints({ mode: 'production', }); diff --git a/packages/insomnia/src/hidden-window-preload.ts b/packages/insomnia/src/entry.hidden-window-preload.ts similarity index 100% rename from packages/insomnia/src/hidden-window-preload.ts rename to packages/insomnia/src/entry.hidden-window-preload.ts diff --git a/packages/insomnia/src/hidden-window.ts b/packages/insomnia/src/entry.hidden-window.ts similarity index 79% rename from packages/insomnia/src/hidden-window.ts rename to packages/insomnia/src/entry.hidden-window.ts index ccdab17ecf..7ac5d59031 100644 --- a/packages/insomnia/src/hidden-window.ts +++ b/packages/insomnia/src/entry.hidden-window.ts @@ -24,32 +24,34 @@ Sentry.init({ ...SENTRY_OPTIONS, }); -window.bridge.onmessage(async (data, callback) => { - window.bridge.setBusy(true); +window.bridge.onmessage( + async (data: { script: string; context: RequestContext }, callback: ({ error }: { error: string }) => void) => { + window.bridge.setBusy(true); - try { - const timeout = data.context.timeout || 5000; - const timeoutPromise = new window.bridge.Promise(resolve => { - setTimeout(() => { - resolve({ error: 'Timeout: Running script took too long' }); - }, timeout); - }); - const result = await window.bridge.Promise.race([timeoutPromise, runScript(data)]); - callback(result); - } catch (err) { - const errMessage = err.message ? `Error from Pre-request or after-response script:\n${err.message};` : err; - const errStack = err.stack ? `Stack: ${err.stack};` : ''; - const fullErrMessage = `${errMessage}\n${errStack}`; - Sentry.captureException(errMessage, { - tags: { - source: 'hidden-window', - }, - }); - callback({ error: fullErrMessage }); - } finally { - window.bridge.setBusy(false); - } -}); + try { + const timeout = data.context.timeout || 5000; + const timeoutPromise = new window.bridge.Promise((resolve: ({ error }: { error: string }) => void) => { + setTimeout(() => { + resolve({ error: 'Timeout: Running script took too long' }); + }, timeout); + }); + const result = await window.bridge.Promise.race([timeoutPromise, runScript(data)]); + callback(result); + } catch (err) { + const errMessage = err.message ? `Error from Pre-request or after-response script:\n${err.message};` : err; + const errStack = err.stack ? `Stack: ${err.stack};` : ''; + const fullErrMessage = `${errMessage}\n${errStack}`; + Sentry.captureException(errMessage, { + tags: { + source: 'hidden-window', + }, + }); + callback({ error: fullErrMessage }); + } finally { + window.bridge.setBusy(false); + } + }, +); // This function is duplicated in scriptExecutor.ts to run in nodejs // TODO: consider removing this implementation and using only nodejs scripting diff --git a/packages/insomnia/src/main.development.ts b/packages/insomnia/src/entry.main.ts similarity index 100% rename from packages/insomnia/src/main.development.ts rename to packages/insomnia/src/entry.main.ts diff --git a/packages/insomnia/src/preload.ts b/packages/insomnia/src/entry.preload.ts similarity index 100% rename from packages/insomnia/src/preload.ts rename to packages/insomnia/src/entry.preload.ts diff --git a/packages/insomnia/src/hidden-window.html b/packages/insomnia/src/hidden-window.html index 779010c8cc..d9e331cab3 100644 --- a/packages/insomnia/src/hidden-window.html +++ b/packages/insomnia/src/hidden-window.html @@ -11,6 +11,6 @@

Hidden Browser Window

- + diff --git a/packages/insomnia/src/main/ipc/main.ts b/packages/insomnia/src/main/ipc/main.ts index d9a0322da2..d427218465 100644 --- a/packages/insomnia/src/main/ipc/main.ts +++ b/packages/insomnia/src/main/ipc/main.ts @@ -15,7 +15,7 @@ import { import type { UtilityProcess } from 'electron/main'; import iconv from 'iconv-lite'; -import type { HiddenBrowserWindowBridgeAPI } from '../../hidden-window'; +import type { HiddenBrowserWindowBridgeAPI } from '../../entry.hidden-window'; import * as models from '../../models'; import type { PluginTemplateTag } from '../../templating/types'; import type { SegmentEvent } from '../analytics'; diff --git a/packages/insomnia/src/main/window-utils.ts b/packages/insomnia/src/main/window-utils.ts index c30d163060..e2ceec2fbc 100644 --- a/packages/insomnia/src/main/window-utils.ts +++ b/packages/insomnia/src/main/window-utils.ts @@ -110,7 +110,7 @@ export async function createHiddenBrowserWindow() { webPreferences: { contextIsolation: false, nodeIntegration: true, - preload: path.join(__dirname, 'hidden-window-preload.js'), + preload: path.join(__dirname, 'entry.hidden-window-preload.min.js'), spellcheck: false, devTools: process.env.NODE_ENV === 'development', }, @@ -209,7 +209,7 @@ export function createWindow(): ElectronBrowserWindow { acceptFirstMouse: true, icon: path.resolve(__dirname, appLogo), webPreferences: { - preload: path.join(__dirname, 'preload.js'), + preload: path.join(__dirname, 'entry.preload.min.js'), zoomFactor: getZoomFactor(), nodeIntegration: true, nodeIntegrationInWorker: false, // must remain false to ensure the nunjucks web worker sandbox does not have access to Node.js APIs diff --git a/packages/insomnia/tsconfig.json b/packages/insomnia/tsconfig.json index ed661723af..ef7a3c0196 100644 --- a/packages/insomnia/tsconfig.json +++ b/packages/insomnia/tsconfig.json @@ -57,8 +57,6 @@ "config", "node_modules", "src/coverage", - "src/hidden-window-preload.js", - "src/preload.js", "svgr.config.js", ] }