eslint-plugin-operability 3.1.0 → 4.0.0
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,9 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability" target="blank"><img src="https://eslint.interlace.tools/logos/interlace.svg" alt="Interlace" height="90" /></a>
|
|
2
|
+
<a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="90" /></picture></a>
|
|
3
3
|
|
|
4
|
-
<a href="https://oxc.rs" target="_blank"><img src="https://eslint.interlace.tools/logos/oxlint.svg" alt="oxlint" height="90" /></a>
|
|
4
|
+
<a href="https://oxc.rs" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/oxlint-dark.svg"><img src="https://eslint.interlace.tools/logos/oxlint-light.svg" alt="oxlint" height="90" /></picture></a>
|
|
5
5
|
|
|
6
|
-
<a href="https://eslint.org" target="_blank"><img src="https://eslint.interlace.tools/logos/eslint.svg" alt="ESLint" height="90" /></a>
|
|
6
|
+
<a href="https://eslint.org" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/eslint-dark.svg"><img src="https://eslint.interlace.tools/logos/eslint-light.svg" alt="ESLint" height="90" /></picture></a>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
@@ -25,57 +25,25 @@
|
|
|
25
25
|
|
|
26
26
|
This plugin provides Operability rules — observability hooks, structured logging, and runtime resilience.
|
|
27
27
|
|
|
28
|
-
## Philosophy
|
|
29
|
-
|
|
30
|
-
**Interlace** fosters **strength through integration**. Instead of stacking isolated rules, we **interlace** security directly into your workflow to create a resilient fabric of code. We believe tools should **guide rather than gatekeep**, providing educational feedback that strengthens the developer with every interaction.
|
|
31
|
-
|
|
32
28
|
<!-- AUTO-GENERATED:DOCTRINE:START - Do not edit manually -->
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
That is a trade, and it is made deliberately. It costs recall, and we measure what it
|
|
42
|
-
costs rather than assuming it is free.
|
|
43
|
-
|
|
44
|
-
## How the rules decide
|
|
45
|
-
|
|
46
|
-
**Evidence, not names.** A rule fires on what the code *does*, resolved through the
|
|
47
|
-
AST and ESLint's own scope analysis — not on an identifier that happens to contain
|
|
48
|
-
`query`, a method called `setItem`, or a file whose path contains `key`. Every one of
|
|
49
|
-
those was a real false positive in this ecosystem, found by reading our own output on
|
|
50
|
-
open-source projects and fixed with a test that fails on the unfixed rule.
|
|
51
|
-
|
|
52
|
-
Where a rule has known false-positive shapes, its page carries a **Not a finding**
|
|
53
|
-
section: what it deliberately stays quiet on, and what to check first when it fires
|
|
54
|
-
and you disagree.
|
|
55
|
-
|
|
56
|
-
## What you get
|
|
30
|
+
- **Why** — a linter nobody reads protects nothing. We would rather miss a finding
|
|
31
|
+
than spend your attention on one that was never real.
|
|
32
|
+
- **How** — evidence, not names. A rule fires on what the code *does*, resolved
|
|
33
|
+
through the AST and ESLint's own scope analysis.
|
|
34
|
+
- **What** — every finding carries its fix, in prose for a human and as structured
|
|
35
|
+
JSON for an agent. Security rules add a CWE mapping and, where assigned, a CVSS score.
|
|
57
36
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
[open an issue](https://github.com/ofri-peretz/eslint/issues) — a false positive is a
|
|
63
|
-
bug here, not a tuning exercise for you.
|
|
64
|
-
|
|
65
|
-
How that is measured, on which projects, and where it falls short:
|
|
66
|
-
[benchmark methodology](https://github.com/ofri-peretz/eslint/blob/main/BENCHMARK-METHODOLOGY.md)
|
|
67
|
-
and [results](https://github.com/ofri-peretz/eslint/blob/main/BENCHMARK-RESULTS.md).
|
|
37
|
+
That trade costs recall, and we measure it:
|
|
38
|
+
[methodology](https://github.com/ofri-peretz/eslint/blob/main/BENCHMARK-METHODOLOGY.md)
|
|
39
|
+
· [results](https://github.com/ofri-peretz/eslint/blob/main/BENCHMARK-RESULTS.md)
|
|
40
|
+
· [a false positive is a bug](https://github.com/ofri-peretz/eslint/issues).
|
|
68
41
|
|
|
69
42
|
<!-- AUTO-GENERATED:DOCTRINE:END -->
|
|
70
43
|
|
|
71
44
|
## Getting Started
|
|
72
45
|
|
|
73
46
|
- To check out the [guide](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability), visit [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability). 📚
|
|
74
|
-
- 要查看中文 [指南](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability), 请访问 [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability). 📚
|
|
75
|
-
- [가이드](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability) 문서는 [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability)에서 확인하실 수 있습니다. 📚
|
|
76
|
-
- [ガイド](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability)は [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability)でご確認ください。 📚
|
|
77
|
-
- Para ver la [guía](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability), visita [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability). 📚
|
|
78
|
-
- للاطلاع على [الدليل](https://eslint.interlace.tools/docs/quality/plugin-operability?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability)، قم بزيارة [eslint.interlace.tools](https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability). 📚
|
|
79
47
|
|
|
80
48
|
```bash
|
|
81
49
|
npm install eslint-plugin-operability --save-dev
|
|
@@ -195,23 +163,52 @@ See the [ESLint Version Support Policy](../../docs/ESLINT_VERSION_SUPPORT.md)
|
|
|
195
163
|
| [require-code-minification](https://eslint.interlace.tools/docs/quality/plugin-operability/rules/require-code-minification?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability) | CWE-656 | | | Require minification configuration in build tools | 🟢 | | | | | |
|
|
196
164
|
| [require-data-minimization](https://eslint.interlace.tools/docs/quality/plugin-operability/rules/require-data-minimization?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability) | CWE-213 | | | Identifies excessive data collection patterns that violate privacy principles | 🟢 | | | | 💡 | |
|
|
197
165
|
<!-- AUTO-GENERATED:RULES_TABLE:END -->
|
|
166
|
+
<!-- AUTO-GENERATED:ECOSYSTEM_TABLE:START - Do not edit manually -->
|
|
167
|
+
|
|
198
168
|
## 🔗 Related ESLint Plugins
|
|
199
169
|
|
|
200
|
-
Part of the **Interlace ESLint
|
|
170
|
+
Part of the **Interlace ESLint ecosystem** — AI-native rules with LLM-optimized error messages:
|
|
171
|
+
|
|
172
|
+
**Security**
|
|
201
173
|
|
|
202
174
|
| Plugin | Downloads | Description |
|
|
203
175
|
| :--- | :---: | :--- |
|
|
204
|
-
| [`eslint-plugin-
|
|
205
|
-
| [`eslint-plugin-
|
|
206
|
-
| [`eslint-plugin-
|
|
207
|
-
| [`eslint-plugin-
|
|
208
|
-
| [`eslint-plugin-
|
|
209
|
-
| [`eslint-plugin-
|
|
210
|
-
| [`eslint-plugin-
|
|
211
|
-
| [`eslint-plugin-
|
|
212
|
-
| [`eslint-plugin-
|
|
213
|
-
| [`eslint-plugin-
|
|
214
|
-
| [`eslint-plugin-
|
|
176
|
+
| [`eslint-plugin-anthropic-security`](https://www.npmjs.com/package/eslint-plugin-anthropic-security) | [](https://www.npmjs.com/package/eslint-plugin-anthropic-security) | Anthropic SDK security. |
|
|
177
|
+
| [`eslint-plugin-browser-security`](https://www.npmjs.com/package/eslint-plugin-browser-security) | [](https://www.npmjs.com/package/eslint-plugin-browser-security) | XSS, DOM security. |
|
|
178
|
+
| [`eslint-plugin-drizzle-security`](https://www.npmjs.com/package/eslint-plugin-drizzle-security) | [](https://www.npmjs.com/package/eslint-plugin-drizzle-security) | Drizzle security. |
|
|
179
|
+
| [`eslint-plugin-express-security`](https://www.npmjs.com/package/eslint-plugin-express-security) | [](https://www.npmjs.com/package/eslint-plugin-express-security) | Express middleware hardening. |
|
|
180
|
+
| [`eslint-plugin-gemini-security`](https://www.npmjs.com/package/eslint-plugin-gemini-security) | [](https://www.npmjs.com/package/eslint-plugin-gemini-security) | Google Gemini SDK security. |
|
|
181
|
+
| [`eslint-plugin-jwt-security`](https://www.npmjs.com/package/eslint-plugin-jwt-security) | [](https://www.npmjs.com/package/eslint-plugin-jwt-security) | Token security. |
|
|
182
|
+
| [`eslint-plugin-knex-security`](https://www.npmjs.com/package/eslint-plugin-knex-security) | [](https://www.npmjs.com/package/eslint-plugin-knex-security) | Knex security. |
|
|
183
|
+
| [`eslint-plugin-lambda-security`](https://www.npmjs.com/package/eslint-plugin-lambda-security) | [](https://www.npmjs.com/package/eslint-plugin-lambda-security) | AWS Lambda hardening. |
|
|
184
|
+
| [`eslint-plugin-mcp-sdk-security`](https://www.npmjs.com/package/eslint-plugin-mcp-sdk-security) | [](https://www.npmjs.com/package/eslint-plugin-mcp-sdk-security) | MCP SDK security. |
|
|
185
|
+
| [`eslint-plugin-mongodb-security`](https://www.npmjs.com/package/eslint-plugin-mongodb-security) | [](https://www.npmjs.com/package/eslint-plugin-mongodb-security) | MongoDB injection. |
|
|
186
|
+
| [`eslint-plugin-mysql-security`](https://www.npmjs.com/package/eslint-plugin-mysql-security) | [](https://www.npmjs.com/package/eslint-plugin-mysql-security) | MySQL security. |
|
|
187
|
+
| [`eslint-plugin-nestjs-security`](https://www.npmjs.com/package/eslint-plugin-nestjs-security) | [](https://www.npmjs.com/package/eslint-plugin-nestjs-security) | NestJS framework hardening. |
|
|
188
|
+
| [`eslint-plugin-node-security`](https://www.npmjs.com/package/eslint-plugin-node-security) | [](https://www.npmjs.com/package/eslint-plugin-node-security) | Server-side patterns. |
|
|
189
|
+
| [`eslint-plugin-openai-security`](https://www.npmjs.com/package/eslint-plugin-openai-security) | [](https://www.npmjs.com/package/eslint-plugin-openai-security) | OpenAI SDK security. |
|
|
190
|
+
| [`eslint-plugin-postgresql-security`](https://www.npmjs.com/package/eslint-plugin-postgresql-security) | [](https://www.npmjs.com/package/eslint-plugin-postgresql-security) | PostgreSQL security. |
|
|
191
|
+
| [`eslint-plugin-prisma-security`](https://www.npmjs.com/package/eslint-plugin-prisma-security) | [](https://www.npmjs.com/package/eslint-plugin-prisma-security) | Prisma security. |
|
|
192
|
+
| [`eslint-plugin-secure-coding`](https://www.npmjs.com/package/eslint-plugin-secure-coding) | [](https://www.npmjs.com/package/eslint-plugin-secure-coding) | Injection prevention. |
|
|
193
|
+
| [`eslint-plugin-sequelize-security`](https://www.npmjs.com/package/eslint-plugin-sequelize-security) | [](https://www.npmjs.com/package/eslint-plugin-sequelize-security) | Sequelize ORM security. |
|
|
194
|
+
| [`eslint-plugin-sqlite-security`](https://www.npmjs.com/package/eslint-plugin-sqlite-security) | [](https://www.npmjs.com/package/eslint-plugin-sqlite-security) | SQLite security. |
|
|
195
|
+
| [`eslint-plugin-typeorm-security`](https://www.npmjs.com/package/eslint-plugin-typeorm-security) | [](https://www.npmjs.com/package/eslint-plugin-typeorm-security) | TypeORM security. |
|
|
196
|
+
| [`eslint-plugin-vercel-ai-security`](https://www.npmjs.com/package/eslint-plugin-vercel-ai-security) | [](https://www.npmjs.com/package/eslint-plugin-vercel-ai-security) | AI SDK security. |
|
|
197
|
+
|
|
198
|
+
**Code quality**
|
|
199
|
+
|
|
200
|
+
| Plugin | Downloads | Description |
|
|
201
|
+
| :--- | :---: | :--- |
|
|
202
|
+
| [`eslint-plugin-conventions`](https://www.npmjs.com/package/eslint-plugin-conventions) | [](https://www.npmjs.com/package/eslint-plugin-conventions) | Team-specific habits and styles. |
|
|
203
|
+
| [`eslint-plugin-import-next`](https://www.npmjs.com/package/eslint-plugin-import-next) | [](https://www.npmjs.com/package/eslint-plugin-import-next) | Fast cycle + import-graph analysis. |
|
|
204
|
+
| [`eslint-plugin-maintainability`](https://www.npmjs.com/package/eslint-plugin-maintainability) | [](https://www.npmjs.com/package/eslint-plugin-maintainability) | Cognitive load and clean-code patterns. |
|
|
205
|
+
| [`eslint-plugin-modernization`](https://www.npmjs.com/package/eslint-plugin-modernization) | [](https://www.npmjs.com/package/eslint-plugin-modernization) | ESNext migration + syntax evolution. |
|
|
206
|
+
| [`eslint-plugin-modularity`](https://www.npmjs.com/package/eslint-plugin-modularity) | [](https://www.npmjs.com/package/eslint-plugin-modularity) | Structural integrity and DDD patterns. |
|
|
207
|
+
| [`eslint-plugin-react-a11y`](https://www.npmjs.com/package/eslint-plugin-react-a11y) | [](https://www.npmjs.com/package/eslint-plugin-react-a11y) | React accessibility / WCAG. |
|
|
208
|
+
| [`eslint-plugin-react-features`](https://www.npmjs.com/package/eslint-plugin-react-features) | [](https://www.npmjs.com/package/eslint-plugin-react-features) | React best practices and optimization. |
|
|
209
|
+
| [`eslint-plugin-reliability`](https://www.npmjs.com/package/eslint-plugin-reliability) | [](https://www.npmjs.com/package/eslint-plugin-reliability) | Runtime stability and error safety. |
|
|
210
|
+
|
|
211
|
+
<!-- AUTO-GENERATED:ECOSYSTEM_TABLE:END -->
|
|
215
212
|
|
|
216
213
|
<!-- INTERLACE:STAR_CTA:START -->
|
|
217
214
|
## ⭐ Support & follow
|
|
@@ -231,5 +228,5 @@ MIT © [Ofri Peretz](https://github.com/ofri-peretz)
|
|
|
231
228
|
</p>
|
|
232
229
|
|
|
233
230
|
<p align="center">
|
|
234
|
-
<a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability" target="blank"><img src="https://eslint.interlace.tools/
|
|
231
|
+
<a href="https://eslint.interlace.tools/?utm_source=github&utm_medium=referral&utm_campaign=eslint-plugin-operability" target="blank"><picture><source media="(prefers-color-scheme: dark)" srcset="https://eslint.interlace.tools/logos/interlace-dark.svg"><img src="https://eslint.interlace.tools/logos/interlace-light.svg" alt="Interlace" height="70" /></picture></a>
|
|
235
232
|
</p>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-operability",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "ESLint plugin for production operability — bans debug code and console logging in production, verbose error messages, and process.exit calls.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"node": ">=18.0.0"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@interlace/eslint-devkit": "^1.
|
|
52
|
+
"@interlace/eslint-devkit": "^1.18.0"
|
|
53
53
|
},
|
|
54
54
|
"repository": {
|
|
55
55
|
"type": "git",
|
package/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.configs=exports.plugin=exports.rules=void 0;exports.rules={get"no-console-log"(){return require("./rules/operability/no-console-log").noConsoleLog},get"no-process-exit"(){return require("./rules/operability/no-process-exit").noProcessExit},get"no-debug-code-in-production"(){return require("./rules/operability/no-debug-code-in-production").noDebugCodeInProduction},get"no-verbose-error-messages"(){return require("./rules/operability/no-verbose-error-messages").noVerboseErrorMessages},get"require-code-minification"(){return require("./rules/operability/require-code-minification").requireCodeMinification},get"require-data-minimization"(){return require("./rules/operability/require-data-minimization").requireDataMinimization},get"operability/no-console-log"(){return require("./rules/operability/no-console-log").noConsoleLog},get"operability/no-process-exit"(){return require("./rules/operability/no-process-exit").noProcessExit},get"operability/no-debug-code-in-production"(){return require("./rules/operability/no-debug-code-in-production").noDebugCodeInProduction},get"operability/no-verbose-error-messages"(){return require("./rules/operability/no-verbose-error-messages").noVerboseErrorMessages},get"operability/require-code-minification"(){return require("./rules/operability/require-code-minification").requireCodeMinification},get"operability/require-data-minimization"(){return require("./rules/operability/require-data-minimization").requireDataMinimization}};exports.plugin={meta:{name:"eslint-plugin-operability",version:"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.configs=exports.plugin=exports.rules=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.rules={get"no-console-log"(){return require("./rules/operability/no-console-log").noConsoleLog},get"no-process-exit"(){return require("./rules/operability/no-process-exit").noProcessExit},get"no-debug-code-in-production"(){return require("./rules/operability/no-debug-code-in-production").noDebugCodeInProduction},get"no-verbose-error-messages"(){return require("./rules/operability/no-verbose-error-messages").noVerboseErrorMessages},get"require-code-minification"(){return require("./rules/operability/require-code-minification").requireCodeMinification},get"require-data-minimization"(){return require("./rules/operability/require-data-minimization").requireDataMinimization},get"operability/no-console-log"(){return require("./rules/operability/no-console-log").noConsoleLog},get"operability/no-process-exit"(){return require("./rules/operability/no-process-exit").noProcessExit},get"operability/no-debug-code-in-production"(){return require("./rules/operability/no-debug-code-in-production").noDebugCodeInProduction},get"operability/no-verbose-error-messages"(){return require("./rules/operability/no-verbose-error-messages").noVerboseErrorMessages},get"operability/require-code-minification"(){return require("./rules/operability/require-code-minification").requireCodeMinification},get"operability/require-data-minimization"(){return require("./rules/operability/require-data-minimization").requireDataMinimization}};(0,eslint_devkit_1.withCanonicalDocsUrls)("plugin-operability",exports.rules);exports.plugin={meta:{name:"eslint-plugin-operability",version:"4.0.0"},rules:exports.rules};exports.configs={recommended:{plugins:{"operability":exports.plugin},rules:{"operability/no-console-log":"warn","operability/no-debug-code-in-production":"error","operability/no-verbose-error-messages":"warn"}}};exports.default=exports.plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.requireCodeMinification=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.requireCodeMinification=(0,eslint_devkit_1.createRule)({name:"require-code-minification",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-operability/docs/rules/require-code-minification.md",description:"Require minification configuration",cwe:"CWE-656",cvss:2.5},messages:{violationDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"violation Detected",cwe:"CWE-656",description:"Require minification configuration detected - Build config without minification",severity:"LOW",fix:"Review and apply secure practices",documentationLink:"https://cwe.mitre.org/data/definitions/656.html"})},schema:[]},defaultOptions:[],create(context){return{Property(node){if(node.key.type==="Identifier"&&node.key.name
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.requireCodeMinification=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");const DEFAULT_MINIFICATION_KEYS=["minimize","minify"];exports.requireCodeMinification=(0,eslint_devkit_1.createRule)({name:"require-code-minification",meta:{type:"problem",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-operability/docs/rules/require-code-minification.md",description:"Require minification configuration",cwe:"CWE-656",cvss:2.5},messages:{violationDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"violation Detected",cwe:"CWE-656",description:"Require minification configuration detected - Build config without minification",severity:"LOW",fix:"Review and apply secure practices",documentationLink:"https://cwe.mitre.org/data/definitions/656.html"})},schema:[{type:"object",properties:{minificationKeys:{type:"array",items:{type:"string"},default:[...DEFAULT_MINIFICATION_KEYS],description:"Property names that turn minification off. webpack writes `minimize`; Vite, Rollup, esbuild and Terser write `minify`."}},additionalProperties:false}]},defaultOptions:[{minificationKeys:[...DEFAULT_MINIFICATION_KEYS]}],create(context,[options={}]){const{minificationKeys=DEFAULT_MINIFICATION_KEYS}=options;const keys=new Set(minificationKeys);return{Property(node){if(node.key.type==="Identifier"&&keys.has(node.key.name)&&node.value.type==="Literal"&&node.value.value===false){context.report({node,messageId:"violationDetected"})}}}}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.requireDataMinimization=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.requireDataMinimization=(0,eslint_devkit_1.createRule)({name:"require-data-minimization",meta:{type:"suggestion",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-operability/docs/rules/require-data-minimization.md",description:"Identify excessive data collection patterns",cwe:"CWE-213",cvss:5},messages:{violationDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"violation Detected",cwe:"CWE-213",description:"Excessive data collection detected - only collect data that is necessary",severity:"MEDIUM",fix:"Review and apply secure practices",documentationLink:"https://cwe.mitre.org/data/definitions/213.html"})},schema:[]},defaultOptions:[],create(context){function report(node){context.report({node,messageId:"violationDetected"})}return{ObjectExpression(node){if(node.properties.length
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.requireDataMinimization=void 0;const eslint_devkit_1=require("@interlace/eslint-devkit");exports.requireDataMinimization=(0,eslint_devkit_1.createRule)({name:"require-data-minimization",meta:{type:"suggestion",docs:{url:"https://github.com/ofri-peretz/eslint/blob/main/packages/eslint-plugin-operability/docs/rules/require-data-minimization.md",description:"Identify excessive data collection patterns",cwe:"CWE-213",cvss:5},messages:{violationDetected:(0,eslint_devkit_1.formatLLMMessage)({icon:eslint_devkit_1.MessageIcons.SECURITY,issueName:"violation Detected",cwe:"CWE-213",description:"Excessive data collection detected - only collect data that is necessary",severity:"MEDIUM",fix:"Review and apply secure practices",documentationLink:"https://cwe.mitre.org/data/definitions/213.html"})},schema:[{type:"object",properties:{piiFields:{type:"array",items:{type:"string"},description:"Property names this project treats as personal data. Replaces the default. Empty means the rule stays silent.",default:[]},maxProperties:{type:"number",description:"How many properties in one object literal count as excessive breadth.",default:10,minimum:1}},additionalProperties:false}]},defaultOptions:[{piiFields:[],maxProperties:10}],create(context,[options]){const piiFields=new Set(options.piiFields);const{maxProperties}=options;function report(node){context.report({node,messageId:"violationDetected"})}if(piiFields.size===0)return{};return{ObjectExpression(node){if(node.properties.length<=maxProperties)return;const carriesPersonalData=node.properties.some(p=>{if(p.type!==eslint_devkit_1.AST_NODE_TYPES.Property)return false;const name=(0,eslint_devkit_1.objectKeyName)(p);return name!==null&&piiFields.has(name)});if(carriesPersonalData)report(node)}}}});
|