{ "name": "bookorbit", "description": "Self-hosted library management and reading platform for ebooks, PDFs, audiobooks, and comics", "author": "neonsolstice", "license": "AGPL-3.0-only", "homepage": "https://bookorbit.app", "repository": { "type": "git", "url": "https://github.com/bookorbit/bookorbit" }, "bugs": { "url": "https://github.com/bookorbit/bookorbit/issues" }, "private": true, "packageManager": "pnpm@11.22.0", "scripts": { "setup": "bash ./scripts/bootstrap/local.sh", "dev": "concurrently --names \"types,server,client\" --prefix-colors \"cyan,blue,green\" \"pnpm --filter @bookorbit/types dev\" \"pnpm run dev:server\" \"pnpm run dev:client\"", "dev:client": "cd client && pnpm dev -- --host", "dev:server": "cd server && pnpm start:dev", "verify:fast": "pnpm run lint:check && pnpm run typecheck", "verify": "pnpm run lint:check && pnpm run typecheck && pnpm run test", "verify:strict": "pnpm run format:check && pnpm run lint:check && pnpm run typecheck:full && pnpm run test", "build:client": "pnpm --filter client build", "build:server": "pnpm --filter server build", "typecheck": "pnpm run typecheck:server && pnpm run typecheck:client", "typecheck:full": "pnpm run typecheck:server && pnpm run typecheck:client", "typecheck:server": "pnpm --filter server type-check", "typecheck:client": "pnpm --filter client type-check", "lint:check": "pnpm --filter server lint:check && pnpm --filter client lint:check", "lint:fix": "pnpm --filter server lint:fix && pnpm --filter client lint:fix", "format": "pnpm --filter server format && pnpm --filter client format", "format:check": "pnpm --filter server format:check && pnpm --filter client format:check", "test": "pnpm run test:charts && pnpm run test:pr-policy && pnpm run test:server && pnpm run test:client", "test:charts": "node --test scripts/star-history/generate.test.mjs scripts/crowdin-stats/generate.test.mjs", "test:pr-policy": "node --test scripts/validate-locale-pr.test.mjs", "test:server": "pnpm --filter server test", "test:client": "pnpm --filter client test:unit --run", "e2e:run": "node ./scripts/e2e/run-suite.mjs", "e2e:all": "node ./scripts/e2e/run-suite.mjs all", "e2e:list": "node ./scripts/e2e/run-suite.mjs --list", "coverage": "pnpm run coverage:server && pnpm run coverage:client", "coverage:server": "pnpm --filter server test:cov", "coverage:client": "pnpm --filter client test:cov --run", "db:up": "docker compose -f docker-compose.dev.yml up -d --wait", "tts:up": "docker compose -f docker-compose.dev.yml --profile tts up -d --wait kokoro", "tts:down": "docker compose -f docker-compose.dev.yml --profile tts stop kokoro", "prod:up": "docker compose up -d --wait", "prod:down": "docker compose down", "db:migrate": "pnpm --filter server db:migrate", "db:reset": "bash ./scripts/db/reset.sh", "db:seed": "bash ./scripts/db/seed-baseline.sh", "e2e:db:prepare": "bash ./scripts/e2e/prepare-db.sh", "e2e:db:migrate": "pnpm --filter server e2e:db:migrate", "prepare": "husky" }, "engines": { "node": ">=24", "pnpm": ">=11" }, "devDependencies": { "@commitlint/cli": "^21.2.2", "@commitlint/config-conventional": "^21.2.2", "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/github": "^12.0.9", "@semantic-release/release-notes-generator": "^14.1.1", "concurrently": "^10.0.5", "conventional-changelog-conventionalcommits": "^10.3.0", "husky": "^9.1.7", "lint-staged": "^17.3.0", "prettier": "^3.9.6", "semantic-release": "^25.0.9" }, "lint-staged": { "*.{md,json,yml,yaml}": [ "pnpm exec prettier --write" ], "client/src/**/*.{ts,vue}": [ "pnpm --dir client exec eslint --fix --max-warnings 0", "pnpm exec prettier --write" ], "server/{src,test}/**/*.ts": [ "pnpm --dir server exec eslint --fix", "pnpm exec prettier --write" ] } }