Files
bookorbit/server/package.json
T
neon 911f61e3dc fix(reader): preserve touch text selection in PDF reader
Route touch selection through EmbedPDF pointer mode while keeping swipe pagination limited to pan mode. Keep NestJS testing aligned with the application major and prevent incompatible standalone major updates.

Fixes #1388
2026-09-13 18:44:02 +00:00

148 lines
5.7 KiB
JSON

{
"name": "server",
"version": "0.0.1",
"description": "BookOrbit server - self-hosted library management and reading platform",
"author": "neonsolstice",
"private": true,
"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"
},
"scripts": {
"setup:kobo-cloudscraper": "tsx src/scripts/setup-kobo-cloudscraper.ts",
"prestart": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build",
"prestart:dev": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build",
"prestart:debug": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build",
"prebuild": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build && pnpm clean:swagger-metadata",
"clean:swagger-metadata": "node -e \"require('node:fs').rmSync('src/metadata.ts', { force: true })\"",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "sh -c 'export $(grep -v \"^#\" .env | xargs) 2>/dev/null; exec nest start --watch --config nest-cli.dev.json'",
"start:debug": "nest start --debug --watch --config nest-cli.dev.json",
"start:prod": "node dist/main",
"db:generate": "drizzle-kit generate --name",
"db:migrate": "tsx --env-file-if-exists=.env src/scripts/migrate.ts",
"e2e:db:migrate": "DATABASE_URL=postgres://bookorbit:bookorbit@localhost:5432/bookorbit_e2e pnpm db:migrate",
"db:migrate:runtime": "node dist/scripts/migrate.js",
"e2e:db:prepare": "tsx src/scripts/db-prepare-e2e.ts",
"db:studio": "drizzle-kit studio",
"predb:seed": "pnpm --filter @bookorbit/types build",
"db:seed": "tsx src/scripts/db-seed.ts",
"whats-new:preview": "tsx src/scripts/whats-new-preview.ts",
"whats-new:lint": "tsx src/scripts/whats-new-lint.ts",
"whats-new:check": "tsx src/scripts/whats-new-check.ts",
"whats-new:images": "tsx src/scripts/whats-new-images.ts",
"pretype-check": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build",
"type-check": "tsc --noEmit -p tsconfig.build.json",
"lint": "pnpm run lint:check",
"prelint:check": "pnpm --filter @bookorbit/types build",
"lint:check": "eslint \"{src,apps,libs,test}/**/*.ts\"",
"prelint:fix": "pnpm --filter @bookorbit/types build",
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "node ../scripts/dev/with-test-lock.mjs -- vitest run --exclude test/scanner-scenarios.e2e-spec.ts --exclude test/scanner-file-operations.e2e-spec.ts",
"test:watch": "vitest",
"test:cov": "node ../scripts/dev/with-test-lock.mjs -- vitest run --coverage",
"e2e:run": "vitest run test/app-smoke.e2e-spec.ts"
},
"dependencies": {
"7z-wasm": "^1.2.0",
"@bookorbit/plugin-api": "workspace:*",
"@bookorbit/types": "workspace:*",
"@fastify/compress": "^9.2.0",
"@fastify/cookie": "^11.1.2",
"@fastify/helmet": "^13.1.1",
"@fastify/multipart": "^10.1.1",
"@fastify/static": "^10.1.3",
"@nestjs/common": "^11.2.3",
"@nestjs/config": "^4.0.4",
"@nestjs/core": "^11.2.3",
"@nestjs/jwt": "^11.0.2",
"@nestjs/passport": "^11.0.5",
"@nestjs/platform-fastify": "^11.2.3",
"@nestjs/platform-socket.io": "^11.2.3",
"@nestjs/schedule": "^6.1.3",
"@nestjs/swagger": "^11.4.7",
"@nestjs/terminus": "^11.1.1",
"@nestjs/throttler": "^6.5.0",
"@nestjs/websockets": "^11.2.3",
"@types/archiver": "^8.0.0",
"archiver": "~8.0.0",
"bcryptjs": "^3.0.3",
"cheerio": "^1.2.0",
"chokidar": "^5.0.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.15.1",
"cron": "^4.4.0",
"date-fns-tz": "^3.2.0",
"drizzle-orm": "^0.45.2",
"fast-xml-parser": "^5.11.1",
"fastest-levenshtein": "^1.0.16",
"fastify": "^5.12.3",
"iconv-lite": "^0.7.3",
"jose": "^6.2.12",
"langs": "^2.0.0",
"ms": "^2.1.3",
"mysql2": "^3.24.3",
"nestjs-pino": "^4.6.1",
"node-unrar-js": "^2.0.2",
"nodemailer": "^9.1.1",
"passport": "^0.7.0",
"passport-jwt": "^4.0.1",
"pdf-lib": "^1.17.1",
"pg": "^8.23.0",
"pg-connection-string": "^2.14.0",
"pino-http": "^11.0.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"sharp": "^0.35.4",
"socket.io": "^4.8.3",
"undici": "^8.10.2",
"unzipper": "^0.12.5",
"zod": "^4.5.4"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.6",
"@eslint/js": "^10.0.1",
"@ffmpeg-installer/ffmpeg": "^1.1.0",
"@ffprobe-installer/ffprobe": "^2.1.2",
"@nestjs/cli": "^11.0.24",
"@nestjs/schematics": "^11.1.0",
"@nestjs/testing": "^11.2.3",
"@swc/cli": "^0.8.1",
"@swc/core": "^1.16.1",
"@types/bcrypt": "^6.0.0",
"@types/express": "^5.0.6",
"@types/langs": "^2.0.5",
"@types/node": "^26.4.0",
"@types/nodemailer": "^8.0.1",
"@types/passport-jwt": "^4.0.1",
"@types/pg": "^8.23.1",
"@types/supertest": "^7.2.1",
"@types/unzipper": "^0.10.11",
"@vitest/coverage-v8": "^4.1.11",
"drizzle-kit": "^0.31.10",
"eslint": "^10.9.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.6",
"globals": "^17.11.0",
"pino-pretty": "^13.1.3",
"prettier": "^3.9.6",
"source-map-support": "^0.5.21",
"supertest": "^7.2.2",
"ts-loader": "^9.6.2",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"tsx": "^4.23.12",
"typescript": "^6.0.3",
"typescript-eslint": "^8.68.0",
"vitest": "^4.1.11"
}
}