@trentapps/manager-protocol 1.1.3 → 1.2.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 +28 -0
- package/dist/analyzers/CSSAnalyzer.d.ts +180 -8
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/CSSAnalyzer.js +561 -105
- package/dist/analyzers/CSSAnalyzer.js.map +1 -1
- package/dist/config/dashboard.d.ts +55 -0
- package/dist/config/dashboard.d.ts.map +1 -0
- package/dist/config/dashboard.js +103 -0
- package/dist/config/dashboard.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/dashboard/httpDashboard.d.ts +100 -0
- package/dist/dashboard/httpDashboard.d.ts.map +1 -0
- package/dist/dashboard/httpDashboard.js +1276 -0
- package/dist/dashboard/httpDashboard.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +7 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +370 -2
- package/dist/engine/AuditLogger.d.ts.map +1 -1
- package/dist/engine/AuditLogger.js +1064 -24
- package/dist/engine/AuditLogger.js.map +1 -1
- package/dist/engine/GitHubClient.d.ts +183 -0
- package/dist/engine/GitHubClient.d.ts.map +1 -0
- package/dist/engine/GitHubClient.js +411 -0
- package/dist/engine/GitHubClient.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +5 -3
- package/dist/engine/RateLimiter.d.ts.map +1 -1
- package/dist/engine/RateLimiter.js +49 -72
- package/dist/engine/RateLimiter.js.map +1 -1
- package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
- package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
- package/dist/engine/RuleDependencyAnalyzer.js +475 -0
- package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +102 -3
- package/dist/engine/RulesEngine.d.ts.map +1 -1
- package/dist/engine/RulesEngine.js +326 -21
- package/dist/engine/RulesEngine.js.map +1 -1
- package/dist/engine/TaskManager.d.ts +10 -14
- package/dist/engine/TaskManager.d.ts.map +1 -1
- package/dist/engine/TaskManager.js +169 -197
- package/dist/engine/TaskManager.js.map +1 -1
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +5 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/rules/azure.d.ts.map +1 -1
- package/dist/rules/azure.js +12 -14
- package/dist/rules/azure.js.map +1 -1
- package/dist/rules/compliance.d.ts.map +1 -1
- package/dist/rules/compliance.js +23 -41
- package/dist/rules/compliance.js.map +1 -1
- package/dist/rules/condition-optimizer.d.ts +151 -0
- package/dist/rules/condition-optimizer.d.ts.map +1 -0
- package/dist/rules/condition-optimizer.js +479 -0
- package/dist/rules/condition-optimizer.js.map +1 -0
- package/dist/rules/css.d.ts.map +1 -1
- package/dist/rules/css.js +538 -0
- package/dist/rules/css.js.map +1 -1
- package/dist/rules/field-standards.d.ts +1172 -0
- package/dist/rules/field-standards.d.ts.map +1 -0
- package/dist/rules/field-standards.js +908 -0
- package/dist/rules/field-standards.js.map +1 -0
- package/dist/rules/flask.d.ts.map +1 -1
- package/dist/rules/flask.js +18 -31
- package/dist/rules/flask.js.map +1 -1
- package/dist/rules/index.d.ts +220 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +155 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/ml-ai.d.ts.map +1 -1
- package/dist/rules/ml-ai.js +11 -13
- package/dist/rules/ml-ai.js.map +1 -1
- package/dist/rules/patterns.d.ts +568 -0
- package/dist/rules/patterns.d.ts.map +1 -0
- package/dist/rules/patterns.js +1359 -0
- package/dist/rules/patterns.js.map +1 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +580 -19
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/shared-patterns.d.ts +268 -0
- package/dist/rules/shared-patterns.d.ts.map +1 -0
- package/dist/rules/shared-patterns.js +556 -0
- package/dist/rules/shared-patterns.js.map +1 -0
- package/dist/rules/storage.d.ts +8 -2
- package/dist/rules/storage.d.ts.map +1 -1
- package/dist/rules/storage.js +541 -3
- package/dist/rules/storage.js.map +1 -1
- package/dist/rules/stripe.d.ts.map +1 -1
- package/dist/rules/stripe.js +19 -26
- package/dist/rules/stripe.js.map +1 -1
- package/dist/rules/websocket.d.ts.map +1 -1
- package/dist/rules/websocket.js +32 -40
- package/dist/rules/websocket.js.map +1 -1
- package/dist/supervisor/AgentSupervisor.d.ts +52 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
- package/dist/supervisor/AgentSupervisor.js +120 -1
- package/dist/supervisor/AgentSupervisor.js.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.js +590 -6
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
- package/dist/supervisor/ProjectTracker.d.ts +2 -1
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
- package/dist/supervisor/ProjectTracker.js +5 -9
- package/dist/supervisor/ProjectTracker.js.map +1 -1
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/rule-tester.d.ts +217 -0
- package/dist/testing/rule-tester.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.d.ts +57 -0
- package/dist/testing/rule-tester.examples.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.js +375 -0
- package/dist/testing/rule-tester.examples.js.map +1 -0
- package/dist/testing/rule-tester.js +381 -0
- package/dist/testing/rule-tester.js.map +1 -0
- package/dist/testing/rule-validator.d.ts +141 -0
- package/dist/testing/rule-validator.d.ts.map +1 -0
- package/dist/testing/rule-validator.js +640 -0
- package/dist/testing/rule-validator.js.map +1 -0
- package/dist/types/index.d.ts +265 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +57 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/rate-limiting.d.ts +268 -0
- package/dist/utils/rate-limiting.d.ts.map +1 -0
- package/dist/utils/rate-limiting.js +403 -0
- package/dist/utils/rate-limiting.js.map +1 -0
- package/dist/utils/shared.d.ts +306 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +464 -0
- package/dist/utils/shared.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - Condition Optimizer
|
|
3
|
+
* Task #34: Optimize Inefficient Condition Logic
|
|
4
|
+
*
|
|
5
|
+
* Provides utilities for optimizing rule conditions:
|
|
6
|
+
* - Use `in` operator instead of multiple `equals`
|
|
7
|
+
* - Order conditions for short-circuit optimization
|
|
8
|
+
* - Identify and consolidate redundant conditions
|
|
9
|
+
*/
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// FIELD COST DEFINITIONS
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Default field costs for short-circuit optimization
|
|
15
|
+
* Lower cost = faster to evaluate = should be first
|
|
16
|
+
*/
|
|
17
|
+
export const DEFAULT_FIELD_COSTS = [
|
|
18
|
+
// Lowest cost - simple string/boolean comparisons on common fields
|
|
19
|
+
{ field: 'actionCategory', cost: 1, reason: 'Always present, simple enum comparison' },
|
|
20
|
+
{ field: 'environment', cost: 1, reason: 'Always present, simple string comparison' },
|
|
21
|
+
{ field: 'actionName', cost: 2, reason: 'Always present, string comparison' },
|
|
22
|
+
{ field: 'protocol', cost: 2, reason: 'Usually present, simple string comparison' },
|
|
23
|
+
// Low cost - boolean checks
|
|
24
|
+
{ field: 'authenticated', cost: 3, reason: 'Boolean flag check' },
|
|
25
|
+
{ field: 'sandboxed', cost: 3, reason: 'Boolean flag check' },
|
|
26
|
+
{ field: 'encryptionEnabled', cost: 3, reason: 'Boolean flag check' },
|
|
27
|
+
// Medium cost - may require lookup
|
|
28
|
+
{ field: 'userRole', cost: 5, reason: 'May require role lookup' },
|
|
29
|
+
{ field: 'dataClassification', cost: 5, reason: 'May require data inspection' },
|
|
30
|
+
{ field: 'dataType', cost: 6, reason: 'May require type inference' },
|
|
31
|
+
// Higher cost - numeric comparisons that may involve computation
|
|
32
|
+
{ field: 'recordCount', cost: 7, reason: 'May require counting' },
|
|
33
|
+
{ field: 'estimatedCost', cost: 8, reason: 'May require calculation' },
|
|
34
|
+
{ field: 'tokenCount', cost: 8, reason: 'May require counting' },
|
|
35
|
+
{ field: 'sessionActionCount', cost: 7, reason: 'May require lookup' },
|
|
36
|
+
// Highest cost - regex matching
|
|
37
|
+
{ field: 'query', cost: 10, reason: 'Regex pattern matching' },
|
|
38
|
+
{ field: 'command', cost: 10, reason: 'Regex pattern matching' },
|
|
39
|
+
{ field: 'filePath', cost: 10, reason: 'Regex pattern matching' },
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Get the cost for a field (default cost for unknown fields)
|
|
43
|
+
*/
|
|
44
|
+
function getFieldCost(field) {
|
|
45
|
+
const knownField = DEFAULT_FIELD_COSTS.find(f => f.field === field);
|
|
46
|
+
if (knownField)
|
|
47
|
+
return knownField.cost;
|
|
48
|
+
// Default costs based on field name patterns
|
|
49
|
+
if (field.includes('regex') || field.includes('pattern'))
|
|
50
|
+
return 10;
|
|
51
|
+
if (field.includes('count') || field.includes('size'))
|
|
52
|
+
return 7;
|
|
53
|
+
if (field.startsWith('is') || field.startsWith('has') || field.endsWith('Enabled'))
|
|
54
|
+
return 3;
|
|
55
|
+
return 5; // Default middle cost
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the cost for an operator
|
|
59
|
+
*/
|
|
60
|
+
function getOperatorCost(operator) {
|
|
61
|
+
switch (operator) {
|
|
62
|
+
case 'equals':
|
|
63
|
+
case 'not_equals':
|
|
64
|
+
return 1;
|
|
65
|
+
case 'exists':
|
|
66
|
+
case 'not_exists':
|
|
67
|
+
return 1;
|
|
68
|
+
case 'in':
|
|
69
|
+
case 'not_in':
|
|
70
|
+
return 2;
|
|
71
|
+
case 'contains':
|
|
72
|
+
case 'not_contains':
|
|
73
|
+
return 3;
|
|
74
|
+
case 'greater_than':
|
|
75
|
+
case 'less_than':
|
|
76
|
+
return 2;
|
|
77
|
+
case 'matches_regex':
|
|
78
|
+
return 8;
|
|
79
|
+
case 'custom':
|
|
80
|
+
return 10;
|
|
81
|
+
default:
|
|
82
|
+
return 5;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// OPTIMIZATION FUNCTIONS
|
|
87
|
+
// ============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Combine multiple `equals` conditions on the same field into a single `in` condition
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* Before:
|
|
93
|
+
* { field: 'env', operator: 'equals', value: 'dev' }
|
|
94
|
+
* { field: 'env', operator: 'equals', value: 'staging' }
|
|
95
|
+
*
|
|
96
|
+
* After:
|
|
97
|
+
* { field: 'env', operator: 'in', value: ['dev', 'staging'] }
|
|
98
|
+
*/
|
|
99
|
+
export function combineEqualsToIn(conditions) {
|
|
100
|
+
const changes = [];
|
|
101
|
+
const fieldEqualsMap = new Map();
|
|
102
|
+
const nonEqualsConditions = [];
|
|
103
|
+
// Group equals conditions by field
|
|
104
|
+
for (const condition of conditions) {
|
|
105
|
+
if (condition.operator === 'equals' && condition.value !== null && typeof condition.value !== 'boolean') {
|
|
106
|
+
const existing = fieldEqualsMap.get(condition.field) || [];
|
|
107
|
+
existing.push(condition);
|
|
108
|
+
fieldEqualsMap.set(condition.field, existing);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
nonEqualsConditions.push(condition);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Convert fields with multiple equals to in
|
|
115
|
+
const optimizedConditions = [...nonEqualsConditions];
|
|
116
|
+
for (const [field, equalsConditions] of Array.from(fieldEqualsMap.entries())) {
|
|
117
|
+
if (equalsConditions.length > 1) {
|
|
118
|
+
// Combine into single `in` condition
|
|
119
|
+
const values = equalsConditions.map(c => c.value);
|
|
120
|
+
const newCondition = {
|
|
121
|
+
field,
|
|
122
|
+
operator: 'in',
|
|
123
|
+
value: values
|
|
124
|
+
};
|
|
125
|
+
optimizedConditions.push(newCondition);
|
|
126
|
+
changes.push({
|
|
127
|
+
type: 'combined_to_in',
|
|
128
|
+
description: `Combined ${equalsConditions.length} 'equals' conditions on '${field}' into single 'in' condition`,
|
|
129
|
+
originalConditions: equalsConditions,
|
|
130
|
+
newCondition
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Keep single equals as-is
|
|
135
|
+
optimizedConditions.push(equalsConditions[0]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { conditions: optimizedConditions, changes };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Reorder conditions for optimal short-circuit evaluation
|
|
142
|
+
* Cheaper conditions first, more likely to fail conditions first
|
|
143
|
+
*/
|
|
144
|
+
export function reorderForShortCircuit(conditions) {
|
|
145
|
+
const changes = [];
|
|
146
|
+
// Calculate total cost for each condition
|
|
147
|
+
const conditionsWithCost = conditions.map((condition, originalIndex) => ({
|
|
148
|
+
condition,
|
|
149
|
+
originalIndex,
|
|
150
|
+
cost: getFieldCost(condition.field) + getOperatorCost(condition.operator)
|
|
151
|
+
}));
|
|
152
|
+
// Sort by cost (ascending - cheapest first)
|
|
153
|
+
conditionsWithCost.sort((a, b) => a.cost - b.cost);
|
|
154
|
+
// Check if reordering changed anything
|
|
155
|
+
const wasReordered = conditionsWithCost.some((item, index) => item.originalIndex !== index);
|
|
156
|
+
if (wasReordered) {
|
|
157
|
+
changes.push({
|
|
158
|
+
type: 'reordered',
|
|
159
|
+
description: 'Reordered conditions for optimal short-circuit evaluation (cheapest first)',
|
|
160
|
+
originalConditions: conditions
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
conditions: conditionsWithCost.map(item => item.condition),
|
|
165
|
+
changes
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Remove redundant conditions
|
|
170
|
+
* - Duplicate conditions
|
|
171
|
+
* - Conditions that are subsets of others
|
|
172
|
+
*/
|
|
173
|
+
export function removeRedundant(conditions) {
|
|
174
|
+
const changes = [];
|
|
175
|
+
const seen = new Set();
|
|
176
|
+
const unique = [];
|
|
177
|
+
for (const condition of conditions) {
|
|
178
|
+
// Create a canonical key for the condition
|
|
179
|
+
const key = JSON.stringify({
|
|
180
|
+
field: condition.field,
|
|
181
|
+
operator: condition.operator,
|
|
182
|
+
value: condition.value
|
|
183
|
+
});
|
|
184
|
+
if (!seen.has(key)) {
|
|
185
|
+
seen.add(key);
|
|
186
|
+
unique.push(condition);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
changes.push({
|
|
190
|
+
type: 'removed_redundant',
|
|
191
|
+
description: `Removed duplicate condition on '${condition.field}'`,
|
|
192
|
+
originalConditions: [condition]
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Check for subset conditions (e.g., equals inside in)
|
|
197
|
+
const result = [];
|
|
198
|
+
for (const condition of unique) {
|
|
199
|
+
let isSubset = false;
|
|
200
|
+
if (condition.operator === 'equals') {
|
|
201
|
+
// Check if there's an `in` condition on the same field that contains this value
|
|
202
|
+
const inCondition = unique.find(c => c.field === condition.field &&
|
|
203
|
+
c.operator === 'in' &&
|
|
204
|
+
Array.isArray(c.value) &&
|
|
205
|
+
c.value.includes(condition.value));
|
|
206
|
+
if (inCondition) {
|
|
207
|
+
isSubset = true;
|
|
208
|
+
changes.push({
|
|
209
|
+
type: 'removed_redundant',
|
|
210
|
+
description: `Removed '${condition.field} equals ${condition.value}' as it's covered by 'in' condition`,
|
|
211
|
+
originalConditions: [condition]
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!isSubset) {
|
|
216
|
+
result.push(condition);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return { conditions: result, changes };
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Simplify conditions where possible
|
|
223
|
+
* - Convert single-element `in` to `equals`
|
|
224
|
+
* - Convert `not_in` with single element to `not_equals`
|
|
225
|
+
*/
|
|
226
|
+
export function simplifyConditions(conditions) {
|
|
227
|
+
const changes = [];
|
|
228
|
+
const simplified = [];
|
|
229
|
+
for (const condition of conditions) {
|
|
230
|
+
if (condition.operator === 'in' && Array.isArray(condition.value) && condition.value.length === 1) {
|
|
231
|
+
const newCondition = {
|
|
232
|
+
field: condition.field,
|
|
233
|
+
operator: 'equals',
|
|
234
|
+
value: condition.value[0]
|
|
235
|
+
};
|
|
236
|
+
simplified.push(newCondition);
|
|
237
|
+
changes.push({
|
|
238
|
+
type: 'simplified',
|
|
239
|
+
description: `Simplified single-element 'in' to 'equals' on '${condition.field}'`,
|
|
240
|
+
originalConditions: [condition],
|
|
241
|
+
newCondition
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
else if (condition.operator === 'not_in' && Array.isArray(condition.value) && condition.value.length === 1) {
|
|
245
|
+
const newCondition = {
|
|
246
|
+
field: condition.field,
|
|
247
|
+
operator: 'not_equals',
|
|
248
|
+
value: condition.value[0]
|
|
249
|
+
};
|
|
250
|
+
simplified.push(newCondition);
|
|
251
|
+
changes.push({
|
|
252
|
+
type: 'simplified',
|
|
253
|
+
description: `Simplified single-element 'not_in' to 'not_equals' on '${condition.field}'`,
|
|
254
|
+
originalConditions: [condition],
|
|
255
|
+
newCondition
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
simplified.push(condition);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return { conditions: simplified, changes };
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// MAIN OPTIMIZATION FUNCTION
|
|
266
|
+
// ============================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Optimize rule conditions using all available strategies
|
|
269
|
+
*/
|
|
270
|
+
export function optimizeConditions(conditions) {
|
|
271
|
+
if (!conditions || conditions.length === 0) {
|
|
272
|
+
return {
|
|
273
|
+
original: conditions,
|
|
274
|
+
optimized: conditions,
|
|
275
|
+
changes: [],
|
|
276
|
+
wasOptimized: false,
|
|
277
|
+
estimatedImprovement: 0
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
const allChanges = [];
|
|
281
|
+
let currentConditions = [...conditions];
|
|
282
|
+
// Step 1: Remove redundant conditions first
|
|
283
|
+
const redundantResult = removeRedundant(currentConditions);
|
|
284
|
+
currentConditions = redundantResult.conditions;
|
|
285
|
+
allChanges.push(...redundantResult.changes);
|
|
286
|
+
// Step 2: Combine equals to in
|
|
287
|
+
const combineResult = combineEqualsToIn(currentConditions);
|
|
288
|
+
currentConditions = combineResult.conditions;
|
|
289
|
+
allChanges.push(...combineResult.changes);
|
|
290
|
+
// Step 3: Simplify conditions
|
|
291
|
+
const simplifyResult = simplifyConditions(currentConditions);
|
|
292
|
+
currentConditions = simplifyResult.conditions;
|
|
293
|
+
allChanges.push(...simplifyResult.changes);
|
|
294
|
+
// Step 4: Reorder for short-circuit optimization
|
|
295
|
+
const reorderResult = reorderForShortCircuit(currentConditions);
|
|
296
|
+
currentConditions = reorderResult.conditions;
|
|
297
|
+
allChanges.push(...reorderResult.changes);
|
|
298
|
+
// Calculate estimated improvement
|
|
299
|
+
let improvement = 0;
|
|
300
|
+
if (allChanges.length > 0) {
|
|
301
|
+
// Each change type contributes to improvement
|
|
302
|
+
for (const change of allChanges) {
|
|
303
|
+
switch (change.type) {
|
|
304
|
+
case 'combined_to_in':
|
|
305
|
+
improvement += 0.1; // 10% per combination
|
|
306
|
+
break;
|
|
307
|
+
case 'removed_redundant':
|
|
308
|
+
improvement += 0.15; // 15% per redundant removal
|
|
309
|
+
break;
|
|
310
|
+
case 'reordered':
|
|
311
|
+
improvement += 0.05; // 5% for reordering
|
|
312
|
+
break;
|
|
313
|
+
case 'simplified':
|
|
314
|
+
improvement += 0.05; // 5% per simplification
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
improvement = Math.min(improvement, 1); // Cap at 100%
|
|
319
|
+
}
|
|
320
|
+
return {
|
|
321
|
+
original: conditions,
|
|
322
|
+
optimized: currentConditions,
|
|
323
|
+
changes: allChanges,
|
|
324
|
+
wasOptimized: allChanges.length > 0,
|
|
325
|
+
estimatedImprovement: improvement
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Optimize all conditions in a rule
|
|
330
|
+
*/
|
|
331
|
+
export function optimizeRule(rule) {
|
|
332
|
+
const result = optimizeConditions(rule.conditions);
|
|
333
|
+
return {
|
|
334
|
+
rule: {
|
|
335
|
+
...rule,
|
|
336
|
+
conditions: result.optimized
|
|
337
|
+
},
|
|
338
|
+
result
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Optimize all rules and return summary
|
|
343
|
+
*/
|
|
344
|
+
export function optimizeRules(rules) {
|
|
345
|
+
const optimizedRules = [];
|
|
346
|
+
const details = [];
|
|
347
|
+
let totalChanges = 0;
|
|
348
|
+
let optimizedCount = 0;
|
|
349
|
+
let totalImprovement = 0;
|
|
350
|
+
const changesByType = {
|
|
351
|
+
combined_to_in: 0,
|
|
352
|
+
reordered: 0,
|
|
353
|
+
removed_redundant: 0,
|
|
354
|
+
simplified: 0
|
|
355
|
+
};
|
|
356
|
+
for (const rule of rules) {
|
|
357
|
+
const { rule: optimizedRule, result } = optimizeRule(rule);
|
|
358
|
+
optimizedRules.push(optimizedRule);
|
|
359
|
+
if (result.wasOptimized) {
|
|
360
|
+
optimizedCount++;
|
|
361
|
+
totalImprovement += result.estimatedImprovement;
|
|
362
|
+
details.push({
|
|
363
|
+
ruleId: rule.id,
|
|
364
|
+
ruleName: rule.name,
|
|
365
|
+
result
|
|
366
|
+
});
|
|
367
|
+
for (const change of result.changes) {
|
|
368
|
+
totalChanges++;
|
|
369
|
+
changesByType[change.type] = (changesByType[change.type] || 0) + 1;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
rules: optimizedRules,
|
|
375
|
+
summary: {
|
|
376
|
+
totalRules: rules.length,
|
|
377
|
+
optimizedRules: optimizedCount,
|
|
378
|
+
totalChanges,
|
|
379
|
+
changesByType,
|
|
380
|
+
averageImprovement: optimizedCount > 0 ? totalImprovement / optimizedCount : 0
|
|
381
|
+
},
|
|
382
|
+
details
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
// ============================================================================
|
|
386
|
+
// ANALYSIS FUNCTIONS
|
|
387
|
+
// ============================================================================
|
|
388
|
+
/**
|
|
389
|
+
* Analyze rules for optimization opportunities without modifying them
|
|
390
|
+
*/
|
|
391
|
+
export function analyzeRulesForOptimization(rules) {
|
|
392
|
+
const opportunities = [];
|
|
393
|
+
for (const rule of rules) {
|
|
394
|
+
const issues = [];
|
|
395
|
+
let potentialImprovement = 0;
|
|
396
|
+
// Check for multiple equals on same field
|
|
397
|
+
const fieldEqualsCount = new Map();
|
|
398
|
+
for (const condition of rule.conditions) {
|
|
399
|
+
if (condition.operator === 'equals') {
|
|
400
|
+
fieldEqualsCount.set(condition.field, (fieldEqualsCount.get(condition.field) || 0) + 1);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
for (const [field, count] of Array.from(fieldEqualsCount.entries())) {
|
|
404
|
+
if (count > 1) {
|
|
405
|
+
issues.push(`${count} 'equals' conditions on '${field}' could be combined into single 'in'`);
|
|
406
|
+
potentialImprovement += 0.1;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Check for single-element in conditions
|
|
410
|
+
for (const condition of rule.conditions) {
|
|
411
|
+
if (condition.operator === 'in' && Array.isArray(condition.value) && condition.value.length === 1) {
|
|
412
|
+
issues.push(`Single-element 'in' on '${condition.field}' could be simplified to 'equals'`);
|
|
413
|
+
potentialImprovement += 0.05;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// Check for suboptimal ordering (regex conditions before simple comparisons)
|
|
417
|
+
let hasRegexBeforeSimple = false;
|
|
418
|
+
let foundSimple = false;
|
|
419
|
+
for (let i = rule.conditions.length - 1; i >= 0; i--) {
|
|
420
|
+
const cond = rule.conditions[i];
|
|
421
|
+
if (cond.operator === 'equals' || cond.operator === 'in') {
|
|
422
|
+
foundSimple = true;
|
|
423
|
+
}
|
|
424
|
+
else if (cond.operator === 'matches_regex' && foundSimple) {
|
|
425
|
+
hasRegexBeforeSimple = true;
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (hasRegexBeforeSimple) {
|
|
430
|
+
issues.push('Regex conditions before simple comparisons - reorder for short-circuit optimization');
|
|
431
|
+
potentialImprovement += 0.05;
|
|
432
|
+
}
|
|
433
|
+
// Check for duplicate conditions
|
|
434
|
+
const seen = new Set();
|
|
435
|
+
for (const condition of rule.conditions) {
|
|
436
|
+
const key = JSON.stringify({ field: condition.field, operator: condition.operator, value: condition.value });
|
|
437
|
+
if (seen.has(key)) {
|
|
438
|
+
issues.push(`Duplicate condition on '${condition.field}'`);
|
|
439
|
+
potentialImprovement += 0.15;
|
|
440
|
+
}
|
|
441
|
+
seen.add(key);
|
|
442
|
+
}
|
|
443
|
+
if (issues.length > 0) {
|
|
444
|
+
opportunities.push({
|
|
445
|
+
ruleId: rule.id,
|
|
446
|
+
ruleName: rule.name,
|
|
447
|
+
issues,
|
|
448
|
+
potentialImprovement: Math.min(potentialImprovement, 1)
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
opportunities,
|
|
454
|
+
summary: {
|
|
455
|
+
totalOpportunities: opportunities.reduce((sum, o) => sum + o.issues.length, 0),
|
|
456
|
+
rulesWithIssues: opportunities.length
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
// ============================================================================
|
|
461
|
+
// EXPORTS
|
|
462
|
+
// ============================================================================
|
|
463
|
+
export default {
|
|
464
|
+
// Main optimization functions
|
|
465
|
+
optimizeConditions,
|
|
466
|
+
optimizeRule,
|
|
467
|
+
optimizeRules,
|
|
468
|
+
// Individual optimization strategies
|
|
469
|
+
combineEqualsToIn,
|
|
470
|
+
reorderForShortCircuit,
|
|
471
|
+
removeRedundant,
|
|
472
|
+
simplifyConditions,
|
|
473
|
+
// Analysis
|
|
474
|
+
analyzeRulesForOptimization,
|
|
475
|
+
// Cost definitions
|
|
476
|
+
DEFAULT_FIELD_COSTS,
|
|
477
|
+
getFieldCost
|
|
478
|
+
};
|
|
479
|
+
//# sourceMappingURL=condition-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-optimizer.js","sourceRoot":"","sources":["../../src/rules/condition-optimizer.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/rules/css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/rules/css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,YAAY,EA2vDlC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|