@simplysm/lint 13.0.71 → 13.0.74

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.
package/README.md CHANGED
@@ -1,25 +1,271 @@
1
1
  # @simplysm/lint
2
2
 
3
- Lint configuration for the Simplysm framework. Provides an ESLint plugin with custom rules and recommended flat configs for ESLint and Stylelint.
3
+ Simplysm package - Lint configuration (ESLint + Stylelint)
4
+
5
+ Provides a shared ESLint flat config, a custom ESLint plugin with Simplysm-specific rules, and a shared Stylelint config for use across Simplysm projects.
4
6
 
5
7
  ## Installation
6
8
 
9
+ ```bash
10
+ pnpm add -D @simplysm/lint
11
+ ```
12
+
13
+ ## Entry Points
14
+
15
+ This package exposes three separate entry points:
16
+
17
+ | Entry point | Description |
18
+ |---|---|
19
+ | `@simplysm/lint/eslint-plugin` | Custom ESLint plugin (Simplysm rules only) |
20
+ | `@simplysm/lint/eslint-recommended` | Full recommended ESLint flat config |
21
+ | `@simplysm/lint/stylelint-recommended` | Recommended Stylelint config |
22
+
23
+ ---
24
+
25
+ ## `@simplysm/lint/eslint-recommended`
26
+
27
+ A pre-built ESLint [flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) array that covers JS, TS, SolidJS (TSX), and Tailwind CSS files.
28
+
29
+ **Included plugins:**
30
+ - `typescript-eslint`
31
+ - `eslint-plugin-import`
32
+ - `eslint-plugin-unused-imports`
33
+ - `eslint-plugin-solid`
34
+ - `eslint-plugin-tailwindcss`
35
+ - `@simplysm` (custom plugin, see below)
36
+
37
+ ### Usage
38
+
39
+ ```typescript
40
+ // eslint.config.ts
41
+ import sdRecommended from "@simplysm/lint/eslint-recommended";
42
+
43
+ export default sdRecommended;
44
+ ```
45
+
46
+ ### Covered file globs
47
+
48
+ | Glob | Applied rule groups |
49
+ |---|---|
50
+ | `**/*.js`, `**/*.jsx` | Common rules, import, unused-imports, `@simplysm` rules |
51
+ | `**/*.ts`, `**/*.tsx` | All of the above + typescript-eslint rules |
52
+ | `**/*.ts`, `**/*.tsx` | SolidJS reactivity + Tailwind CSS rules |
53
+ | `**/tests/**/*.ts`, `**/tests/**/*.tsx` | Relaxed rules (no-console off, import/no-extraneous-dependencies off, solid/reactivity off) |
54
+
55
+ ### Global ignores
56
+
57
+ The following paths are ignored by default:
58
+
59
+ ```
60
+ **/node_modules/**
61
+ **/dist/**
62
+ **/.*/**
63
+ **/_*/**
64
+ ```
65
+
66
+ ### Key rules enabled
67
+
68
+ **Common (JS + TS)**
69
+
70
+ | Rule | Severity | Notes |
71
+ |---|---|---|
72
+ | `no-console` | error | Prohibit console usage |
73
+ | `no-warning-comments` | warn | Flag TODO/FIXME comments |
74
+ | `eqeqeq` | error | Enforce `===`; allow `== null` |
75
+ | `no-self-compare` | error | Catch `x === x` typos |
76
+ | `array-callback-return` | error | Require return in map/filter callbacks |
77
+ | `no-restricted-globals` | error | Prohibit `Buffer` (use `Uint8Array`) |
78
+ | `no-restricted-imports` | error | Prohibit `buffer`, `events`, `eventemitter3` |
79
+ | `unused-imports/no-unused-imports` | error | Auto-remove unused imports |
80
+ | `unused-imports/no-unused-vars` | error | Unused vars allowed with `_` prefix |
81
+ | `import/no-extraneous-dependencies` | error | Prohibit undeclared dependencies |
82
+ | `@simplysm/no-hard-private` | error | See custom rules below |
83
+ | `@simplysm/no-subpath-imports-from-simplysm` | error | See custom rules below |
84
+
85
+ **TypeScript-only additions**
86
+
87
+ | Rule | Severity | Notes |
88
+ |---|---|---|
89
+ | `@typescript-eslint/require-await` | error | |
90
+ | `@typescript-eslint/await-thenable` | error | |
91
+ | `@typescript-eslint/return-await` | error | `in-try-catch` mode |
92
+ | `@typescript-eslint/no-floating-promises` | error | |
93
+ | `@typescript-eslint/no-shadow` | error | |
94
+ | `@typescript-eslint/no-unnecessary-condition` | error | `allowConstantLoopConditions: true` |
95
+ | `@typescript-eslint/no-unnecessary-type-assertion` | error | |
96
+ | `@typescript-eslint/prefer-reduce-type-parameter` | error | |
97
+ | `@typescript-eslint/prefer-return-this-type` | error | |
98
+ | `@typescript-eslint/strict-boolean-expressions` | error | Allow nullable boolean/object |
99
+ | `@typescript-eslint/ban-ts-comment` | error | `ts-expect-error` allowed with description |
100
+ | `@typescript-eslint/prefer-readonly` | error | |
101
+ | `@typescript-eslint/no-misused-promises` | error | `checksVoidReturn.arguments/attributes: false` |
102
+ | `@typescript-eslint/only-throw-error` | error | |
103
+ | `@typescript-eslint/no-array-delete` | error | |
104
+ | `@simplysm/ts-no-throw-not-implemented-error` | warn | See custom rules below |
105
+
106
+ **SolidJS + Tailwind CSS (TS/TSX)**
107
+
108
+ | Rule | Severity | Notes |
109
+ |---|---|---|
110
+ | `solid/reactivity` | error | Reactivity loss detection |
111
+ | `solid/no-destructure` | error | Props destructuring guard |
112
+ | `solid/components-return-once` | error | Early return guard |
113
+ | `solid/jsx-no-duplicate-props` | error | |
114
+ | `solid/jsx-no-undef` | error | TypeScript-enabled |
115
+ | `solid/no-react-deps` | error | |
116
+ | `solid/no-react-specific-props` | error | |
117
+ | `solid/no-innerhtml` | error | XSS prevention |
118
+ | `solid/jsx-no-script-url` | error | |
119
+ | `solid/jsx-uses-vars` | error | |
120
+ | `solid/prefer-for` | error | Recommend `<For>` component |
121
+ | `solid/event-handlers` | error | |
122
+ | `solid/imports` | error | |
123
+ | `solid/style-prop` | error | |
124
+ | `solid/self-closing-comp` | error | |
125
+ | `tailwindcss/classnames-order` | warn | Auto-sort class order; supports `clsx` tag |
126
+ | `tailwindcss/enforces-negative-arbitrary-values` | error | |
127
+ | `tailwindcss/enforces-shorthand` | error | |
128
+ | `tailwindcss/no-contradicting-classname` | error | |
129
+ | `tailwindcss/no-custom-classname` | error | |
130
+ | `tailwindcss/no-unnecessary-arbitrary-value` | error | |
131
+
132
+ ---
133
+
134
+ ## `@simplysm/lint/eslint-plugin`
135
+
136
+ A custom ESLint plugin that exposes three Simplysm-specific rules under the `@simplysm` namespace.
137
+
138
+ ### Usage
139
+
140
+ ```typescript
141
+ // eslint.config.ts
142
+ import plugin from "@simplysm/lint/eslint-plugin";
143
+ import type { ESLint } from "eslint";
144
+
145
+ export default [
146
+ {
147
+ plugins: {
148
+ "@simplysm": plugin as unknown as ESLint.Plugin,
149
+ },
150
+ rules: {
151
+ "@simplysm/no-hard-private": "error",
152
+ "@simplysm/no-subpath-imports-from-simplysm": "error",
153
+ "@simplysm/ts-no-throw-not-implemented-error": "warn",
154
+ },
155
+ },
156
+ ];
157
+ ```
158
+
159
+ ### Custom Rules
160
+
161
+ #### `@simplysm/no-hard-private`
162
+
163
+ **Type:** `problem` | **Fixable:** yes
164
+
165
+ Prohibits ECMAScript hard-private fields (`#field`) and enforces the TypeScript `private _field` style instead.
166
+
167
+ Checks:
168
+ - Class field declarations: `#field`
169
+ - Class method declarations: `#method()`
170
+ - Class accessor declarations: `accessor #field`
171
+ - Member access expressions: `this.#field`
172
+
173
+ Auto-fix renames `#name` to `_name` and inserts the `private` access modifier when missing. The fix is skipped if a member named `_name` already exists in the same class.
174
+
175
+ ```typescript
176
+ // Error
177
+ class Foo {
178
+ #count = 0;
179
+ #increment() { this.#count++; }
180
+ }
181
+
182
+ // OK (after auto-fix)
183
+ class Foo {
184
+ private _count = 0;
185
+ private _increment() { this._count++; }
186
+ }
7
187
  ```
