From 7fd2dc304acf09fe0ad58aaa3183a3fc05fa6b32 Mon Sep 17 00:00:00 2001 From: filtered <176114999+webfiltered@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:05:41 +1000 Subject: [PATCH] pnpm catalog for centralized dependency management (#5871) ## Summary Adds pnpm catalog to centralize dependency versions across the monorepo. ## Changes - **What**: Consolidates dependencies into single default catalog with [`prefer` mode](https://pnpm.io/catalogs#catalog-mode) - **Dependencies**: No new dependencies - reorganizes existing version management ## Review Focus The catalog uses `prefer` mode which automatically uses catalog versions for packages already in the catalog, falling back to direct versions for packages not yet cataloged. ### Example Usage When adding a dependency already in the catalog: ```bash pnpm add vue ``` This automatically uses `"vue": "catalog:"` in `package.json` instead of a direct version. --- .npmrc | 1 + pnpm-workspace.yaml | 108 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/.npmrc b/.npmrc index ae90f7051..1b28e47ce 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ ignore-workspace-root-check=true +catalog-mode=prefer diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0b9e0d06b..50bb8f97a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,6 +2,114 @@ packages: - apps/** - packages/** +catalog: + # Core frameworks + typescript: ^5.9.2 + vue: ^3.5.13 + + # Build tools + '@nx/eslint': 21.4.1 + '@nx/playwright': 21.4.1 + '@nx/storybook': 21.4.1 + '@nx/vite': 21.4.1 + nx: 21.4.1 + tsx: ^4.15.6 + vite: ^5.4.19 + '@vitejs/plugin-vue': ^5.1.4 + 'vite-plugin-dts': ^4.5.4 + vue-tsc: ^3.0.7 + + # Testing + 'happy-dom': ^15.11.0 + jsdom: ^26.1.0 + '@pinia/testing': ^0.1.5 + '@playwright/test': ^1.52.0 + '@vitest/coverage-v8': ^3.2.4 + '@vitest/ui': ^3.0.0 + vitest: ^3.2.4 + '@vue/test-utils': ^2.4.6 + + # Linting & Formatting + '@eslint/js': ^9.35.0 + eslint: ^9.34.0 + 'eslint-config-prettier': ^10.1.8 + 'eslint-plugin-prettier': ^5.5.4 + 'eslint-plugin-storybook': ^9.1.6 + 'eslint-plugin-unused-imports': ^4.2.0 + 'eslint-plugin-vue': ^10.4.0 + globals: ^15.9.0 + '@intlify/eslint-plugin-vue-i18n': ^4.1.0 + prettier: ^3.3.2 + 'typescript-eslint': ^8.44.0 + 'vue-eslint-parser': ^10.2.0 + + # Vue ecosystem + '@sentry/vue': ^8.48.0 + '@vueuse/core': ^11.0.0 + '@vueuse/integrations': ^13.9.0 + 'vite-plugin-html': ^3.2.2 + 'vite-plugin-vue-devtools': ^7.7.6 + pinia: ^2.1.7 + 'vue-i18n': ^9.14.3 + 'vue-router': ^4.4.3 + vuefire: ^3.2.1 + + # PrimeVue UI framework + '@primeuix/forms': 0.0.2 + '@primeuix/styled': 0.3.2 + '@primeuix/utils': ^0.3.2 + '@primevue/core': ^4.2.5 + '@primevue/forms': ^4.2.5 + '@primevue/icons': 4.2.5 + '@primevue/themes': ^4.2.5 + primeicons: ^7.0.0 + primevue: ^4.2.5 + + # Tailwind CSS and design + '@iconify/json': ^2.2.380 + '@iconify-json/lucide': ^1.1.178 + '@iconify/tailwind': ^1.1.3 + '@tailwindcss/vite': ^4.1.12 + tailwindcss: ^4.1.12 + 'tailwindcss-primeui': ^0.6.1 + 'tw-animate-css': ^1.3.8 + 'unplugin-icons': ^0.22.0 + 'unplugin-vue-components': ^0.28.0 + + # Storybook + '@storybook/addon-docs': ^9.1.1 + storybook: ^9.1.6 + '@storybook/vue3': ^9.1.1 + '@storybook/vue3-vite': ^9.1.1 + + # Data and validation + algoliasearch: ^5.21.0 + firebase: ^11.6.0 + yjs: ^13.6.27 + zod: ^3.23.8 + 'zod-validation-error': ^3.3.0 + + # Dev tools + dotenv: ^16.4.5 + husky: ^9.0.11 + jiti: 2.4.2 + knip: ^5.62.0 + 'lint-staged': ^15.2.7 + + # Type definitions + '@types/fs-extra': ^11.0.4 + '@types/jsdom': ^21.1.7 + '@types/node': ^20.14.8 + '@types/semver': ^7.7.0 + '@types/three': ^0.169.0 + 'vue-component-type-helpers': ^3.0.7 + 'zod-to-json-schema': ^3.24.1 + + # i18n + '@alloc/quick-lru': ^5.2.0 + '@lobehub/i18n-cli': ^1.25.1 + '@trivago/prettier-plugin-sort-imports': ^5.2.0 + ignoredBuiltDependencies: - '@firebase/util' - protobufjs