recoder-shared
Version:
Shared types, utilities, and configurations for Recoder
303 lines • 8.27 kB
TypeScript
/**
* Validation-related type definitions
*/
export interface ValidationResult {
valid: boolean;
errors: ValidationError[];
warnings: ValidationWarning[];
data?: any;
metadata?: Record<string, any>;
}
export interface ValidationError {
field: string;
message: string;
code?: string;
value?: any;
expected?: any;
path?: string;
constraint?: string;
}
export interface ValidationWarning {
field: string;
message: string;
code?: string;
value?: any;
suggestion?: string;
path?: string;
}
export interface ValidationRule {
field: string;
required?: boolean;
type?: ValidationFieldType;
min?: number;
max?: number;
minLength?: number;
maxLength?: number;
pattern?: RegExp | string;
choices?: any[];
custom?: ValidationCustomRule;
conditions?: ValidationCondition[];
group?: string;
order?: number;
description?: string;
example?: any;
}
export type ValidationFieldType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'email' | 'url' | 'uuid' | 'date' | 'datetime' | 'time' | 'json' | 'semver' | 'ip' | 'mac' | 'slug' | 'color' | 'file' | 'image';
export interface ValidationCustomRule {
validator: (value: any, data: any) => boolean | string | Promise<boolean | string>;
message?: string;
async?: boolean;
}
export interface ValidationCondition {
field: string;
operator: ValidationOperator;
value: any;
logic?: 'and' | 'or';
}
export type ValidationOperator = 'equals' | 'not_equals' | 'greater_than' | 'greater_than_or_equal' | 'less_than' | 'less_than_or_equal' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'matches' | 'not_matches' | 'exists' | 'not_exists' | 'empty' | 'not_empty';
export interface ValidationSchema {
name: string;
version: string;
description?: string;
rules: ValidationRule[];
groups?: ValidationGroup[];
metadata?: Record<string, any>;
}
export interface ValidationGroup {
name: string;
description?: string;
rules: string[];
conditions?: ValidationCondition[];
optional?: boolean;
}
export interface ValidationOptions {
strict?: boolean;
abortEarly?: boolean;
allowUnknown?: boolean;
stripUnknown?: boolean;
skipMissing?: boolean;
context?: Record<string, any>;
async?: boolean;
}
export interface ValidationContext {
data: any;
schema: ValidationSchema;
options: ValidationOptions;
errors: ValidationError[];
warnings: ValidationWarning[];
metadata: Record<string, any>;
}
export interface ValidatorConfig {
name: string;
version: string;
description?: string;
rules: Record<string, ValidationRule>;
presets: Record<string, ValidationSchema>;
formatters: Record<string, ValidationFormatter>;
transformers: Record<string, ValidationTransformer>;
}
export interface ValidationFormatter {
name: string;
format: (value: any) => string;
validate?: (value: any) => boolean;
}
export interface ValidationTransformer {
name: string;
transform: (value: any) => any;
validate?: (value: any) => boolean;
}
export interface ValidationProfile {
id: string;
name: string;
description: string;
schemas: string[];
rules: ValidationRule[];
enabled: boolean;
priority: number;
createdAt: string;
updatedAt: string;
}
export interface ValidationReport {
id: string;
timestamp: string;
duration: number;
schema: string;
data: any;
result: ValidationResult;
statistics: ValidationStatistics;
metadata?: Record<string, any>;
}
export interface ValidationStatistics {
totalRules: number;
passedRules: number;
failedRules: number;
skippedRules: number;
totalErrors: number;
totalWarnings: number;
coverage: number;
performance: {
totalTime: number;
averageTime: number;
slowestRule: string;
fastestRule: string;
};
}
export interface ValidationCache {
key: string;
result: ValidationResult;
timestamp: number;
ttl: number;
metadata?: Record<string, any>;
}
export interface ValidationMetrics {
totalValidations: number;
successRate: number;
errorRate: number;
averageTime: number;
cacheHitRate: number;
popularSchemas: Array<{
name: string;
usage: number;
successRate: number;
}>;
commonErrors: Array<{
code: string;
message: string;
count: number;
}>;
}
export interface RealityCheckResult {
feasible: boolean;
confidence: number;
complexityScore: number;
timeEstimate: {
minimum: number;
maximum: number;
recommended: number;
unit: 'hours' | 'days' | 'weeks' | 'months';
};
resourceRequirements: {
developers: number;
skillLevel: 'junior' | 'mid' | 'senior' | 'expert';
technologies: string[];
};
risks: RiskAssessment[];
recommendations: Recommendation[];
alternatives: Alternative[];
}
export interface RiskAssessment {
category: 'technical' | 'business' | 'timeline' | 'resource' | 'integration';
level: 'low' | 'medium' | 'high' | 'critical';
description: string;
impact: string;
probability: number;
mitigation: string[];
}
export interface Recommendation {
type: 'optimization' | 'simplification' | 'phasing' | 'technology' | 'process';
priority: 'low' | 'medium' | 'high';
description: string;
rationale: string;
impact: string;
effort: 'low' | 'medium' | 'high';
}
export interface Alternative {
name: string;
description: string;
pros: string[];
cons: string[];
complexity: number;
timeEstimate: number;
cost: number;
feasibility: number;
}
export interface CompatibilityCheck {
compatible: boolean;
issues: CompatibilityIssue[];
warnings: CompatibilityWarning[];
recommendations: string[];
score: number;
}
export interface CompatibilityIssue {
type: 'version' | 'dependency' | 'platform' | 'feature' | 'license';
severity: 'error' | 'warning' | 'info';
description: string;
affected: string[];
resolution?: string;
}
export interface CompatibilityWarning {
type: 'deprecated' | 'experimental' | 'performance' | 'security';
description: string;
affected: string[];
suggestion?: string;
}
export interface QualityGate {
id: string;
name: string;
description: string;
criteria: QualityCriteria[];
threshold: number;
required: boolean;
category: 'code' | 'security' | 'performance' | 'maintainability' | 'reliability';
}
export interface QualityCriteria {
metric: string;
operator: 'greater_than' | 'less_than' | 'equal_to' | 'not_equal_to';
value: number;
weight: number;
description: string;
}
export interface QualityReport {
id: string;
timestamp: string;
overall: QualityScore;
gates: QualityGateResult[];
metrics: QualityMetrics;
recommendations: QualityRecommendation[];
trends: QualityTrend[];
}
export interface QualityScore {
score: number;
grade: 'A' | 'B' | 'C' | 'D' | 'F';
passed: boolean;
breakdown: Record<string, number>;
}
export interface QualityGateResult {
gate: QualityGate;
passed: boolean;
score: number;
details: QualityCriteriaResult[];
}
export interface QualityCriteriaResult {
criteria: QualityCriteria;
passed: boolean;
actual: number;
expected: number;
impact: number;
}
export interface QualityMetrics {
codeQuality: number;
security: number;
performance: number;
maintainability: number;
reliability: number;
testCoverage: number;
documentation: number;
complexity: number;
}
export interface QualityRecommendation {
priority: 'low' | 'medium' | 'high' | 'critical';
category: string;
description: string;
impact: string;
effort: 'low' | 'medium' | 'high';
automated: boolean;
}
export interface QualityTrend {
metric: string;
direction: 'improving' | 'stable' | 'degrading';
change: number;
period: string;
significance: 'low' | 'medium' | 'high';
}
//# sourceMappingURL=validation.d.ts.map