@opensip-cli/checks-universal 0.1.9 → 0.1.11
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 +4 -2
- package/dist/__tests__/all-checks-execute.test.d.ts.map +1 -1
- package/dist/__tests__/all-checks-execute.test.js +0 -1
- package/dist/__tests__/all-checks-execute.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-10.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-10.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-10.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-11.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-11.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-11.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-12.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-12.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-12.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-2.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-2.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-3.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-3.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-4.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-4.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-5.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-5.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-6.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-6.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-7.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-7.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-7.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-8.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-8.test.js +2 -3
- package/dist/__tests__/behavior-fixtures-8.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures-9.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures-9.test.js +0 -1
- package/dist/__tests__/behavior-fixtures-9.test.js.map +1 -1
- package/dist/__tests__/behavior-fixtures.test.d.ts.map +1 -1
- package/dist/__tests__/behavior-fixtures.test.js +10 -9
- package/dist/__tests__/behavior-fixtures.test.js.map +1 -1
- package/dist/__tests__/file-length-limit.test.js +12 -1
- package/dist/__tests__/file-length-limit.test.js.map +1 -1
- package/dist/checks/architecture/__tests__/tool-identity-single-source.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/tool-identity-single-source.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/tool-identity-single-source.test.js +61 -0
- package/dist/checks/architecture/__tests__/tool-identity-single-source.test.js.map +1 -0
- package/dist/checks/architecture/docker-best-practices-analyze.d.ts +7 -0
- package/dist/checks/architecture/docker-best-practices-analyze.d.ts.map +1 -0
- package/dist/checks/architecture/docker-best-practices-analyze.js +301 -0
- package/dist/checks/architecture/docker-best-practices-analyze.js.map +1 -0
- package/dist/checks/architecture/docker-best-practices-patterns.d.ts +50 -0
- package/dist/checks/architecture/docker-best-practices-patterns.d.ts.map +1 -0
- package/dist/checks/architecture/docker-best-practices-patterns.js +51 -0
- package/dist/checks/architecture/docker-best-practices-patterns.js.map +1 -0
- package/dist/checks/architecture/docker-best-practices.d.ts.map +1 -1
- package/dist/checks/architecture/docker-best-practices.js +1 -367
- package/dist/checks/architecture/docker-best-practices.js.map +1 -1
- package/dist/checks/architecture/docker-ignore-validation.d.ts.map +1 -1
- package/dist/checks/architecture/docker-ignore-validation.js +0 -1
- package/dist/checks/architecture/docker-ignore-validation.js.map +1 -1
- package/dist/checks/architecture/docker-version-sync.d.ts.map +1 -1
- package/dist/checks/architecture/docker-version-sync.js +0 -1
- package/dist/checks/architecture/docker-version-sync.js.map +1 -1
- package/dist/checks/architecture/heavy-import-detection.d.ts.map +1 -1
- package/dist/checks/architecture/heavy-import-detection.js +1 -0
- package/dist/checks/architecture/heavy-import-detection.js.map +1 -1
- package/dist/checks/architecture/index.d.ts +1 -0
- package/dist/checks/architecture/index.d.ts.map +1 -1
- package/dist/checks/architecture/index.js +1 -0
- package/dist/checks/architecture/index.js.map +1 -1
- package/dist/checks/architecture/modules/empty-package-detection.d.ts.map +1 -1
- package/dist/checks/architecture/modules/empty-package-detection.js +0 -1
- package/dist/checks/architecture/modules/empty-package-detection.js.map +1 -1
- package/dist/checks/architecture/modules/interface-implementation-consistency-constants.d.ts +16 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-constants.d.ts.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-constants.js +182 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-constants.js.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-parse.d.ts +23 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-parse.d.ts.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-parse.js +235 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency-parse.js.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts.map +1 -1
- package/dist/checks/architecture/modules/interface-implementation-consistency.js +4 -462
- package/dist/checks/architecture/modules/interface-implementation-consistency.js.map +1 -1
- package/dist/checks/architecture/node-version-consistency.d.ts.map +1 -1
- package/dist/checks/architecture/node-version-consistency.js +0 -2
- package/dist/checks/architecture/node-version-consistency.js.map +1 -1
- package/dist/checks/architecture/stale-build-artifacts.d.ts.map +1 -1
- package/dist/checks/architecture/stale-build-artifacts.js +0 -1
- package/dist/checks/architecture/stale-build-artifacts.js.map +1 -1
- package/dist/checks/architecture/tool-has-manifest.d.ts.map +1 -1
- package/dist/checks/architecture/tool-has-manifest.js +0 -1
- package/dist/checks/architecture/tool-has-manifest.js.map +1 -1
- package/dist/checks/architecture/tool-identity-single-source.d.ts +23 -0
- package/dist/checks/architecture/tool-identity-single-source.d.ts.map +1 -0
- package/dist/checks/architecture/tool-identity-single-source.js +126 -0
- package/dist/checks/architecture/tool-identity-single-source.js.map +1 -0
- package/dist/checks/documentation/_public-api-graph.d.ts +3 -26
- package/dist/checks/documentation/_public-api-graph.d.ts.map +1 -1
- package/dist/checks/documentation/_public-api-graph.js +3 -300
- package/dist/checks/documentation/_public-api-graph.js.map +1 -1
- package/dist/checks/documentation/directive-audit.d.ts.map +1 -1
- package/dist/checks/documentation/directive-audit.js +0 -1
- package/dist/checks/documentation/directive-audit.js.map +1 -1
- package/dist/checks/file-length-limit.d.ts +7 -0
- package/dist/checks/file-length-limit.d.ts.map +1 -1
- package/dist/checks/file-length-limit.js +14 -2
- package/dist/checks/file-length-limit.js.map +1 -1
- package/dist/checks/quality/code-structure/dead-code.d.ts.map +1 -1
- package/dist/checks/quality/code-structure/dead-code.js +0 -1
- package/dist/checks/quality/code-structure/dead-code.js.map +1 -1
- package/dist/checks/quality/dependency-version-consistency.d.ts.map +1 -1
- package/dist/checks/quality/dependency-version-consistency.js +0 -2
- package/dist/checks/quality/dependency-version-consistency.js.map +1 -1
- package/dist/checks/quality/frontend/navigation-typing.d.ts.map +1 -1
- package/dist/checks/quality/frontend/navigation-typing.js +0 -1
- package/dist/checks/quality/frontend/navigation-typing.js.map +1 -1
- package/dist/checks/quality/index.d.ts +1 -0
- package/dist/checks/quality/index.d.ts.map +1 -1
- package/dist/checks/quality/index.js +1 -0
- package/dist/checks/quality/index.js.map +1 -1
- package/dist/checks/quality/linting/eslint-justifications.d.ts.map +1 -1
- package/dist/checks/quality/linting/eslint-justifications.js +0 -1
- package/dist/checks/quality/linting/eslint-justifications.js.map +1 -1
- package/dist/checks/quality/no-raw-regex-on-code.d.ts.map +1 -1
- package/dist/checks/quality/no-raw-regex-on-code.js +2 -3
- package/dist/checks/quality/no-raw-regex-on-code.js.map +1 -1
- package/dist/checks/quality/patterns/__tests__/performance-anti-patterns-fp.test.d.ts +5 -0
- package/dist/checks/quality/patterns/__tests__/performance-anti-patterns-fp.test.d.ts.map +1 -0
- package/dist/checks/quality/patterns/__tests__/performance-anti-patterns-fp.test.js +66 -0
- package/dist/checks/quality/patterns/__tests__/performance-anti-patterns-fp.test.js.map +1 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts +3 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts.map +1 -1
- package/dist/checks/quality/patterns/performance-anti-patterns.js +47 -30
- package/dist/checks/quality/patterns/performance-anti-patterns.js.map +1 -1
- package/dist/checks/quality/yagni-ignore-hygiene.d.ts +10 -0
- package/dist/checks/quality/yagni-ignore-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/yagni-ignore-hygiene.js +87 -0
- package/dist/checks/quality/yagni-ignore-hygiene.js.map +1 -0
- package/dist/checks/quality/yagni-ignore-hygiene.test.d.ts +5 -0
- package/dist/checks/quality/yagni-ignore-hygiene.test.d.ts.map +1 -0
- package/dist/checks/quality/yagni-ignore-hygiene.test.js +37 -0
- package/dist/checks/quality/yagni-ignore-hygiene.test.js.map +1 -0
- package/dist/checks/resilience/batch-operation-limits.d.ts +13 -0
- package/dist/checks/resilience/batch-operation-limits.d.ts.map +1 -0
- package/dist/checks/resilience/batch-operation-limits.js +160 -0
- package/dist/checks/resilience/batch-operation-limits.js.map +1 -0
- package/dist/checks/resilience/batch-operations.d.ts +2 -21
- package/dist/checks/resilience/batch-operations.d.ts.map +1 -1
- package/dist/checks/resilience/batch-operations.js +2 -420
- package/dist/checks/resilience/batch-operations.js.map +1 -1
- package/dist/checks/resilience/dangerous-config-defaults.d.ts.map +1 -1
- package/dist/checks/resilience/dangerous-config-defaults.js +0 -1
- package/dist/checks/resilience/dangerous-config-defaults.js.map +1 -1
- package/dist/checks/resilience/exit-code-correctness.d.ts.map +1 -1
- package/dist/checks/resilience/exit-code-correctness.js +0 -1
- package/dist/checks/resilience/exit-code-correctness.js.map +1 -1
- package/dist/checks/resilience/no-process-exit-in-finally.d.ts.map +1 -1
- package/dist/checks/resilience/no-process-exit-in-finally.js +0 -1
- package/dist/checks/resilience/no-process-exit-in-finally.js.map +1 -1
- package/dist/checks/resilience/readline-cleanup.d.ts.map +1 -1
- package/dist/checks/resilience/readline-cleanup.js +0 -1
- package/dist/checks/resilience/readline-cleanup.js.map +1 -1
- package/dist/checks/resilience/reentrancy-guard.d.ts.map +1 -1
- package/dist/checks/resilience/reentrancy-guard.js +0 -1
- package/dist/checks/resilience/reentrancy-guard.js.map +1 -1
- package/dist/checks/resilience/service-patterns.d.ts.map +1 -1
- package/dist/checks/resilience/service-patterns.js +0 -1
- package/dist/checks/resilience/service-patterns.js.map +1 -1
- package/dist/checks/resilience/unbounded-memory.d.ts +13 -0
- package/dist/checks/resilience/unbounded-memory.d.ts.map +1 -0
- package/dist/checks/resilience/unbounded-memory.js +229 -0
- package/dist/checks/resilience/unbounded-memory.js.map +1 -0
- package/dist/checks/security/csp-headers.d.ts.map +1 -1
- package/dist/checks/security/csp-headers.js +0 -1
- package/dist/checks/security/csp-headers.js.map +1 -1
- package/dist/checks/security/hasura-production-config.d.ts.map +1 -1
- package/dist/checks/security/hasura-production-config.js +0 -1
- package/dist/checks/security/hasura-production-config.js.map +1 -1
- package/dist/checks/security/jwt-validation.d.ts.map +1 -1
- package/dist/checks/security/jwt-validation.js +0 -2
- package/dist/checks/security/jwt-validation.js.map +1 -1
- package/dist/checks/security/package-supply-chain-policy.d.ts.map +1 -1
- package/dist/checks/security/package-supply-chain-policy.js +9 -15
- package/dist/checks/security/package-supply-chain-policy.js.map +1 -1
- package/dist/checks/security/semgrep-scan.d.ts.map +1 -1
- package/dist/checks/security/semgrep-scan.js +0 -1
- package/dist/checks/security/semgrep-scan.js.map +1 -1
- package/dist/checks/security/use-centralized-crypto.d.ts.map +1 -1
- package/dist/checks/security/use-centralized-crypto.js +2 -3
- package/dist/checks/security/use-centralized-crypto.js.map +1 -1
- package/dist/checks/testing/test-convention-consistency.d.ts.map +1 -1
- package/dist/checks/testing/test-convention-consistency.js +0 -1
- package/dist/checks/testing/test-convention-consistency.js.map +1 -1
- package/dist/checks/testing/test-file-pairing.js +3 -6
- package/dist/checks/testing/test-file-pairing.js.map +1 -1
- package/dist/display/architecture.d.ts.map +1 -1
- package/dist/display/architecture.js +1 -0
- package/dist/display/architecture.js.map +1 -1
- package/dist/display/quality.d.ts.map +1 -1
- package/dist/display/quality.js +1 -0
- package/dist/display/quality.js.map +1 -1
- package/dist/display/types.d.ts.map +1 -1
- package/dist/display/types.js +0 -1
- package/dist/display/types.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,422 +1,4 @@
|
|
|
1
|
-
// @fitness-ignore-file file-length-limit -- JSDoc documentation required for public API
|
|
2
1
|
// @fitness-ignore-file duplicate-implementation-detection -- similar patterns across diagnostic modules
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
import { logger } from '@opensip-cli/core';
|
|
7
|
-
import { defineCheck, isTestFile, getLineNumber } from '@opensip-cli/fitness';
|
|
8
|
-
import { stripStringsAndCommentsPreservingPositions } from '@opensip-cli/fitness';
|
|
9
|
-
const UNBOUNDED_BATCH_PATTERNS = [
|
|
10
|
-
{ pattern: '.map', type: 'async' },
|
|
11
|
-
{ pattern: '.forEach', type: 'async' },
|
|
12
|
-
{ pattern: 'for', type: 'forOf' },
|
|
13
|
-
];
|
|
14
|
-
function findUnboundedBatchMatch(content, patternDef, startIndex) {
|
|
15
|
-
logger.debug({
|
|
16
|
-
evt: 'fitness.checks.batch_operations.find_unbounded_batch_match',
|
|
17
|
-
msg: 'Finding unbounded batch pattern match at position in content',
|
|
18
|
-
});
|
|
19
|
-
const idx = content.indexOf(patternDef.pattern, startIndex);
|
|
20
|
-
if (idx === -1)
|
|
21
|
-
return null;
|
|
22
|
-
if (patternDef.type === 'async') {
|
|
23
|
-
const afterPattern = content.slice(idx + patternDef.pattern.length, idx + patternDef.pattern.length + 20);
|
|
24
|
-
const asyncMatch = /^\s*\(\s*async/.exec(afterPattern);
|
|
25
|
-
if (asyncMatch) {
|
|
26
|
-
return { index: idx, match: patternDef.pattern + asyncMatch[0] };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
const afterFor = content.slice(idx, idx + 50);
|
|
31
|
-
const forOfMatch = /^for\s*\(\s*const\s+\w+\s+of/.exec(afterFor);
|
|
32
|
-
if (forOfMatch) {
|
|
33
|
-
return { index: idx, match: forOfMatch[0] };
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
const BOUNDED_KEYWORDS = [
|
|
39
|
-
'batch',
|
|
40
|
-
'chunk',
|
|
41
|
-
'page',
|
|
42
|
-
'limit',
|
|
43
|
-
'take',
|
|
44
|
-
'skip',
|
|
45
|
-
'offset',
|
|
46
|
-
'slice',
|
|
47
|
-
];
|
|
48
|
-
function hasBoundedKeyword(content) {
|
|
49
|
-
const lowerContent = content.toLowerCase();
|
|
50
|
-
return BOUNDED_KEYWORDS.some((keyword) => lowerContent.includes(keyword));
|
|
51
|
-
}
|
|
52
|
-
function findUnboundedQueryCalls(content) {
|
|
53
|
-
logger.debug({
|
|
54
|
-
evt: 'fitness.checks.batch_operations.find_unbounded_query_calls',
|
|
55
|
-
msg: 'Finding unbounded query calls like findAll, getAll, findMany with empty args',
|
|
56
|
-
});
|
|
57
|
-
const results = [];
|
|
58
|
-
const methods = ['findAll', 'getAll', 'findMany'];
|
|
59
|
-
for (const method of methods) {
|
|
60
|
-
const pattern = `.${method}`;
|
|
61
|
-
let searchStart = 0;
|
|
62
|
-
while (searchStart < content.length) {
|
|
63
|
-
const idx = content.indexOf(pattern, searchStart);
|
|
64
|
-
if (idx === -1)
|
|
65
|
-
break;
|
|
66
|
-
const afterMethod = content.slice(idx + pattern.length, idx + pattern.length + 10);
|
|
67
|
-
const emptyArgsMatch = /^\s*\(\s*\)/.exec(afterMethod);
|
|
68
|
-
if (emptyArgsMatch) {
|
|
69
|
-
results.push({
|
|
70
|
-
index: idx,
|
|
71
|
-
methodName: method,
|
|
72
|
-
match: pattern + emptyArgsMatch[0],
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
searchStart = idx + pattern.length;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return results;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Check: resilience/batch-operation-limits
|
|
82
|
-
*
|
|
83
|
-
* Detects batch operations that may process unbounded data:
|
|
84
|
-
* - Array operations on potentially large datasets without pagination
|
|
85
|
-
* - Async operations without concurrency limits
|
|
86
|
-
* - Database queries without LIMIT clauses
|
|
87
|
-
*/
|
|
88
|
-
export const batchOperationLimits = defineCheck({
|
|
89
|
-
id: 'c4d9b853-147e-4c29-9702-f392b1f51056',
|
|
90
|
-
slug: 'batch-operation-limits',
|
|
91
|
-
scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
|
|
92
|
-
contentFilter: 'strip-strings',
|
|
93
|
-
confidence: 'medium',
|
|
94
|
-
description: 'Detect batch operations that may process unbounded data',
|
|
95
|
-
longDescription: `**Purpose:** Prevents batch operations from processing arbitrarily large datasets without pagination or concurrency controls.
|
|
96
|
-
|
|
97
|
-
**Detects:**
|
|
98
|
-
- Unbounded query calls: \`.findAll()\`, \`.getAll()\`, \`.findMany()\` with empty parentheses
|
|
99
|
-
- Async callbacks in \`.map(\` and \`.forEach(\` without nearby batching keywords
|
|
100
|
-
- \`for (const x of\` loops without pagination indicators
|
|
101
|
-
- Skips files containing bounded keywords: \`batch\`, \`chunk\`, \`page\`, \`limit\`, \`take\`, \`skip\`, \`offset\`, \`slice\`
|
|
102
|
-
|
|
103
|
-
**Why it matters:** Processing unbounded datasets can exhaust memory and starve other operations of resources.
|
|
104
|
-
|
|
105
|
-
**Scope:** General best practice. Analyzes each file individually via string matching.`,
|
|
106
|
-
tags: ['resilience', 'performance', 'memory'],
|
|
107
|
-
fileTypes: ['ts'],
|
|
108
|
-
analyze(content, filePath) {
|
|
109
|
-
if (isTestFile(filePath))
|
|
110
|
-
return [];
|
|
111
|
-
logger.debug({
|
|
112
|
-
evt: 'fitness.checks.batch_operations.analyze_unbounded_batch',
|
|
113
|
-
msg: 'Analyzing file for unbounded batch operations that may process excessive data',
|
|
114
|
-
});
|
|
115
|
-
const violations = [];
|
|
116
|
-
if (hasBoundedKeyword(content)) {
|
|
117
|
-
return violations;
|
|
118
|
-
}
|
|
119
|
-
const unboundedQueries = findUnboundedQueryCalls(content);
|
|
120
|
-
for (const query of unboundedQueries) {
|
|
121
|
-
const lineNumber = getLineNumber(content, query.index);
|
|
122
|
-
violations.push({
|
|
123
|
-
line: lineNumber,
|
|
124
|
-
column: 0,
|
|
125
|
-
message: `Unbounded ${query.methodName}() call may load excessive data`,
|
|
126
|
-
severity: 'warning',
|
|
127
|
-
suggestion: `Add pagination with limit/offset or use cursor-based pagination. Example: ${query.methodName}({ take: 100, skip: offset }) or use a cursor-based approach for large datasets.`,
|
|
128
|
-
match: query.match,
|
|
129
|
-
type: 'unbounded-query',
|
|
130
|
-
filePath,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
for (const patternDef of UNBOUNDED_BATCH_PATTERNS) {
|
|
134
|
-
let searchStart = 0;
|
|
135
|
-
while (searchStart < content.length) {
|
|
136
|
-
const matchResult = findUnboundedBatchMatch(content, patternDef, searchStart);
|
|
137
|
-
if (!matchResult)
|
|
138
|
-
break;
|
|
139
|
-
const start = Math.max(0, matchResult.index - 300);
|
|
140
|
-
const end = Math.min(content.length, matchResult.index + 300);
|
|
141
|
-
const context = content.slice(start, end);
|
|
142
|
-
if (!hasBoundedKeyword(context)) {
|
|
143
|
-
const lineNumber = getLineNumber(content, matchResult.index);
|
|
144
|
-
violations.push({
|
|
145
|
-
line: lineNumber,
|
|
146
|
-
column: 0,
|
|
147
|
-
message: 'Async operation in loop without batching may exhaust resources',
|
|
148
|
-
severity: 'warning',
|
|
149
|
-
suggestion: 'Add batch processing or concurrency limits. Use chunk() to process in batches or pLimit() to limit concurrent operations.',
|
|
150
|
-
match: matchResult.match,
|
|
151
|
-
type: 'unbounded-async-loop',
|
|
152
|
-
filePath,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
searchStart = matchResult.index + 1;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return violations;
|
|
159
|
-
},
|
|
160
|
-
});
|
|
161
|
-
const COLLECTION_TYPES = ['new Map(', 'new Set(', '= []', ': []'];
|
|
162
|
-
/** Patterns indicating a collection is bounded by design (static registries, constants, DI tokens). */
|
|
163
|
-
const BOUNDED_DECLARATION_PATTERNS = [
|
|
164
|
-
'static readonly',
|
|
165
|
-
'static ',
|
|
166
|
-
'readonly ',
|
|
167
|
-
'const ',
|
|
168
|
-
'= Object.freeze',
|
|
169
|
-
'as const',
|
|
170
|
-
// DI injection tokens
|
|
171
|
-
'INJECTION_TOKEN',
|
|
172
|
-
'InjectionToken',
|
|
173
|
-
'DI_TOKEN',
|
|
174
|
-
'Symbol(',
|
|
175
|
-
// Known bounded types
|
|
176
|
-
'WeakMap',
|
|
177
|
-
'WeakSet',
|
|
178
|
-
];
|
|
179
|
-
function isBoundedDeclaration(line) {
|
|
180
|
-
const trimmed = line.trim();
|
|
181
|
-
return BOUNDED_DECLARATION_PATTERNS.some((pattern) => trimmed.includes(pattern));
|
|
182
|
-
}
|
|
183
|
-
function findCollectionDeclarations(content) {
|
|
184
|
-
logger.debug({
|
|
185
|
-
evt: 'fitness.checks.batch_operations.find_collection_declarations',
|
|
186
|
-
msg: 'Finding private collection declarations that may grow without bounds',
|
|
187
|
-
});
|
|
188
|
-
const results = [];
|
|
189
|
-
const lines = content.split('\n');
|
|
190
|
-
let charIndex = 0;
|
|
191
|
-
for (const line of lines) {
|
|
192
|
-
const currentCharIndex = charIndex;
|
|
193
|
-
charIndex += line.length + 1; // +1 for newline
|
|
194
|
-
const trimmed = line.trim();
|
|
195
|
-
const isPrivateDeclaration = trimmed.startsWith('private');
|
|
196
|
-
const collectionType = isPrivateDeclaration
|
|
197
|
-
? COLLECTION_TYPES.find((type) => line.includes(type))
|
|
198
|
-
: undefined;
|
|
199
|
-
if (collectionType) {
|
|
200
|
-
if (isBoundedDeclaration(line)) {
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
const matchStart = line.indexOf('private');
|
|
204
|
-
const lineEnd = line.includes(';') ? line.indexOf(';') + 1 : line.length;
|
|
205
|
-
results.push({
|
|
206
|
-
index: currentCharIndex + matchStart,
|
|
207
|
-
match: line.slice(matchStart, lineEnd).trim(),
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return results;
|
|
212
|
-
}
|
|
213
|
-
const EVICTION_KEYWORDS = [
|
|
214
|
-
'.delete(',
|
|
215
|
-
'.clear(',
|
|
216
|
-
'.splice(',
|
|
217
|
-
'.shift(',
|
|
218
|
-
'.pop(',
|
|
219
|
-
'.length = 0',
|
|
220
|
-
'.length=0',
|
|
221
|
-
'maxsize',
|
|
222
|
-
'max_size',
|
|
223
|
-
'limit',
|
|
224
|
-
'evict',
|
|
225
|
-
'prune',
|
|
226
|
-
'cleanup',
|
|
227
|
-
'truncate',
|
|
228
|
-
'lru',
|
|
229
|
-
'overflow',
|
|
230
|
-
'@bounded-collection',
|
|
231
|
-
];
|
|
232
|
-
function hasEvictionKeyword(content) {
|
|
233
|
-
const lowerContent = content.toLowerCase();
|
|
234
|
-
return EVICTION_KEYWORDS.some((keyword) => lowerContent.includes(keyword.toLowerCase()));
|
|
235
|
-
}
|
|
236
|
-
/** String literals for pattern matching, not actual fs calls. */
|
|
237
|
-
// @fitness-ignore-next-line fitness-check-standards -- These are string literals for pattern matching, not actual fs calls
|
|
238
|
-
const FILE_READ_METHODS = ['readFileSync(', 'readFile('];
|
|
239
|
-
const FILE_SIZE_CHECK_KEYWORDS = [
|
|
240
|
-
'statsync(',
|
|
241
|
-
'stat(',
|
|
242
|
-
'.size <',
|
|
243
|
-
'.size >',
|
|
244
|
-
'.size<',
|
|
245
|
-
'.size>',
|
|
246
|
-
'max_file_size',
|
|
247
|
-
'maxfilesize',
|
|
248
|
-
];
|
|
249
|
-
function hasFileSizeCheck(content) {
|
|
250
|
-
const lowerContent = content.toLowerCase();
|
|
251
|
-
return FILE_SIZE_CHECK_KEYWORDS.some((keyword) => lowerContent.includes(keyword));
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* A read whose result is handed directly to `JSON.parse(...)` is loading a
|
|
255
|
-
* structured document (config / manifest / internal IPC spec), not streaming
|
|
256
|
-
* an arbitrarily large blob — the same bounded-by-nature rationale as the
|
|
257
|
-
* `.json` entry in {@link KNOWN_SMALL_FILE_PATTERNS}. Matches `JSON.parse(`
|
|
258
|
-
* (whitespace-tolerant) directly preceding the read call.
|
|
259
|
-
*/
|
|
260
|
-
function isStructuredParseRead(code, readIndex) {
|
|
261
|
-
const before = code.slice(Math.max(0, readIndex - 16), readIndex);
|
|
262
|
-
return /JSON\s*\.\s*parse\s*\(\s*$/.test(before);
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Markers indicating a read resolved against the module's OWN location.
|
|
266
|
-
*/
|
|
267
|
-
const SELF_RELATIVE_MARKERS = ['import.meta.url', '__dirname', '__filename', 'fileurltopath'];
|
|
268
|
-
/**
|
|
269
|
-
* A read resolved against the module's own location (`import.meta.url`,
|
|
270
|
-
* `__dirname`, `__filename`, `fileURLToPath`) loads a committed, version-
|
|
271
|
-
* pinned asset shipped alongside the code (e.g. a vendored bundle), not
|
|
272
|
-
* untrusted external input — detected by a self-location marker in the
|
|
273
|
-
* look-back window.
|
|
274
|
-
*/
|
|
275
|
-
function isModuleSelfRelativeRead(codeContext) {
|
|
276
|
-
const lower = codeContext.toLowerCase();
|
|
277
|
-
return SELF_RELATIVE_MARKERS.some((marker) => lower.includes(marker));
|
|
278
|
-
}
|
|
279
|
-
/** Config files that are bounded by nature and don't need size validation. */
|
|
280
|
-
const KNOWN_SMALL_FILE_PATTERNS = [
|
|
281
|
-
'package.json',
|
|
282
|
-
'tsconfig',
|
|
283
|
-
'.json',
|
|
284
|
-
'.yaml',
|
|
285
|
-
'.yml',
|
|
286
|
-
'.toml',
|
|
287
|
-
'.env',
|
|
288
|
-
'.config',
|
|
289
|
-
'.eslintrc',
|
|
290
|
-
'.prettierrc',
|
|
291
|
-
];
|
|
292
|
-
function isReadingKnownSmallFile(content, readIndex) {
|
|
293
|
-
const start = Math.max(0, readIndex - 100);
|
|
294
|
-
const end = Math.min(content.length, readIndex + 150);
|
|
295
|
-
const context = content.slice(start, end).toLowerCase();
|
|
296
|
-
return KNOWN_SMALL_FILE_PATTERNS.some((pattern) => context.includes(pattern));
|
|
297
|
-
}
|
|
298
|
-
function findFileReadCalls(content) {
|
|
299
|
-
logger.debug({
|
|
300
|
-
evt: 'fitness.checks.batch_operations.find_file_read_calls',
|
|
301
|
-
msg: 'Finding file read calls that may cause OOM without size validation',
|
|
302
|
-
});
|
|
303
|
-
const results = [];
|
|
304
|
-
for (const method of FILE_READ_METHODS) {
|
|
305
|
-
let searchStart = 0;
|
|
306
|
-
while (searchStart < content.length) {
|
|
307
|
-
const idx = content.indexOf(method, searchStart);
|
|
308
|
-
if (idx === -1)
|
|
309
|
-
break;
|
|
310
|
-
results.push({ index: idx, match: method });
|
|
311
|
-
searchStart = idx + method.length;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return results;
|
|
315
|
-
}
|
|
316
|
-
function hasGrowthMethod(content) {
|
|
317
|
-
const methods = ['.set(', '.push(', '.add('];
|
|
318
|
-
return methods.some((method) => content.includes(method));
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Check: resilience/unbounded-memory
|
|
322
|
-
*
|
|
323
|
-
* Detects potential memory leaks and OOM risks:
|
|
324
|
-
* - Maps/Sets/Arrays in classes without eviction logic
|
|
325
|
-
* - File reads without prior size checks
|
|
326
|
-
* - Growing buffers without backpressure
|
|
327
|
-
*/
|
|
328
|
-
export const unboundedMemory = defineCheck({
|
|
329
|
-
id: '1f3c347d-3511-4157-87e0-050fd57c28b3',
|
|
330
|
-
slug: 'unbounded-memory',
|
|
331
|
-
description: 'Detect unbounded collections and file reads that may cause OOM',
|
|
332
|
-
longDescription: `**Purpose:** Identifies potential memory leaks from collections that grow without bounds and file reads without size validation.
|
|
333
|
-
|
|
334
|
-
**Detects:**
|
|
335
|
-
- Private class fields initialized with \`new Map(\`, \`new Set(\`, or empty arrays that have growth methods (\`.set\`, \`.push\`, \`.add\`) but no eviction keywords (\`.delete\`, \`.clear\`, \`maxsize\`, \`evict\`, \`prune\`, \`lru\`, etc.)
|
|
336
|
-
- \`readFileSync(\` and \`readFile(\` calls without a preceding \`stat()\` / \`.size\` check within 500 characters
|
|
337
|
-
- Skips \`static\`, \`readonly\`, \`const\`, \`WeakMap\`, and DI token declarations
|
|
338
|
-
|
|
339
|
-
**Why it matters:** Unbounded in-memory collections cause gradual OOM in long-running services; reading files without size guards risks instant OOM on large inputs.
|
|
340
|
-
|
|
341
|
-
**Scope:** General best practice. Analyzes each file individually via string matching.`,
|
|
342
|
-
scope: { languages: ['typescript'], concerns: [] },
|
|
343
|
-
tags: ['resilience', 'memory', 'performance'],
|
|
344
|
-
analyze(content, filePath) {
|
|
345
|
-
if (isTestFile(filePath))
|
|
346
|
-
return [];
|
|
347
|
-
// Fitness checks reference readFile/readFileSync as string literals, not actual calls
|
|
348
|
-
if (filePath.includes('/fitness/src/checks/'))
|
|
349
|
-
return [];
|
|
350
|
-
logger.debug({
|
|
351
|
-
evt: 'fitness.checks.batch_operations.analyze_file_operations',
|
|
352
|
-
msg: 'Analyzing file for unbounded memory usage and file read operations',
|
|
353
|
-
});
|
|
354
|
-
const violations = [];
|
|
355
|
-
// Strip string literals + block / single-line comments BEFORE scanning
|
|
356
|
-
// for `readFile(` matches. Doc prose like "// followed by readFile()
|
|
357
|
-
// below" or `@module readFile` JSDoc previously yielded false positives
|
|
358
|
-
// because the regex hit the comment text. Use the position-preserving
|
|
359
|
-
// variant so match indexes map back to the original source line.
|
|
360
|
-
//
|
|
361
|
-
// Eviction-keyword and file-size-check detection intentionally run on
|
|
362
|
-
// the ORIGINAL content so author-supplied hints in comments
|
|
363
|
-
// ("// bounded by upstream cap", "// max-size enforced upstream")
|
|
364
|
-
// continue to mark the file as bounded. Stripping them there would
|
|
365
|
-
// surface previously-passing files as new positives every time we
|
|
366
|
-
// tighten the regex.
|
|
367
|
-
const codeOnly = stripStringsAndCommentsPreservingPositions(content);
|
|
368
|
-
const collectionDeclarations = findCollectionDeclarations(codeOnly);
|
|
369
|
-
for (const declaration of collectionDeclarations) {
|
|
370
|
-
const hasEviction = hasEvictionKeyword(content);
|
|
371
|
-
const hasGrowth = hasGrowthMethod(content);
|
|
372
|
-
if (hasGrowth && !hasEviction) {
|
|
373
|
-
const lineNumber = getLineNumber(content, declaration.index);
|
|
374
|
-
violations.push({
|
|
375
|
-
line: lineNumber,
|
|
376
|
-
column: 0,
|
|
377
|
-
message: 'Unbounded collection that grows without eviction',
|
|
378
|
-
severity: 'warning',
|
|
379
|
-
suggestion: 'Add maxSize limit and eviction logic (e.g., LRU). Use a shared cache utility for caching or implement periodic cleanup with .delete() or .clear().',
|
|
380
|
-
match: declaration.match,
|
|
381
|
-
type: 'unbounded-collection',
|
|
382
|
-
filePath,
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
const fileReadCalls = findFileReadCalls(codeOnly);
|
|
387
|
-
for (const readCall of fileReadCalls) {
|
|
388
|
-
// Widen the look-back window to 1500 chars so a stat() guard placed
|
|
389
|
-
// up to ~30 lines earlier in the same function still counts.
|
|
390
|
-
// Real-world bundle/file readers interleave stat → branch → recover
|
|
391
|
-
// → readFile, easily putting the guard >500 chars upstream.
|
|
392
|
-
const start = Math.max(0, readCall.index - 1500);
|
|
393
|
-
const context = content.slice(start, readCall.index);
|
|
394
|
-
const codeContext = codeOnly.slice(start, readCall.index);
|
|
395
|
-
if (isReadingKnownSmallFile(content, readCall.index)) {
|
|
396
|
-
continue;
|
|
397
|
-
}
|
|
398
|
-
// Bounded-by-nature reads: a `JSON.parse(readFile(...))` structured-doc
|
|
399
|
-
// load, or a read of a module-self-relative committed asset.
|
|
400
|
-
if (isStructuredParseRead(codeOnly, readCall.index) ||
|
|
401
|
-
isModuleSelfRelativeRead(codeContext)) {
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
if (!hasFileSizeCheck(context)) {
|
|
405
|
-
const lineNumber = getLineNumber(content, readCall.index);
|
|
406
|
-
violations.push({
|
|
407
|
-
line: lineNumber,
|
|
408
|
-
column: 0,
|
|
409
|
-
message: 'File read without size validation may cause OOM',
|
|
410
|
-
severity: 'warning',
|
|
411
|
-
// @fitness-ignore-next-line performance-anti-patterns -- 'await' appears in suggestion string literal, not actual await expression
|
|
412
|
-
suggestion: 'Check fs.stat().size before reading to prevent OOM on large files. Example: const stats = await fs.stat(path); if (stats.size > MAX_FILE_SIZE) throw new Error("File too large");',
|
|
413
|
-
match: readCall.match,
|
|
414
|
-
type: 'unbounded-file-read',
|
|
415
|
-
filePath,
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
return violations;
|
|
420
|
-
},
|
|
421
|
-
});
|
|
2
|
+
export { batchOperationLimits } from './batch-operation-limits.js';
|
|
3
|
+
export { unboundedMemory } from './unbounded-memory.js';
|
|
422
4
|
//# sourceMappingURL=batch-operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-operations.js","sourceRoot":"","sources":["../../../src/checks/resilience/batch-operations.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,wGAAwG;AACxG;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAuB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,0CAA0C,EAAE,MAAM,sBAAsB,CAAC;AAOlF,MAAM,wBAAwB,GAA4B;IACxD,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;IAClC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;IACtC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;CAClC,CAAC;AAEF,SAAS,uBAAuB,CAC9B,OAAe,EACf,UAAiC,EACjC,UAAkB;IAElB,MAAM,CAAC,KAAK,CAAC;QACX,GAAG,EAAE,4DAA4D;QACjE,GAAG,EAAE,8DAA8D;KACpE,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAChC,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAC/B,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CACrC,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,gBAAgB,GAAG;IACvB,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;CACC,CAAC;AAEX,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAe;IAEf,MAAM,CAAC,KAAK,CAAC;QACX,GAAG,EAAE,4DAA4D;QACjE,GAAG,EAAE,8EAA8E;KACpF,CAAC,CAAC;IACH,MAAM,OAAO,GAA2D,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,OAAO,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,MAAM;YAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YACnF,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEvD,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,GAAG;oBACV,UAAU,EAAE,MAAM;oBAClB,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;YAED,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;IAC9C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,eAAe;IAE9B,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,yDAAyD;IACtE,eAAe,EAAE;;;;;;;;;;uFAUoE;IACrF,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC7C,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,CAAC,KAAK,CAAC;YACX,GAAG,EAAE,yDAAyD;YAC9D,GAAG,EAAE,+EAA+E;SACrF,CAAC,CAAC;QACH,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,aAAa,KAAK,CAAC,UAAU,iCAAiC;gBACvE,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,6EAA6E,KAAK,CAAC,UAAU,kFAAkF;gBAC3L,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,iBAAiB;gBACvB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,wBAAwB,EAAE,CAAC;YAClD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,OAAO,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC9E,IAAI,CAAC,WAAW;oBAAE,MAAM;gBAExB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;gBACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAE1C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;oBAChC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC7D,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,gEAAgE;wBACzE,QAAQ,EAAE,SAAS;wBACnB,UAAU,EACR,2HAA2H;wBAC7H,KAAK,EAAE,WAAW,CAAC,KAAK;wBACxB,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBAED,WAAW,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE3E,uGAAuG;AACvG,MAAM,4BAA4B,GAAG;IACnC,iBAAiB;IACjB,SAAS;IACT,WAAW;IACX,QAAQ;IACR,iBAAiB;IACjB,UAAU;IACV,sBAAsB;IACtB,iBAAiB;IACjB,gBAAgB;IAChB,UAAU;IACV,SAAS;IACT,sBAAsB;IACtB,SAAS;IACT,SAAS;CACV,CAAC;AAEF,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe;IACjD,MAAM,CAAC,KAAK,CAAC;QACX,GAAG,EAAE,8DAA8D;QACnE,GAAG,EAAE,sEAAsE;KAC5E,CAAC,CAAC;IACH,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,gBAAgB,GAAG,SAAS,CAAC;QACnC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,oBAAoB;YACzC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,gBAAgB,GAAG,UAAU;gBACpC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;aAC9C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,SAAS;IACT,UAAU;IACV,SAAS;IACT,OAAO;IACP,aAAa;IACb,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,UAAU;IACV,KAAK;IACL,UAAU;IACV,qBAAqB;CACb,CAAC;AAEX,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,iEAAiE;AACjE,2HAA2H;AAC3H,MAAM,iBAAiB,GAAG,CAAC,eAAe,EAAE,WAAW,CAAU,CAAC;AAElE,MAAM,wBAAwB,GAAG;IAC/B,WAAW;IACX,OAAO;IACP,SAAS;IACT,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,aAAa;CACL,CAAC;AAEX,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,IAAY,EAAE,SAAiB;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,OAAO,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AAE9F;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,8EAA8E;AAC9E,MAAM,yBAAyB,GAAG;IAChC,cAAc;IACd,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,aAAa;CACd,CAAC;AAEF,SAAS,uBAAuB,CAAC,OAAe,EAAE,SAAiB;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,CAAC,KAAK,CAAC;QACX,GAAG,EAAE,sDAAsD;QAC3D,GAAG,EAAE,oEAAoE;KAC1E,CAAC,CAAC;IACH,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,OAAO,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,MAAM;YACtB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;IACzC,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,gEAAgE;IAC7E,eAAe,EAAE;;;;;;;;;uFASoE;IACrF,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClD,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC;IAE7C,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,sFAAsF;QACtF,IAAI,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAAE,OAAO,EAAE,CAAC;QAEzD,MAAM,CAAC,KAAK,CAAC;YACX,GAAG,EAAE,yDAAyD;YAC9D,GAAG,EAAE,oEAAoE;SAC1E,CAAC,CAAC;QACH,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,uEAAuE;QACvE,qEAAqE;QACrE,wEAAwE;QACxE,sEAAsE;QACtE,iEAAiE;QACjE,EAAE;QACF,sEAAsE;QACtE,4DAA4D;QAC5D,kEAAkE;QAClE,mEAAmE;QACnE,kEAAkE;QAClE,qBAAqB;QACrB,MAAM,QAAQ,GAAG,0CAA0C,CAAC,OAAO,CAAC,CAAC;QAErE,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACpE,KAAK,MAAM,WAAW,IAAI,sBAAsB,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAE3C,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC7D,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,kDAAkD;oBAC3D,QAAQ,EAAE,SAAS;oBACnB,UAAU,EACR,oJAAoJ;oBACtJ,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,IAAI,EAAE,sBAAsB;oBAC5B,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,oEAAoE;YACpE,6DAA6D;YAC7D,oEAAoE;YACpE,4DAA4D;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE1D,IAAI,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,SAAS;YACX,CAAC;YAED,wEAAwE;YACxE,6DAA6D;YAC7D,IACE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC/C,wBAAwB,CAAC,WAAW,CAAC,EACrC,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1D,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,iDAAiD;oBAC1D,QAAQ,EAAE,SAAS;oBACnB,mIAAmI;oBACnI,UAAU,EACR,mLAAmL;oBACrL,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"batch-operations.js","sourceRoot":"","sources":["../../../src/checks/resilience/batch-operations.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dangerous-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/dangerous-config-defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dangerous-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/dangerous-config-defaults.ts"],"names":[],"mappings":"AAEA;;GAEG;AAmTH;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,sCAuDlC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file batch-operation-limits -- iterates bounded collections (config entries, registry items, or small analysis results)
|
|
2
1
|
// @fitness-ignore-file unsafe-secret-comparison -- keyIndex comparisons are search index positions, not cryptographic keys
|
|
3
2
|
// @fitness-ignore-file dangerous-config-defaults -- Fitness check definition references config patterns in longDescription, not actual configuration
|
|
4
3
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dangerous-config-defaults.js","sourceRoot":"","sources":["../../../src/checks/resilience/dangerous-config-defaults.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"dangerous-config-defaults.js","sourceRoot":"","sources":["../../../src/checks/resilience/dangerous-config-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-code-correctness.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/exit-code-correctness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exit-code-correctness.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/exit-code-correctness.ts"],"names":[],"mappings":"AACA;;GAEG;AAuCH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,sCA8E9B,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file project-readme-existence -- internal module, not a package root
|
|
2
1
|
// @fitness-ignore-file fitness-check-coverage -- check implementation with framework-managed coverage
|
|
3
2
|
/**
|
|
4
3
|
* @fileoverview Detects error branches that silently exit with success (exit 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-code-correctness.js","sourceRoot":"","sources":["../../../src/checks/resilience/exit-code-correctness.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"exit-code-correctness.js","sourceRoot":"","sources":["../../../src/checks/resilience/exit-code-correctness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-process-exit-in-finally.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/no-process-exit-in-finally.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-process-exit-in-finally.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/no-process-exit-in-finally.ts"],"names":[],"mappings":"AACA;;GAEG;AAoBH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,sCAyEjC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file project-readme-existence -- internal module, not a package root
|
|
2
1
|
// @fitness-ignore-file fitness-check-coverage -- check implementation with framework-managed coverage
|
|
3
2
|
/**
|
|
4
3
|
* @fileoverview Detects process.exit() usage that bypasses finally blocks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-process-exit-in-finally.js","sourceRoot":"","sources":["../../../src/checks/resilience/no-process-exit-in-finally.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"no-process-exit-in-finally.js","sourceRoot":"","sources":["../../../src/checks/resilience/no-process-exit-in-finally.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAuB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;GAEG;AACH,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAC;IAChD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,4BAA4B;IAClC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,eAAe;IAE9B,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,qDAAqD;IAClE,eAAe,EAAE;;;;;;;;6EAQ0D;IAC3E,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,kBAAkB;QAClB,IACE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,uEAAuE;QACvE,yEAAyE;QACzE,mDAAmD;QACnD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,gCAAgC;QAChC,oBAAoB,CAAC,SAAS,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,qBAAqB;YACrB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxD,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,2EAA2E;gBACpF,QAAQ,EAAE,OAAO;gBACjB,UAAU,EACR,+KAA+K;gBACjL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,+BAA+B;gBACrC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readline-cleanup.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/readline-cleanup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"readline-cleanup.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/readline-cleanup.ts"],"names":[],"mappings":"AACA;;GAEG;AAyBH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,sCA2F1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readline-cleanup.js","sourceRoot":"","sources":["../../../src/checks/resilience/readline-cleanup.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"readline-cleanup.js","sourceRoot":"","sources":["../../../src/checks/resilience/readline-cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reentrancy-guard.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/reentrancy-guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reentrancy-guard.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/reentrancy-guard.ts"],"names":[],"mappings":"AACA;;GAEG;AAmBH;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,sCAuE1B,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file project-readme-existence -- internal module, not a package root
|
|
2
1
|
// @fitness-ignore-file fitness-check-coverage -- check implementation with framework-managed coverage
|
|
3
2
|
/**
|
|
4
3
|
* @fileoverview Detects boolean flag reentrancy guards that should use counters or mutexes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reentrancy-guard.js","sourceRoot":"","sources":["../../../src/checks/resilience/reentrancy-guard.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"reentrancy-guard.js","sourceRoot":"","sources":["../../../src/checks/resilience/reentrancy-guard.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAuB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;GAGG;AACH,MAAM,oBAAoB,GACxB,oGAAoG,CAAC;AAEvG;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,uKAAuK;IACvK,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,aAAa,QAAQ,uBAAuB,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;IACzC,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,eAAe;IAE9B,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,oEAAoE;IACjF,eAAe,EAAE;;;;;;;;;6EAS0D;IAC3E,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;IACjD,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,kBAAkB;QAClB,IACE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,cAAc;QACd,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YAChC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC3B,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,oBAAoB,CAAC,SAAS,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,iDAAiD;YACjD,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAEvD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,6BAA6B,QAAQ,8CAA8C;gBAC5F,QAAQ,EAAE,SAAS;gBACnB,UAAU,EACR,sJAAsJ;gBACxJ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,0BAA0B;gBAChC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-patterns.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/service-patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqIH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"service-patterns.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/service-patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqIH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,sCA0D3B,CAAC;AAMH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,sCAuD/B,CAAC"}
|
|
@@ -145,7 +145,6 @@ export const gracefulShutdown = defineCheck({
|
|
|
145
145
|
}
|
|
146
146
|
// Find service entry violation
|
|
147
147
|
for (const pattern of SERVICE_ENTRY_PATTERNS) {
|
|
148
|
-
// @fitness-ignore-next-line performance-anti-patterns -- false positive: keyword in comment text below, not an async call
|
|
149
148
|
// @lazy-ok -- 'await' appears in suggestion string literal, not actual await
|
|
150
149
|
pattern.lastIndex = 0;
|
|
151
150
|
const match = pattern.exec(content);
|