typekro 0.2.2 → 0.3.1
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 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +15 -2
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.js +24 -25
- package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/dependencies/type-guards.d.ts.map +1 -1
- package/dist/core/dependencies/type-guards.js +7 -2
- package/dist/core/dependencies/type-guards.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +13 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +48 -3
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/errors.d.ts +85 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +135 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -1
- package/dist/core/evaluation/cel-optimizer.js +7 -13
- package/dist/core/evaluation/cel-optimizer.js.map +1 -1
- package/dist/core/expressions/analyzer.d.ts +584 -0
- package/dist/core/expressions/analyzer.d.ts.map +1 -0
- package/dist/core/expressions/analyzer.js +2956 -0
- package/dist/core/expressions/analyzer.js.map +1 -0
- package/dist/core/expressions/cache.d.ts +136 -0
- package/dist/core/expressions/cache.d.ts.map +1 -0
- package/dist/core/expressions/cache.js +347 -0
- package/dist/core/expressions/cache.js.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts +126 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.js +293 -0
- package/dist/core/expressions/cel-conversion-engine.js.map +1 -0
- package/dist/core/expressions/compile-time-validation.d.ts +270 -0
- package/dist/core/expressions/compile-time-validation.d.ts.map +1 -0
- package/dist/core/expressions/compile-time-validation.js +506 -0
- package/dist/core/expressions/compile-time-validation.js.map +1 -0
- package/dist/core/expressions/composition-integration.d.ts +315 -0
- package/dist/core/expressions/composition-integration.d.ts.map +1 -0
- package/dist/core/expressions/composition-integration.js +936 -0
- package/dist/core/expressions/composition-integration.js.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts +154 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.js +479 -0
- package/dist/core/expressions/conditional-expression-processor.js.map +1 -0
- package/dist/core/expressions/conditional-integration.d.ts +133 -0
- package/dist/core/expressions/conditional-integration.d.ts.map +1 -0
- package/dist/core/expressions/conditional-integration.js +293 -0
- package/dist/core/expressions/conditional-integration.js.map +1 -0
- package/dist/core/expressions/conditional-validation.d.ts +181 -0
- package/dist/core/expressions/conditional-validation.d.ts.map +1 -0
- package/dist/core/expressions/conditional-validation.js +460 -0
- package/dist/core/expressions/conditional-validation.js.map +1 -0
- package/dist/core/expressions/context-aware-generator.d.ts +127 -0
- package/dist/core/expressions/context-aware-generator.d.ts.map +1 -0
- package/dist/core/expressions/context-aware-generator.js +500 -0
- package/dist/core/expressions/context-aware-generator.js.map +1 -0
- package/dist/core/expressions/context-detector.d.ts +148 -0
- package/dist/core/expressions/context-detector.d.ts.map +1 -0
- package/dist/core/expressions/context-detector.js +546 -0
- package/dist/core/expressions/context-detector.js.map +1 -0
- package/dist/core/expressions/context-switcher.d.ts +185 -0
- package/dist/core/expressions/context-switcher.d.ts.map +1 -0
- package/dist/core/expressions/context-switcher.js +515 -0
- package/dist/core/expressions/context-switcher.js.map +1 -0
- package/dist/core/expressions/context-validator.d.ts +176 -0
- package/dist/core/expressions/context-validator.d.ts.map +1 -0
- package/dist/core/expressions/context-validator.js +452 -0
- package/dist/core/expressions/context-validator.js.map +1 -0
- package/dist/core/expressions/custom-context-manager.d.ts +194 -0
- package/dist/core/expressions/custom-context-manager.d.ts.map +1 -0
- package/dist/core/expressions/custom-context-manager.js +390 -0
- package/dist/core/expressions/custom-context-manager.js.map +1 -0
- package/dist/core/expressions/expression-proxy.d.ts +80 -0
- package/dist/core/expressions/expression-proxy.d.ts.map +1 -0
- package/dist/core/expressions/expression-proxy.js +227 -0
- package/dist/core/expressions/expression-proxy.js.map +1 -0
- package/dist/core/expressions/factory-integration.d.ts +132 -0
- package/dist/core/expressions/factory-integration.d.ts.map +1 -0
- package/dist/core/expressions/factory-integration.js +327 -0
- package/dist/core/expressions/factory-integration.js.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts +88 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.js +336 -0
- package/dist/core/expressions/factory-pattern-handler.js.map +1 -0
- package/dist/core/expressions/field-hydration-processor.d.ts +188 -0
- package/dist/core/expressions/field-hydration-processor.d.ts.map +1 -0
- package/dist/core/expressions/field-hydration-processor.js +562 -0
- package/dist/core/expressions/field-hydration-processor.js.map +1 -0
- package/dist/core/expressions/imperative-analyzer.d.ts +21 -0
- package/dist/core/expressions/imperative-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/imperative-analyzer.js +457 -0
- package/dist/core/expressions/imperative-analyzer.js.map +1 -0
- package/dist/core/expressions/index.d.ts +54 -0
- package/dist/core/expressions/index.d.ts.map +1 -0
- package/dist/core/expressions/index.js +50 -0
- package/dist/core/expressions/index.js.map +1 -0
- package/dist/core/expressions/lazy-analysis.d.ts +1128 -0
- package/dist/core/expressions/lazy-analysis.d.ts.map +1 -0
- package/dist/core/expressions/lazy-analysis.js +2443 -0
- package/dist/core/expressions/lazy-analysis.js.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts +123 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.js +352 -0
- package/dist/core/expressions/magic-assignable-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts +206 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.js +639 -0
- package/dist/core/expressions/magic-proxy-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts +154 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.js +242 -0
- package/dist/core/expressions/magic-proxy-detector.js.map +1 -0
- package/dist/core/expressions/migration-helpers.d.ts +133 -0
- package/dist/core/expressions/migration-helpers.d.ts.map +1 -0
- package/dist/core/expressions/migration-helpers.js +443 -0
- package/dist/core/expressions/migration-helpers.js.map +1 -0
- package/dist/core/expressions/optionality-handler.d.ts +503 -0
- package/dist/core/expressions/optionality-handler.d.ts.map +1 -0
- package/dist/core/expressions/optionality-handler.js +1306 -0
- package/dist/core/expressions/optionality-handler.js.map +1 -0
- package/dist/core/expressions/readiness-integration.d.ts +119 -0
- package/dist/core/expressions/readiness-integration.d.ts.map +1 -0
- package/dist/core/expressions/readiness-integration.js +386 -0
- package/dist/core/expressions/readiness-integration.js.map +1 -0
- package/dist/core/expressions/resource-analyzer.d.ts +486 -0
- package/dist/core/expressions/resource-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/resource-analyzer.js +1086 -0
- package/dist/core/expressions/resource-analyzer.js.map +1 -0
- package/dist/core/expressions/resource-validation.d.ts +187 -0
- package/dist/core/expressions/resource-validation.d.ts.map +1 -0
- package/dist/core/expressions/resource-validation.js +552 -0
- package/dist/core/expressions/resource-validation.js.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts +138 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.js +412 -0
- package/dist/core/expressions/runtime-error-mapper.js.map +1 -0
- package/dist/core/expressions/source-map.d.ts +168 -0
- package/dist/core/expressions/source-map.d.ts.map +1 -0
- package/dist/core/expressions/source-map.js +350 -0
- package/dist/core/expressions/source-map.js.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts +353 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.js +1311 -0
- package/dist/core/expressions/status-builder-analyzer.js.map +1 -0
- package/dist/core/expressions/type-inference.d.ts +184 -0
- package/dist/core/expressions/type-inference.d.ts.map +1 -0
- package/dist/core/expressions/type-inference.js +838 -0
- package/dist/core/expressions/type-inference.js.map +1 -0
- package/dist/core/expressions/type-safety.d.ts +203 -0
- package/dist/core/expressions/type-safety.d.ts.map +1 -0
- package/dist/core/expressions/type-safety.js +442 -0
- package/dist/core/expressions/type-safety.js.map +1 -0
- package/dist/core/expressions/types.d.ts +282 -0
- package/dist/core/expressions/types.d.ts.map +1 -0
- package/dist/core/expressions/types.js +8 -0
- package/dist/core/expressions/types.js.map +1 -0
- package/dist/core/kubernetes/client-provider.js +2 -2
- package/dist/core/kubernetes/client-provider.js.map +1 -1
- package/dist/core/references/cel.d.ts +13 -1
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +50 -0
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +13 -8
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +573 -9
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/types/deployment.d.ts +7 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/deployment.js +7 -0
- package/dist/core/types/deployment.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +4 -8
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +0 -5
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/types.d.ts +1 -1
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/index.js +1 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/shared.d.ts.map +1 -1
- package/dist/factories/shared.js +21 -1
- package/dist/factories/shared.js.map +1 -1
- package/dist/factories/simple/index.d.ts +2 -2
- package/dist/factories/simple/index.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.d.ts +3 -3
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.js +37 -11
- package/dist/factories/simple/workloads/deployment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/type-guards.d.ts +6 -0
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js +25 -2
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-Appropriate Expression Validation with Magic Proxy Integration
|
|
3
|
+
*
|
|
4
|
+
* This module provides validation for JavaScript expressions containing KubernetesRef objects
|
|
5
|
+
* to ensure they are appropriate for their usage context and work correctly with the magic proxy system.
|
|
6
|
+
*/
|
|
7
|
+
import type { KubernetesRef } from '../types/common.js';
|
|
8
|
+
import type { Enhanced } from '../types/kubernetes.js';
|
|
9
|
+
import type { SchemaProxy } from '../types/serialization.js';
|
|
10
|
+
import type { ExpressionContext } from './context-detector.js';
|
|
11
|
+
/**
|
|
12
|
+
* Validation severity levels
|
|
13
|
+
*/
|
|
14
|
+
export type ValidationSeverity = 'error' | 'warning' | 'info';
|
|
15
|
+
/**
|
|
16
|
+
* Context validation rule
|
|
17
|
+
*/
|
|
18
|
+
export interface ContextValidationRule {
|
|
19
|
+
/** Rule identifier */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Rule name */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Rule description */
|
|
24
|
+
description: string;
|
|
25
|
+
/** Contexts where this rule applies */
|
|
26
|
+
applicableContexts: ExpressionContext[];
|
|
27
|
+
/** Severity of violations */
|
|
28
|
+
severity: ValidationSeverity;
|
|
29
|
+
/** Validation function */
|
|
30
|
+
validate: (expression: any, kubernetesRefs: KubernetesRef<any>[], context: ExpressionContext, config: ContextValidationConfig) => ContextValidationRuleResult;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validation result for a single rule
|
|
34
|
+
*/
|
|
35
|
+
export interface ContextValidationRuleResult {
|
|
36
|
+
/** Whether the validation passed */
|
|
37
|
+
valid: boolean;
|
|
38
|
+
/** Validation message */
|
|
39
|
+
message: string;
|
|
40
|
+
/** Suggested fixes */
|
|
41
|
+
suggestions?: string[];
|
|
42
|
+
/** Additional metadata */
|
|
43
|
+
metadata?: Record<string, any>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Context validation configuration
|
|
47
|
+
*/
|
|
48
|
+
export interface ContextValidationConfig {
|
|
49
|
+
/** Available resources for validation */
|
|
50
|
+
availableResources?: Record<string, Enhanced<any, any>>;
|
|
51
|
+
/** Schema proxy for schema field validation */
|
|
52
|
+
schemaProxy?: SchemaProxy<any, any>;
|
|
53
|
+
/** Factory type being used */
|
|
54
|
+
factoryType?: 'direct' | 'kro';
|
|
55
|
+
/** Whether to perform strict validation */
|
|
56
|
+
strictMode?: boolean;
|
|
57
|
+
/** Whether to validate magic proxy integration */
|
|
58
|
+
validateMagicProxy?: boolean;
|
|
59
|
+
/** Custom validation rules */
|
|
60
|
+
customRules?: ContextValidationRule[];
|
|
61
|
+
/** Rules to skip */
|
|
62
|
+
skipRules?: string[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Complete validation report
|
|
66
|
+
*/
|
|
67
|
+
export interface ContextValidationReport {
|
|
68
|
+
/** Overall validation status */
|
|
69
|
+
valid: boolean;
|
|
70
|
+
/** Expression that was validated */
|
|
71
|
+
expression: any;
|
|
72
|
+
/** Context that was validated */
|
|
73
|
+
context: ExpressionContext;
|
|
74
|
+
/** KubernetesRef objects found */
|
|
75
|
+
kubernetesRefs: KubernetesRef<any>[];
|
|
76
|
+
/** Validation results by rule */
|
|
77
|
+
ruleResults: Map<string, ContextValidationRuleResult>;
|
|
78
|
+
/** Errors found */
|
|
79
|
+
errors: ValidationIssue[];
|
|
80
|
+
/** Warnings found */
|
|
81
|
+
warnings: ValidationIssue[];
|
|
82
|
+
/** Info messages */
|
|
83
|
+
info: ValidationIssue[];
|
|
84
|
+
/** Overall confidence score (0-1) */
|
|
85
|
+
confidence: number;
|
|
86
|
+
/** Suggested improvements */
|
|
87
|
+
suggestions: string[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Validation issue
|
|
91
|
+
*/
|
|
92
|
+
export interface ValidationIssue {
|
|
93
|
+
/** Rule that generated this issue */
|
|
94
|
+
ruleId: string;
|
|
95
|
+
/** Issue severity */
|
|
96
|
+
severity: ValidationSeverity;
|
|
97
|
+
/** Issue message */
|
|
98
|
+
message: string;
|
|
99
|
+
/** Suggested fixes */
|
|
100
|
+
suggestions: string[];
|
|
101
|
+
/** Location information if available */
|
|
102
|
+
location?: {
|
|
103
|
+
line?: number;
|
|
104
|
+
column?: number;
|
|
105
|
+
length?: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Context-aware expression validator
|
|
110
|
+
*/
|
|
111
|
+
export declare class ContextExpressionValidator {
|
|
112
|
+
private rules;
|
|
113
|
+
constructor();
|
|
114
|
+
/**
|
|
115
|
+
* Validate an expression for context appropriateness
|
|
116
|
+
*/
|
|
117
|
+
validateExpression(expression: any, context: ExpressionContext, config?: ContextValidationConfig): ContextValidationReport;
|
|
118
|
+
/**
|
|
119
|
+
* Add a custom validation rule
|
|
120
|
+
*/
|
|
121
|
+
addRule(rule: ContextValidationRule): void;
|
|
122
|
+
/**
|
|
123
|
+
* Remove a validation rule
|
|
124
|
+
*/
|
|
125
|
+
removeRule(ruleId: string): void;
|
|
126
|
+
/**
|
|
127
|
+
* Get all available rules
|
|
128
|
+
*/
|
|
129
|
+
getRules(): ContextValidationRule[];
|
|
130
|
+
/**
|
|
131
|
+
* Initialize default validation rules
|
|
132
|
+
*/
|
|
133
|
+
private initializeDefaultRules;
|
|
134
|
+
/**
|
|
135
|
+
* Extract KubernetesRef objects from expression
|
|
136
|
+
*/
|
|
137
|
+
private extractKubernetesRefs;
|
|
138
|
+
/**
|
|
139
|
+
* Recursively extract KubernetesRef objects
|
|
140
|
+
*/
|
|
141
|
+
private recursivelyExtractRefs;
|
|
142
|
+
/**
|
|
143
|
+
* Get applicable rules for a context
|
|
144
|
+
*/
|
|
145
|
+
private getApplicableRules;
|
|
146
|
+
/**
|
|
147
|
+
* Calculate confidence score based on validation results
|
|
148
|
+
*/
|
|
149
|
+
private calculateConfidence;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validation utilities
|
|
153
|
+
*/
|
|
154
|
+
export declare class ContextValidationUtils {
|
|
155
|
+
/**
|
|
156
|
+
* Create a validation report summary
|
|
157
|
+
*/
|
|
158
|
+
static createSummary(report: ContextValidationReport): string;
|
|
159
|
+
/**
|
|
160
|
+
* Format validation issues for display
|
|
161
|
+
*/
|
|
162
|
+
static formatIssues(issues: ValidationIssue[]): string[];
|
|
163
|
+
/**
|
|
164
|
+
* Check if a validation report indicates the expression is safe to use
|
|
165
|
+
*/
|
|
166
|
+
static isSafeToUse(report: ContextValidationReport): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Get the most critical issues from a validation report
|
|
169
|
+
*/
|
|
170
|
+
static getCriticalIssues(report: ContextValidationReport): ValidationIssue[];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Default context validator instance
|
|
174
|
+
*/
|
|
175
|
+
export declare const contextValidator: ContextExpressionValidator;
|
|
176
|
+
//# sourceMappingURL=context-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-validator.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/context-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-Appropriate Expression Validation with Magic Proxy Integration
|
|
3
|
+
*
|
|
4
|
+
* This module provides validation for JavaScript expressions containing KubernetesRef objects
|
|
5
|
+
* to ensure they are appropriate for their usage context and work correctly with the magic proxy system.
|
|
6
|
+
*/
|
|
7
|
+
import { isKubernetesRef, } from '../../utils/type-guards.js';
|
|
8
|
+
/**
|
|
9
|
+
* Context-aware expression validator
|
|
10
|
+
*/
|
|
11
|
+
export class ContextExpressionValidator {
|
|
12
|
+
rules = new Map();
|
|
13
|
+
constructor() {
|
|
14
|
+
this.initializeDefaultRules();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validate an expression for context appropriateness
|
|
18
|
+
*/
|
|
19
|
+
validateExpression(expression, context, config = {}) {
|
|
20
|
+
const kubernetesRefs = this.extractKubernetesRefs(expression);
|
|
21
|
+
const ruleResults = new Map();
|
|
22
|
+
const errors = [];
|
|
23
|
+
const warnings = [];
|
|
24
|
+
const info = [];
|
|
25
|
+
const suggestions = [];
|
|
26
|
+
// Get applicable rules for this context
|
|
27
|
+
const applicableRules = this.getApplicableRules(context, config);
|
|
28
|
+
// Run each applicable rule
|
|
29
|
+
for (const rule of applicableRules) {
|
|
30
|
+
if (config.skipRules?.includes(rule.id)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const result = rule.validate(expression, kubernetesRefs, context, config);
|
|
35
|
+
ruleResults.set(rule.id, result);
|
|
36
|
+
if (!result.valid) {
|
|
37
|
+
const issue = {
|
|
38
|
+
ruleId: rule.id,
|
|
39
|
+
severity: rule.severity,
|
|
40
|
+
message: result.message,
|
|
41
|
+
suggestions: result.suggestions || []
|
|
42
|
+
};
|
|
43
|
+
switch (rule.severity) {
|
|
44
|
+
case 'error':
|
|
45
|
+
errors.push(issue);
|
|
46
|
+
break;
|
|
47
|
+
case 'warning':
|
|
48
|
+
warnings.push(issue);
|
|
49
|
+
break;
|
|
50
|
+
case 'info':
|
|
51
|
+
info.push(issue);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
if (result.suggestions) {
|
|
55
|
+
suggestions.push(...result.suggestions);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
// Rule execution failed
|
|
61
|
+
const issue = {
|
|
62
|
+
ruleId: rule.id,
|
|
63
|
+
severity: 'error',
|
|
64
|
+
message: `Rule execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
65
|
+
suggestions: [`Check the ${rule.name} rule implementation`]
|
|
66
|
+
};
|
|
67
|
+
errors.push(issue);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Calculate overall validation status and confidence
|
|
71
|
+
const valid = errors.length === 0;
|
|
72
|
+
const confidence = this.calculateConfidence(ruleResults, errors, warnings);
|
|
73
|
+
return {
|
|
74
|
+
valid,
|
|
75
|
+
expression,
|
|
76
|
+
context,
|
|
77
|
+
kubernetesRefs,
|
|
78
|
+
ruleResults,
|
|
79
|
+
errors,
|
|
80
|
+
warnings,
|
|
81
|
+
info,
|
|
82
|
+
confidence,
|
|
83
|
+
suggestions: [...new Set(suggestions)] // Remove duplicates
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Add a custom validation rule
|
|
88
|
+
*/
|
|
89
|
+
addRule(rule) {
|
|
90
|
+
this.rules.set(rule.id, rule);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove a validation rule
|
|
94
|
+
*/
|
|
95
|
+
removeRule(ruleId) {
|
|
96
|
+
this.rules.delete(ruleId);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get all available rules
|
|
100
|
+
*/
|
|
101
|
+
getRules() {
|
|
102
|
+
return Array.from(this.rules.values());
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Initialize default validation rules
|
|
106
|
+
*/
|
|
107
|
+
initializeDefaultRules() {
|
|
108
|
+
// Rule: Status builder should reference status fields
|
|
109
|
+
this.addRule({
|
|
110
|
+
id: 'status-builder-references',
|
|
111
|
+
name: 'Status Builder References',
|
|
112
|
+
description: 'Status builders should primarily reference status fields from resources',
|
|
113
|
+
applicableContexts: ['status-builder'],
|
|
114
|
+
severity: 'warning',
|
|
115
|
+
validate: (_expression, kubernetesRefs, _context, _config) => {
|
|
116
|
+
const statusRefs = kubernetesRefs.filter(ref => ref.fieldPath.includes('status') || ref.resourceId === '__schema__');
|
|
117
|
+
if (statusRefs.length === 0 && kubernetesRefs.length > 0) {
|
|
118
|
+
return {
|
|
119
|
+
valid: false,
|
|
120
|
+
message: 'Status builders should typically reference status fields or schema',
|
|
121
|
+
suggestions: [
|
|
122
|
+
'Consider referencing resource.status.* fields',
|
|
123
|
+
'Use schema.* references for input values'
|
|
124
|
+
]
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return { valid: true, message: 'Status references are appropriate' };
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
// Rule: Resource builder should reference spec fields or schema
|
|
131
|
+
this.addRule({
|
|
132
|
+
id: 'resource-builder-references',
|
|
133
|
+
name: 'Resource Builder References',
|
|
134
|
+
description: 'Resource builders should reference spec fields or schema values',
|
|
135
|
+
applicableContexts: ['resource-builder'],
|
|
136
|
+
severity: 'warning',
|
|
137
|
+
validate: (_expression, kubernetesRefs, _context, _config) => {
|
|
138
|
+
const inappropriateRefs = kubernetesRefs.filter(ref => ref.resourceId !== '__schema__' &&
|
|
139
|
+
!ref.fieldPath.includes('spec') &&
|
|
140
|
+
!ref.fieldPath.includes('metadata'));
|
|
141
|
+
if (inappropriateRefs.length > 0) {
|
|
142
|
+
return {
|
|
143
|
+
valid: false,
|
|
144
|
+
message: `Resource builders should avoid referencing status fields: ${inappropriateRefs.map(r => `${r.resourceId}.${r.fieldPath}`).join(', ')}`,
|
|
145
|
+
suggestions: [
|
|
146
|
+
'Use schema.* references for configuration values',
|
|
147
|
+
'Reference other resources\' spec fields if needed',
|
|
148
|
+
'Consider if this should be in a status builder instead'
|
|
149
|
+
]
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return { valid: true, message: 'Resource references are appropriate' };
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// Rule: Conditional expressions should be boolean-evaluable
|
|
156
|
+
this.addRule({
|
|
157
|
+
id: 'conditional-boolean-result',
|
|
158
|
+
name: 'Conditional Boolean Result',
|
|
159
|
+
description: 'Conditional expressions should evaluate to boolean values',
|
|
160
|
+
applicableContexts: ['conditional', 'readiness'],
|
|
161
|
+
severity: 'error',
|
|
162
|
+
validate: (expression, kubernetesRefs, _context, _config) => {
|
|
163
|
+
// Check if the expression structure suggests boolean evaluation
|
|
164
|
+
const expressionString = String(expression);
|
|
165
|
+
const hasBooleanOperators = /[><=!]=?|&&|\|\||!/.test(expressionString);
|
|
166
|
+
const hasBooleanKeywords = /ready|available|enabled|disabled|true|false/i.test(expressionString);
|
|
167
|
+
const referencesReadyFields = kubernetesRefs.some(ref => ref.fieldPath.includes('ready') ||
|
|
168
|
+
ref.fieldPath.includes('available') ||
|
|
169
|
+
ref.fieldPath.includes('conditions'));
|
|
170
|
+
if (!hasBooleanOperators && !hasBooleanKeywords && !referencesReadyFields) {
|
|
171
|
+
return {
|
|
172
|
+
valid: false,
|
|
173
|
+
message: 'Conditional expressions should evaluate to boolean values',
|
|
174
|
+
suggestions: [
|
|
175
|
+
'Add comparison operators (>, <, ==, !=)',
|
|
176
|
+
'Reference boolean fields like .ready or .available',
|
|
177
|
+
'Use logical operators (&&, ||, !)',
|
|
178
|
+
'Check conditions array with .find() or .some()'
|
|
179
|
+
]
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return { valid: true, message: 'Expression appears to evaluate to boolean' };
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
// Rule: Resource references should exist
|
|
186
|
+
this.addRule({
|
|
187
|
+
id: 'resource-existence',
|
|
188
|
+
name: 'Resource Existence',
|
|
189
|
+
description: 'Referenced resources should exist in the available resources',
|
|
190
|
+
applicableContexts: ['status-builder', 'resource-builder', 'conditional', 'readiness'],
|
|
191
|
+
severity: 'error',
|
|
192
|
+
validate: (_expression, kubernetesRefs, _context, config) => {
|
|
193
|
+
if (!config.availableResources) {
|
|
194
|
+
return { valid: true, message: 'No resource validation available' };
|
|
195
|
+
}
|
|
196
|
+
const missingResources = kubernetesRefs
|
|
197
|
+
.filter(ref => ref.resourceId !== '__schema__')
|
|
198
|
+
.filter(ref => !config.availableResources?.[ref.resourceId]);
|
|
199
|
+
if (missingResources.length > 0) {
|
|
200
|
+
const missing = missingResources.map(r => r.resourceId);
|
|
201
|
+
const available = Object.keys(config.availableResources);
|
|
202
|
+
return {
|
|
203
|
+
valid: false,
|
|
204
|
+
message: `Referenced resources do not exist: ${missing.join(', ')}`,
|
|
205
|
+
suggestions: [
|
|
206
|
+
`Available resources: ${available.join(', ')}`,
|
|
207
|
+
'Check resource names for typos',
|
|
208
|
+
'Ensure resources are defined before being referenced'
|
|
209
|
+
]
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return { valid: true, message: 'All referenced resources exist' };
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
// Rule: Magic proxy integration validation
|
|
216
|
+
this.addRule({
|
|
217
|
+
id: 'magic-proxy-integration',
|
|
218
|
+
name: 'Magic Proxy Integration',
|
|
219
|
+
description: 'Expressions should work correctly with the magic proxy system',
|
|
220
|
+
applicableContexts: ['status-builder', 'resource-builder', 'conditional', 'readiness', 'template-literal'],
|
|
221
|
+
severity: 'warning',
|
|
222
|
+
validate: (expression, _kubernetesRefs, _context, config) => {
|
|
223
|
+
if (!config.validateMagicProxy) {
|
|
224
|
+
return { valid: true, message: 'Magic proxy validation disabled' };
|
|
225
|
+
}
|
|
226
|
+
// Check for potential magic proxy issues
|
|
227
|
+
const issues = [];
|
|
228
|
+
// Check for direct property access that might not work with proxies
|
|
229
|
+
const expressionString = String(expression);
|
|
230
|
+
if (expressionString.includes('.hasOwnProperty') ||
|
|
231
|
+
expressionString.includes('Object.keys') ||
|
|
232
|
+
expressionString.includes('Object.values')) {
|
|
233
|
+
issues.push('Direct object introspection may not work with magic proxies');
|
|
234
|
+
}
|
|
235
|
+
// Check for async operations that might not work
|
|
236
|
+
if (expressionString.includes('await') || expressionString.includes('Promise')) {
|
|
237
|
+
issues.push('Async operations are not supported in expression contexts');
|
|
238
|
+
}
|
|
239
|
+
// Check for function calls that might not be available
|
|
240
|
+
if (expressionString.includes('console.') || expressionString.includes('window.')) {
|
|
241
|
+
issues.push('Global object access is not available in expression contexts');
|
|
242
|
+
}
|
|
243
|
+
// Check for other problematic patterns
|
|
244
|
+
if (expressionString.includes('document.') || expressionString.includes('localStorage.')) {
|
|
245
|
+
issues.push('Browser APIs are not available in expression contexts');
|
|
246
|
+
}
|
|
247
|
+
if (issues.length > 0) {
|
|
248
|
+
return {
|
|
249
|
+
valid: false,
|
|
250
|
+
message: `Magic proxy integration issues: ${issues.join(', ')}`,
|
|
251
|
+
suggestions: [
|
|
252
|
+
'Use only property access and basic operators',
|
|
253
|
+
'Avoid object introspection methods',
|
|
254
|
+
'Use synchronous operations only',
|
|
255
|
+
'Stick to KubernetesRef field access patterns'
|
|
256
|
+
]
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return { valid: true, message: 'Expression is compatible with magic proxy system' };
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
// Rule: Factory type compatibility
|
|
263
|
+
this.addRule({
|
|
264
|
+
id: 'factory-type-compatibility',
|
|
265
|
+
name: 'Factory Type Compatibility',
|
|
266
|
+
description: 'Expressions should be compatible with the target factory type',
|
|
267
|
+
applicableContexts: ['status-builder', 'resource-builder', 'conditional', 'readiness'],
|
|
268
|
+
severity: 'warning',
|
|
269
|
+
validate: (expression, kubernetesRefs, _context, config) => {
|
|
270
|
+
if (!config.factoryType) {
|
|
271
|
+
return { valid: true, message: 'No factory type specified' };
|
|
272
|
+
}
|
|
273
|
+
const expressionString = String(expression);
|
|
274
|
+
const issues = [];
|
|
275
|
+
if (config.factoryType === 'kro') {
|
|
276
|
+
// Kro factory limitations
|
|
277
|
+
if (expressionString.includes('Math.') || expressionString.includes('Date.')) {
|
|
278
|
+
issues.push('Complex JavaScript APIs may not be available in Kro CEL environment');
|
|
279
|
+
}
|
|
280
|
+
if (expressionString.includes('JSON.')) {
|
|
281
|
+
issues.push('JSON operations should use CEL equivalents in Kro environment');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else if (config.factoryType === 'direct') {
|
|
285
|
+
// Direct factory considerations
|
|
286
|
+
if (kubernetesRefs.some(ref => ref.fieldPath.includes('status'))) {
|
|
287
|
+
issues.push('Direct factory may not have access to runtime status fields');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (issues.length > 0) {
|
|
291
|
+
return {
|
|
292
|
+
valid: false,
|
|
293
|
+
message: `Factory type compatibility issues: ${issues.join(', ')}`,
|
|
294
|
+
suggestions: [
|
|
295
|
+
config.factoryType === 'kro'
|
|
296
|
+
? 'Use CEL-compatible operations only'
|
|
297
|
+
: 'Consider using Kro factory for status field access',
|
|
298
|
+
'Check the factory type documentation for supported operations'
|
|
299
|
+
]
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
return { valid: true, message: `Expression is compatible with ${config.factoryType} factory` };
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// Rule: Template literal structure validation
|
|
306
|
+
this.addRule({
|
|
307
|
+
id: 'template-literal-structure',
|
|
308
|
+
name: 'Template Literal Structure',
|
|
309
|
+
description: 'Template literals should have proper structure for CEL conversion',
|
|
310
|
+
applicableContexts: ['template-literal'],
|
|
311
|
+
severity: 'error',
|
|
312
|
+
validate: (expression, _kubernetesRefs, _context, _config) => {
|
|
313
|
+
const expressionString = String(expression);
|
|
314
|
+
// Check for template literal patterns
|
|
315
|
+
if (!expressionString.includes('${') || !expressionString.includes('}')) {
|
|
316
|
+
return {
|
|
317
|
+
valid: false,
|
|
318
|
+
message: 'Template literal context but no interpolation found',
|
|
319
|
+
suggestions: [
|
|
320
|
+
'Use ${expression} syntax for interpolations',
|
|
321
|
+
'Ensure template literal has proper structure'
|
|
322
|
+
]
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// Check for nested template literals (not supported)
|
|
326
|
+
const interpolationCount = (expressionString.match(/\$\{/g) || []).length;
|
|
327
|
+
const closingCount = (expressionString.match(/\}/g) || []).length;
|
|
328
|
+
if (interpolationCount !== closingCount) {
|
|
329
|
+
return {
|
|
330
|
+
valid: false,
|
|
331
|
+
message: 'Unbalanced template literal interpolations',
|
|
332
|
+
suggestions: [
|
|
333
|
+
'Ensure each ${} interpolation is properly closed',
|
|
334
|
+
'Check for nested template literals (not supported)'
|
|
335
|
+
]
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return { valid: true, message: 'Template literal structure is valid' };
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Extract KubernetesRef objects from expression
|
|
344
|
+
*/
|
|
345
|
+
extractKubernetesRefs(expression) {
|
|
346
|
+
const refs = [];
|
|
347
|
+
if (isKubernetesRef(expression)) {
|
|
348
|
+
refs.push(expression);
|
|
349
|
+
}
|
|
350
|
+
else if (typeof expression === 'object' && expression !== null) {
|
|
351
|
+
this.recursivelyExtractRefs(expression, refs);
|
|
352
|
+
}
|
|
353
|
+
return refs;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Recursively extract KubernetesRef objects
|
|
357
|
+
*/
|
|
358
|
+
recursivelyExtractRefs(value, refs) {
|
|
359
|
+
if (isKubernetesRef(value)) {
|
|
360
|
+
refs.push(value);
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (Array.isArray(value)) {
|
|
364
|
+
for (const item of value) {
|
|
365
|
+
this.recursivelyExtractRefs(item, refs);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
else if (value && typeof value === 'object') {
|
|
369
|
+
for (const prop of Object.values(value)) {
|
|
370
|
+
this.recursivelyExtractRefs(prop, refs);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Get applicable rules for a context
|
|
376
|
+
*/
|
|
377
|
+
getApplicableRules(context, config) {
|
|
378
|
+
const rules = Array.from(this.rules.values());
|
|
379
|
+
const applicableRules = rules.filter(rule => rule.applicableContexts.includes(context));
|
|
380
|
+
// Add custom rules if provided
|
|
381
|
+
if (config.customRules) {
|
|
382
|
+
applicableRules.push(...config.customRules.filter(rule => rule.applicableContexts.includes(context)));
|
|
383
|
+
}
|
|
384
|
+
return applicableRules;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Calculate confidence score based on validation results
|
|
388
|
+
*/
|
|
389
|
+
calculateConfidence(ruleResults, errors, warnings) {
|
|
390
|
+
const totalRules = ruleResults.size;
|
|
391
|
+
if (totalRules === 0)
|
|
392
|
+
return 0.5; // No rules ran
|
|
393
|
+
const passedRules = Array.from(ruleResults.values()).filter(r => r.valid).length;
|
|
394
|
+
const baseConfidence = passedRules / totalRules;
|
|
395
|
+
// Reduce confidence based on errors and warnings
|
|
396
|
+
const errorPenalty = errors.length * 0.2;
|
|
397
|
+
const warningPenalty = warnings.length * 0.1;
|
|
398
|
+
return Math.max(0, Math.min(1, baseConfidence - errorPenalty - warningPenalty));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Validation utilities
|
|
403
|
+
*/
|
|
404
|
+
export class ContextValidationUtils {
|
|
405
|
+
/**
|
|
406
|
+
* Create a validation report summary
|
|
407
|
+
*/
|
|
408
|
+
static createSummary(report) {
|
|
409
|
+
const { valid, errors, warnings, info, confidence } = report;
|
|
410
|
+
let summary = `Validation ${valid ? 'PASSED' : 'FAILED'} (confidence: ${(confidence * 100).toFixed(1)}%)`;
|
|
411
|
+
if (errors.length > 0) {
|
|
412
|
+
summary += `\n Errors: ${errors.length}`;
|
|
413
|
+
}
|
|
414
|
+
if (warnings.length > 0) {
|
|
415
|
+
summary += `\n Warnings: ${warnings.length}`;
|
|
416
|
+
}
|
|
417
|
+
if (info.length > 0) {
|
|
418
|
+
summary += `\n Info: ${info.length}`;
|
|
419
|
+
}
|
|
420
|
+
return summary;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Format validation issues for display
|
|
424
|
+
*/
|
|
425
|
+
static formatIssues(issues) {
|
|
426
|
+
return issues.map(issue => {
|
|
427
|
+
let formatted = `[${issue.severity.toUpperCase()}] ${issue.message}`;
|
|
428
|
+
if (issue.suggestions.length > 0) {
|
|
429
|
+
formatted += `\n Suggestions: ${issue.suggestions.join(', ')}`;
|
|
430
|
+
}
|
|
431
|
+
return formatted;
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Check if a validation report indicates the expression is safe to use
|
|
436
|
+
*/
|
|
437
|
+
static isSafeToUse(report) {
|
|
438
|
+
return report.valid && report.confidence > 0.7;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get the most critical issues from a validation report
|
|
442
|
+
*/
|
|
443
|
+
static getCriticalIssues(report) {
|
|
444
|
+
return [...report.errors, ...report.warnings.filter(w => w.message.includes('compatibility') ||
|
|
445
|
+
w.message.includes('magic proxy'))];
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Default context validator instance
|
|
450
|
+
*/
|
|
451
|
+
export const contextValidator = new ContextExpressionValidator();
|
|
452
|
+
//# sourceMappingURL=context-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-validator.js","sourceRoot":"","sources":["../../../src/core/expressions/context-validator.ts"],"names":[],"mappings":"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"}
|