{ "name": "myblogs", "private": true, "scripts": { "install:all": "npm install", "build:auth-service": "nest build auth-service", "build:blog-service": "nest build blog-service", "build:media-service": "nest build media-service", "build:api-gateway": "nest build api-gateway", "build:frontend": "vite build --config frontend/vite.config.js", "build:all": "npm run build:auth-service && npm run build:blog-service && npm run build:media-service && npm run build:api-gateway && npm run build:frontend", "start:auth-service": "nest start auth-service --watch", "start:blog-service": "nest start blog-service --watch", "start:media-service": "nest start media-service --watch", "start:api-gateway": "nest start api-gateway --watch", "dev:frontend": "vite --config frontend/vite.config.js", "start": "dotenv -e .env -- concurrently \"npm run start:auth-service\" \"npm run start:blog-service\" \"npm run start:media-service\" \"npm run start:api-gateway\" \"npm run dev:frontend\"", "start:all": "npm start", "start:backend": "dotenv -e .env -- concurrently \"npm run start:auth-service\" \"npm run start:blog-service\" \"npm run start:media-service\" \"npm run start:api-gateway\"", "seed": "cd blog-service && ts-node src/seed.ts", "test:auth-service": "jest --config auth-service/jest.config.js", "test:blog-service": "jest --config blog-service/jest.config.js", "test:media-service": "jest --config media-service/jest.config.js", "test:api-gateway": "jest --config api-gateway/jest.config.js", "test:cov:auth-service": "jest --config auth-service/jest.config.js --coverage", "test:cov:blog-service": "jest --config blog-service/jest.config.js --coverage", "test:cov:media-service": "jest --config media-service/jest.config.js --coverage", "test:cov:api-gateway": "jest --config api-gateway/jest.config.js --coverage", "test:frontend": "vitest run --config frontend/vite.config.js", "test:cov:frontend": "vitest run --coverage --config frontend/vite.config.js", "sonar": "dotenv -e .env -- sh -c 'sonar-scanner -Dsonar.projectKey=\"$SONAR_PROJECT_KEY\" -Dsonar.scanner.socketTimeout=300 -Dsonar.scanner.responseTimeout=300'", "sonar:gate": "dotenv -e .env -- sh scripts/sonar-quality-gate.sh", "sonar:check": "npm run sonar && npm run sonar:gate", "codeql:gate": "sh scripts/codeql-quality-gate.sh", "coverage:python": "python3 -m pytest --cov=meridian_agents --cov-report=xml:coverage-python.xml --cov-report=term", "coverage:all": "npm run test:cov:auth-service && npm run test:cov:blog-service && npm run test:cov:media-service && npm run test:cov:api-gateway && npm run test:cov:frontend && npm run coverage:python", "sonar:full": "npm run coverage:all && npm run sonar:check" }, "dependencies": { "@neondatabase/serverless": "^1.1.0", "@nestjs/common": "^11.1.27", "@nestjs/core": "^11.1.27", "@nestjs/jwt": "^11.0.2", "@nestjs/passport": "^11.0.0", "@nestjs/platform-express": "^11.1.27", "@nestjs/typeorm": "^11.0.2", "@tailwindcss/typography": "^0.5.20", "@tailwindcss/vite": "^4.3.1", "@tiptap/core": "^3.27.1", "@tiptap/extension-blockquote": "^3.27.1", "@tiptap/extension-bold": "^3.27.1", "@tiptap/extension-bullet-list": "^3.27.1", "@tiptap/extension-code": "^3.27.1", "@tiptap/extension-code-block": "^3.27.1", "@tiptap/extension-code-block-lowlight": "^3.27.1", "@tiptap/extension-document": "^3.27.1", "@tiptap/extension-dropcursor": "^3.27.1", "@tiptap/extension-gapcursor": "^3.27.1", "@tiptap/extension-hard-break": "^3.27.1", "@tiptap/extension-heading": "^3.27.1", "@tiptap/extension-horizontal-rule": "^3.27.1", "@tiptap/extension-image": "^3.27.1", "@tiptap/extension-italic": "^3.27.1", "@tiptap/extension-link": "^3.27.1", "@tiptap/extension-list": "^3.27.1", "@tiptap/extension-list-item": "^3.27.1", "@tiptap/extension-list-keymap": "^3.27.1", "@tiptap/extension-ordered-list": "^3.27.1", "@tiptap/extension-paragraph": "^3.27.1", "@tiptap/extension-placeholder": "^3.27.1", "@tiptap/extension-strike": "^3.27.1", "@tiptap/extension-text": "^3.27.1", "@tiptap/extension-underline": "^3.27.1", "@tiptap/extensions": "^3.27.1", "@tiptap/pm": "^3.27.1", "@tiptap/starter-kit": "^3.27.1", "@tiptap/vue-3": "^3.27.1", "@vueuse/core": "^14.3.0", "axios": "^1.18.0", "bcryptjs": "^3.0.3", "better-sqlite3": "^12.11.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "date-fns": "^4.4.0", "dotenv": "^17.4.2", "form-data": "^4.0.6", "highlight.js": "^11.11.1", "lowlight": "^3.3.0", "lucide-vue-next": "^1.0.0", "multer": "^2.2.0", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", "pg": "^8.22.0", "pinia": "^3.0.4", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", "slugify": "^1.6.6", "tailwindcss": "^4.3.1", "typeorm": "^0.3.19", "uuid": "^14.0.1", "vue": "^3.5.38", "vue-router": "^4.6.4", "web-push": "^3.6.7", "ws": "^8.21.0" }, "devDependencies": { "@nestjs/cli": "^11.0.0", "@nestjs/testing": "^11.1.27", "@sonar/scan": "^4.3.8", "@types/bcryptjs": "^3.0.0", "@types/better-sqlite3": "^7.6.8", "@types/jest": "^30.0.0", "@types/multer": "^2.1.0", "@types/node": "^26.0.0", "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.38", "@types/uuid": "^9.0.7", "@types/web-push": "^3.6.4", "@types/ws": "^8.5.14", "@vitejs/plugin-vue": "^6.0.6", "@vitest/coverage-v8": "^4.1.9", "@vue/test-utils": "^2.4.6", "concurrently": "^8.2.2", "dotenv-cli": "^11.0.0", "happy-dom": "^20.10.6", "jest": "^30.4.2", "ts-jest": "^29.2.0", "ts-node": "^10.9.2", "typescript": "^6.0.3", "vite": "^8.0.16", "vite-plugin-pwa": "^1.3.0", "vitest": "^4.1.9" }, "overrides": { "@nestjs/typeorm": { "@nestjs/common": "^11.0.0", "@nestjs/core": "^11.0.0" } } }