{ "name": "voicehub", "version": "1.5.9.9", "description": "校园广播站点歌管理系统 - 基于数据库存储的现代化点歌、排期和播放管理平台", "private": true, "packageManager": "pnpm@10.29.3", "type": "module", "scripts": { "build": "node scripts/build.js", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", "start": "node .output/server/index.mjs", "test": "node --experimental-strip-types --test \"tests/server/*.test.ts\"", "db:migrate": "pnpm exec drizzle-kit migrate", "db:generate": "pnpm exec drizzle-kit generate --name=auto-migration", "db:push": "pnpm exec drizzle-kit push --force", "db:studio": "pnpm exec drizzle-kit studio", "db:drop": "pnpm exec drizzle-kit drop", "db:check": "pnpm exec drizzle-kit check", "setup": "pnpm install --frozen-lockfile && pnpm run db:migrate", "create-admin": "pnpm exec tsx scripts/create-admin.js", "clear-db": "pnpm exec tsx scripts/clear-database.js", "db:reset": "pnpm exec tsx scripts/reset-database.js", "safe-migrate": "pnpm exec tsx scripts/safe-migrate.js", "deploy": "node scripts/deploy.js", "vercel-build": "node scripts/deploy.js", "netlify-build": "node scripts/netlify-build.js", "check-deploy": "node scripts/check-deploy.js", "redis:scan-legacy": "node scripts/redis-scan-legacy.js", "postinstall": "node scripts/postinstall.js", "lint": "nuxt prepare && eslint .", "lint:fix": "nuxt prepare && eslint . --fix", "format": "prettier --write .", "init-help": "pnpm run db:push && pnpm run create-admin" }, "dependencies": { "@applemusic-like-lyrics/core": "^0.5.2", "@applemusic-like-lyrics/lyric": "^0.4.1", "@applemusic-like-lyrics/vue": "^0.5.2", "@breezystack/lamejs": "^1.2.7", "@lucide/vue": "^1.41.0", "@neteasecloudmusicapienhanced/api": "^4.40.1", "@netlify/functions": "^2.8.2", "@nuxt/kit": "4.5.0", "@pixi/app": "^7.4.3", "@pixi/core": "^7.4.3", "@pixi/display": "^7.4.3", "@pixi/filter-blur": "^7.4.3", "@pixi/filter-bulge-pinch": "^5.1.1", "@pixi/filter-color-matrix": "^7.4.3", "@pixi/sprite": "^7.4.3", "@sansenjian/qq-music-api": "2.6.0", "@sentry/node": "^10.73.0", "@sentry/vue": "^10.73.0", "@simplewebauthn/browser": "^13.3.0", "@simplewebauthn/server": "^13.3.3", "@types/bcryptjs": "^2.4.6", "@types/crypto-js": "^4.2.2", "@types/jsonwebtoken": "^9.0.10", "@types/lodash-es": "^4.17.12", "@types/multer": "^2.2.0", "@types/nodemailer": "^8.0.1", "@types/pg": "^8.23.1", "@ungap/structured-clone": "^1.4.0", "@vercel/speed-insights": "^1.3.1", "axios": "^1.20.0", "bcryptjs": "^2.4.3", "bezier-easing": "^2.1.0", "chalk": "^5.6.2", "crypto-js": "^4.2.0", "dayjs": "^1.11.23", "deep-freeze": "^0.0.1", "dotenv": "^17.4.2", "drizzle-kit": "^0.31.10", "drizzle-orm": "^0.45.2", "formidable": "^3.5.4", "gl-matrix": "4.0.0-beta.2", "h3": "1.15.11", "html-to-image": "^1.11.13", "jsonwebtoken": "^9.0.3", "jspdf": "^4.2.1", "jszip": "^3.10.1", "lodash-es": "^4.18.1", "marked": "^18.0.11", "multer": "^2.3.0", "nodemailer": "^8.0.11", "nuxt": "^4.5.2", "otplib": "^12.0.1", "postgres": "^3.4.9", "prompts": "^2.4.2", "qrcode": "^1.5.4", "redis": "^5.12.1", "sass": "^1.104.0", "svg-captcha": "^1.4.0", "tsx": "^4.23.13", "vite-plugin-wasm": "^3.6.0", "vue": "^3.5.42", "vue-router": "^4.6.4", "wasm-media-encoders": "^0.7.0", "xlsx": "^0.18.5", "xss": "^1.0.15", "zod": "^4.5.4" }, "engines": { "node": ">=22.11.0", "pnpm": ">=10.0.0" }, "devDependencies": { "@nuxt/eslint": "^1.17.0", "@nuxt/kit": "4.5.0", "@unocss/nuxt": "^66.10.0", "@unocss/preset-wind3": "^66.10.0", "@vite-pwa/nuxt": "^1.1.1", "eslint": "^9.39.5", "prettier": "^3.9.6", "typescript": "^5.9.3", "unocss": "^66.10.0" } }