From 2a0077539d948857ca7b7c4fa23b93a6c31144fe Mon Sep 17 00:00:00 2001 From: Jan Burzinski <156842394+janburzinski@users.noreply.github.com> Date: Mon, 29 Jun 2026 07:48:32 +0200 Subject: [PATCH 1/4] fix(dev): use cross-env for debug scripts --- apps/emdash-desktop/package.json | 5 +++-- pnpm-lock.yaml | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/emdash-desktop/package.json b/apps/emdash-desktop/package.json index daa6c55dfe..1ffeabbaba 100644 --- a/apps/emdash-desktop/package.json +++ b/apps/emdash-desktop/package.json @@ -19,8 +19,8 @@ "main": "./out/main/index.js", "scripts": { "d": "pnpm install && pnpm run dev", - "dev": "LOG_LEVEL=debug EMDASH_LOG_FILE=.emdash-logs/emdash.log electron-vite dev", - "dev:debug": "VITE_LOG_LEVEL=debug LOG_LEVEL=debug EMDASH_LOG_FILE=.emdash-logs/emdash.log electron-vite dev", + "dev": "cross-env LOG_LEVEL=debug EMDASH_LOG_FILE=.emdash-logs/emdash.log electron-vite dev", + "dev:debug": "cross-env VITE_LOG_LEVEL=debug LOG_LEVEL=debug EMDASH_LOG_FILE=.emdash-logs/emdash.log electron-vite dev", "dev:main": "electron-vite dev --watch main", "dev:renderer": "electron-vite dev --watch renderer", "db:generate": "drizzle-kit generate", @@ -115,6 +115,7 @@ "clsx": "^2.1.1", "cmdk": "^1.1.1", "concurrently": "^8.2.2", + "cross-env": "^10.1.0", "date-fns": "^4.1.0", "devicon": "^2.17.0", "dotenv": "^17.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8767526556..91db63cd28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,6 +207,9 @@ importers: concurrently: specifier: ^8.2.2 version: 8.2.2 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 date-fns: specifier: ^4.1.0 version: 4.4.0 @@ -992,6 +995,9 @@ packages: '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -4387,6 +4393,11 @@ packages: cross-dirname@0.1.0: resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} + cross-env@10.1.0: + resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==} + engines: {node: '>=20'} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -8368,6 +8379,8 @@ snapshots: '@emotion/hash@0.9.2': {} + '@epic-web/invariant@1.0.0': {} + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -11402,6 +11415,11 @@ snapshots: cross-dirname@0.1.0: optional: true + cross-env@10.1.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 From 6be2a20898639b868abd8daf8a0336f1f3f21eba Mon Sep 17 00:00:00 2001 From: Jan Burzinski <156842394+janburzinski@users.noreply.github.com> Date: Mon, 29 Jun 2026 07:53:53 +0200 Subject: [PATCH 2/4] fix(dev): make maintenance scripts cross-platform --- apps/emdash-desktop/package.json | 6 ++--- apps/emdash-desktop/scripts/clean.ts | 7 ++++++ apps/emdash-desktop/scripts/db-reset.ts | 32 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 apps/emdash-desktop/scripts/clean.ts create mode 100644 apps/emdash-desktop/scripts/db-reset.ts diff --git a/apps/emdash-desktop/package.json b/apps/emdash-desktop/package.json index 1ffeabbaba..62528852f1 100644 --- a/apps/emdash-desktop/package.json +++ b/apps/emdash-desktop/package.json @@ -27,9 +27,7 @@ "db:setup": "npm install --prefix tooling/node-deps", "db:fixtures": "vitest run --project fixtures", "test:migrations": "vitest run --project migrations", - "db:reset": "pnpm run db:reset:3 && pnpm run db:reset:4", - "db:reset:3": "rm -f \"$HOME/Library/Application Support/emdash-dev/emdash3.db\" \"$HOME/Library/Application Support/emdash-dev/emdash3.db-wal\" \"$HOME/Library/Application Support/emdash-dev/emdash3.db-shm\" \"$HOME/.config/emdash-dev/emdash3.db\" \"$HOME/.config/emdash-dev/emdash3.db-wal\" \"$HOME/.config/emdash-dev/emdash3.db-shm\"", - "db:reset:4": "rm -f \"$HOME/Library/Application Support/emdash-dev/emdash4.db\" \"$HOME/Library/Application Support/emdash-dev/emdash4.db-wal\" \"$HOME/Library/Application Support/emdash-dev/emdash4.db-shm\" \"$HOME/.config/emdash-dev/emdash4.db\" \"$HOME/.config/emdash-dev/emdash4.db-wal\" \"$HOME/.config/emdash-dev/emdash4.db-shm\"", + "db:reset": "node --experimental-strip-types scripts/db-reset.ts", "test": "vitest run --project node --project main-db --project migrations --project browser --project scripts", "build": "electron-vite build", "build:main": "electron-vite build --filter main", @@ -41,7 +39,7 @@ "postinstall": "node --experimental-strip-types scripts/postinstall.ts", "rebuild": "electron-rebuild -f -v 40.7.0 --only=better-sqlite3,node-pty", "run:docker-ssh": "docker compose up --build -d", - "clean": "rm -rf node_modules dist", + "clean": "node --experimental-strip-types scripts/clean.ts", "reset": "pnpm run clean && pnpm install", "lint": "oxlint .", "format": "oxfmt", diff --git a/apps/emdash-desktop/scripts/clean.ts b/apps/emdash-desktop/scripts/clean.ts new file mode 100644 index 0000000000..8bf77e59c6 --- /dev/null +++ b/apps/emdash-desktop/scripts/clean.ts @@ -0,0 +1,7 @@ +import { rmSync } from 'node:fs'; + +// Cross-platform replacement for `rm -rf node_modules dist`, which only ran on +// POSIX shells. `rmSync` with recursive+force is a no-op when a target is missing. +for (const target of ['node_modules', 'dist']) { + rmSync(target, { recursive: true, force: true }); +} diff --git a/apps/emdash-desktop/scripts/db-reset.ts b/apps/emdash-desktop/scripts/db-reset.ts new file mode 100644 index 0000000000..05a52f6505 --- /dev/null +++ b/apps/emdash-desktop/scripts/db-reset.ts @@ -0,0 +1,32 @@ +import { rmSync } from 'node:fs'; +import { homedir } from 'node:os'; +import { join } from 'node:path'; + +// Cross-platform replacement for the old `rm -f` db:reset scripts, which only ran +// on POSIX shells. Wipes the dev SQLite databases (and their -wal/-shm sidecars) +// from the platform-specific userData directory. +const DEV_DIR_NAME = 'emdash-dev'; +const DB_BASENAMES = ['emdash3.db', 'emdash4.db']; + +function devUserDataDir(): string { + const home = process.env.HOME ?? homedir(); + + if (process.platform === 'darwin') { + return join(home, 'Library', 'Application Support', DEV_DIR_NAME); + } + if (process.platform === 'win32') { + const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming'); + return join(appData, DEV_DIR_NAME); + } + const xdgConfig = process.env.XDG_CONFIG_HOME ?? join(home, '.config'); + return join(xdgConfig, DEV_DIR_NAME); +} + +const dir = devUserDataDir(); +for (const base of DB_BASENAMES) { + for (const suffix of ['', '-wal', '-shm']) { + rmSync(join(dir, `${base}${suffix}`), { force: true }); + } +} + +console.log(`db:reset: cleared dev databases in ${dir}`); From b217dd5e0c027c85ed10f94aa696ec59c06961c4 Mon Sep 17 00:00:00 2001 From: Jan Burzinski <156842394+janburzinski@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:16:31 +0200 Subject: [PATCH 3/4] fix(dev): clean electron build output --- apps/emdash-desktop/scripts/clean.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/emdash-desktop/scripts/clean.ts b/apps/emdash-desktop/scripts/clean.ts index 8bf77e59c6..d8be42362e 100644 --- a/apps/emdash-desktop/scripts/clean.ts +++ b/apps/emdash-desktop/scripts/clean.ts @@ -1,7 +1,9 @@ import { rmSync } from 'node:fs'; // Cross-platform replacement for `rm -rf node_modules dist`, which only ran on -// POSIX shells. `rmSync` with recursive+force is a no-op when a target is missing. -for (const target of ['node_modules', 'dist']) { +// POSIX shells. The build output lives in `out/` (electron-vite default), not +// `dist/`, so wipe that. `rmSync` with recursive+force is a no-op when a target +// is missing. +for (const target of ['node_modules', 'out']) { rmSync(target, { recursive: true, force: true }); } From b6ca469a1980afc5ba88d938af257a686385690c Mon Sep 17 00:00:00 2001 From: Jan Burzinski <156842394+janburzinski@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:22:24 +0200 Subject: [PATCH 4/4] fix(dev): reset macos dev database path --- apps/emdash-desktop/scripts/db-reset.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/emdash-desktop/scripts/db-reset.ts b/apps/emdash-desktop/scripts/db-reset.ts index 05a52f6505..04f5bcd192 100644 --- a/apps/emdash-desktop/scripts/db-reset.ts +++ b/apps/emdash-desktop/scripts/db-reset.ts @@ -1,5 +1,5 @@ import { rmSync } from 'node:fs'; -import { homedir } from 'node:os'; +import { homedir, userInfo } from 'node:os'; import { join } from 'node:path'; // Cross-platform replacement for the old `rm -f` db:reset scripts, which only ran @@ -9,7 +9,7 @@ const DEV_DIR_NAME = 'emdash-dev'; const DB_BASENAMES = ['emdash3.db', 'emdash4.db']; function devUserDataDir(): string { - const home = process.env.HOME ?? homedir(); + const home = process.platform === 'darwin' ? userInfo().homedir : (process.env.HOME ?? homedir()); if (process.platform === 'darwin') { return join(home, 'Library', 'Application Support', DEV_DIR_NAME);