@santi020k/eslint-config-basic 3.5.2 → 3.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +201 -6
  3. package/package.json +49 -49
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @santi020k/eslint-config-basic
2
2
 
3
+ ## 3.5.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [#134](https://github.com/santi020k/eslint-config-basic/pull/134) [`07cb188`](https://github.com/santi020k/eslint-config-basic/commit/07cb188c727606bf00b67928ac20e95c2201ddc6) Thanks [@santi020k](https://github.com/santi020k)! - Replace the minimal npm package READMEs with practical installation,
8
+ configuration, compatibility, and support guidance. The Basic package now
9
+ publishes the comprehensive root README instead of a short placeholder.
10
+ - Updated dependencies [[`07cb188`](https://github.com/santi020k/eslint-config-basic/commit/07cb188c727606bf00b67928ac20e95c2201ddc6)]:
11
+ - @santi020k/eslint-config-core@3.1.3
12
+ - @santi020k/eslint-config-typescript@3.1.5
13
+
14
+ ## 3.5.3
15
+
16
+ ### Patch Changes
17
+
18
+ - [#132](https://github.com/santi020k/eslint-config-basic/pull/132) [`d92bcf4`](https://github.com/santi020k/eslint-config-basic/commit/d92bcf4e1591a18cdd1c2a84db556e8598cd293a) Thanks [@santi020k](https://github.com/santi020k)! - Create the umbrella GitHub Release and rolling major Action tag from the protected GitHub Actions release workflow, including a main-only recovery dispatch.
19
+
3
20
  ## 3.5.2
4
21
 
5
22
  ### Patch Changes
package/README.md CHANGED
@@ -1,11 +1,206 @@
1
1
  # @santi020k/eslint-config-basic
2
2
 
3
- The primary entry point that composes all feature-specific configurations.
3
+ DX-first ESLint 10 flat config for JavaScript and TypeScript, with auto-detection
4
+ and opt-in framework packages.
4
5
 
5
- This package is part of the [`@santi020k/eslint-config-basic`](https://github.com/santi020k/eslint-config-basic) monorepo.
6
+ [Documentation](https://eslint.santi020k.com/) ·
7
+ [npm](https://www.npmjs.com/package/@santi020k/eslint-config-basic) ·
8
+ [Migration to v3](https://eslint.santi020k.com/guide/migration-v2-to-v3/)
6
9
 
7
- - Docs: [Main package](https://eslint.santi020k.com/packages/basic)
8
- - Repository: [santi020k/eslint-config-basic](https://github.com/santi020k/eslint-config-basic)
9
- - Author: [santi020k](https://santi020k.com)
10
+ [![Build](https://github.com/santi020k/eslint-config-basic/actions/workflows/build.yml/badge.svg)](https://github.com/santi020k/eslint-config-basic/actions/workflows/build.yml)
11
+ [![CodeQL](https://github.com/santi020k/eslint-config-basic/actions/workflows/codeql.yml/badge.svg)](https://github.com/santi020k/eslint-config-basic/actions/workflows/codeql.yml)
12
+ [![npm version](https://img.shields.io/npm/v/@santi020k/eslint-config-basic.svg)](https://www.npmjs.com/package/@santi020k/eslint-config-basic)
13
+ [![npm downloads](https://img.shields.io/npm/dm/@santi020k/eslint-config-basic.svg)](https://www.npmjs.com/package/@santi020k/eslint-config-basic)
14
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/santi020k/eslint-config-basic/blob/main/LICENSE)
10
15
 
11
- The canonical documentation lives on the Starlight site, so this README intentionally stays short to avoid duplication.
16
+ ## Quick start
17
+
18
+ Install the lean package and ESLint:
19
+
20
+ ```sh
21
+ npm install -D eslint @santi020k/eslint-config-basic
22
+ ```
23
+
24
+ Create `eslint.config.mjs`:
25
+
26
+ ```js
27
+ import { defineConfig } from '@santi020k/eslint-config-basic'
28
+
29
+ export default defineConfig()
30
+ ```
31
+
32
+ That is the complete zero-config setup. It detects JavaScript, TypeScript,
33
+ runtime, and installed optional features relative to the config file, even when
34
+ an editor starts ESLint from another working directory.
35
+
36
+ For a framework, add its config package to the same install:
37
+
38
+ ```sh
39
+ npm install -D eslint @santi020k/eslint-config-basic @santi020k/eslint-config-react
40
+ ```
41
+
42
+ For optional behavior, add only the corresponding feature packs:
43
+
44
+ ```sh
45
+ npm install -D @santi020k/eslint-config-testing @santi020k/eslint-config-tools
46
+ npm install -D @santi020k/eslint-config-libraries
47
+ ```
48
+
49
+ If install size is not a concern, the batteries-included package keeps the same
50
+ one-line config:
51
+
52
+ ```sh
53
+ npm install -D eslint @santi020k/eslint-config-full
54
+ ```
55
+
56
+ ```js
57
+ export { default } from '@santi020k/eslint-config-full/recommended'
58
+ ```
59
+
60
+ ## Why v3 changed dependency ownership
61
+
62
+ `@santi020k/eslint-config-basic` no longer installs every supported framework
63
+ and integration. Its production boundary is limited to the composer, core rules,
64
+ TypeScript support, and a small runtime utility. Frameworks and integrations are
65
+ optional peers loaded only when detected or selected.
66
+
67
+ This gives projects:
68
+
69
+ - fewer transitive dependencies and audit paths by default;
70
+ - no Angular, Expo, Storybook, GraphQL, Cypress, or Tailwind packages unless used;
71
+ - actionable errors naming an optional config package when it is missing;
72
+ - a full-package escape hatch for teams that prefer one dependency.
73
+
74
+ The lean security boundary is checked during release and has direct-dependency
75
+ budgets to prevent accidental growth.
76
+
77
+ ## Custom configuration
78
+
79
+ Use the named factory when auto-detection needs an override:
80
+
81
+ ```js
82
+ import { defineConfig } from '@santi020k/eslint-config-basic'
83
+
84
+ export default await defineConfig({
85
+ root: import.meta.dirname,
86
+ frameworks: { react: true },
87
+ strict: 'ci',
88
+ typescript: 'strict'
89
+ })
90
+ ```
91
+
92
+ Optional features require their granular category package:
93
+
94
+ ```js
95
+ import { defineConfig } from '@santi020k/eslint-config-basic'
96
+
97
+ export default await defineConfig({
98
+ features: {
99
+ playwright: true,
100
+ prettier: true,
101
+ tailwind: true
102
+ }
103
+ })
104
+ ```
105
+
106
+ The factory also accepts local flat-config overrides after the options object:
107
+
108
+ ```js
109
+ import { defineConfig } from '@santi020k/eslint-config-basic'
110
+
111
+ export default await defineConfig({}, {
112
+ files: ['scripts/**/*.js'],
113
+ rules: { 'no-console': 'off' }
114
+ })
115
+ ```
116
+
117
+ Pass overrides that reference optional plugin rules directly to `defineConfig()`
118
+ whenever possible. The composer attaches each already-loaded plugin to the rule
119
+ block that needs it. An entry appended after `defineConfig()` has returned is
120
+ outside that attachment pass; wrap a dynamically assembled final array with
121
+ `attachReferencedPlugins()`:
122
+
123
+ ```js
124
+ import {
125
+ attachReferencedPlugins,
126
+ defineConfig
127
+ } from '@santi020k/eslint-config-basic'
128
+
129
+ const generated = await defineConfig()
130
+ const lateOverrides = await loadProjectOverrides()
131
+
132
+ export default attachReferencedPlugins([...generated, ...lateOverrides])
133
+ ```
134
+
135
+ Direct calls from `eslint.config.*` automatically anchor dependency detection,
136
+ TypeScript, Tailwind, workspace packages, and `.gitignore` to that file. Set
137
+ `root` only when the intended project root differs from the config directory.
138
+
139
+ Type-aware projects can keep generated, template, or other out-of-project files
140
+ on syntax-only linting without importing `typescript-eslint`:
141
+
142
+ ```js
143
+ export default await defineConfig({
144
+ root: import.meta.dirname,
145
+ typescript: {
146
+ untypedFiles: ['templates/**/*.ts']
147
+ }
148
+ })
149
+ ```
150
+
151
+ TypeScript config files (`**/*.config.{ts,mts,cts}`) use this syntax fallback
152
+ automatically. Set `untypedFiles: false` to require type information everywhere.
153
+
154
+ ## Package choice
155
+
156
+ | Package | Use it when | Dependency model |
157
+ | --- | --- | --- |
158
+ | `@santi020k/eslint-config-basic` | Default for applications and libraries | Lean core; frameworks and integrations are optional |
159
+ | `@santi020k/eslint-config-full` | Install simplicity matters more than footprint | Every supported framework and integration |
160
+ | `@santi020k/eslint-config-lite` | Existing v2 lite users | Deprecated v3 compatibility path; removed in v4 |
161
+ | `@santi020k/eslint-config-integrations` | Existing aggregate-package users | Deprecated v3 compatibility path; removed in v4 |
162
+ | Individual framework packages | Custom composition | One framework and its plugin set |
163
+
164
+ ## CLI
165
+
166
+ ```sh
167
+ npx @santi020k/eslint-config-basic init
168
+ npx @santi020k/eslint-config-basic explain no-console --file src/index.ts
169
+ npx @santi020k/eslint-config-basic doctor --fix
170
+ npx @santi020k/eslint-config-basic compatibility
171
+ npx @santi020k/eslint-config-basic config-types
172
+ npx @santi020k/eslint-config-basic migrate --to v3
173
+ npx @santi020k/eslint-config-basic baseline --preset pedantic
174
+ npx @santi020k/eslint-config-basic profile --max-warnings 0
175
+ npx @santi020k/eslint-config-basic snapshot
176
+ npx @santi020k/eslint-config-basic diff
177
+ ```
178
+
179
+ `init` creates the zero-argument config. `explain` shows detection or traces an
180
+ effective rule, `doctor --fix` repairs safe setup issues with backups, and
181
+ `compatibility` validates runtime and peer ranges, while `config-types` checks
182
+ that editor-facing ESLint config declarations stay portable. The remaining
183
+ commands automate v3 migration, incremental strict-mode adoption, budgeted
184
+ performance profiling, and effective-rule change review.
185
+
186
+ ## Compatibility
187
+
188
+ - Node.js: `>=22.19.0`
189
+ - ESLint: `^10.0.0`
190
+ - TypeScript: `>=5.0.0` when enabled
191
+ - Package managers: npm, pnpm, Yarn, and Bun
192
+
193
+ Packages in the `@santi020k/eslint-config-*` family use independent minor and
194
+ patch versions. Packages with the same major version are designed to work
195
+ together; use the latest release of each package within that major. Internal
196
+ dependency and peer ranges provide the exact machine-readable compatibility
197
+ requirements.
198
+
199
+ See the [v2 → v3 migration guide](https://eslint.santi020k.com/guide/migration-v2-to-v3/)
200
+ for package moves and copy-paste commands. The
201
+ [planned v4 removals](https://eslint.santi020k.com/guide/v4-removals/) page
202
+ tracks compatibility APIs that are deprecated during v3.
203
+
204
+ ## License
205
+
206
+ MIT © [santi020k](https://santi020k.com). See [LICENSE](https://github.com/santi020k/eslint-config-basic/blob/main/LICENSE).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@santi020k/eslint-config-basic",
3
- "version": "3.5.2",
3
+ "version": "3.5.4",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -39,64 +39,64 @@
39
39
  "dependencies": {
40
40
  "@typescript-eslint/utils": "^8.70.1",
41
41
  "semver": "^7.8.5",
42
- "@santi020k/eslint-config-core": "^3.1.2",
43
- "@santi020k/eslint-config-typescript": "^3.1.4"
42
+ "@santi020k/eslint-config-core": "^3.1.3",
43
+ "@santi020k/eslint-config-typescript": "^3.1.5"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^26.6.2",
47
47
  "publint": "^0.3.24",
48
48
  "tsup": "^8.5.1",
49
49
  "typescript": "npm:@typescript/typescript6@^6.0.2",
50
- "@santi020k/eslint-config-angular": "^3.1.1",
51
- "@santi020k/eslint-config-astro": "^3.1.3",
52
- "@santi020k/eslint-config-extensions": "^3.1.2",
53
- "@santi020k/eslint-config-expo": "^3.1.1",
54
- "@santi020k/eslint-config-formats": "^3.1.2",
55
- "@santi020k/eslint-config-lit": "^3.1.1",
56
- "@santi020k/eslint-config-hono": "^3.1.1",
57
- "@santi020k/eslint-config-libraries": "^3.1.2",
58
- "@santi020k/eslint-config-nest": "^3.1.1",
59
- "@santi020k/eslint-config-next": "^3.1.1",
60
- "@santi020k/eslint-config-nuxt": "^3.1.1",
61
- "@santi020k/eslint-config-qwik": "^3.1.1",
62
- "@santi020k/eslint-config-react": "^3.1.1",
63
- "@santi020k/eslint-config-preact": "^3.1.1",
64
- "@santi020k/eslint-config-react-router": "^3.1.1",
65
- "@santi020k/eslint-config-slidev": "^3.1.1",
66
- "@santi020k/eslint-config-solid": "^3.1.1",
67
- "@santi020k/eslint-config-svelte": "^3.1.1",
68
- "@santi020k/eslint-config-tanstack-start": "^3.1.1",
69
- "@santi020k/eslint-config-testing": "^3.1.2",
70
- "@santi020k/eslint-config-tools": "^3.1.2",
71
- "@santi020k/eslint-config-vite": "^3.1.1",
72
- "@santi020k/eslint-config-vue": "^3.1.1"
50
+ "@santi020k/eslint-config-angular": "^3.1.2",
51
+ "@santi020k/eslint-config-astro": "^3.1.4",
52
+ "@santi020k/eslint-config-expo": "^3.1.2",
53
+ "@santi020k/eslint-config-extensions": "^3.1.3",
54
+ "@santi020k/eslint-config-formats": "^3.1.3",
55
+ "@santi020k/eslint-config-hono": "^3.1.2",
56
+ "@santi020k/eslint-config-lit": "^3.1.2",
57
+ "@santi020k/eslint-config-libraries": "^3.1.3",
58
+ "@santi020k/eslint-config-nest": "^3.1.2",
59
+ "@santi020k/eslint-config-next": "^3.1.2",
60
+ "@santi020k/eslint-config-nuxt": "^3.1.2",
61
+ "@santi020k/eslint-config-preact": "^3.1.2",
62
+ "@santi020k/eslint-config-qwik": "^3.1.2",
63
+ "@santi020k/eslint-config-slidev": "^3.1.2",
64
+ "@santi020k/eslint-config-svelte": "^3.1.2",
65
+ "@santi020k/eslint-config-tanstack-start": "^3.1.2",
66
+ "@santi020k/eslint-config-testing": "^3.1.3",
67
+ "@santi020k/eslint-config-solid": "^3.1.2",
68
+ "@santi020k/eslint-config-vite": "^3.1.2",
69
+ "@santi020k/eslint-config-vue": "^3.1.2",
70
+ "@santi020k/eslint-config-tools": "^3.1.3",
71
+ "@santi020k/eslint-config-react-router": "^3.1.2",
72
+ "@santi020k/eslint-config-react": "^3.1.2"
73
73
  },
74
74
  "peerDependencies": {
75
75
  "eslint": "^10.0.0",
76
76
  "typescript": ">=5.0.0 <7.0.0",
77
- "@santi020k/eslint-config-angular": "^3.1.1",
78
- "@santi020k/eslint-config-astro": "^3.1.3",
79
- "@santi020k/eslint-config-expo": "^3.1.1",
80
- "@santi020k/eslint-config-formats": "^3.1.2",
81
- "@santi020k/eslint-config-extensions": "^3.1.2",
82
- "@santi020k/eslint-config-hono": "^3.1.1",
83
- "@santi020k/eslint-config-lit": "^3.1.1",
84
- "@santi020k/eslint-config-libraries": "^3.1.2",
85
- "@santi020k/eslint-config-nest": "^3.1.1",
86
- "@santi020k/eslint-config-next": "^3.1.1",
87
- "@santi020k/eslint-config-nuxt": "^3.1.1",
88
- "@santi020k/eslint-config-preact": "^3.1.1",
89
- "@santi020k/eslint-config-qwik": "^3.1.1",
90
- "@santi020k/eslint-config-react": "^3.1.1",
91
- "@santi020k/eslint-config-react-router": "^3.1.1",
92
- "@santi020k/eslint-config-slidev": "^3.1.1",
93
- "@santi020k/eslint-config-solid": "^3.1.1",
94
- "@santi020k/eslint-config-tanstack-start": "^3.1.1",
95
- "@santi020k/eslint-config-svelte": "^3.1.1",
96
- "@santi020k/eslint-config-testing": "^3.1.2",
97
- "@santi020k/eslint-config-tools": "^3.1.2",
98
- "@santi020k/eslint-config-vite": "^3.1.1",
99
- "@santi020k/eslint-config-vue": "^3.1.1"
77
+ "@santi020k/eslint-config-angular": "^3.1.2",
78
+ "@santi020k/eslint-config-astro": "^3.1.4",
79
+ "@santi020k/eslint-config-expo": "^3.1.2",
80
+ "@santi020k/eslint-config-extensions": "^3.1.3",
81
+ "@santi020k/eslint-config-formats": "^3.1.3",
82
+ "@santi020k/eslint-config-hono": "^3.1.2",
83
+ "@santi020k/eslint-config-lit": "^3.1.2",
84
+ "@santi020k/eslint-config-libraries": "^3.1.3",
85
+ "@santi020k/eslint-config-nest": "^3.1.2",
86
+ "@santi020k/eslint-config-next": "^3.1.2",
87
+ "@santi020k/eslint-config-nuxt": "^3.1.2",
88
+ "@santi020k/eslint-config-preact": "^3.1.2",
89
+ "@santi020k/eslint-config-qwik": "^3.1.2",
90
+ "@santi020k/eslint-config-react": "^3.1.2",
91
+ "@santi020k/eslint-config-react-router": "^3.1.2",
92
+ "@santi020k/eslint-config-slidev": "^3.1.2",
93
+ "@santi020k/eslint-config-solid": "^3.1.2",
94
+ "@santi020k/eslint-config-svelte": "^3.1.2",
95
+ "@santi020k/eslint-config-tanstack-start": "^3.1.2",
96
+ "@santi020k/eslint-config-testing": "^3.1.3",
97
+ "@santi020k/eslint-config-tools": "^3.1.3",
98
+ "@santi020k/eslint-config-vite": "^3.1.2",
99
+ "@santi020k/eslint-config-vue": "^3.1.2"
100
100
  },
101
101
  "peerDependenciesMeta": {
102
102
  "@santi020k/eslint-config-angular": {