7693b49253
- Replace @robonen/oxlint with @robonen/eslint (composable ESLint flat-config presets: base, typescript, vue, vitest, imports, node, stylistic). - Plugins bundled as deps: typescript-eslint, eslint-plugin-vue, @vitest/eslint-plugin, eslint-plugin-import-x, eslint-plugin-n, eslint-plugin-unicorn, @stylistic/eslint-plugin. - @robonen/tsconfig: add base/dom/node/vue configs for composite project refs.
75 lines
2.8 KiB
Markdown
75 lines
2.8 KiB
Markdown
# @robonen/eslint
|
|
|
|
Composable [ESLint](https://eslint.org) flat-config presets.
|
|
|
|
## Install
|
|
|
|
```bash
|
|
pnpm install -D @robonen/eslint eslint jiti
|
|
```
|
|
|
|
> `jiti` lets ESLint load a TypeScript `eslint.config.ts`.
|
|
|
|
## Usage
|
|
|
|
Create `eslint.config.ts` in your project root:
|
|
|
|
```ts
|
|
import { compose, base, typescript, vue, vitest, imports } from '@robonen/eslint';
|
|
|
|
export default compose(base, typescript, vue, vitest, imports);
|
|
```
|
|
|
|
Append custom config objects after presets to override them:
|
|
|
|
```ts
|
|
import { compose, base, typescript } from '@robonen/eslint';
|
|
|
|
export default compose(base, typescript, {
|
|
rules: { 'no-console': 'off' },
|
|
}, {
|
|
files: ['**/*.vue'],
|
|
rules: { '@stylistic/no-multiple-empty-lines': 'off' },
|
|
});
|
|
```
|
|
|
|
## Presets
|
|
|
|
| Preset | Plugin(s) | Description |
|
|
| ------------ | -------------------------------------- | ---------------------------------------------- |
|
|
| `base` | `@eslint/js`, `eslint-plugin-unicorn` | Core eslint + unicorn rules, global ignores |
|
|
| `typescript` | `typescript-eslint` | TypeScript rules (`**/*.ts`, `**/*.vue`) |
|
|
| `vue` | `eslint-plugin-vue` | Vue 3 Composition API / `<script setup>` rules |
|
|
| `vitest` | `@vitest/eslint-plugin` | Test file rules |
|
|
| `imports` | `eslint-plugin-import-x` | Import rules (cycles, duplicates, ordering) |
|
|
| `node` | `eslint-plugin-n` | Node.js-specific rules |
|
|
| `stylistic` | `@stylistic/eslint-plugin` | Formatting rules |
|
|
|
|
`ignores` is also exported on its own if you only want the global ignore list.
|
|
|
|
## Migrating from `@robonen/oxlint`
|
|
|
|
This package replaces `@robonen/oxlint`. The preset names and intent are
|
|
preserved, with these mapping notes:
|
|
|
|
- `eslint/*` rules → ESLint core rules (no prefix), e.g. `eslint/no-console` → `no-console`.
|
|
- `typescript/*` → `@typescript-eslint/*`.
|
|
- `import/*` → `import-x/*` (via `eslint-plugin-import-x`).
|
|
- `node/*` → `n/*` (via `eslint-plugin-n`).
|
|
- `@stylistic/*` and `unicorn/*` are unchanged.
|
|
- `oxc/*` rules are oxc-exclusive and have **no ESLint equivalent**; they are
|
|
dropped. Their intent is largely covered by `@eslint/js` recommended and
|
|
`unicorn`.
|
|
- `categories`/`env`/`ignorePatterns` (oxlint config keys) are replaced by flat
|
|
config equivalents: `@eslint/js` recommended, `languageOptions.globals`, and
|
|
the `ignores` preset.
|
|
|
|
## API
|
|
|
|
### `compose(...configs): FlatConfigArray`
|
|
|
|
Flattens presets (arrays) and inline overrides (single objects) into one ordered
|
|
flat config array. Later entries override earlier ones — ESLint flat-config
|
|
semantics. Falsy entries (`false`/`null`/`undefined`) are skipped, enabling
|
|
conditional composition.
|