@samyrai/eslint-plugin-component-contracts
v2.1.0
Published
ESLint plugin for enforcing component-first JSX authoring with v5 policy-driven component contracts.
Maintainers
Readme
@samyrai/eslint-plugin-component-contracts
ESLint plugin for enforcing component-first JSX authoring with policy-driven component contracts.
Install
yarn add -D @samyrai/eslint-plugin-component-contractsor
npm install -D @samyrai/eslint-plugin-component-contractsFlat Config Usage
import { createComponentContractsConfig } from '@samyrai/eslint-plugin-component-contracts/config';
export default [
...createComponentContractsConfig({
files: ['src/**/*.{ts,tsx,js,jsx}'],
configPath: 'component-contracts.config.json',
catalogPath: 'component-catalog.json',
policyProfile: 'migration-default',
minSuggestionConfidence: 0.75,
}),
];Preset Variants
import { flat } from '@samyrai/eslint-plugin-component-contracts/config';
export default [
...flat['recommended-warn'],
// ...flat['recommended-error'],
// ...flat['no-new-violations'],
];Rules
contracts/no-raw-html-in-featurescontracts/no-primitives-importscontracts/prefer-component-mappingcontracts/no-layout-classes-on-boxcontracts/no-raw-motion-div-in-componentscontracts/no-typography-classes-on-layout-primitivescontracts/prefer-semantic-layout-primitivescontracts/prefer-text-component
Config Notes
- Config schema is v5 (breaking). Canonical fields only; legacy aliases were removed.
zones.profiles[].priorityis supported. Higher priority wins; on ties, the later profile wins.- Primitive matcher canonical fields:
matchImportedNamesallowInZones
- Optional safe autofix target for
no-primitives-imports:primitiveImportRule.rewrite.barrelImportPath- Fixes apply only when imported names are statically resolvable from the barrel exports.
Schemas
@samyrai/eslint-plugin-component-contracts/schemas/component-contracts.config.schema.json@samyrai/eslint-plugin-component-contracts/schemas/component-catalog.schema.json@samyrai/eslint-plugin-component-contracts/schemas/mapping-overrides.schema.json
Docs
- Architecture: https://github.com/SamyRai/html-to-components/blob/main/docs/architecture.md
- Implementation: https://github.com/SamyRai/html-to-components/blob/main/docs/component-contracts-implementation.md
ESLint 10 Stack Notes
- Verified maintained/supported pairings for ESLint 10:
@eslint-react/eslint-plugin(React + hooks + DOM/Web API strict presets)eslint-plugin-unicorneslint-plugin-tailwindcss(flat/recommendedruntime validated with ESLint 10)
eslint-plugin-jsx-a11ydoes not currently declare ESLint 10 peer support, so strict a11y in this stack should come from@eslint-reactDOM safety rules until official support lands.
