* ci: run typecheck, build & tests on PRs and main Add a GitHub Actions workflow (.github/workflows/ci.yml) that installs on Node 20 (the pinned runtime), builds shared/server/web, typechecks desktop, and runs the full vitest suite across all packages on every pull request and push to main. The repo already had 500+ tests but only ever ran them locally. Also wires up the missing test/typecheck plumbing this exposed: - web package had 55 test files but no test script — add test/test:watch/typecheck - add root-level test and typecheck aggregate scripts - fix a latent web type error the new typecheck surfaced: reference vite-plugin-pwa/react types so virtual:pwa-register/react is typed (useRegisterSW callback params were implicit any; the tsc half of the web build script has been failing, masked by vite build ignoring type errors) * test: fix two latent failures surfaced by CI on Node 20 - server: exclude dist/** from vitest. Vitest 4's default exclude dropped dist/, so after `pnpm build` emits compiled .test.js files, vitest ran those stale copies alongside src/*.test.ts and they failed (compiled vi.mock paths resolve differently). - web: polyfill Blob.prototype.stream in the jsdom test setup. jsdom's Blob has no .stream() on Node 20 (Node 25 provided one, masking this locally); undici's Response constructor calls blob.stream(), so new Response(blob) threw 'object.stream is not a function'.
54 lines
1.5 KiB
JSON
54 lines
1.5 KiB
JSON
{
|
|
"name": "@backspace/web",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"license": "AGPL-3.0-only",
|
|
"author": "Jannis Braun",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc && vite build",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"preview": "vite preview",
|
|
"e2e:identity-deletion": "playwright test e2e/identity-deletion.spec.ts"
|
|
},
|
|
"dependencies": {
|
|
"@backspace/shared": "workspace:*",
|
|
"@emoji-mart/data": "^1.2.1",
|
|
"@emoji-mart/react": "^1.1.1",
|
|
"@livekit/components-react": "^2.7.4",
|
|
"@sapphi-red/web-noise-suppressor": "^0.3.5",
|
|
"idb": "^8.0.3",
|
|
"livekit-client": "^2.9.0",
|
|
"prism-react-renderer": "^2.4.1",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-easy-crop": "^5.5.6",
|
|
"react-markdown": "^9.0.1",
|
|
"react-router-dom": "^6.28.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"tus-js-client": "^4.3.1",
|
|
"zustand": "^5.0.2"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.4",
|
|
"autoprefixer": "^10.4.20",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"jsdom": "^28.1.0",
|
|
"postcss": "^8.4.49",
|
|
"tailwindcss": "^3.4.15",
|
|
"typescript": "^5.7.2",
|
|
"vite": "^6.0.3",
|
|
"vite-plugin-pwa": "^1.2.0",
|
|
"vitest": "^4.0.18",
|
|
"workbox-window": "^7.4.0"
|
|
}
|
|
}
|