From 67f36073d954c7809afd4ad82df1967d561cc06c Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:10:28 -0400 Subject: [PATCH 01/75] chore: update package versions and configurations across multiple packages - Bump version of @trycompai/db to 1.1.2 and @trycompai/ui to 1.3.2. - Adjust tsconfig paths to use @trycompai/tsconfig for consistency. - Add new scripts and update existing ones in the db package for better schema management. - Introduce new utility scripts for generating exports in the ui package. - Update dependencies and peerDependencies for better compatibility. --- apps/app/next.config.ts | 1 - apps/app/package.json | 3 +- apps/app/trigger.config.ts | 2 +- apps/app/tsconfig.json | 3 +- apps/portal/package.json | 2 +- bun.lock | 36 +- packages/db/.gitignore | 3 +- packages/db/package.json | 52 +-- packages/db/prisma/schema.prisma | 5 +- packages/db/prisma/seed/seed.ts | 2 +- packages/db/scripts/combine-schemas.js | 68 ++++ packages/db/src/client.ts | 7 + packages/db/src/index.js | 2 +- packages/db/src/index.ts | 17 +- packages/db/src/types.js | 2 +- packages/db/src/types.ts | 2 +- packages/ui/README.md | 154 ++++++++ packages/ui/package.json | 428 ++++++++++++++++++----- packages/ui/scripts/generate-exports.cjs | 77 ++++ packages/ui/src/components/combobox.tsx | 8 +- packages/ui/src/index.ts | 13 + packages/ui/src/package.json | 5 + packages/ui/tsconfig.json | 10 +- packages/ui/tsup.config.ts | 30 ++ tsconfig.json | 2 +- turbo.json | 4 + yarn.lock | 96 ++--- 27 files changed, 829 insertions(+), 205 deletions(-) create mode 100755 packages/db/scripts/combine-schemas.js create mode 100644 packages/db/src/client.ts create mode 100644 packages/ui/README.md create mode 100644 packages/ui/scripts/generate-exports.cjs create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/package.json create mode 100644 packages/ui/tsup.config.ts diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 93d4ce371..fb48c3d62 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -17,7 +17,6 @@ const config: NextConfig = { }, ], }, - transpilePackages: ['@comp/ui'], logging: { fetches: { fullUrl: process.env.LOG_FETCHES === 'true', diff --git a/apps/app/package.json b/apps/app/package.json index 50928fb8d..5ab0b3bf0 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -1,6 +1,7 @@ { "name": "@comp/app", "version": "0.1.0", + "type": "module", "dependencies": { "@ai-sdk/groq": "^1.2.8", "@ai-sdk/openai": "^1.3.19", @@ -40,7 +41,7 @@ "@tiptap/extension-table-row": "^2.22.3", "@trigger.dev/react-hooks": "3.3.17", "@trigger.dev/sdk": "3.3.17", - "@trycompai/db": "workspace:*", + "@trycompai/db": "*", "@types/canvas-confetti": "^1.9.0", "@types/three": "^0.177.0", "@uploadthing/react": "^7.3.0", diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index 9bdd31fa2..dc4d90f0f 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ extensions: [ new PrismaExtension({ schema: '../../packages/db/prisma', - version: '6.6.0', + version: '6.9.0', clientGenerator: 'client', isUsingSchemaFolder: true, }), diff --git a/apps/app/tsconfig.json b/apps/app/tsconfig.json index 7008132a5..5c8553d7e 100644 --- a/apps/app/tsconfig.json +++ b/apps/app/tsconfig.json @@ -20,8 +20,9 @@ ], "paths": { "@/*": ["./src/*"], - "@comp/db": ["../../packages/db/src/index.ts"], + "@trycomp/db": ["../../packages/db/src/index.ts"], "@comp/db/*": ["../../packages/db/src/*"], + "@comp/db": ["../../packages/db/src/index.ts"], "@comp/email": ["../../packages/email/index.ts"], "@comp/email/*": ["../../packages/email/*"], "@comp/kv": ["../../packages/kv/src/index.ts"], diff --git a/apps/portal/package.json b/apps/portal/package.json index baf012194..aabb7ffcd 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -7,7 +7,7 @@ "@react-email/render": "^1.1.2", "@t3-oss/env-nextjs": "^0.13.8", "@trycompai/analytics": "workspace:*", - "@trycompai/db": "workspace:*", + "@trycompai/db": "*", "@trycompai/email": "workspace:*", "@trycompai/kv": "workspace:*", "@trycompai/ui": "workspace:*", diff --git a/bun.lock b/bun.lock index 938122271..4a1724cf0 100644 --- a/bun.lock +++ b/bun.lock @@ -222,17 +222,19 @@ }, "packages/db": { "name": "@trycompai/db", - "version": "1.0.0", - "dependencies": { - "@prisma/client": "6.9.0", - }, + "version": "1.1.1", "devDependencies": { + "@prisma/client": "6.9.0", "@trycompai/tsconfig": "workspace:*", - "prisma": "^6.9.0", + "prisma": "6.9.0", "ts-node": "^10.9.2", "tsup": "^8.5.0", "typescript": "^5.8.3", }, + "peerDependencies": { + "@prisma/client": "6.9.0", + "prisma": "6.9.0", + }, }, "packages/email": { "name": "@trycompai/email", @@ -300,7 +302,7 @@ }, "packages/ui": { "name": "@trycompai/ui", - "version": "1.0.0", + "version": "1.3.2", "dependencies": { "@radix-ui/react-accordion": "1.2.11", "@radix-ui/react-alert-dialog": "1.1.14", @@ -675,6 +677,10 @@ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], + "@emotion/is-prop-valid": ["@emotion/is-prop-valid@0.8.8", "", { "dependencies": { "@emotion/memoize": "0.7.4" } }, "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA=="], + + "@emotion/memoize": ["@emotion/memoize@0.7.4", "", {}, "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.8", "", { "os": "aix", "cpu": "ppc64" }, "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA=="], "@esbuild/android-arm": ["@esbuild/android-arm@0.25.8", "", { "os": "android", "cpu": "arm" }, "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw=="], @@ -1023,19 +1029,19 @@ "@prisma/client": ["@prisma/client@6.9.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-Gg7j1hwy3SgF1KHrh0PZsYvAaykeR0PaxusnLXydehS96voYCGt1U5zVR31NIouYc63hWzidcrir1a7AIyCsNQ=="], - "@prisma/config": ["@prisma/config@6.12.0", "", { "dependencies": { "jiti": "2.4.2" } }, "sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg=="], + "@prisma/config": ["@prisma/config@6.9.0", "", { "dependencies": { "jiti": "2.4.2" } }, "sha512-Wcfk8/lN3WRJd5w4jmNQkUwhUw0eksaU/+BlAJwPQKW10k0h0LC9PD/6TQFmqKVbHQL0vG2z266r0S1MPzzhbA=="], "@prisma/debug": ["@prisma/debug@6.10.1", "", {}, "sha512-k2YT53cWxv9OLjW4zSYTZ6Z7j0gPfCzcr2Mj99qsuvlxr8WAKSZ2NcSR0zLf/mP4oxnYG842IMj3utTgcd7CaA=="], "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.10.1", "", { "dependencies": { "@prisma/debug": "6.10.1" } }, "sha512-MJ7NiiMA5YQUD1aMHiOcLmRpW0U0NTpygyeuLMxHXnKbcq+HX/cy10qilFMLVzpveuIEHuwxziR67z6i0K1MKA=="], - "@prisma/engines": ["@prisma/engines@6.12.0", "", { "dependencies": { "@prisma/debug": "6.12.0", "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", "@prisma/fetch-engine": "6.12.0", "@prisma/get-platform": "6.12.0" } }, "sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA=="], + "@prisma/engines": ["@prisma/engines@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0", "@prisma/engines-version": "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "@prisma/fetch-engine": "6.9.0", "@prisma/get-platform": "6.9.0" } }, "sha512-im0X0bwDLA0244CDf8fuvnLuCQcBBdAGgr+ByvGfQY9wWl6EA+kRGwVk8ZIpG65rnlOwtaWIr/ZcEU5pNVvq9g=="], - "@prisma/engines-version": ["@prisma/engines-version@6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", "", {}, "sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ=="], + "@prisma/engines-version": ["@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "", {}, "sha512-Qp9gMoBHgqhKlrvumZWujmuD7q4DV/gooEyPCLtbkc13EZdSz2RsGUJ5mHb3RJgAbk+dm6XenqG7obJEhXcJ6Q=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@6.12.0", "", { "dependencies": { "@prisma/debug": "6.12.0", "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", "@prisma/get-platform": "6.12.0" } }, "sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0", "@prisma/engines-version": "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "@prisma/get-platform": "6.9.0" } }, "sha512-PMKhJdl4fOdeE3J3NkcWZ+tf3W6rx3ht/rLU8w4SXFRcLhd5+3VcqY4Kslpdm8osca4ej3gTfB3+cSk5pGxgFg=="], - "@prisma/get-platform": ["@prisma/get-platform@6.12.0", "", { "dependencies": { "@prisma/debug": "6.12.0" } }, "sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA=="], + "@prisma/get-platform": ["@prisma/get-platform@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0" } }, "sha512-/B4n+5V1LI/1JQcHp+sUpyRT1bBgZVPHbsC4lt4/19Xp4jvNIVcq5KYNtQDk5e/ukTSjo9PZVAxxy9ieFtlpTQ=="], "@prisma/instrumentation": ["@prisma/instrumentation@6.6.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-M/a6njz3hbf2oucwdbjNKrSMLuyMCwgDrmTtkF1pm4Nm7CU45J/Hd6lauF2CDACTUYzu3ymcV7P0ZAhIoj6WRw=="], @@ -3553,7 +3559,7 @@ "pretty-ms": ["pretty-ms@9.2.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg=="], - "prisma": ["prisma@6.12.0", "", { "dependencies": { "@prisma/config": "6.12.0", "@prisma/engines": "6.12.0" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg=="], + "prisma": ["prisma@6.9.0", "", { "dependencies": { "@prisma/config": "6.9.0", "@prisma/engines": "6.9.0" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-resJAwMyZREC/I40LF6FZ6rZTnlrlrYrb63oW37Gq+U+9xHwbyMSPJjKtM7VZf3gTO86t/Oyz+YeSXr3CmAY1Q=="], "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], @@ -4473,11 +4479,11 @@ "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], - "@prisma/engines/@prisma/debug": ["@prisma/debug@6.12.0", "", {}, "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ=="], + "@prisma/engines/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], - "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@6.12.0", "", {}, "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ=="], + "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], - "@prisma/get-platform/@prisma/debug": ["@prisma/debug@6.12.0", "", {}, "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ=="], + "@prisma/get-platform/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], "@react-email/components/@react-email/render": ["@react-email/render@1.1.2", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3", "react-promise-suspense": "^0.3.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-RnRehYN3v9gVlNMehHPHhyp2RQo7+pSkHDtXPvg3s0GbzM9SQMW4Qrf8GRNvtpLC4gsI+Wt0VatNRUFqjvevbw=="], diff --git a/packages/db/.gitignore b/packages/db/.gitignore index f7ec9a9bc..7b182107c 100644 --- a/packages/db/.gitignore +++ b/packages/db/.gitignore @@ -1,4 +1,5 @@ node_modules generated # Keep environment variables out of version control -.env \ No newline at end of file +.env + diff --git a/packages/db/package.json b/packages/db/package.json index a2b1eeaa8..25f3ddc17 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,38 +1,31 @@ { "name": "@trycompai/db", "description": "Database package with Prisma client and schema for Comp AI", - "version": "1.0.0", + "version": "1.1.2", "dependencies": { "@prisma/client": "6.9.0" }, "devDependencies": { + "prisma": "6.9.0", "@trycompai/tsconfig": "workspace:*", - "prisma": "^6.9.0", "ts-node": "^10.9.2", "tsup": "^8.5.0", "typescript": "^5.8.3" }, + "peerDependencies": { + "@prisma/client": "6.9.0", + "prisma": "6.9.0" + }, "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "./types": { - "types": "./dist/types.d.ts", - "import": "./dist/types.mjs", - "require": "./dist/types.js" - }, - "./client": { - "types": "./dist/client.d.ts", - "import": "./dist/client.mjs", - "require": "./dist/client.js" - } + ".": "./src/index.ts", + "./types": "./src/types.ts", + "./schema": "./dist/prisma/schema.prisma" }, "files": [ "dist/**", - "prisma/**", - "README.md" + "scripts/setup-consumer.sh", + "README.md", + "INTEGRATION_GUIDE.md" ], "keywords": [ "comp-ai", @@ -56,20 +49,35 @@ "directory": "packages/db" }, "scripts": { - "build": "tsup src/index.ts src/types.ts --format cjs,esm --dts && bun run db:generate", + "build": "bun run db:generate && tsup", "clean": "rm -rf .turbo node_modules dist", "db:generate": "bunx prisma generate", "db:migrate": "bunx prisma migrate dev", "db:push": "bunx prisma db push", "db:seed": "bunx prisma db seed", "db:studio": "bunx prisma studio", - "dev": "tsup src/index.ts src/types.ts --format cjs,esm --watch --dts", + "dev": "tsup --watch", "docker:clean": "docker-compose down -v", "docker:down": "docker-compose down", "docker:up": "docker-compose up -d", "lint": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json}' 'prisma/**/*.prisma' && tsc --noEmit", - "postbuild": "cp -r prisma dist/ || echo 'No prisma directory to copy'", + "postbuild": "node scripts/combine-schemas.js", "typecheck": "tsc --noEmit" }, + "tsup": { + "entry": [ + "src/index.ts", + "src/types.ts" + ], + "format": [ + "cjs", + "esm" + ], + "dts": false, + "clean": true, + "external": [ + "@prisma/client" + ] + }, "types": "./dist/index.d.ts" } diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index a738a5cf4..6e3744960 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1,7 +1,8 @@ generator client { provider = "prisma-client-js" - previewFeatures = ["driverAdapters", "postgresqlExtensions", "prismaSchemaFolder"] - binaryTargets = ["native", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"] + previewFeatures = ["driverAdapters", "postgresqlExtensions"] + binaryTargets = ["native", "darwin-arm64", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"] + output = "../generated/prisma" } datasource db { diff --git a/packages/db/prisma/seed/seed.ts b/packages/db/prisma/seed/seed.ts index 40c038c2c..3f7c6a261 100644 --- a/packages/db/prisma/seed/seed.ts +++ b/packages/db/prisma/seed/seed.ts @@ -1,6 +1,6 @@ -import { PrismaClient } from '@prisma/client'; import fs from 'node:fs/promises'; import path from 'node:path'; +import { PrismaClient } from '../../generated/prisma'; import { frameworkEditorModelSchemas } from './frameworkEditorSchemas'; const prisma = new PrismaClient(); diff --git a/packages/db/scripts/combine-schemas.js b/packages/db/scripts/combine-schemas.js new file mode 100755 index 000000000..4f56b5130 --- /dev/null +++ b/packages/db/scripts/combine-schemas.js @@ -0,0 +1,68 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +const SCHEMA_DIR = path.join(__dirname, '../prisma/schema'); +const BASE_SCHEMA = path.join(__dirname, '../prisma/schema.prisma'); +const OUTPUT_DIR = path.join(__dirname, '../dist/prisma'); +const OUTPUT_SCHEMA = path.join(OUTPUT_DIR, 'schema.prisma'); + +console.log('🔨 Combining Prisma schema files...'); + +// Read the base schema file +let combinedSchema = fs.readFileSync(BASE_SCHEMA, 'utf8'); + +// The base schema should be complete as-is (no modifications needed) + +// Read all .prisma files from the schema directory +const schemaFiles = fs + .readdirSync(SCHEMA_DIR) + .filter((file) => file.endsWith('.prisma')) + .sort(); // Sort for consistent output + +console.log(`📁 Found ${schemaFiles.length} schema files to combine`); + +// Append each schema file +schemaFiles.forEach((file) => { + console.log(` - Adding ${file}`); + const content = fs.readFileSync(path.join(SCHEMA_DIR, file), 'utf8'); + + // Ensure we have proper line breaks + combinedSchema += '\n\n'; + + // Add a comment separator for clarity + combinedSchema += `// ===== ${file} =====\n`; + combinedSchema += content; + + // Ensure content ends with a newline + if (!content.endsWith('\n')) { + combinedSchema += '\n'; + } +}); + +// Ensure the output directory exists +if (!fs.existsSync(OUTPUT_DIR)) { + fs.mkdirSync(OUTPUT_DIR, { recursive: true }); +} + +// Write the combined schema +fs.writeFileSync(OUTPUT_SCHEMA, combinedSchema); + +console.log(`✅ Combined schema written to: ${OUTPUT_SCHEMA}`); +console.log(`📏 Total size: ${Math.round(combinedSchema.length / 1024)}KB`); + +// Also copy SQL files if they exist +const sqlFiles = ['functionDefinition.sql', 'randomSecret.sql']; +sqlFiles.forEach((file) => { + const src = path.join(__dirname, '../prisma', file); + const dest = path.join(OUTPUT_DIR, file); + + if (fs.existsSync(src)) { + fs.copyFileSync(src, dest); + console.log(`📄 Copied ${file}`); + } +}); + +console.log(`🎯 Schema built for distribution only - main development setup unchanged`); +console.log(`📂 Output directory: ${OUTPUT_DIR}`); diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts new file mode 100644 index 000000000..a9d4e30b8 --- /dev/null +++ b/packages/db/src/client.ts @@ -0,0 +1,7 @@ +import { PrismaClient } from '../generated/prisma'; + +const globalForPrisma = global as unknown as { prisma: PrismaClient }; + +export const db = globalForPrisma.prisma || new PrismaClient(); + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = db; diff --git a/packages/db/src/index.js b/packages/db/src/index.js index 240743ccb..818cbcaa2 100644 --- a/packages/db/src/index.js +++ b/packages/db/src/index.js @@ -11,4 +11,4 @@ const createPrismaClient = () => { const globalForPrisma = globalThis; exports.db = globalForPrisma.prisma ?? createPrismaClient(); if (process.env.NODE_ENV !== 'production') - globalForPrisma.prisma = exports.db; + globalForPrisma.prisma = exports.db; \ No newline at end of file diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index db88b411a..3d10d91d8 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,16 +1 @@ -import { PrismaClient } from '@prisma/client'; - -const createPrismaClient = () => { - return new PrismaClient({ - datasourceUrl: process.env.DATABASE_URL, - log: ['error', 'warn'], - }); -}; - -const globalForPrisma = globalThis as unknown as { - prisma: ReturnType | undefined; -}; - -export const db = globalForPrisma.prisma ?? createPrismaClient(); - -if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = db; +export { db } from './client'; // exports instance of prisma diff --git a/packages/db/src/types.js b/packages/db/src/types.js index cdd5dd22a..9a1f9904b 100644 --- a/packages/db/src/types.js +++ b/packages/db/src/types.js @@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@prisma/client"), exports); +__exportStar(require("@prisma/client"), exports); \ No newline at end of file diff --git a/packages/db/src/types.ts b/packages/db/src/types.ts index b329db54e..4c201c18b 100644 --- a/packages/db/src/types.ts +++ b/packages/db/src/types.ts @@ -1 +1 @@ -export * from '@prisma/client'; +export * from '../generated/prisma'; // exports generated types from prisma diff --git a/packages/ui/README.md b/packages/ui/README.md new file mode 100644 index 000000000..aee9a7133 --- /dev/null +++ b/packages/ui/README.md @@ -0,0 +1,154 @@ +# @trycompai/ui + +A modern, accessible UI component library built with React, TypeScript, and Tailwind CSS. Based on shadcn/ui components with custom enhancements. + +## Installation + +```bash +# Using npm +npm install @trycompai/ui + +# Using yarn +yarn add @trycompai/ui + +# Using bun +bun add @trycompai/ui +``` + +## Setup + +### 1. Import the CSS + +Add the UI library's global CSS to your app's entry point: + +```tsx +// In your app's root layout or _app.tsx +import '@trycompai/ui/globals.css'; +``` + +### 2. Configure Tailwind + +The UI library provides a Tailwind preset. Update your `tailwind.config.ts`: + +```ts +import uiPreset from '@trycompai/ui/tailwind-preset'; +import type { Config } from 'tailwindcss'; + +export default { + presets: [uiPreset], + content: [ + './src/**/*.{ts,tsx}', + // Include the UI library in content paths + './node_modules/@trycompai/ui/dist/**/*.js', + ], + // Your custom config... +} satisfies Config; +``` + +### 3. Add CSS Variables + +Ensure your app includes the required CSS variables for theming. These should be in your global CSS: + +```css +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --radius: 0.5rem; + } + + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + /* ... add dark mode variables */ + } +} +``` + +## Usage + +### Basic Import + +```tsx +import { Button, Card, Input } from '@trycompai/ui'; + +export function MyComponent() { + return ( + + + + + ); +} +``` + +### Import Specific Components + +For better tree-shaking, import components individually: + +```tsx +import { Button } from '@trycompai/ui/button'; +import { Card } from '@trycompai/ui/card'; +``` + +### Using Hooks + +```tsx +import { useMediaQuery } from '@trycompai/ui/hooks'; + +export function ResponsiveComponent() { + const isMobile = useMediaQuery('(max-width: 768px)'); + + return isMobile ? : ; +} +``` + +### Using Utilities + +```tsx +import { cn } from '@trycompai/ui/utils'; + +export function Component({ className }: { className?: string }) { + return
Content
; +} +``` + +## Available Components + +- **Layout**: Card, Separator, ScrollArea, ResizablePanels +- **Forms**: Button, Input, Label, Textarea, Select, Checkbox, RadioGroup, Switch, Slider +- **Feedback**: Alert, Toast, Progress, Spinner, Skeleton +- **Overlay**: Dialog, Sheet, Popover, Tooltip, DropdownMenu, ContextMenu +- **Navigation**: Tabs, NavigationMenu, Breadcrumb +- **Data Display**: Table, Badge, Avatar +- **Typography**: Text components with built-in styles +- **Advanced**: Calendar, DatePicker, Command, Combobox, Editor + +## TypeScript Support + +This library is built with TypeScript and includes comprehensive type definitions. All components are fully typed with proper prop interfaces. + +## Next.js Compatibility + +All components are marked with `"use client"` where necessary and are fully compatible with Next.js App Router. + +## License + +MIT diff --git a/packages/ui/package.json b/packages/ui/package.json index a9acaf509..3581fd1fd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,7 +1,334 @@ { "name": "@trycompai/ui", "description": "UI component library for Comp AI", - "version": "1.0.0", + "version": "1.3.2", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./globals.css": "./dist/globals.css", + "./editor.css": "./dist/editor.css", + "./tailwind.config": "./tailwind.config.ts", + "./postcss.config": "./postcss.config.js", + "./use-toast": { + "types": "./dist/components/use-toast.d.ts", + "import": "./dist/components/use-toast.js" + }, + "./tooltip": { + "types": "./dist/components/tooltip.d.ts", + "import": "./dist/components/tooltip.js" + }, + "./toggle": { + "types": "./dist/components/toggle.d.ts", + "import": "./dist/components/toggle.js" + }, + "./toaster": { + "types": "./dist/components/toaster.d.ts", + "import": "./dist/components/toaster.js" + }, + "./toast": { + "types": "./dist/components/toast.d.ts", + "import": "./dist/components/toast.js" + }, + "./time-range-input": { + "types": "./dist/components/time-range-input.d.ts", + "import": "./dist/components/time-range-input.js" + }, + "./textarea": { + "types": "./dist/components/textarea.d.ts", + "import": "./dist/components/textarea.js" + }, + "./tabs": { + "types": "./dist/components/tabs.d.ts", + "import": "./dist/components/tabs.js" + }, + "./table": { + "types": "./dist/components/table.d.ts", + "import": "./dist/components/table.js" + }, + "./switch": { + "types": "./dist/components/switch.d.ts", + "import": "./dist/components/switch.js" + }, + "./submit-button": { + "types": "./dist/components/submit-button.d.ts", + "import": "./dist/components/submit-button.js" + }, + "./spinner": { + "types": "./dist/components/spinner.d.ts", + "import": "./dist/components/spinner.js" + }, + "./sonner": { + "types": "./dist/components/sonner.d.ts", + "import": "./dist/components/sonner.js" + }, + "./slider": { + "types": "./dist/components/slider.d.ts", + "import": "./dist/components/slider.js" + }, + "./skeleton": { + "types": "./dist/components/skeleton.d.ts", + "import": "./dist/components/skeleton.js" + }, + "./sheet": { + "types": "./dist/components/sheet.d.ts", + "import": "./dist/components/sheet.js" + }, + "./separator": { + "types": "./dist/components/separator.d.ts", + "import": "./dist/components/separator.js" + }, + "./select": { + "types": "./dist/components/select.d.ts", + "import": "./dist/components/select.js" + }, + "./select-pills": { + "types": "./dist/components/select-pills.d.ts", + "import": "./dist/components/select-pills.js" + }, + "./secondary-menu": { + "types": "./dist/components/secondary-menu.d.ts", + "import": "./dist/components/secondary-menu.js" + }, + "./scroll-area": { + "types": "./dist/components/scroll-area.d.ts", + "import": "./dist/components/scroll-area.js" + }, + "./resizable": { + "types": "./dist/components/resizable.d.ts", + "import": "./dist/components/resizable.js" + }, + "./radio-group": { + "types": "./dist/components/radio-group.d.ts", + "import": "./dist/components/radio-group.js" + }, + "./quantity-input": { + "types": "./dist/components/quantity-input.d.ts", + "import": "./dist/components/quantity-input.js" + }, + "./progress": { + "types": "./dist/components/progress.d.ts", + "import": "./dist/components/progress.js" + }, + "./popover": { + "types": "./dist/components/popover.d.ts", + "import": "./dist/components/popover.js" + }, + "./navigation-menu": { + "types": "./dist/components/navigation-menu.d.ts", + "import": "./dist/components/navigation-menu.js" + }, + "./multiple-selector": { + "types": "./dist/components/multiple-selector.d.ts", + "import": "./dist/components/multiple-selector.js" + }, + "./label": { + "types": "./dist/components/label.d.ts", + "import": "./dist/components/label.js" + }, + "./input": { + "types": "./dist/components/input.d.ts", + "import": "./dist/components/input.js" + }, + "./input-otp": { + "types": "./dist/components/input-otp.d.ts", + "import": "./dist/components/input-otp.js" + }, + "./inner-menu": { + "types": "./dist/components/inner-menu.d.ts", + "import": "./dist/components/inner-menu.js" + }, + "./index": { + "types": "./dist/hooks/index.d.ts", + "import": "./dist/hooks/index.js" + }, + "./icons": { + "types": "./dist/components/icons.d.ts", + "import": "./dist/components/icons.js" + }, + "./hover-card": { + "types": "./dist/components/hover-card.d.ts", + "import": "./dist/components/hover-card.js" + }, + "./form": { + "types": "./dist/components/form.d.ts", + "import": "./dist/components/form.js" + }, + "./empty-card": { + "types": "./dist/components/empty-card.d.ts", + "import": "./dist/components/empty-card.js" + }, + "./dropdown-menu": { + "types": "./dist/components/dropdown-menu.d.ts", + "import": "./dist/components/dropdown-menu.js" + }, + "./drawer": { + "types": "./dist/components/drawer.d.ts", + "import": "./dist/components/drawer.js" + }, + "./dialog": { + "types": "./dist/components/dialog.d.ts", + "import": "./dist/components/dialog.js" + }, + "./date-range-picker": { + "types": "./dist/components/date-range-picker.d.ts", + "import": "./dist/components/date-range-picker.js" + }, + "./date-picker": { + "types": "./dist/components/date-picker.d.ts", + "import": "./dist/components/date-picker.js" + }, + "./currency-input": { + "types": "./dist/components/currency-input.d.ts", + "import": "./dist/components/currency-input.js" + }, + "./context-menu": { + "types": "./dist/components/context-menu.d.ts", + "import": "./dist/components/context-menu.js" + }, + "./command": { + "types": "./dist/components/command.d.ts", + "import": "./dist/components/command.js" + }, + "./combobox": { + "types": "./dist/components/combobox.d.ts", + "import": "./dist/components/combobox.js" + }, + "./combobox-dropdown": { + "types": "./dist/components/combobox-dropdown.d.ts", + "import": "./dist/components/combobox-dropdown.js" + }, + "./collapsible": { + "types": "./dist/components/collapsible.d.ts", + "import": "./dist/components/collapsible.js" + }, + "./checkbox": { + "types": "./dist/components/checkbox.d.ts", + "import": "./dist/components/checkbox.js" + }, + "./chart": { + "types": "./dist/components/chart.d.ts", + "import": "./dist/components/chart.js" + }, + "./chart-tooltip": { + "types": "./dist/components/chart-tooltip.d.ts", + "import": "./dist/components/chart-tooltip.js" + }, + "./carousel": { + "types": "./dist/components/carousel.d.ts", + "import": "./dist/components/carousel.js" + }, + "./card": { + "types": "./dist/components/card.d.ts", + "import": "./dist/components/card.js" + }, + "./card-liquid-glass": { + "types": "./dist/components/card-liquid-glass.d.ts", + "import": "./dist/components/card-liquid-glass.js" + }, + "./calendar": { + "types": "./dist/components/calendar.d.ts", + "import": "./dist/components/calendar.js" + }, + "./button": { + "types": "./dist/components/button.d.ts", + "import": "./dist/components/button.js" + }, + "./button-icon": { + "types": "./dist/components/button-icon.d.ts", + "import": "./dist/components/button-icon.js" + }, + "./breadcrumb": { + "types": "./dist/components/breadcrumb.d.ts", + "import": "./dist/components/breadcrumb.js" + }, + "./badge": { + "types": "./dist/components/badge.d.ts", + "import": "./dist/components/badge.js" + }, + "./avatar": { + "types": "./dist/components/avatar.d.ts", + "import": "./dist/components/avatar.js" + }, + "./animated-size-container": { + "types": "./dist/components/animated-size-container.d.ts", + "import": "./dist/components/animated-size-container.js" + }, + "./alert": { + "types": "./dist/components/alert.d.ts", + "import": "./dist/components/alert.js" + }, + "./alert-dialog": { + "types": "./dist/components/alert-dialog.d.ts", + "import": "./dist/components/alert-dialog.js" + }, + "./accordion": { + "types": "./dist/components/accordion.d.ts", + "import": "./dist/components/accordion.js" + }, + "./editor/index": { + "types": "./dist/components/editor/index.d.ts", + "import": "./dist/components/editor/index.js" + }, + "./editor/extensions": { + "types": "./dist/components/editor/extensions.d.ts", + "import": "./dist/components/editor/extensions.js" + }, + "./editor/selectors/text-buttons": { + "types": "./dist/components/editor/selectors/text-buttons.d.ts", + "import": "./dist/components/editor/selectors/text-buttons.js" + }, + "./editor/selectors/node-selector": { + "types": "./dist/components/editor/selectors/node-selector.d.ts", + "import": "./dist/components/editor/selectors/node-selector.js" + }, + "./editor/selectors/link-selector": { + "types": "./dist/components/editor/selectors/link-selector.d.ts", + "import": "./dist/components/editor/selectors/link-selector.js" + }, + "./truncate": { + "types": "./dist/utils/truncate.d.ts", + "import": "./dist/utils/truncate.js" + }, + "./cn": { + "types": "./dist/utils/cn.d.ts", + "import": "./dist/utils/cn.js" + }, + "./use-resize-observer": { + "types": "./dist/hooks/use-resize-observer.d.ts", + "import": "./dist/hooks/use-resize-observer.js" + }, + "./use-media-query": { + "types": "./dist/hooks/use-media-query.d.ts", + "import": "./dist/hooks/use-media-query.js" + }, + "./use-enter-submit": { + "types": "./dist/hooks/use-enter-submit.d.ts", + "import": "./dist/hooks/use-enter-submit.js" + }, + "./use-controllable-state": { + "types": "./dist/hooks/use-controllable-state.d.ts", + "import": "./dist/hooks/use-controllable-state.js" + }, + "./use-callback-ref": { + "types": "./dist/hooks/use-callback-ref.d.ts", + "import": "./dist/hooks/use-callback-ref.js" + } + }, + "sideEffects": false, + "files": [ + "dist", + "tailwind.config.ts", + "postcss.config.js", + "README.md", + "dist/globals.css", + "dist/editor.css" + ], "dependencies": { "@radix-ui/react-accordion": "1.2.11", "@radix-ui/react-alert-dialog": "1.1.14", @@ -84,87 +411,6 @@ "tsup": "^8.5.0", "typescript": "^5.8.3" }, - "exports": { - "./resizable": "./src/components/resizable.tsx", - "./secondary-menu": "./src/components/secondary-menu.tsx", - "./animated-size-container": "./src/components/animated-size-container.tsx", - "./accordion": "./src/components/accordion.tsx", - "./alert-dialog": "./src/components/alert-dialog.tsx", - "./breadcrumb": "./src/components/breadcrumb.tsx", - "./alert": "./src/components/alert.tsx", - "./chart": "./src/components/chart.tsx", - "./currency-input": "./src/components/currency-input.tsx", - "./submit-button": "./src/components/submit-button.tsx", - "./avatar": "./src/components/avatar.tsx", - "./button": "./src/components/button.tsx", - "./calendar": "./src/components/calendar.tsx", - "./card": "./src/components/card.tsx", - "./card-liquid-glass": "./src/components/card-liquid-glass.tsx", - "./slider": "./src/components/slider.tsx", - "./carousel": "./src/components/carousel.tsx", - "./checkbox": "./src/components/checkbox.tsx", - "./collapsible": "./src/components/collapsible.tsx", - "./combobox": "./src/components/combobox.tsx", - "./combobox-dropdown": "./src/components/combobox-dropdown.tsx", - "./command": "./src/components/command.tsx", - "./context-menu": "./src/components/context-menu.tsx", - "./date-range-picker": "./src/components/date-range-picker.tsx", - "./dialog": "./src/components/dialog.tsx", - "./drawer": "./src/components/drawer.tsx", - "./dropdown-menu": "./src/components/dropdown-menu.tsx", - "./form": "./src/components/form.tsx", - "./editor": "./src/components/editor/index.tsx", - "./globals.css": "./src/globals.css", - "./hover-card": "./src/components/hover-card.tsx", - "./icons": "./src/components/icons.tsx", - "./input": "./src/components/input.tsx", - "./input-otp": "./src/components/input-otp.tsx", - "./label": "./src/components/label.tsx", - "./navigation-menu": "./src/components/navigation-menu.tsx", - "./popover": "./src/components/popover.tsx", - "./postcss": "./postcss.config.js", - "./progress": "./src/components/progress.tsx", - "./radio-group": "./src/components/radio-group.tsx", - "./scroll-area": "./src/components/scroll-area.tsx", - "./select": "./src/components/select.tsx", - "./sheet": "./src/components/sheet.tsx", - "./badge": "./src/components/badge.tsx", - "./separator": "./src/components/separator.tsx", - "./skeleton": "./src/components/skeleton.tsx", - "./spinner": "./src/components/spinner.tsx", - "./switch": "./src/components/switch.tsx", - "./multiple-selector": "./src/components/multiple-selector.tsx", - "./table": "./src/components/table.tsx", - "./tabs": "./src/components/tabs.tsx", - "./tailwind.config": "./tailwind.config.ts", - "./textarea": "./src/components/textarea.tsx", - "./toast": "./src/components/toast.tsx", - "./toggle": "./src/components/toggle.tsx", - "./toaster": "./src/components/toaster.tsx", - "./tooltip": "./src/components/tooltip.tsx", - "./time-range-input": "./src/components/time-range-input.tsx", - "./use-toast": "./src/components/use-toast.tsx", - "./cn": "./src/utils/cn.ts", - "./truncate": "./src/utils/truncate.ts", - "./hooks": "./src/hooks/index.ts", - "./quantity-input": "./src/components/quantity-input.tsx", - "./use-media-query": "./src/hooks/use-media-query.tsx", - "./inner-menu": "./src/components/inner-menu.tsx", - "./empty-card": "./src/components/empty-card.tsx", - "./text-editor": "./src/text-editor.css", - "./prosemirror": "./src/prosemirror.css", - "./editor.css": "./src/editor.css", - "./chart-tooltip": "./src/components/chart-tooltip.tsx", - "./date-picker": "./src/components/date-picker.tsx", - "./select-pills": "./src/components/select-pills.tsx" - }, - "files": [ - "dist/**", - "src/**", - "tailwind.config.ts", - "postcss.config.js", - "README.md" - ], "keywords": [ "comp-ai", "components", @@ -174,8 +420,6 @@ "ui" ], "license": "MIT", - "main": "./dist/index.js", - "module": "./dist/index.mjs", "overrides": { "react-is": "^19.1.0" }, @@ -183,6 +427,11 @@ "react": "^19.1.0", "react-dom": "^19.1.0" }, + "bundleDependencies": [ + "class-variance-authority", + "clsx", + "tailwind-merge" + ], "publishConfig": { "access": "public" }, @@ -192,14 +441,11 @@ "directory": "packages/ui" }, "scripts": { - "build": "tsup src/components/index.ts src/hooks/index.ts src/utils/index.ts --format cjs,esm --dts", + "build": "tsc --emitDeclarationOnly --declaration --declarationDir dist && tsup && node scripts/generate-exports.cjs", "clean": "rm -rf .turbo node_modules dist", - "dev": "tsup src/components/index.ts src/hooks/index.ts src/utils/index.ts --format cjs,esm --watch --dts", + "dev": "tsup --format esm --watch --dts", "format": "prettier --write .", "lint": "prettier --check .", "typecheck": "tsc --noEmit" - }, - "sideEffects": false, - "type": "module", - "types": "./dist/index.d.ts" -} + } +} \ No newline at end of file diff --git a/packages/ui/scripts/generate-exports.cjs b/packages/ui/scripts/generate-exports.cjs new file mode 100644 index 000000000..f1f737265 --- /dev/null +++ b/packages/ui/scripts/generate-exports.cjs @@ -0,0 +1,77 @@ +const fs = require('fs'); +const path = require('path'); +const { glob } = require('glob'); + +const pkgPath = path.join(__dirname, '../package.json'); +const componentsDir = path.join(__dirname, '../dist/components'); +const utilsDir = path.join(__dirname, '../dist/utils'); +const hooksDir = path.join(__dirname, '../dist/hooks'); + +const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); + +// Create ESM-only exports structure +const exportsField = { + '.': { + types: './dist/index.d.ts', + import: './dist/index.js', + }, +}; + +// Add main CSS/config exports +exportsField['./globals.css'] = './dist/globals.css'; +exportsField['./editor.css'] = './dist/editor.css'; +exportsField['./tailwind.config'] = './tailwind.config.ts'; +exportsField['./postcss.config'] = './postcss.config.js'; + +// Add all component subpath exports (ESM only) including nested directories +if (fs.existsSync(componentsDir)) { + // Use glob to find all .js files recursively in components directory + const componentFiles = glob.sync('**/*.js', { cwd: componentsDir }); + + componentFiles.forEach((file) => { + const name = file.replace(/\.js$/, ''); + const exportPath = `./${name}`; + + exportsField[exportPath] = { + types: `./dist/components/${name}.d.ts`, + import: `./dist/components/${name}.js`, + }; + }); +} + +// Add all utils exports +if (fs.existsSync(utilsDir)) { + const utilFiles = glob.sync('**/*.js', { cwd: utilsDir }); + + utilFiles.forEach((file) => { + const name = file.replace(/\.js$/, ''); + const exportPath = `./${name}`; + + exportsField[exportPath] = { + types: `./dist/utils/${name}.d.ts`, + import: `./dist/utils/${name}.js`, + }; + }); +} + +// Add all hooks exports +if (fs.existsSync(hooksDir)) { + const hookFiles = glob.sync('**/*.js', { cwd: hooksDir }); + + hookFiles.forEach((file) => { + const name = file.replace(/\.js$/, ''); + const exportPath = `./${name}`; + + exportsField[exportPath] = { + types: `./dist/hooks/${name}.d.ts`, + import: `./dist/hooks/${name}.js`, + }; + }); +} + +pkg.exports = exportsField; + +fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2)); +console.log( + '✅ package.json exports updated with ESM-only format including components, utils, and hooks!', +); diff --git a/packages/ui/src/components/combobox.tsx b/packages/ui/src/components/combobox.tsx index 530600eff..5b98ab59a 100644 --- a/packages/ui/src/components/combobox.tsx +++ b/packages/ui/src/components/combobox.tsx @@ -3,7 +3,8 @@ import { Check, ChevronsUpDown } from 'lucide-react'; import * as React from 'react'; -import { Button } from '@/components/button'; +import { cn } from '../utils'; +import { Button } from './button'; import { Command, CommandEmpty, @@ -11,9 +12,8 @@ import { CommandInput, CommandItem, CommandList, -} from '@/components/command'; -import { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'; -import { cn } from '@/utils'; +} from './command'; +import { Popover, PopoverContent, PopoverTrigger } from './popover'; const frameworks = [ { diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 000000000..d0ae16256 --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1,13 @@ +// Re-export everything from components +export * from './components'; + +// Re-export everything from hooks +export * from './hooks'; + +// Re-export everything from utils +export * from './utils'; + +// Export types +export type * from './components'; +export type * from './hooks'; +export type * from './utils'; \ No newline at end of file diff --git a/packages/ui/src/package.json b/packages/ui/src/package.json new file mode 100644 index 000000000..be2fd5351 --- /dev/null +++ b/packages/ui/src/package.json @@ -0,0 +1,5 @@ +{ + "main": "../dist/index.js", + "module": "../dist/index.js", + "types": "../dist/index.d.ts" +} \ No newline at end of file diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 513b7a4e8..9ec30b929 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -5,10 +5,16 @@ "paths": { "@/*": ["./src/*"] }, + "target": "ES2022", "module": "ESNext", "moduleResolution": "Bundler", - "verbatimModuleSyntax": false + "verbatimModuleSyntax": false, + "jsx": "preserve", + "skipLibCheck": true, + "types": ["react", "react-dom"], + "declaration": true, + "declarationDir": "dist" }, "include": ["src"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "dist"] } diff --git a/packages/ui/tsup.config.ts b/packages/ui/tsup.config.ts new file mode 100644 index 000000000..2ff8b0eb3 --- /dev/null +++ b/packages/ui/tsup.config.ts @@ -0,0 +1,30 @@ +import { glob } from 'glob'; +import { defineConfig } from 'tsup'; + +const components = glob.sync('src/components/**/*.{ts,tsx}'); +const hooks = glob.sync('src/hooks/**/*.{ts,tsx}'); +const utils = glob.sync('src/utils/**/*.{ts,tsx}'); + +export default defineConfig({ + entry: ['src/index.ts', ...components, ...hooks, ...utils], + format: ['esm'], + dts: true, + splitting: false, + clean: true, + bundle: false, + external: ['react', 'react-dom'], + target: 'es2022', + platform: 'neutral', + esbuildOptions(options) { + // Preserve JSX - let Next.js handle the transformation + options.jsx = 'preserve'; + options.platform = 'neutral'; + options.packages = 'external'; + }, + outDir: 'dist', + onSuccess: async () => { + const { cp } = await import('fs/promises'); + await cp('src/globals.css', 'dist/globals.css'); + await cp('src/editor.css', 'dist/editor.css'); + }, +}); diff --git a/tsconfig.json b/tsconfig.json index 3e773d6c5..a0209011b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@comp/tsconfig/base.json", + "extends": "@trycompai/tsconfig/base.json", "include": ["src", "."], "exclude": ["node_modules"] } diff --git a/turbo.json b/turbo.json index f643a1fa2..a72b15da0 100644 --- a/turbo.json +++ b/turbo.json @@ -55,6 +55,10 @@ "db:generate": { "cache": false }, + "db:migrate": { + "cache": false, + "persistent": true + }, "auth:build": { "cache": false, "env": ["BETTER_AUTH_SECRET", "BETTER_AUTH_URL", "AUTH_GOOGLE_ID", "AUTH_GOOGLE_SECRET"] diff --git a/yarn.lock b/yarn.lock index fdc2169a5..7eae56454 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1652,6 +1652,18 @@ dependencies: tslib "^2.4.0" +"@emotion/is-prop-valid@*": + version "0.8.8" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@esbuild/aix-ppc64@0.20.2": version "0.20.2" resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz" @@ -3143,23 +3155,23 @@ resolved "https://registry.npmjs.org/@prisma/client/-/client-6.9.0.tgz" integrity sha512-Gg7j1hwy3SgF1KHrh0PZsYvAaykeR0PaxusnLXydehS96voYCGt1U5zVR31NIouYc63hWzidcrir1a7AIyCsNQ== -"@prisma/config@6.12.0": - version "6.12.0" - resolved "https://registry.npmjs.org/@prisma/config/-/config-6.12.0.tgz" - integrity sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg== +"@prisma/config@6.9.0": + version "6.9.0" + resolved "https://registry.npmjs.org/@prisma/config/-/config-6.9.0.tgz" + integrity sha512-Wcfk8/lN3WRJd5w4jmNQkUwhUw0eksaU/+BlAJwPQKW10k0h0LC9PD/6TQFmqKVbHQL0vG2z266r0S1MPzzhbA== dependencies: jiti "2.4.2" +"@prisma/debug@6.9.0": + version "6.9.0" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.9.0.tgz" + integrity sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg== + "@prisma/debug@6.10.1": version "6.10.1" resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.10.1.tgz" integrity sha512-k2YT53cWxv9OLjW4zSYTZ6Z7j0gPfCzcr2Mj99qsuvlxr8WAKSZ2NcSR0zLf/mP4oxnYG842IMj3utTgcd7CaA== -"@prisma/debug@6.12.0": - version "6.12.0" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz" - integrity sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ== - "@prisma/driver-adapter-utils@6.10.1": version "6.10.1" resolved "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.10.1.tgz" @@ -3167,36 +3179,36 @@ dependencies: "@prisma/debug" "6.10.1" -"@prisma/engines@6.12.0": - version "6.12.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.12.0.tgz" - integrity sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA== +"@prisma/engines@6.9.0": + version "6.9.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.9.0.tgz" + integrity sha512-im0X0bwDLA0244CDf8fuvnLuCQcBBdAGgr+ByvGfQY9wWl6EA+kRGwVk8ZIpG65rnlOwtaWIr/ZcEU5pNVvq9g== dependencies: - "@prisma/debug" "6.12.0" - "@prisma/engines-version" "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc" - "@prisma/fetch-engine" "6.12.0" - "@prisma/get-platform" "6.12.0" + "@prisma/debug" "6.9.0" + "@prisma/engines-version" "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" + "@prisma/fetch-engine" "6.9.0" + "@prisma/get-platform" "6.9.0" -"@prisma/engines-version@6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc": - version "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc.tgz" - integrity sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ== +"@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e": + version "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e.tgz" + integrity sha512-Qp9gMoBHgqhKlrvumZWujmuD7q4DV/gooEyPCLtbkc13EZdSz2RsGUJ5mHb3RJgAbk+dm6XenqG7obJEhXcJ6Q== -"@prisma/fetch-engine@6.12.0": - version "6.12.0" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.12.0.tgz" - integrity sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag== +"@prisma/fetch-engine@6.9.0": + version "6.9.0" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.9.0.tgz" + integrity sha512-PMKhJdl4fOdeE3J3NkcWZ+tf3W6rx3ht/rLU8w4SXFRcLhd5+3VcqY4Kslpdm8osca4ej3gTfB3+cSk5pGxgFg== dependencies: - "@prisma/debug" "6.12.0" - "@prisma/engines-version" "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc" - "@prisma/get-platform" "6.12.0" + "@prisma/debug" "6.9.0" + "@prisma/engines-version" "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" + "@prisma/get-platform" "6.9.0" -"@prisma/get-platform@6.12.0": - version "6.12.0" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.12.0.tgz" - integrity sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA== +"@prisma/get-platform@6.9.0": + version "6.9.0" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.9.0.tgz" + integrity sha512-/B4n+5V1LI/1JQcHp+sUpyRT1bBgZVPHbsC4lt4/19Xp4jvNIVcq5KYNtQDk5e/ukTSjo9PZVAxxy9ieFtlpTQ== dependencies: - "@prisma/debug" "6.12.0" + "@prisma/debug" "6.9.0" "@prisma/instrumentation@6.6.0": version "6.6.0" @@ -5575,15 +5587,15 @@ "@trycompai/db@^workspace:packages/db", "@trycompai/db@workspace:*": version "workspace:packages/db" resolved "workspace:packages/db" + devDependencies: + "@prisma/client" "6.9.0" devDependencies: "@trycompai/tsconfig" "workspace:*" devDependencies: - prisma "^6.9.0" + prisma "6.9.0" ts-node "^10.9.2" tsup "^8.5.0" typescript "^5.8.3" - dependencies: - "@prisma/client" "6.9.0" "@trycompai/email@^workspace:packages/email", "@trycompai/email@workspace:*": version "workspace:packages/email" @@ -14314,13 +14326,13 @@ pretty-ms@^9.2.0: dependencies: parse-ms "^4.0.0" -prisma@*, prisma@^6.9.0: - version "6.12.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-6.12.0.tgz" - integrity sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg== +prisma@*, prisma@6.9.0: + version "6.9.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-6.9.0.tgz" + integrity sha512-resJAwMyZREC/I40LF6FZ6rZTnlrlrYrb63oW37Gq+U+9xHwbyMSPJjKtM7VZf3gTO86t/Oyz+YeSXr3CmAY1Q== dependencies: - "@prisma/config" "6.12.0" - "@prisma/engines" "6.12.0" + "@prisma/config" "6.9.0" + "@prisma/engines" "6.9.0" prismjs@^1.30.0: version "1.30.0" From f33bb348cfb5d8919468f397965417489824a6e1 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:11:08 -0400 Subject: [PATCH 02/75] fix: add missing newlines in package.json and index.ts files for consistency --- packages/ui/package.json | 2 +- packages/ui/src/index.ts | 2 +- packages/ui/src/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ui/package.json b/packages/ui/package.json index 3581fd1fd..f6855579a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -448,4 +448,4 @@ "lint": "prettier --check .", "typecheck": "tsc --noEmit" } -} \ No newline at end of file +} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index d0ae16256..52f5922d8 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -10,4 +10,4 @@ export * from './utils'; // Export types export type * from './components'; export type * from './hooks'; -export type * from './utils'; \ No newline at end of file +export type * from './utils'; diff --git a/packages/ui/src/package.json b/packages/ui/src/package.json index be2fd5351..e92ce0482 100644 --- a/packages/ui/src/package.json +++ b/packages/ui/src/package.json @@ -2,4 +2,4 @@ "main": "../dist/index.js", "module": "../dist/index.js", "types": "../dist/index.d.ts" -} \ No newline at end of file +} From e2e5e65c071431cb89ada51d5c92a4333922917e Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:15:19 -0400 Subject: [PATCH 03/75] chore: reorganize package.json files across multiple packages - Remove redundant "type" field from @comp/app package.json. - Reintroduce "prisma" in devDependencies and add peerDependencies in @trycompai/db package.json. - Consolidate dependencies and devDependencies in @trycompai/ui package.json, while ensuring proper module exports and types. --- apps/app/package.json | 4 +- packages/db/package.json | 10 +-- packages/ui/package.json | 186 +++++++++++++++++++-------------------- 3 files changed, 100 insertions(+), 100 deletions(-) diff --git a/apps/app/package.json b/apps/app/package.json index 5ab0b3bf0..4cacc11a5 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -1,7 +1,6 @@ { "name": "@comp/app", "version": "0.1.0", - "type": "module", "dependencies": { "@ai-sdk/groq": "^1.2.8", "@ai-sdk/openai": "^1.3.19", @@ -143,5 +142,6 @@ "test:watch": "vitest --watch", "trigger:dev": "npx trigger.dev@latest dev", "typecheck": "tsc --noEmit" - } + }, + "type": "module" } diff --git a/packages/db/package.json b/packages/db/package.json index 25f3ddc17..7f4bbd0eb 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -6,16 +6,12 @@ "@prisma/client": "6.9.0" }, "devDependencies": { - "prisma": "6.9.0", "@trycompai/tsconfig": "workspace:*", + "prisma": "6.9.0", "ts-node": "^10.9.2", "tsup": "^8.5.0", "typescript": "^5.8.3" }, - "peerDependencies": { - "@prisma/client": "6.9.0", - "prisma": "6.9.0" - }, "exports": { ".": "./src/index.ts", "./types": "./src/types.ts", @@ -36,6 +32,10 @@ "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", + "peerDependencies": { + "@prisma/client": "6.9.0", + "prisma": "6.9.0" + }, "prisma": { "schema": "prisma", "seed": "ts-node prisma/seed/seed.ts" diff --git a/packages/ui/package.json b/packages/ui/package.json index f6855579a..b13689cf0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,10 +2,93 @@ "name": "@trycompai/ui", "description": "UI component library for Comp AI", "version": "1.3.2", - "type": "module", - "main": "./dist/index.js", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", + "bundleDependencies": [ + "class-variance-authority", + "clsx", + "tailwind-merge" + ], + "dependencies": { + "@radix-ui/react-accordion": "1.2.11", + "@radix-ui/react-alert-dialog": "1.1.14", + "@radix-ui/react-avatar": "1.1.10", + "@radix-ui/react-checkbox": "1.3.2", + "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/react-context-menu": "2.2.15", + "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-dropdown-menu": "2.1.15", + "@radix-ui/react-hover-card": "1.1.14", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-navigation-menu": "1.2.13", + "@radix-ui/react-popover": "1.1.14", + "@radix-ui/react-progress": "1.1.7", + "@radix-ui/react-radio-group": "1.3.7", + "@radix-ui/react-scroll-area": "1.2.9", + "@radix-ui/react-select": "2.2.5", + "@radix-ui/react-separator": "1.1.7", + "@radix-ui/react-slider": "1.3.5", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-switch": "1.2.5", + "@radix-ui/react-tabs": "1.1.12", + "@radix-ui/react-toast": "1.2.14", + "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-toggle-group": "1.1.10", + "@radix-ui/react-tooltip": "1.2.7", + "@radix-ui/react-use-is-hydrated": "^0.1.0", + "@tailwindcss/typography": "^0.5.16", + "@tiptap/extension-bold": "2.14.0", + "@tiptap/extension-character-count": "2.14.0", + "@tiptap/extension-code-block-lowlight": "2.14.0", + "@tiptap/extension-highlight": "2.22.3", + "@tiptap/extension-image": "2.14.0", + "@tiptap/extension-link": "2.14.0", + "@tiptap/extension-placeholder": "2.14.0", + "@tiptap/extension-table": "^2.22.3", + "@tiptap/extension-table-cell": "^2.22.3", + "@tiptap/extension-table-header": "^2.22.3", + "@tiptap/extension-table-row": "^2.22.3", + "@tiptap/extension-task-item": "2.22.3", + "@tiptap/extension-task-list": "2.14.0", + "@tiptap/extension-text-align": "2.22.3", + "@tiptap/extension-typography": "2.14.0", + "@tiptap/extension-underline": "2.22.3", + "@tiptap/pm": "2.22.3", + "@tiptap/react": "2.14.0", + "@tiptap/starter-kit": "2.14.0", + "@tiptap/suggestion": "2.14.0", + "@uidotdev/usehooks": "^2.4.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "1.0.4", + "date-fns": "^4.1.0", + "embla-carousel-react": "8.5.1", + "input-otp": "1.4.2", + "jsonfile": "^6.1.0", + "lucide-react": "^0.518.0", + "react-day-picker": "8.10.1", + "react-dropzone": "^14.3.5", + "react-icons": "^5.3.0", + "react-number-format": "^5.4.2", + "react-resizable-panels": "^3.0.3", + "recharts": "2.15.0", + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7", + "tippy.js": "^6.3.7", + "use-callback-ref": "^1.3.3", + "use-debounce": "^10.0.4", + "vaul": "^0.9.6" + }, + "devDependencies": { + "@tailwindcss/cli": "^4.1.10", + "@tailwindcss/postcss": "^4.1.10", + "autoprefixer": "^10.4.21", + "postcss": "^8.5.4", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwindcss": "^4.1.8", + "tsup": "^8.5.0", + "typescript": "^5.8.3" + }, "exports": { ".": { "types": "./dist/index.d.ts", @@ -320,7 +403,6 @@ "import": "./dist/hooks/use-callback-ref.js" } }, - "sideEffects": false, "files": [ "dist", "tailwind.config.ts", @@ -329,88 +411,6 @@ "dist/globals.css", "dist/editor.css" ], - "dependencies": { - "@radix-ui/react-accordion": "1.2.11", - "@radix-ui/react-alert-dialog": "1.1.14", - "@radix-ui/react-avatar": "1.1.10", - "@radix-ui/react-checkbox": "1.3.2", - "@radix-ui/react-collapsible": "1.1.11", - "@radix-ui/react-context-menu": "2.2.15", - "@radix-ui/react-dialog": "1.1.14", - "@radix-ui/react-dropdown-menu": "2.1.15", - "@radix-ui/react-hover-card": "1.1.14", - "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "2.1.7", - "@radix-ui/react-navigation-menu": "1.2.13", - "@radix-ui/react-popover": "1.1.14", - "@radix-ui/react-progress": "1.1.7", - "@radix-ui/react-radio-group": "1.3.7", - "@radix-ui/react-scroll-area": "1.2.9", - "@radix-ui/react-select": "2.2.5", - "@radix-ui/react-separator": "1.1.7", - "@radix-ui/react-slider": "1.3.5", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-switch": "1.2.5", - "@radix-ui/react-tabs": "1.1.12", - "@radix-ui/react-toast": "1.2.14", - "@radix-ui/react-toggle": "1.1.9", - "@radix-ui/react-toggle-group": "1.1.10", - "@radix-ui/react-tooltip": "1.2.7", - "@radix-ui/react-use-is-hydrated": "^0.1.0", - "@tailwindcss/typography": "^0.5.16", - "@tiptap/extension-bold": "2.14.0", - "@tiptap/extension-character-count": "2.14.0", - "@tiptap/extension-code-block-lowlight": "2.14.0", - "@tiptap/extension-highlight": "2.22.3", - "@tiptap/extension-image": "2.14.0", - "@tiptap/extension-link": "2.14.0", - "@tiptap/extension-placeholder": "2.14.0", - "@tiptap/extension-table": "^2.22.3", - "@tiptap/extension-table-cell": "^2.22.3", - "@tiptap/extension-table-header": "^2.22.3", - "@tiptap/extension-table-row": "^2.22.3", - "@tiptap/extension-task-item": "2.22.3", - "@tiptap/extension-task-list": "2.14.0", - "@tiptap/extension-text-align": "2.22.3", - "@tiptap/extension-typography": "2.14.0", - "@tiptap/extension-underline": "2.22.3", - "@tiptap/pm": "2.22.3", - "@tiptap/react": "2.14.0", - "@tiptap/starter-kit": "2.14.0", - "@tiptap/suggestion": "2.14.0", - "@uidotdev/usehooks": "^2.4.1", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "1.0.4", - "date-fns": "^4.1.0", - "embla-carousel-react": "8.5.1", - "input-otp": "1.4.2", - "jsonfile": "^6.1.0", - "lucide-react": "^0.518.0", - "react-day-picker": "8.10.1", - "react-dropzone": "^14.3.5", - "react-icons": "^5.3.0", - "react-number-format": "^5.4.2", - "react-resizable-panels": "^3.0.3", - "recharts": "2.15.0", - "tailwind-merge": "^2.5.5", - "tailwindcss-animate": "^1.0.7", - "tippy.js": "^6.3.7", - "use-callback-ref": "^1.3.3", - "use-debounce": "^10.0.4", - "vaul": "^0.9.6" - }, - "devDependencies": { - "@tailwindcss/cli": "^4.1.10", - "@tailwindcss/postcss": "^4.1.10", - "autoprefixer": "^10.4.21", - "postcss": "^8.5.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "tailwindcss": "^4.1.8", - "tsup": "^8.5.0", - "typescript": "^5.8.3" - }, "keywords": [ "comp-ai", "components", @@ -420,6 +420,8 @@ "ui" ], "license": "MIT", + "main": "./dist/index.js", + "module": "./dist/index.js", "overrides": { "react-is": "^19.1.0" }, @@ -427,11 +429,6 @@ "react": "^19.1.0", "react-dom": "^19.1.0" }, - "bundleDependencies": [ - "class-variance-authority", - "clsx", - "tailwind-merge" - ], "publishConfig": { "access": "public" }, @@ -447,5 +444,8 @@ "format": "prettier --write .", "lint": "prettier --check .", "typecheck": "tsc --noEmit" - } + }, + "sideEffects": false, + "type": "module", + "types": "./dist/index.d.ts" } From 2cdc51b0e88d3046a41ea65509b7ea67d478c2a8 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:19:57 -0400 Subject: [PATCH 04/75] refactor: update import statements to use types from @comp/db/types - Changed imports from '@prisma/client' to '@comp/db/types' across multiple files for consistency and to align with the new type structure. - This includes updates in actions, components, and forms related to risk and vendor management. --- apps/app/src/actions/risk/update-residual-risk-action.ts | 2 +- apps/app/src/app/(app)/[orgId]/controls/data/queries.ts | 2 +- .../[orgId]/people/[employeeId]/actions/update-employee.ts | 2 +- .../app/(app)/[orgId]/people/all/actions/updateMemberRole.ts | 2 +- .../(app)/[orgId]/people/all/components/InviteMembersModal.tsx | 2 +- .../src/app/(app)/[orgId]/people/all/components/MemberRow.tsx | 2 +- .../(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx | 2 +- .../[orgId]/people/all/components/MultiRoleComboboxContent.tsx | 2 +- .../[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx | 2 +- .../[orgId]/people/all/components/PendingInvitationRow.tsx | 2 +- .../src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx | 2 +- .../(app)/[orgId]/people/all/components/TeamMembersClient.tsx | 2 +- .../[orgId]/people/dashboard/components/EmployeesOverview.tsx | 2 +- apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts | 2 +- .../src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx | 2 +- .../[orgId]/settings/context-hub/components/context-form.tsx | 2 +- .../settings/context-hub/components/context-hub-list.tsx | 2 +- .../[orgId]/settings/context-hub/components/context-list.tsx | 2 +- .../settings/context-hub/components/table/ContextColumns.tsx | 2 +- .../vendors/[vendorId]/actions/update-vendor-inherent-risk.ts | 2 +- .../vendors/[vendorId]/actions/update-vendor-residual-risk.ts | 2 +- .../vendors/[vendorId]/components/VendorInherentRiskSheet.tsx | 2 +- .../[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx | 2 +- .../[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx | 2 +- apps/app/src/app/api/auth/test-db/route.ts | 2 +- apps/app/src/app/api/auth/test-login/route.ts | 2 +- apps/app/src/components/forms/risks/InherentRiskForm.tsx | 2 +- apps/app/src/components/forms/risks/ResidualRiskForm.tsx | 2 +- .../(app)/(home)/[orgId]/components/OrganizationDashboard.tsx | 2 +- apps/portal/src/app/(app)/(home)/components/Overview.tsx | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/app/src/actions/risk/update-residual-risk-action.ts b/apps/app/src/actions/risk/update-residual-risk-action.ts index 4dab87dbb..40e4cf178 100644 --- a/apps/app/src/actions/risk/update-residual-risk-action.ts +++ b/apps/app/src/actions/risk/update-residual-risk-action.ts @@ -1,7 +1,7 @@ 'use server'; import { db } from '@comp/db'; -import { Impact, Likelihood } from '@prisma/client'; +import { Impact, Likelihood } from '@comp/db/types'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updateResidualRiskSchema } from '../schema'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts b/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts index 5242198c5..e0153776b 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts @@ -2,7 +2,7 @@ import 'server-only'; import { auth } from '@/utils/auth'; import { db } from '@comp/db'; -import { Prisma } from '@prisma/client'; +import { Prisma } from '@comp/db/types'; import { headers } from 'next/headers'; // import { cache } from "react"; // Already handled: ensure it stays removed or remove if re-introduced import type { GetControlSchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts index 36b296003..737aaf7ae 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts @@ -3,7 +3,7 @@ import { authActionClient } from '@/actions/safe-action'; import { db } from '@comp/db'; import type { Departments } from '@comp/db/types'; -import { Prisma } from '@prisma/client'; +import { Prisma } from '@comp/db/types'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; import { appErrors } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts b/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts index 13cd93c63..a4377b881 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts +++ b/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts @@ -1,7 +1,7 @@ 'use server'; import { db } from '@comp/db'; -import { Departments, Role } from '@prisma/client'; +import { Departments, Role } from '@comp/db/types'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; // Adjust safe-action import for colocalized structure diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx index 85a7b42fe..c59e7e3a3 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx @@ -1,7 +1,7 @@ 'use client'; +import type { Role } from '@comp/db/types'; import { zodResolver } from '@hookform/resolvers/zod'; -import type { Role } from '@prisma/client'; import { Loader2, PlusCircle, Trash2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx index bb2a73f42..6dc7b6706 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx @@ -5,6 +5,7 @@ import Link from 'next/link'; import { useParams } from 'next/navigation'; import { useRef, useState } from 'react'; +import type { Role } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -34,7 +35,6 @@ import { DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; import { Label } from '@comp/ui/label'; -import type { Role } from '@prisma/client'; import { MultiRoleCombobox } from './MultiRoleCombobox'; import type { MemberWithUser } from './TeamMembers'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx index 31eea8077..58fe0ad37 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Role } from '@prisma/client'; +import type { Role } from '@comp/db/types'; import * as React from 'react'; import { Dialog, DialogContent } from '@comp/ui/dialog'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx index 586700a64..57c2bfc71 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx @@ -1,5 +1,6 @@ 'use client'; +import type { Role } from '@comp/db/types'; // Assuming Role is from prisma import { Command, CommandEmpty, @@ -8,7 +9,6 @@ import { CommandItem, CommandList, } from '@comp/ui/command'; -import type { Role } from '@prisma/client'; // Assuming Role is from prisma import { Check } from 'lucide-react'; import { cn } from '@comp/ui/cn'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx index e0ca2a7cf..836bb0d5c 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx @@ -1,10 +1,10 @@ 'use client'; +import type { Role } from '@comp/db/types'; // Assuming Role is from prisma import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; import { cn } from '@comp/ui/cn'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@comp/ui/tooltip'; -import type { Role } from '@prisma/client'; // Assuming Role is from prisma import { ChevronsUpDown, Lock, X } from 'lucide-react'; interface MultiRoleComboboxTriggerProps { diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx index e756f0d8f..56ee03120 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx @@ -1,5 +1,6 @@ 'use client'; +import type { Invitation } from '@comp/db/types'; import { Avatar, AvatarFallback } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; @@ -18,7 +19,6 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; -import type { Invitation } from '@prisma/client'; import { Clock, MoreHorizontal, Trash2 } from 'lucide-react'; import { useEffect, useMemo, useRef, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx index 6b4a1a501..a8a8b3b04 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx @@ -2,7 +2,7 @@ import { auth } from '@/utils/auth'; import { db } from '@comp/db'; -import type { Invitation, Member, User } from '@prisma/client'; +import type { Invitation, Member, User } from '@comp/db/types'; import { headers } from 'next/headers'; import { removeMember } from '../actions/removeMember'; import { revokeInvitation } from '../actions/revokeInvitation'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx index 373bad50d..a3b29dac7 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx @@ -7,12 +7,12 @@ import { useState } from 'react'; import { toast } from 'sonner'; import { authClient } from '@/utils/auth-client'; +import type { Invitation, Role } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent } from '@comp/ui/card'; import { Input } from '@comp/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Separator } from '@comp/ui/separator'; -import type { Invitation, Role } from '@prisma/client'; import { MemberRow } from './MemberRow'; import { PendingInvitationRow } from './PendingInvitationRow'; diff --git a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx index 4df240f63..f0e68d3d8 100644 --- a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx @@ -1,7 +1,7 @@ import { trainingVideos as trainingVideosData } from '@/lib/data/training-videos'; import { auth } from '@/utils/auth'; import { db } from '@comp/db'; -import type { Member, Policy, User } from '@prisma/client'; +import type { Member, Policy, User } from '@comp/db/types'; import { headers } from 'next/headers'; import { EmployeeCompletionChart } from './EmployeeCompletionChart'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts b/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts index cf48de29f..8907b17e7 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts @@ -2,7 +2,7 @@ import 'server-only'; import { auth } from '@/utils/auth'; import { db } from '@comp/db'; -import { Prisma } from '@prisma/client'; +import { Prisma } from '@comp/db/types'; import { headers } from 'next/headers'; import { cache } from 'react'; import type { GetPolicySchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx index 185098448..485aa0011 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx @@ -2,8 +2,8 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableToolbar } from '@/components/data-table/data-table-toolbar'; import { useDataTable } from '@/hooks/use-data-table'; +import type { Context } from '@comp/db/types'; import { Button } from '@comp/ui/button'; -import type { Context } from '@prisma/client'; import { Plus } from 'lucide-react'; import { useQueryState } from 'nuqs'; import { useMemo } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx index 1209b31cb..c334fe171 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx @@ -2,12 +2,12 @@ import { createContextEntryAction } from '@/actions/context-hub/create-context-entry-action'; import { updateContextEntryAction } from '@/actions/context-hub/update-context-entry-action'; +import type { Context } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Input } from '@comp/ui/input'; import { Label } from '@comp/ui/label'; import { Textarea } from '@comp/ui/textarea'; -import type { Context } from '@prisma/client'; import { Loader2 } from 'lucide-react'; import { useTransition } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx index 3ce47d9fa..afb32efed 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx @@ -1,6 +1,6 @@ +import type { Context } from '@comp/db/types'; import { Badge } from '@comp/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; -import type { Context } from '@prisma/client'; export async function ContextHubList({ entries }: { entries: Context[] }) { return ( diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx index 19c9e60cc..fc947650e 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx @@ -1,6 +1,7 @@ 'use client'; import { deleteContextEntryAction } from '@/actions/context-hub/delete-context-entry-action'; +import type { Context } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -29,7 +30,6 @@ import { DialogTitle, DialogTrigger, } from '@comp/ui/dialog'; -import type { Context } from '@prisma/client'; import { Pencil, Plus } from 'lucide-react'; import { useState } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx index 940d3bdcb..a3fd6be62 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx @@ -1,5 +1,6 @@ import { deleteContextEntryAction } from '@/actions/context-hub/delete-context-entry-action'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; +import type { Context } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -12,7 +13,6 @@ import { AlertDialogTrigger, } from '@comp/ui/alert-dialog'; import { Button } from '@comp/ui/button'; -import type { Context } from '@prisma/client'; import type { ColumnDef } from '@tanstack/react-table'; import { Trash2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts index 718088dd7..0e67f1d6a 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts @@ -3,7 +3,7 @@ import { appErrors } from '@/lib/errors'; import type { ActionResponse } from '@/types/actions'; import { db } from '@comp/db'; -import { Impact, Likelihood } from '@prisma/client'; +import { Impact, Likelihood } from '@comp/db/types'; import { createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts index 4414b0447..4b23d08c0 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts @@ -3,7 +3,7 @@ import { appErrors } from '@/lib/errors'; import type { ActionResponse } from '@/types/actions'; import { db } from '@comp/db'; -import { Impact, Likelihood } from '@prisma/client'; +import { Impact, Likelihood } from '@comp/db/types'; import { createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx index c820ce043..89a835c1d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx @@ -1,12 +1,12 @@ 'use client'; import { InherentRiskForm } from '@/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm'; +import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; -import { Impact, Likelihood } from '@prisma/client'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx index f80a98146..65b0dfbd0 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx @@ -1,12 +1,12 @@ 'use client'; import { updateVendorInherentRisk } from '@/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk'; +import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { useToast } from '@comp/ui/use-toast'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Impact, Likelihood } from '@prisma/client'; import { useQueryState } from 'nuqs'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx index 25ec35e8e..6990cf049 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx @@ -1,12 +1,12 @@ 'use client'; import { updateVendorResidualRisk } from '@/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk'; +import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { useToast } from '@comp/ui/use-toast'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Impact, Likelihood } from '@prisma/client'; import { useQueryState } from 'nuqs'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; diff --git a/apps/app/src/app/api/auth/test-db/route.ts b/apps/app/src/app/api/auth/test-db/route.ts index 076a7a1d5..ed8233482 100644 --- a/apps/app/src/app/api/auth/test-db/route.ts +++ b/apps/app/src/app/api/auth/test-db/route.ts @@ -1,5 +1,5 @@ import { db } from '@comp/db'; -import { Departments } from '@prisma/client'; +import { Departments } from '@comp/db/types'; import { NextResponse } from 'next/server'; export const dynamic = 'force-dynamic'; diff --git a/apps/app/src/app/api/auth/test-login/route.ts b/apps/app/src/app/api/auth/test-login/route.ts index 4ca6f6e3c..bc21f1a85 100644 --- a/apps/app/src/app/api/auth/test-login/route.ts +++ b/apps/app/src/app/api/auth/test-login/route.ts @@ -1,6 +1,6 @@ import { auth } from '@/utils/auth'; import { db } from '@comp/db'; -import { Departments } from '@prisma/client'; +import { Departments } from '@comp/db/types'; import { NextRequest, NextResponse } from 'next/server'; // Force dynamic rendering for this route diff --git a/apps/app/src/components/forms/risks/InherentRiskForm.tsx b/apps/app/src/components/forms/risks/InherentRiskForm.tsx index 74723afa7..187b3eb0b 100644 --- a/apps/app/src/components/forms/risks/InherentRiskForm.tsx +++ b/apps/app/src/components/forms/risks/InherentRiskForm.tsx @@ -2,11 +2,11 @@ import { updateInherentRiskAction } from '@/actions/risk/update-inherent-risk-action'; import { updateInherentRiskSchema } from '@/actions/schema'; +import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Impact, Likelihood } from '@prisma/client'; import { Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/components/forms/risks/ResidualRiskForm.tsx b/apps/app/src/components/forms/risks/ResidualRiskForm.tsx index 8a149e1a2..4abf04f18 100644 --- a/apps/app/src/components/forms/risks/ResidualRiskForm.tsx +++ b/apps/app/src/components/forms/risks/ResidualRiskForm.tsx @@ -2,11 +2,11 @@ import { updateResidualRiskEnumAction } from '@/actions/risk/update-residual-risk-enum-action'; import { updateResidualRiskEnumSchema } from '@/actions/schema'; +import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Impact, Likelihood } from '@prisma/client'; import { Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useQueryState } from 'nuqs'; diff --git a/apps/portal/src/app/(app)/(home)/[orgId]/components/OrganizationDashboard.tsx b/apps/portal/src/app/(app)/(home)/[orgId]/components/OrganizationDashboard.tsx index 6a7bd3833..5a9e70a8f 100644 --- a/apps/portal/src/app/(app)/(home)/[orgId]/components/OrganizationDashboard.tsx +++ b/apps/portal/src/app/(app)/(home)/[orgId]/components/OrganizationDashboard.tsx @@ -1,5 +1,5 @@ import { db } from '@comp/db'; -import type { Member, Organization, User } from '@prisma/client'; +import type { Member, Organization, User } from '@comp/db/types'; import { NoAccessMessage } from '../../components/NoAccessMessage'; import type { FleetPolicy, Host } from '../types'; import { EmployeeTasksList } from './EmployeeTasksList'; diff --git a/apps/portal/src/app/(app)/(home)/components/Overview.tsx b/apps/portal/src/app/(app)/(home)/components/Overview.tsx index a559f0137..a37d252c9 100644 --- a/apps/portal/src/app/(app)/(home)/components/Overview.tsx +++ b/apps/portal/src/app/(app)/(home)/components/Overview.tsx @@ -1,6 +1,6 @@ import { db } from '@comp/db'; // Import types directly from @prisma/client -import type { Member, Organization, User } from '@prisma/client'; +import type { Member, Organization, User } from '@comp/db/types'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; // Removed EmployeeTasksList import as it's not used directly here From 639ac5e658383550e2a217733d97141b09a4435f Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:32:50 -0400 Subject: [PATCH 05/75] fix: update BINARY_TARGET for Prisma extension - Changed BINARY_TARGET from 'linux-arm64-openssl-3.0.x' to 'debian-openssl-3.0.x' for improved compatibility with the deployment environment. --- apps/app/customPrismaExtension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 5f625273c..30e77b058 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -43,7 +43,7 @@ export type PrismaExtensionOptions = { directUrlEnvVarName?: string; isUsingSchemaFolder?: boolean; }; -const BINARY_TARGET = 'linux-arm64-openssl-3.0.x'; +const BINARY_TARGET = 'debian-openssl-3.0.x'; export function prismaExtension(options: PrismaExtensionOptions): PrismaExtension { return new PrismaExtension(options); } From a9210a80a02826dbc8d08566a30567d0a3298a83 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 16:40:51 -0400 Subject: [PATCH 06/75] feat: enhance Prisma client generation process with detailed logging - Added informative echo statements to the Prisma client generation command for better visibility during execution. - Implemented checks for the existence of the generated Prisma client directory and added commands to copy the generated client to the standard location. - Included final checks for query engines in both the generated and client directories to ensure successful generation. --- apps/app/customPrismaExtension.ts | 38 +++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 30e77b058..116a90938 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -170,11 +170,17 @@ export class PrismaExtension implements BuildExtension { await cp(source, destination); } commands.push( - `${binaryForRuntime( - manifest.runtime, - )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( - ' ', - )}`, + `echo "🚀 Starting Prisma client generation (schema folder mode)..." && ` + + `echo "📋 Schema location: ./prisma/schema" && ` + + `ls -la ./prisma/ && ` + + `${binaryForRuntime( + manifest.runtime, + )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + ' ', + )} && ` + + `echo "✅ Prisma generation completed" && ` + + `echo "📂 Checking what was generated..." && ` + + `ls -la ./generated/ 2>/dev/null || echo "❌ No generated folder found after generation"`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); @@ -196,6 +202,28 @@ export class PrismaExtension implements BuildExtension { )}`, ); } + + // Add command to copy generated client to standard location for custom output directories + commands.push( + `echo "🔍 Checking for generated Prisma client..." && ` + + `ls -la ./generated/ 2>/dev/null || echo "❌ No ./generated/ directory found" && ` + + `if [ -d "./generated/prisma" ]; then ` + + `echo "✅ Found ./generated/prisma directory" && ` + + `ls -la ./generated/prisma/ && ` + + `echo "📂 Creating ./node_modules/@prisma/client directory..." && ` + + `mkdir -p ./node_modules/@prisma/client && ` + + `echo "📋 Copying from ./generated/prisma/ to ./node_modules/@prisma/client/..." && ` + + `cp -r ./generated/prisma/* ./node_modules/@prisma/client/ && ` + + `echo "✅ Copy completed successfully" && ` + + `ls -la ./node_modules/@prisma/client/; ` + + `else ` + + `echo "❌ ./generated/prisma directory not found"; ` + + `fi && ` + + `echo "🔍 Final check - looking for query engines..." && ` + + `find ./node_modules/@prisma/client -name "*engine*" 2>/dev/null || echo "❌ No engines found in @prisma/client" && ` + + `find ./generated -name "*engine*" 2>/dev/null || echo "❌ No engines found in generated/"`, + ); + const env: Record = {}; if (this.options.migrate) { // Copy the migrations directory to the build output path From 3fea35ab8743f476161c1a33f10efb29e087609a Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 17:33:57 -0400 Subject: [PATCH 07/75] chore: update Prisma dependencies and configuration - Added "@prisma/client" and "prisma" version 6.9.0 to package dependencies across multiple files. - Updated "@trycompai/db" dependency from "workspace:*" to "*" for better compatibility. - Removed the bunfig.toml file as it is no longer needed. --- apps/app/customPrismaExtension.ts | 44 ++++++------------------------- apps/app/package.json | 4 ++- apps/app/trigger.config.ts | 2 +- bun.lock | 10 ++++--- bunfig.toml | 2 -- yarn.lock | 10 ++++--- 6 files changed, 25 insertions(+), 47 deletions(-) delete mode 100644 bunfig.toml diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 116a90938..bc0898213 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -43,7 +43,7 @@ export type PrismaExtensionOptions = { directUrlEnvVarName?: string; isUsingSchemaFolder?: boolean; }; -const BINARY_TARGET = 'debian-openssl-3.0.x'; + export function prismaExtension(options: PrismaExtensionOptions): PrismaExtension { return new PrismaExtension(options); } @@ -170,17 +170,11 @@ export class PrismaExtension implements BuildExtension { await cp(source, destination); } commands.push( - `echo "🚀 Starting Prisma client generation (schema folder mode)..." && ` + - `echo "📋 Schema location: ./prisma/schema" && ` + - `ls -la ./prisma/ && ` + - `${binaryForRuntime( - manifest.runtime, - )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( - ' ', - )} && ` + - `echo "✅ Prisma generation completed" && ` + - `echo "📂 Checking what was generated..." && ` + - `ls -la ./generated/ 2>/dev/null || echo "❌ No generated folder found after generation"`, + `${binaryForRuntime( + manifest.runtime, + )} ../../node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + ' ', + )}`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); @@ -197,33 +191,11 @@ export class PrismaExtension implements BuildExtension { commands.push( `${binaryForRuntime( manifest.runtime, - )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + )} ../../node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( ' ', )}`, ); } - - // Add command to copy generated client to standard location for custom output directories - commands.push( - `echo "🔍 Checking for generated Prisma client..." && ` + - `ls -la ./generated/ 2>/dev/null || echo "❌ No ./generated/ directory found" && ` + - `if [ -d "./generated/prisma" ]; then ` + - `echo "✅ Found ./generated/prisma directory" && ` + - `ls -la ./generated/prisma/ && ` + - `echo "📂 Creating ./node_modules/@prisma/client directory..." && ` + - `mkdir -p ./node_modules/@prisma/client && ` + - `echo "📋 Copying from ./generated/prisma/ to ./node_modules/@prisma/client/..." && ` + - `cp -r ./generated/prisma/* ./node_modules/@prisma/client/ && ` + - `echo "✅ Copy completed successfully" && ` + - `ls -la ./node_modules/@prisma/client/; ` + - `else ` + - `echo "❌ ./generated/prisma directory not found"; ` + - `fi && ` + - `echo "🔍 Final check - looking for query engines..." && ` + - `find ./node_modules/@prisma/client -name "*engine*" 2>/dev/null || echo "❌ No engines found in @prisma/client" && ` + - `find ./generated -name "*engine*" 2>/dev/null || echo "❌ No engines found in generated/"`, - ); - const env: Record = {}; if (this.options.migrate) { // Copy the migrations directory to the build output path @@ -236,7 +208,7 @@ export class PrismaExtension implements BuildExtension { recursive: true, }); commands.push( - `${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js migrate deploy`, + `${binaryForRuntime(manifest.runtime)} ../../node_modules/prisma/build/index.js migrate deploy`, ); } env.DATABASE_URL = manifest.deploy.env?.DATABASE_URL; diff --git a/apps/app/package.json b/apps/app/package.json index 186183a5d..8ecfc388c 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -26,6 +26,7 @@ "@nangohq/frontend": "^0.53.2", "@next/third-parties": "^15.3.1", "@number-flow/react": "^0.5.9", + "@prisma/client": "6.9.0", "@prisma/instrumentation": "6.6.0", "@react-email/components": "^0.0.41", "@react-email/render": "^1.1.2", @@ -106,7 +107,8 @@ "tailwindcss": "^4.1.8", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "prisma": "6.9.0" }, "exports": { "./src/lib/encryption": "./src/lib/encryption.ts" diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index dc4d90f0f..98200d789 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -7,6 +7,7 @@ import { PrismaExtension } from './customPrismaExtension'; export default defineConfig({ project: 'proj_lhxjliiqgcdyqbgtucda', + runtime: 'bun', logLevel: 'log', instrumentations: [new PrismaInstrumentation()], maxDuration: 300, // 5 minutes @@ -15,7 +16,6 @@ export default defineConfig({ new PrismaExtension({ schema: '../../packages/db/prisma', version: '6.9.0', - clientGenerator: 'client', isUsingSchemaFolder: true, }), puppeteer(), diff --git a/bun.lock b/bun.lock index 73b234d1a..b5359a70e 100644 --- a/bun.lock +++ b/bun.lock @@ -82,6 +82,7 @@ "@nangohq/frontend": "^0.53.2", "@next/third-parties": "^15.3.1", "@number-flow/react": "^0.5.9", + "@prisma/client": "6.9.0", "@prisma/instrumentation": "6.6.0", "@react-email/components": "^0.0.41", "@react-email/render": "^1.1.2", @@ -97,7 +98,7 @@ "@tiptap/extension-table-row": "^2.22.3", "@trigger.dev/react-hooks": "3.3.17", "@trigger.dev/sdk": "3.3.17", - "@trycompai/db": "workspace:*", + "@trycompai/db": "*", "@types/canvas-confetti": "^1.9.0", "@types/three": "^0.177.0", "@uploadthing/react": "^7.3.0", @@ -119,6 +120,7 @@ "playwright-core": "^1.52.0", "posthog-js": "^1.236.6", "posthog-node": "^4.14.0", + "prisma": "6.9.0", "puppeteer-core": "^24.7.2", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -227,9 +229,11 @@ }, "packages/db": { "name": "@trycompai/db", - "version": "1.1.1", - "devDependencies": { + "version": "1.1.2", + "dependencies": { "@prisma/client": "6.9.0", + }, + "devDependencies": { "@trycompai/tsconfig": "workspace:*", "prisma": "6.9.0", "ts-node": "^10.9.2", diff --git a/bunfig.toml b/bunfig.toml deleted file mode 100644 index 1fe90030c..000000000 --- a/bunfig.toml +++ /dev/null @@ -1,2 +0,0 @@ -[install.lockfile] -print = "yarn" \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index e4a696bd2..f0e2350ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1340,6 +1340,7 @@ "@nangohq/frontend" "^0.53.2" "@next/third-parties" "^15.3.1" "@number-flow/react" "^0.5.9" + "@prisma/client" "6.9.0" "@prisma/instrumentation" "6.6.0" "@react-email/components" "^0.0.41" "@react-email/render" "^1.1.2" @@ -1356,7 +1357,7 @@ "@trigger.dev/react-hooks" "3.3.17" "@trigger.dev/sdk" "3.3.17" dependencies: - "@trycompai/db" "workspace:*" + "@trycompai/db" "*" dependencies: "@types/canvas-confetti" "^1.9.0" "@types/three" "^0.177.0" @@ -1379,6 +1380,7 @@ playwright-core "^1.52.0" posthog-js "^1.236.6" posthog-node "^4.14.0" + prisma "6.9.0" puppeteer-core "^24.7.2" react "^19.1.0" react-dom "^19.1.0" @@ -5591,11 +5593,9 @@ posthog-js "^1.236.6" posthog-node "^4.14.0" -"@trycompai/db@^workspace:packages/db", "@trycompai/db@workspace:*": +"@trycompai/db@^workspace:packages/db", "@trycompai/db@*": version "workspace:packages/db" resolved "workspace:packages/db" - devDependencies: - "@prisma/client" "6.9.0" devDependencies: "@trycompai/tsconfig" "workspace:*" devDependencies: @@ -5603,6 +5603,8 @@ ts-node "^10.9.2" tsup "^8.5.0" typescript "^5.8.3" + dependencies: + "@prisma/client" "6.9.0" "@trycompai/email@^workspace:packages/email", "@trycompai/email@workspace:*": version "workspace:packages/email" From 94842553fbfa4a0c94969bfb42ed57162c604f79 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 17:34:16 -0400 Subject: [PATCH 08/75] chore: update package.json to remove duplicate Prisma entry - Removed duplicate "prisma" entry from dependencies in package.json. - Ensured "prisma" version 6.9.0 remains as a single entry for clarity. --- apps/app/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/package.json b/apps/app/package.json index 8ecfc388c..c7db11d4b 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -104,11 +104,11 @@ "fleetctl": "^4.68.1", "jsdom": "^26.1.0", "postcss": "^8.5.4", + "prisma": "6.9.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4", - "prisma": "6.9.0" + "vitest": "^3.2.4" }, "exports": { "./src/lib/encryption": "./src/lib/encryption.ts" From a55ded7bf2a40883296d88a09b7f879643f06fa6 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 17:45:42 -0400 Subject: [PATCH 09/75] chore: remove 'bun' runtime configuration from trigger.config.ts - Eliminated the 'runtime' field from the trigger configuration for clarity and to align with current project standards. --- apps/app/trigger.config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index 98200d789..3a60519a6 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -7,7 +7,6 @@ import { PrismaExtension } from './customPrismaExtension'; export default defineConfig({ project: 'proj_lhxjliiqgcdyqbgtucda', - runtime: 'bun', logLevel: 'log', instrumentations: [new PrismaInstrumentation()], maxDuration: 300, // 5 minutes From cbc1d3680b438f07de3b9725bb96456b35833a96 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 18:40:41 -0400 Subject: [PATCH 10/75] feat: add shouldGenerateTypes option to PrismaExtensionOptions - Introduced a new boolean option, shouldGenerateTypes, to the PrismaExtensionOptions type for enhanced configuration flexibility. - Updated command paths in the PrismaExtension class to remove redundant '../../' for improved clarity and consistency. --- apps/app/customPrismaExtension.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index bc0898213..808c05e02 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -42,6 +42,7 @@ export type PrismaExtensionOptions = { clientGenerator?: string; directUrlEnvVarName?: string; isUsingSchemaFolder?: boolean; + shouldGenerateTypes?: boolean; }; export function prismaExtension(options: PrismaExtensionOptions): PrismaExtension { @@ -172,7 +173,7 @@ export class PrismaExtension implements BuildExtension { commands.push( `${binaryForRuntime( manifest.runtime, - )} ../../node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( ' ', )}`, ); @@ -191,7 +192,7 @@ export class PrismaExtension implements BuildExtension { commands.push( `${binaryForRuntime( manifest.runtime, - )} ../../node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( ' ', )}`, ); @@ -208,7 +209,7 @@ export class PrismaExtension implements BuildExtension { recursive: true, }); commands.push( - `${binaryForRuntime(manifest.runtime)} ../../node_modules/prisma/build/index.js migrate deploy`, + `${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js migrate deploy`, ); } env.DATABASE_URL = manifest.deploy.env?.DATABASE_URL; From fda190d779ea10be4ed986d54599d6fac110f0f0 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 18:48:12 -0400 Subject: [PATCH 11/75] chore: remove binaryTargets from Prisma schema configuration - Eliminated the binaryTargets field from the Prisma schema for simplification and to streamline the configuration process. --- packages/db/prisma/schema.prisma | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 6e3744960..2999b9ae5 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1,7 +1,6 @@ generator client { provider = "prisma-client-js" previewFeatures = ["driverAdapters", "postgresqlExtensions"] - binaryTargets = ["native", "darwin-arm64", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"] output = "../generated/prisma" } From 0c5afa71e20a3069250552ff0a8723375e0a9a74 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 18:52:36 -0400 Subject: [PATCH 12/75] chore: update Prisma configuration and dependencies in bun.lock and trigger.config.ts - Removed the duplicate "prisma" entry from bun.lock and reintroduced it in the correct location. - Updated the trigger.config.ts to use the new prismaExtension from @trigger.dev/build/extensions/prisma, replacing the custom PrismaExtension import for improved consistency. --- apps/app/trigger.config.ts | 6 +++--- bun.lock | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index 3a60519a6..e6deb5f7a 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -3,7 +3,8 @@ import { syncVercelEnvVars } from '@trigger.dev/build/extensions/core'; import { puppeteer } from '@trigger.dev/build/extensions/puppeteer'; import { defineConfig } from '@trigger.dev/sdk/v3'; -import { PrismaExtension } from './customPrismaExtension'; +// import { PrismaExtension } from './customPrismaExtension'; +import { prismaExtension } from '@trigger.dev/build/extensions/prisma'; export default defineConfig({ project: 'proj_lhxjliiqgcdyqbgtucda', @@ -12,10 +13,9 @@ export default defineConfig({ maxDuration: 300, // 5 minutes build: { extensions: [ - new PrismaExtension({ + prismaExtension({ schema: '../../packages/db/prisma', version: '6.9.0', - isUsingSchemaFolder: true, }), puppeteer(), syncVercelEnvVars(), diff --git a/bun.lock b/bun.lock index b5359a70e..f9381964d 100644 --- a/bun.lock +++ b/bun.lock @@ -120,7 +120,6 @@ "playwright-core": "^1.52.0", "posthog-js": "^1.236.6", "posthog-node": "^4.14.0", - "prisma": "6.9.0", "puppeteer-core": "^24.7.2", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -151,7 +150,7 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", - "@trigger.dev/build": "3.3.17", + "@trigger.dev/build": "^3.3.17", "@types/d3": "^7.4.3", "@types/node": "^24.0.3", "@vitejs/plugin-react": "^4.6.0", @@ -161,6 +160,7 @@ "fleetctl": "^4.68.1", "jsdom": "^26.1.0", "postcss": "^8.5.4", + "prisma": "6.9.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", From 6915e8dd2c4c473010c10beaa3ed22ec25f84b6d Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:05:52 -0400 Subject: [PATCH 13/75] chore: update Prisma schema configuration to refine preview features and add binary targets - Removed the "driverAdapters" from previewFeatures for clarity. - Added "binaryTargets" with values "native" and "debian-openssl-3.0.x" to enhance compatibility. --- packages/db/prisma/schema.prisma | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 2999b9ae5..a4e766342 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1,6 +1,7 @@ generator client { provider = "prisma-client-js" - previewFeatures = ["driverAdapters", "postgresqlExtensions"] + previewFeatures = ["postgresqlExtensions"] + binaryTargets = ["native", "debian-openssl-3.0.x"] output = "../generated/prisma" } From d21428674ab39d32b86849524c91fed4dd24686e Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:23:13 -0400 Subject: [PATCH 14/75] chore: update trigger.config.ts to use custom PrismaExtension and refine configuration - Reintroduced the custom PrismaExtension import for enhanced customization. - Updated the PrismaExtension instantiation to include isUsingSchemaFolder for improved schema handling. --- apps/app/trigger.config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index e6deb5f7a..3a60519a6 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -3,8 +3,7 @@ import { syncVercelEnvVars } from '@trigger.dev/build/extensions/core'; import { puppeteer } from '@trigger.dev/build/extensions/puppeteer'; import { defineConfig } from '@trigger.dev/sdk/v3'; -// import { PrismaExtension } from './customPrismaExtension'; -import { prismaExtension } from '@trigger.dev/build/extensions/prisma'; +import { PrismaExtension } from './customPrismaExtension'; export default defineConfig({ project: 'proj_lhxjliiqgcdyqbgtucda', @@ -13,9 +12,10 @@ export default defineConfig({ maxDuration: 300, // 5 minutes build: { extensions: [ - prismaExtension({ + new PrismaExtension({ schema: '../../packages/db/prisma', version: '6.9.0', + isUsingSchemaFolder: true, }), puppeteer(), syncVercelEnvVars(), From c709427c54ce8c26e092864f43d0086d0b285094 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:36:15 -0400 Subject: [PATCH 15/75] chore: enhance deployment logging and update Prisma environment configuration - Updated the deployment command in the GitHub Actions workflow to include a debug log level for better visibility during deployment. - Modified the PrismaExtension environment configuration to include the PRISMA_CLI_BINARY_TARGETS for improved compatibility. --- .github/workflows/trigger-tasks-deploy-main.yml | 2 +- apps/app/customPrismaExtension.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/trigger-tasks-deploy-main.yml b/.github/workflows/trigger-tasks-deploy-main.yml index cc4ac203e..53cde51ea 100644 --- a/.github/workflows/trigger-tasks-deploy-main.yml +++ b/.github/workflows/trigger-tasks-deploy-main.yml @@ -30,4 +30,4 @@ jobs: VERCEL_ACCESS_TOKEN: ${{ secrets.VERCEL_ACCESS_TOKEN }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_TEAM_ID: ${{ secrets.VERCEL_TEAM_ID }} - run: bunx trigger.dev@latest deploy --env staging + run: bunx trigger.dev@latest deploy --env staging --log-level debug diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 808c05e02..fd1e1ac15 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -245,7 +245,10 @@ export class PrismaExtension implements BuildExtension { prisma: version, }, build: { - env, + env: { + ...env, + PRISMA_CLI_BINARY_TARGETS: 'native,debian-openssl-3.0.x', + }, }, }); } From 09bf5fcbeb522d65c0c3b0336cf356e68c080fee Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:40:11 -0400 Subject: [PATCH 16/75] chore: update Prisma CLI binary targets for compatibility - Modified the PRISMA_CLI_BINARY_TARGETS in the PrismaExtension environment configuration to remove 'native' and streamline the setup for improved compatibility. --- apps/app/customPrismaExtension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index fd1e1ac15..e093f950f 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -247,7 +247,7 @@ export class PrismaExtension implements BuildExtension { build: { env: { ...env, - PRISMA_CLI_BINARY_TARGETS: 'native,debian-openssl-3.0.x', + PRISMA_CLI_BINARY_TARGETS: 'debian-openssl-3.0.x', }, }, }); From 996e09a3a5bb200b5a43eb39825a4e7e12096a31 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:46:22 -0400 Subject: [PATCH 17/75] chore: add commands to copy generated Prisma client to expected location - Introduced commands in the PrismaExtension to create the necessary directory and copy the generated Prisma client to 'packages/db/generated' for improved project structure and accessibility. --- apps/app/customPrismaExtension.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index e093f950f..371097004 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -177,6 +177,12 @@ export class PrismaExtension implements BuildExtension { ' ', )}`, ); + + // Add commands to copy the generated client to the expected location + commands.push( + `mkdir -p packages/db/generated`, + `cp -r ./prisma/generated/prisma packages/db/generated/`, + ); } else { prismaDir = dirname(this._resolvedSchemaPath); // Now we need to add a layer that: @@ -192,10 +198,16 @@ export class PrismaExtension implements BuildExtension { commands.push( `${binaryForRuntime( manifest.runtime, - )} node_modules/prisma/build/index.js generate --schema=./prisma/schema ${generatorFlags.join( + )} node_modules/prisma/build/index.js generate --schema=./prisma/schema.prisma ${generatorFlags.join( ' ', )}`, ); + + // Add commands to copy the generated client to the expected location + commands.push( + `mkdir -p packages/db/generated`, + `cp -r ./prisma/generated/prisma packages/db/generated/`, + ); } const env: Record = {}; if (this.options.migrate) { From a53cb42d5c6212df3931bd04f76afd9061f0a3eb Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:55:28 -0400 Subject: [PATCH 18/75] fix: update Prisma extension to properly handle generated client location in Trigger.dev deployment --- apps/app/customPrismaExtension.ts | 55 +++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 371097004..cddfc0469 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -104,6 +104,7 @@ export class PrismaExtension implements BuildExtension { const commands: string[] = []; let prismaDir: string | undefined; const generatorFlags: string[] = []; + if (this.options.clientGenerator) { generatorFlags.push(`--generator=${this.options.clientGenerator}`); } @@ -177,11 +178,32 @@ export class PrismaExtension implements BuildExtension { ' ', )}`, ); - - // Add commands to copy the generated client to the expected location + + // Debug: List what was generated + commands.push( + `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, + `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, + ); + + // Ensure the parent directories exist commands.push( + `mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`, - `cp -r ./prisma/generated/prisma packages/db/generated/`, + ); + + // Copy the generated client to where the code expects it + // Try multiple source locations to handle different generation scenarios + commands.push( + `if [ -d "./prisma/generated/prisma" ]; then cp -r ./prisma/generated/prisma /app/packages/db/generated/ && echo "Copied from ./prisma/generated/prisma"; fi`, + `if [ -d "./generated/prisma" ]; then cp -r ./generated/prisma /app/packages/db/generated/ && echo "Copied from ./generated/prisma"; fi`, + `if [ -d "../generated/prisma" ]; then cp -r ../generated/prisma /app/packages/db/generated/ && echo "Copied from ../generated/prisma"; fi`, + // Also symlink for relative paths + `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, + ); + + // Verify the final result + commands.push( + `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); @@ -202,11 +224,32 @@ export class PrismaExtension implements BuildExtension { ' ', )}`, ); - - // Add commands to copy the generated client to the expected location + + // Debug: List what was generated + commands.push( + `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, + `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, + ); + + // Ensure the parent directories exist commands.push( + `mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`, - `cp -r ./prisma/generated/prisma packages/db/generated/`, + ); + + // Copy the generated client to where the code expects it + // Try multiple source locations to handle different generation scenarios + commands.push( + `if [ -d "./prisma/generated/prisma" ]; then cp -r ./prisma/generated/prisma /app/packages/db/generated/ && echo "Copied from ./prisma/generated/prisma"; fi`, + `if [ -d "./generated/prisma" ]; then cp -r ./generated/prisma /app/packages/db/generated/ && echo "Copied from ./generated/prisma"; fi`, + `if [ -d "../generated/prisma" ]; then cp -r ../generated/prisma /app/packages/db/generated/ && echo "Copied from ../generated/prisma"; fi`, + // Also symlink for relative paths + `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, + ); + + // Verify the final result + commands.push( + `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, ); } const env: Record = {}; From 9182fd221580d3f46fb05da0804dcc2b00b42ec1 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:55:59 -0400 Subject: [PATCH 19/75] style: fix prettier formatting in customPrismaExtension.ts --- apps/app/customPrismaExtension.ts | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index cddfc0469..2f347f6d3 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -104,7 +104,7 @@ export class PrismaExtension implements BuildExtension { const commands: string[] = []; let prismaDir: string | undefined; const generatorFlags: string[] = []; - + if (this.options.clientGenerator) { generatorFlags.push(`--generator=${this.options.clientGenerator}`); } @@ -178,19 +178,16 @@ export class PrismaExtension implements BuildExtension { ' ', )}`, ); - + // Debug: List what was generated commands.push( `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, ); - + // Ensure the parent directories exist - commands.push( - `mkdir -p /app/packages/db/generated`, - `mkdir -p packages/db/generated`, - ); - + commands.push(`mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`); + // Copy the generated client to where the code expects it // Try multiple source locations to handle different generation scenarios commands.push( @@ -200,7 +197,7 @@ export class PrismaExtension implements BuildExtension { // Also symlink for relative paths `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, ); - + // Verify the final result commands.push( `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, @@ -224,19 +221,16 @@ export class PrismaExtension implements BuildExtension { ' ', )}`, ); - + // Debug: List what was generated commands.push( `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, ); - + // Ensure the parent directories exist - commands.push( - `mkdir -p /app/packages/db/generated`, - `mkdir -p packages/db/generated`, - ); - + commands.push(`mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`); + // Copy the generated client to where the code expects it // Try multiple source locations to handle different generation scenarios commands.push( @@ -246,7 +240,7 @@ export class PrismaExtension implements BuildExtension { // Also symlink for relative paths `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, ); - + // Verify the final result commands.push( `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, From 556bd1721eada7513e50e46d6acd72e60b61b610 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 19:58:55 -0400 Subject: [PATCH 20/75] fix: simplify Prisma extension to copy generated client to correct location --- apps/app/customPrismaExtension.ts | 66 ++++++++++++++----------------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 2f347f6d3..4e52937e7 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -179,28 +179,25 @@ export class PrismaExtension implements BuildExtension { )}`, ); - // Debug: List what was generated + // Debug: Show current working directory and structure commands.push( - `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, - `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, + `echo "Current directory: $(pwd)"`, + `echo "Directory structure:"`, + `ls -la`, + `echo "Looking for generated Prisma client:"`, + `find . -name "runtime" -type d | head -20`, ); - // Ensure the parent directories exist - commands.push(`mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`); - - // Copy the generated client to where the code expects it - // Try multiple source locations to handle different generation scenarios - commands.push( - `if [ -d "./prisma/generated/prisma" ]; then cp -r ./prisma/generated/prisma /app/packages/db/generated/ && echo "Copied from ./prisma/generated/prisma"; fi`, - `if [ -d "./generated/prisma" ]; then cp -r ./generated/prisma /app/packages/db/generated/ && echo "Copied from ./generated/prisma"; fi`, - `if [ -d "../generated/prisma" ]; then cp -r ../generated/prisma /app/packages/db/generated/ && echo "Copied from ../generated/prisma"; fi`, - // Also symlink for relative paths - `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, - ); - - // Verify the final result + // The generated client will be at ./prisma/generated/prisma + // But packages/db/src/client.ts expects it at ../generated/prisma relative to src + // Which means it should be at packages/db/generated/prisma commands.push( - `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, + `echo "Ensuring target directory exists..."`, + `mkdir -p packages/db/generated`, + `echo "Copying generated Prisma client..."`, + `cp -r ./prisma/generated/prisma packages/db/generated/`, + `echo "Verifying copy..."`, + `ls -la packages/db/generated/prisma/ | head -10`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); @@ -222,28 +219,25 @@ export class PrismaExtension implements BuildExtension { )}`, ); - // Debug: List what was generated - commands.push( - `ls -la ./prisma/generated/prisma/ || echo "No generated client at ./prisma/generated/prisma/"`, - `ls -la ./generated/prisma/ || echo "No generated client at ./generated/prisma/"`, - ); - - // Ensure the parent directories exist - commands.push(`mkdir -p /app/packages/db/generated`, `mkdir -p packages/db/generated`); - - // Copy the generated client to where the code expects it - // Try multiple source locations to handle different generation scenarios + // Debug: Show current working directory and structure commands.push( - `if [ -d "./prisma/generated/prisma" ]; then cp -r ./prisma/generated/prisma /app/packages/db/generated/ && echo "Copied from ./prisma/generated/prisma"; fi`, - `if [ -d "./generated/prisma" ]; then cp -r ./generated/prisma /app/packages/db/generated/ && echo "Copied from ./generated/prisma"; fi`, - `if [ -d "../generated/prisma" ]; then cp -r ../generated/prisma /app/packages/db/generated/ && echo "Copied from ../generated/prisma"; fi`, - // Also symlink for relative paths - `if [ -d "/app/packages/db/generated/prisma" ]; then cd packages/db && ln -sf /app/packages/db/generated . && echo "Created symlink"; fi`, + `echo "Current directory: $(pwd)"`, + `echo "Directory structure:"`, + `ls -la`, + `echo "Looking for generated Prisma client:"`, + `find . -name "runtime" -type d | head -20`, ); - // Verify the final result + // The generated client will be at ./prisma/generated/prisma + // But packages/db/src/client.ts expects it at ../generated/prisma relative to src + // Which means it should be at packages/db/generated/prisma commands.push( - `ls -la /app/packages/db/generated/prisma/ || echo "ERROR: No client at final location"`, + `echo "Ensuring target directory exists..."`, + `mkdir -p packages/db/generated`, + `echo "Copying generated Prisma client..."`, + `cp -r ./prisma/generated/prisma packages/db/generated/`, + `echo "Verifying copy..."`, + `ls -la packages/db/generated/prisma/ | head -10`, ); } const env: Record = {}; From 8d2fe332c99b5b65505c728ea9ac5e307fa87bd3 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 20:15:16 -0400 Subject: [PATCH 21/75] fix: ensure Prisma query engine binary is properly copied in Trigger.dev deployment --- apps/app/customPrismaExtension.ts | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 4e52937e7..9a6517922 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -185,7 +185,9 @@ export class PrismaExtension implements BuildExtension { `echo "Directory structure:"`, `ls -la`, `echo "Looking for generated Prisma client:"`, - `find . -name "runtime" -type d | head -20`, + `find . -name "libquery_engine*.node" -type f | head -20`, + `echo "Prisma generated structure:"`, + `ls -la ./prisma/generated/prisma/`, ); // The generated client will be at ./prisma/generated/prisma @@ -197,7 +199,14 @@ export class PrismaExtension implements BuildExtension { `echo "Copying generated Prisma client..."`, `cp -r ./prisma/generated/prisma packages/db/generated/`, `echo "Verifying copy..."`, - `ls -la packages/db/generated/prisma/ | head -10`, + `ls -la packages/db/generated/prisma/`, + `echo "Looking for query engine in copied location:"`, + `find packages/db/generated/prisma -name "*.node" -type f`, + // Also copy to the app level for the absolute path + `mkdir -p /app/packages/db/generated`, + `cp -r ./prisma/generated/prisma /app/packages/db/generated/`, + `echo "Verifying absolute path copy:"`, + `ls -la /app/packages/db/generated/prisma/`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); @@ -225,7 +234,9 @@ export class PrismaExtension implements BuildExtension { `echo "Directory structure:"`, `ls -la`, `echo "Looking for generated Prisma client:"`, - `find . -name "runtime" -type d | head -20`, + `find . -name "libquery_engine*.node" -type f | head -20`, + `echo "Prisma generated structure:"`, + `ls -la ./prisma/generated/prisma/`, ); // The generated client will be at ./prisma/generated/prisma @@ -237,7 +248,14 @@ export class PrismaExtension implements BuildExtension { `echo "Copying generated Prisma client..."`, `cp -r ./prisma/generated/prisma packages/db/generated/`, `echo "Verifying copy..."`, - `ls -la packages/db/generated/prisma/ | head -10`, + `ls -la packages/db/generated/prisma/`, + `echo "Looking for query engine in copied location:"`, + `find packages/db/generated/prisma -name "*.node" -type f`, + // Also copy to the app level for the absolute path + `mkdir -p /app/packages/db/generated`, + `cp -r ./prisma/generated/prisma /app/packages/db/generated/`, + `echo "Verifying absolute path copy:"`, + `ls -la /app/packages/db/generated/prisma/`, ); } const env: Record = {}; @@ -279,6 +297,7 @@ export class PrismaExtension implements BuildExtension { env, dependencies: { prisma: version, + '@prisma/client': version, }, }); context.addLayer({ @@ -286,6 +305,7 @@ export class PrismaExtension implements BuildExtension { commands, dependencies: { prisma: version, + '@prisma/client': version, }, build: { env: { From 7c3af894a75439a2df512e79d834e83cd7ca7a9f Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 20:19:39 -0400 Subject: [PATCH 22/75] fix: copy Prisma binary to locations where runtime is searching --- apps/app/customPrismaExtension.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 9a6517922..efe3bcc22 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -202,11 +202,16 @@ export class PrismaExtension implements BuildExtension { `ls -la packages/db/generated/prisma/`, `echo "Looking for query engine in copied location:"`, `find packages/db/generated/prisma -name "*.node" -type f`, - // Also copy to the app level for the absolute path - `mkdir -p /app/packages/db/generated`, - `cp -r ./prisma/generated/prisma /app/packages/db/generated/`, - `echo "Verifying absolute path copy:"`, - `ls -la /app/packages/db/generated/prisma/`, + // Copy to the locations where Prisma is actually looking + `echo "Copying to /app/generated/prisma (where Prisma is looking)..."`, + `mkdir -p /app/generated`, + `cp -r ./prisma/generated/prisma /app/generated/`, + `echo "Also copying binary to /app/prisma..."`, + `mkdir -p /app/prisma`, + `cp ./prisma/generated/prisma/libquery_engine-*.node /app/prisma/`, + `echo "Verifying copies:"`, + `ls -la /app/generated/prisma/ | grep -E "(\.node|\.js)$"`, + `ls -la /app/prisma/*.node || echo "No .node files in /app/prisma"`, ); } else { prismaDir = dirname(this._resolvedSchemaPath); From 880e2dcb24121fd4401a2ba8d7c3746f5a158db7 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 20:51:10 -0400 Subject: [PATCH 23/75] chore: remove "type" field from package.json for consistency --- apps/app/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/app/package.json b/apps/app/package.json index c7db11d4b..0946accc0 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -145,6 +145,5 @@ "test:watch": "vitest --watch", "trigger:dev": "npx trigger.dev@latest dev", "typecheck": "tsc --noEmit" - }, - "type": "module" + } } From d77700644985cbcbcd702e08e458ad6b24e44d49 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 20:58:41 -0400 Subject: [PATCH 24/75] chore: add RHEL binary target for Prisma client compatibility --- packages/db/prisma/schema.prisma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index a4e766342..6213d179e 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1,7 +1,7 @@ generator client { provider = "prisma-client-js" previewFeatures = ["postgresqlExtensions"] - binaryTargets = ["native", "debian-openssl-3.0.x"] + binaryTargets = ["native", "debian-openssl-3.0.x", "rhel-openssl-3.0.x"] output = "../generated/prisma" } From a9ee09aebc52ed2f8766e90c526a81909495228c Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Mon, 28 Jul 2025 21:09:29 -0400 Subject: [PATCH 25/75] fix: ensure Prisma client is generated during Next.js build for deployment --- apps/app/next.config.ts | 1 + apps/app/package.json | 2 +- packages/db/package.json | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 2071dcc56..f18d66598 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -4,6 +4,7 @@ import './src/env.mjs'; const config: NextConfig = { poweredByHeader: false, reactStrictMode: true, + serverExternalPackages: ['@prisma/client', 'prisma'], turbopack: { resolveAlias: { underscore: 'lodash', diff --git a/apps/app/package.json b/apps/app/package.json index 0946accc0..26f6f2095 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -126,7 +126,7 @@ "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "next build --turbopack", + "build": "cd ../../packages/db && bunx prisma generate && cd ../../apps/app && next build --turbopack", "deploy:trigger-prod": "npx trigger.dev@latest deploy", "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", diff --git a/packages/db/package.json b/packages/db/package.json index 7f4bbd0eb..40a91f297 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -19,6 +19,8 @@ }, "files": [ "dist/**", + "generated/**", + "prisma/**", "scripts/setup-consumer.sh", "README.md", "INTEGRATION_GUIDE.md" @@ -62,6 +64,7 @@ "docker:up": "docker-compose up -d", "lint": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json}' 'prisma/**/*.prisma' && tsc --noEmit", "postbuild": "node scripts/combine-schemas.js", + "postinstall": "prisma generate", "typecheck": "tsc --noEmit" }, "tsup": { From fa43f5eb9c75aba50fa232bbc8db8fe84f823a82 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 09:46:31 -0400 Subject: [PATCH 26/75] fix: ensure Prisma binaries are included in Vercel deployment --- apps/app/next.config.ts | 5 ++++- apps/app/package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index f18d66598..ffff1b777 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -4,12 +4,15 @@ import './src/env.mjs'; const config: NextConfig = { poweredByHeader: false, reactStrictMode: true, - serverExternalPackages: ['@prisma/client', 'prisma'], turbopack: { resolveAlias: { underscore: 'lodash', }, }, + outputFileTracingIncludes: { + '/api/**/*': ['../../packages/db/generated/prisma/**/*'], + '/**/*': ['../../packages/db/generated/prisma/**/*'], + }, images: { remotePatterns: [ { diff --git a/apps/app/package.json b/apps/app/package.json index 26f6f2095..e88e682c8 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -126,7 +126,7 @@ "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "cd ../../packages/db && bunx prisma generate && cd ../../apps/app && next build --turbopack", + "build": "prisma generate --schema=../../packages/db/prisma/schema.prisma && next build --turbopack", "deploy:trigger-prod": "npx trigger.dev@latest deploy", "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", From 6ef50339a5ef29931cc1991241e0ca777db21f7b Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 09:48:21 -0400 Subject: [PATCH 27/75] fix: comprehensive Prisma deployment fix for Vercel monorepo - Update build script to properly navigate monorepo structure - Add postinstall script that runs only on Vercel - Configure outputFileTracingRoot for monorepo support - Include Prisma binaries in build output with outputFileTracingIncludes --- apps/app/next.config.ts | 2 ++ apps/app/package.json | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index ffff1b777..062492a45 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -1,5 +1,6 @@ import type { NextConfig } from 'next'; import './src/env.mjs'; +import * as path from 'path'; const config: NextConfig = { poweredByHeader: false, @@ -9,6 +10,7 @@ const config: NextConfig = { underscore: 'lodash', }, }, + outputFileTracingRoot: path.join(__dirname, '../../'), outputFileTracingIncludes: { '/api/**/*': ['../../packages/db/generated/prisma/**/*'], '/**/*': ['../../packages/db/generated/prisma/**/*'], diff --git a/apps/app/package.json b/apps/app/package.json index e88e682c8..6d4fece17 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -126,10 +126,11 @@ "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "prisma generate --schema=../../packages/db/prisma/schema.prisma && next build --turbopack", + "build": "cd ../.. && cd packages/db && npx prisma generate && cd ../.. && cd apps/app && next build", "deploy:trigger-prod": "npx trigger.dev@latest deploy", "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", + "postinstall": "if [ \"$VERCEL\" = \"1\" ]; then cd ../../packages/db && npx prisma generate; fi", "start": "next start", "test": "vitest", "test:all": "./scripts/test-all.sh", From 1e01ae418cdca30e722b35e8c0a32791379aef04 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 09:48:54 -0400 Subject: [PATCH 28/75] fix: restore import of environment variables in Next.js config --- apps/app/next.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 062492a45..1a99ad300 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -1,6 +1,6 @@ import type { NextConfig } from 'next'; -import './src/env.mjs'; import * as path from 'path'; +import './src/env.mjs'; const config: NextConfig = { poweredByHeader: false, From e877714c77c2cb3ce6a238518cfc4e0de162cd25 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 09:53:10 -0400 Subject: [PATCH 29/75] fix: ensure Prisma binaries are included in Vercel deployment with custom output path --- apps/app/next.config.ts | 20 ++++++++++++++++++-- apps/app/package.json | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 1a99ad300..59cdd8570 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -12,8 +12,14 @@ const config: NextConfig = { }, outputFileTracingRoot: path.join(__dirname, '../../'), outputFileTracingIncludes: { - '/api/**/*': ['../../packages/db/generated/prisma/**/*'], - '/**/*': ['../../packages/db/generated/prisma/**/*'], + '/api/**/*': [ + '../../packages/db/generated/prisma/**/*', + '../../packages/db/generated/prisma/libquery_engine-*.node', + ], + '/**/*': [ + '../../packages/db/generated/prisma/**/*', + '../../packages/db/generated/prisma/libquery_engine-*.node', + ], }, images: { remotePatterns: [ @@ -51,6 +57,16 @@ const config: NextConfig = { ]; }, skipTrailingSlashRedirect: true, + webpack: (config, { isServer }) => { + if (isServer) { + // Ensure Prisma binaries are copied + config.externals.push({ + '@prisma/client': 'commonjs @prisma/client', + '../generated/prisma': 'commonjs ../generated/prisma', + }); + } + return config; + }, }; if (process.env.VERCEL !== '1') { diff --git a/apps/app/package.json b/apps/app/package.json index 6d4fece17..03634dcc6 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -126,7 +126,7 @@ "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "cd ../.. && cd packages/db && npx prisma generate && cd ../.. && cd apps/app && next build", + "build": "cd ../../packages/db && rm -rf generated && PRISMA_CLI_BINARY_TARGETS='rhel-openssl-3.0.x' bunx prisma generate && cd ../../apps/app && next build", "deploy:trigger-prod": "npx trigger.dev@latest deploy", "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", From ab60dc8cd33be44275e2a4c0e449b0c753e51da9 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 09:54:14 -0400 Subject: [PATCH 30/75] refactor: simplify Next.js configuration and build script for Prisma integration - Remove unnecessary outputFileTracingIncludes for Prisma binaries - Update build script to eliminate redundant commands for Prisma generation --- apps/app/next.config.ts | 20 -------------------- apps/app/package.json | 2 +- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index 59cdd8570..d38f91a6b 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -11,16 +11,6 @@ const config: NextConfig = { }, }, outputFileTracingRoot: path.join(__dirname, '../../'), - outputFileTracingIncludes: { - '/api/**/*': [ - '../../packages/db/generated/prisma/**/*', - '../../packages/db/generated/prisma/libquery_engine-*.node', - ], - '/**/*': [ - '../../packages/db/generated/prisma/**/*', - '../../packages/db/generated/prisma/libquery_engine-*.node', - ], - }, images: { remotePatterns: [ { @@ -57,16 +47,6 @@ const config: NextConfig = { ]; }, skipTrailingSlashRedirect: true, - webpack: (config, { isServer }) => { - if (isServer) { - // Ensure Prisma binaries are copied - config.externals.push({ - '@prisma/client': 'commonjs @prisma/client', - '../generated/prisma': 'commonjs ../generated/prisma', - }); - } - return config; - }, }; if (process.env.VERCEL !== '1') { diff --git a/apps/app/package.json b/apps/app/package.json index 03634dcc6..59b9532bd 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -126,7 +126,7 @@ "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "cd ../../packages/db && rm -rf generated && PRISMA_CLI_BINARY_TARGETS='rhel-openssl-3.0.x' bunx prisma generate && cd ../../apps/app && next build", + "build": "cd ../../packages/db && prisma generate && cd ../../apps/app && next build", "deploy:trigger-prod": "npx trigger.dev@latest deploy", "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", From 3fccc8f242613dd9cfb0db23e48ffde01d2ca14d Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Tue, 29 Jul 2025 10:02:49 -0400 Subject: [PATCH 31/75] chore: add buildspec for database migrations - Introduced a new buildspec.yml file for the database package to automate dependency installation, Prisma client generation, and database migrations. - Included commands for verifying migration success and caching node modules to optimize build performance. --- packages/db/buildspec.yml | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 packages/db/buildspec.yml diff --git a/packages/db/buildspec.yml b/packages/db/buildspec.yml new file mode 100644 index 000000000..4ee0d9f0e --- /dev/null +++ b/packages/db/buildspec.yml @@ -0,0 +1,43 @@ +version: 0.2 + +phases: + pre_build: + commands: + - echo "Installing dependencies for migrations..." + - curl -fsSL https://bun.sh/install | bash + - export PATH="/root/.bun/bin:$PATH" + + build: + commands: + # Environment setup + - export PATH="/root/.bun/bin:$PATH" + - export PGSSLMODE=require + - export NODE_TLS_REJECT_UNAUTHORIZED=0 + + # Install dependencies + - echo "Installing dependencies..." + - cd packages/db + - SKIP_ENV_VALIDATION=true bun install --frozen-lockfile || SKIP_ENV_VALIDATION=true bun install + + # Generate Prisma client + - echo "Generating Prisma client..." + - bun x prisma generate + + # Run database migrations + - echo "Running database migrations..." + - 'echo "DATABASE_URL is configured: $([ -n \"$DATABASE_URL\" ] && echo ''YES'' || echo ''NO'')"' + - bun x prisma migrate deploy + + # Verify migration success + - echo "Verifying database schema..." + - bun x prisma db pull --print + + post_build: + commands: + - echo "Database migrations completed successfully on `date`" + +cache: + paths: + - 'node_modules/**/*' + - 'packages/db/node_modules/**/*' + - '/root/.bun/install/cache/**/*' From c633df3e2e9f9bf2951877799db71c8d6ec9f6f6 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 10:25:49 -0400 Subject: [PATCH 32/75] chore: update Prisma dependencies to version 6.13.0 across the project - Upgrade @prisma/client and prisma to version 6.13.0 in package.json files - Modify Dockerfile to reflect the new Prisma version - Update trigger.config.ts to use the latest Prisma version - Add prisma.config.ts for improved Prisma configuration management --- Dockerfile | 2 +- apps/app/package.json | 4 +-- apps/app/trigger.config.ts | 2 +- bun.lock | 58 +++++++++++++++++++++++++----------- packages/db/package.json | 14 ++++----- packages/db/prisma.config.ts | 10 +++++++ turbo.json | 42 +++++++++----------------- 7 files changed, 74 insertions(+), 58 deletions(-) create mode 100644 packages/db/prisma.config.ts diff --git a/Dockerfile b/Dockerfile index 4db049d33..37789ba6a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,7 +36,7 @@ WORKDIR /app COPY packages/db/prisma ./packages/db/prisma # Create minimal package.json for Prisma -RUN echo '{"name":"migrator","type":"module","dependencies":{"prisma":"^6.9.0","@prisma/client":"^6.9.0"}}' > package.json +RUN echo '{"name":"migrator","type":"module","dependencies":{"prisma":"^6.13.0","@prisma/client":"^6.13.0"}}' > package.json # Install ONLY Prisma dependencies RUN bun install diff --git a/apps/app/package.json b/apps/app/package.json index 59b9532bd..ab93695d8 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -26,7 +26,7 @@ "@nangohq/frontend": "^0.53.2", "@next/third-parties": "^15.3.1", "@number-flow/react": "^0.5.9", - "@prisma/client": "6.9.0", + "@prisma/client": "^6.13.0", "@prisma/instrumentation": "6.6.0", "@react-email/components": "^0.0.41", "@react-email/render": "^1.1.2", @@ -104,7 +104,7 @@ "fleetctl": "^4.68.1", "jsdom": "^26.1.0", "postcss": "^8.5.4", - "prisma": "6.9.0", + "prisma": "^6.13.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", diff --git a/apps/app/trigger.config.ts b/apps/app/trigger.config.ts index 3a60519a6..ecb2794a7 100644 --- a/apps/app/trigger.config.ts +++ b/apps/app/trigger.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ extensions: [ new PrismaExtension({ schema: '../../packages/db/prisma', - version: '6.9.0', + version: '6.13.0', isUsingSchemaFolder: true, }), puppeteer(), diff --git a/bun.lock b/bun.lock index f9381964d..cd8133f70 100644 --- a/bun.lock +++ b/bun.lock @@ -82,7 +82,7 @@ "@nangohq/frontend": "^0.53.2", "@next/third-parties": "^15.3.1", "@number-flow/react": "^0.5.9", - "@prisma/client": "6.9.0", + "@prisma/client": "6.13.0", "@prisma/instrumentation": "6.6.0", "@react-email/components": "^0.0.41", "@react-email/render": "^1.1.2", @@ -150,7 +150,7 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", - "@trigger.dev/build": "^3.3.17", + "@trigger.dev/build": "3.3.17", "@types/d3": "^7.4.3", "@types/node": "^24.0.3", "@vitejs/plugin-react": "^4.6.0", @@ -160,7 +160,7 @@ "fleetctl": "^4.68.1", "jsdom": "^26.1.0", "postcss": "^8.5.4", - "prisma": "6.9.0", + "prisma": "6.13.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", @@ -231,18 +231,18 @@ "name": "@trycompai/db", "version": "1.1.2", "dependencies": { - "@prisma/client": "6.9.0", + "@prisma/client": "^6.13.0", }, "devDependencies": { "@trycompai/tsconfig": "workspace:*", - "prisma": "6.9.0", + "prisma": "^6.13.0", "ts-node": "^10.9.2", "tsup": "^8.5.0", "typescript": "^5.8.3", }, "peerDependencies": { - "@prisma/client": "6.9.0", - "prisma": "6.9.0", + "@prisma/client": "^6.13.0", + "prisma": "^6.13.0", }, }, "packages/email": { @@ -1036,21 +1036,21 @@ "@prisma/adapter-pg": ["@prisma/adapter-pg@6.10.1", "", { "dependencies": { "@prisma/driver-adapter-utils": "6.10.1", "postgres-array": "3.0.4" }, "peerDependencies": { "pg": "^8.11.3" } }, "sha512-4Kpz5EV1jEOsKDuKYMjfJKMiIIcsuR9Ou1B8zLzehYtB7/oi+1ooDoK1K+T7sMisHkP69aYat5j0dskxvJTgdQ=="], - "@prisma/client": ["@prisma/client@6.9.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-Gg7j1hwy3SgF1KHrh0PZsYvAaykeR0PaxusnLXydehS96voYCGt1U5zVR31NIouYc63hWzidcrir1a7AIyCsNQ=="], + "@prisma/client": ["@prisma/client@6.13.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-8m2+I3dQovkV8CkDMluiwEV1TxV9EXdT6xaCz39O6jYw7mkf5gwfmi+cL4LJsEPwz5tG7sreBwkRpEMJedGYUQ=="], - "@prisma/config": ["@prisma/config@6.9.0", "", { "dependencies": { "jiti": "2.4.2" } }, "sha512-Wcfk8/lN3WRJd5w4jmNQkUwhUw0eksaU/+BlAJwPQKW10k0h0LC9PD/6TQFmqKVbHQL0vG2z266r0S1MPzzhbA=="], + "@prisma/config": ["@prisma/config@6.13.0", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.16.12", "read-package-up": "11.0.0" } }, "sha512-OYMM+pcrvj/NqNWCGESSxVG3O7kX6oWuGyvufTUNnDw740KIQvNyA4v0eILgkpuwsKIDU36beZCkUtIt0naTog=="], "@prisma/debug": ["@prisma/debug@6.10.1", "", {}, "sha512-k2YT53cWxv9OLjW4zSYTZ6Z7j0gPfCzcr2Mj99qsuvlxr8WAKSZ2NcSR0zLf/mP4oxnYG842IMj3utTgcd7CaA=="], "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.10.1", "", { "dependencies": { "@prisma/debug": "6.10.1" } }, "sha512-MJ7NiiMA5YQUD1aMHiOcLmRpW0U0NTpygyeuLMxHXnKbcq+HX/cy10qilFMLVzpveuIEHuwxziR67z6i0K1MKA=="], - "@prisma/engines": ["@prisma/engines@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0", "@prisma/engines-version": "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "@prisma/fetch-engine": "6.9.0", "@prisma/get-platform": "6.9.0" } }, "sha512-im0X0bwDLA0244CDf8fuvnLuCQcBBdAGgr+ByvGfQY9wWl6EA+kRGwVk8ZIpG65rnlOwtaWIr/ZcEU5pNVvq9g=="], + "@prisma/engines": ["@prisma/engines@6.13.0", "", { "dependencies": { "@prisma/debug": "6.13.0", "@prisma/engines-version": "6.13.0-35.361e86d0ea4987e9f53a565309b3eed797a6bcbd", "@prisma/fetch-engine": "6.13.0", "@prisma/get-platform": "6.13.0" } }, "sha512-D+1B79LFvtWA0KTt8ALekQ6A/glB9w10ETknH5Y9g1k2NYYQOQy93ffiuqLn3Pl6IPJG3EsK/YMROKEaq8KBrA=="], - "@prisma/engines-version": ["@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "", {}, "sha512-Qp9gMoBHgqhKlrvumZWujmuD7q4DV/gooEyPCLtbkc13EZdSz2RsGUJ5mHb3RJgAbk+dm6XenqG7obJEhXcJ6Q=="], + "@prisma/engines-version": ["@prisma/engines-version@6.13.0-35.361e86d0ea4987e9f53a565309b3eed797a6bcbd", "", {}, "sha512-MpPyKSzBX7P/ZY9odp9TSegnS/yH3CSbchQE9f0yBg3l2QyN59I6vGXcoYcqKC9VTniS1s18AMmhyr1OWavjHg=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0", "@prisma/engines-version": "6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e", "@prisma/get-platform": "6.9.0" } }, "sha512-PMKhJdl4fOdeE3J3NkcWZ+tf3W6rx3ht/rLU8w4SXFRcLhd5+3VcqY4Kslpdm8osca4ej3gTfB3+cSk5pGxgFg=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@6.13.0", "", { "dependencies": { "@prisma/debug": "6.13.0", "@prisma/engines-version": "6.13.0-35.361e86d0ea4987e9f53a565309b3eed797a6bcbd", "@prisma/get-platform": "6.13.0" } }, "sha512-grmmq+4FeFKmaaytA8Ozc2+Tf3BC8xn/DVJos6LL022mfRlMZYjT3hZM0/xG7+5fO95zFG9CkDUs0m1S2rXs5Q=="], - "@prisma/get-platform": ["@prisma/get-platform@6.9.0", "", { "dependencies": { "@prisma/debug": "6.9.0" } }, "sha512-/B4n+5V1LI/1JQcHp+sUpyRT1bBgZVPHbsC4lt4/19Xp4jvNIVcq5KYNtQDk5e/ukTSjo9PZVAxxy9ieFtlpTQ=="], + "@prisma/get-platform": ["@prisma/get-platform@6.13.0", "", { "dependencies": { "@prisma/debug": "6.13.0" } }, "sha512-Nii2pX50fY4QKKxQwm7/vvqT6Ku8yYJLZAFX4e2vzHwRdMqjugcOG5hOSLjxqoXb0cvOspV70TOhMzrw8kqAnw=="], "@prisma/instrumentation": ["@prisma/instrumentation@6.6.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-M/a6njz3hbf2oucwdbjNKrSMLuyMCwgDrmTtkF1pm4Nm7CU45J/Hd6lauF2CDACTUYzu3ymcV7P0ZAhIoj6WRw=="], @@ -2082,6 +2082,8 @@ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], @@ -2348,6 +2350,8 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], + "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], @@ -2372,6 +2376,8 @@ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], "detect-gpu": ["detect-gpu@5.0.70", "", { "dependencies": { "webgl-constants": "^1.1.1" } }, "sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w=="], @@ -2418,6 +2424,8 @@ "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "draco3d": ["draco3d@1.5.7", "", {}, "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="], "dub": ["dub@0.63.7", "", { "peerDependencies": { "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0", "zod": ">= 3" }, "optionalPeers": ["@modelcontextprotocol/sdk"], "bin": { "mcp": "bin/mcp-server.js" } }, "sha512-DhMF4ceWIPjMGA4ZU8L1pySJFtwdXRjcwchRLLWReN5t3C/MZohrLvrqbeJOBfdOE4VKGtqI8uYD3kBT+4nMSQ=="], @@ -2702,6 +2710,8 @@ "getpass": ["getpass@0.1.7", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng=="], + "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + "git-log-parser": ["git-log-parser@1.2.1", "", { "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", "split2": "~1.0.0", "stream-combiner2": "~1.1.1", "through2": "~2.0.0", "traverse": "0.6.8" } }, "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ=="], "git-raw-commits": ["git-raw-commits@4.0.0", "", { "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", "split2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.mjs" } }, "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ=="], @@ -3342,6 +3352,8 @@ "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="], + "node-gyp": ["node-gyp@3.8.0", "", { "dependencies": { "fstream": "^1.0.0", "glob": "^7.0.3", "graceful-fs": "^4.1.2", "mkdirp": "^0.5.0", "nopt": "2 || 3", "npmlog": "0 || 1 || 2 || 3 || 4", "osenv": "0", "request": "^2.87.0", "rimraf": "2", "semver": "~5.3.0", "tar": "^2.0.0", "which": "1" }, "bin": { "node-gyp": "./bin/node-gyp.js" } }, "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA=="], "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], @@ -3396,6 +3408,8 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -3488,6 +3502,8 @@ "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="], "pg": ["pg@8.16.3", "", { "dependencies": { "pg-connection-string": "^2.9.1", "pg-pool": "^3.10.1", "pg-protocol": "^1.10.3", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw=="], @@ -3568,7 +3584,7 @@ "pretty-ms": ["pretty-ms@9.2.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg=="], - "prisma": ["prisma@6.9.0", "", { "dependencies": { "@prisma/config": "6.9.0", "@prisma/engines": "6.9.0" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-resJAwMyZREC/I40LF6FZ6rZTnlrlrYrb63oW37Gq+U+9xHwbyMSPJjKtM7VZf3gTO86t/Oyz+YeSXr3CmAY1Q=="], + "prisma": ["prisma@6.13.0", "", { "dependencies": { "@prisma/config": "6.13.0", "@prisma/engines": "6.13.0" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-dfzORf0AbcEyyzxuv2lEwG8g+WRGF/qDQTpHf/6JoHsyF5MyzCEZwClVaEmw3WXcobgadosOboKUgQU0kFs9kw=="], "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], @@ -3662,6 +3678,8 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], "react-day-picker": ["react-day-picker@8.10.1", "", { "peerDependencies": { "date-fns": "^2.28.0 || ^3.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA=="], @@ -4488,11 +4506,13 @@ "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], - "@prisma/engines/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], + "@prisma/config/effect": ["effect@3.16.12", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg=="], - "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], + "@prisma/engines/@prisma/debug": ["@prisma/debug@6.13.0", "", {}, "sha512-um+9pfKJW0ihmM83id9FXGi5qEbVJ0Vxi1Gm0xpYsjwUBnw6s2LdPBbrsG9QXRX46K4CLWCTNvskXBup4i9hlw=="], - "@prisma/get-platform/@prisma/debug": ["@prisma/debug@6.9.0", "", {}, "sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg=="], + "@prisma/fetch-engine/@prisma/debug": ["@prisma/debug@6.13.0", "", {}, "sha512-um+9pfKJW0ihmM83id9FXGi5qEbVJ0Vxi1Gm0xpYsjwUBnw6s2LdPBbrsG9QXRX46K4CLWCTNvskXBup4i9hlw=="], + + "@prisma/get-platform/@prisma/debug": ["@prisma/debug@6.13.0", "", {}, "sha512-um+9pfKJW0ihmM83id9FXGi5qEbVJ0Vxi1Gm0xpYsjwUBnw6s2LdPBbrsG9QXRX46K4CLWCTNvskXBup4i9hlw=="], "@react-email/components/@react-email/render": ["@react-email/render@1.1.2", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3", "react-promise-suspense": "^0.3.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-RnRehYN3v9gVlNMehHPHhyp2RQo7+pSkHDtXPvg3s0GbzM9SQMW4Qrf8GRNvtpLC4gsI+Wt0VatNRUFqjvevbw=="], @@ -4568,6 +4588,10 @@ "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "c12/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + + "c12/pkg-types": ["pkg-types@2.2.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ=="], + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "chalk-template/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], diff --git a/packages/db/package.json b/packages/db/package.json index 40a91f297..582a2e721 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -3,11 +3,11 @@ "description": "Database package with Prisma client and schema for Comp AI", "version": "1.1.2", "dependencies": { - "@prisma/client": "6.9.0" + "@prisma/client": "^6.13.0" }, "devDependencies": { "@trycompai/tsconfig": "workspace:*", - "prisma": "6.9.0", + "prisma": "^6.13.0", "ts-node": "^10.9.2", "tsup": "^8.5.0", "typescript": "^5.8.3" @@ -35,19 +35,15 @@ "main": "./dist/index.js", "module": "./dist/index.mjs", "peerDependencies": { - "@prisma/client": "6.9.0", - "prisma": "6.9.0" - }, - "prisma": { - "schema": "prisma", - "seed": "ts-node prisma/seed/seed.ts" + "@prisma/client": "^6.13.0", + "prisma": "^6.13.0" }, "publishConfig": { "access": "public" }, "repository": { "type": "git", - "url": "git+https://github.com/comp-ai/comp.git", + "url": "git+https://github.com/trycompai/comp.git", "directory": "packages/db" }, "scripts": { diff --git a/packages/db/prisma.config.ts b/packages/db/prisma.config.ts new file mode 100644 index 000000000..f0db961e6 --- /dev/null +++ b/packages/db/prisma.config.ts @@ -0,0 +1,10 @@ +import 'dotenv/config'; +import path from 'node:path'; +import { defineConfig } from 'prisma/config'; + +export default defineConfig({ + schema: path.join('prisma'), + migrations: { + path: path.join('prisma', 'migrations'), + }, +}); diff --git a/turbo.json b/turbo.json index a72b15da0..b0b399184 100644 --- a/turbo.json +++ b/turbo.json @@ -49,8 +49,20 @@ "DUB_PROGRAM_ID" ], "inputs": ["$TURBO_DEFAULT$", ".env"], - "dependsOn": ["^build", "^db:generate", "^auth:build"], - "outputs": [".next/**", "!.next/cache/**", "next-env.d.ts", "data:build"] + "dependsOn": ["^build", "^db:generate"], + "outputs": [".next/**", "!.next/cache/**", "next-env.d.ts"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "typecheck": { + "outputs": ["node_modules/.cache/tsbuildinfo.json"] + }, + "dev": { + "inputs": ["$TURBO_DEFAULT$", ".env"], + "dependsOn": ["^db:generate"], + "persistent": true, + "cache": false }, "db:generate": { "cache": false @@ -59,38 +71,12 @@ "cache": false, "persistent": true }, - "auth:build": { - "cache": false, - "env": ["BETTER_AUTH_SECRET", "BETTER_AUTH_URL", "AUTH_GOOGLE_ID", "AUTH_GOOGLE_SECRET"] - }, - "data:build": { - "cache": false, - "env": ["DATABASE_URL"], - "inputs": ["$TURBO_DEFAULT$", ".env"], - "dependsOn": ["^db:generate"], - "outputs": ["data:build"] - }, "db:push": { "cache": false }, "clean": { "cache": false }, - "integrations:dev": { - "cache": false - }, - "dev": { - "inputs": ["$TURBO_DEFAULT$", ".env"], - "dependsOn": ["^db:generate"], - "persistent": true, - "cache": false - }, - "lint": { - "dependsOn": [] - }, - "typecheck": { - "outputs": ["node_modules/.cache/tsbuildinfo.json"] - }, "deps:check": { "cache": false }, From f65cc8bd6ad48a736ff6e8e206f0bc07c5267147 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Tue, 29 Jul 2025 16:41:01 -0400 Subject: [PATCH 33/75] chore: update project dependencies and configuration for improved compatibility - Update various package.json files to ensure compatibility with the latest versions - Modify .gitignore and .prettierignore for better file management - Refactor ESLint and TypeScript configurations for consistency across apps - Enhance middleware and action files for improved functionality and maintainability - Update test files to align with recent changes in the codebase --- .gitignore | 5 +- apps/app/.eslintrc.json | 7 +- apps/app/.gitignore | 3 + apps/app/.prettierignore | 5 +- apps/app/next.config.ts | 3 +- apps/app/package.json | 14 +- apps/app/src/actions/add-comment.ts | 3 +- apps/app/src/actions/change-organization.ts | 2 +- .../comments/__tests__/createComment.test.ts | 4 +- .../comments/__tests__/deleteComment.test.ts | 4 +- .../comments/__tests__/updateComment.test.ts | 4 +- .../app/src/actions/comments/createComment.ts | 3 +- .../app/src/actions/comments/deleteComment.ts | 2 +- .../comments/deleteCommentAttachment.ts | 3 +- .../comments/getCommentAttachmentUrl.ts | 3 +- .../app/src/actions/comments/updateComment.ts | 3 +- .../create-context-entry-action.ts | 2 +- .../delete-context-entry-action.ts | 2 +- .../update-context-entry-action.ts | 2 +- apps/app/src/actions/files/upload-file.ts | 3 +- .../delete-integration-connection.ts | 2 +- .../update-integration-settings-action.ts | 2 +- .../actions/organization/accept-invitation.ts | 2 +- .../add-frameworks-to-organization-action.ts | 3 +- .../organization/create-api-key-action.ts | 2 +- .../delete-organization-action.ts | 2 +- .../organization/get-api-keys-action.ts | 2 +- .../get-organization-users-action.ts | 2 +- .../organization/lib/get-framework-names.ts | 2 +- .../lib/initialize-organization.ts | 3 +- .../actions/organization/remove-employee.ts | 2 +- .../organization/revoke-api-key-action.ts | 2 +- .../update-organization-name-action.ts | 2 +- .../update-organization-website-action.ts | 2 +- .../accept-requested-policy-changes.ts | 3 +- .../src/actions/policies/archive-policy.ts | 2 +- .../src/actions/policies/create-new-policy.ts | 3 +- .../app/src/actions/policies/delete-policy.ts | 2 +- .../policies/deny-requested-policy-changes.ts | 3 +- .../submit-policy-for-approval-action.ts | 3 +- .../actions/policies/update-policy-action.ts | 2 +- .../policies/update-policy-form-action.ts | 3 +- .../policies/update-policy-overview-action.ts | 2 +- .../src/actions/risk/create-risk-action.ts | 3 +- .../actions/risk/task/update-task-action.ts | 4 +- .../risk/update-inherent-risk-action.ts | 2 +- .../risk/update-residual-risk-action.ts | 3 +- .../risk/update-residual-risk-enum-action.ts | 2 +- .../src/actions/risk/update-risk-action.ts | 2 +- apps/app/src/actions/safe-action.ts | 3 +- apps/app/src/actions/schema.ts | 2 +- .../[orgId]/components/OnboardingTracker.tsx | 16 +- .../[controlId]/actions/delete-control.ts | 2 +- .../components/ControlDeleteDialog.tsx | 2 +- .../[controlId]/components/PoliciesTable.tsx | 2 +- .../components/RequirementsTable.tsx | 8 +- .../[controlId]/components/SingleControl.tsx | 18 +- .../[controlId]/components/TasksTable.tsx | 2 +- .../table/ControlRequirementsTable.tsx | 2 +- .../controls/[controlId]/data/getControl.ts | 2 +- .../data/getOrganizationControlProgress.ts | 2 +- .../[controlId]/data/getRelatedPolicies.ts | 3 +- .../(app)/[orgId]/controls/data/queries.ts | 3 +- .../[orgId]/controls/data/validations.ts | 2 +- .../actions/delete-framework.ts | 2 +- .../components/FrameworkOverview.tsx | 2 +- .../components/FrameworkRequirements.tsx | 2 +- .../table/FrameworkControlsTableColumns.tsx | 2 +- .../frameworks/[frameworkInstanceId]/page.tsx | 2 +- .../components/RequirementControls.tsx | 2 +- .../table/RequirementControlsTable.tsx | 2 +- .../table/RequirementControlsTableColumns.tsx | 2 +- .../requirements/[requirementKey]/page.tsx | 4 +- .../components/AddFrameworkModal.tsx | 2 +- .../frameworks/components/FrameworkCard.tsx | 2 +- .../frameworks/components/FrameworkList.tsx | 2 +- .../components/FrameworksOverview.tsx | 4 +- .../[orgId]/frameworks/components/types.ts | 2 +- .../getAllFrameworkInstancesWithControls.ts | 4 +- .../data/getFrameworkWithComplianceScores.ts | 2 +- .../getSingleFrameworkInstanceWithControls.ts | 4 +- .../app/(app)/[orgId]/frameworks/lib/utils.ts | 4 +- .../src/app/(app)/[orgId]/frameworks/page.tsx | 2 +- .../src/app/(app)/[orgId]/frameworks/types.ts | 2 +- .../app/(app)/[orgId]/integrations/page.tsx | 2 +- apps/app/src/app/(app)/[orgId]/layout.tsx | 2 +- .../actions/get-employee-details.ts | 2 +- .../[employeeId]/actions/update-department.ts | 4 +- .../actions/update-employee-details.ts | 2 +- .../actions/update-employee-status.ts | 2 +- .../[employeeId]/actions/update-employee.ts | 5 +- .../components/EditableDepartment.tsx | 2 +- .../[employeeId]/components/Employee.tsx | 2 +- .../components/EmployeeDetails.tsx | 2 +- .../[employeeId]/components/EmployeeTasks.tsx | 2 +- .../components/Fields/Department.tsx | 2 +- .../[orgId]/people/[employeeId]/layout.tsx | 2 +- .../[orgId]/people/[employeeId]/page.tsx | 4 +- .../all/actions/addEmployeeWithoutInvite.ts | 4 +- .../people/all/actions/removeMember.ts | 2 +- .../people/all/actions/revokeInvitation.ts | 2 +- .../people/all/actions/updateMemberRole.ts | 3 +- .../all/components/InviteMembersModal.tsx | 2 +- .../people/all/components/MemberRow.tsx | 2 +- .../all/components/MultiRoleCombobox.tsx | 2 +- .../components/MultiRoleComboboxContent.tsx | 2 +- .../components/MultiRoleComboboxTrigger.tsx | 2 +- .../all/components/PendingInvitationRow.tsx | 2 +- .../people/all/components/TeamMembers.tsx | 4 +- .../all/components/TeamMembersClient.tsx | 2 +- .../components/EmployeeCompletionChart.tsx | 2 +- .../components/EmployeesOverview.tsx | 4 +- .../[orgId]/people/devices/data/index.ts | 2 +- .../src/app/(app)/[orgId]/people/layout.tsx | 2 +- .../components/policy-assignee-chart.tsx | 39 +- .../components/policy-status-chart.tsx | 66 +- .../[orgId]/policies/(overview)/page.tsx | 2 +- .../[policyId]/actions/mapPolicyToControls.ts | 2 +- .../actions/unmapPolicyFromControl.ts | 2 +- .../components/PolicyArchiveSheet.tsx | 2 +- ...PolicyControlMappingConfirmDeleteModal.tsx | 2 +- .../components/PolicyControlMappingModal.tsx | 2 +- .../components/PolicyControlMappings.tsx | 2 +- .../components/PolicyDeleteDialog.tsx | 2 +- .../[policyId]/components/PolicyOverview.tsx | 4 +- .../components/PolicyOverviewSheet.tsx | 2 +- .../[policyId]/components/PolicyPage.tsx | 2 +- .../[policyId]/components/RecentAuditLogs.tsx | 2 +- .../components/SubmitApprovalDialog.tsx | 2 +- .../components/UpdatePolicyOverview.tsx | 2 +- .../[orgId]/policies/[policyId]/data/index.ts | 4 +- .../editor/actions/get-policy-details.ts | 2 +- .../editor/actions/update-policy.ts | 2 +- .../all/components/policies-table-columns.tsx | 2 +- .../[orgId]/policies/all/data/queries.ts | 3 +- .../[orgId]/policies/all/data/validations.ts | 2 +- .../[orgId]/risk/(overview)/RisksTable.tsx | 2 +- .../[orgId]/risk/(overview)/data/getRisks.ts | 3 +- .../risk/(overview)/data/validations.ts | 2 +- .../(app)/[orgId]/risk/(overview)/page.tsx | 2 +- .../app/(app)/[orgId]/risk/[riskId]/page.tsx | 3 +- .../risk/[riskId]/tasks/[taskId]/page.tsx | 2 +- .../(app)/[orgId]/settings/api-keys/page.tsx | 2 +- .../settings/context-hub/ContextTable.tsx | 2 +- .../context-hub/components/context-form.tsx | 2 +- .../components/context-hub-list.tsx | 2 +- .../context-hub/components/context-list.tsx | 2 +- .../components/table/ContextColumns.tsx | 2 +- .../context-hub/data/getContextEntries.ts | 2 +- .../src/app/(app)/[orgId]/settings/page.tsx | 2 +- .../trust-portal/actions/check-dns-record.ts | 2 +- .../trust-portal/actions/custom-domain.ts | 2 +- .../actions/is-friendly-available.ts | 2 +- .../actions/trust-portal-switch.ts | 2 +- .../actions/update-trust-portal-frameworks.ts | 2 +- .../components/TrustPortalDomain.tsx | 2 +- .../components/TrustPortalSwitch.tsx | 15 +- .../[orgId]/settings/trust-portal/page.tsx | 2 +- .../tasks/[taskId]/actions/delete-task.ts | 2 +- .../[taskId]/components/AttachmentItem.tsx | 2 +- .../tasks/[taskId]/components/SingleTask.tsx | 2 +- .../tasks/[taskId]/components/TaskBody.tsx | 8 +- .../[taskId]/components/TaskDeleteDialog.tsx | 2 +- .../[taskId]/components/TaskMainContent.tsx | 2 +- .../components/TaskPropertiesSidebar.tsx | 2 +- .../[taskId]/components/commentUtils.tsx | 2 +- .../tasks/[taskId]/components/constants.ts | 2 +- .../(app)/[orgId]/tasks/[taskId]/layout.tsx | 2 +- .../app/(app)/[orgId]/tasks/[taskId]/page.tsx | 5 +- .../tasks/[taskId]/utils/attachmentUtils.ts | 2 +- .../tasks/actions/deleteTaskAttachment.ts | 3 +- .../tasks/actions/getTaskAttachmentUrl.ts | 3 +- .../(app)/[orgId]/tasks/actions/updateTask.ts | 3 +- .../[orgId]/tasks/actions/updateTaskOrder.ts | 3 +- .../[orgId]/tasks/components/StatusGroup.tsx | 2 +- .../[orgId]/tasks/components/TaskCard.tsx | 2 +- .../[orgId]/tasks/components/TaskList.tsx | 2 +- .../tasks/components/TaskStatusIndicator.tsx | 2 +- apps/app/src/app/(app)/[orgId]/tasks/page.tsx | 3 +- .../tests/dashboard/actions/run-tests.ts | 2 +- .../dashboard/components/TestsLayout.tsx | 2 +- .../(app)/[orgId]/tests/dashboard/page.tsx | 2 +- apps/app/src/app/(app)/[orgId]/tests/page.tsx | 2 +- .../(overview)/components/VendorsTable.tsx | 2 +- .../vendors/(overview)/data/queries.ts | 4 +- .../vendors/(overview)/data/validations.ts | 2 +- .../vendors/[vendorId]/actions/schema.ts | 2 +- .../actions/task/create-task-action.ts | 2 +- .../actions/task/update-task-action.ts | 4 +- .../actions/update-vendor-action.ts | 2 +- .../actions/update-vendor-inherent-risk.ts | 3 +- .../actions/update-vendor-residual-risk.ts | 3 +- .../components/VendorInherentRiskChart.tsx | 2 +- .../components/VendorInherentRiskSheet.tsx | 2 +- .../components/VendorResidualRiskChart.tsx | 2 +- .../components/VendorResidualRiskSheet.tsx | 2 +- .../secondary-fields/secondary-fields.tsx | 2 +- .../update-secondary-fields-form.tsx | 2 +- .../tasks/create-vendor-task-form.tsx | 2 +- .../tasks/data-table/client-columns.tsx | 2 +- .../components/tasks/data-table/columns.tsx | 2 +- .../tasks/data-table/data-table.tsx | 2 +- .../tasks/data-table/filter-toolbar.tsx | 2 +- .../title-and-description.tsx | 2 +- .../update-title-and-description-form.tsx | 2 +- .../update-title-and-description-sheet.tsx | 2 +- .../forms/risks/InherentRiskForm.tsx | 2 +- .../forms/risks/ResidualRiskForm.tsx | 2 +- .../(app)/[orgId]/vendors/[vendorId]/page.tsx | 3 +- .../secondary-fields/secondary-fields.tsx | 2 +- .../tasks/[taskId]/components/title/title.tsx | 2 +- .../components/title/update-task-sheet.tsx | 2 +- .../[vendorId]/tasks/[taskId]/page.tsx | 2 +- .../vendors/actions/create-vendor-action.ts | 3 +- .../actions/search-global-vendors-action.ts | 2 +- .../components/charts/vendors-by-category.tsx | 3 +- .../components/charts/vendors-by-status.tsx | 2 +- .../vendors/backup-overview/layout.tsx | 2 +- .../vendors/components/create-vendor-form.tsx | 4 +- .../components/create-vendor-sheet.tsx | 2 +- apps/app/src/app/(app)/invite/[code]/page.tsx | 4 +- apps/app/src/app/(app)/no-access/page.tsx | 2 +- .../app/(app)/onboarding/[orgId]/layout.tsx | 2 +- .../src/app/(app)/onboarding/[orgId]/page.tsx | 2 +- .../onboarding/actions/complete-onboarding.ts | 2 +- .../components/PostPaymentOnboarding.tsx | 2 +- .../hooks/usePostPaymentOnboarding.ts | 2 +- .../src/app/(app)/setup/[setupId]/page.tsx | 2 +- .../actions/create-organization-minimal.ts | 2 +- .../setup/actions/create-organization.ts | 2 +- .../setup/components/FrameworkSelection.tsx | 4 +- .../components/OrganizationSetupForm.tsx | 2 +- .../app/(app)/setup/loading/[orgId]/page.tsx | 2 +- .../src/app/(app)/upgrade/[orgId]/page.tsx | 2 +- .../MinimalOrganizationSwitcher.tsx | 2 +- apps/app/src/app/api/auth/test-db/route.ts | 3 +- .../app/api/auth/test-grant-access/route.ts | 2 +- apps/app/src/app/api/auth/test-login/route.ts | 3 +- apps/app/src/app/api/frameworks/route.ts | 2 +- apps/app/src/app/api/health/route.ts | 2 +- .../app/src/app/api/retool/reset-org/route.ts | 2 +- .../src/app/api/v1/employees/[id]/route.ts | 156 - apps/app/src/app/api/v1/employees/route.ts | 264 - apps/app/src/app/api/v1/risks/[id]/route.ts | 219 - apps/app/src/app/api/v1/risks/route.ts | 264 - apps/app/src/app/api/v1/route-config.ts | 2 - apps/app/src/app/page.tsx | 2 +- apps/app/src/components/SelectAssignee.tsx | 2 +- apps/app/src/components/ai-work-preview.tsx | 2 +- .../src/components/comments/CommentForm.tsx | 117 +- .../src/components/comments/CommentItem.tsx | 8 +- apps/app/src/components/comments/Comments.tsx | 4 +- .../data-table/data-table-faceted-filter.tsx | 5 +- .../data-table/data-table-filter-list.tsx | 22 +- .../data-table/data-table-filter-menu.tsx | 267 +- .../components/forms/create-comment-form.tsx | 2 +- .../forms/policies/policy-overview.tsx | 2 +- .../forms/policies/update-policy-form.tsx | 2 +- .../forms/risks/InherentRiskForm.tsx | 2 +- .../forms/risks/ResidualRiskForm.tsx | 2 +- .../forms/risks/create-risk-form.tsx | 4 +- .../components/forms/risks/risk-overview.tsx | 9 +- .../forms/risks/task/update-task-form.tsx | 2 +- .../risks/task/update-task-overview-form.tsx | 2 +- .../forms/risks/update-risk-form.tsx | 2 +- apps/app/src/components/framework-card.tsx | 2 +- .../integrations/integrations.server.tsx | 2 +- .../components/integrations/integrations.tsx | 2 +- .../src/components/layout/MinimalHeader.tsx | 2 +- .../layout/MinimalOrganizationSwitcher.tsx | 2 +- apps/app/src/components/mobile-menu.tsx | 2 +- .../onboarding/OnboardingLayout.tsx | 2 +- .../src/components/organization-switcher.tsx | 2 +- .../policies/charts/policies-by-assignee.tsx | 3 +- .../risks/charts/InherentRiskChart.tsx | 2 +- .../risks/charts/ResidualRiskChart.tsx | 2 +- .../risks/charts/RiskMatrixChart.tsx | 2 +- .../components/risks/charts/RisksAssignee.tsx | 2 +- .../risks/charts/risks-by-department.tsx | 2 +- .../risks/charts/risks-by-status.tsx | 2 +- .../src/components/risks/risk-overview.tsx | 2 +- .../components/risks/tasks/task-overview.tsx | 2 +- .../components/sheets/create-risk-sheet.tsx | 2 +- .../components/sheets/risk-overview-sheet.tsx | 2 +- .../components/sheets/task-overview-sheet.tsx | 2 +- apps/app/src/components/sidebar.tsx | 2 +- .../tables/risk-register/columns.tsx | 2 +- .../tables/risk-register/filter-toolbar.tsx | 2 +- .../components/tables/risk-tasks/columns.tsx | 2 +- .../tables/risk-tasks/filter-toolbar.tsx | 2 +- .../tests/charts/tests-by-assignee.tsx | 2 +- apps/app/src/data/getOrganizations.ts | 2 +- apps/app/src/data/tools/organization.ts | 2 +- apps/app/src/data/tools/policies.ts | 2 +- apps/app/src/data/tools/risks-tool.ts | 3 +- apps/app/src/hooks/use-users.ts | 2 +- apps/app/src/jobs/lib/prompts.ts | 2 +- .../device/create-fleet-label-for-all-orgs.ts | 2 +- .../device/create-fleet-label-for-org.ts | 2 +- .../tasks/integration/integration-results.ts | 2 +- .../tasks/integration/integration-schedule.ts | 2 +- .../tasks/onboarding/onboard-organization.ts | 6 +- .../jobs/tasks/onboarding/update-policies.ts | 2 +- apps/app/src/jobs/tasks/scrape/research.ts | 2 +- apps/app/src/lib/api-key.ts | 2 +- apps/app/src/lib/control-compliance.ts | 2 +- apps/app/src/lib/currentOrganization.ts | 4 +- apps/app/src/lib/db/employee.ts | 3 +- .../src/lib/utils/calculate-next-review.ts | 2 +- apps/app/src/lib/validations.ts | 2 +- apps/app/src/middleware.test.ts | 2 +- apps/app/src/middleware.ts | 2 +- apps/app/src/test-utils/mocks/auth.ts | 2 +- apps/app/src/utils/auth.ts | 2 +- apps/app/tsconfig.json | 35 +- apps/portal/.eslintrc.json | 1 + apps/portal/.gitignore | 3 + apps/portal/package.json | 4 +- apps/portal/src/actions/accept-policies.ts | 2 +- .../[orgId]/components/EmployeeTasksList.tsx | 2 +- .../components/OrganizationDashboard.tsx | 4 +- .../[orgId]/components/policy/PolicyCard.tsx | 2 +- .../components/policy/PolicyCarousel.tsx | 2 +- .../components/policy/PolicyContainer.tsx | 2 +- .../[orgId]/components/policy/PolicyGrid.tsx | 2 +- .../[orgId]/components/policy/PolicyList.tsx | 2 +- .../tasks/DeviceAgentAccordionItem.tsx | 2 +- .../tasks/GeneralTrainingAccordionItem.tsx | 2 +- .../tasks/PoliciesAccordionItem.tsx | 2 +- .../components/video/VideoCarousel.tsx | 2 +- .../[orgId]/components/video/YoutubeEmbed.tsx | 2 +- .../src/app/(app)/(home)/[orgId]/page.tsx | 4 +- .../(home)/[orgId]/policy/[policyId]/page.tsx | 2 +- .../(home)/actions/markPolicyAsCompleted.ts | 2 +- .../(home)/actions/markVideoAsCompleted.ts | 2 +- .../app/(app)/(home)/components/Overview.tsx | 4 +- .../src/app/api/download-agent/fleet-label.ts | 2 +- .../src/app/api/download-agent/utils.ts | 2 +- apps/portal/src/app/lib/auth.ts | 2 +- .../db/src => apps/portal/src/db}/client.ts | 2 +- apps/portal/src/db/index.ts | 1 + apps/portal/src/db/schema.prisma | 824 + apps/portal/src/db/types.ts | 1 + apps/portal/tsconfig.json | 4 - bun.lock | 224 +- package.json | 13 +- packages/db/INTEGRATION_GUIDE.md | 249 + packages/db/package.json | 68 +- packages/db/prisma/schema.prisma | 4 +- packages/db/scripts/combine-schemas.js | 40 +- packages/db/src/index.js | 14 - packages/db/src/index.ts | 1 - packages/db/src/types.js | 17 - packages/db/src/types.ts | 1 - packages/ui/package.json | 2 +- packages/ui/src/package.json | 1 + turbo.json | 13 +- yarn.lock | 18035 ---------------- 358 files changed, 1893 insertions(+), 19927 deletions(-) delete mode 100644 apps/app/src/app/api/v1/employees/[id]/route.ts delete mode 100644 apps/app/src/app/api/v1/employees/route.ts delete mode 100644 apps/app/src/app/api/v1/risks/[id]/route.ts delete mode 100644 apps/app/src/app/api/v1/risks/route.ts delete mode 100644 apps/app/src/app/api/v1/route-config.ts rename {packages/db/src => apps/portal/src/db}/client.ts (80%) create mode 100644 apps/portal/src/db/index.ts create mode 100644 apps/portal/src/db/schema.prisma create mode 100644 apps/portal/src/db/types.ts create mode 100644 packages/db/INTEGRATION_GUIDE.md delete mode 100644 packages/db/src/index.js delete mode 100644 packages/db/src/index.ts delete mode 100644 packages/db/src/types.js delete mode 100644 packages/db/src/types.ts delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 3659fd5bd..f9ddfb236 100644 --- a/.gitignore +++ b/.gitignore @@ -78,4 +78,7 @@ debug-setup-page.png .playground/ -packages/*/dist \ No newline at end of file +packages/*/dist + +# Generated Prisma Client +**/src/db/generated/ \ No newline at end of file diff --git a/apps/app/.eslintrc.json b/apps/app/.eslintrc.json index 25cc3edfd..ab0a70296 100644 --- a/apps/app/.eslintrc.json +++ b/apps/app/.eslintrc.json @@ -1,9 +1,10 @@ { - "extends": "next/core-web-vitals", + "extends": ["next/core-web-vitals"], + "ignorePatterns": ["src/db/generated/**"], "rules": { - "react/no-unescaped-entities": "off", + "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", - "react-hooks/rules-of-hooks": "warn", + "react/no-unescaped-entities": "off", "react/display-name": "off" } } diff --git a/apps/app/.gitignore b/apps/app/.gitignore index 9f82c08fb..c3ddff6a6 100644 --- a/apps/app/.gitignore +++ b/apps/app/.gitignore @@ -49,3 +49,6 @@ next-env.d.ts # Sentry Config File .env.sentry-build-plugin + +# Generated Prisma Client +src/db/generated/**/* diff --git a/apps/app/.prettierignore b/apps/app/.prettierignore index ef35375d4..d31f44e6c 100644 --- a/apps/app/.prettierignore +++ b/apps/app/.prettierignore @@ -1,4 +1,7 @@ # Playwright test artifacts playwright-report/ test-results/ -.playwright/ \ No newline at end of file +.playwright/ + +# Generated Prisma Client +src/db/generated/ \ No newline at end of file diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index d38f91a6b..8b1eecd70 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -1,16 +1,15 @@ import type { NextConfig } from 'next'; -import * as path from 'path'; import './src/env.mjs'; const config: NextConfig = { poweredByHeader: false, reactStrictMode: true, + transpilePackages: ['@trycompai/db'], turbopack: { resolveAlias: { underscore: 'lodash', }, }, - outputFileTracingRoot: path.join(__dirname, '../../'), images: { remotePatterns: [ { diff --git a/apps/app/package.json b/apps/app/package.json index ab93695d8..98e050904 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -28,6 +28,7 @@ "@number-flow/react": "^0.5.9", "@prisma/client": "^6.13.0", "@prisma/instrumentation": "6.6.0", + "@radix-ui/react-slot": "^1.2.3", "@react-email/components": "^0.0.41", "@react-email/render": "^1.1.2", "@react-three/drei": "^10.3.0", @@ -42,7 +43,7 @@ "@tiptap/extension-table-row": "^2.22.3", "@trigger.dev/react-hooks": "3.3.17", "@trigger.dev/sdk": "3.3.17", - "@trycompai/db": "*", + "@trycompai/db": "^1.2.5", "@types/canvas-confetti": "^1.9.0", "@types/three": "^0.177.0", "@uploadthing/react": "^7.3.0", @@ -56,6 +57,7 @@ "dub": "^0.63.6", "framer-motion": "^12.18.1", "geist": "^1.3.1", + "lucide-react": "^0.534.0", "motion": "^12.9.2", "next": "15.4.2-canary.16", "next-safe-action": "^8.0.3", @@ -65,10 +67,10 @@ "posthog-js": "^1.236.6", "posthog-node": "^4.14.0", "puppeteer-core": "^24.7.2", - "react": "^19.1.0", + "react": "^19.1.1", "react-dom": "^19.1.0", "react-email": "^4.0.15", - "react-hook-form": "^7.58.1", + "react-hook-form": "^7.61.1", "react-hotkeys-hook": "^5.1.0", "react-intersection-observer": "^9.16.0", "react-markdown": "^9.1.0", @@ -125,12 +127,10 @@ "private": true, "scripts": { "analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts", - "apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app", - "build": "cd ../../packages/db && prisma generate && cd ../../apps/app && next build", + "build": "next build", "deploy:trigger-prod": "npx trigger.dev@latest deploy", - "dev": "bun i && bun run apply-migrations && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", + "dev": "bun i && bunx concurrently --kill-others --names \"next,trigger\" --prefix-colors \"yellow,blue\" \"next dev --turbo -p 3000\" \"bun run trigger:dev\"", "lint": "next lint && prettier --check .", - "postinstall": "if [ \"$VERCEL\" = \"1\" ]; then cd ../../packages/db && npx prisma generate; fi", "start": "next start", "test": "vitest", "test:all": "./scripts/test-all.sh", diff --git a/apps/app/src/actions/add-comment.ts b/apps/app/src/actions/add-comment.ts index 391cc7cd2..919a7e3e0 100644 --- a/apps/app/src/actions/add-comment.ts +++ b/apps/app/src/actions/add-comment.ts @@ -1,8 +1,7 @@ 'use server'; import { AppError, appErrors } from '@/lib/errors'; -import { db } from '@comp/db'; -import { CommentEntityType } from '@comp/db/types'; +import { CommentEntityType, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/change-organization.ts b/apps/app/src/actions/change-organization.ts index 1203b6d55..8ed662616 100644 --- a/apps/app/src/actions/change-organization.ts +++ b/apps/app/src/actions/change-organization.ts @@ -1,7 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/comments/__tests__/createComment.test.ts b/apps/app/src/actions/comments/__tests__/createComment.test.ts index 23c7c9562..da3b33bd1 100644 --- a/apps/app/src/actions/comments/__tests__/createComment.test.ts +++ b/apps/app/src/actions/comments/__tests__/createComment.test.ts @@ -1,4 +1,4 @@ -import { CommentEntityType } from '@comp/db/types'; +import { CommentEntityType } from '@trycompai/db'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Import the mock setup utilities first @@ -10,7 +10,7 @@ vi.mock('@/utils/auth', () => ({ auth: mockAuth, })); -vi.mock('@comp/db', () => ({ +vi.mock('@trycompai/db', () => ({ db: mockDb, })); diff --git a/apps/app/src/actions/comments/__tests__/deleteComment.test.ts b/apps/app/src/actions/comments/__tests__/deleteComment.test.ts index d3b1d0b18..ad6644eb8 100644 --- a/apps/app/src/actions/comments/__tests__/deleteComment.test.ts +++ b/apps/app/src/actions/comments/__tests__/deleteComment.test.ts @@ -1,4 +1,4 @@ -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, CommentEntityType } from '@trycompai/db'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Import the mock setup utilities first @@ -10,7 +10,7 @@ vi.mock('@/utils/auth', () => ({ auth: mockAuth, })); -vi.mock('@comp/db', () => ({ +vi.mock('@trycompai/db', () => ({ db: mockDb, })); diff --git a/apps/app/src/actions/comments/__tests__/updateComment.test.ts b/apps/app/src/actions/comments/__tests__/updateComment.test.ts index fd844ab32..84615d793 100644 --- a/apps/app/src/actions/comments/__tests__/updateComment.test.ts +++ b/apps/app/src/actions/comments/__tests__/updateComment.test.ts @@ -1,4 +1,4 @@ -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, CommentEntityType } from '@trycompai/db'; import { beforeEach, describe, expect, it, vi } from 'vitest'; // Import the mock setup utilities first @@ -10,7 +10,7 @@ vi.mock('@/utils/auth', () => ({ auth: mockAuth, })); -vi.mock('@comp/db', () => ({ +vi.mock('@trycompai/db', () => ({ db: mockDb, })); diff --git a/apps/app/src/actions/comments/createComment.ts b/apps/app/src/actions/comments/createComment.ts index 3b7435fac..52c85fb94 100644 --- a/apps/app/src/actions/comments/createComment.ts +++ b/apps/app/src/actions/comments/createComment.ts @@ -3,8 +3,7 @@ import { BUCKET_NAME, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { PutObjectCommand } from '@aws-sdk/client-s3'; -import { db } from '@comp/db'; -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, CommentEntityType, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/comments/deleteComment.ts b/apps/app/src/actions/comments/deleteComment.ts index 30f794577..8e82ab441 100644 --- a/apps/app/src/actions/comments/deleteComment.ts +++ b/apps/app/src/actions/comments/deleteComment.ts @@ -3,7 +3,7 @@ import { extractS3KeyFromUrl, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { DeleteObjectCommand } from '@aws-sdk/client-s3'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/comments/deleteCommentAttachment.ts b/apps/app/src/actions/comments/deleteCommentAttachment.ts index cd9cafc1e..6b60f8ce0 100644 --- a/apps/app/src/actions/comments/deleteCommentAttachment.ts +++ b/apps/app/src/actions/comments/deleteCommentAttachment.ts @@ -3,8 +3,7 @@ import { authActionClient } from '@/actions/safe-action'; import { BUCKET_NAME, extractS3KeyFromUrl, s3Client } from '@/app/s3'; import { DeleteObjectCommand } from '@aws-sdk/client-s3'; -import { db } from '@comp/db'; -import { AttachmentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/actions/comments/getCommentAttachmentUrl.ts b/apps/app/src/actions/comments/getCommentAttachmentUrl.ts index c33c26b4e..2529a1fa8 100644 --- a/apps/app/src/actions/comments/getCommentAttachmentUrl.ts +++ b/apps/app/src/actions/comments/getCommentAttachmentUrl.ts @@ -4,8 +4,7 @@ import { BUCKET_NAME, extractS3KeyFromUrl, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { GetObjectCommand } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; -import { db } from '@comp/db'; -import { AttachmentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, db } from '@trycompai/db'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/comments/updateComment.ts b/apps/app/src/actions/comments/updateComment.ts index 7987a0b86..797985486 100644 --- a/apps/app/src/actions/comments/updateComment.ts +++ b/apps/app/src/actions/comments/updateComment.ts @@ -3,8 +3,7 @@ import { BUCKET_NAME, extractS3KeyFromUrl, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { DeleteObjectCommand } from '@aws-sdk/client-s3'; -import { db } from '@comp/db'; -import { AttachmentEntityType, Comment } from '@comp/db/types'; +import { AttachmentEntityType, Comment, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/context-hub/create-context-entry-action.ts b/apps/app/src/actions/context-hub/create-context-entry-action.ts index d76be1001..3f60ae5f5 100644 --- a/apps/app/src/actions/context-hub/create-context-entry-action.ts +++ b/apps/app/src/actions/context-hub/create-context-entry-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/context-hub/delete-context-entry-action.ts b/apps/app/src/actions/context-hub/delete-context-entry-action.ts index a1a8fc580..029e32d1e 100644 --- a/apps/app/src/actions/context-hub/delete-context-entry-action.ts +++ b/apps/app/src/actions/context-hub/delete-context-entry-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/context-hub/update-context-entry-action.ts b/apps/app/src/actions/context-hub/update-context-entry-action.ts index 17c3bf38a..9ab6e5f62 100644 --- a/apps/app/src/actions/context-hub/update-context-entry-action.ts +++ b/apps/app/src/actions/context-hub/update-context-entry-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/files/upload-file.ts b/apps/app/src/actions/files/upload-file.ts index de316ed35..01fa61889 100644 --- a/apps/app/src/actions/files/upload-file.ts +++ b/apps/app/src/actions/files/upload-file.ts @@ -4,8 +4,7 @@ import { BUCKET_NAME, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; -import { db } from '@comp/db'; -import { AttachmentEntityType, AttachmentType } from '@comp/db/types'; +import { AttachmentEntityType, AttachmentType, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/actions/integrations/delete-integration-connection.ts b/apps/app/src/actions/integrations/delete-integration-connection.ts index cc272224e..9af08c8b0 100644 --- a/apps/app/src/actions/integrations/delete-integration-connection.ts +++ b/apps/app/src/actions/integrations/delete-integration-connection.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { authActionClient } from '../safe-action'; import { deleteIntegrationConnectionSchema } from '../schema'; diff --git a/apps/app/src/actions/integrations/update-integration-settings-action.ts b/apps/app/src/actions/integrations/update-integration-settings-action.ts index e12c20036..7026917cb 100644 --- a/apps/app/src/actions/integrations/update-integration-settings-action.ts +++ b/apps/app/src/actions/integrations/update-integration-settings-action.ts @@ -1,7 +1,7 @@ 'use server'; import { encrypt } from '@/lib/encryption'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/organization/accept-invitation.ts b/apps/app/src/actions/organization/accept-invitation.ts index 9b6124b93..9b5f2aa7d 100644 --- a/apps/app/src/actions/organization/accept-invitation.ts +++ b/apps/app/src/actions/organization/accept-invitation.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { Resend } from 'resend'; import { z } from 'zod'; diff --git a/apps/app/src/actions/organization/add-frameworks-to-organization-action.ts b/apps/app/src/actions/organization/add-frameworks-to-organization-action.ts index e97caa53b..e77e60ab1 100644 --- a/apps/app/src/actions/organization/add-frameworks-to-organization-action.ts +++ b/apps/app/src/actions/organization/add-frameworks-to-organization-action.ts @@ -1,8 +1,7 @@ 'use server'; import { addFrameworksSchema } from '@/actions/schema'; -import { db } from '@comp/db'; -import { Prisma } from '@comp/db/types'; +import { db, Prisma } from '@trycompai/db'; import { authWithOrgAccessClient } from '../safe-action'; import { _upsertOrgFrameworkStructureCore } from './lib/initialize-organization'; diff --git a/apps/app/src/actions/organization/create-api-key-action.ts b/apps/app/src/actions/organization/create-api-key-action.ts index f7c3d115b..c390cf8eb 100644 --- a/apps/app/src/actions/organization/create-api-key-action.ts +++ b/apps/app/src/actions/organization/create-api-key-action.ts @@ -3,7 +3,7 @@ import { authActionClient } from '@/actions/safe-action'; import { apiKeySchema } from '@/actions/schema'; import { generateApiKey, generateSalt, hashApiKey } from '@/lib/api-key'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; export const createApiKeyAction = authActionClient diff --git a/apps/app/src/actions/organization/delete-organization-action.ts b/apps/app/src/actions/organization/delete-organization-action.ts index c559641ee..0d649bc0b 100644 --- a/apps/app/src/actions/organization/delete-organization-action.ts +++ b/apps/app/src/actions/organization/delete-organization-action.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { authActionClient } from '../safe-action'; import { deleteOrganizationSchema } from '../schema'; diff --git a/apps/app/src/actions/organization/get-api-keys-action.ts b/apps/app/src/actions/organization/get-api-keys-action.ts index 71a8bb5d5..a2db4d577 100644 --- a/apps/app/src/actions/organization/get-api-keys-action.ts +++ b/apps/app/src/actions/organization/get-api-keys-action.ts @@ -2,7 +2,7 @@ import type { ActionResponse } from '@/actions/types'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; export const getApiKeysAction = async (): Promise< diff --git a/apps/app/src/actions/organization/get-organization-users-action.ts b/apps/app/src/actions/organization/get-organization-users-action.ts index d6b66a31c..d5256cc4c 100644 --- a/apps/app/src/actions/organization/get-organization-users-action.ts +++ b/apps/app/src/actions/organization/get-organization-users-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { authActionClient } from '../safe-action'; interface User { diff --git a/apps/app/src/actions/organization/lib/get-framework-names.ts b/apps/app/src/actions/organization/lib/get-framework-names.ts index 782d2c820..98dfbe71b 100644 --- a/apps/app/src/actions/organization/lib/get-framework-names.ts +++ b/apps/app/src/actions/organization/lib/get-framework-names.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; /** * Fetch framework names by IDs and convert them to lowercase with no spaces diff --git a/apps/app/src/actions/organization/lib/initialize-organization.ts b/apps/app/src/actions/organization/lib/initialize-organization.ts index f42fbb2f4..57cfaa315 100644 --- a/apps/app/src/actions/organization/lib/initialize-organization.ts +++ b/apps/app/src/actions/organization/lib/initialize-organization.ts @@ -1,5 +1,4 @@ -import { db } from '@comp/db'; -import { Prisma } from '@comp/db/types'; +import { db, Prisma } from '@trycompai/db'; // Define a type for FrameworkEditorFramework with requirements included // This assumes FrameworkEditorFramework and FrameworkEditorRequirement are valid Prisma types. diff --git a/apps/app/src/actions/organization/remove-employee.ts b/apps/app/src/actions/organization/remove-employee.ts index 0e77992ad..7592f020f 100644 --- a/apps/app/src/actions/organization/remove-employee.ts +++ b/apps/app/src/actions/organization/remove-employee.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/organization/revoke-api-key-action.ts b/apps/app/src/actions/organization/revoke-api-key-action.ts index 67f2ec3b7..bbe207a34 100644 --- a/apps/app/src/actions/organization/revoke-api-key-action.ts +++ b/apps/app/src/actions/organization/revoke-api-key-action.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/actions/organization/update-organization-name-action.ts b/apps/app/src/actions/organization/update-organization-name-action.ts index 52b35a9e8..64830fe1e 100644 --- a/apps/app/src/actions/organization/update-organization-name-action.ts +++ b/apps/app/src/actions/organization/update-organization-name-action.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { organizationNameSchema } from '../schema'; diff --git a/apps/app/src/actions/organization/update-organization-website-action.ts b/apps/app/src/actions/organization/update-organization-website-action.ts index d7561adfd..3a0a015bb 100644 --- a/apps/app/src/actions/organization/update-organization-website-action.ts +++ b/apps/app/src/actions/organization/update-organization-website-action.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { organizationWebsiteSchema } from '../schema'; diff --git a/apps/app/src/actions/policies/accept-requested-policy-changes.ts b/apps/app/src/actions/policies/accept-requested-policy-changes.ts index 205c9b5a9..fbcdce8b4 100644 --- a/apps/app/src/actions/policies/accept-requested-policy-changes.ts +++ b/apps/app/src/actions/policies/accept-requested-policy-changes.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { PolicyStatus } from '@comp/db/types'; +import { db, PolicyStatus } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/policies/archive-policy.ts b/apps/app/src/actions/policies/archive-policy.ts index d22301fad..89df9ae3e 100644 --- a/apps/app/src/actions/policies/archive-policy.ts +++ b/apps/app/src/actions/policies/archive-policy.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/policies/create-new-policy.ts b/apps/app/src/actions/policies/create-new-policy.ts index 344f40aa3..dc8fee8dd 100644 --- a/apps/app/src/actions/policies/create-new-policy.ts +++ b/apps/app/src/actions/policies/create-new-policy.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { Departments, Frequency } from '@comp/db/types'; +import { db, Departments, Frequency } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { createPolicySchema } from '../schema'; diff --git a/apps/app/src/actions/policies/delete-policy.ts b/apps/app/src/actions/policies/delete-policy.ts index ea147b219..6b246f6e7 100644 --- a/apps/app/src/actions/policies/delete-policy.ts +++ b/apps/app/src/actions/policies/delete-policy.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/policies/deny-requested-policy-changes.ts b/apps/app/src/actions/policies/deny-requested-policy-changes.ts index 66b047fd1..93566e79a 100644 --- a/apps/app/src/actions/policies/deny-requested-policy-changes.ts +++ b/apps/app/src/actions/policies/deny-requested-policy-changes.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { PolicyStatus } from '@comp/db/types'; +import { db, PolicyStatus } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; import { authActionClient } from '../safe-action'; diff --git a/apps/app/src/actions/policies/submit-policy-for-approval-action.ts b/apps/app/src/actions/policies/submit-policy-for-approval-action.ts index 87aafdc89..3d766f76b 100644 --- a/apps/app/src/actions/policies/submit-policy-for-approval-action.ts +++ b/apps/app/src/actions/policies/submit-policy-for-approval-action.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { PolicyStatus } from '@comp/db/types'; +import { db, PolicyStatus } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updatePolicyFormSchema } from '../schema'; diff --git a/apps/app/src/actions/policies/update-policy-action.ts b/apps/app/src/actions/policies/update-policy-action.ts index 759822cf1..9fa5322b4 100644 --- a/apps/app/src/actions/policies/update-policy-action.ts +++ b/apps/app/src/actions/policies/update-policy-action.ts @@ -1,7 +1,7 @@ 'use server'; -import { db } from '@comp/db'; import { logger } from '@trigger.dev/sdk/v3'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updatePolicySchema } from '../schema'; diff --git a/apps/app/src/actions/policies/update-policy-form-action.ts b/apps/app/src/actions/policies/update-policy-form-action.ts index 63b352cb5..103d97527 100644 --- a/apps/app/src/actions/policies/update-policy-form-action.ts +++ b/apps/app/src/actions/policies/update-policy-form-action.ts @@ -2,8 +2,7 @@ 'use server'; -import { db } from '@comp/db'; -import { PolicyStatus } from '@comp/db/types'; +import { db, PolicyStatus } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updatePolicyFormSchema } from '../schema'; diff --git a/apps/app/src/actions/policies/update-policy-overview-action.ts b/apps/app/src/actions/policies/update-policy-overview-action.ts index 8b555b0e6..da674df78 100644 --- a/apps/app/src/actions/policies/update-policy-overview-action.ts +++ b/apps/app/src/actions/policies/update-policy-overview-action.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updatePolicyOverviewSchema } from '../schema'; diff --git a/apps/app/src/actions/risk/create-risk-action.ts b/apps/app/src/actions/risk/create-risk-action.ts index ae8519e04..7dcb0d065 100644 --- a/apps/app/src/actions/risk/create-risk-action.ts +++ b/apps/app/src/actions/risk/create-risk-action.ts @@ -2,8 +2,7 @@ 'use server'; -import { db } from '@comp/db'; -import { Impact, Likelihood } from '@comp/db/types'; +import { db, Impact, Likelihood } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { createRiskSchema } from '../schema'; diff --git a/apps/app/src/actions/risk/task/update-task-action.ts b/apps/app/src/actions/risk/task/update-task-action.ts index c6572ca16..12f7f3c9e 100644 --- a/apps/app/src/actions/risk/task/update-task-action.ts +++ b/apps/app/src/actions/risk/task/update-task-action.ts @@ -2,8 +2,8 @@ 'use server'; -import { db } from '@comp/db'; -import type { TaskStatus } from '@comp/db/types'; +import type { TaskStatus } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../../safe-action'; import { updateTaskSchema } from '../../schema'; diff --git a/apps/app/src/actions/risk/update-inherent-risk-action.ts b/apps/app/src/actions/risk/update-inherent-risk-action.ts index 78edc8e15..660be1150 100644 --- a/apps/app/src/actions/risk/update-inherent-risk-action.ts +++ b/apps/app/src/actions/risk/update-inherent-risk-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updateInherentRiskSchema } from '../schema'; diff --git a/apps/app/src/actions/risk/update-residual-risk-action.ts b/apps/app/src/actions/risk/update-residual-risk-action.ts index 40e4cf178..1ca15978d 100644 --- a/apps/app/src/actions/risk/update-residual-risk-action.ts +++ b/apps/app/src/actions/risk/update-residual-risk-action.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { Impact, Likelihood } from '@comp/db/types'; +import { db, Impact, Likelihood } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updateResidualRiskSchema } from '../schema'; diff --git a/apps/app/src/actions/risk/update-residual-risk-enum-action.ts b/apps/app/src/actions/risk/update-residual-risk-enum-action.ts index d7e7f3b4c..eeaf9e158 100644 --- a/apps/app/src/actions/risk/update-residual-risk-enum-action.ts +++ b/apps/app/src/actions/risk/update-residual-risk-enum-action.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updateResidualRiskEnumSchema } from '../schema'; // Use the new enum schema diff --git a/apps/app/src/actions/risk/update-risk-action.ts b/apps/app/src/actions/risk/update-risk-action.ts index 9edcafcfd..b96f21f3c 100644 --- a/apps/app/src/actions/risk/update-risk-action.ts +++ b/apps/app/src/actions/risk/update-risk-action.ts @@ -2,7 +2,7 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { authActionClient } from '../safe-action'; import { updateRiskSchema } from '../schema'; diff --git a/apps/app/src/actions/safe-action.ts b/apps/app/src/actions/safe-action.ts index 007bc1429..2c7e93e6c 100644 --- a/apps/app/src/actions/safe-action.ts +++ b/apps/app/src/actions/safe-action.ts @@ -2,9 +2,8 @@ import { track } from '@/app/posthog'; import { env } from '@/env.mjs'; import { auth } from '@/utils/auth'; import { logger } from '@/utils/logger'; -import { db } from '@comp/db'; -import { AuditLogEntityType } from '@comp/db/types'; import { client } from '@comp/kv'; +import { AuditLogEntityType, db } from '@trycompai/db'; import { Ratelimit } from '@upstash/ratelimit'; import { DEFAULT_SERVER_ERROR_MESSAGE, createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; diff --git a/apps/app/src/actions/schema.ts b/apps/app/src/actions/schema.ts index bf7d07325..855a7babc 100644 --- a/apps/app/src/actions/schema.ts +++ b/apps/app/src/actions/schema.ts @@ -8,7 +8,7 @@ import { RiskCategory, RiskStatus, TaskStatus, -} from '@comp/db/types'; +} from '@trycompai/db'; import { z } from 'zod'; export const organizationSchema = z.object({ diff --git a/apps/app/src/app/(app)/[orgId]/components/OnboardingTracker.tsx b/apps/app/src/app/(app)/[orgId]/components/OnboardingTracker.tsx index 6e53f18c3..6f552626b 100644 --- a/apps/app/src/app/(app)/[orgId]/components/OnboardingTracker.tsx +++ b/apps/app/src/app/(app)/[orgId]/components/OnboardingTracker.tsx @@ -1,9 +1,9 @@ 'use client'; import { LogoSpinner } from '@/components/logo-spinner'; -import type { Onboarding } from '@comp/db/types'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; import { useRealtimeRun } from '@trigger.dev/react-hooks'; +import type { Onboarding } from '@trycompai/db'; import { AnimatePresence, motion } from 'framer-motion'; import { AlertTriangle, Rocket, ShieldAlert, Zap } from 'lucide-react'; import { useEffect, useState } from 'react'; @@ -42,15 +42,13 @@ export const OnboardingTracker = ({ const [currentMessageIndex, setCurrentMessageIndex] = useState(0); const triggerJobId = onboarding.triggerJobId; - if (!triggerJobId || !publicAccessToken) { - return
Unable to load onboarding tracker.
; - } - - const { run, error } = useRealtimeRun(triggerJobId, { + const { run, error } = useRealtimeRun(triggerJobId || '', { accessToken: publicAccessToken, }); useEffect(() => { + if (!triggerJobId || !publicAccessToken) return; + let interval: NodeJS.Timeout; if (run && IN_PROGRESS_STATUSES.includes(run.status)) { interval = setInterval(() => { @@ -60,7 +58,11 @@ export const OnboardingTracker = ({ setCurrentMessageIndex(0); // Reset when not in progress } return () => clearInterval(interval); - }, [run?.status]); + }, [run, triggerJobId, publicAccessToken]); + + if (!triggerJobId || !publicAccessToken) { + return
Unable to load onboarding tracker.
; + } if (!triggerJobId) { return ( diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/actions/delete-control.ts b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/actions/delete-control.ts index 1c2f41582..fd638ff31 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/actions/delete-control.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/actions/delete-control.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/ControlDeleteDialog.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/ControlDeleteDialog.tsx index 1900f5904..0299764db 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/ControlDeleteDialog.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/ControlDeleteDialog.tsx @@ -1,7 +1,6 @@ 'use client'; import { deleteControlAction } from '@/app/(app)/[orgId]/controls/[controlId]/actions/delete-control'; -import { Control } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog, @@ -13,6 +12,7 @@ import { } from '@comp/ui/dialog'; import { Form } from '@comp/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Control } from '@trycompai/db'; import { Trash2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/PoliciesTable.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/PoliciesTable.tsx index 86b56abe3..025ceb4ed 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/PoliciesTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/PoliciesTable.tsx @@ -4,10 +4,10 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { StatusIndicator } from '@/components/status-indicator'; import { useDataTable } from '@/hooks/use-data-table'; -import { Policy } from '@comp/db/types'; import { Icons } from '@comp/ui/icons'; import { Input } from '@comp/ui/input'; import { ColumnDef } from '@tanstack/react-table'; +import { Policy } from '@trycompai/db'; import { useMemo, useState } from 'react'; interface PoliciesTableProps { diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx index 31acdd945..e08fb2dea 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx @@ -3,15 +3,15 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { useDataTable } from '@/hooks/use-data-table'; +import { Icons } from '@comp/ui/icons'; +import { Input } from '@comp/ui/input'; +import { ColumnDef } from '@tanstack/react-table'; import type { FrameworkEditorFramework, FrameworkEditorRequirement, FrameworkInstance, RequirementMap, -} from '@comp/db/types'; -import { Icons } from '@comp/ui/icons'; -import { Input } from '@comp/ui/input'; -import { ColumnDef } from '@tanstack/react-table'; +} from '@trycompai/db'; import { useMemo, useState } from 'react'; interface RequirementsTableProps { diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/SingleControl.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/SingleControl.tsx index a507707e3..2223d385c 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/SingleControl.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/SingleControl.tsx @@ -1,15 +1,6 @@ 'use client'; import { StatusIndicator } from '@/components/status-indicator'; -import type { - Control, - FrameworkEditorFramework, - FrameworkEditorRequirement, - FrameworkInstance, - Policy, - RequirementMap, - Task, -} from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { DropdownMenu, @@ -18,6 +9,15 @@ import { DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@comp/ui/tabs'; +import type { + Control, + FrameworkEditorFramework, + FrameworkEditorRequirement, + FrameworkInstance, + Policy, + RequirementMap, + Task, +} from '@trycompai/db'; import { MoreVertical, Trash2 } from 'lucide-react'; import { useParams } from 'next/navigation'; import { useMemo, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/TasksTable.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/TasksTable.tsx index 2ca9e09e1..cd68819d4 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/TasksTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/TasksTable.tsx @@ -4,10 +4,10 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { StatusIndicator } from '@/components/status-indicator'; import { useDataTable } from '@/hooks/use-data-table'; -import { Task } from '@comp/db/types'; import { Icons } from '@comp/ui/icons'; import { Input } from '@comp/ui/input'; import { ColumnDef } from '@tanstack/react-table'; +import { Task } from '@trycompai/db'; import { useMemo, useState } from 'react'; interface TasksTableProps { diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/table/ControlRequirementsTable.tsx b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/table/ControlRequirementsTable.tsx index a39954400..4281f55a1 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/table/ControlRequirementsTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/components/table/ControlRequirementsTable.tsx @@ -2,8 +2,8 @@ import { flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table'; -import type { FrameworkEditorRequirement, Policy, Task } from '@comp/db/types'; import { Table, TableBody, TableCell, TableRow } from '@comp/ui/table'; +import type { FrameworkEditorRequirement, Policy, Task } from '@trycompai/db'; import { useParams, useRouter } from 'next/navigation'; import { ControlRequirementsTableColumns } from './ControlRequirementsTableColumns'; import { ControlRequirementsTableHeader } from './ControlRequirementsTableHeader'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getControl.ts b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getControl.ts index 88b7d4490..960f84ae1 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getControl.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getControl.ts @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; export const getControl = async (id: string) => { diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getOrganizationControlProgress.ts b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getOrganizationControlProgress.ts index 3d1f58f1a..3b5b45c73 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getOrganizationControlProgress.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getOrganizationControlProgress.ts @@ -1,7 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; export interface ControlProgressResponse { diff --git a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getRelatedPolicies.ts b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getRelatedPolicies.ts index fe0bfaf1b..469a88ba5 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getRelatedPolicies.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/[controlId]/data/getRelatedPolicies.ts @@ -1,8 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Policy } from '@comp/db/types'; +import { db, Policy } from '@trycompai/db'; import { headers } from 'next/headers'; interface GetRelatedPoliciesParams { diff --git a/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts b/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts index e0153776b..922f5a608 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/data/queries.ts @@ -1,8 +1,7 @@ import 'server-only'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Prisma } from '@comp/db/types'; +import { db, Prisma } from '@trycompai/db'; import { headers } from 'next/headers'; // import { cache } from "react"; // Already handled: ensure it stays removed or remove if re-introduced import type { GetControlSchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/controls/data/validations.ts b/apps/app/src/app/(app)/[orgId]/controls/data/validations.ts index 823b9c697..3ccbc87d8 100644 --- a/apps/app/src/app/(app)/[orgId]/controls/data/validations.ts +++ b/apps/app/src/app/(app)/[orgId]/controls/data/validations.ts @@ -1,5 +1,5 @@ import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; -import { Control } from '@comp/db/types'; +import { Control } from '@trycompai/db'; import { createSearchParamsCache, parseAsArrayOf, diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/actions/delete-framework.ts b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/actions/delete-framework.ts index 5a734fe50..92e8a891c 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/actions/delete-framework.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/actions/delete-framework.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkOverview.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkOverview.tsx index 500231a90..40c117819 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkOverview.tsx @@ -1,6 +1,5 @@ 'use client'; -import { Control, Task } from '@comp/db/types'; import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; @@ -12,6 +11,7 @@ import { DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; import { Progress } from '@comp/ui/progress'; +import { Control, Task } from '@trycompai/db'; import { BarChart3, MoreVertical, Target, Trash2 } from 'lucide-react'; import { useState } from 'react'; import { getControlStatus } from '../../lib/utils'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkRequirements.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkRequirements.tsx index 56cefeea7..184559c4f 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkRequirements.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/FrameworkRequirements.tsx @@ -4,8 +4,8 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { DataTableToolbar } from '@/components/data-table/data-table-toolbar'; import { useDataTable } from '@/hooks/use-data-table'; -import type { FrameworkEditorRequirement } from '@comp/db/types'; import { ColumnDef } from '@tanstack/react-table'; +import type { FrameworkEditorRequirement } from '@trycompai/db'; import { useParams } from 'next/navigation'; import { useMemo } from 'react'; import type { FrameworkInstanceWithControls } from '../../types'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/table/FrameworkControlsTableColumns.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/table/FrameworkControlsTableColumns.tsx index 1460bc689..6666e2f37 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/table/FrameworkControlsTableColumns.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/components/table/FrameworkControlsTableColumns.tsx @@ -1,9 +1,9 @@ 'use client'; import { StatusIndicator, StatusType } from '@/components/status-indicator'; -import type { Policy } from '@comp/db/types'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@comp/ui/tooltip'; import type { ColumnDef } from '@tanstack/react-table'; +import type { Policy } from '@trycompai/db'; import Link from 'next/link'; import { useParams } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/page.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/page.tsx index 468c4a84f..88ea4ee64 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; import PageWithBreadcrumb from '../../../../../components/pages/PageWithBreadcrumb'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/RequirementControls.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/RequirementControls.tsx index 2d35960ff..41770f581 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/RequirementControls.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/RequirementControls.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Control, FrameworkEditorRequirement, RequirementMap, Task } from '@comp/db/types'; +import type { Control, FrameworkEditorRequirement, RequirementMap, Task } from '@trycompai/db'; import { RequirementControlsTable } from './table/RequirementControlsTable'; interface RequirementControlsProps { diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTable.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTable.tsx index 9ab78fd3c..c482e8f8b 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTable.tsx @@ -3,9 +3,9 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { useDataTable } from '@/hooks/use-data-table'; -import type { Control, Task } from '@comp/db/types'; import { Input } from '@comp/ui/input'; import { ColumnDef } from '@tanstack/react-table'; +import type { Control, Task } from '@trycompai/db'; import Link from 'next/link'; import { useParams } from 'next/navigation'; import { useMemo, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTableColumns.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTableColumns.tsx index 68bf8b9c2..63feda7cd 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTableColumns.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/components/table/RequirementControlsTableColumns.tsx @@ -2,9 +2,9 @@ import { StatusIndicator } from '@/components/status-indicator'; import { isPolicyCompleted } from '@/lib/control-compliance'; -import type { Control, Policy, Task } from '@comp/db/types'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@comp/ui/tooltip'; import type { ColumnDef } from '@tanstack/react-table'; +import type { Control, Policy, Task } from '@trycompai/db'; import Link from 'next/link'; import { useParams } from 'next/navigation'; import { getControlStatus } from '../../../../../lib/utils'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/page.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/page.tsx index 420991bfe..8932cd607 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/[frameworkInstanceId]/requirements/[requirementKey]/page.tsx @@ -1,7 +1,7 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { FrameworkEditorRequirement } from '@comp/db/types'; +import type { FrameworkEditorRequirement } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; import { getSingleFrameworkInstanceWithControls } from '../../../data/getSingleFrameworkInstanceWithControls'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/AddFrameworkModal.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/components/AddFrameworkModal.tsx index d803e1619..ff75e0df8 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/AddFrameworkModal.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/AddFrameworkModal.tsx @@ -11,7 +11,6 @@ import type { z } from 'zod'; import { addFrameworksToOrganizationAction } from '@/actions/organization/add-frameworks-to-organization-action'; import { addFrameworksSchema } from '@/actions/schema'; import { FrameworkCard } from '@/components/framework-card'; -import type { FrameworkEditorFramework } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { DialogContent, @@ -21,6 +20,7 @@ import { DialogTitle, } from '@comp/ui/dialog'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; +import type { FrameworkEditorFramework } from '@trycompai/db'; type Props = { onOpenChange: (isOpen: boolean) => void; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkCard.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkCard.tsx index e1e102a7d..093ba0d82 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkCard.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkCard.tsx @@ -1,10 +1,10 @@ 'use client'; -import type { Control, Task } from '@comp/db/types'; import { Badge } from '@comp/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; import { cn } from '@comp/ui/cn'; import { Progress } from '@comp/ui/progress'; +import type { Control, Task } from '@trycompai/db'; import { BarChart3, Clock } from 'lucide-react'; import Link from 'next/link'; import { useParams } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkList.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkList.tsx index ebc7aac6d..4b12ac530 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkList.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworkList.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Control, Task } from '@comp/db/types'; +import { Control, Task } from '@trycompai/db'; import type { FrameworkInstanceWithControls } from '../types'; import { FrameworkCard } from './FrameworkCard'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworksOverview.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworksOverview.tsx index ef987fbc1..9d56c9e30 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworksOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/FrameworksOverview.tsx @@ -1,9 +1,9 @@ 'use client'; -import type { FrameworkEditorFramework } from '@comp/db/types'; -import { Control, Task } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog } from '@comp/ui/dialog'; +import type { FrameworkEditorFramework } from '@trycompai/db'; +import { Control, Task } from '@trycompai/db'; import { PlusIcon } from 'lucide-react'; import { useParams } from 'next/navigation'; import { useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/types.ts b/apps/app/src/app/(app)/[orgId]/frameworks/components/types.ts index eacb03f78..d5b07f3ce 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/types.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/types.ts @@ -1,4 +1,4 @@ -import type { FrameworkInstance, IntegrationResult, Policy, Task } from '@comp/db/types'; +import type { FrameworkInstance, IntegrationResult, Policy, Task } from '@trycompai/db'; import { FrameworkInstanceWithControls } from '../types'; export interface ComplianceScoresProps { diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/data/getAllFrameworkInstancesWithControls.ts b/apps/app/src/app/(app)/[orgId]/frameworks/data/getAllFrameworkInstancesWithControls.ts index 318742745..3bbea2b69 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/data/getAllFrameworkInstancesWithControls.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/data/getAllFrameworkInstancesWithControls.ts @@ -1,7 +1,7 @@ 'use server'; -import { db } from '@comp/db'; -import type { Control, PolicyStatus, RequirementMap } from '@comp/db/types'; +import type { Control, PolicyStatus, RequirementMap } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { cache } from 'react'; import type { FrameworkInstanceWithControls } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/data/getFrameworkWithComplianceScores.ts b/apps/app/src/app/(app)/[orgId]/frameworks/data/getFrameworkWithComplianceScores.ts index 19adfd7bc..c255cceb7 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/data/getFrameworkWithComplianceScores.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/data/getFrameworkWithComplianceScores.ts @@ -4,7 +4,7 @@ import { Control, // Policy might still be useful if full Policy objects were ever passed, but selected fields are more common now type PolicyStatus, // For the selected policy type type Task, -} from '@comp/db/types'; +} from '@trycompai/db'; import { FrameworkInstanceWithComplianceScore } from '../components/types'; import { FrameworkInstanceWithControls } from '../types'; // This now has policies with selected fields diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/data/getSingleFrameworkInstanceWithControls.ts b/apps/app/src/app/(app)/[orgId]/frameworks/data/getSingleFrameworkInstanceWithControls.ts index 7d5030cc1..3dd791503 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/data/getSingleFrameworkInstanceWithControls.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/data/getSingleFrameworkInstanceWithControls.ts @@ -1,7 +1,7 @@ 'use server'; -import { db } from '@comp/db'; -import type { Control, PolicyStatus, RequirementMap } from '@comp/db/types'; +import type { Control, PolicyStatus, RequirementMap } from '@trycompai/db'; +import { db } from '@trycompai/db'; import type { FrameworkInstanceWithControls } from '../types'; export const getSingleFrameworkInstanceWithControls = async ({ diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/lib/utils.ts b/apps/app/src/app/(app)/[orgId]/frameworks/lib/utils.ts index e0f0b4687..431a1e9e1 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/lib/utils.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/lib/utils.ts @@ -1,7 +1,7 @@ import { StatusType } from '@/components/status-indicator'; // Import base types explicitly -import type { Control, PolicyStatus } from '@comp/db/types'; -import { Task } from '@comp/db/types'; +import type { Control, PolicyStatus } from '@trycompai/db'; +import { Task } from '@trycompai/db'; // Define the expected structure for policies passed to getControlStatus // This should match the data structure provided by the calling code (e.g., from a Prisma select) diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/page.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/page.tsx index 3c8c28235..c163e97df 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/page.tsx @@ -1,7 +1,7 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; import { CheckoutCompleteTracking } from '@/components/tracking/CheckoutCompleteTracking'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; import { cache } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/types.ts b/apps/app/src/app/(app)/[orgId]/frameworks/types.ts index 6dccfa4b6..9488fb64e 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/types.ts +++ b/apps/app/src/app/(app)/[orgId]/frameworks/types.ts @@ -4,7 +4,7 @@ import { FrameworkInstance, PolicyStatus, RequirementMap, -} from '@comp/db/types'; +} from '@trycompai/db'; export type FrameworkInstanceWithControls = FrameworkInstance & { framework: FrameworkEditorFramework; diff --git a/apps/app/src/app/(app)/[orgId]/integrations/page.tsx b/apps/app/src/app/(app)/[orgId]/integrations/page.tsx index 0b294ca2d..05ab7d3dd 100644 --- a/apps/app/src/app/(app)/[orgId]/integrations/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/integrations/page.tsx @@ -1,7 +1,7 @@ import { IntegrationsHeader } from '@/components/integrations/integrations-header'; import { IntegrationsServer } from '@/components/integrations/integrations.server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/layout.tsx b/apps/app/src/app/(app)/[orgId]/layout.tsx index ce709bf12..90cc0ed09 100644 --- a/apps/app/src/app/(app)/[orgId]/layout.tsx +++ b/apps/app/src/app/(app)/[orgId]/layout.tsx @@ -5,7 +5,7 @@ import { AssistantSheet } from '@/components/sheets/assistant-sheet'; import { Sidebar } from '@/components/sidebar'; import { SidebarProvider } from '@/context/sidebar-context'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import dynamic from 'next/dynamic'; import { cookies, headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/get-employee-details.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/get-employee-details.ts index a4506718e..45841cae6 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/get-employee-details.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/get-employee-details.ts @@ -2,7 +2,7 @@ import { authActionClient } from '@/actions/safe-action'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { type AppError, appErrors, employeeDetailsInputSchema } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-department.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-department.ts index 22f55acbf..42a6b2b82 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-department.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-department.ts @@ -2,8 +2,8 @@ import { authActionClient } from '@/actions/safe-action'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Departments } from '@comp/db/types'; +import type { Departments } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { type AppError, appErrors, updateEmployeeDepartmentSchema } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-details.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-details.ts index 1d8c7143a..fc82e3c59 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-details.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-details.ts @@ -2,7 +2,7 @@ import { authActionClient } from '@/actions/safe-action'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-status.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-status.ts index 2831004eb..13a1fdec5 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-status.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee-status.ts @@ -2,7 +2,7 @@ import { authActionClient } from '@/actions/safe-action'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts index 737aaf7ae..acfa05426 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/actions/update-employee.ts @@ -1,9 +1,8 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; -import type { Departments } from '@comp/db/types'; -import { Prisma } from '@comp/db/types'; +import type { Departments } from '@trycompai/db'; +import { db, Prisma } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; import { appErrors } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EditableDepartment.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EditableDepartment.tsx index 84e641c18..7b5a1a29c 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EditableDepartment.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EditableDepartment.tsx @@ -1,7 +1,7 @@ 'use client'; -import type { Departments } from '@comp/db/types'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; +import type { Departments } from '@trycompai/db'; import { useAction } from 'next-safe-action/hooks'; import { useState } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Employee.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Employee.tsx index 3a2ad46ef..61598ecd3 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Employee.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Employee.tsx @@ -1,7 +1,7 @@ 'use client'; import type { TrainingVideo } from '@/lib/data/training-videos'; -import type { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@comp/db/types'; +import type { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@trycompai/db'; import type { FleetPolicy, Host } from '../../devices/types'; import { EmployeeDetails } from './EmployeeDetails'; import { EmployeeTasks } from './EmployeeTasks'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeDetails.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeDetails.tsx index d1c3902ee..77c17b37e 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeDetails.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeDetails.tsx @@ -1,10 +1,10 @@ 'use client'; -import type { Departments, Member, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@comp/ui/card'; import { Form } from '@comp/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { Departments, Member, User } from '@trycompai/db'; import { Save } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useForm } from 'react-hook-form'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeTasks.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeTasks.tsx index afdb48cf0..93f379e7a 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeTasks.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/EmployeeTasks.tsx @@ -1,5 +1,5 @@ import type { TrainingVideo } from '@/lib/data/training-videos'; -import type { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@comp/db/types'; +import type { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@trycompai/db'; import { cn } from '@/lib/utils'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Fields/Department.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Fields/Department.tsx index 9a1003bfd..6acad7268 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Fields/Department.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/components/Fields/Department.tsx @@ -1,6 +1,6 @@ -import type { Departments } from '@comp/db/types'; import { FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; +import type { Departments } from '@trycompai/db'; import type { Control } from 'react-hook-form'; import type { EmployeeFormValues } from '../EmployeeDetails'; diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/layout.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/layout.tsx index ccd02cd74..18359f0a0 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/layout.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/layout.tsx @@ -1,4 +1,3 @@ -import { db } from '@comp/db'; import { Breadcrumb, BreadcrumbItem, @@ -7,6 +6,7 @@ import { BreadcrumbPage, BreadcrumbSeparator, } from '@comp/ui/breadcrumb'; +import { db } from '@trycompai/db'; export default async function Layout({ children, diff --git a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/page.tsx b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/page.tsx index 59fb61641..0184fa035 100644 --- a/apps/app/src/app/(app)/[orgId]/people/[employeeId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/[employeeId]/page.tsx @@ -6,8 +6,8 @@ import { trainingVideos as trainingVideosData, } from '@/lib/data/training-videos'; import { getFleetInstance } from '@/lib/fleet'; -import { db } from '@comp/db'; -import type { EmployeeTrainingVideoCompletion, Member } from '@comp/db/types'; +import type { EmployeeTrainingVideoCompletion, Member } from '@trycompai/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { notFound, redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/actions/addEmployeeWithoutInvite.ts b/apps/app/src/app/(app)/[orgId]/people/all/actions/addEmployeeWithoutInvite.ts index 95574432b..9b25d2458 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/actions/addEmployeeWithoutInvite.ts +++ b/apps/app/src/app/(app)/[orgId]/people/all/actions/addEmployeeWithoutInvite.ts @@ -1,8 +1,8 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Role } from '@comp/db/types'; +import type { Role } from '@trycompai/db'; +import { db } from '@trycompai/db'; export const addEmployeeWithoutInvite = async ({ email, diff --git a/apps/app/src/app/(app)/[orgId]/people/all/actions/removeMember.ts b/apps/app/src/app/(app)/[orgId]/people/all/actions/removeMember.ts index baa576c90..9f62629bd 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/actions/removeMember.ts +++ b/apps/app/src/app/(app)/[orgId]/people/all/actions/removeMember.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; // Adjust safe-action import for colocalized structure diff --git a/apps/app/src/app/(app)/[orgId]/people/all/actions/revokeInvitation.ts b/apps/app/src/app/(app)/[orgId]/people/all/actions/revokeInvitation.ts index a2d5a515e..7f249092e 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/actions/revokeInvitation.ts +++ b/apps/app/src/app/(app)/[orgId]/people/all/actions/revokeInvitation.ts @@ -1,6 +1,6 @@ 'use server'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; // Remove unused Role import if not needed elsewhere // import { Role } from "@comp/db/types"; import { revalidatePath, revalidateTag } from 'next/cache'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts b/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts index a4377b881..33dfecb26 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts +++ b/apps/app/src/app/(app)/[orgId]/people/all/actions/updateMemberRole.ts @@ -1,7 +1,6 @@ 'use server'; -import { db } from '@comp/db'; -import { Departments, Role } from '@comp/db/types'; +import { db, Departments, Role } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; // Adjust safe-action import for colocalized structure diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx index c59e7e3a3..0a330c6ba 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/InviteMembersModal.tsx @@ -1,7 +1,7 @@ 'use client'; -import type { Role } from '@comp/db/types'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { Role } from '@trycompai/db'; import { Loader2, PlusCircle, Trash2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx index 6dc7b6706..d69a38399 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MemberRow.tsx @@ -5,7 +5,6 @@ import Link from 'next/link'; import { useParams } from 'next/navigation'; import { useRef, useState } from 'react'; -import type { Role } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -35,6 +34,7 @@ import { DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; import { Label } from '@comp/ui/label'; +import type { Role } from '@trycompai/db'; import { MultiRoleCombobox } from './MultiRoleCombobox'; import type { MemberWithUser } from './TeamMembers'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx index 58fe0ad37..b026783d9 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleCombobox.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Role } from '@comp/db/types'; +import type { Role } from '@trycompai/db'; import * as React from 'react'; import { Dialog, DialogContent } from '@comp/ui/dialog'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx index 57c2bfc71..679e8c17d 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxContent.tsx @@ -1,6 +1,5 @@ 'use client'; -import type { Role } from '@comp/db/types'; // Assuming Role is from prisma import { Command, CommandEmpty, @@ -9,6 +8,7 @@ import { CommandItem, CommandList, } from '@comp/ui/command'; +import type { Role } from '@trycompai/db'; // Assuming Role is from prisma import { Check } from 'lucide-react'; import { cn } from '@comp/ui/cn'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx index 836bb0d5c..b5ab52073 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/MultiRoleComboboxTrigger.tsx @@ -1,10 +1,10 @@ 'use client'; -import type { Role } from '@comp/db/types'; // Assuming Role is from prisma import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; import { cn } from '@comp/ui/cn'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@comp/ui/tooltip'; +import type { Role } from '@trycompai/db'; // Assuming Role is from prisma import { ChevronsUpDown, Lock, X } from 'lucide-react'; interface MultiRoleComboboxTriggerProps { diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx index 56ee03120..a835e96e5 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/PendingInvitationRow.tsx @@ -1,6 +1,5 @@ 'use client'; -import type { Invitation } from '@comp/db/types'; import { Avatar, AvatarFallback } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; @@ -19,6 +18,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; +import type { Invitation } from '@trycompai/db'; import { Clock, MoreHorizontal, Trash2 } from 'lucide-react'; import { useEffect, useMemo, useRef, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx index a8a8b3b04..fcdb0ec54 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembers.tsx @@ -1,8 +1,8 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Invitation, Member, User } from '@comp/db/types'; +import type { Invitation, Member, User } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { removeMember } from '../actions/removeMember'; import { revokeInvitation } from '../actions/revokeInvitation'; diff --git a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx index a3b29dac7..12bb1c4da 100644 --- a/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/all/components/TeamMembersClient.tsx @@ -7,12 +7,12 @@ import { useState } from 'react'; import { toast } from 'sonner'; import { authClient } from '@/utils/auth-client'; -import type { Invitation, Role } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent } from '@comp/ui/card'; import { Input } from '@comp/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Separator } from '@comp/ui/separator'; +import type { Invitation, Role } from '@trycompai/db'; import { MemberRow } from './MemberRow'; import { PendingInvitationRow } from './PendingInvitationRow'; diff --git a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeeCompletionChart.tsx b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeeCompletionChart.tsx index 48bba11f9..415d40309 100644 --- a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeeCompletionChart.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeeCompletionChart.tsx @@ -6,7 +6,7 @@ import * as React from 'react'; // Use correct types from the database import { TrainingVideo } from '@/lib/data/training-videos'; -import { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@comp/db/types'; +import { EmployeeTrainingVideoCompletion, Member, Policy, User } from '@trycompai/db'; interface EmployeeCompletionChartProps { employees: (Member & { diff --git a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx index f0e68d3d8..0d0bab5af 100644 --- a/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/dashboard/components/EmployeesOverview.tsx @@ -1,7 +1,7 @@ import { trainingVideos as trainingVideosData } from '@/lib/data/training-videos'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Member, Policy, User } from '@comp/db/types'; +import type { Member, Policy, User } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { EmployeeCompletionChart } from './EmployeeCompletionChart'; diff --git a/apps/app/src/app/(app)/[orgId]/people/devices/data/index.ts b/apps/app/src/app/(app)/[orgId]/people/devices/data/index.ts index f95377807..7e23d5a4b 100644 --- a/apps/app/src/app/(app)/[orgId]/people/devices/data/index.ts +++ b/apps/app/src/app/(app)/[orgId]/people/devices/data/index.ts @@ -2,7 +2,7 @@ import { getFleetInstance } from '@/lib/fleet'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import type { Host } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/people/layout.tsx b/apps/app/src/app/(app)/[orgId]/people/layout.tsx index 0a9cb206c..a388759d6 100644 --- a/apps/app/src/app/(app)/[orgId]/people/layout.tsx +++ b/apps/app/src/app/(app)/[orgId]/people/layout.tsx @@ -1,7 +1,7 @@ import { getPostHogClient } from '@/app/posthog'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; import { SecondaryMenu } from '@comp/ui/secondary-menu'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx b/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx index a0195277c..5cf5afbbf 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-assignee-chart.tsx @@ -35,6 +35,26 @@ const CHART_COLORS = { }; export function PolicyAssigneeChart({ data }: PolicyAssigneeChartProps) { + // Sort assignees by total policies (descending) + const sortedData = React.useMemo(() => { + if (!data || data.length === 0) return []; + return [...data] + .sort((a, b) => b.total - a.total) + .slice(0, 4) + .reverse(); + }, [data]); + + // Calculate total policies and top assignee + const totalPolicies = React.useMemo(() => { + if (!data || data.length === 0) return 0; + return data.reduce((sum, item) => sum + item.total, 0); + }, [data]); + + const topAssignee = React.useMemo(() => { + if (!data || data.length === 0) return null; + return data.reduce((prev, current) => (prev.total > current.total ? prev : current)); + }, [data]); + if (!data || data.length === 0) { return ( @@ -64,14 +84,6 @@ export function PolicyAssigneeChart({ data }: PolicyAssigneeChartProps) { ); } - // Sort assignees by total policies (descending) - const sortedData = React.useMemo(() => { - return [...data] - .sort((a, b) => b.total - a.total) - .slice(0, 4) - .reverse(); - }, [data]); - const chartData = sortedData.map((item) => ({ name: item.name, published: item.published, @@ -99,17 +111,6 @@ export function PolicyAssigneeChart({ data }: PolicyAssigneeChartProps) { }, } satisfies ChartConfig; - // Calculate total policies and top assignee - const totalPolicies = React.useMemo(() => { - if (!data.length) return 0; - return data.reduce((sum, item) => sum + item.total, 0); - }, [data]); - - const topAssignee = React.useMemo(() => { - if (!data.length) return null; - return data.reduce((prev, current) => (prev.total > current.total ? prev : current)); - }, [data]); - return ( diff --git a/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-status-chart.tsx b/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-status-chart.tsx index f99236491..f35a200ec 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-status-chart.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/(overview)/components/policy-status-chart.tsx @@ -49,6 +49,39 @@ const StatusTooltip = ({ active, payload }: any) => { }; export function PolicyStatusChart({ data }: PolicyStatusChartProps) { + const chartData = React.useMemo(() => { + if (!data) return []; + const items = [ + { + name: 'Published', + value: data.publishedPolicies, + fill: CHART_COLORS.published, + }, + { + name: 'Draft', + value: data.draftPolicies, + fill: CHART_COLORS.draft, + }, + { + name: 'Needs Review', + value: data.needsReviewPolicies, + fill: CHART_COLORS.needs_review, + }, + { + name: 'Archived', + value: data.archivedPolicies, + fill: CHART_COLORS.archived, + }, + ]; + return items.filter((item) => item.value > 0); + }, [data]); + + // Calculate most common status + const mostCommonStatus = React.useMemo(() => { + if (!chartData.length) return null; + return chartData.reduce((prev, current) => (prev.value > current.value ? prev : current)); + }, [chartData]); + if (!data) { return ( @@ -75,45 +108,12 @@ export function PolicyStatusChart({ data }: PolicyStatusChartProps) { ); } - const chartData = React.useMemo(() => { - const items = [ - { - name: 'Published', - value: data.publishedPolicies, - fill: CHART_COLORS.published, - }, - { - name: 'Draft', - value: data.draftPolicies, - fill: CHART_COLORS.draft, - }, - { - name: 'Archived', - value: data.archivedPolicies, - fill: CHART_COLORS.archived, - }, - { - name: 'Needs Review', - value: data.needsReviewPolicies, - fill: CHART_COLORS.needs_review, - }, - ]; - - return items.filter((item) => item.value); - }, [data]); - const chartConfig = { value: { label: 'Count', }, } satisfies ChartConfig; - // Calculate most common status - const mostCommonStatus = React.useMemo(() => { - if (!chartData.length) return null; - return chartData.reduce((prev, current) => (prev.value > current.value ? prev : current)); - }, [chartData]); - return ( diff --git a/apps/app/src/app/(app)/[orgId]/policies/(overview)/page.tsx b/apps/app/src/app/(app)/[orgId]/policies/(overview)/page.tsx index 324aaf0cd..bc6a62202 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/(overview)/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/(overview)/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { Suspense } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/mapPolicyToControls.ts b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/mapPolicyToControls.ts index 7e0153dae..f0b0c6f17 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/mapPolicyToControls.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/mapPolicyToControls.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/unmapPolicyFromControl.ts b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/unmapPolicyFromControl.ts index 094e79c0d..d15540ea9 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/unmapPolicyFromControl.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/actions/unmapPolicyFromControl.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyArchiveSheet.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyArchiveSheet.tsx index 2309e0c70..561bea213 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyArchiveSheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyArchiveSheet.tsx @@ -1,11 +1,11 @@ 'use client'; import { archivePolicyAction } from '@/actions/policies/archive-policy'; -import { Policy } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import { Policy } from '@trycompai/db'; import { ArchiveIcon, ArchiveRestoreIcon, X } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingConfirmDeleteModal.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingConfirmDeleteModal.tsx index a32e4b7d9..f2434c8a6 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingConfirmDeleteModal.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingConfirmDeleteModal.tsx @@ -1,4 +1,3 @@ -import type { Control } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog, @@ -9,6 +8,7 @@ import { DialogTitle, DialogTrigger, } from '@comp/ui/dialog'; +import type { Control } from '@trycompai/db'; import { X } from 'lucide-react'; import { useParams } from 'next/navigation'; import { useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingModal.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingModal.tsx index bcdc9f85c..87bc643ed 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingModal.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappingModal.tsx @@ -1,4 +1,3 @@ -import { Control } from '@comp/db/types'; import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; import { @@ -11,6 +10,7 @@ import { DialogTrigger, } from '@comp/ui/dialog'; import MultipleSelector, { Option } from '@comp/ui/multiple-selector'; +import { Control } from '@trycompai/db'; import { PlusIcon } from 'lucide-react'; import { useParams } from 'next/navigation'; import { useEffect, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappings.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappings.tsx index e782e3870..d9019ad74 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappings.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyControlMappings.tsx @@ -1,6 +1,6 @@ -import { Control } from '@comp/db/types'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; import { SelectPills } from '@comp/ui/select-pills'; +import { Control } from '@trycompai/db'; import { useAction } from 'next-safe-action/hooks'; import { useParams } from 'next/navigation'; import { useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyDeleteDialog.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyDeleteDialog.tsx index f07890ff0..b371918c7 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyDeleteDialog.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyDeleteDialog.tsx @@ -1,7 +1,6 @@ 'use client'; import { deletePolicyAction } from '@/actions/policies/delete-policy'; -import { Policy } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog, @@ -13,6 +12,7 @@ import { } from '@comp/ui/dialog'; import { Form } from '@comp/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Policy } from '@trycompai/db'; import { Trash2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverview.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverview.tsx index ff541ec2c..50f863ad0 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverview.tsx @@ -3,8 +3,6 @@ import { acceptRequestedPolicyChangesAction } from '@/actions/policies/accept-requested-policy-changes'; import { denyRequestedPolicyChangesAction } from '@/actions/policies/deny-requested-policy-changes'; import { authClient } from '@/utils/auth-client'; -import type { Member, Policy, User } from '@comp/db/types'; -import { Control } from '@comp/db/types'; import { Alert, AlertDescription, AlertTitle } from '@comp/ui/alert'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; @@ -15,6 +13,8 @@ import { DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; import { Icons } from '@comp/ui/icons'; +import type { Member, Policy, User } from '@trycompai/db'; +import { Control } from '@trycompai/db'; import { format } from 'date-fns'; import { ArchiveIcon, diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverviewSheet.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverviewSheet.tsx index 47c0edb68..305ee4ad1 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverviewSheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyOverviewSheet.tsx @@ -1,12 +1,12 @@ 'use client'; import { UpdatePolicyForm } from '@/components/forms/policies/update-policy-form'; -import { Policy } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import { Policy } from '@trycompai/db'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyPage.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyPage.tsx index a6e032237..e9feb6a2b 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyPage.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyPage.tsx @@ -1,5 +1,5 @@ -import { Control, Member, Policy, User } from '@comp/db/types'; import type { JSONContent } from '@tiptap/react'; +import { Control, Member, Policy, User } from '@trycompai/db'; import { Comments, CommentWithAuthor } from '../../../../../../components/comments/Comments'; import { AuditLogWithRelations } from '../data'; import { PolicyPageEditor } from '../editor/components/PolicyDetails'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/RecentAuditLogs.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/RecentAuditLogs.tsx index c558caeb6..39af0988d 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/RecentAuditLogs.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/RecentAuditLogs.tsx @@ -1,9 +1,9 @@ -import { AuditLog, AuditLogEntityType } from '@comp/db/types'; import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; import { cn } from '@comp/ui/cn'; import { ScrollArea } from '@comp/ui/scroll-area'; +import { AuditLog, AuditLogEntityType } from '@trycompai/db'; import { format } from 'date-fns'; import { ActivityIcon, diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/SubmitApprovalDialog.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/SubmitApprovalDialog.tsx index f0cc514f5..d8de1884c 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/SubmitApprovalDialog.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/SubmitApprovalDialog.tsx @@ -1,7 +1,6 @@ 'use client'; import { SelectAssignee } from '@/components/SelectAssignee'; -import { Member, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog, @@ -11,6 +10,7 @@ import { DialogHeader, DialogTitle, } from '@comp/ui/dialog'; +import { Member, User } from '@trycompai/db'; import { Loader2 } from 'lucide-react'; interface SubmitApprovalDialogProps { diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/UpdatePolicyOverview.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/UpdatePolicyOverview.tsx index 3dcee8017..69e76b9c0 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/UpdatePolicyOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/UpdatePolicyOverview.tsx @@ -4,13 +4,13 @@ import { submitPolicyForApprovalAction } from '@/actions/policies/submit-policy- import { updatePolicyFormAction } from '@/actions/policies/update-policy-form-action'; import { SelectAssignee } from '@/components/SelectAssignee'; import { StatusIndicator } from '@/components/status-indicator'; -import { Departments, Frequency, Member, type Policy, PolicyStatus, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Calendar } from '@comp/ui/calendar'; import { cn } from '@comp/ui/cn'; import { Popover, PopoverContent, PopoverTrigger } from '@comp/ui/popover'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Switch } from '@comp/ui/switch'; +import { Departments, Frequency, Member, type Policy, PolicyStatus, User } from '@trycompai/db'; import { format } from 'date-fns'; import { CalendarIcon, Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/data/index.ts b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/data/index.ts index 4e3914c49..d8eef8505 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/data/index.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/data/index.ts @@ -2,16 +2,16 @@ import { CommentWithAuthor } from '@/components/comments/Comments'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; import { AttachmentEntityType, AuditLog, AuditLogEntityType, CommentEntityType, + db, Member, Organization, User, -} from '@comp/db/types'; +} from '@trycompai/db'; import { headers } from 'next/headers'; // Define the type for AuditLog with its relations diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/get-policy-details.ts b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/get-policy-details.ts index 766c6a482..4baf889f5 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/get-policy-details.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/get-policy-details.ts @@ -2,7 +2,7 @@ import { authActionClient } from '@/actions/safe-action'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { appErrors, policyDetailsInputSchema } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/update-policy.ts b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/update-policy.ts index d925e7396..6f74cae18 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/update-policy.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/editor/actions/update-policy.ts @@ -3,7 +3,7 @@ import { authActionClient } from '@/actions/safe-action'; import type { ActionResponse } from '@/actions/types'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { appErrors, updatePolicySchema } from '../types'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table-columns.tsx b/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table-columns.tsx index bc61d6a9d..e89125f54 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table-columns.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table-columns.tsx @@ -3,8 +3,8 @@ import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; import { StatusIndicator } from '@/components/status-indicator'; import { formatDate } from '@/lib/format'; -import { Policy } from '@comp/db/types'; import { ColumnDef } from '@tanstack/react-table'; +import { Policy } from '@trycompai/db'; export function getPolicyColumns(): ColumnDef[] { return [ diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts b/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts index 8907b17e7..fd036891b 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/all/data/queries.ts @@ -1,8 +1,7 @@ import 'server-only'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Prisma } from '@comp/db/types'; +import { db, Prisma } from '@trycompai/db'; import { headers } from 'next/headers'; import { cache } from 'react'; import type { GetPolicySchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/data/validations.ts b/apps/app/src/app/(app)/[orgId]/policies/all/data/validations.ts index 0eecab1fb..37e44e33b 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/data/validations.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/all/data/validations.ts @@ -1,5 +1,5 @@ import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; -import { Policy, PolicyStatus } from '@comp/db/types'; +import { Policy, PolicyStatus } from '@trycompai/db'; import { createSearchParamsCache, parseAsArrayOf, diff --git a/apps/app/src/app/(app)/[orgId]/risk/(overview)/RisksTable.tsx b/apps/app/src/app/(app)/[orgId]/risk/(overview)/RisksTable.tsx index 92d99b759..fa19be479 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/(overview)/RisksTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/risk/(overview)/RisksTable.tsx @@ -5,8 +5,8 @@ import { DataTableToolbar } from '@/components/data-table/data-table-toolbar'; import { CreateRiskSheet } from '@/components/sheets/create-risk-sheet'; import { useDataTable } from '@/hooks/use-data-table'; import { useSession } from '@/utils/auth-client'; -import type { Member, Risk, User } from '@comp/db/types'; import { ColumnDef } from '@tanstack/react-table'; +import type { Member, Risk, User } from '@trycompai/db'; import { useQueryState } from 'nuqs'; import { useMemo } from 'react'; import { columns as getColumns } from './components/table/RiskColumns'; diff --git a/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/getRisks.ts b/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/getRisks.ts index ede1225b8..0b0aa7459 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/getRisks.ts +++ b/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/getRisks.ts @@ -1,8 +1,7 @@ import 'server-only'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Prisma, type User } from '@comp/db/types'; +import { db, Prisma, type User } from '@trycompai/db'; import { headers } from 'next/headers'; import type { GetRiskSchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/validations.ts b/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/validations.ts index 88213f6c0..e7fc63c20 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/validations.ts +++ b/apps/app/src/app/(app)/[orgId]/risk/(overview)/data/validations.ts @@ -1,5 +1,5 @@ import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; -import { Risk } from '@comp/db/types'; +import { Risk } from '@trycompai/db'; import { createSearchParamsCache, parseAsArrayOf, diff --git a/apps/app/src/app/(app)/[orgId]/risk/(overview)/page.tsx b/apps/app/src/app/(app)/[orgId]/risk/(overview)/page.tsx index 746bb7880..dbb0c2772 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/(overview)/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/risk/(overview)/page.tsx @@ -3,7 +3,7 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; import { CreateRiskSheet } from '@/components/sheets/create-risk-sheet'; import { getValidFilters } from '@/lib/data-table'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { cache } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/risk/[riskId]/page.tsx b/apps/app/src/app/(app)/[orgId]/risk/[riskId]/page.tsx index c896557e0..10d344c22 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/[riskId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/risk/[riskId]/page.tsx @@ -3,8 +3,7 @@ import { InherentRiskChart } from '@/components/risks/charts/InherentRiskChart'; import { ResidualRiskChart } from '@/components/risks/charts/ResidualRiskChart'; import { RiskOverview } from '@/components/risks/risk-overview'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, CommentEntityType, db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/risk/[riskId]/tasks/[taskId]/page.tsx b/apps/app/src/app/(app)/[orgId]/risk/[riskId]/tasks/[taskId]/page.tsx index e13f7fd63..defa73ae1 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/[riskId]/tasks/[taskId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/risk/[riskId]/tasks/[taskId]/page.tsx @@ -1,7 +1,7 @@ import { TaskOverview } from '@/components/risks/tasks/task-overview'; import { getUsers } from '@/hooks/use-users'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/api-keys/page.tsx b/apps/app/src/app/(app)/[orgId]/settings/api-keys/page.tsx index 9ea7f11cb..c13e4995d 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/api-keys/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/api-keys/page.tsx @@ -3,7 +3,7 @@ import { headers } from 'next/headers'; import { cache } from 'react'; import PageCore from '@/components/pages/PageCore.tsx'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { ApiKeysTable } from './components/table/ApiKeysTable'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx index 485aa0011..a209e21fb 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/ContextTable.tsx @@ -2,8 +2,8 @@ import { DataTable } from '@/components/data-table/data-table'; import { DataTableToolbar } from '@/components/data-table/data-table-toolbar'; import { useDataTable } from '@/hooks/use-data-table'; -import type { Context } from '@comp/db/types'; import { Button } from '@comp/ui/button'; +import type { Context } from '@trycompai/db'; import { Plus } from 'lucide-react'; import { useQueryState } from 'nuqs'; import { useMemo } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx index c334fe171..55b3bcdff 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-form.tsx @@ -2,12 +2,12 @@ import { createContextEntryAction } from '@/actions/context-hub/create-context-entry-action'; import { updateContextEntryAction } from '@/actions/context-hub/update-context-entry-action'; -import type { Context } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Input } from '@comp/ui/input'; import { Label } from '@comp/ui/label'; import { Textarea } from '@comp/ui/textarea'; +import type { Context } from '@trycompai/db'; import { Loader2 } from 'lucide-react'; import { useTransition } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx index afb32efed..984a6e041 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-hub-list.tsx @@ -1,6 +1,6 @@ -import type { Context } from '@comp/db/types'; import { Badge } from '@comp/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; +import type { Context } from '@trycompai/db'; export async function ContextHubList({ entries }: { entries: Context[] }) { return ( diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx index fc947650e..492685a11 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/context-list.tsx @@ -1,7 +1,6 @@ 'use client'; import { deleteContextEntryAction } from '@/actions/context-hub/delete-context-entry-action'; -import type { Context } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -30,6 +29,7 @@ import { DialogTitle, DialogTrigger, } from '@comp/ui/dialog'; +import type { Context } from '@trycompai/db'; import { Pencil, Plus } from 'lucide-react'; import { useState } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx index a3fd6be62..8d75d92f6 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/components/table/ContextColumns.tsx @@ -1,6 +1,5 @@ import { deleteContextEntryAction } from '@/actions/context-hub/delete-context-entry-action'; import { DataTableColumnHeader } from '@/components/data-table/data-table-column-header'; -import type { Context } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -14,6 +13,7 @@ import { } from '@comp/ui/alert-dialog'; import { Button } from '@comp/ui/button'; import type { ColumnDef } from '@tanstack/react-table'; +import type { Context } from '@trycompai/db'; import { Trash2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/context-hub/data/getContextEntries.ts b/apps/app/src/app/(app)/[orgId]/settings/context-hub/data/getContextEntries.ts index 2eb242381..560d5208c 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/context-hub/data/getContextEntries.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/context-hub/data/getContextEntries.ts @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { cache } from 'react'; import 'server-only'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/page.tsx b/apps/app/src/app/(app)/[orgId]/settings/page.tsx index 23c95e5ee..11e774a1c 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/page.tsx @@ -2,7 +2,7 @@ import { DeleteOrganization } from '@/components/forms/organization/delete-organ import { UpdateOrganizationName } from '@/components/forms/organization/update-organization-name'; import { UpdateOrganizationWebsite } from '@/components/forms/organization/update-organization-website'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { cache } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/check-dns-record.ts b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/check-dns-record.ts index 77591c99e..ed1c44243 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/check-dns-record.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/check-dns-record.ts @@ -2,7 +2,7 @@ import { authActionClient } from '@/actions/safe-action'; import { env } from '@/env.mjs'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { Vercel } from '@vercel/sdk'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/custom-domain.ts b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/custom-domain.ts index 49f522a20..14260abfb 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/custom-domain.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/custom-domain.ts @@ -3,7 +3,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { Vercel } from '@vercel/sdk'; import { revalidatePath, revalidateTag } from 'next/cache'; import { env } from 'node:process'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/is-friendly-available.ts b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/is-friendly-available.ts index 6ba4d69cd..b4a8b89d0 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/is-friendly-available.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/is-friendly-available.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { z } from 'zod'; const isFriendlyAvailableSchema = z.object({ diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/trust-portal-switch.ts b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/trust-portal-switch.ts index c73ce1d43..dfeadff52 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/trust-portal-switch.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/trust-portal-switch.ts @@ -3,7 +3,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/update-trust-portal-frameworks.ts b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/update-trust-portal-frameworks.ts index 99dffb959..8b066173b 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/update-trust-portal-frameworks.ts +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/actions/update-trust-portal-frameworks.ts @@ -1,7 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { headers } from 'next/headers'; diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx index 3e92c899e..62495cc81 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx @@ -58,7 +58,7 @@ export function TrustPortalDomain({ setIsCnameVerified(isCnameVerified === 'true'); setIsTxtVerified(isTxtVerified === 'true'); setIsVercelTxtVerified(isVercelTxtVerified === 'true'); - }, []); + }, [initialDomain]); const updateCustomDomain = useAction(customDomainAction, { onSuccess: (data) => { diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalSwitch.tsx b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalSwitch.tsx index f3578fc1d..6f69379b5 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalSwitch.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/components/TrustPortalSwitch.tsx @@ -86,9 +86,12 @@ export function TrustPortalSwitch({ }, }); - const onSubmit = async (data: z.infer) => { - await trustPortalSwitch.execute(data); - }; + const onSubmit = useCallback( + async (data: z.infer) => { + await trustPortalSwitch.execute(data); + }, + [trustPortalSwitch], + ); const portalUrl = domainVerified ? `https://${domain}` : `https://trust.inc/${slug}`; @@ -121,7 +124,7 @@ export function TrustPortalSwitch({ form.setValue('contactEmail', debouncedContactEmail); autoSave('contactEmail', debouncedContactEmail); } - }, [debouncedContactEmail]); + }, [debouncedContactEmail, autoSave, form]); const handleContactEmailBlur = useCallback( (e: React.FocusEvent) => { @@ -145,7 +148,7 @@ export function TrustPortalSwitch({ } setFriendlyUrlStatus('checking'); checkFriendlyUrl.execute({ friendlyUrl: debouncedFriendlyUrl, orgId }); - }, [debouncedFriendlyUrl, orgId, friendlyUrl]); + }, [debouncedFriendlyUrl, orgId, friendlyUrl, checkFriendlyUrl]); useEffect(() => { if (checkFriendlyUrl.status === 'executing') return; if (checkFriendlyUrl.result?.data?.isAvailable === true) { @@ -158,7 +161,7 @@ export function TrustPortalSwitch({ } else if (checkFriendlyUrl.result?.data?.isAvailable === false) { setFriendlyUrlStatus('unavailable'); } - }, [checkFriendlyUrl.status, checkFriendlyUrl.result]); + }, [checkFriendlyUrl.status, checkFriendlyUrl.result, autoSave, form, debouncedFriendlyUrl]); const handleFriendlyUrlBlur = useCallback( (e: React.FocusEvent) => { diff --git a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/page.tsx b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/page.tsx index 4211c9407..871fea560 100644 --- a/apps/app/src/app/(app)/[orgId]/settings/trust-portal/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/settings/trust-portal/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { cache } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/actions/delete-task.ts b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/actions/delete-task.ts index ba4f74ec1..32450ba0b 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/actions/delete-task.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/actions/delete-task.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/AttachmentItem.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/AttachmentItem.tsx index b2c83fe9f..78e13f423 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/AttachmentItem.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/AttachmentItem.tsx @@ -1,4 +1,3 @@ -import type { Attachment, AttachmentType } from '@comp/db/types'; import { AlertDialog, AlertDialogAction, @@ -12,6 +11,7 @@ import { } from '@comp/ui/alert-dialog'; import { Button } from '@comp/ui/button'; import { cn } from '@comp/ui/cn'; +import type { Attachment, AttachmentType } from '@trycompai/db'; import { Loader2, Trash2 } from 'lucide-react'; import React from 'react'; import { getAttachmentIconAndColor } from '../utils/attachmentUtils'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx index 03b5d44d5..1c48c926b 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx @@ -1,7 +1,7 @@ 'use client'; -import type { Attachment, Member, Task, User } from '@comp/db/types'; import { Card } from '@comp/ui/card'; +import type { Attachment, Member, Task, User } from '@trycompai/db'; import { useMemo, useState } from 'react'; import { CommentWithAuthor } from '../../../../../../components/comments/Comments'; import { updateTask } from '../../actions/updateTask'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskBody.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskBody.tsx index 88bafa3ce..784bdf137 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskBody.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskBody.tsx @@ -1,11 +1,11 @@ 'use client'; import { uploadFile } from '@/actions/files/upload-file'; -import type { Attachment } from '@comp/db/types'; -import { AttachmentEntityType } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Label } from '@comp/ui/label'; import { Textarea } from '@comp/ui/textarea'; +import type { Attachment } from '@trycompai/db'; +import { AttachmentEntityType } from '@trycompai/db'; import { Loader2, Paperclip, Plus } from 'lucide-react'; import { useRouter } from 'next/navigation'; import type React from 'react'; @@ -106,7 +106,7 @@ export function TaskBody({ setIsUploading(false); } }, - [taskId, uploadFile, onAttachmentsChange, router], + [taskId, onAttachmentsChange, router], ); const triggerFileInput = () => { @@ -141,7 +141,7 @@ export function TaskBody({ onAttachmentsChange?.(); router.refresh(); }, - [deleteTaskAttachment, onAttachmentsChange, router], + [onAttachmentsChange, router], ); const isUploadingFile = isUploading; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskDeleteDialog.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskDeleteDialog.tsx index dd90e7c19..dafb34e90 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskDeleteDialog.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskDeleteDialog.tsx @@ -1,6 +1,5 @@ 'use client'; -import { Task } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Dialog, @@ -12,6 +11,7 @@ import { } from '@comp/ui/dialog'; import { Form } from '@comp/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Task } from '@trycompai/db'; import { Trash2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskMainContent.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskMainContent.tsx index 5a05bcbde..a056cb3b8 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskMainContent.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskMainContent.tsx @@ -1,7 +1,7 @@ 'use client'; -import { CommentEntityType, type Attachment, type Task } from '@comp/db/types'; import { Separator } from '@comp/ui/separator'; +import { CommentEntityType, type Attachment, type Task } from '@trycompai/db'; import { useEffect, useState } from 'react'; import { useDebouncedCallback } from 'use-debounce'; import { CommentForm } from '../../../../../../components/comments/CommentForm'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskPropertiesSidebar.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskPropertiesSidebar.tsx index 985facf78..d46db42f7 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskPropertiesSidebar.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/TaskPropertiesSidebar.tsx @@ -1,4 +1,3 @@ -import type { Departments, Member, Task, TaskFrequency, TaskStatus, User } from '@comp/db/types'; import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import { Button } from '@comp/ui/button'; @@ -8,6 +7,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; +import type { Departments, Member, Task, TaskFrequency, TaskStatus, User } from '@trycompai/db'; import { MoreVertical, Trash2 } from 'lucide-react'; import { useState } from 'react'; import { TaskStatusIndicator } from '../../components/TaskStatusIndicator'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/commentUtils.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/commentUtils.tsx index 1a0e87202..388b9fec6 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/commentUtils.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/commentUtils.tsx @@ -1,4 +1,4 @@ -import { AttachmentType } from '@comp/db/types'; +import { AttachmentType } from '@trycompai/db'; import { FileAudio, FileQuestion, FileText, FileVideo } from 'lucide-react'; // Formats a date object into relative time string (e.g., "5m ago") diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/constants.ts b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/constants.ts index 1787b438d..30d19847f 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/constants.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/constants.ts @@ -1,4 +1,4 @@ -import { Departments, TaskFrequency, TaskStatus } from '@comp/db/types'; +import { Departments, TaskFrequency, TaskStatus } from '@trycompai/db'; // Define possible statuses based on the Prisma schema export const taskStatuses: TaskStatus[] = ['todo', 'in_progress', 'done', 'not_relevant']; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/layout.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/layout.tsx index 6c72e1541..dda78d208 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/layout.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/layout.tsx @@ -1,5 +1,5 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; export default async function Layout({ children, diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx index 772cf831e..7e3745ef4 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx @@ -1,7 +1,6 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Attachment } from '@comp/db/types'; -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import type { Attachment } from '@trycompai/db'; +import { AttachmentEntityType, CommentEntityType, db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; import { CommentWithAuthor } from '../../../../../components/comments/Comments'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/utils/attachmentUtils.ts b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/utils/attachmentUtils.ts index a275a4d04..71de4f49b 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/utils/attachmentUtils.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/utils/attachmentUtils.ts @@ -1,4 +1,4 @@ -import type { AttachmentType } from '@comp/db/types'; +import type { AttachmentType } from '@trycompai/db'; import { FileAudio, FileIcon, FileImage, FileText, FileVideo } from 'lucide-react'; import type React from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/actions/deleteTaskAttachment.ts b/apps/app/src/app/(app)/[orgId]/tasks/actions/deleteTaskAttachment.ts index e6bc5c8cb..a2b9da60f 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/actions/deleteTaskAttachment.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/actions/deleteTaskAttachment.ts @@ -3,8 +3,7 @@ import { BUCKET_NAME, extractS3KeyFromUrl, s3Client } from '@/app/s3'; import { auth } from '@/utils/auth'; import { DeleteObjectCommand } from '@aws-sdk/client-s3'; -import { db } from '@comp/db'; -import { Attachment, AttachmentEntityType } from '@comp/db/types'; +import { Attachment, AttachmentEntityType, db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/actions/getTaskAttachmentUrl.ts b/apps/app/src/app/(app)/[orgId]/tasks/actions/getTaskAttachmentUrl.ts index 238bb87f6..7cd8b6b65 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/actions/getTaskAttachmentUrl.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/actions/getTaskAttachmentUrl.ts @@ -4,8 +4,7 @@ import { BUCKET_NAME, extractS3KeyFromUrl, s3Client } from '@/app/s3'; // Import import { auth } from '@/utils/auth'; import { GetObjectCommand } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; -import { db } from '@comp/db'; -import { AttachmentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, db } from '@trycompai/db'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTask.ts b/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTask.ts index 050e3f846..ab68bac0e 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTask.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTask.ts @@ -1,8 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Task } from '@comp/db/types'; +import { db, Task } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTaskOrder.ts b/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTaskOrder.ts index 3dc55fe63..2aa56f06a 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTaskOrder.ts +++ b/apps/app/src/app/(app)/[orgId]/tasks/actions/updateTaskOrder.ts @@ -2,8 +2,7 @@ import type { ActionResponse } from '@/types/actions'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { TaskStatus } from '@comp/db/types'; +import { db, TaskStatus } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/components/StatusGroup.tsx b/apps/app/src/app/(app)/[orgId]/tasks/components/StatusGroup.tsx index 12b35d153..8a7b299bc 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/components/StatusGroup.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/components/StatusGroup.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Member, Task, User } from '@comp/db/types'; +import type { Member, Task, User } from '@trycompai/db'; import clsx from 'clsx'; import { useRef } from 'react'; import { useDrop } from 'react-dnd'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskCard.tsx b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskCard.tsx index 317077518..b326562db 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskCard.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskCard.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Member, Task, TaskStatus, User } from '@comp/db/types'; +import type { Member, Task, TaskStatus, User } from '@trycompai/db'; import Image from 'next/image'; import { usePathname, useRouter } from 'next/navigation'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskList.tsx b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskList.tsx index 252ea6d9e..b5093a58c 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskList.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskList.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { Member, Task, User } from '@comp/db/types'; +import type { Member, Task, User } from '@trycompai/db'; import { useAction } from 'next-safe-action/hooks'; import { parseAsStringLiteral, useQueryState } from 'nuqs'; import { useCallback, useMemo } from 'react'; diff --git a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskStatusIndicator.tsx b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskStatusIndicator.tsx index e601b6498..b348ab90a 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/components/TaskStatusIndicator.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/components/TaskStatusIndicator.tsx @@ -1,6 +1,6 @@ import { STATUS_COLORS } from '@/components/status-indicator'; -import type { TaskStatus } from '@comp/db/types'; import { cn } from '@comp/ui/cn'; +import type { TaskStatus } from '@trycompai/db'; import { Check, Circle, CircleX, Loader2 } from 'lucide-react'; interface TaskStatusIndicatorProps { diff --git a/apps/app/src/app/(app)/[orgId]/tasks/page.tsx b/apps/app/src/app/(app)/[orgId]/tasks/page.tsx index 1ce089fbb..fd72f593f 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/page.tsx @@ -1,7 +1,6 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Role, TaskStatus } from '@comp/db/types'; +import { db, Role, TaskStatus } from '@trycompai/db'; import { Metadata } from 'next'; import { headers } from 'next/headers'; import { TaskList } from './components/TaskList'; diff --git a/apps/app/src/app/(app)/[orgId]/tests/dashboard/actions/run-tests.ts b/apps/app/src/app/(app)/[orgId]/tests/dashboard/actions/run-tests.ts index c3cde9041..ec2337c6f 100644 --- a/apps/app/src/app/(app)/[orgId]/tests/dashboard/actions/run-tests.ts +++ b/apps/app/src/app/(app)/[orgId]/tests/dashboard/actions/run-tests.ts @@ -2,8 +2,8 @@ import { sendIntegrationResults } from '@/jobs/tasks/integration/integration-results'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; import { runs, tasks } from '@trigger.dev/sdk/v3'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; diff --git a/apps/app/src/app/(app)/[orgId]/tests/dashboard/components/TestsLayout.tsx b/apps/app/src/app/(app)/[orgId]/tests/dashboard/components/TestsLayout.tsx index 0db3a1216..789f073c0 100644 --- a/apps/app/src/app/(app)/[orgId]/tests/dashboard/components/TestsLayout.tsx +++ b/apps/app/src/app/(app)/[orgId]/tests/dashboard/components/TestsLayout.tsx @@ -1,9 +1,9 @@ 'use client'; -import { Integration } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@comp/ui/tabs'; +import { Integration } from '@trycompai/db'; import { RefreshCw } from 'lucide-react'; import { useEffect, useState } from 'react'; import { toast } from 'sonner'; diff --git a/apps/app/src/app/(app)/[orgId]/tests/dashboard/page.tsx b/apps/app/src/app/(app)/[orgId]/tests/dashboard/page.tsx index 418386a4e..8beb448e7 100644 --- a/apps/app/src/app/(app)/[orgId]/tests/dashboard/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/tests/dashboard/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { TestsLayout } from './components/TestsLayout'; diff --git a/apps/app/src/app/(app)/[orgId]/tests/page.tsx b/apps/app/src/app/(app)/[orgId]/tests/page.tsx index 3cde5d4b8..5724960b5 100644 --- a/apps/app/src/app/(app)/[orgId]/tests/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/tests/page.tsx @@ -1,6 +1,6 @@ import { AppOnboarding } from '@/components/app-onboarding'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/components/VendorsTable.tsx b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/components/VendorsTable.tsx index c5f9c7a21..0da8d6548 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/components/VendorsTable.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/components/VendorsTable.tsx @@ -20,7 +20,7 @@ export function VendorsTable({ promises }: VendorsTableProps) { const [{ data: vendors, pageCount }, assignees] = React.use(promises); // Define columns memoized - const memoizedColumns = React.useMemo(() => columns, [orgId]); + const memoizedColumns = React.useMemo(() => columns, []); const { table } = useDataTable({ data: vendors, diff --git a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/queries.ts b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/queries.ts index 9d6568f3c..9f0bfca8d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/queries.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/queries.ts @@ -1,5 +1,5 @@ -import { db } from '@comp/db'; -import type { Member, User, Vendor } from '@comp/db/types'; +import type { Member, User, Vendor } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { cache } from 'react'; import type { GetVendorsSchema } from './validations'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/validations.ts b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/validations.ts index c1b91d8b0..c239f124d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/validations.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/(overview)/data/validations.ts @@ -1,5 +1,5 @@ import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; -import { Departments, Vendor, VendorStatus } from '@comp/db/types'; +import { Departments, Vendor, VendorStatus } from '@trycompai/db'; import { createSearchParamsCache, parseAsInteger, diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/schema.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/schema.ts index 95904d96f..53806398a 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/schema.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/schema.ts @@ -1,4 +1,4 @@ -import { TaskStatus, VendorCategory, VendorStatus } from '@comp/db/types'; +import { TaskStatus, VendorCategory, VendorStatus } from '@trycompai/db'; import { z } from 'zod'; export const createVendorTaskCommentSchema = z.object({ diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/create-task-action.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/create-task-action.ts index 67903d277..1115a8abd 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/create-task-action.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/create-task-action.ts @@ -3,7 +3,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { createVendorTaskSchema } from '../schema'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/update-task-action.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/update-task-action.ts index 491b3a6bd..52dd0f406 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/update-task-action.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/task/update-task-action.ts @@ -3,8 +3,8 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; -import type { TaskStatus } from '@comp/db/types'; +import type { TaskStatus } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { updateVendorTaskSchema } from '../schema'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-action.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-action.ts index b6d3bece3..ee7031f7f 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-action.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-action.ts @@ -3,7 +3,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath, revalidateTag } from 'next/cache'; import { updateVendorSchema } from './schema'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts index 0e67f1d6a..d49cd555b 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk.ts @@ -2,8 +2,7 @@ import { appErrors } from '@/lib/errors'; import type { ActionResponse } from '@/types/actions'; -import { db } from '@comp/db'; -import { Impact, Likelihood } from '@comp/db/types'; +import { db, Impact, Likelihood } from '@trycompai/db'; import { createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts index 4b23d08c0..889ca0135 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk.ts @@ -2,8 +2,7 @@ import { appErrors } from '@/lib/errors'; import type { ActionResponse } from '@/types/actions'; -import { db } from '@comp/db'; -import { Impact, Likelihood } from '@comp/db/types'; +import { db, Impact, Likelihood } from '@trycompai/db'; import { createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskChart.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskChart.tsx index 2cec194ac..b484ed3a5 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskChart.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskChart.tsx @@ -1,7 +1,7 @@ 'use client'; import { RiskMatrixChart } from '@/components/risks/charts/RiskMatrixChart'; -import type { Vendor } from '@comp/db/types'; +import type { Vendor } from '@trycompai/db'; import { updateVendorInherentRisk } from '../actions/update-vendor-inherent-risk'; interface InherentRiskChartProps { diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx index 89a835c1d..d093c39f2 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorInherentRiskSheet.tsx @@ -1,12 +1,12 @@ 'use client'; import { InherentRiskForm } from '@/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm'; -import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import { Impact, Likelihood } from '@trycompai/db'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskChart.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskChart.tsx index 425475d53..5a8c3e36d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskChart.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskChart.tsx @@ -1,7 +1,7 @@ 'use client'; import { RiskMatrixChart } from '@/components/risks/charts/RiskMatrixChart'; -import type { Vendor } from '@comp/db/types'; +import type { Vendor } from '@trycompai/db'; import { updateVendorResidualRisk } from '../actions/update-vendor-residual-risk'; interface ResidualRiskChartProps { diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskSheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskSheet.tsx index 8c7eb2eda..42bde9cdf 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskSheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/VendorResidualRiskSheet.tsx @@ -1,12 +1,12 @@ 'use client'; import { ResidualRiskForm } from '@/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm'; -import type { Vendor } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import type { Vendor } from '@trycompai/db'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx index 3ec42ffee..30ed16c9e 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/secondary-fields.tsx @@ -1,8 +1,8 @@ 'use client'; -import type { GlobalVendors, Member, User, Vendor } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@comp/ui/card'; +import type { GlobalVendors, Member, User, Vendor } from '@trycompai/db'; import { PencilIcon } from 'lucide-react'; import { useQueryState } from 'nuqs'; import { UpdateTitleAndDescriptionSheet } from '../title-and-description/update-title-and-description-sheet'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx index ba6b2a066..9af2d795d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/secondary-fields/update-secondary-fields-form.tsx @@ -2,11 +2,11 @@ import { SelectAssignee } from '@/components/SelectAssignee'; import { VENDOR_STATUS_TYPES, VendorStatus } from '@/components/vendor-status'; -import { Member, type User, type Vendor, VendorCategory } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Member, type User, type Vendor, VendorCategory } from '@trycompai/db'; import { Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useForm } from 'react-hook-form'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx index 3c3fee71c..7b18e7410 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/create-vendor-task-form.tsx @@ -1,7 +1,6 @@ 'use client'; import { SelectAssignee } from '@/components/SelectAssignee'; -import { Member, User } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Calendar } from '@comp/ui/calendar'; @@ -11,6 +10,7 @@ import { Input } from '@comp/ui/input'; import { Popover, PopoverContent, PopoverTrigger } from '@comp/ui/popover'; import { Textarea } from '@comp/ui/textarea'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Member, User } from '@trycompai/db'; import { format } from 'date-fns'; import { ArrowRightIcon, CalendarIcon } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/client-columns.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/client-columns.tsx index 97c59d29a..598d2e92f 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/client-columns.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/client-columns.tsx @@ -1,7 +1,7 @@ -import { Task, TaskStatus } from '@comp/db/types'; import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import type { ColumnDef } from '@tanstack/react-table'; +import { Task, TaskStatus } from '@trycompai/db'; import { format } from 'date-fns'; import Link from 'next/link'; import { useParams } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/columns.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/columns.tsx index 9bc8c3b64..4e337c973 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/columns.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/columns.tsx @@ -1,9 +1,9 @@ 'use client'; -import { VendorStatus } from '@comp/db/types'; import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Badge } from '@comp/ui/badge'; import type { ColumnDef } from '@tanstack/react-table'; +import { VendorStatus } from '@trycompai/db'; import { format } from 'date-fns'; import Link from 'next/link'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/data-table.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/data-table.tsx index b3bd9546e..b0e273a81 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/data-table.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/data-table.tsx @@ -1,8 +1,8 @@ 'use client'; -import type { Task } from '@comp/db/types'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@comp/ui/table'; import { flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table'; +import type { Task } from '@trycompai/db'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; import { useGetColumnHeaders } from './client-columns'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/filter-toolbar.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/filter-toolbar.tsx index 805f3647e..591da4b37 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/filter-toolbar.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/tasks/data-table/filter-toolbar.tsx @@ -1,9 +1,9 @@ 'use client'; -import type { TaskStatus, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Input } from '@comp/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; +import type { TaskStatus, User } from '@trycompai/db'; import { XIcon } from 'lucide-react'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/title-and-description.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/title-and-description.tsx index 34fdc8aaa..03b872f15 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/title-and-description.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/title-and-description.tsx @@ -1,9 +1,9 @@ 'use client'; -import type { User, Vendor } from '@comp/db/types'; import { Alert, AlertDescription, AlertTitle } from '@comp/ui/alert'; import { Button } from '@comp/ui/button'; import { Icons } from '@comp/ui/icons'; +import type { User, Vendor } from '@trycompai/db'; import { PencilIcon } from 'lucide-react'; import { useQueryState } from 'nuqs'; import { UpdateTitleAndDescriptionSheet } from './update-title-and-description-sheet'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-form.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-form.tsx index bef6c9cea..18dd8cc05 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-form.tsx @@ -1,12 +1,12 @@ 'use client'; -import type { Vendor } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Input } from '@comp/ui/input'; import { Textarea } from '@comp/ui/textarea'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { Vendor } from '@trycompai/db'; import { Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-sheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-sheet.tsx index c1ea94293..de913f3da 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-sheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/components/title-and-description/update-title-and-description-sheet.tsx @@ -1,11 +1,11 @@ 'use client'; -import type { Vendor } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import type { Vendor } from '@trycompai/db'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx index 65b0dfbd0..dd28b978a 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/InherentRiskForm.tsx @@ -1,12 +1,12 @@ 'use client'; import { updateVendorInherentRisk } from '@/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-inherent-risk'; -import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { useToast } from '@comp/ui/use-toast'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Impact, Likelihood } from '@trycompai/db'; import { useQueryState } from 'nuqs'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx index 6990cf049..c8d46f0ed 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/forms/risks/ResidualRiskForm.tsx @@ -1,12 +1,12 @@ 'use client'; import { updateVendorResidualRisk } from '@/app/(app)/[orgId]/vendors/[vendorId]/actions/update-vendor-residual-risk'; -import { Impact, Likelihood } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { useToast } from '@comp/ui/use-toast'; import { zodResolver } from '@hookform/resolvers/zod'; +import { Impact, Likelihood } from '@trycompai/db'; import { useQueryState } from 'nuqs'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/page.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/page.tsx index 0943869da..fe92229fd 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/page.tsx @@ -2,8 +2,7 @@ import PageWithBreadcrumb from '@/components/pages/PageWithBreadcrumb'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { AttachmentEntityType, CommentEntityType } from '@comp/db/types'; +import { AttachmentEntityType, CommentEntityType, db } from '@trycompai/db'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx index 001509030..f48b9d01b 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/secondary-fields/secondary-fields.tsx @@ -1,12 +1,12 @@ 'use client'; import { SelectAssignee } from '@/components/SelectAssignee'; -import type { Member, Task, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { Member, Task, User } from '@trycompai/db'; import { ArrowRightIcon, Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useForm } from 'react-hook-form'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/title.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/title.tsx index 63a190488..b114e8c3b 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/title.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/title.tsx @@ -1,10 +1,10 @@ 'use client'; -import type { Member, Task, User } from '@comp/db/types'; import { Alert, AlertDescription, AlertTitle } from '@comp/ui/alert'; import { Button } from '@comp/ui/button'; import { Icons } from '@comp/ui/icons'; import { Sheet, SheetContent } from '@comp/ui/sheet'; +import type { Member, Task, User } from '@trycompai/db'; import { PencilIcon } from 'lucide-react'; import dynamic from 'next/dynamic'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx index 265f28328..da270b062 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/components/title/update-task-sheet.tsx @@ -1,7 +1,6 @@ 'use client'; import { SelectAssignee } from '@/components/SelectAssignee'; -import type { Member, Task, User } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; @@ -9,6 +8,7 @@ import { Input } from '@comp/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Textarea } from '@comp/ui/textarea'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { Member, Task, User } from '@trycompai/db'; import { ArrowRightIcon } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useParams } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/page.tsx b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/page.tsx index 49f22e4b0..6d5c232e7 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/[vendorId]/tasks/[taskId]/page.tsx @@ -1,7 +1,7 @@ 'use server'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { notFound, redirect } from 'next/navigation'; import SecondaryFields from './components/secondary-fields/secondary-fields'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/actions/create-vendor-action.ts b/apps/app/src/app/(app)/[orgId]/vendors/actions/create-vendor-action.ts index 644dafa2d..03a63e9d1 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/actions/create-vendor-action.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/actions/create-vendor-action.ts @@ -2,8 +2,7 @@ import type { ActionResponse } from '@/types/actions'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { type Vendor, VendorCategory, VendorStatus } from '@comp/db/types'; +import { db, type Vendor, VendorCategory, VendorStatus } from '@trycompai/db'; import { createSafeActionClient } from 'next-safe-action'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/actions/search-global-vendors-action.ts b/apps/app/src/app/(app)/[orgId]/vendors/actions/search-global-vendors-action.ts index e775b0174..f1f1e5a13 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/actions/search-global-vendors-action.ts +++ b/apps/app/src/app/(app)/[orgId]/vendors/actions/search-global-vendors-action.ts @@ -1,7 +1,7 @@ 'use server'; import { authActionClient } from '@/actions/safe-action'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { z } from 'zod'; const schema = z.object({ diff --git a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-category.tsx b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-category.tsx index ff97dc061..8e37ae85a 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-category.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-category.tsx @@ -1,6 +1,5 @@ -import { db } from '@comp/db'; -import { VendorCategory } from '@comp/db/types'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; +import { db, VendorCategory } from '@trycompai/db'; import { VendorCategoryChart } from './category-chart'; const VENDOR_CATEGORIES = Object.values(VendorCategory); diff --git a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-status.tsx b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-status.tsx index bdf30e355..236306411 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-status.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/components/charts/vendors-by-status.tsx @@ -1,5 +1,5 @@ -import { db } from '@comp/db'; import { Card, CardContent, CardHeader, CardTitle } from '@comp/ui/card'; +import { db } from '@trycompai/db'; import { StatusChart } from './status-chart'; interface Props { organizationId: string; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/layout.tsx b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/layout.tsx index 75e9da01c..05e42e8f4 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/layout.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/backup-overview/layout.tsx @@ -1,7 +1,7 @@ import { AppOnboarding } from '@/components/app-onboarding'; import { getServersideSession } from '@/lib/get-session'; -import { db } from '@comp/db'; import { SecondaryMenu } from '@comp/ui/secondary-menu'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { Suspense, cache } from 'react'; import { CreateVendorSheet } from '../components/create-vendor-sheet'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-form.tsx b/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-form.tsx index f3a675283..faa0d5d19 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-form.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-form.tsx @@ -3,8 +3,6 @@ import { researchVendorAction } from '@/actions/research-vendor'; import { SelectAssignee } from '@/components/SelectAssignee'; import { useDebouncedCallback } from '@/hooks/use-debounced-callback'; -import type { GlobalVendors } from '@comp/db/types'; -import { type Member, type User, VendorCategory, VendorStatus } from '@comp/db/types'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@comp/ui/accordion'; import { Button } from '@comp/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@comp/ui/form'; @@ -12,6 +10,8 @@ import { Input } from '@comp/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@comp/ui/select'; import { Textarea } from '@comp/ui/textarea'; import { zodResolver } from '@hookform/resolvers/zod'; +import type { GlobalVendors } from '@trycompai/db'; +import { type Member, type User, VendorCategory, VendorStatus } from '@trycompai/db'; import { ArrowRightIcon } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useQueryState } from 'nuqs'; diff --git a/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-sheet.tsx b/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-sheet.tsx index a926d607e..7d610664d 100644 --- a/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-sheet.tsx +++ b/apps/app/src/app/(app)/[orgId]/vendors/components/create-vendor-sheet.tsx @@ -1,11 +1,11 @@ 'use client'; -import { Member, User } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Drawer, DrawerContent, DrawerTitle } from '@comp/ui/drawer'; import { useMediaQuery } from '@comp/ui/hooks'; import { ScrollArea } from '@comp/ui/scroll-area'; import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@comp/ui/sheet'; +import { Member, User } from '@trycompai/db'; import { X } from 'lucide-react'; import { useQueryState } from 'nuqs'; import { CreateVendorForm } from './create-vendor-form'; diff --git a/apps/app/src/app/(app)/invite/[code]/page.tsx b/apps/app/src/app/(app)/invite/[code]/page.tsx index ccc91eb32..54c58a4b1 100644 --- a/apps/app/src/app/(app)/invite/[code]/page.tsx +++ b/apps/app/src/app/(app)/invite/[code]/page.tsx @@ -1,7 +1,7 @@ import { getOrganizations } from '@/data/getOrganizations'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import type { Organization } from '@comp/db/types'; +import type { Organization } from '@trycompai/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { notFound, redirect } from 'next/navigation'; import { AcceptInvite } from '../../setup/components/accept-invite'; diff --git a/apps/app/src/app/(app)/no-access/page.tsx b/apps/app/src/app/(app)/no-access/page.tsx index c9fab7482..e4751503d 100644 --- a/apps/app/src/app/(app)/no-access/page.tsx +++ b/apps/app/src/app/(app)/no-access/page.tsx @@ -1,6 +1,6 @@ import { OrganizationSwitcher } from '@/components/organization-switcher'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import Link from 'next/link'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/onboarding/[orgId]/layout.tsx b/apps/app/src/app/(app)/onboarding/[orgId]/layout.tsx index 1e7cb570e..55c1dd126 100644 --- a/apps/app/src/app/(app)/onboarding/[orgId]/layout.tsx +++ b/apps/app/src/app/(app)/onboarding/[orgId]/layout.tsx @@ -1,7 +1,7 @@ import { CheckoutCompleteDialog } from '@/components/dialogs/checkout-complete-dialog'; import { OnboardingLayout } from '@/components/onboarding/OnboardingLayout'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { notFound } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/onboarding/[orgId]/page.tsx b/apps/app/src/app/(app)/onboarding/[orgId]/page.tsx index 747faa504..eba8cf38d 100644 --- a/apps/app/src/app/(app)/onboarding/[orgId]/page.tsx +++ b/apps/app/src/app/(app)/onboarding/[orgId]/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { notFound, redirect } from 'next/navigation'; import { PostPaymentOnboarding } from '../components/PostPaymentOnboarding'; diff --git a/apps/app/src/app/(app)/onboarding/actions/complete-onboarding.ts b/apps/app/src/app/(app)/onboarding/actions/complete-onboarding.ts index a3e062534..0515e2aef 100644 --- a/apps/app/src/app/(app)/onboarding/actions/complete-onboarding.ts +++ b/apps/app/src/app/(app)/onboarding/actions/complete-onboarding.ts @@ -4,8 +4,8 @@ import { authActionClient } from '@/actions/safe-action'; import { steps } from '@/app/(app)/setup/lib/constants'; import { createFleetLabelForOrg } from '@/jobs/tasks/device/create-fleet-label-for-org'; import { onboardOrganization as onboardOrganizationTask } from '@/jobs/tasks/onboarding/onboard-organization'; -import { db } from '@comp/db'; import { tasks } from '@trigger.dev/sdk/v3'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { cookies, headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/onboarding/components/PostPaymentOnboarding.tsx b/apps/app/src/app/(app)/onboarding/components/PostPaymentOnboarding.tsx index 00e33e6a4..911717870 100644 --- a/apps/app/src/app/(app)/onboarding/components/PostPaymentOnboarding.tsx +++ b/apps/app/src/app/(app)/onboarding/components/PostPaymentOnboarding.tsx @@ -2,10 +2,10 @@ import { OnboardingStepInput } from '@/app/(app)/setup/components/OnboardingStepInput'; import { LogoSpinner } from '@/components/logo-spinner'; -import type { Organization } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@comp/ui/card'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@comp/ui/form'; +import type { Organization } from '@trycompai/db'; import { ArrowLeft, ArrowRight } from 'lucide-react'; import { useEffect } from 'react'; import { usePostPaymentOnboarding } from '../hooks/usePostPaymentOnboarding'; diff --git a/apps/app/src/app/(app)/onboarding/hooks/usePostPaymentOnboarding.ts b/apps/app/src/app/(app)/onboarding/hooks/usePostPaymentOnboarding.ts index 28a355745..988eb0cbf 100644 --- a/apps/app/src/app/(app)/onboarding/hooks/usePostPaymentOnboarding.ts +++ b/apps/app/src/app/(app)/onboarding/hooks/usePostPaymentOnboarding.ts @@ -64,7 +64,7 @@ export function usePostPaymentOnboarding({ setStepIndex(initialStep); setIsLoading(false); - }, []); + }, [savedAnswers, savedStepIndex]); const step = postPaymentSteps[stepIndex]; const stepSchema = z.object({ diff --git a/apps/app/src/app/(app)/setup/[setupId]/page.tsx b/apps/app/src/app/(app)/setup/[setupId]/page.tsx index 40277da13..81f48d3a3 100644 --- a/apps/app/src/app/(app)/setup/[setupId]/page.tsx +++ b/apps/app/src/app/(app)/setup/[setupId]/page.tsx @@ -1,6 +1,6 @@ import { getOrganizations } from '@/data/getOrganizations'; import { auth } from '@/utils/auth'; -import type { Organization } from '@comp/db/types'; +import type { Organization } from '@trycompai/db'; import { Metadata } from 'next'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/setup/actions/create-organization-minimal.ts b/apps/app/src/app/(app)/setup/actions/create-organization-minimal.ts index 990743bbf..fc310b9c2 100644 --- a/apps/app/src/app/(app)/setup/actions/create-organization-minimal.ts +++ b/apps/app/src/app/(app)/setup/actions/create-organization-minimal.ts @@ -7,7 +7,7 @@ import { isHubSpotConfigured } from '@/hubspot/api-client'; import { createOrUpdateCompany, findCompanyByDomain } from '@/hubspot/companies'; import { findContactByEmail } from '@/hubspot/contacts'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { headers } from 'next/headers'; import { z } from 'zod'; diff --git a/apps/app/src/app/(app)/setup/actions/create-organization.ts b/apps/app/src/app/(app)/setup/actions/create-organization.ts index a143c891f..1e59b8e2c 100644 --- a/apps/app/src/app/(app)/setup/actions/create-organization.ts +++ b/apps/app/src/app/(app)/setup/actions/create-organization.ts @@ -9,8 +9,8 @@ import { findContactByEmail } from '@/hubspot/contacts'; import { createFleetLabelForOrg } from '@/jobs/tasks/device/create-fleet-label-for-org'; import { onboardOrganization as onboardOrganizationTask } from '@/jobs/tasks/onboarding/onboard-organization'; import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; import { tasks } from '@trigger.dev/sdk/v3'; +import { db } from '@trycompai/db'; import { revalidatePath } from 'next/cache'; import { cookies, headers } from 'next/headers'; import { companyDetailsSchema, steps } from '../lib/constants'; diff --git a/apps/app/src/app/(app)/setup/components/FrameworkSelection.tsx b/apps/app/src/app/(app)/setup/components/FrameworkSelection.tsx index 1ff61cb6a..6382b1e90 100644 --- a/apps/app/src/app/(app)/setup/components/FrameworkSelection.tsx +++ b/apps/app/src/app/(app)/setup/components/FrameworkSelection.tsx @@ -1,7 +1,7 @@ 'use client'; import { FrameworkCard } from '@/components/framework-card'; -import type { FrameworkEditorFramework } from '@comp/db/types'; +import type { FrameworkEditorFramework } from '@trycompai/db'; import { useEffect, useState } from 'react'; interface FrameworkSelectionProps { @@ -39,7 +39,7 @@ export function FrameworkSelection({ value, onChange, onLoadingChange }: Framewo } fetchFrameworks(); - }, [onLoadingChange]); // Removed onChange and value from dependencies to prevent infinite loop + }, [onLoadingChange, onChange, value]); if (isLoading) { return null; diff --git a/apps/app/src/app/(app)/setup/components/OrganizationSetupForm.tsx b/apps/app/src/app/(app)/setup/components/OrganizationSetupForm.tsx index 3022bd333..842714f62 100644 --- a/apps/app/src/app/(app)/setup/components/OrganizationSetupForm.tsx +++ b/apps/app/src/app/(app)/setup/components/OrganizationSetupForm.tsx @@ -2,9 +2,9 @@ import { changeOrganizationAction } from '@/actions/change-organization'; import { LogoSpinner } from '@/components/logo-spinner'; -import type { Organization } from '@comp/db/types'; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@comp/ui/card'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@comp/ui/form'; +import type { Organization } from '@trycompai/db'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; diff --git a/apps/app/src/app/(app)/setup/loading/[orgId]/page.tsx b/apps/app/src/app/(app)/setup/loading/[orgId]/page.tsx index 4df98884c..49795b8e7 100644 --- a/apps/app/src/app/(app)/setup/loading/[orgId]/page.tsx +++ b/apps/app/src/app/(app)/setup/loading/[orgId]/page.tsx @@ -1,7 +1,7 @@ import { SetupLoadingStep } from '@/app/(app)/setup/components/SetupLoadingStep'; import { getOrganizations } from '@/data/getOrganizations'; import { auth } from '@/utils/auth'; -import type { Organization } from '@comp/db/types'; +import type { Organization } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/app/(app)/upgrade/[orgId]/page.tsx b/apps/app/src/app/(app)/upgrade/[orgId]/page.tsx index f62e36c7d..5e383ee4d 100644 --- a/apps/app/src/app/(app)/upgrade/[orgId]/page.tsx +++ b/apps/app/src/app/(app)/upgrade/[orgId]/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; import { BookingStep } from './components/booking-step'; diff --git a/apps/app/src/app/(app)/upgrade/components/MinimalOrganizationSwitcher.tsx b/apps/app/src/app/(app)/upgrade/components/MinimalOrganizationSwitcher.tsx index ad31eccc7..34ee7139a 100644 --- a/apps/app/src/app/(app)/upgrade/components/MinimalOrganizationSwitcher.tsx +++ b/apps/app/src/app/(app)/upgrade/components/MinimalOrganizationSwitcher.tsx @@ -1,7 +1,6 @@ 'use client'; import { changeOrganizationAction } from '@/actions/change-organization'; -import type { Organization } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { DropdownMenu, @@ -9,6 +8,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@comp/ui/dropdown-menu'; +import type { Organization } from '@trycompai/db'; import { Check, ChevronsUpDown, Loader2 } from 'lucide-react'; import { useAction } from 'next-safe-action/hooks'; import { useRouter } from 'next/navigation'; diff --git a/apps/app/src/app/api/auth/test-db/route.ts b/apps/app/src/app/api/auth/test-db/route.ts index ed8233482..4b190cadd 100644 --- a/apps/app/src/app/api/auth/test-db/route.ts +++ b/apps/app/src/app/api/auth/test-db/route.ts @@ -1,5 +1,4 @@ -import { db } from '@comp/db'; -import { Departments } from '@comp/db/types'; +import { db, Departments } from '@trycompai/db'; import { NextResponse } from 'next/server'; export const dynamic = 'force-dynamic'; diff --git a/apps/app/src/app/api/auth/test-grant-access/route.ts b/apps/app/src/app/api/auth/test-grant-access/route.ts index 3c5f8373f..da6ba26a9 100644 --- a/apps/app/src/app/api/auth/test-grant-access/route.ts +++ b/apps/app/src/app/api/auth/test-grant-access/route.ts @@ -1,4 +1,4 @@ -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { NextRequest, NextResponse } from 'next/server'; // Force dynamic rendering for this route diff --git a/apps/app/src/app/api/auth/test-login/route.ts b/apps/app/src/app/api/auth/test-login/route.ts index bc21f1a85..25b82ec3d 100644 --- a/apps/app/src/app/api/auth/test-login/route.ts +++ b/apps/app/src/app/api/auth/test-login/route.ts @@ -1,6 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; -import { Departments } from '@comp/db/types'; +import { db, Departments } from '@trycompai/db'; import { NextRequest, NextResponse } from 'next/server'; // Force dynamic rendering for this route diff --git a/apps/app/src/app/api/frameworks/route.ts b/apps/app/src/app/api/frameworks/route.ts index 8a9d0523e..2977515fd 100644 --- a/apps/app/src/app/api/frameworks/route.ts +++ b/apps/app/src/app/api/frameworks/route.ts @@ -1,4 +1,4 @@ -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { NextResponse } from 'next/server'; export async function GET() { diff --git a/apps/app/src/app/api/health/route.ts b/apps/app/src/app/api/health/route.ts index dd7897706..171bfb17c 100644 --- a/apps/app/src/app/api/health/route.ts +++ b/apps/app/src/app/api/health/route.ts @@ -1,4 +1,4 @@ -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { NextResponse } from 'next/server'; export const dynamic = 'force-dynamic'; diff --git a/apps/app/src/app/api/retool/reset-org/route.ts b/apps/app/src/app/api/retool/reset-org/route.ts index 7d038e678..0a17d4159 100644 --- a/apps/app/src/app/api/retool/reset-org/route.ts +++ b/apps/app/src/app/api/retool/reset-org/route.ts @@ -1,5 +1,5 @@ import { initializeOrganization } from '@/actions/organization/lib/initialize-organization'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { type NextRequest, NextResponse } from 'next/server'; // Configure this route to use Node.js runtime instead of Edge diff --git a/apps/app/src/app/api/v1/employees/[id]/route.ts b/apps/app/src/app/api/v1/employees/[id]/route.ts deleted file mode 100644 index 92f9ec66c..000000000 --- a/apps/app/src/app/api/v1/employees/[id]/route.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { getOrganizationFromApiKey } from '@/lib/api-key'; -import { db } from '@comp/db'; -import { type NextRequest, NextResponse } from 'next/server'; - -// Configure this route to use Node.js runtime instead of Edge -export const runtime = 'nodejs'; - -/** - * GET /api/v1/people/:id - * - * Get a single employee by ID for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Path Parameters: - * - id: string - The ID of the employee to fetch - * - * Returns: - * - 200: { success: true, data: Employee } - * - 401: { success: false, error: "Invalid or missing API key" } - * - 404: { success: false, error: "Employee not found" } - * - 500: { success: false, error: "Failed to fetch employee" } - */ -export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const employeeId = (await params).id; - - // Fetch the employee - const employee = await db.member.findFirst({ - where: { - id: employeeId, - organizationId: organizationId!, - }, - select: { - id: true, - user: { - select: { - name: true, - email: true, - }, - }, - department: true, - isActive: true, - }, - }); - - // If employee not found, return 404 - if (!employee) { - return NextResponse.json( - { - success: false, - error: 'Employee not found', - }, - { status: 404 }, - ); - } - - return NextResponse.json({ - success: true, - data: employee, - }); - } catch (error) { - console.error('Error fetching employee:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to fetch employee', - }, - { status: 500 }, - ); - } -} - -/** - * DELETE /api/v1/people/:id - * - * Delete an employee by ID for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Path Parameters: - * - id: string - The ID of the employee to delete - * - * Returns: - * - 200: { success: true, data: { message: string } } - * - 401: { success: false, error: string } - * - 404: { success: false, error: string } - * - 500: { success: false, error: string } - */ -export async function DELETE( - request: NextRequest, - { params }: { params: Promise<{ id: string }> }, -) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const employeeId = (await params).id; - - // Check if the employee exists and belongs to the organization - const existingEmployee = await db.member.findFirst({ - where: { - id: employeeId, - organizationId: organizationId!, - }, - }); - - if (!existingEmployee) { - return NextResponse.json( - { - success: false, - error: 'Employee not found', - }, - { status: 404 }, - ); - } - - // Delete the employee - await db.member.delete({ - where: { - id: employeeId, - }, - }); - - return NextResponse.json({ - success: true, - data: { - message: 'Employee deleted successfully', - }, - }); - } catch (error) { - console.error('Error deleting employee:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to delete employee', - }, - { status: 500 }, - ); - } -} diff --git a/apps/app/src/app/api/v1/employees/route.ts b/apps/app/src/app/api/v1/employees/route.ts deleted file mode 100644 index 1f773fffd..000000000 --- a/apps/app/src/app/api/v1/employees/route.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { getOrganizationFromApiKey } from '@/lib/api-key'; -import { db } from '@comp/db'; -import { Departments, Role } from '@comp/db/types'; -import { type NextRequest, NextResponse } from 'next/server'; -import { z } from 'zod'; - -// Configure this route to use Node.js runtime instead of Edge -export const runtime = 'nodejs'; - -// Define the schema for query parameters -const queryParamsSchema = z.object({ - active: z - .string() - .optional() - .transform((val) => val === 'true'), - department: z.nativeEnum(Departments).optional(), - search: z.string().optional(), -}); - -// Define the schema for employee creation -const employeeCreateSchema = z.object({ - name: z.string().min(1, { message: 'Name is required' }), - email: z.string().email({ message: 'Valid email is required' }), - department: z.nativeEnum(Departments).optional().default(Departments.none), - isActive: z.boolean().optional().default(true), - externalEmployeeId: z.string().optional().nullable(), - role: z.string().optional().default('member'), -}); - -// Type for the validated query parameters -type QueryParams = z.infer; - -// Type for the validated employee creation data -type EmployeeCreateInput = z.infer; - -/** - * GET /api/v1/people - * - * Get all employees for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Query Parameters: - * - active: boolean - Filter by active status (optional) - * - department: string - Filter by department (optional) - * - search: string - Search by name or email (optional) - * - * Returns: - * - 200: { success: true, data: Employee[] } - * - 401: { error: "Invalid or missing API key" } - * - 400: { error: "Validation failed", details: {...} } - * - 500: { error: "Failed to fetch employees" } - */ -export async function GET(request: NextRequest) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - // Get query parameters - const searchParams = request.nextUrl.searchParams; - - // Create an object from the search params - const queryParamsObj = { - active: searchParams.get('active') || undefined, - department: searchParams.get('department') || undefined, - search: searchParams.get('search') || undefined, - }; - - // Validate query parameters - const validationResult = queryParamsSchema.safeParse(queryParamsObj); - - if (!validationResult.success) { - return NextResponse.json( - { - error: 'Validation failed', - details: validationResult.error.format(), - }, - { status: 400 }, - ); - } - - // Extract validated query parameters - const { active, department, search } = validationResult.data; - - // Build the where clause - const where: any = { - organizationId: organizationId!, - }; - - // Add active filter if provided - if (active !== undefined) { - where.isActive = active; - } - - // Add department filter if provided - if (department) { - where.department = department; - } - - // Query members with their associated users - const members = await db.member.findMany({ - where, - include: { - user: true, - }, - orderBy: { - user: { - name: 'asc', - }, - }, - }); - - // Apply search filter if provided (we need to do this in memory due to nested user data) - let filteredMembers = members; - if (search) { - const searchLower = search.toLowerCase(); - filteredMembers = members.filter( - (member) => - member.user.name.toLowerCase().includes(searchLower) || - member.user.email.toLowerCase().includes(searchLower), - ); - } - - // Format the response to include both member and user data - const formattedEmployees = filteredMembers.map((member) => ({ - id: member.id, - userId: member.userId, - name: member.user.name, - email: member.user.email, - department: member.department, - isActive: member.isActive, - role: member.role, - createdAt: member.createdAt.toISOString(), - })); - - return NextResponse.json({ success: true, data: formattedEmployees }); - } catch (error) { - console.error('Error fetching employees:', error); - return NextResponse.json({ error: 'Failed to fetch employees' }, { status: 500 }); - } -} - -/** - * POST /api/v1/people - * - * Create a new employee for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Body: - * - name: string - The name of the employee (required) - * - email: string - The email of the employee (required) - * - department: Departments - The department of the employee (optional, defaults to "none") - * - isActive: boolean - Whether the employee is active (optional, defaults to true) - * - externalEmployeeId: string - External employee ID (optional) - * - role: string - Role in the organization (optional, defaults to "member") - * - * Returns: - * - 200: { success: true, data: Employee } - * - 400: { error: "Validation failed", details: {...} } - * - 401: { error: "Invalid or missing API key" } - * - 500: { error: "Failed to create employee" } - */ -export async function POST(request: NextRequest) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const body = await request.json(); - - // Validate the request body against the schema - const validationResult = employeeCreateSchema.safeParse(body); - - if (!validationResult.success) { - // Return validation errors - return NextResponse.json( - { - success: false, - error: 'Validation failed', - details: validationResult.error.format(), - }, - { status: 400 }, - ); - } - - // Extract validated data - const validatedData: EmployeeCreateInput = validationResult.data; - - // Start a transaction to ensure both user and member are created successfully - const result = await db.$transaction(async (tx) => { - // Check if a user with this email already exists - let user = await tx.user.findUnique({ - where: { - email: validatedData.email, - }, - }); - - // Create the user if they don't exist already - if (!user) { - user = await tx.user.create({ - data: { - name: validatedData.name, - email: validatedData.email, - emailVerified: false, // Default as not verified - createdAt: new Date(), - updatedAt: new Date(), - }, - }); - } - - // Create the member record to link the user to the organization - const member = await tx.member.create({ - data: { - userId: user.id, - organizationId: organizationId!, - role: validatedData.role as Role, - department: validatedData.department, - isActive: validatedData.isActive ?? true, - createdAt: new Date(), - }, - include: { - user: true, - }, - }); - - return { - id: member.id, - userId: user.id, - name: user.name, - email: user.email, - department: member.department, - isActive: member.isActive, - role: member.role, - createdAt: member.createdAt.toISOString(), - }; - }); - - return NextResponse.json({ - success: true, - data: result, - }); - } catch (error) { - console.error('Error creating employee:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to create employee', - }, - { status: 500 }, - ); - } -} diff --git a/apps/app/src/app/api/v1/risks/[id]/route.ts b/apps/app/src/app/api/v1/risks/[id]/route.ts deleted file mode 100644 index 4b705ef27..000000000 --- a/apps/app/src/app/api/v1/risks/[id]/route.ts +++ /dev/null @@ -1,219 +0,0 @@ -import { getOrganizationFromApiKey } from '@/lib/api-key'; -import { db } from '@comp/db'; -import { type NextRequest, NextResponse } from 'next/server'; - -// Configure this route to use Node.js runtime instead of Edge -export const runtime = 'nodejs'; - -/** - * GET /api/v1/risks/:id - * - * Get a single risk by ID for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Path Parameters: - * - id: string - The ID of the risk to fetch - * - * Returns: - * - 200: { success: true, data: Risk } - * - 401: { success: false, error: "Invalid or missing API key" } - * - 404: { success: false, error: "Risk not found" } - * - 500: { success: false, error: "Failed to fetch risk" } - */ -export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const riskId = (await params).id; - - // Fetch the risk - const risk = await db.risk.findFirst({ - where: { - id: riskId, - organizationId: organizationId!, - }, - select: { - id: true, - title: true, - description: true, - category: true, - department: true, - status: true, - likelihood: true, - impact: true, - residualLikelihood: true, - residualImpact: true, - createdAt: true, - updatedAt: true, - assigneeId: true, - treatmentStrategy: true, - treatmentStrategyDescription: true, - assignee: { - select: { - id: true, - user: { - select: { - name: true, - email: true, - }, - }, - }, - }, - }, - }); - - // If risk not found, return 404 - if (!risk) { - return NextResponse.json( - { - success: false, - error: 'Risk not found', - }, - { status: 404 }, - ); - } - - // Fetch tasks for this risk - const tasks = await db.task.findMany({ - where: { - risks: { - some: { - id: riskId, - }, - }, - organizationId: organizationId!, - }, - select: { - id: true, - title: true, - description: true, - status: true, - createdAt: true, - updatedAt: true, - assigneeId: true, - assignee: { - select: { - user: { - select: { - name: true, - email: true, - }, - }, - }, - }, - }, - orderBy: { - createdAt: 'desc', - }, - }); - - // Format dates for JSON response - const formattedRisk = { - ...risk, - createdAt: risk.createdAt.toISOString(), - updatedAt: risk.updatedAt.toISOString(), - tasks: tasks.map((task) => ({ - ...task, - createdAt: task.createdAt.toISOString(), - updatedAt: task.updatedAt.toISOString(), - })), - }; - - return NextResponse.json({ - success: true, - data: formattedRisk, - }); - } catch (error) { - console.error('Error fetching risk:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to fetch risk', - }, - { status: 500 }, - ); - } -} - -/** - * DELETE /api/v1/risks/:id - * - * Delete a risk by ID for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Path Parameters: - * - id: string - The ID of the risk to delete - * - * Returns: - * - 200: { success: true, data: { message: string } } - * - 401: { success: false, error: string } - * - 404: { success: false, error: string } - * - 500: { success: false, error: string } - */ -export async function DELETE( - request: NextRequest, - { params }: { params: Promise<{ id: string }> }, -) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const riskId = (await params).id; - - // Check if the risk exists and belongs to the organization - const existingRisk = await db.risk.findFirst({ - where: { - id: riskId, - organizationId: organizationId!, - }, - }); - - if (!existingRisk) { - return NextResponse.json( - { - success: false, - error: 'Risk not found', - }, - { status: 404 }, - ); - } - - // Delete the risk - await db.risk.delete({ - where: { - id: riskId, - }, - }); - - return NextResponse.json({ - success: true, - data: { - message: 'Risk deleted successfully', - }, - }); - } catch (error) { - console.error('Error deleting risk:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to delete risk', - }, - { status: 500 }, - ); - } -} diff --git a/apps/app/src/app/api/v1/risks/route.ts b/apps/app/src/app/api/v1/risks/route.ts deleted file mode 100644 index 4b9b11b08..000000000 --- a/apps/app/src/app/api/v1/risks/route.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { getOrganizationFromApiKey } from '@/lib/api-key'; -import { db } from '@comp/db'; -import { Departments, Impact, Likelihood, RiskCategory, RiskStatus } from '@comp/db/types'; -import { type NextRequest, NextResponse } from 'next/server'; -import { z } from 'zod'; - -// Configure this route to use Node.js runtime instead of Edge -export const runtime = 'nodejs'; - -// Define the schema for query parameters -const queryParamsSchema = z.object({ - status: z.nativeEnum(RiskStatus).optional(), - category: z.nativeEnum(RiskCategory).optional(), - department: z.nativeEnum(Departments).optional(), - search: z.string().optional(), -}); - -// Define the schema for risk creation -const riskCreateSchema = z.object({ - title: z.string().min(1, { message: 'Title is required' }), - description: z.string().min(1, { message: 'Description is required' }), - category: z.nativeEnum(RiskCategory), - department: z.nativeEnum(Departments).optional(), - status: z.nativeEnum(RiskStatus).optional().default(RiskStatus.open), - likelihood: z.nativeEnum(Likelihood).optional().default(Likelihood.very_unlikely), - impact: z.nativeEnum(Impact).optional().default(Impact.insignificant), - residualLikelihood: z.nativeEnum(Likelihood).optional().default(Likelihood.very_unlikely), - residualImpact: z.nativeEnum(Impact).optional().default(Impact.insignificant), - assigneeId: z.string().optional().nullable(), -}); - -// Type for the validated risk creation data -type RiskCreateInput = z.infer; - -/** - * GET /api/v1/risks - * - * Get all risks for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Query Parameters: - * - status: string - Filter by risk status (optional) - * - category: string - Filter by risk category (optional) - * - department: string - Filter by department (optional) - * - search: string - Search by title (optional) - * - * Returns: - * - 200: { success: true, data: Risk[] } - * - 401: { error: "Invalid or missing API key" } - * - 400: { error: "Validation failed", details: {...} } - * - 500: { error: "Failed to fetch risks" } - */ -export async function GET(request: NextRequest) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - // Get query parameters - const searchParams = request.nextUrl.searchParams; - - // Create an object from the search params - const queryParamsObj = { - status: searchParams.get('status') || undefined, - category: searchParams.get('category') || undefined, - department: searchParams.get('department') || undefined, - search: searchParams.get('search') || undefined, - }; - - // Validate query parameters - const validationResult = queryParamsSchema.safeParse(queryParamsObj); - - if (!validationResult.success) { - return NextResponse.json( - { - success: false, - error: 'Validation failed', - details: validationResult.error.format(), - }, - { status: 400 }, - ); - } - - // Extract validated query parameters - const { status, category, department, search } = validationResult.data; - - // Build the where clause - const where: any = { - organizationId: organizationId!, - }; - - // Add status filter if provided - if (status) { - where.status = status; - } - - // Add category filter if provided - if (category) { - where.category = category; - } - - // Add department filter if provided - if (department) { - where.department = department; - } - - // Add search filter if provided - if (search) { - where.OR = [ - { - title: { - contains: search, - mode: 'insensitive', - }, - }, - { - description: { - contains: search, - mode: 'insensitive', - }, - }, - ]; - } - - // Fetch risks - const risks = await db.risk.findMany({ - where, - select: { - id: true, - title: true, - description: true, - category: true, - department: true, - status: true, - likelihood: true, - impact: true, - residualLikelihood: true, - residualImpact: true, - createdAt: true, - updatedAt: true, - assigneeId: true, - assignee: { - select: { - id: true, - user: { - select: { - name: true, - email: true, - }, - }, - }, - }, - }, - orderBy: { - updatedAt: 'desc', - }, - }); - - // Format dates for JSON response - const formattedRisks = risks.map((risk) => ({ - ...risk, - createdAt: risk.createdAt.toISOString(), - updatedAt: risk.updatedAt.toISOString(), - })); - - return NextResponse.json({ success: true, data: formattedRisks }); - } catch (error) { - console.error('Error fetching risks:', error); - return NextResponse.json({ success: false, error: 'Failed to fetch risks' }, { status: 500 }); - } -} - -/** - * POST /api/v1/risks - * - * Create a new risk for the organization associated with the API key - * - * Headers: - * - Authorization: Bearer {api_key} or X-API-Key: {api_key} - * - * Body: - * - title: string - The title of the risk (required) - * - description: string - The description of the risk (required) - * - category: RiskCategory - The category of the risk (required) - * - department: Departments - The department associated with the risk (optional) - * - status: RiskStatus - The status of the risk (optional, defaults to "open") - * - likelihood: Likelihood - The likelihood score (optional, defaults to "very_unlikely") - * - impact: Impact - The impact score (optional, defaults to "insignificant") - * - residualLikelihood: Likelihood - The residual likelihood score (optional, defaults to "very_unlikely") - * - residualImpact: Impact - The residual impact score (optional, defaults to "insignificant") - * - assigneeId: string - The ID of the user who owns the risk (optional) - * - * Returns: - * - 200: { success: true, data: Risk } - * - 400: { success: false, error: "Validation failed", details: {...} } - * - 401: { success: false, error: "Invalid or missing API key" } - * - 500: { success: false, error: "Failed to create risk" } - */ -export async function POST(request: NextRequest) { - // Get the organization ID from the API key - const { organizationId, errorResponse } = await getOrganizationFromApiKey(request); - - // If there's an error response, return it - if (errorResponse) { - return errorResponse; - } - - try { - const body = await request.json(); - - // Validate the request body against the schema - const validationResult = riskCreateSchema.safeParse(body); - - if (!validationResult.success) { - // Return validation errors - return NextResponse.json( - { - success: false, - error: 'Validation failed', - details: validationResult.error.format(), - }, - { status: 400 }, - ); - } - - // Extract validated data - const validatedData: RiskCreateInput = validationResult.data; - - // Create the risk using the organization ID from the API key - const risk = await db.risk.create({ - data: { - ...validatedData, - organizationId: organizationId!, - }, - }); - - // Format dates for JSON response - const formattedRisk = { - ...risk, - createdAt: risk.createdAt.toISOString(), - updatedAt: risk.updatedAt.toISOString(), - }; - - return NextResponse.json({ - success: true, - data: formattedRisk, - }); - } catch (error) { - console.error('Error creating risk:', error); - return NextResponse.json( - { - success: false, - error: 'Failed to create risk', - }, - { status: 500 }, - ); - } -} diff --git a/apps/app/src/app/api/v1/route-config.ts b/apps/app/src/app/api/v1/route-config.ts deleted file mode 100644 index 1573bc6f5..000000000 --- a/apps/app/src/app/api/v1/route-config.ts +++ /dev/null @@ -1,2 +0,0 @@ -// This file contains shared configuration for API routes -export const runtime = 'nodejs'; diff --git a/apps/app/src/app/page.tsx b/apps/app/src/app/page.tsx index 3be2e01e4..114cbf0bb 100644 --- a/apps/app/src/app/page.tsx +++ b/apps/app/src/app/page.tsx @@ -1,5 +1,5 @@ import { auth } from '@/utils/auth'; -import { db } from '@comp/db'; +import { db } from '@trycompai/db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; diff --git a/apps/app/src/components/SelectAssignee.tsx b/apps/app/src/components/SelectAssignee.tsx index 1861b2e45..135b117af 100644 --- a/apps/app/src/components/SelectAssignee.tsx +++ b/apps/app/src/components/SelectAssignee.tsx @@ -1,7 +1,7 @@ import { authClient } from '@/utils/auth-client'; -import { Member, User } from '@comp/db/types'; import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Select, SelectContent, SelectItem, SelectTrigger } from '@comp/ui/select'; +import { Member, User } from '@trycompai/db'; import { UserIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; diff --git a/apps/app/src/components/ai-work-preview.tsx b/apps/app/src/components/ai-work-preview.tsx index c16556799..02bb4d6a3 100644 --- a/apps/app/src/components/ai-work-preview.tsx +++ b/apps/app/src/components/ai-work-preview.tsx @@ -224,7 +224,7 @@ export function AiWorkPreview() { return () => { if (timeoutId) clearTimeout(timeoutId); }; - }, [currentIndex, workItems.length]); + }, [currentIndex, workItems.length, workItems]); // Get visible items (previous, current, next) const getVisibleItems = () => { diff --git a/apps/app/src/components/comments/CommentForm.tsx b/apps/app/src/components/comments/CommentForm.tsx index c36fd474d..0c93e1075 100644 --- a/apps/app/src/components/comments/CommentForm.tsx +++ b/apps/app/src/components/comments/CommentForm.tsx @@ -2,11 +2,11 @@ import { createComment } from '@/actions/comments/createComment'; import { authClient } from '@/utils/auth-client'; -import type { CommentEntityType } from '@comp/db/types'; import { Button } from '@comp/ui/button'; import { Input } from '@comp/ui/input'; import { Label } from '@comp/ui/label'; import { Textarea } from '@comp/ui/textarea'; +import type { CommentEntityType } from '@trycompai/db'; import clsx from 'clsx'; import { ArrowUp, Loader2, Paperclip } from 'lucide-react'; import { useParams, useRouter } from 'next/navigation'; @@ -62,68 +62,65 @@ export function CommentForm({ entityId, entityType }: CommentFormProps) { fileInputRef.current?.click(); }; - const handleFileSelect = useCallback( - (event: React.ChangeEvent) => { - const files = event.target.files; - if (!files || files.length === 0) return; + const handleFileSelect = useCallback((event: React.ChangeEvent) => { + const files = event.target.files; + if (!files || files.length === 0) return; - setIsUploading(true); - setIsLoading(true); + setIsUploading(true); + setIsLoading(true); - // Helper to process a single file - const processFile = (file: File) => { - return new Promise((resolve) => { - // Add file size check here - const MAX_FILE_SIZE_MB = 5; - const MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024; - if (file.size > MAX_FILE_SIZE_BYTES) { - toast.error(`File "${file.name}" exceeds the ${MAX_FILE_SIZE_MB}MB limit.`); - return resolve(); // Skip processing this file - } + // Helper to process a single file + const processFile = (file: File) => { + return new Promise((resolve) => { + // Add file size check here + const MAX_FILE_SIZE_MB = 5; + const MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024; + if (file.size > MAX_FILE_SIZE_BYTES) { + toast.error(`File "${file.name}" exceeds the ${MAX_FILE_SIZE_MB}MB limit.`); + return resolve(); // Skip processing this file + } - const reader = new FileReader(); - reader.onloadend = () => { - const dataUrlResult = reader.result as string; - const base64Data = dataUrlResult?.split(',')[1]; - if (!base64Data) { - toast.error(`Failed to read file data for ${file.name}`); - return resolve(); - } + const reader = new FileReader(); + reader.onloadend = () => { + const dataUrlResult = reader.result as string; + const base64Data = dataUrlResult?.split(',')[1]; + if (!base64Data) { + toast.error(`Failed to read file data for ${file.name}`); + return resolve(); + } - // Store file in memory instead of uploading - setPendingAttachments((prev) => [ - ...prev, - { - id: `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, // Generate temporary ID - name: file.name, - fileType: file.type, - fileData: base64Data, - }, - ]); - toast.success(`File "${file.name}" ready for attachment.`); - setIsLoading(false); - resolve(); - }; - reader.onerror = () => { - toast.error(`Error reading file: ${file.name}`); - setIsLoading(false); - resolve(); - }; - reader.readAsDataURL(file); - }); - }; + // Store file in memory instead of uploading + setPendingAttachments((prev) => [ + ...prev, + { + id: `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, // Generate temporary ID + name: file.name, + fileType: file.type, + fileData: base64Data, + }, + ]); + toast.success(`File "${file.name}" ready for attachment.`); + setIsLoading(false); + resolve(); + }; + reader.onerror = () => { + toast.error(`Error reading file: ${file.name}`); + setIsLoading(false); + resolve(); + }; + reader.readAsDataURL(file); + }); + }; - // Process all files sequentially - (async () => { - for (const file of Array.from(files)) { - await processFile(file); - } - setIsUploading(false); - if (fileInputRef.current) fileInputRef.current.value = ''; - })(); - }, - [entityId, entityType, pendingAttachments.length], - ); + // Process all files sequentially + (async () => { + for (const file of Array.from(files)) { + await processFile(file); + } + setIsUploading(false); + if (fileInputRef.current) fileInputRef.current.value = ''; + })(); + }, []); const handleRemovePendingAttachment = (attachmentIdToRemove: string) => { setPendingAttachments((prev) => prev.filter((att) => att.id !== attachmentIdToRemove)); @@ -219,7 +216,9 @@ export function CommentForm({ entityId, entityType }: CommentFormProps) { placeholder="Leave a comment..." className="resize-none border-none p-4 shadow-none" value={newComment} - onChange={(e) => setNewComment(e.target.value)} + onChange={(e: { target: { value: React.SetStateAction } }) => + setNewComment(e.target.value) + } disabled={isLoading} onKeyDown={handleKeyDown} rows={2} diff --git a/apps/app/src/components/comments/CommentItem.tsx b/apps/app/src/components/comments/CommentItem.tsx index 8c6ee12f2..b26a9f669 100644 --- a/apps/app/src/components/comments/CommentItem.tsx +++ b/apps/app/src/components/comments/CommentItem.tsx @@ -5,8 +5,6 @@ import { deleteCommentAttachment } from '@/actions/comments/deleteCommentAttachm import { getCommentAttachmentUrl } from '@/actions/comments/getCommentAttachmentUrl'; // Import action import { updateComment } from '@/actions/comments/updateComment'; import { uploadFile } from '@/actions/files/upload-file'; -import type { AttachmentType } from '@comp/db/types'; -import { AttachmentEntityType } from '@comp/db/types'; // Import AttachmentEntityType import { Avatar, AvatarFallback, AvatarImage } from '@comp/ui/avatar'; import { Button } from '@comp/ui/button'; import { Card, CardContent } from '@comp/ui/card'; @@ -18,6 +16,8 @@ import { } from '@comp/ui/dropdown-menu'; import { Label } from '@comp/ui/label'; import { Textarea } from '@comp/ui/textarea'; +import type { AttachmentType } from '@trycompai/db'; +import { AttachmentEntityType } from '@trycompai/db'; // Import AttachmentEntityType import { Loader2, // Import Loader2 MoreHorizontal, // Import Paperclip @@ -358,7 +358,9 @@ export function CommentItem({ comment }: { comment: CommentWithAuthor }) { ) : (