{ "name": "voicehub", "version": "1.7.0.0", "description": "校园广播站点歌管理系统 - 基于数据库存储的现代化点歌、排期和播放管理平台", "private": true, "type": "module", "scripts": { "build": "nuxt build", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", "start": "node .output/server/index.mjs", "db:migrate": "drizzle-kit migrate", "db:generate": "drizzle-kit generate --name=auto-migration", "db:push": "drizzle-kit push --force", "db:studio": "drizzle-kit studio", "db:drop": "drizzle-kit drop", "db:check": "drizzle-kit check", "db:reset": "tsx scripts/reset-database.js", "redis:scan-legacy": "tsx scripts/redis-scan-legacy.js", "init-help": "tsx scripts/init-help.js", "test": "node --test", "setup": "npm ci && npm run db:migrate", "create-admin": "tsx scripts/create-admin.js", "clear-db": "tsx scripts/clear-database.js", "safe-migrate": "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", "postinstall": "nuxt prepare && node scripts/postinstall.js", "lint": "nuxt prepare && eslint .", "lint:fix": "nuxt prepare && eslint . --fix", "format": "prettier --write ." }, "dependencies": { "@alicloud/dysmsapi20170525": "^4.5.1", "@alicloud/openapi-client": "^0.4.15", "@alicloud/tea-util": "^1.4.11", "@applemusic-like-lyrics/lyric": "^0.4.1", "@applemusic-like-lyrics/vue": "^0.5.2", "@breezystack/lamejs": "^1.2.7", "@lucide/vue": "^1.41.0", "@netlify/functions": "^2.8.2", "@nuxtjs/tailwindcss": "^6.14.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", "@sentry/node": "^10.73.0", "@sentry/vue": "^10.73.0", "@simplewebauthn/browser": "^13.3.0", "@simplewebauthn/server": "^13.3.3", "@types/crypto-js": "^4.2.2", "@types/jsonwebtoken": "^9.0.10", "@types/lodash-es": "^4.17.12", "@types/multer": "^2.1.0", "@types/nodemailer": "^6.4.23", "@types/pg": "^8.20.0", "@ungap/structured-clone": "^1.3.0", "@vercel/speed-insights": "^1.3.1", "@vite-pwa/nuxt": "^1.1.1", "axios": "^1.20.0", "bcryptjs": "^2.4.3", "bezier-easing": "^2.1.0", "chalk": "^5.6.2", "core-js": "^3.49.0", "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", "html-to-image": "^1.11.13", "ignore": "^5.3.2", "jsonwebtoken": "^9.0.3", "jspdf": "^3.0.4", "jszip": "^3.10.1", "lodash-es": "^4.18.1", "marked": "^18.0.11", "multer": "^2.1.1", "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.21.0", "vite-plugin-glsl": "^1.5.6", "vite-plugin-top-level-await": "^1.6.0", "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" }, "devDependencies": { "@clack/prompts": "^1.1.0", "@nuxt/eslint": "^1.17.0", "eslint": "^9.39.5", "prettier": "^3.9.6", "typescript": "^5.9.3" } }