fix(turbo-boundaries): resolve 32 violations

- Re-tag core-trpc as core-composition (transitively reaches features
  through core-api's AppRouter type) and allow core-composition packages
  to depend on other core-composition packages in turbo.json
- Add @payloadcms/richtext-lexical as direct dep of apps/cms (was pulled
  transitively via core-cms; Payload's importMap.js imports it directly)
- Add @storybook/react as devDep of core-ui and apps/storybook (stories
  belong with components per Atomic Design)
- Update apps/storybook .storybook/{main,preview}.ts to point at
  packages/core-ui (was still referencing deleted packages/ui) and export
  CSS via package exports instead of direct file import
- Add JSDoc type annotation to Payload-generated importMap.js to suppress
  TypeScript's TS2742 error from complex inferred types
- Add storybook-static to eslint ignores in core-eslint base config

pnpm turbo boundaries now reports zero violations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 12:12:27 +02:00
parent 9899e213ca
commit eb55a698f3
12 changed files with 69 additions and 7 deletions

View File

@@ -12,6 +12,7 @@
}, },
"dependencies": { "dependencies": {
"@payloadcms/next": "^3.14.0", "@payloadcms/next": "^3.14.0",
"@payloadcms/richtext-lexical": "^3.14.0",
"@payloadcms/ui": "^3.14.0", "@payloadcms/ui": "^3.14.0",
"@repo/core-cms": "workspace:*", "@repo/core-cms": "workspace:*",
"next": "^15.3.0", "next": "^15.3.0",

View File

@@ -23,6 +23,7 @@ import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864
import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client'
import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from '@payloadcms/next/rsc' import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from '@payloadcms/next/rsc'
/** @type {Record<string, any>} */
export const importMap = { export const importMap = {
"@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, "@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e,
"@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e, "@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e,

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
storybook-static
.storybook/storybook-static

View File

@@ -2,7 +2,7 @@ import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = { const config: StorybookConfig = {
framework: "@storybook/react-vite", framework: "@storybook/react-vite",
stories: ["../../../packages/ui/src/**/*.stories.@(ts|tsx)"], stories: ["../../../packages/core-ui/src/**/*.stories.@(ts|tsx)"],
addons: ["@storybook/addon-essentials"], addons: ["@storybook/addon-essentials"],
docs: { docs: {
autodocs: "tag", autodocs: "tag",

View File

@@ -1,5 +1,5 @@
import type { Preview } from "@storybook/react"; import type { Preview } from "@storybook/react";
import "../../../packages/ui/src/styles/globals.css"; import "@repo/core-ui/styles/globals.css";
const preview: Preview = { const preview: Preview = {
parameters: { parameters: {

View File

@@ -16,6 +16,7 @@
"@repo/core-eslint": "workspace:*", "@repo/core-eslint": "workspace:*",
"@repo/core-typescript": "workspace:*", "@repo/core-typescript": "workspace:*",
"@storybook/addon-essentials": "^8.6.0", "@storybook/addon-essentials": "^8.6.0",
"@storybook/react": "^8.6.0",
"@storybook/react-vite": "^8.6.0", "@storybook/react-vite": "^8.6.0",
"@tailwindcss/vite": "^4.1.0", "@tailwindcss/vite": "^4.1.0",
"react": "^19.0.0", "react": "^19.0.0",

View File

@@ -5,7 +5,7 @@ import turboPlugin from "eslint-plugin-turbo";
import boundaries from "eslint-plugin-boundaries"; import boundaries from "eslint-plugin-boundaries";
export default [ export default [
{ ignores: ["dist/**", "node_modules/**", ".next/**", ".turbo/**"] }, { ignores: ["dist/**", "node_modules/**", ".next/**", ".turbo/**", "storybook-static/**"] },
js.configs.recommended, js.configs.recommended,
...tseslint.configs.recommended, ...tseslint.configs.recommended,
eslintConfigPrettier, eslintConfigPrettier,

View File

@@ -1,4 +1,4 @@
{ {
"extends": ["//"], "extends": ["//"],
"tags": ["core"] "tags": ["core-composition"]
} }

View File

@@ -4,7 +4,8 @@
"version": "0.0.0", "version": "0.0.0",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./src/index.ts" ".": "./src/index.ts",
"./styles/globals.css": "./src/styles/globals.css"
}, },
"scripts": { "scripts": {
"build": "tsc --noEmit", "build": "tsc --noEmit",
@@ -19,6 +20,7 @@
"devDependencies": { "devDependencies": {
"@repo/core-eslint": "workspace:*", "@repo/core-eslint": "workspace:*",
"@repo/core-typescript": "workspace:*", "@repo/core-typescript": "workspace:*",
"@storybook/react": "^8.6.0",
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
} }
} }

55
pnpm-lock.yaml generated
View File

@@ -23,6 +23,9 @@ importers:
'@payloadcms/next': '@payloadcms/next':
specifier: ^3.14.0 specifier: ^3.14.0
version: 3.81.0(@types/react@19.2.14)(graphql@16.13.2)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) version: 3.81.0(@types/react@19.2.14)(graphql@16.13.2)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
'@payloadcms/richtext-lexical':
specifier: ^3.14.0
version: 3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(@types/react@19.2.14)(graphql@16.13.2)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@types/react@19.2.14)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30)
'@payloadcms/ui': '@payloadcms/ui':
specifier: ^3.14.0 specifier: ^3.14.0
version: 3.81.0(@types/react@19.2.14)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) version: 3.81.0(@types/react@19.2.14)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
@@ -79,6 +82,9 @@ importers:
'@storybook/addon-essentials': '@storybook/addon-essentials':
specifier: ^8.6.0 specifier: ^8.6.0
version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))
'@storybook/react':
specifier: ^8.6.0
version: 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.9.3)
'@storybook/react-vite': '@storybook/react-vite':
specifier: ^8.6.0 specifier: ^8.6.0
version: 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.1)(storybook@8.6.18(prettier@3.8.1))(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0)) version: 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.1)(storybook@8.6.18(prettier@3.8.1))(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0))
@@ -478,6 +484,9 @@ importers:
'@repo/core-typescript': '@repo/core-typescript':
specifier: workspace:* specifier: workspace:*
version: link:../core-typescript version: link:../core-typescript
'@storybook/react':
specifier: ^8.6.0
version: 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.9.3)
'@types/react': '@types/react':
specifier: ^19.0.0 specifier: ^19.0.0
version: 19.2.14 version: 19.2.14
@@ -5988,6 +5997,52 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@payloadcms/richtext-lexical@3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(@types/react@19.2.14)(graphql@16.13.2)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@types/react@19.2.14)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30)':
dependencies:
'@faceless-ui/modal': 3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@lexical/clipboard': 0.41.0
'@lexical/headless': 0.41.0
'@lexical/html': 0.41.0
'@lexical/link': 0.41.0
'@lexical/list': 0.41.0
'@lexical/mark': 0.41.0
'@lexical/react': 0.41.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yjs@13.6.30)
'@lexical/rich-text': 0.41.0
'@lexical/selection': 0.41.0
'@lexical/table': 0.41.0
'@lexical/utils': 0.41.0
'@payloadcms/next': 3.81.0(@types/react@19.2.14)(graphql@16.13.2)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
'@payloadcms/translations': 3.81.0
'@payloadcms/ui': 3.81.0(@types/react@19.2.14)(monaco-editor@0.55.1)(next@15.5.14(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
'@types/uuid': 10.0.0
acorn: 8.16.0
bson-objectid: 2.0.4
csstype: 3.1.3
dequal: 2.0.3
escape-html: 1.0.3
jsox: 1.2.121
lexical: 0.41.0
mdast-util-from-markdown: 2.0.2
mdast-util-mdx-jsx: 3.1.3
micromark-extension-mdx-jsx: 3.0.1
payload: 3.81.0(graphql@16.13.2)(typescript@5.9.3)
qs-esm: 8.0.1
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
react-error-boundary: 4.1.2(react@19.2.4)
ts-essentials: 10.0.3(typescript@5.9.3)
uuid: 10.0.0
transitivePeerDependencies:
- '@types/react'
- bufferutil
- monaco-editor
- next
- supports-color
- typescript
- utf-8-validate
- yjs
'@payloadcms/richtext-lexical@3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(graphql@16.13.2)(next@16.2.2(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(next@16.2.2(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30)': '@payloadcms/richtext-lexical@3.81.0(@faceless-ui/modal@3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@payloadcms/next@3.81.0(graphql@16.13.2)(next@16.2.2(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(next@16.2.2(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(payload@3.81.0(graphql@16.13.2)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(yjs@13.6.30)':
dependencies: dependencies:
'@faceless-ui/modal': 3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@faceless-ui/modal': 3.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)

View File

@@ -20,7 +20,7 @@
}, },
"core-composition": { "core-composition": {
"dependencies": { "dependencies": {
"allow": ["core", "feature", "tooling"] "allow": ["core", "core-composition", "feature", "tooling"]
} }
}, },
"tooling": { "tooling": {