From 076867d9a405fb93f461a2d53a37725a03c819b7 Mon Sep 17 00:00:00 2001 From: Mosmain Date: Fri, 12 Jun 2026 22:02:33 +0300 Subject: [PATCH] chore: rebrand tarkov-checker -> RaidMate Full rename across the monorepo, clean break (no data migration): - npm: root raidmate, packages @raidmate/{desktop,client,shared}, all --filter references, pnpm-lock regenerated - Cargo: package/lib/bins renamed (exe is now raidmate.exe), Cargo.lock regenerated - Tauri: productName RaidMate, explicit mainBinaryName raidmate, identifier dev.raidmate.desktop, window title - %APPDATA% data dir tarkov-checker -> raidmate (old settings orphaned by design) - localStorage prefix tc.* -> rm.*; removed the obsolete one-time tc.hotkeys.* -> backend migration and its tests - updater: REPO Mosmain/raidmate, asset raidmate.exe, user-agent - /api/ping name, AUMID DisplayName, tray id, headless banner - client: index.html title, PWA manifest, en/ru locale strings, releases URL, GITHUB_PAGES_BASE /raidmate/ - CI: artifact/exe paths in build-overlay.yml, filters in deploy-pages.yml - docs: README (en+ru), package READMEs, CREDITS, CLAUDE.md Game-related identifiers (TARKOV_* env vars, TARKOV_MAPS, tarkov.dev attributions, maps submodule) are intentionally unchanged. Co-Authored-By: Claude Fable 5 --- .claude/launch.json | 2 +- .github/workflows/build-overlay.yml | 6 +- .github/workflows/deploy-pages.yml | 8 +-- CLAUDE.md | 42 +++++------ CREDITS.md | 2 +- README.md | 28 ++++---- apps/client/README.md | 4 +- apps/client/index.html | 4 +- apps/client/package.json | 4 +- apps/client/public/manifest.webmanifest | 4 +- .../src/__tests__/hotkeys-store.spec.ts | 23 ------ .../src/__tests__/persisted-store.spec.ts | 38 +++++----- .../src/__tests__/useLayerVisibility.spec.ts | 6 +- apps/client/src/app/router.ts | 2 +- apps/client/src/features/airdrop/store.ts | 2 +- apps/client/src/features/hotkeys/store.ts | 55 ++------------- apps/client/src/features/i18n/locales/en.json | 6 +- apps/client/src/features/i18n/locales/ru.json | 6 +- apps/client/src/features/i18n/store.ts | 2 +- .../map/composables/useLayerVisibility.ts | 2 +- .../features/map/composables/useLeafletMap.ts | 2 +- .../src/features/map/layers/extracts/icon.ts | 2 +- apps/client/src/features/map/store.ts | 14 ++-- .../overlay/composables/useTrayIcon.ts | 2 +- apps/client/src/features/overlay/store.ts | 12 ++-- .../server/composables/useServerPaths.ts | 2 +- .../src/features/settings/SettingsPanel.vue | 2 +- .../updater/components/AboutFooter.vue | 2 +- apps/client/src/features/updater/store.ts | 2 +- apps/client/src/shared/persisted-store.ts | 2 +- apps/client/src/shared/tauri.ts | 4 +- apps/client/vite.config.ts | 8 +-- apps/desktop/README.md | 10 +-- apps/desktop/package.json | 4 +- apps/desktop/src-tauri/Cargo.lock | 70 +++++++++---------- apps/desktop/src-tauri/Cargo.toml | 14 ++-- apps/desktop/src-tauri/src/bin/headless.rs | 2 +- apps/desktop/src-tauri/src/http_server.rs | 6 +- apps/desktop/src-tauri/src/lib.rs | 2 +- apps/desktop/src-tauri/src/main.rs | 2 +- apps/desktop/src-tauri/src/notify.rs | 4 +- apps/desktop/src-tauri/src/server/config.rs | 4 +- apps/desktop/src-tauri/src/server/hotkeys.rs | 9 ++- apps/desktop/src-tauri/src/server/paths.rs | 6 +- apps/desktop/src-tauri/src/updater.rs | 6 +- apps/desktop/src-tauri/tauri.conf.json | 11 +-- eslint.config.js | 2 +- package.json | 10 +-- packages/shared/package.json | 2 +- pnpm-lock.yaml | 2 +- 50 files changed, 200 insertions(+), 266 deletions(-) diff --git a/.claude/launch.json b/.claude/launch.json index 55f03cf..a1008f4 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -2,7 +2,7 @@ "version": "0.0.1", "configurations": [ { - "name": "tarkov-checker-dev", + "name": "raidmate-dev", "runtimeExecutable": "pnpm", "runtimeArgs": ["dev"], "port": 5173, diff --git a/.github/workflows/build-overlay.yml b/.github/workflows/build-overlay.yml index f9fc46f..4320381 100644 --- a/.github/workflows/build-overlay.yml +++ b/.github/workflows/build-overlay.yml @@ -45,8 +45,8 @@ jobs: - uses: actions/upload-artifact@v7 with: - name: tarkov-checker-desktop - path: apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe + name: raidmate + path: apps/desktop/src-tauri/target/release/raidmate.exe retention-days: 30 if-no-files-found: error @@ -54,7 +54,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') uses: softprops/action-gh-release@v3 with: - files: apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe + files: apps/desktop/src-tauri/target/release/raidmate.exe tag_name: ${{ github.ref_name }} name: ${{ github.ref_name }} generate_release_notes: true diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index e96a078..efd82c0 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -10,7 +10,7 @@ name: Deploy frontend to GitHub Pages # the deploy step refuses to upload. # # The published URL is `https://.github.io//` for project -# pages — by default `https://mosmain.github.io/tarkov-checker/`. +# pages — by default `https://mosmain.github.io/raidmate/`. # Update `GITHUB_PAGES_BASE` in `apps/client/vite.config.ts` and # `ALLOWED_ORIGINS` in `apps/desktop/src-tauri/src/http_server.rs` if # the URL changes (rename, custom domain). @@ -47,15 +47,15 @@ jobs: - uses: ./.github/actions/install-js - # GITHUB_PAGES=true flips Vite's `base` to `/tarkov-checker/` and + # GITHUB_PAGES=true flips Vite's `base` to `/raidmate/` and # turns on the 404.html fallback plugin (SPA-history workaround # for Pages — see vite.config.ts). - name: Build SPA env: GITHUB_PAGES: 'true' run: | - pnpm --filter @tarkov-checker/shared build - pnpm --filter @tarkov-checker/client build + pnpm --filter @raidmate/shared build + pnpm --filter @raidmate/client build # Pages artifact is just a tarball of the dist/ folder; the deploy # job below unpacks it into the published site. diff --git a/CLAUDE.md b/CLAUDE.md index 0197da7..d968e57 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -36,10 +36,10 @@ One command: ``` -pnpm --filter @tarkov-checker/desktop tauri:dev +pnpm --filter @raidmate/desktop tauri:dev ``` -`beforeDevCommand` spawns `pnpm --filter @tarkov-checker/client dev` +`beforeDevCommand` spawns `pnpm --filter @raidmate/client dev` (Vite on **:5173**). Tauri waits for it, opens the webview at the same URL, and shuts Vite down when it exits. The Rust helper (in-process HTTP server) binds `0.0.0.0:47474` for `/api/*` and `/events`; Vite's @@ -51,7 +51,9 @@ Vite. Phones in the same Wi-Fi use `http://:5173/`. The embedded-SPA path lights up only in **release** builds, where there is no Vite. -The repo must live on an **ASCII path** (currently `C:\git-repos\tarkov-checker`) +The repo must live on an **ASCII path** (currently `C:\git-repos\raidmate`; +if the folder still carries the pre-rebrand name `tarkov-checker`, +renaming it is a manual step done outside any running session/editor) — `cargo metadata` segfaults on a Cyrillic CWD, which is what made the OneDrive Documents path (`C:\Users\\OneDrive\Документы\...`) unusable historically. Earlier the workaround was an NTFS junction @@ -293,7 +295,7 @@ map uses — no separate transport, no separate dataset. `apps/desktop/src-tauri/src/server/paths.rs` reads the registry via `winreg`, looks at env vars, applies manual overrides from -`%APPDATA%/tarkov-checker/config.json`, and returns the resolved triple +`%APPDATA%/raidmate/config.json`, and returns the resolved triple (`gameDir`, `logsDir`, `screenshotsDir`) with `source` + `exists` flags. Priority: env (`TARKOV_GAME_DIR`, `TARKOV_SCREENSHOT_DIR`) > manual @@ -361,7 +363,7 @@ Persisted state lives in **per-feature** Pinia stores, not one big store: `features/map/composables/useAutoMapSwitch.ts`, mounted once at `App.vue` root. - **Per-layer visibility**: `composables/useLayerVisibility.ts` exports a - function that returns a shared `persistedRef('tc.layer..visible', z.boolean(), true)` + function that returns a shared `persistedRef('rm.layer..visible', z.boolean(), true)` per layer id (module-level singleton). The LayerRail toggle and the layer composable read/write the same ref. Consumed by `MapLayerContext.visible` in `layers/registry.ts`. @@ -385,7 +387,7 @@ Persisted state lives in **per-feature** Pinia stores, not one big store: `phase` and `outcome` are derived runtime state, not persisted. Each store uses `persistedRef` from `@/shared/persisted-store` with its -own key (`tc..`) — corrupt persisted data falls back to +own key (`rm..`) — corrupt persisted data falls back to defaults silently. **Session-only state.** `clickThrough` intentionally does NOT use `persistedRef`. @@ -424,7 +426,7 @@ id, order, titleKey, visible?, component })`; `useSettingsSections()` returns th 40 paths (desktop-or-tauri), 50 pairing (tauri). Consumed by the gear **drawer** (`SettingsPanel.vue`): a **non-modal** PrimeVue `Drawer` (right on desktop, bottom-sheet on `<640px`) rendering a single flat **Accordion**; open-panel state - persists in `tc.settings.open`. + persists in `rm.settings.open`. Faction colours come from `FACTION_COLORS` in `packages/shared/src/maps.ts` so icons and tooltip stripes never drift across components. @@ -470,7 +472,7 @@ and the `apple-mobile-web-app-*` / `mobile-web-app-capable` meta in `index.html` `display: standalone`, icon = the existing `favicon.svg` (`sizes: "any"`). `start_url`/`scope` are `/`, correct for the phone (`:5173`/`:47474`) and the Tauri release (base `/`). The hosted **GitHub Pages** build serves under base -`/tarkov-checker/`, so its `start_url`/`scope` would mismatch — the static manifest +`/raidmate/`, so its `start_url`/`scope` would mismatch — the static manifest isn't templated by Vite. Pages PWA install is a secondary path; template the manifest if it ever matters. iOS `apple-touch-icon` ideally wants a PNG — pointing it at the SVG works on Android, but iPhone may fall back to a page screenshot for @@ -481,7 +483,7 @@ and the `apple-mobile-web-app-*` / `mobile-web-app-capable` meta in `index.html` `display: standalone`, icon = the existing `favicon.svg` (`sizes: "any"`). `start_url`/`scope` are `/`, correct for the phone (`:5173`/`:47474`) and the Tauri release (base `/`). The hosted **GitHub Pages** build serves under base -`/tarkov-checker/`, so its `start_url`/`scope` would mismatch — the static manifest +`/raidmate/`, so its `start_url`/`scope` would mismatch — the static manifest isn't templated by Vite. Pages PWA install is a secondary path; template the manifest if it ever matters. iOS `apple-touch-icon` ideally wants a PNG — pointing it at the SVG works on Android, but iPhone may fall back to a page screenshot for @@ -612,7 +614,7 @@ machine (via HTTP). One source of state, two transports. | `server/screenshots.rs` | `notify-debouncer-full` watcher (250 ms `awaitWriteFinish` equivalent); parses filename → position; opt-in recycle-bin delete after parse (see below) | | `server/logs.rs` | poll-tails latest `log_*/application_NNN.log`; emits `map-change` on `rcid:` / `Location:` hits | | `server/paths.rs` | env → manual override → `winreg` auto-detect; returns `ResolvedPaths` | -| `server/config.rs` | reads/writes `%APPDATA%/tarkov-checker/config.json`; rejects UNC paths | +| `server/config.rs` | reads/writes `%APPDATA%/raidmate/config.json`; rejects UNC paths | | `server/events.rs` | `ServerEvent` enum + `tokio::sync::broadcast` channel for HTTP-side fan-out | | `watcher.rs` | `WatcherSlot` state holder + `apply_resolved` that atomically swaps watcher handles | | `lan.rs` | LAN IP detection for the QR pairing flow (multi-NIC heuristic — see `detect_lan_ip`) | @@ -686,11 +688,11 @@ focus-required `useBrowserShortcut` and per-client `useGlobalShortcut` wiring for these is gone; only the overlay **lock** combo stays client-registered (see "Desktop overlay"). -- Combos persist in `%APPDATA%/tarkov-checker/hotkeys.json` via +- Combos persist in `%APPDATA%/raidmate/hotkeys.json` via `server/hotkeys.rs` (`HotkeyStore`, sibling to `config.json`). Defaults - match the client's historical `tc.hotkeys.*` so an un-customised install - is unchanged; the client migrates customised localStorage values up once - (`tc.hotkeys.migrated`). + match the client's `DEFAULTS` so an un-customised install agrees on both + ends. (The one-time localStorage→backend migration from the pre-rebrand + `tc.hotkeys.*` keys was removed in the RaidMate rebrand — clean break.) - Registration lives in `src/hotkeys.rs` behind one `HotkeyController` trait, with two impls that are **never** used together (the windowed app and headless backend are mutually exclusive — both bind :47474): @@ -768,7 +770,7 @@ one new alias entry + one new test case in `parse-log.spec.ts`. `bundle.active: false` in `tauri.conf.json` — overlay:build skips MSI and NSIS, just produces the bare `.exe` at -`apps/desktop/src-tauri/target/release/tarkov-checker-desktop.exe`. +`apps/desktop/src-tauri/target/release/raidmate.exe`. Flip to `true` (with `bundle.targets: ["msi","nsis"]` or `"all"`) when a release flow needs installers. @@ -812,7 +814,7 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS 4. **The repo must live on an ASCII path.** `cargo metadata` segfaults on a Cyrillic CWD (which is what made the OneDrive Documents path — `C:\Users\\OneDrive\Документы\...` — unusable). Current location - is `C:\git-repos\tarkov-checker`. If you ever clone fresh into a + is `C:\git-repos\raidmate`. If you ever clone fresh into a Cyrillic path, either move it or `mklink /J` an ASCII alias and run pnpm from there. The legacy junction `C:\tarkov-checker` is no longer required and can be removed with `rmdir C:\tarkov-checker`. @@ -839,7 +841,7 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS Resource step depends on it). The icon set (`32x32.png`, `128x128.png`, `128x128@2x.png`, `icon.ico`, `icon.icns`, the `Square*Logo`/`StoreLogo` set) is generated from `apps/client/public/favicon.svg` via - `pnpm --filter @tarkov-checker/desktop exec tauri icon /favicon.svg` + `pnpm --filter @raidmate/desktop exec tauri icon /favicon.svg` — the same mark the browser build uses. Re-run that after editing the SVG; the generator also emits `ios/` + `android/` dirs which we delete (this is a Windows-only desktop app). `icons/128x128.png` is also `include_bytes!`'d @@ -853,11 +855,11 @@ DeviceGuard').SecurityServicesRunning` → should be empty/`0`. VBS toast shows "PowerShell" + its icon). Fix: we don't use the plugin. `src/notify.rs` registers `HKCU\Software\Classes\AppUserModelId\` with a `DisplayName` + `IconUri` (the favicon PNG, written to - `%APPDATA%/tarkov-checker/notification-icon.png`) at startup, then emits the + `%APPDATA%/raidmate/notification-icon.png`) at startup, then emits the toast via `tauri-winrt-notification::Toast::new()`. No installer / Start-Menu shortcut needed. Only used today for the one-time "still running in the tray" hint (`commands::notify_tray_hint`, fired by the - client's `useCloseConfirm` gated on `tc.overlay.trayHintShown`). + client's `useCloseConfirm` gated on `rm.overlay.trayHintShown`). ## CI & releases @@ -882,7 +884,7 @@ git push origin v0.1.0 Pushing the tag triggers a fresh CI run from the tagged commit (~3-5 min warm cache, ~8-12 cold). On success `softprops/action-gh-release@v2` -publishes a GitHub Release named `v0.1.0` with `tarkov-checker-desktop.exe` +publishes a GitHub Release named `v0.1.0` with `raidmate.exe` attached and marked as **Latest**. End users grab it from the Releases tab; the .exe lives there indefinitely. diff --git a/CREDITS.md b/CREDITS.md index 8478931..daf9de1 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -11,7 +11,7 @@ Licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4 See [`apps/client/public/maps/LICENSE.md`](apps/client/public/maps/LICENSE.md) for the full text and the explicit no-cheating clause. -`tarkov-checker` is a personal, non-commercial tool — the NC clause is +`RaidMate` is a personal, non-commercial tool — the NC clause is satisfied. Should this repo ever be open-sourced, the SVG maps remain under their original CC BY-NC-SA 4.0 license; the submodule keeps them separate from this project's code so the two licenses don't entangle. diff --git a/README.md b/README.md index e9dd54f..64a1652 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# tarkov-checker +# RaidMate A live in-raid map companion for Escape from Tarkov. The overlay watches your Tarkov screenshots and logs in real time, tracking your position and marking extracts on an interactive Leaflet map with community SVG layers. @@ -25,27 +25,27 @@ A live in-raid map companion for Escape from Tarkov. The overlay watches your Ta ### End Users -1. Download `tarkov-checker-desktop.exe` from the [latest Release](../../releases/latest). +1. Download `raidmate.exe` from the [latest Release](../../releases/latest). 2. Drop it anywhere — Desktop, USB stick, Downloads folder. It's completely portable. 3. Double-click to launch. On first run, the overlay auto-detects your Tarkov installation via the Windows registry. If that fails, manually set the paths in **Settings → Tarkov paths**. 4. In Tarkov, press **PrintScreen** during a raid. The screenshot drops into your Tarkov screenshots folder, and the overlay reads its filename to update your position on the map. -**Data storage**: settings and cache live in `%APPDATA%/tarkov-checker/`. By default, closing the window exits the app. Optionally, enable "Minimize to tray" in Settings to hide the window to the system tray instead of closing (the tray icon's "Show" restores it, "Quit" exits). +**Data storage**: settings and cache live in `%APPDATA%/raidmate/`. By default, closing the window exits the app. Optionally, enable "Minimize to tray" in Settings to hide the window to the system tray instead of closing (the tray icon's "Show" restores it, "Quit" exits). ### Developers Clone with submodules, install dependencies, then choose your dev mode: ```bash -git clone --recurse-submodules https://github.com/Mosmain/tarkov-checker.git -cd tarkov-checker +git clone --recurse-submodules https://github.com/Mosmain/raidmate.git +cd raidmate pnpm install ``` **Dev** (one command — Tauri spawns Vite on :5173 and the helper on :47474): ```bash -pnpm --filter @tarkov-checker/desktop tauri:dev +pnpm --filter @raidmate/desktop tauri:dev ``` A browser on the same PC or a phone on the same Wi-Fi can hit @@ -63,7 +63,7 @@ The overlay needs two directories: Resolution priority (highest to lowest): 1. **Environment variables** — `TARKOV_GAME_DIR`, `TARKOV_SCREENSHOT_DIR` (optional; useful for non-standard setups) -2. **Manual override** — Settings → Tarkov paths, persisted to `%APPDATA%/tarkov-checker/config.json` +2. **Manual override** — Settings → Tarkov paths, persisted to `%APPDATA%/raidmate/config.json` 3. **Windows registry auto-detect** — the BSG launcher writes the install path to the registry, and Windows tracks the real Documents location even when redirected to OneDrive If auto-detect fails, fill in **Game folder** in Settings and click **Save**. Watchers restart immediately — no app restart needed. @@ -123,7 +123,7 @@ See [LICENSE](./LICENSE). --- -# tarkov-checker (русская версия) +# RaidMate (русская версия) Спутник-карта для рейдов в Escape from Tarkov. Оверлей следит за скриншотами и логами вашей игры, отслеживая вашу позицию в реальном времени и отмечая выходы на интерактивной Leaflet-карте с SVG-слоями от сообщества. @@ -150,27 +150,27 @@ See [LICENSE](./LICENSE). ### Для игроков -1. Скачай `tarkov-checker-desktop.exe` из [последнего релиза](../../releases/latest). +1. Скачай `raidmate.exe` из [последнего релиза](../../releases/latest). 2. Положи куда угодно — на Рабочий стол, флешку, папку Downloads. Полностью портативное приложение. 3. Запусти двойным кликом. При первом запуске оверлей автоматически обнаружит твою установку Tarkov через реестр Windows. Если не получится, вручную укажи пути в **Settings → Tarkov paths**. 4. В Tarkov нажми **PrintScreen** во время рейда. Скриншот упадёт в папку скриншотов Tarkov, а оверлей прочитает имя файла и обновит твою позицию на карте. -**Хранение данных**: настройки и кэш живут в `%APPDATA%/tarkov-checker/`. По умолчанию закрытие окна завершает приложение. Опционально включи "Minimize to tray" в Settings, чтобы скрыть окно в системный трей вместо закрытия (пункт "Show" в меню трея его восстанавливает, "Quit" завершает приложение). +**Хранение данных**: настройки и кэш живут в `%APPDATA%/raidmate/`. По умолчанию закрытие окна завершает приложение. Опционально включи "Minimize to tray" в Settings, чтобы скрыть окно в системный трей вместо закрытия (пункт "Show" в меню трея его восстанавливает, "Quit" завершает приложение). ### Для разработчиков Клонируй с сабмодулями, установи зависимости, затем выбери режим разработки: ```bash -git clone --recurse-submodules https://github.com/Mosmain/tarkov-checker.git -cd tarkov-checker +git clone --recurse-submodules https://github.com/Mosmain/raidmate.git +cd raidmate pnpm install ``` **Разработка десктоп-оверлея** (одна команда — Tauri поднимает Vite на :5173): ```bash -pnpm --filter @tarkov-checker/desktop tauri:dev +pnpm --filter @raidmate/desktop tauri:dev ``` Браузер на том же ПК или телефон в той же Wi-Fi могут открывать @@ -188,7 +188,7 @@ pnpm --filter @tarkov-checker/desktop tauri:dev Приоритет определения (от высшего к низшему): 1. **Переменные окружения** — `TARKOV_GAME_DIR`, `TARKOV_SCREENSHOT_DIR` (опционально; полезно для нестандартных установок) -2. **Ручное переопределение** — Settings → Tarkov paths, сохраняется в `%APPDATA%/tarkov-checker/config.json` +2. **Ручное переопределение** — Settings → Tarkov paths, сохраняется в `%APPDATA%/raidmate/config.json` 3. **Автодетект из реестра Windows** — лаунчер BSG пишет путь установки в реестр, и Windows отслеживает реальное расположение Документов даже когда они перенаправлены в OneDrive Если автодетект не сработал, заполни **Game folder** в Settings и нажми **Save**. Слежение перезапустится сразу — перезапуска приложения не требуется. diff --git a/apps/client/README.md b/apps/client/README.md index 646bd43..ffa9d85 100644 --- a/apps/client/README.md +++ b/apps/client/README.md @@ -1,4 +1,4 @@ -# @tarkov-checker/client +# @raidmate/client Vue + Leaflet map. Runs both inside the Tauri overlay (`apps/desktop`) and as a plain browser page on phones over LAN (the same prod build the in-process Rust helper in `apps/desktop` serves at `:47474/`; dev uses Vite on `:5173`, which proxies `/api` + `/events` to the helper). Same code path, different transport (Tauri events vs SSE / `EventSource`). @@ -85,7 +85,7 @@ For nested or dynamic routes (`/raids/[id]`), see [Vue Router file-based docs](h 1. Create `src/features//` with whichever subfolders apply: `store.ts`, `composables/`, `components/`, `api/`, `lib/`. 2. Inside the feature: `./X` and `../X` imports. 3. Other features depend on yours via `@/features//`. -4. If the feature has persisted user settings — create `store.ts` using [`persistedRef`](./src/shared/persisted-store.ts) from `@/shared/persisted-store`. Each setting gets its own key like `tc..`. +4. If the feature has persisted user settings — create `store.ts` using [`persistedRef`](./src/shared/persisted-store.ts) from `@/shared/persisted-store`. Each setting gets its own key like `rm..`. 5. If the feature has its own SYSTEM/app settings UI (the gear drawer). Map-layer settings live on the layer registration instead — see step 6. - Create a section component `XxxSection.vue` under [`features/settings/sections/`](./src/features/settings/sections/). diff --git a/apps/client/index.html b/apps/client/index.html index 5a97677..08e2624 100644 --- a/apps/client/index.html +++ b/apps/client/index.html @@ -12,8 +12,8 @@ - - tarkov-checker + + RaidMate
diff --git a/apps/client/package.json b/apps/client/package.json index 30e68e9..058fe46 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,5 +1,5 @@ { - "name": "@tarkov-checker/client", + "name": "@raidmate/client", "version": "0.0.0", "private": true, "type": "module", @@ -16,7 +16,7 @@ }, "dependencies": { "@primeuix/themes": "^2.0.3", - "@tarkov-checker/shared": "workspace:*", + "@raidmate/shared": "workspace:*", "@tauri-apps/api": "^2.11.0", "@tauri-apps/plugin-global-shortcut": "^2.3.1", "@tauri-apps/plugin-window-state": "^2.4.1", diff --git a/apps/client/public/manifest.webmanifest b/apps/client/public/manifest.webmanifest index 0421aaa..7ae3d06 100644 --- a/apps/client/public/manifest.webmanifest +++ b/apps/client/public/manifest.webmanifest @@ -1,6 +1,6 @@ { - "name": "tarkov-checker", - "short_name": "tarkov-checker", + "name": "RaidMate", + "short_name": "RaidMate", "description": "Live Escape from Tarkov map overlay — second-screen map for your phone.", "start_url": "/", "scope": "/", diff --git a/apps/client/src/__tests__/hotkeys-store.spec.ts b/apps/client/src/__tests__/hotkeys-store.spec.ts index 90ed9f7..3b6af95 100644 --- a/apps/client/src/__tests__/hotkeys-store.spec.ts +++ b/apps/client/src/__tests__/hotkeys-store.spec.ts @@ -67,27 +67,4 @@ describe('useHotkeysStore — backend sync', () => { await store.setAction('zoomIn', 'CommandOrControl+Alt+Q'); expect(store.zoomInHotkey).toBe(DEFAULTS.zoomIn); // reverted }); - - it('migrates a customised legacy localStorage combo once', async () => { - // Old per-field persistedRef stored JSON-encoded strings. - localStorage.setItem('tc.hotkeys.zoomIn', JSON.stringify('CommandOrControl+Alt+M')); - fetchHotkeysMock.mockResolvedValue(DEFAULTS); - putHotkeysMock.mockResolvedValue({ ...DEFAULTS, zoomIn: 'CommandOrControl+Alt+M' }); - - const store = useHotkeysStore(); - await store.load(); - - expect(putHotkeysMock).toHaveBeenCalledWith({ zoomIn: 'CommandOrControl+Alt+M' }); - expect(store.zoomInHotkey).toBe('CommandOrControl+Alt+M'); - }); - - it('does not migrate when legacy values equal the backend defaults', async () => { - localStorage.setItem('tc.hotkeys.zoomIn', JSON.stringify(DEFAULTS.zoomIn)); - fetchHotkeysMock.mockResolvedValue(DEFAULTS); - - const store = useHotkeysStore(); - await store.load(); - - expect(putHotkeysMock).not.toHaveBeenCalled(); - }); }); diff --git a/apps/client/src/__tests__/persisted-store.spec.ts b/apps/client/src/__tests__/persisted-store.spec.ts index f675baf..216ef5d 100644 --- a/apps/client/src/__tests__/persisted-store.spec.ts +++ b/apps/client/src/__tests__/persisted-store.spec.ts @@ -12,61 +12,61 @@ describe('persistedRef', () => { }); it('returns the default value when nothing is persisted', () => { - const r = persistedRef('tc.test.empty', enumSchema, 'a'); + const r = persistedRef('rm.test.empty', enumSchema, 'a'); expect(r.value).toBe('a'); }); it('round-trips a value through localStorage', async () => { - const a = persistedRef('tc.test.roundtrip', enumSchema, 'a'); + const a = persistedRef('rm.test.roundtrip', enumSchema, 'a'); a.value = 'b'; await nextTick(); - expect(localStorage.getItem('tc.test.roundtrip')).toBe('"b"'); + expect(localStorage.getItem('rm.test.roundtrip')).toBe('"b"'); - const b = persistedRef('tc.test.roundtrip', enumSchema, 'a'); + const b = persistedRef('rm.test.roundtrip', enumSchema, 'a'); expect(b.value).toBe('b'); }); it('falls back to default on corrupt JSON without throwing', () => { - localStorage.setItem('tc.test.corrupt', '{not valid json'); - const r = persistedRef('tc.test.corrupt', enumSchema, 'c'); + localStorage.setItem('rm.test.corrupt', '{not valid json'); + const r = persistedRef('rm.test.corrupt', enumSchema, 'c'); expect(r.value).toBe('c'); }); it('leaves the corrupt entry in place so a future schema can recover it', () => { - localStorage.setItem('tc.test.corrupt-keep', '{not valid json'); - persistedRef('tc.test.corrupt-keep', enumSchema, 'c'); - expect(localStorage.getItem('tc.test.corrupt-keep')).toBe('{not valid json'); + localStorage.setItem('rm.test.corrupt-keep', '{not valid json'); + persistedRef('rm.test.corrupt-keep', enumSchema, 'c'); + expect(localStorage.getItem('rm.test.corrupt-keep')).toBe('{not valid json'); }); it('falls back to default on schema mismatch', () => { - localStorage.setItem('tc.test.mismatch', '"not-in-enum"'); - const r = persistedRef('tc.test.mismatch', enumSchema, 'a'); + localStorage.setItem('rm.test.mismatch', '"not-in-enum"'); + const r = persistedRef('rm.test.mismatch', enumSchema, 'a'); expect(r.value).toBe('a'); }); it('falls back to default when a number outranges its schema', () => { - localStorage.setItem('tc.test.range', '999'); - const r = persistedRef('tc.test.range', numberSchema, 42); + localStorage.setItem('rm.test.range', '999'); + const r = persistedRef('rm.test.range', numberSchema, 42); expect(r.value).toBe(42); }); it('keeps keys isolated — writing one does not touch another', async () => { - const left = persistedRef('tc.test.left', enumSchema, 'a'); - const right = persistedRef('tc.test.right', enumSchema, 'a'); + const left = persistedRef('rm.test.left', enumSchema, 'a'); + const right = persistedRef('rm.test.right', enumSchema, 'a'); left.value = 'b'; right.value = 'c'; await nextTick(); - expect(localStorage.getItem('tc.test.left')).toBe('"b"'); - expect(localStorage.getItem('tc.test.right')).toBe('"c"'); + expect(localStorage.getItem('rm.test.left')).toBe('"b"'); + expect(localStorage.getItem('rm.test.right')).toBe('"c"'); }); it('persists nested objects through deep watch', async () => { const objSchema = z.object({ count: z.number(), tags: z.array(z.string()) }); - const r = persistedRef('tc.test.nested', objSchema, { count: 0, tags: [] }); + const r = persistedRef('rm.test.nested', objSchema, { count: 0, tags: [] }); r.value.count = 5; r.value.tags.push('one'); await nextTick(); - const stored: unknown = JSON.parse(localStorage.getItem('tc.test.nested') ?? 'null'); + const stored: unknown = JSON.parse(localStorage.getItem('rm.test.nested') ?? 'null'); expect(stored).toEqual({ count: 5, tags: ['one'] }); }); }); diff --git a/apps/client/src/__tests__/useLayerVisibility.spec.ts b/apps/client/src/__tests__/useLayerVisibility.spec.ts index 9829cd7..48990be 100644 --- a/apps/client/src/__tests__/useLayerVisibility.spec.ts +++ b/apps/client/src/__tests__/useLayerVisibility.spec.ts @@ -16,15 +16,15 @@ describe('useLayerVisibility', () => { expect(useLayerVisibility('test-singleton')).toBe(useLayerVisibility('test-singleton')); }); - it('persists a toggle to tc.layer..visible', async () => { + it('persists a toggle to rm.layer..visible', async () => { const v = useLayerVisibility('test-persist'); v.value = false; await nextTick(); - expect(localStorage.getItem('tc.layer.test-persist.visible')).toBe('false'); + expect(localStorage.getItem('rm.layer.test-persist.visible')).toBe('false'); }); it('reads an existing persisted value on first use', () => { - localStorage.setItem('tc.layer.test-seeded.visible', 'false'); + localStorage.setItem('rm.layer.test-seeded.visible', 'false'); expect(useLayerVisibility('test-seeded').value).toBe(false); }); }); diff --git a/apps/client/src/app/router.ts b/apps/client/src/app/router.ts index 055cb52..2597492 100644 --- a/apps/client/src/app/router.ts +++ b/apps/client/src/app/router.ts @@ -14,7 +14,7 @@ import { isTauri } from '@/shared/tauri'; * window is re-opened. The browser build keeps web history so deep links * (e.g. /raid on a phone) survive bookmarking. * - * `import.meta.env.BASE_URL` (`/` for local builds, `/tarkov-checker/` for + * `import.meta.env.BASE_URL` (`/` for local builds, `/raidmate/` for * the GitHub Pages project page — see `vite.config.ts`) prefixes every * route so deep links land under the right subpath. */ diff --git a/apps/client/src/features/airdrop/store.ts b/apps/client/src/features/airdrop/store.ts index 24d2278..5582011 100644 --- a/apps/client/src/features/airdrop/store.ts +++ b/apps/client/src/features/airdrop/store.ts @@ -79,7 +79,7 @@ export const useAirdropStore = defineStore('airdrop', () => { // banner ticks down the remaining distance as they approach. const playerCurrentPos = ref<{ readonly x: number; readonly z: number } | null>(null); const dropMarkerRadius = persistedRef( - 'tc.airdrop.dropMarkerRadius', + 'rm.airdrop.dropMarkerRadius', dropMarkerRadiusSchema, DROP_MARKER_RADIUS_DEFAULT, ); diff --git a/apps/client/src/features/hotkeys/store.ts b/apps/client/src/features/hotkeys/store.ts index f4a2740..fc07ce9 100644 --- a/apps/client/src/features/hotkeys/store.ts +++ b/apps/client/src/features/hotkeys/store.ts @@ -1,10 +1,9 @@ -import { z } from 'zod'; import { persistedRef } from '@/shared/persisted-store'; -import { acceleratorSchema, type HotkeyConfig, type HotkeyPatch } from '@shared/hotkeys-api'; +import { acceleratorSchema, type HotkeyConfig } from '@shared/hotkeys-api'; import { fetchHotkeys, putHotkeys } from '@/features/server/api/hotkeys-api'; // Default combos — must match the Rust `HotkeyConfig::default()` so an -// un-customised install agrees on both ends and the migration below is a no-op. +// un-customised install agrees on both ends. const DEFAULTS: HotkeyConfig = { zoomIn: 'CommandOrControl+=', zoomOut: 'CommandOrControl+-', @@ -13,28 +12,6 @@ const DEFAULTS: HotkeyConfig = { airdrop: 'CommandOrControl+Alt+D', }; -// localStorage keys the old client-owned store used (per-field persistedRefs). -const LEGACY_KEYS: Record = { - zoomIn: 'tc.hotkeys.zoomIn', - zoomOut: 'tc.hotkeys.zoomOut', - floorUp: 'tc.hotkeys.floorUp', - floorDown: 'tc.hotkeys.floorDown', - airdrop: 'tc.hotkeys.airdrop', -}; - -/** Read a legacy persistedRef value (stored as JSON) and validate it. */ -function readLegacy(key: string): string | null { - if (typeof localStorage === 'undefined') return null; - const raw = localStorage.getItem(key); - if (raw === null) return null; - try { - const parsed = acceleratorSchema.safeParse(JSON.parse(raw)); - return parsed.success ? parsed.data : null; - } catch { - return null; - } -} - /** * Hotkey settings store. The overlay **lock** combo stays client-owned (it * toggles click-through — a window op, overlay-only — and is registered via @@ -44,7 +21,7 @@ function readLegacy(key: string): string | null { * start at the defaults so reads before `load()` are safe. */ export const useHotkeysStore = defineStore('hotkeys', () => { - const lockHotkey = persistedRef('tc.hotkeys.lock', acceleratorSchema, 'CommandOrControl+Alt+L'); + const lockHotkey = persistedRef('rm.hotkeys.lock', acceleratorSchema, 'CommandOrControl+Alt+L'); const zoomInHotkey = ref(DEFAULTS.zoomIn); const zoomOutHotkey = ref(DEFAULTS.zoomOut); @@ -66,32 +43,10 @@ export const useHotkeysStore = defineStore('hotkeys', () => { } } - // One-time migration: if the user customised combos in the old localStorage - // store, push those up to the backend the first time the new client runs. - // Defaults match, so an un-customised install never PUTs anything. - const migrated = persistedRef('tc.hotkeys.migrated', z.boolean(), false); - - async function migrateLegacy(backend: HotkeyConfig): Promise { - if (migrated.value) return; - migrated.value = true; - const patch: HotkeyPatch = {}; - for (const key of Object.keys(LEGACY_KEYS) as (keyof HotkeyConfig)[]) { - const legacy = readLegacy(LEGACY_KEYS[key]); - if (legacy && legacy !== backend[key]) { - patch[key] = legacy; - } - } - if (Object.keys(patch).length > 0) { - applyConfig(await putHotkeys(patch)); - } - } - - /** Load combos from the backend and run the one-time legacy migration. + /** Load combos from the backend. * Mounted once at the app root (see `useHotkeysSync`). */ async function load(): Promise { - const backend = await fetchHotkeys(); - applyConfig(backend); - await migrateLegacy(backend); + applyConfig(await fetchHotkeys()); } /** Persist a single action's combo. Optimistically updates the local ref, diff --git a/apps/client/src/features/i18n/locales/en.json b/apps/client/src/features/i18n/locales/en.json index 1eb59b0..0531ebf 100644 --- a/apps/client/src/features/i18n/locales/en.json +++ b/apps/client/src/features/i18n/locales/en.json @@ -58,7 +58,7 @@ "placeholderScreenshotsDir": "Documents\\Escape from Tarkov\\Screenshots", "errors": { "noHelperTitle": "The helper isn't running", - "noHelperBody": "Start tarkov-checker.exe on the same machine as Tarkov to configure or sync game folders here. Refresh this page once the helper is up.", + "noHelperBody": "Start raidmate.exe on the same machine as Tarkov to configure or sync game folders here. Refresh this page once the helper is up.", "otherTitle": "Couldn't load Tarkov paths" } }, @@ -133,7 +133,7 @@ }, "trayHint": { "title": "Still running", - "body": "tarkov-checker is now in the system tray. Open it from there, or right-click the tray icon to quit." + "body": "RaidMate is now in the system tray. Open it from there, or right-click the tray icon to quit." }, "airdrop": { "armedFirst": "Drop tracker armed while facing the airdrop and press PrintScreen", @@ -155,7 +155,7 @@ "pairPhone": "Pair phone", "copyUrl": "Copy LAN URL", "quit": "Quit", - "tooltip": "tarkov-checker — running" + "tooltip": "RaidMate — running" }, "extractNames": { "bigmap": { diff --git a/apps/client/src/features/i18n/locales/ru.json b/apps/client/src/features/i18n/locales/ru.json index 2e62860..e524c8b 100644 --- a/apps/client/src/features/i18n/locales/ru.json +++ b/apps/client/src/features/i18n/locales/ru.json @@ -58,7 +58,7 @@ "placeholderScreenshotsDir": "Documents\\Escape from Tarkov\\Screenshots", "errors": { "noHelperTitle": "Хелпер не запущен", - "noHelperBody": "Запусти tarkov-checker.exe на той же машине что и Tarkov, чтобы настроить или синхронизировать папки игры. После запуска хелпера обнови эту страницу.", + "noHelperBody": "Запусти raidmate.exe на той же машине что и Tarkov, чтобы настроить или синхронизировать папки игры. После запуска хелпера обнови эту страницу.", "otherTitle": "Не удалось загрузить пути Tarkov" } }, @@ -133,7 +133,7 @@ }, "trayHint": { "title": "Работает в фоне", - "body": "tarkov-checker свёрнут в системный трей. Открой его оттуда или нажми правый клик по иконке, чтобы выйти." + "body": "RaidMate свёрнут в системный трей. Открой его оттуда или нажми правый клик по иконке, чтобы выйти." }, "airdrop": { "armedFirst": "Drop-трекер запущен, смотри на дроп и нажми PrintScreen", @@ -155,7 +155,7 @@ "pairPhone": "Подключить телефон", "copyUrl": "Копировать LAN-ссылку", "quit": "Выход", - "tooltip": "tarkov-checker — работает" + "tooltip": "RaidMate — работает" }, "extractNames": { "bigmap": { diff --git a/apps/client/src/features/i18n/store.ts b/apps/client/src/features/i18n/store.ts index 5be7b2e..6e5b154 100644 --- a/apps/client/src/features/i18n/store.ts +++ b/apps/client/src/features/i18n/store.ts @@ -15,7 +15,7 @@ function detectInitialLang(): ApiLang { } export const useI18nStore = defineStore('i18n', () => { - const apiLang = persistedRef('tc.i18n.apiLang', apiLangSchema, detectInitialLang()); + const apiLang = persistedRef('rm.i18n.apiLang', apiLangSchema, detectInitialLang()); // Mirror the persisted apiLang into the vue-i18n instance: on first read // (initial value), and on every subsequent change. `setLocale` is lazy — diff --git a/apps/client/src/features/map/composables/useLayerVisibility.ts b/apps/client/src/features/map/composables/useLayerVisibility.ts index 4d5604b..819a869 100644 --- a/apps/client/src/features/map/composables/useLayerVisibility.ts +++ b/apps/client/src/features/map/composables/useLayerVisibility.ts @@ -18,7 +18,7 @@ export function useLayerVisibility(id: string): Ref { if (cached) return cached; // scope.run only returns undefined if the scope is stopped; ours never is. const r = scope.run(() => - persistedRef(`tc.layer.${id}.visible`, z.boolean(), true), + persistedRef(`rm.layer.${id}.visible`, z.boolean(), true), ) as Ref; refs.set(id, r); return r; diff --git a/apps/client/src/features/map/composables/useLeafletMap.ts b/apps/client/src/features/map/composables/useLeafletMap.ts index 4ce8d81..f3b0588 100644 --- a/apps/client/src/features/map/composables/useLeafletMap.ts +++ b/apps/client/src/features/map/composables/useLeafletMap.ts @@ -166,7 +166,7 @@ export function useLeafletMap( async function loadSvgIntoMap(instance: LeafletMap): Promise { try { mapError.value = null; - // BASE_URL is `/` for local/Tauri builds and `/tarkov-checker/` on + // BASE_URL is `/` for local/Tauri builds and `/raidmate/` on // GitHub Pages — runtime fetches need the prefix manually since // Vite only rewrites build-time asset references in HTML/CSS. const svgUrl = mapSvgPath(mapCode, `${import.meta.env.BASE_URL}maps`); diff --git a/apps/client/src/features/map/layers/extracts/icon.ts b/apps/client/src/features/map/layers/extracts/icon.ts index bedcacb..7a9a2db 100644 --- a/apps/client/src/features/map/layers/extracts/icon.ts +++ b/apps/client/src/features/map/layers/extracts/icon.ts @@ -6,7 +6,7 @@ export const EXTRACT_ICON_SIZE = 26; /** Canonical render order — keeps composite slices stable across reorderings. */ export const FACTION_ORDER: ReadonlyArray = ['pmc', 'scav', 'shared']; -// `BASE_URL` is `/` for local/Tauri builds and `/tarkov-checker/` on +// `BASE_URL` is `/` for local/Tauri builds and `/raidmate/` on // GitHub Pages — runtime URLs in HTML strings need the prefix manually // since Vite only rewrites build-time asset references in template/CSS. // Same pattern as `mapSvgPath(...)` in useLeafletMap.ts. diff --git a/apps/client/src/features/map/store.ts b/apps/client/src/features/map/store.ts index 30f2f54..fa94bc0 100644 --- a/apps/client/src/features/map/store.ts +++ b/apps/client/src/features/map/store.ts @@ -17,28 +17,28 @@ export type ExtractLabelSize = z.infer; const DEFAULT_FACTIONS: readonly ExtractFactionFilter[] = ['pmc', 'scav', 'shared']; export const useMapSettingsStore = defineStore('map-settings', () => { - const mapCode = persistedRef('tc.map.code', mapCodeSchema, 'bigmap' as TarkovMapCode); - const extractFactions = persistedRef('tc.map.extractFactions', z.array(extractFactionSchema), [ + const mapCode = persistedRef('rm.map.code', mapCodeSchema, 'bigmap' as TarkovMapCode); + const extractFactions = persistedRef('rm.map.extractFactions', z.array(extractFactionSchema), [ ...DEFAULT_FACTIONS, ]); const extractLabelMode = persistedRef( - 'tc.map.extractLabelMode', + 'rm.map.extractLabelMode', labelModeSchema, 'always' as ExtractLabelMode, ); const extractLabelSize = persistedRef( - 'tc.map.extractLabelSize', + 'rm.map.extractLabelSize', labelSizeSchema, 'md' as ExtractLabelSize, ); // Off-screen extract arrows on the viewport edge. Opt-in, off by default. - const edgeIndicators = persistedRef('tc.map.edgeIndicators', z.boolean(), false); + const edgeIndicators = persistedRef('rm.map.edgeIndicators', z.boolean(), false); const playerFollow = persistedRef( - 'tc.map.playerFollow', + 'rm.map.playerFollow', playerFollowSchema, 'off' as PlayerFollow, ); - const autoMapSwitch = persistedRef('tc.map.autoMapSwitch', autoMapSwitchSchema, true); + const autoMapSwitch = persistedRef('rm.map.autoMapSwitch', autoMapSwitchSchema, true); return { mapCode, diff --git a/apps/client/src/features/overlay/composables/useTrayIcon.ts b/apps/client/src/features/overlay/composables/useTrayIcon.ts index a2e8b55..d7e401f 100644 --- a/apps/client/src/features/overlay/composables/useTrayIcon.ts +++ b/apps/client/src/features/overlay/composables/useTrayIcon.ts @@ -5,7 +5,7 @@ import { useUpdaterStore } from '@/features/updater/store'; type TrayHandle = Awaited>; -const TRAY_ID = 'tarkov-checker-tray'; +const TRAY_ID = 'raidmate-tray'; /** * Owns the Tauri system-tray icon lifecycle: creates the icon on mount, diff --git a/apps/client/src/features/overlay/store.ts b/apps/client/src/features/overlay/store.ts index 89ab505..320ccc6 100644 --- a/apps/client/src/features/overlay/store.ts +++ b/apps/client/src/features/overlay/store.ts @@ -5,22 +5,22 @@ const overlayZoomSchema = z.enum(['75', '100', '125', '150']); export type OverlayZoom = z.infer; export const useOverlayStore = defineStore('overlay', () => { - const alwaysOnTop = persistedRef('tc.overlay.alwaysOnTop', z.boolean(), false); - const opacity = persistedRef('tc.overlay.opacity', z.number().min(0.3).max(1), 1); - const mapOpacity = persistedRef('tc.overlay.mapOpacity', z.number().min(0).max(1), 1); - const zoom = persistedRef('tc.overlay.zoom', overlayZoomSchema, '100' as OverlayZoom); + const alwaysOnTop = persistedRef('rm.overlay.alwaysOnTop', z.boolean(), false); + const opacity = persistedRef('rm.overlay.opacity', z.number().min(0.3).max(1), 1); + const mapOpacity = persistedRef('rm.overlay.mapOpacity', z.number().min(0).max(1), 1); + const zoom = persistedRef('rm.overlay.zoom', overlayZoomSchema, '100' as OverlayZoom); // When on, the ✕ button hides the window to the system tray (keeps running) // instead of quitting; restore via the tray's "Show window", quit via the // tray's "Quit". Default ON — closing parks the overlay in the tray rather // than killing the session. Users who prefer ✕ = confirmed quit can flip it // off in Settings. - const minimizeToTray = persistedRef('tc.overlay.minimizeToTray', z.boolean(), true); + const minimizeToTray = persistedRef('rm.overlay.minimizeToTray', z.boolean(), true); // One-shot: tracks whether the "still running in the tray" notification has // been shown. Set true after the first close-to-tray so the hint fires once, // not on every ✕. - const trayHintShown = persistedRef('tc.overlay.trayHintShown', z.boolean(), false); + const trayHintShown = persistedRef('rm.overlay.trayHintShown', z.boolean(), false); // Session-only: booting into a locked overlay with a broken hotkey would be // unrecoverable, so the locked state is intentionally NOT persisted. diff --git a/apps/client/src/features/server/composables/useServerPaths.ts b/apps/client/src/features/server/composables/useServerPaths.ts index 901903c..68bebe1 100644 --- a/apps/client/src/features/server/composables/useServerPaths.ts +++ b/apps/client/src/features/server/composables/useServerPaths.ts @@ -6,7 +6,7 @@ export type PathSlot = 'gameDir' | 'screenshotsDir' | 'logsDir'; /** * Typed UI-state for path-API failures. `no-helper` is the common case * when the SPA runs in a browser (hosted or LAN-phone) and the user has - * not started `tarkov-checker.exe` yet — the panel renders a friendly + * not started `raidmate.exe` yet — the panel renders a friendly * "start the helper" message instead of the raw fetch error. */ export type PathsError = { kind: 'no-helper' } | { kind: 'other'; detail: string }; diff --git a/apps/client/src/features/settings/SettingsPanel.vue b/apps/client/src/features/settings/SettingsPanel.vue index 8060480..66eb7df 100644 --- a/apps/client/src/features/settings/SettingsPanel.vue +++ b/apps/client/src/features/settings/SettingsPanel.vue @@ -14,7 +14,7 @@ const isDesktop = useMediaQuery('(min-width: 640px)'); // paths/pairing). Desktop opens every section; the overlay/phone start // collapsed to keep the sheet short. Snapshotted once, then user choices persist. const openSections = persistedRef( - 'tc.settings.open', + 'rm.settings.open', z.array(z.string()), isDesktop.value ? systemSections.value.map((s) => s.id) : [], ); diff --git a/apps/client/src/features/updater/components/AboutFooter.vue b/apps/client/src/features/updater/components/AboutFooter.vue index a9d9986..a4ed2f2 100644 --- a/apps/client/src/features/updater/components/AboutFooter.vue +++ b/apps/client/src/features/updater/components/AboutFooter.vue @@ -3,7 +3,7 @@ import { isTauri } from '@/shared/tauri'; import { useUpdaterStore } from '@/features/updater/store'; import { useAppVersion } from '@/features/updater/composables/useAppVersion'; -const RELEASES_URL = 'https://github.com/Mosmain/tarkov-checker/releases'; +const RELEASES_URL = 'https://github.com/Mosmain/raidmate/releases'; const { t } = useI18n(); const version = useAppVersion(); diff --git a/apps/client/src/features/updater/store.ts b/apps/client/src/features/updater/store.ts index f18bedc..d93b4b2 100644 --- a/apps/client/src/features/updater/store.ts +++ b/apps/client/src/features/updater/store.ts @@ -14,7 +14,7 @@ export type CheckOutcome = 'none' | 'latest' | 'error'; export const useUpdaterStore = defineStore('updater', () => { // When off, no check fires on startup; the manual button still works. - const autoCheck = persistedRef('tc.updater.autoCheck', z.boolean(), true); + const autoCheck = persistedRef('rm.updater.autoCheck', z.boolean(), true); // Runtime state, deliberately not persisted: a pending update is only as // fresh as the process that found it. diff --git a/apps/client/src/shared/persisted-store.ts b/apps/client/src/shared/persisted-store.ts index 07860c1..bf45a6b 100644 --- a/apps/client/src/shared/persisted-store.ts +++ b/apps/client/src/shared/persisted-store.ts @@ -3,7 +3,7 @@ import type { z } from 'zod'; /** * Reactive ref backed by localStorage, validated against a zod schema on read. * - * Each persisted field owns its own localStorage key (convention: "tc.."), + * Each persisted field owns its own localStorage key (convention: "rm.."), * so adding/removing a field never breaks unrelated state — there is no monolithic * blob to version. Corrupt or schema-incompatible data falls back to `defaultValue` * silently; the bad entry is left in place so a future schema can re-validate it diff --git a/apps/client/src/shared/tauri.ts b/apps/client/src/shared/tauri.ts index 9f21b39..39d7af2 100644 --- a/apps/client/src/shared/tauri.ts +++ b/apps/client/src/shared/tauri.ts @@ -15,14 +15,14 @@ export const isTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in * iterated without a Tauri build. It ONLY flips render gates — native window * calls and the IPC transport still key off `isTauri`, so they stay no-ops off * real Tauri. Enable via `?overlay` in the URL or - * localStorage['tc.dev.overlayChrome'] = '1'. + * localStorage['rm.dev.overlayChrome'] = '1'. */ function previewOverlayChrome(): boolean { if (!import.meta.env.DEV || typeof window === 'undefined') return false; try { return ( new URLSearchParams(window.location.search).has('overlay') || - window.localStorage.getItem('tc.dev.overlayChrome') === '1' + window.localStorage.getItem('rm.dev.overlayChrome') === '1' ); } catch { return false; diff --git a/apps/client/vite.config.ts b/apps/client/vite.config.ts index 0b1367d..4c249cf 100644 --- a/apps/client/vite.config.ts +++ b/apps/client/vite.config.ts @@ -24,12 +24,12 @@ const clientSrc = fileURLToPath(new URL('./src', import.meta.url)); * Change the slug here if the repo gets renamed or moved under a custom * domain (custom domain → keep `/`). */ -const GITHUB_PAGES_BASE = '/tarkov-checker/'; +const GITHUB_PAGES_BASE = '/raidmate/'; export default defineConfig(({ mode, command }) => ({ // Tauri prints its own dev-server progress; don't let Vite wipe it. clearScreen: false, - // Asset URL prefix. Pages project-page → `/tarkov-checker/`; every + // Asset URL prefix. Pages project-page → `/raidmate/`; every // other build (dev, Tauri overlay, local pnpm build) → `/`. base: command === 'build' && process.env.GITHUB_PAGES === 'true' ? GITHUB_PAGES_BASE : '/', // Lets the frontend read TAURI_ENV_* (target triple, debug flag) via import.meta.env. @@ -89,7 +89,7 @@ export default defineConfig(({ mode, command }) => ({ runtimeOnly: true, }), tailwindcss(), - // `pnpm --filter @tarkov-checker/client analyze` runs `vite build --mode analyze` + // `pnpm --filter @raidmate/client analyze` runs `vite build --mode analyze` // and pops an interactive treemap of the production bundle. mode === 'analyze' && (visualizer({ @@ -100,7 +100,7 @@ export default defineConfig(({ mode, command }) => ({ template: 'treemap', }) as PluginOption), // GitHub Pages SPA-history workaround: Pages has no server-side - // rewrite, so a deep link like `/tarkov-checker/raid` 404s. Serving + // rewrite, so a deep link like `/raidmate/raid` 404s. Serving // the same content as 404.html lets Vue Router pick the URL up // client-side on a fresh navigation. Cross-platform copy via Node // fs — avoids the bash-only `cp` step in package.json scripts. diff --git a/apps/desktop/README.md b/apps/desktop/README.md index e5967b1..f20102c 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -1,6 +1,6 @@ -# @tarkov-checker/desktop +# @raidmate/desktop -Tauri 2 wrapper around `@tarkov-checker/client`. In dev the window points +Tauri 2 wrapper around `@raidmate/client`. In dev the window points at the Vite server `beforeDevCommand` spawns on `http://localhost:5173`. Release build bundles `apps/client/dist` into the .exe (and the helper serves the same files for phone access on `:47474`). @@ -14,18 +14,18 @@ serves the same files for phone access on `:47474`). ```pwsh # One command — Tauri spawns Vite, then opens the window -pnpm --filter @tarkov-checker/desktop tauri:dev +pnpm --filter @raidmate/desktop tauri:dev ``` `beforeDevCommand` in `tauri.conf.json` is -`pnpm --filter @tarkov-checker/client dev`, so Tauri starts the Vite +`pnpm --filter @raidmate/client dev`, so Tauri starts the Vite dev server (`:5173`) itself and shuts it down on exit — no separate terminal needed. ## Production build ```pwsh -pnpm --filter @tarkov-checker/desktop tauri:build +pnpm --filter @raidmate/desktop tauri:build ``` `beforeBuildCommand` builds the client first; Tauri then bundles diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 92b9ab4..cee6e6f 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,5 +1,5 @@ { - "name": "@tarkov-checker/desktop", + "name": "@raidmate/desktop", "version": "0.0.0", "private": true, "type": "module", @@ -7,7 +7,7 @@ "tauri": "tauri", "tauri:dev": "tauri dev", "tauri:build": "tauri build", - "backend:dev": "cargo run --manifest-path src-tauri/Cargo.toml --bin tarkov-checker-headless", + "backend:dev": "cargo run --manifest-path src-tauri/Cargo.toml --bin raidmate-headless", "lint": "echo \"(no JS sources to lint)\"", "typecheck": "echo \"(no TS sources to typecheck)\"" }, diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock index 39ee6f7..b43e901 100644 --- a/apps/desktop/src-tauri/Cargo.lock +++ b/apps/desktop/src-tauri/Cargo.lock @@ -2970,6 +2970,41 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "raidmate" +version = "0.1.1" +dependencies = [ + "anyhow", + "axum", + "futures-util", + "global-hotkey", + "local-ip-address", + "mime_guess", + "notify", + "notify-debouncer-full", + "once_cell", + "qrcode", + "regex", + "reqwest 0.12.28", + "rust-embed", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-clipboard-manager", + "tauri-plugin-global-shortcut", + "tauri-plugin-window-state", + "tauri-winrt-notification", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tower", + "tower-http", + "trash", + "windows-sys 0.59.0", + "winreg 0.52.0", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -3763,41 +3798,6 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "tarkov-checker-desktop" -version = "0.1.1" -dependencies = [ - "anyhow", - "axum", - "futures-util", - "global-hotkey", - "local-ip-address", - "mime_guess", - "notify", - "notify-debouncer-full", - "once_cell", - "qrcode", - "regex", - "reqwest 0.12.28", - "rust-embed", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-clipboard-manager", - "tauri-plugin-global-shortcut", - "tauri-plugin-window-state", - "tauri-winrt-notification", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tower", - "tower-http", - "trash", - "windows-sys 0.59.0", - "winreg 0.52.0", -] - [[package]] name = "tauri" version = "2.11.2" diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index ee4217d..75da82d 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -1,22 +1,22 @@ [package] -name = "tarkov-checker-desktop" +name = "raidmate" version = "0.1.1" -description = "Desktop wrapper for tarkov-checker" -authors = ["tarkov-checker"] +description = "Desktop overlay and helper for RaidMate" +authors = ["raidmate"] edition = "2021" rust-version = "1.77" -default-run = "tarkov-checker-desktop" +default-run = "raidmate" [lib] -name = "tarkov_checker_desktop_lib" +name = "raidmate_lib" crate-type = ["staticlib", "cdylib", "rlib"] [[bin]] -name = "tarkov-checker-desktop" +name = "raidmate" path = "src/main.rs" [[bin]] -name = "tarkov-checker-headless" +name = "raidmate-headless" path = "src/bin/headless.rs" [build-dependencies] diff --git a/apps/desktop/src-tauri/src/bin/headless.rs b/apps/desktop/src-tauri/src/bin/headless.rs index 0e2e0a7..7a00a5d 100644 --- a/apps/desktop/src-tauri/src/bin/headless.rs +++ b/apps/desktop/src-tauri/src/bin/headless.rs @@ -1,5 +1,5 @@ // Headless backend: runs the HTTP server + watchers without the Tauri window. // No windows_subsystem attribute — keep a console so logs and Ctrl+C work. fn main() { - tarkov_checker_desktop_lib::run_headless(); + raidmate_lib::run_headless(); } diff --git a/apps/desktop/src-tauri/src/http_server.rs b/apps/desktop/src-tauri/src/http_server.rs index 40204d2..233173d 100644 --- a/apps/desktop/src-tauri/src/http_server.rs +++ b/apps/desktop/src-tauri/src/http_server.rs @@ -79,7 +79,7 @@ struct PingResponse { async fn ping() -> Json { Json(PingResponse { - name: "tarkov-checker", + name: "raidmate", version: env!("CARGO_PKG_VERSION"), status: "ok", }) @@ -382,7 +382,7 @@ mod tests { fn tmp_json(tag: &str) -> std::path::PathBuf { std::env::temp_dir().join(format!( - "tarkov-checker-test-{tag}-{}-{}.json", + "raidmate-test-{tag}-{}-{}.json", std::process::id(), std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -444,7 +444,7 @@ mod tests { .unwrap(); assert_eq!(response.status(), StatusCode::OK); let body = body_text(response).await; - assert!(body.contains("\"name\":\"tarkov-checker\""), "body: {body}"); + assert!(body.contains("\"name\":\"raidmate\""), "body: {body}"); assert!(body.contains("\"status\":\"ok\""), "body: {body}"); } diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index d00a84f..ad9eebf 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -203,7 +203,7 @@ pub fn run_headless() { hotkey_store, hotkeys, }); - eprintln!("[headless] tarkov-checker backend up — http://0.0.0.0:47474 (Ctrl+C to stop)"); + eprintln!("[headless] raidmate backend up — http://0.0.0.0:47474 (Ctrl+C to stop)"); std::future::pending::<()>().await; }); } diff --git a/apps/desktop/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs index 558d446..63a1409 100644 --- a/apps/desktop/src-tauri/src/main.rs +++ b/apps/desktop/src-tauri/src/main.rs @@ -7,5 +7,5 @@ fn main() { if std::env::args().any(|a| a == "--updated") { std::thread::sleep(std::time::Duration::from_millis(1500)); } - tarkov_checker_desktop_lib::run() + raidmate_lib::run() } diff --git a/apps/desktop/src-tauri/src/notify.rs b/apps/desktop/src-tauri/src/notify.rs index 329cc86..b6e0b95 100644 --- a/apps/desktop/src-tauri/src/notify.rs +++ b/apps/desktop/src-tauri/src/notify.rs @@ -26,7 +26,7 @@ const ICON_BYTES: &[u8] = include_bytes!("../icons/128x128.png"); /// DisplayName + IconUri so Windows shows this app's name and icon on toasts /// instead of PowerShell's. Idempotent and best-effort: any failure just /// leaves toasts with a generic identity, so errors are logged, not -/// propagated. `data_dir` is the already-created `%APPDATA%/tarkov-checker` +/// propagated. `data_dir` is the already-created `%APPDATA%/raidmate` /// folder (sibling to config.json). pub fn register_aumid(app: &AppHandle, data_dir: &Path) { let aumid = app.config().identifier.clone(); @@ -54,7 +54,7 @@ fn write_registry(aumid: &str, icon_path: &Path) -> std::io::Result<()> { let hkcu = RegKey::predef(HKEY_CURRENT_USER); let (key, _) = hkcu.create_subkey(format!("Software\\Classes\\AppUserModelId\\{aumid}"))?; - key.set_value("DisplayName", &"tarkov-checker")?; + key.set_value("DisplayName", &"RaidMate")?; key.set_value("IconUri", &icon_path.display().to_string())?; Ok(()) } diff --git a/apps/desktop/src-tauri/src/server/config.rs b/apps/desktop/src-tauri/src/server/config.rs index cf0e1e1..28868f7 100644 --- a/apps/desktop/src-tauri/src/server/config.rs +++ b/apps/desktop/src-tauri/src/server/config.rs @@ -1,6 +1,6 @@ //! User-overrides store for Tarkov directory paths. //! -//! Persisted in `%APPDATA%/tarkov-checker/config.json`. JSON shape: +//! Persisted in `%APPDATA%/raidmate/config.json`. JSON shape: //! `{ gameDir?, screenshotsDir? }`, both nullable. UNC paths are //! rejected at the validation layer (see `normalize`) — they cannot be //! watched reliably and would be a privacy-leak surface if accepted. @@ -136,7 +136,7 @@ fn normalize(v: Option) -> Result, String> { pub fn data_dir() -> Result { let appdata = std::env::var("APPDATA").context("APPDATA env var unset")?; - let dir = Path::new(&appdata).join("tarkov-checker"); + let dir = Path::new(&appdata).join("raidmate"); Ok(dir) } diff --git a/apps/desktop/src-tauri/src/server/hotkeys.rs b/apps/desktop/src-tauri/src/server/hotkeys.rs index b06dd86..81a592b 100644 --- a/apps/desktop/src-tauri/src/server/hotkeys.rs +++ b/apps/desktop/src-tauri/src/server/hotkeys.rs @@ -1,6 +1,6 @@ //! Backend-owned store for the global hotkey combos. //! -//! Persisted in `%APPDATA%/tarkov-checker/hotkeys.json` — a sibling to +//! Persisted in `%APPDATA%/raidmate/hotkeys.json` — a sibling to //! `config.json` so the `/api/config` (paths) contract stays clean. Holds //! the five forwarded actions only; the overlay lock combo lives client-side //! (see CLAUDE.md "Desktop overlay" / the hotkey rework plan). @@ -18,9 +18,8 @@ use global_hotkey::hotkey::HotKey; use serde::{Deserialize, Serialize}; use tokio::sync::Mutex; -/// Defaults match the client's historical `tc.hotkeys.*` values so an -/// un-customised install behaves identically and the one-time client -/// migration is a no-op. +/// Defaults match the client's `DEFAULTS` so an un-customised install +/// agrees on both ends. const DEFAULT_ZOOM_IN: &str = "CommandOrControl+="; const DEFAULT_ZOOM_OUT: &str = "CommandOrControl+-"; const DEFAULT_FLOOR_UP: &str = "CommandOrControl+Shift+="; @@ -160,7 +159,7 @@ mod tests { fn tmp_file() -> PathBuf { std::env::temp_dir().join(format!( - "tarkov-checker-hotkeys-test-{}-{}.json", + "raidmate-hotkeys-test-{}-{}.json", std::process::id(), std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) diff --git a/apps/desktop/src-tauri/src/server/paths.rs b/apps/desktop/src-tauri/src/server/paths.rs index 51e03e9..6142ea8 100644 --- a/apps/desktop/src-tauri/src/server/paths.rs +++ b/apps/desktop/src-tauri/src/server/paths.rs @@ -233,10 +233,10 @@ mod tests { // it is not set (unusual CI image), we treat the var as unknown and // the test documents it explicitly. let expected = match std::env::var("APPDATA") { - Ok(val) => format!(r"{val}\tarkov-checker"), - Err(_) => r"%APPDATA%\tarkov-checker".to_string(), + Ok(val) => format!(r"{val}\raidmate"), + Err(_) => r"%APPDATA%\raidmate".to_string(), }; - let result = expand_env_vars(r"%APPDATA%\tarkov-checker"); + let result = expand_env_vars(r"%APPDATA%\raidmate"); assert_eq!(result, expected); } diff --git a/apps/desktop/src-tauri/src/updater.rs b/apps/desktop/src-tauri/src/updater.rs index 2a6b377..f0f9c3f 100644 --- a/apps/desktop/src-tauri/src/updater.rs +++ b/apps/desktop/src-tauri/src/updater.rs @@ -13,9 +13,9 @@ use anyhow::{anyhow, Context}; use serde::{Deserialize, Serialize}; /// Repo the overlay updates from. -const REPO: &str = "Mosmain/tarkov-checker"; +const REPO: &str = "Mosmain/raidmate"; /// Release asset to download — CI uploads exactly this name. -const ASSET_NAME: &str = "tarkov-checker-desktop.exe"; +const ASSET_NAME: &str = "raidmate.exe"; pub fn current_version() -> &'static str { env!("CARGO_PKG_VERSION") @@ -83,7 +83,7 @@ pub fn is_newer(remote: &str, current: &str) -> bool { fn client() -> reqwest::Result { reqwest::Client::builder() // api.github.com rejects requests without a User-Agent. - .user_agent(concat!("tarkov-checker/", env!("CARGO_PKG_VERSION"))) + .user_agent(concat!("raidmate/", env!("CARGO_PKG_VERSION"))) .timeout(Duration::from_secs(60)) .build() } diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index c7909ec..2ff3e8d 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -1,17 +1,18 @@ { "$schema": "https://schema.tauri.app/config/2.0.0", - "productName": "tarkov-checker", - "identifier": "dev.tarkov-checker.desktop", + "productName": "RaidMate", + "mainBinaryName": "raidmate", + "identifier": "dev.raidmate.desktop", "build": { "frontendDist": "../../client/dist", "devUrl": "http://localhost:5173", - "beforeDevCommand": "pnpm --filter @tarkov-checker/client dev", - "beforeBuildCommand": "pnpm --filter @tarkov-checker/client build" + "beforeDevCommand": "pnpm --filter @raidmate/client dev", + "beforeBuildCommand": "pnpm --filter @raidmate/client build" }, "app": { "windows": [ { - "title": "tarkov-checker", + "title": "RaidMate", "label": "main", "width": 360, "height": 360, diff --git a/eslint.config.js b/eslint.config.js index 060ee11..2319e43 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -19,7 +19,7 @@ try { const parsed = JSON.parse(readFileSync(filepath, 'utf8')); autoImportGlobals = parsed.globals ?? {}; } catch { - // File missing — regenerate by running `pnpm --filter @tarkov-checker/client dev` + // File missing — regenerate by running `pnpm --filter @raidmate/client dev` // once. Until then auto-import names will be flagged as no-undef. } diff --git a/package.json b/package.json index eae9341..4133fa4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "tarkov-checker", + "name": "raidmate", "version": "0.0.0", "private": true, "type": "module", @@ -9,9 +9,9 @@ }, "scripts": { "dev": "turbo run dev", - "dev:frontend": "pnpm --filter @tarkov-checker/client dev", - "dev:backend": "pnpm --filter @tarkov-checker/desktop backend:dev", - "dev:tauri": "pnpm --filter @tarkov-checker/desktop tauri:dev", + "dev:frontend": "pnpm --filter @raidmate/client dev", + "dev:backend": "pnpm --filter @raidmate/desktop backend:dev", + "dev:tauri": "pnpm --filter @raidmate/desktop tauri:dev", "build": "turbo run build", "lint": "turbo run lint", "lint:fix": "turbo run lint:fix", @@ -19,7 +19,7 @@ "test": "turbo run test", "format": "prettier --check .", "format:fix": "prettier --write .", - "build:overlay": "pnpm --filter @tarkov-checker/shared build && pnpm --filter @tarkov-checker/client build && pnpm --filter @tarkov-checker/desktop tauri build", + "build:overlay": "pnpm --filter @raidmate/shared build && pnpm --filter @raidmate/client build && pnpm --filter @raidmate/desktop tauri build", "shared:gen-rust-regex": "node packages/shared/scripts/gen-rust-regex.mjs", "shared:gen-rust-regex:check": "node packages/shared/scripts/gen-rust-regex.mjs && git diff --exit-code apps/desktop/src-tauri/src/server/parse_log_regexes.rs apps/desktop/src-tauri/src/server/parse_screenshot_regexes.rs" }, diff --git a/packages/shared/package.json b/packages/shared/package.json index 568db79..ff7f621 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,5 +1,5 @@ { - "name": "@tarkov-checker/shared", + "name": "@raidmate/shared", "version": "0.0.0", "private": true, "type": "module", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 166f2bb..a1a78d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,7 +44,7 @@ importers: '@primeuix/themes': specifier: ^2.0.3 version: 2.0.3 - '@tarkov-checker/shared': + '@raidmate/shared': specifier: workspace:* version: link:../../packages/shared '@tauri-apps/api':