8
- pnpm add @simplysm/lint
188
+
189
+ ---
190
+
191
+ #### `@simplysm/no-subpath-imports-from-simplysm`
192
+
193
+ **Type:** `problem` | **Fixable:** yes
194
+
195
+ Prohibits imports into the `src/` subpath of `@simplysm/*` packages. Only the package root (or other declared export subpaths) may be imported.
196
+
197
+ Checks:
198
+ - Static import declarations: `import ... from '...'`
199
+ - Dynamic imports: `import('...')`
200
+ - Named re-exports: `export { ... } from '...'`
201
+ - Namespace re-exports: `export * from '...'`
202
+
203
+ Auto-fix rewrites the import to the package root (`@simplysm/pkg`).
204
+
205
+ ```typescript
206
+ // Error
207
+ import { foo } from "@simplysm/core-common/src/foo";
208
+
209
+ // OK (after auto-fix)
210
+ import { foo } from "@simplysm/core-common";
9
211
  ```
10
212
 
11
- ## Source Index
213
+ ---
214
+
215
+ #### `@simplysm/ts-no-throw-not-implemented-error`
216
+
217
+ **Type:** `suggestion` | **Fixable:** no | **Severity in recommended config:** warn
218
+
219
+ Warns when `NotImplementedError` from `@simplysm/core-common` is instantiated with `new`. This prevents unfinished placeholder code from reaching production.
220
+
221
+ Detects all import forms:
222
+ - Named import: `import { NotImplementedError } from "@simplysm/core-common"`
223
+ - Aliased import: `import { NotImplementedError as NIE } from "@simplysm/core-common"`
224
+ - Namespace import: `import * as CC from "@simplysm/core-common"` used as `new CC.NotImplementedError()`
225
+
226
+ Dynamic imports (`await import(...)`) are not detected.
227
+
228
+ The warning message is the string passed as the first argument to the constructor, or `"Not implemented"` if no argument is provided.
229
+
230
+ ```typescript
231
+ import { NotImplementedError } from "@simplysm/core-common";
232
+
233
+ // Warning: "Not implemented"
234
+ throw new NotImplementedError();
235
+
236
+ // Warning: "TODO: finish this"
237
+ throw new NotImplementedError("TODO: finish this");
238
+ ```
239
+
240
+ ---
241
+
242
+ ## `@simplysm/lint/stylelint-recommended`
243
+
244
+ A Stylelint config object extending `stylelint-config-standard` and `stylelint-config-tailwindcss` with additional browser compatibility and module resolution rules.
245
+
246
+ ### Usage
247
+
248
+ ```javascript
249
+ // stylelint.config.js
250
+ import sdStylelint from "@simplysm/lint/stylelint-recommended";
251
+
252
+ export default sdStylelint;
253
+ ```
254
+
255
+ ### Extended configs
256
+
257
+ - `stylelint-config-standard`
258
+ - `stylelint-config-tailwindcss`
259
+
260
+ ### Plugins
12
261
 
