Loading workspace insights... Statistics interval
7 days30 daysLatest CI Pipeline Executions
3f995e01 Changed foundation libs to ESLint 9 / flat config (#28802)
no ref
Migrates `apps/shade`, `apps/admin-x-design-system`, and
`apps/admin-x-framework` — the three internal foundation libraries
consumed by the admin React apps.
- Each workspace had a `src/.eslintrc.cjs` + `test/.eslintrc.cjs` split;
collapsed each into a single `eslint.config.js` with `src/` and `test/`
file globs.
- Swapped `eslint: catalog:` to `catalog:eslint9` and added
`@eslint/js`, `globals`, `eslint-plugin-react`, `eslint-plugin-ghost`,
`typescript-eslint` (unified) as direct deps. `apps/shade` also keeps
`eslint-plugin-storybook` (story files get a
`react-hooks/rules-of-hooks` override since `render()` bodies
intentionally call hooks outside React components).
- `'no-undef'` and `'no-redeclare'` are disabled in TS blocks
(TypeScript handles them) — matches the legacy posture of
`plugin:@typescript-eslint/recommended`.
- All `ghost/mocha/*` rules disabled in test blocks; these workspaces
use Vitest, not Mocha.
- Fixed two pre-existing non-breaking-space chars (U+00A0) inside jsdoc
comments that `no-irregular-whitespace` correctly caught — they had been
hiding in the legacy cache:
-
[apps/shade/src/components/ui/simple-pagination.tsx](apps/shade/src/components/ui/simple-pagination.tsx)
-
[apps/admin-x-design-system/src/global/layout/page.tsx](apps/admin-x-design-system/src/global/layout/page.tsx)
- ESLint 9 dropped the `--ext` CLI flag; `lint:code` / `lint:test`
scripts now pass directory args.
- No version bumps — all three are private workspaces, not
CDN-published.
- No `"type": "module"` change — all three already declare it.
## Test plan
- [ ] CI lint passes
- [ ] \`pnpm --filter @tryghost/shade lint\` is green locally
- [ ] \`pnpm --filter @tryghost/admin-x-design-system lint\` is green
locally
- [ ] \`pnpm --filter @tryghost/admin-x-framework lint\` is green
locally
- [ ] Downstream admin apps (admin-x-settings, posts, stats,
activitypub) still build — these workspaces depend on the foundation
libs