@stride.it/appoint-lint-governance 0.1.5 → 0.1.7
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 +25 -6
- package/dist/index.d.ts +10 -1
- package/dist/index.js +40 -24
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Shareable ESLint **flat-config** profiles for normalizing lint rules across repositories.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## TypeScript profiles
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Profiles are flat-config builders intended to be composed:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- `
|
|
12
|
-
- `
|
|
9
|
+
- `typescriptBase()` — parser + baseline correctness/hygiene
|
|
10
|
+
- `typescriptMinimal()` — MVP (currently the same as Base)
|
|
11
|
+
- `typescriptQuality()` — unicorn + sonarjs maintainability rules
|
|
12
|
+
- `typescriptImports()` — import correctness + deterministic sorting
|
|
13
|
+
- `typescriptSecurity()` — rushstack security + regexp safety
|
|
14
|
+
- `typescriptDocs()` — eslint-comments hygiene + jsdoc basics
|
|
15
|
+
- `typescriptTypeAware()` — type-checked rules (opt-in via project/tsconfig)
|
|
16
|
+
- `typescriptPrettierInterop()` — disable formatting conflicts when using Prettier
|
|
17
|
+
- `typescriptRecommended()` — composes Base + Quality + Imports + Security + Docs; optionally type-aware via `typeChecked: true`
|
|
13
18
|
|
|
14
19
|
## Install
|
|
15
20
|
|
|
@@ -47,6 +52,20 @@ export default [
|
|
|
47
52
|
];
|
|
48
53
|
```
|
|
49
54
|
|
|
55
|
+
### Prettier Interop (Optional)
|
|
56
|
+
|
|
57
|
+
If your project uses [Prettier](https://prettier.io/) for formatting, you must disable conflicting formatting rules. Include this **last** to ensure it overrides any other formatting rules:
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
import { typescriptRecommended, typescriptPrettierInterop } from "@stride.it/appoint-lint-governance";
|
|
61
|
+
|
|
62
|
+
export default [
|
|
63
|
+
...typescriptRecommended(),
|
|
64
|
+
// ... other configs
|
|
65
|
+
...typescriptPrettierInterop(), // Must be last
|
|
66
|
+
];
|
|
67
|
+
```
|
|
68
|
+
|
|
50
69
|
## Local testing (before publishing to npm)
|
|
51
70
|
|
|
52
71
|
From this repo:
|
package/dist/index.d.ts
CHANGED
|
@@ -46,4 +46,13 @@ interface TypescriptRecommendedOptions {
|
|
|
46
46
|
}
|
|
47
47
|
declare function typescriptRecommended(options?: TypescriptRecommendedOptions): typescript_eslint.FlatConfig.ConfigArray;
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
interface TypescriptSecurityOptions {
|
|
50
|
+
files?: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface TypescriptPrettierOptions {
|
|
54
|
+
files?: string[];
|
|
55
|
+
}
|
|
56
|
+
declare function typescriptPrettierInterop(options?: TypescriptPrettierOptions): typescript_eslint.FlatConfig.ConfigArray;
|
|
57
|
+
|
|
58
|
+
export { type TypescriptBaseOptions, type TypescriptMinimalOptions, type TypescriptPrettierOptions, type TypescriptRecommendedOptions, type TypescriptSecurityOptions, plugin, typescriptBase, typescriptMinimal, typescriptPrettierInterop, typescriptRecommended };
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ function typescriptBase(options = {}) {
|
|
|
24
24
|
"@typescript-eslint/no-unused-vars": "error",
|
|
25
25
|
"@typescript-eslint/no-shadow": "error",
|
|
26
26
|
"@typescript-eslint/ban-ts-comment": "error",
|
|
27
|
+
"@typescript-eslint/require-await": "error",
|
|
27
28
|
"@typescript-eslint/no-explicit-any": "warn",
|
|
28
29
|
"@typescript-eslint/no-inferrable-types": "error",
|
|
29
30
|
"no-undef": "off",
|
|
@@ -99,7 +100,7 @@ function typescriptMinimal(options = {}) {
|
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
// src/configs/typescript/recommended.ts
|
|
102
|
-
import
|
|
103
|
+
import tseslint7 from "typescript-eslint";
|
|
103
104
|
|
|
104
105
|
// src/configs/typescript/quality.ts
|
|
105
106
|
import sonarjs from "eslint-plugin-sonarjs";
|
|
@@ -150,33 +151,34 @@ function typescriptQuality(options = {}) {
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
// src/configs/typescript/security.ts
|
|
153
|
-
import securityPlugin from "eslint-plugin-security";
|
|
154
154
|
import regexpPlugin from "eslint-plugin-regexp";
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
155
|
+
import rushstackSecurity from "@rushstack/eslint-plugin-security";
|
|
156
|
+
import tseslint5 from "typescript-eslint";
|
|
157
|
+
function typescriptSecurity(options = {}) {
|
|
158
|
+
const files = options.files ?? ["**/*.{ts,tsx,mts,cts}"];
|
|
159
|
+
return tseslint5.config({
|
|
160
|
+
files,
|
|
161
|
+
plugins: {
|
|
162
|
+
security: rushstackSecurity,
|
|
163
|
+
regexp: regexpPlugin
|
|
164
|
+
},
|
|
165
|
+
rules: {
|
|
166
|
+
// @rushstack/eslint-plugin-security
|
|
167
|
+
"security/detect-object-injection": "error",
|
|
168
|
+
"security/detect-unsafe-regex": "error",
|
|
169
|
+
// eslint-plugin-regexp
|
|
170
|
+
"regexp/no-super-linear-backtracking": "error",
|
|
171
|
+
"regexp/no-useless-escape": "error",
|
|
172
|
+
"regexp/no-empty-capturing-group": "error"
|
|
171
173
|
}
|
|
172
|
-
|
|
174
|
+
});
|
|
173
175
|
}
|
|
174
176
|
|
|
175
177
|
// src/configs/typescript/type-aware.ts
|
|
176
|
-
import
|
|
178
|
+
import tseslint6 from "typescript-eslint";
|
|
177
179
|
function typescriptTypeAware(options = {}) {
|
|
178
180
|
const files = options.files ?? ["**/*.{ts,tsx,mts,cts}"];
|
|
179
|
-
return
|
|
181
|
+
return tseslint6.config({
|
|
180
182
|
files,
|
|
181
183
|
languageOptions: {
|
|
182
184
|
parserOptions: {
|
|
@@ -188,7 +190,7 @@ function typescriptTypeAware(options = {}) {
|
|
|
188
190
|
"@typescript-eslint/no-floating-promises": "error",
|
|
189
191
|
"@typescript-eslint/no-misused-promises": "error",
|
|
190
192
|
"@typescript-eslint/await-thenable": "error",
|
|
191
|
-
"@typescript-eslint/no-unnecessary-condition": "
|
|
193
|
+
"@typescript-eslint/no-unnecessary-condition": "warn",
|
|
192
194
|
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
|
193
195
|
"@typescript-eslint/restrict-template-expressions": "error"
|
|
194
196
|
}
|
|
@@ -198,13 +200,13 @@ function typescriptTypeAware(options = {}) {
|
|
|
198
200
|
// src/configs/typescript/recommended.ts
|
|
199
201
|
function typescriptRecommended(options = {}) {
|
|
200
202
|
const files = options.files ?? ["**/*.{ts,tsx,mts,cts}"];
|
|
201
|
-
const upstreamConfigs = options.typeChecked ?
|
|
203
|
+
const upstreamConfigs = options.typeChecked ? tseslint7.configs.recommendedTypeChecked : tseslint7.configs.recommended;
|
|
202
204
|
const typeAwareConfig = options.typeChecked ? typescriptTypeAware({
|
|
203
205
|
files,
|
|
204
206
|
tsconfigPath: options.tsconfigPath,
|
|
205
207
|
tsconfigRootDir: options.tsconfigRootDir
|
|
206
208
|
}) : [];
|
|
207
|
-
return
|
|
209
|
+
return tseslint7.config(
|
|
208
210
|
...typescriptBase({ files }),
|
|
209
211
|
...typescriptQuality({ files }),
|
|
210
212
|
...typescriptImports({ files }),
|
|
@@ -217,10 +219,24 @@ function typescriptRecommended(options = {}) {
|
|
|
217
219
|
}
|
|
218
220
|
);
|
|
219
221
|
}
|
|
222
|
+
|
|
223
|
+
// src/configs/typescript/prettier.ts
|
|
224
|
+
import tseslint8 from "typescript-eslint";
|
|
225
|
+
import eslintConfigPrettier from "eslint-config-prettier";
|
|
226
|
+
function typescriptPrettierInterop(options = {}) {
|
|
227
|
+
const files = options.files ?? ["**/*.{ts,tsx,mts,cts}"];
|
|
228
|
+
return tseslint8.config({
|
|
229
|
+
files,
|
|
230
|
+
rules: {
|
|
231
|
+
...eslintConfigPrettier.rules
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
220
235
|
export {
|
|
221
236
|
plugin,
|
|
222
237
|
typescriptBase,
|
|
223
238
|
typescriptMinimal,
|
|
239
|
+
typescriptPrettierInterop,
|
|
224
240
|
typescriptRecommended
|
|
225
241
|
};
|
|
226
242
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/index.ts","../src/configs/typescript/base.ts","../src/configs/typescript/docs.ts","../src/configs/typescript/imports.ts","../src/configs/typescript/minimal.ts","../src/configs/typescript/recommended.ts","../src/configs/typescript/quality.ts","../src/configs/typescript/security.ts","../src/configs/typescript/type-aware.ts"],"sourcesContent":["import type { ESLint } from \"eslint\";\r\n\r\n/**\r\n * Placeholder for future custom rules.\r\n *\r\n * Exporting a plugin object now keeps the package structure stable as you add\r\n * domain-specific rules later.\r\n */\r\nexport const plugin: ESLint.Plugin = {\r\n rules: {},\r\n};\r\n","import tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptBaseOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptBase(options: TypescriptBaseOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n \"@typescript-eslint\": tseslint.plugin,\r\n },\r\n languageOptions: {\r\n parser: tseslint.parser,\r\n parserOptions: {\r\n ecmaVersion: \"latest\",\r\n sourceType: \"module\",\r\n },\r\n },\r\n rules: {\r\n \"@typescript-eslint/consistent-type-imports\": \"error\",\r\n \"@typescript-eslint/no-unused-vars\": \"error\",\r\n \"@typescript-eslint/no-shadow\": \"error\",\r\n \"@typescript-eslint/ban-ts-comment\": \"error\",\r\n \"@typescript-eslint/no-explicit-any\": \"warn\",\r\n \"@typescript-eslint/no-inferrable-types\": \"error\",\r\n \"no-undef\": \"off\",\r\n \"no-unused-vars\": \"off\",\r\n },\r\n });\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport jsdoc from \"eslint-plugin-jsdoc\";\r\nimport comments from \"@eslint-community/eslint-plugin-eslint-comments\";\r\n\r\nexport interface TypescriptDocsOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptDocs(options: TypescriptDocsOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n jsdoc: jsdoc,\r\n \"eslint-comments\": comments,\r\n },\r\n rules: {\r\n \"eslint-comments/no-unused-disable\": \"error\",\r\n \"eslint-comments/require-description\": \"error\",\r\n \"eslint-comments/disable-enable-pair\": \"error\",\r\n \"jsdoc/check-alignment\": \"error\",\r\n \"jsdoc/require-param\": \"error\",\r\n \"jsdoc/require-returns\": \"error\",\r\n },\r\n });\r\n}\r\n","import importPlugin from \"eslint-plugin-import\";\r\nimport simpleImportSort from \"eslint-plugin-simple-import-sort\";\r\nimport tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptImportsOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptImports(options: TypescriptImportsOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n import: importPlugin,\r\n \"simple-import-sort\": simpleImportSort,\r\n },\r\n settings: {\r\n \"import/parsers\": {\r\n \"@typescript-eslint/parser\": [\".ts\", \".tsx\", \".mts\", \".cts\"],\r\n },\r\n \"import/resolver\": {\r\n typescript: {\r\n alwaysTryTypes: true,\r\n project: [\"tsconfig.json\", \"*/tsconfig.json\"],\r\n },\r\n node: true,\r\n },\r\n },\r\n rules: {\r\n // Import Correctness\r\n \"import/no-duplicates\": \"error\",\r\n \"import/no-cycle\": \"error\",\r\n \"import/no-mutable-exports\": \"error\",\r\n \"import/first\": \"error\",\r\n \"import/newline-after-import\": \"error\",\r\n\r\n // Sorting\r\n \"simple-import-sort/imports\": \"error\",\r\n \"simple-import-sort/exports\": \"error\",\r\n },\r\n });\r\n}\r\n","import { typescriptBase } from \"./base.js\";\r\n\r\nexport type TypescriptConfigFiles = string[];\r\n\r\nexport interface TypescriptMinimalOptions {\r\n files?: TypescriptConfigFiles;\r\n}\r\n\r\n/**\r\n * MVP TypeScript profile.\r\n *\r\n * Intentionally minimal: enables TypeScript parsing and one rule to prove\r\n * end-to-end packaging + consumption.\r\n */\r\nexport function typescriptMinimal(options: TypescriptMinimalOptions = {}) {\r\n return typescriptBase(options);\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport { typescriptBase } from \"./base.js\";\r\nimport { typescriptImports } from \"./imports.js\";\r\nimport { typescriptQuality } from \"./quality.js\";\r\nimport { typescriptSecurity } from \"./security.js\";\r\nimport { typescriptDocs } from \"./docs.js\";\r\nimport { typescriptTypeAware } from \"./type-aware.js\";\r\n\r\nexport interface TypescriptRecommendedOptions {\r\n /**\r\n * When set, enables type-aware rules (more powerful, can be slower).\r\n *\r\n * Recommended for mature codebases, but not required for MVP.\r\n */\r\n typeChecked?: boolean;\r\n\r\n /**\r\n * Type-aware linting requires a project TSConfig.\r\n * Example: \"./tsconfig.json\".\r\n */\r\n tsconfigPath?: string | string[];\r\n\r\n /**\r\n * tsconfigRootDir should usually be import.meta.dirname from the consumer repo.\r\n */\r\n tsconfigRootDir?: string;\r\n\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptRecommended(\r\n options: TypescriptRecommendedOptions = {}\r\n) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n const upstreamConfigs = options.typeChecked\r\n ? tseslint.configs.recommendedTypeChecked\r\n : tseslint.configs.recommended;\r\n\r\n const typeAwareConfig = options.typeChecked\r\n ? typescriptTypeAware({\r\n files,\r\n tsconfigPath: options.tsconfigPath,\r\n tsconfigRootDir: options.tsconfigRootDir,\r\n })\r\n : [];\r\n\r\n return tseslint.config(\r\n ...typescriptBase({ files }),\r\n ...typescriptQuality({ files }),\r\n ...typescriptImports({ files }),\r\n ...typescriptSecurity(),\r\n ...typescriptDocs({ files }),\r\n ...typeAwareConfig,\r\n {\r\n files,\r\n extends: [...upstreamConfigs],\r\n }\r\n );\r\n}\r\n","import sonarjs from \"eslint-plugin-sonarjs\";\r\nimport unicorn from \"eslint-plugin-unicorn\";\r\nimport tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptQualityOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptQuality(options: TypescriptQualityOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n unicorn,\r\n sonarjs,\r\n },\r\n rules: {\r\n // Unicorn\r\n \"unicorn/prefer-node-protocol\": \"error\",\r\n \"unicorn/no-useless-undefined\": \"error\",\r\n \"unicorn/no-lonely-if\": \"error\",\r\n \"unicorn/prefer-optional-catch-binding\": \"error\",\r\n \"unicorn/prefer-string-replace-all\": \"error\",\r\n \"unicorn/prevent-abbreviations\": [\r\n \"warn\",\r\n {\r\n allowList: {\r\n Props: true,\r\n props: true,\r\n Ref: true,\r\n ref: true,\r\n Src: true,\r\n src: true,\r\n Params: true,\r\n params: true,\r\n Env: true,\r\n env: true,\r\n Args: true,\r\n args: true,\r\n },\r\n },\r\n ],\r\n\r\n // SonarJS\r\n \"sonarjs/cognitive-complexity\": [\"warn\", 15],\r\n \"sonarjs/no-identical-functions\": \"error\",\r\n \"sonarjs/no-duplicated-branches\": \"error\",\r\n \"sonarjs/no-redundant-boolean\": \"error\",\r\n \"sonarjs/no-inverted-boolean-check\": \"error\",\r\n },\r\n });\r\n}\r\n","import securityPlugin from \"eslint-plugin-security\";\r\nimport regexpPlugin from \"eslint-plugin-regexp\";\r\nimport { Linter, ESLint } from \"eslint\";\r\n\r\nexport function typescriptSecurity(): Linter.Config[] {\r\n return [\r\n {\r\n plugins: {\r\n security: securityPlugin as unknown as ESLint.Plugin,\r\n regexp: regexpPlugin as unknown as ESLint.Plugin,\r\n },\r\n rules: {\r\n // eslint-plugin-security\r\n \"security/detect-object-injection\": \"error\",\r\n \"security/detect-unsafe-regex\": \"error\",\r\n\r\n // eslint-plugin-regexp\r\n \"regexp/no-super-linear-backtracking\": \"error\",\r\n \"regexp/no-useless-escape\": \"error\",\r\n \"regexp/no-empty-capturing-group\": \"error\",\r\n },\r\n },\r\n ];\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptTypeAwareOptions {\r\n /**\r\n * Type-aware linting requires a project TSConfig.\r\n * Example: \"./tsconfig.json\".\r\n */\r\n tsconfigPath?: string | string[];\r\n\r\n /**\r\n * tsconfigRootDir should usually be import.meta.dirname from the consumer repo.\r\n */\r\n tsconfigRootDir?: string;\r\n\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptTypeAware(options: TypescriptTypeAwareOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n languageOptions: {\r\n parserOptions: {\r\n project: options.tsconfigPath ?? \"./tsconfig.json\",\r\n tsconfigRootDir: options.tsconfigRootDir,\r\n },\r\n },\r\n rules: {\r\n \"@typescript-eslint/no-floating-promises\": \"error\",\r\n \"@typescript-eslint/no-misused-promises\": \"error\",\r\n \"@typescript-eslint/await-thenable\": \"error\",\r\n \"@typescript-eslint/no-unnecessary-condition\": \"error\",\r\n \"@typescript-eslint/no-unnecessary-type-assertion\": \"error\",\r\n \"@typescript-eslint/restrict-template-expressions\": \"error\",\r\n },\r\n });\r\n}\r\n"],"mappings":"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","names":["tseslint","tseslint","tseslint","tseslint","tseslint","tseslint"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin/index.ts","../src/configs/typescript/base.ts","../src/configs/typescript/docs.ts","../src/configs/typescript/imports.ts","../src/configs/typescript/minimal.ts","../src/configs/typescript/recommended.ts","../src/configs/typescript/quality.ts","../src/configs/typescript/security.ts","../src/configs/typescript/type-aware.ts","../src/configs/typescript/prettier.ts"],"sourcesContent":["import type { ESLint } from \"eslint\";\r\n\r\n/**\r\n * Placeholder for future custom rules.\r\n *\r\n * Exporting a plugin object now keeps the package structure stable as you add\r\n * domain-specific rules later.\r\n */\r\nexport const plugin: ESLint.Plugin = {\r\n rules: {},\r\n};\r\n","import tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptBaseOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptBase(options: TypescriptBaseOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n \"@typescript-eslint\": tseslint.plugin,\r\n },\r\n languageOptions: {\r\n parser: tseslint.parser,\r\n parserOptions: {\r\n ecmaVersion: \"latest\",\r\n sourceType: \"module\",\r\n },\r\n },\r\n rules: {\r\n \"@typescript-eslint/consistent-type-imports\": \"error\",\r\n \"@typescript-eslint/no-unused-vars\": \"error\",\r\n \"@typescript-eslint/no-shadow\": \"error\",\r\n \"@typescript-eslint/ban-ts-comment\": \"error\",\r\n \"@typescript-eslint/require-await\": \"error\",\r\n \"@typescript-eslint/no-explicit-any\": \"warn\",\r\n \"@typescript-eslint/no-inferrable-types\": \"error\",\r\n \"no-undef\": \"off\",\r\n \"no-unused-vars\": \"off\",\r\n },\r\n });\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport jsdoc from \"eslint-plugin-jsdoc\";\r\nimport comments from \"@eslint-community/eslint-plugin-eslint-comments\";\r\n\r\nexport interface TypescriptDocsOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptDocs(options: TypescriptDocsOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n jsdoc: jsdoc,\r\n \"eslint-comments\": comments,\r\n },\r\n rules: {\r\n \"eslint-comments/no-unused-disable\": \"error\",\r\n \"eslint-comments/require-description\": \"error\",\r\n \"eslint-comments/disable-enable-pair\": \"error\",\r\n \"jsdoc/check-alignment\": \"error\",\r\n \"jsdoc/require-param\": \"error\",\r\n \"jsdoc/require-returns\": \"error\",\r\n },\r\n });\r\n}\r\n","import importPlugin from \"eslint-plugin-import\";\r\nimport simpleImportSort from \"eslint-plugin-simple-import-sort\";\r\nimport tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptImportsOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptImports(options: TypescriptImportsOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n import: importPlugin,\r\n \"simple-import-sort\": simpleImportSort,\r\n },\r\n settings: {\r\n \"import/parsers\": {\r\n \"@typescript-eslint/parser\": [\".ts\", \".tsx\", \".mts\", \".cts\"],\r\n },\r\n \"import/resolver\": {\r\n typescript: {\r\n alwaysTryTypes: true,\r\n project: [\"tsconfig.json\", \"*/tsconfig.json\"],\r\n },\r\n node: true,\r\n },\r\n },\r\n rules: {\r\n // Import Correctness\r\n \"import/no-duplicates\": \"error\",\r\n \"import/no-cycle\": \"error\",\r\n \"import/no-mutable-exports\": \"error\",\r\n \"import/first\": \"error\",\r\n \"import/newline-after-import\": \"error\",\r\n\r\n // Sorting\r\n \"simple-import-sort/imports\": \"error\",\r\n \"simple-import-sort/exports\": \"error\",\r\n },\r\n });\r\n}\r\n","import { typescriptBase } from \"./base.js\";\r\n\r\nexport type TypescriptConfigFiles = string[];\r\n\r\nexport interface TypescriptMinimalOptions {\r\n files?: TypescriptConfigFiles;\r\n}\r\n\r\n/**\r\n * MVP TypeScript profile.\r\n *\r\n * Intentionally minimal: enables TypeScript parsing and one rule to prove\r\n * end-to-end packaging + consumption.\r\n */\r\nexport function typescriptMinimal(options: TypescriptMinimalOptions = {}) {\r\n return typescriptBase(options);\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport { typescriptBase } from \"./base.js\";\r\nimport { typescriptImports } from \"./imports.js\";\r\nimport { typescriptQuality } from \"./quality.js\";\r\nimport { typescriptSecurity } from \"./security.js\";\r\nimport { typescriptDocs } from \"./docs.js\";\r\nimport { typescriptTypeAware } from \"./type-aware.js\";\r\n\r\nexport interface TypescriptRecommendedOptions {\r\n /**\r\n * When set, enables type-aware rules (more powerful, can be slower).\r\n *\r\n * Recommended for mature codebases, but not required for MVP.\r\n */\r\n typeChecked?: boolean;\r\n\r\n /**\r\n * Type-aware linting requires a project TSConfig.\r\n * Example: \"./tsconfig.json\".\r\n */\r\n tsconfigPath?: string | string[];\r\n\r\n /**\r\n * tsconfigRootDir should usually be import.meta.dirname from the consumer repo.\r\n */\r\n tsconfigRootDir?: string;\r\n\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptRecommended(\r\n options: TypescriptRecommendedOptions = {}\r\n) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n const upstreamConfigs = options.typeChecked\r\n ? tseslint.configs.recommendedTypeChecked\r\n : tseslint.configs.recommended;\r\n\r\n const typeAwareConfig = options.typeChecked\r\n ? typescriptTypeAware({\r\n files,\r\n tsconfigPath: options.tsconfigPath,\r\n tsconfigRootDir: options.tsconfigRootDir,\r\n })\r\n : [];\r\n\r\n return tseslint.config(\r\n ...typescriptBase({ files }),\r\n ...typescriptQuality({ files }),\r\n ...typescriptImports({ files }),\r\n ...typescriptSecurity(),\r\n ...typescriptDocs({ files }),\r\n ...typeAwareConfig,\r\n {\r\n files,\r\n extends: [...upstreamConfigs],\r\n }\r\n );\r\n}\r\n","import sonarjs from \"eslint-plugin-sonarjs\";\r\nimport unicorn from \"eslint-plugin-unicorn\";\r\nimport tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptQualityOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptQuality(options: TypescriptQualityOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n unicorn,\r\n sonarjs,\r\n },\r\n rules: {\r\n // Unicorn\r\n \"unicorn/prefer-node-protocol\": \"error\",\r\n \"unicorn/no-useless-undefined\": \"error\",\r\n \"unicorn/no-lonely-if\": \"error\",\r\n \"unicorn/prefer-optional-catch-binding\": \"error\",\r\n \"unicorn/prefer-string-replace-all\": \"error\",\r\n \"unicorn/prevent-abbreviations\": [\r\n \"warn\",\r\n {\r\n allowList: {\r\n Props: true,\r\n props: true,\r\n Ref: true,\r\n ref: true,\r\n Src: true,\r\n src: true,\r\n Params: true,\r\n params: true,\r\n Env: true,\r\n env: true,\r\n Args: true,\r\n args: true,\r\n },\r\n },\r\n ],\r\n\r\n // SonarJS\r\n \"sonarjs/cognitive-complexity\": [\"warn\", 15],\r\n \"sonarjs/no-identical-functions\": \"error\",\r\n \"sonarjs/no-duplicated-branches\": \"error\",\r\n \"sonarjs/no-redundant-boolean\": \"error\",\r\n \"sonarjs/no-inverted-boolean-check\": \"error\",\r\n },\r\n });\r\n}\r\n","import regexpPlugin from \"eslint-plugin-regexp\";\r\nimport rushstackSecurity from \"@rushstack/eslint-plugin-security\";\r\nimport tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptSecurityOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptSecurity(options: TypescriptSecurityOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n plugins: {\r\n security: rushstackSecurity,\r\n regexp: regexpPlugin,\r\n },\r\n rules: {\r\n // @rushstack/eslint-plugin-security\r\n \"security/detect-object-injection\": \"error\",\r\n \"security/detect-unsafe-regex\": \"error\",\r\n\r\n // eslint-plugin-regexp\r\n \"regexp/no-super-linear-backtracking\": \"error\",\r\n \"regexp/no-useless-escape\": \"error\",\r\n \"regexp/no-empty-capturing-group\": \"error\",\r\n },\r\n });\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\n\r\nexport interface TypescriptTypeAwareOptions {\r\n /**\r\n * Type-aware linting requires a project TSConfig.\r\n * Example: \"./tsconfig.json\".\r\n */\r\n tsconfigPath?: string | string[];\r\n\r\n /**\r\n * tsconfigRootDir should usually be import.meta.dirname from the consumer repo.\r\n */\r\n tsconfigRootDir?: string;\r\n\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptTypeAware(options: TypescriptTypeAwareOptions = {}) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n languageOptions: {\r\n parserOptions: {\r\n project: options.tsconfigPath ?? \"./tsconfig.json\",\r\n tsconfigRootDir: options.tsconfigRootDir,\r\n },\r\n },\r\n rules: {\r\n \"@typescript-eslint/no-floating-promises\": \"error\",\r\n \"@typescript-eslint/no-misused-promises\": \"error\",\r\n \"@typescript-eslint/await-thenable\": \"error\",\r\n \"@typescript-eslint/no-unnecessary-condition\": \"warn\",\r\n \"@typescript-eslint/no-unnecessary-type-assertion\": \"error\",\r\n \"@typescript-eslint/restrict-template-expressions\": \"error\",\r\n },\r\n });\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport eslintConfigPrettier from \"eslint-config-prettier\";\r\n\r\nexport interface TypescriptPrettierOptions {\r\n files?: string[];\r\n}\r\n\r\nexport function typescriptPrettierInterop(\r\n options: TypescriptPrettierOptions = {}\r\n) {\r\n const files = options.files ?? [\"**/*.{ts,tsx,mts,cts}\"];\r\n\r\n return tseslint.config({\r\n files,\r\n rules: {\r\n ...eslintConfigPrettier.rules,\r\n },\r\n });\r\n}\r\n"],"mappings":"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","names":["tseslint","tseslint","tseslint","tseslint","tseslint","tseslint","tseslint","tseslint"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stride.it/appoint-lint-governance",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Shareable ESLint flat-config profiles (MVP: TypeScript) for normalizing lint across repos.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,11 +28,12 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@eslint-community/eslint-plugin-eslint-comments": "^4.6.0",
|
|
31
|
+
"@rushstack/eslint-plugin-security": "^0.8.0",
|
|
32
|
+
"eslint-config-prettier": "^10.1.8",
|
|
31
33
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
32
34
|
"eslint-plugin-import": "^2.32.0",
|
|
33
35
|
"eslint-plugin-jsdoc": "^62.0.0",
|
|
34
36
|
"eslint-plugin-regexp": "^2.10.0",
|
|
35
|
-
"eslint-plugin-security": "^3.0.1",
|
|
36
37
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
37
38
|
"eslint-plugin-sonarjs": "^3.0.5",
|
|
38
39
|
"eslint-plugin-unicorn": "^62.0.0",
|
|
@@ -51,4 +52,4 @@
|
|
|
51
52
|
"typescript": "^5.9.3",
|
|
52
53
|
"vitest": "^4.0.17"
|
|
53
54
|
}
|
|
54
|
-
}
|
|
55
|
+
}
|