13
- | Source | Exports | Description | Test |
14
- |--------|---------|-------------|------|
15
- | `src/eslint-plugin.ts` | default: `{ rules: { "no-hard-private", "no-subpath-imports-from-simplysm", "ts-no-throw-not-implemented-error" } }` | ESLint plugin that bundles all custom Simplysm rules under `@simplysm/*` | `tests/no-hard-private.spec.ts`, `tests/no-subpath-imports-from-simplysm.spec.ts`, `tests/ts-no-throw-not-implemented-error.spec.ts` |
16
- | `src/eslint-recommended.ts` | default: ESLint flat config array (TS, SolidJS, Tailwind CSS rules) | Recommended ESLint flat config for TS, SolidJS, and Tailwind CSS projects | `tests/recommended.spec.ts` |
17
- | `src/stylelint-recommended.ts` | default: Stylelint config (Chrome 84+, Tailwind CSS, file resolution) | Recommended Stylelint config targeting Chrome 84+ with Tailwind CSS support | - |
18
- | `src/rules/no-hard-private.ts` | ESLint rule: prohibit ECMAScript `#field` private syntax | Enforces TypeScript `private _` style instead of hard private `#field` syntax | - |
19
- | `src/rules/no-subpath-imports-from-simplysm.ts` | ESLint rule: prohibit `@simplysm/*/src/` import paths | Prevents direct `src/` subpath imports from `@simplysm/*` packages | - |
20
- | `src/rules/ts-no-throw-not-implemented-error.ts` | ESLint rule: warn on `new NotImplementedError()` usage | Warns when `NotImplementedError` from `@simplysm/core-common` is instantiated | - |
21
- | `src/utils/create-rule.ts` | `createRule` utility for defining typed ESLint rules | Factory wrapper around `RuleCreator` for authoring typed ESLint rules | - |
262
+ - `stylelint-no-unsupported-browser-features`
263
+ - `stylelint-no-unresolved-module`
22
264
 
