diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de2be43..a257ec1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,7 @@ jobs: run: bun install --frozen-lockfile - name: Build (TypeScript check) + # Keep explicit typecheck for fast fail before full build/bundle. run: bun run tsc --noEmit - name: Build (bundle) diff --git a/Makefile b/Makefile index a462a42..fb446fb 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ help: " dev-toggle Toggle overlay in a running local Electron app" \ " dev-stop Stop a running local Electron app" \ " docs-dev Run VitePress docs dev server" \ - " docs Build VitePress static docs" \ + " docs Build VitePress static docs" \ " docs-preview Preview built VitePress docs" \ " install-linux Install Linux wrapper/theme/app artifacts" \ " install-macos Install macOS wrapper/theme/app artifacts" \ @@ -134,7 +134,9 @@ build-macos-unsigned: deps build-launcher: @printf '%s\n' "[INFO] Bundling launcher script" @bun build ./launcher/main.ts --target=bun --packages=bundle --outfile=subminer - @python3 -c 'from pathlib import Path; p=Path("subminer"); c=p.read_text(); c=("#!/usr/bin/env bun\n"+c) if not c.startswith("#!/usr/bin/env bun\n") else c; p.write_text(c)' + @if ! head -1 subminer | grep -q '^#!/usr/bin/env bun'; then \ + { printf '#!/usr/bin/env bun\n'; cat subminer; } > subminer.tmp && mv subminer.tmp subminer; \ + fi @chmod +x subminer clean: diff --git a/bun.lock b/bun.lock index eab60d3..e6e5104 100644 --- a/bun.lock +++ b/bun.lock @@ -18,6 +18,7 @@ "electron": "^37.10.3", "electron-builder": "^26.7.0", "esbuild": "^0.25.0", + "prettier": "^3.6.2", "typescript": "^5.9.3", "vitepress": "^1.6.4", }, @@ -970,6 +971,8 @@ "preact": ["preact@10.28.3", "", {}, "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA=="], + "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + "proc-log": ["proc-log@5.0.0", "", {}, "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], diff --git a/docs/development.md b/docs/development.md index eea7cbf..63f82b6 100644 --- a/docs/development.md +++ b/docs/development.md @@ -13,7 +13,7 @@ cd SubMiner make deps # or manually: bun install -bun --cwd vendor/texthooker-ui install +cd vendor/texthooker-ui && bun install ``` ## Building diff --git a/launcher/config.ts b/launcher/config.ts index 662c9fc..e9c7e1a 100644 --- a/launcher/config.ts +++ b/launcher/config.ts @@ -216,12 +216,18 @@ function ensureTarget(target: string, parsed: Args): void { return; } const resolved = resolvePathMaybe(target); - if (fs.existsSync(resolved) && fs.statSync(resolved).isFile()) { + let stat: fs.Stats | null = null; + try { + stat = fs.statSync(resolved); + } catch { + stat = null; + } + if (stat?.isFile()) { parsed.target = resolved; parsed.targetKind = 'file'; return; } - if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) { + if (stat?.isDirectory()) { parsed.directory = resolved; return; }