{ "name": "web", "version": "0.1.0", "private": true, "type": "module", "scripts": { "dev": "next dev -p 3000 --turbopack", "build": "next build", "start": "next start", "lint": "eslint . --max-warnings 0", "test": "vitest run -c vitest.default.config.ts", "test:watch": "vitest -c vitest.default.config.ts", "test:all": "pnpm test:unit && pnpm test:trpc && pnpm test:api && pnpm test:integration:full", "test:unit": "vitest run -c vitest.unit.config.ts", "test:trpc": "vitest run -c vitest.trpc.config.ts", "test:api": "vitest run -c vitest.api.config.ts", "test:integration:prepare": "prisma migrate deploy", "test:integration:prepare:local": "DATABASE_URL=postgresql://usesend:password@127.0.0.1:54329/usesend_test pnpm test:integration:prepare", "test:integration": "RUN_INTEGRATION=true vitest run -c vitest.integration.config.ts", "test:integration:full": "pnpm test:integration:prepare:local && pnpm test:integration", "test:coverage": "vitest run -c vitest.default.config.ts --coverage", "db:post-install": "prisma generate", "db:generate": "prisma generate", "db:push": "prisma db push --skip-generate", "db:migrate-dev": "prisma migrate dev", "db:migrate-deploy": "prisma migrate deploy", "db:studio": "prisma studio", "db:migrate-reset": "prisma migrate reset", "memory:monitor": "node --expose-gc scripts/memory-monitor.js", "memory:profile": "node --expose-gc scripts/memory-profiler.js", "memory:test": "node --expose-gc -e \"const MemoryMonitor = require('./scripts/memory-monitor'); const monitor = new MemoryMonitor(); monitor.start(1000); setTimeout(() => monitor.stop(), 30000)\"", "memory:baseline": "node --expose-gc scripts/baseline-test.js" }, "dependencies": { "@auth/prisma-adapter": "^2.9.0", "@aws-sdk/client-s3": "^3.1048.0", "@aws-sdk/client-sesv2": "^3.1048.0", "@aws-sdk/client-sns": "^3.1048.0", "@aws-sdk/client-sts": "^3.1047.0", "@aws-sdk/s3-request-presigner": "^3.1048.0", "@hono/swagger-ui": "^0.5.1", "@hono/zod-openapi": "^0.10.0", "@hookform/resolvers": "^5.0.1", "@isaacs/ttlcache": "^1.4.1", "@prisma/client": "^6.6.0", "@t3-oss/env-nextjs": "^0.13.0", "@tanstack/react-query": "^5.100.10", "@trpc/client": "^11.17.0", "@trpc/next": "^11.17.0", "@trpc/react-query": "^11.17.0", "@trpc/server": "^11.17.0", "@usesend/email-editor": "workspace:*", "@usesend/lib": "workspace:*", "@usesend/ui": "workspace:*", "bullmq": "^5.51.1", "chrono-node": "^2.8.0", "date-fns": "^4.1.0", "emoji-picker-react": "^4.12.2", "framer-motion": "^12.9.2", "hono": "^4.12.19", "html-to-text": "^9.0.5", "ioredis": "^5.6.1", "jsx-email": "^2.8.4", "lucide-react": "^0.503.0", "mime-types": "^3.0.1", "nanoid": "^5.1.5", "next": "15.5.18", "next-auth": "^4.24.14", "nodemailer": "^8.0.5", "pino": "^9.7.0", "pino-pretty": "^13.0.0", "pnpm": "^10.28.2", "prisma": "^6.6.0", "query-string": "^9.1.1", "react": "19.1.0", "react-dom": "19.1.0", "react-hook-form": "^7.56.1", "recharts": "^2.15.3", "server-only": "^0.0.1", "shiki": "^3.3.0", "stripe": "^18.0.0", "superjson": "^2.2.2", "tldts": "^7.0.4", "ua-parser-js": "^2.0.3", "use-debounce": "^10.0.4", "usesend-js": "workspace:*", "zod": "^3.24.3", "zustand": "^5.0.8" }, "devDependencies": { "@next/eslint-plugin-next": "^15.5.18", "@tailwindcss/postcss": "^4.1.0", "@types/eslint": "^9.6.1", "@types/html-to-text": "^9.0.4", "@types/mime-types": "^2.1.4", "@types/node": "^22.15.2", "@types/nodemailer": "^8.0.0", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@types/ua-parser-js": "^0.7.39", "@typescript-eslint/eslint-plugin": "^8.31.0", "@typescript-eslint/parser": "^8.31.0", "@usesend/eslint-config": "workspace:*", "@usesend/typescript-config": "workspace:*", "eslint": "^8.57.1", "eslint-config-next": "^15.5.18", "postcss": "^8.5.14", "prettier": "^3.5.3", "prettier-plugin-tailwindcss": "^0.6.11", "tailwindcss": "^4.1.0", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4", "@vitest/coverage-v8": "^3.2.4" }, "overrides": { "react-is": "^19.0.0-rc-69d4b800-20241021" }, "ct3aMetadata": { "initVersion": "7.30.0" }, "packageManager": "pnpm@8.9.2" }