23
- ## License
265
+ ### Rules
24
266
 
25
- Apache-2.0
267
+ | Rule | Setting | Notes |
268
+ |---|---|---|
269
+ | `plugin/no-unsupported-browser-features` | error | Chrome >= 84; ignores `css-cascade-layers`, `css-nesting`, `css-overflow` |
270
+ | `declaration-block-no-redundant-longhand-properties` | true | Ignores `inset` shorthand (requires Chrome 87+) |
271
+ | `plugin/no-unresolved-module` | true | Checks file existence in `@import` and `url()` |
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-recommended.d.ts","sourceRoot":"","sources":["../src/eslint-recommended.ts"],"names":[],"mappings":";AAqFA,wBAgNG"}
1
+ {"version":3,"file":"eslint-recommended.d.ts","sourceRoot":"","sources":["../src/eslint-recommended.ts"],"names":[],"mappings":";AAoFA,wBA4NG"}
@@ -184,6 +184,8 @@ var eslint_recommended_default = defineConfig([
184
184
  "**/stylelint.config.ts",
185
185
  "**/simplysm.ts",
186
186
  "**/vitest.config.ts",
187
+ "**/vitest-e2e.config.ts",
188
+ "**/vitest.setup.ts",
187
189
  "**/vitest.setup.ts"
188
190
  ]
189
191
  }
