From f66f01a09af815cf7f09f777830ab0b5b35a999d Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Sun, 1 Mar 2026 13:01:26 +1100 Subject: [PATCH] build: standardise on react 19 and deduplicate deps Eliminates dual React ecosystems and reduces dependency duplication by consolidating on a single React version and expanding the pnpm workspace catalog. - Upgrade all packages from React 18 to React 19 - Remove @types/react and @types/node overrides (no longer needed with single React version) - Standardise @types/node to ^22 across all packages - Add prisma-kysely>@prisma/internals override to eliminate old prisma 6.16.x subtree - Fix React 19 type changes: useRef requires initial value, JSX namespace needs explicit import, RefObject includes null - Expand catalog with 14 new entries (ai, dotenv, pino, playwright, prisma tooling, nodemailer, pdfjs-dist, etc.) - Catalog radix-ui, next, lucide-react, postcss, and typescript for docs/openpage-api alignment - Run pnpm dedupe to collapse peer-dep context duplicates --- apps/docs/package.json | 20 +- apps/openpage-api/package.json | 4 +- package.json | 35 +- packages/email/package.json | 2 +- .../lib/client-only/hooks/use-autosave.ts | 2 +- packages/lib/package.json | 10 +- packages/prisma/package.json | 12 +- packages/tailwind-config/package.json | 2 +- packages/trpc/package.json | 2 +- packages/ui/components/signing-card.tsx | 6 +- packages/ui/package.json | 56 +- .../ui/primitives/recipient-role-icons.tsx | 4 +- .../signature-pad/signature-pad-draw.tsx | 10 +- pnpm-lock.yaml | 15767 +++++++++++----- pnpm-workspace.yaml | 65 +- 15 files changed, 10996 insertions(+), 5001 deletions(-) diff --git a/apps/docs/package.json b/apps/docs/package.json index e7dfada04..daf364697 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -10,27 +10,27 @@ "postinstall": "fumadocs-mdx" }, "dependencies": { - "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-tabs": "catalog:", "fumadocs-core": "16.5.0", "fumadocs-mdx": "14.2.6", "fumadocs-ui": "16.5.0", - "lucide-react": "^0.563.0", + "lucide-react": "catalog:", "mermaid": "^11.12.2", - "next": "16.1.6", + "next": "catalog:", "next-plausible": "^3.12.5", "next-themes": "^0.4.6", - "react": "^19.2.4", - "react-dom": "^19.2.4", + "react": "catalog:", + "react-dom": "catalog:", "tailwind-merge": "^3.4.0" }, "devDependencies": { "@tailwindcss/postcss": "^4.1.18", "@types/mdx": "^2.0.13", - "@types/node": "^25.1.0", - "@types/react": "^19.2.10", - "@types/react-dom": "^19.2.3", - "postcss": "^8.5.6", + "@types/node": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "postcss": "catalog:", "tailwindcss": "^4.1.18", - "typescript": "^5.9.3" + "typescript": "catalog:" } } diff --git a/apps/openpage-api/package.json b/apps/openpage-api/package.json index 8b6f9d7f7..376149383 100644 --- a/apps/openpage-api/package.json +++ b/apps/openpage-api/package.json @@ -12,7 +12,9 @@ "dependencies": { "@documenso/prisma": "workspace:*", "luxon": "catalog:", - "next": "16.1.6" + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:" }, "devDependencies": { "@types/node": "catalog:", diff --git a/package.json b/package.json index 973d18a82..93490cc5e 100644 --- a/package.json +++ b/package.json @@ -51,39 +51,39 @@ "@ts-rest/core": "catalog:", "@ts-rest/open-api": "catalog:", "@ts-rest/serverless": "catalog:", - "dotenv": "^17.2.3", - "dotenv-cli": "^11.0.0", + "dotenv": "catalog:", + "dotenv-cli": "catalog:", "eslint": "catalog:", "husky": "^9.1.7", "inngest-cli": "^1.16.1", "lint-staged": "^16.2.7", "nanoid": "catalog:", - "nodemailer": "^7.0.10", - "pdfjs-dist": "5.4.296", - "pino": "^9.14.0", - "pino-pretty": "^13.1.2", - "playwright": "1.56.1", + "nodemailer": "catalog:", + "pdfjs-dist": "catalog:", + "pino": "catalog:", + "pino-pretty": "catalog:", + "playwright": "catalog:", "prettier": "catalog:", "prisma": "catalog:", - "prisma-extension-kysely": "^3.0.0", - "prisma-json-types-generator": "^3.6.2", - "prisma-kysely": "^2.3.0", + "prisma-extension-kysely": "catalog:", + "prisma-json-types-generator": "catalog:", + "prisma-kysely": "catalog:", "rimraf": "^6.1.2", "superjson": "catalog:", "turbo": "^2.8.12", "vite": "catalog:", "vite-plugin-static-copy": "^3.1.4", - "zod-openapi": "^4.2.4", - "zod-prisma-types": "3.3.5" + "zod-openapi": "catalog:", + "zod-prisma-types": "catalog:" }, "dependencies": { - "@ai-sdk/google-vertex": "3.0.81", + "@ai-sdk/google-vertex": "catalog:", "@documenso/prisma": "workspace:*", "@libpdf/core": "^0.2.12", "@lingui/conf": "^5.6.0", "@lingui/core": "catalog:", "@prisma/extension-read-replicas": "^0.4.1", - "ai": "^5.0.104", + "ai": "catalog:", "cron-parser": "^5.5.0", "luxon": "catalog:", "posthog-node": "catalog:", @@ -94,13 +94,12 @@ "pnpm": { "overrides": { "lodash": "4.17.23", - "pdfjs-dist": "5.4.296", + "pdfjs-dist": "$pdfjs-dist", "typescript": "5.6.2", "zod": "$zod", "fumadocs-mdx>zod": "^4.3.5", - "@types/react": "18.3.27", - "@types/node": "20.19.25", - "jiti": "2.6.1" + "jiti": "2.6.1", + "prisma-kysely>@prisma/internals": "^6.19.0" }, "patchedDependencies": { "@ai-sdk/google-vertex@3.0.81": "patches/@ai-sdk__google-vertex@3.0.81.patch" diff --git a/packages/email/package.json b/packages/email/package.json index 48d12f788..f86ca6ae5 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -37,7 +37,7 @@ "@react-email/section": "0.0.16", "@react-email/tailwind": "^2.0.1", "@react-email/text": "0.1.5", - "nodemailer": "^7.0.10", + "nodemailer": "catalog:", "react-email": "^5.0.6", "resend": "^6.5.2" }, diff --git a/packages/lib/client-only/hooks/use-autosave.ts b/packages/lib/client-only/hooks/use-autosave.ts index 025c285d5..7acc57b9a 100644 --- a/packages/lib/client-only/hooks/use-autosave.ts +++ b/packages/lib/client-only/hooks/use-autosave.ts @@ -11,7 +11,7 @@ export const useAutoSave = ( ) => { const { delay = 2000 } = options; - const saveTimeoutRef = useRef(); + const saveTimeoutRef = useRef(undefined); const saveQueueRef = useRef[]>([]); const isProcessingRef = useRef(false); diff --git a/packages/lib/package.json b/packages/lib/package.json index 167c8b557..48d37503f 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -15,7 +15,7 @@ "clean": "rimraf node_modules" }, "dependencies": { - "@ai-sdk/google-vertex": "3.0.81", + "@ai-sdk/google-vertex": "catalog:", "@aws-sdk/client-s3": "catalog:", "@aws-sdk/client-sesv2": "catalog:", "@aws-sdk/cloudfront-signer": "catalog:", @@ -38,7 +38,7 @@ "@sindresorhus/slugify": "^3.0.0", "@team-plain/typescript-sdk": "^5.11.0", "@vvo/tzdb": "^6.196.0", - "ai": "^5.0.104", + "ai": "catalog:", "csv-parse": "^6.1.0", "inngest": "^3.45.1", "jose": "^6.1.2", @@ -49,9 +49,9 @@ "oslo": "^0.17.0", "p-map": "^7.0.4", "pg": "^8.16.3", - "pino": "^9.14.0", - "pino-pretty": "^13.1.2", - "playwright": "1.56.1", + "pino": "catalog:", + "pino-pretty": "catalog:", + "playwright": "catalog:", "posthog-js": "catalog:", "posthog-node": "catalog:", "react": "catalog:", diff --git a/packages/prisma/package.json b/packages/prisma/package.json index 86bdadfca..b35288829 100644 --- a/packages/prisma/package.json +++ b/packages/prisma/package.json @@ -25,16 +25,16 @@ "kysely": "catalog:", "nanoid": "catalog:", "prisma": "catalog:", - "prisma-extension-kysely": "^3.0.0", - "prisma-kysely": "^2.3.0", - "prisma-json-types-generator": "^3.6.2", + "prisma-extension-kysely": "catalog:", + "prisma-kysely": "catalog:", + "prisma-json-types-generator": "catalog:", "ts-pattern": "catalog:", "zod": "catalog:", - "zod-prisma-types": "3.3.5" + "zod-prisma-types": "catalog:" }, "devDependencies": { - "dotenv": "^17.2.3", - "dotenv-cli": "^11.0.0", + "dotenv": "catalog:", + "dotenv-cli": "catalog:", "tsx": "catalog:", "typescript": "catalog:" } diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json index 66eb39201..ed48f28e7 100644 --- a/packages/tailwind-config/package.json +++ b/packages/tailwind-config/package.json @@ -11,7 +11,7 @@ "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/typography": "^0.5.19", "autoprefixer": "catalog:", - "postcss": "^8.5.6", + "postcss": "catalog:", "tailwindcss": "catalog:", "tailwindcss-animate": "catalog:" }, diff --git a/packages/trpc/package.json b/packages/trpc/package.json index c7bad79e3..c6de16b15 100644 --- a/packages/trpc/package.json +++ b/packages/trpc/package.json @@ -25,7 +25,7 @@ "ts-pattern": "catalog:", "zod": "catalog:", "zod-form-data": "^2.0.8", - "zod-openapi": "^4.2.4" + "zod-openapi": "catalog:" }, "devDependencies": { "@types/formidable": "catalog:" diff --git a/packages/ui/components/signing-card.tsx b/packages/ui/components/signing-card.tsx index 0cf5799d0..a493baba1 100644 --- a/packages/ui/components/signing-card.tsx +++ b/packages/ui/components/signing-card.tsx @@ -48,7 +48,7 @@ export const SigningCard3D = ({ const [trackMouse, setTrackMouse] = useState(false); - const timeoutRef = useRef(); + const timeoutRef = useRef(undefined); const cardX = useMotionValue(0); const cardY = useMotionValue(0); @@ -184,7 +184,7 @@ const SigningCardContent = ({ className, name, signature }: SigningCardContentPr )) .with({ typedSignature: P.string }, (signature) => ( ( = { +export const ROLE_ICONS: Record = { SIGNER: , APPROVER: , CC: , diff --git a/packages/ui/primitives/signature-pad/signature-pad-draw.tsx b/packages/ui/primitives/signature-pad/signature-pad-draw.tsx index aff0363e5..1bb0976b7 100644 --- a/packages/ui/primitives/signature-pad/signature-pad-draw.tsx +++ b/packages/ui/primitives/signature-pad/signature-pad-draw.tsx @@ -17,7 +17,7 @@ import { getSvgPathFromStroke } from './helper'; import { Point } from './point'; import { SignaturePadColorPicker } from './signature-pad-color-picker'; -const checkSignatureValidity = (element: RefObject) => { +const checkSignatureValidity = (element: RefObject) => { if (!element.current) { return false; } @@ -291,10 +291,10 @@ export const SignaturePadDraw = ({ -
+