@@ -192,7 +194,12 @@ var eslint_recommended_default = defineConfig([
192
194
  },
193
195
  // Test folders: allow root devDependencies (vitest, etc.)
194
196
  {
195
- files: ["**/tests/**/*.ts", "**/tests/**/*.tsx"],
197
+ files: [
198
+ "**/tests/**/*.ts",
199
+ "**/tests/**/*.tsx",
200
+ "**/tests-e2e/**/*.ts",
201
+ "**/tests-e2e/**/*.tsx"
202
+ ],
196
203
  rules: {
197
204
  "no-console": "off",
198
205
  "import/no-extraneous-dependencies": "off",
@@ -264,7 +271,12 @@ var eslint_recommended_default = defineConfig([
264
271
  },
265
272
  // Test folders: disable solid/reactivity
266
273
  {
267
- files: ["**/tests/**/*.ts", "**/tests/**/*.tsx"],
274
+ files: [
275
+ "**/tests/**/*.ts",
276
+ "**/tests/**/*.tsx",
277
+ "**/tests-e2e/**/*.ts",
278
+ "**/tests-e2e/**/*.tsx"
279
+ ],
268
280
  rules: {
269
281
  // In tests, signal access within async callbacks like waitFor is intended behavior
270
282
  "solid/reactivity": "off"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/eslint-recommended.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/lint",
3
- "version": "13.0.71",
3
+ "version": "13.0.74",
4
4
  "description": "Simplysm package - Lint configuration (ESLint + Stylelint)",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -38,7 +38,7 @@
38
38
  "eslint-plugin-solid": "^0.14.5",
39
39
  "eslint-plugin-tailwindcss": "^3.18.2",
40
40
  "eslint-plugin-unused-imports": "^4.4.1",
41
- "globals": "^17.3.0",
41
+ "globals": "^17.4.0",
42
42
  "stylelint": "^16.26.1",
43
43
  "stylelint-config-standard": "^39.0.1",
44
44
  "stylelint-config-tailwindcss": "^1.0.1",
@@ -37,8 +37,7 @@ const noNodeBuiltinsRules: FlatConfig.Rules = {
37
37
  "error",
38
38
  {
39
39
  name: "Buffer",
40
- message:
41
- "Use Uint8Array. For complex operations, use BytesUtils from @simplysm/core-common.",
40
+ message: "Use Uint8Array. For complex operations, use BytesUtils from @simplysm/core-common.",
42
41
  },
43
42
  ],
44
43
  "no-restricted-imports": [
@@ -222,6 +221,8 @@ export default defineConfig([
222
221
  "**/stylelint.config.ts",
223
222
  "**/simplysm.ts",
224
223
  "**/vitest.config.ts",
224
+ "**/vitest-e2e.config.ts",
225
+ "**/vitest.setup.ts",
225
226
  "**/vitest.setup.ts",
226
227
  ],
227
228
  },
@@ -230,7 +231,12 @@ export default defineConfig([
230
231
  },
231
232
  // Test folders: allow root devDependencies (vitest, etc.)
232
233
  {
233
- files: ["**/tests/**/*.ts", "**/tests/**/*.tsx"],
234
+ files: [
235
+ "**/tests/**/*.ts",
236
+ "**/tests/**/*.tsx",
237
+ "**/tests-e2e/**/*.ts",
238
+ "**/tests-e2e/**/*.tsx",
239
+ ],
234
240
  rules: {
235
241
  "no-console": "off",
236
242
  "import/no-extraneous-dependencies": "off",
@@ -285,7 +291,12 @@ export default defineConfig([
285
291
  },
286
292
  // Test folders: disable solid/reactivity
287
293
  {
288
- files: ["**/tests/**/*.ts", "**/tests/**/*.tsx"],
294
+ files: [
295
+ "**/tests/**/*.ts",
296
+ "**/tests/**/*.tsx",
297
+ "**/tests-e2e/**/*.ts",
298
+ "**/tests-e2e/**/*.tsx",
299
+ ],
289
300
  rules: {
290
301
  // In tests, signal access within async callbacks like waitFor is intended behavior
291
302
  "solid/reactivity": "off",