Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions src/form-management/state/form-state-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
FieldDescriptor,
ConditionalRule,
} from '../types/core';
import { FormStateManager as IFormStateManager } from '../types/interfaces';
import type { FormStateManager as IFormStateManager } from '../types/interfaces';
import { DependencyManager, CascadeUpdateResult } from './dependency-manager';

Expand All @@ -38,7 +37,7 @@ export class FormStateManager implements IFormStateManager {
/**
* Update a field value and trigger change detection
*/
updateField(fieldId: string, value: any): void {
updateField(fieldId: string, value: unknown): void {
const oldValue = this.state.values[fieldId];

// Update the field value
Expand Down Expand Up @@ -114,7 +113,7 @@ export class FormStateManager implements IFormStateManager {
/**
* Get value of a specific field
*/
getFieldValue(fieldId: string): any {
getFieldValue(fieldId: string): unknown {
return this.state.values[fieldId];
}

Expand Down Expand Up @@ -264,7 +263,7 @@ export class FormStateManager implements IFormStateManager {
/**
* Programmatically set field value without triggering change events
*/
setFieldValueSilently(fieldId: string, value: any): void {
setFieldValueSilently(fieldId: string, value: unknown): void {
this.state.values[fieldId] = value;
this.state.metadata.lastModified = new Date();
}
Expand Down Expand Up @@ -492,7 +491,7 @@ export class FormStateManager implements IFormStateManager {
* Get field state summary
*/
getFieldState(fieldId: string): {
value: any;
value: unknown;
isValid: boolean;
isTouched: boolean;
isDirty: boolean;
Expand Down Expand Up @@ -533,7 +532,7 @@ export class FormStateManager implements IFormStateManager {
/**
* Process cascading updates when a field value changes
*/
private processCascadingUpdates(changedFieldId: string, newValue: any): void {
private processCascadingUpdates(changedFieldId: string, newValue: unknown): void {
const cascadeResult = this.dependencyManager.calculateCascadingUpdates(
changedFieldId,
newValue,
Expand Down Expand Up @@ -681,7 +680,7 @@ export class FormStateManager implements IFormStateManager {
/**
* Get cascade update preview without applying changes
*/
previewCascadingUpdates(fieldId: string, value: any): CascadeUpdateResult {
previewCascadingUpdates(fieldId: string, value: unknown): CascadeUpdateResult {
return this.dependencyManager.calculateCascadingUpdates(fieldId, value, this.state);
}
}
12 changes: 5 additions & 7 deletions src/form-management/types/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export interface ConditionalRule {
export interface ConditionalAction {
type: 'show' | 'hide' | 'enable' | 'disable' | 'setValue';
targetFieldId: string;
value?: any;
value?: unknown;
}

// Layout Configuration
Expand Down Expand Up @@ -111,7 +111,6 @@ export interface ValidationConfiguration {
customRules: Record<string, ValidationFunction>;
}

export type ValidationFunction = (value: unknown, formState: FormState, context?: unknown) => ValidationResult | Promise<ValidationResult>;
export interface ValidationExecutionContext {
getFieldValue(fieldId: string): unknown;
getFieldDescriptor(fieldId: string): FieldDescriptor | undefined;
Expand Down Expand Up @@ -143,7 +142,6 @@ export interface FormConfiguration {
autoSave?: AutoSaveConfiguration;
analytics?: AnalyticsConfiguration;
accessibility?: AccessibilityConfiguration;
conditionalLogic?: ConditionalRule[];
}

// Auto-Save Configuration
Expand Down Expand Up @@ -246,7 +244,7 @@ export interface FieldInteraction {
fieldId: string;
eventType: 'focus' | 'blur' | 'change' | 'error';
timestamp: Date;
value?: any;
value?: unknown;
timeSpent?: number;
}

Expand All @@ -263,8 +261,8 @@ export interface StepMetrics {
export interface StateChangeEvent {
type: 'field-change' | 'validation-change' | 'form-submit' | 'step-change';
fieldId?: string;
oldValue?: any;
newValue?: any;
oldValue?: unknown;
newValue?: unknown;
timestamp: Date;
}

Expand All @@ -286,7 +284,7 @@ export interface FormElement {
}

export interface FieldUpdates {
value?: any;
value?: unknown;
visible?: boolean;
enabled?: boolean;
validation?: ValidationResult;
Expand Down
14 changes: 7 additions & 7 deletions src/form-management/types/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ export interface FormBuilder {

// Validation Engine Interface
export interface ValidationEngine {
validateField(fieldId: string, value: any, context: FormState): ValidationResult;
validateField(fieldId: string, value: unknown, context: FormState): ValidationResult;
validateForm(formState: FormState): Promise<FormValidationResult>;
addCustomRule(name: string, rule: ValidationFunction): void;
executeAsyncValidation(fieldId: string, value: any): Promise<ValidationResult>;
executeAsyncValidation(fieldId: string, value: unknown): Promise<ValidationResult>;
}

// Form State Manager Interface
Expand Down Expand Up @@ -90,25 +90,25 @@ export interface ConfigurationParser {
// Analytics Tracker Interface
export interface AnalyticsTracker {
trackFormStart(formId: string): void;
trackFieldInteraction(fieldId: string, eventType: string, value?: any): void;
trackFieldInteraction(fieldId: string, eventType: string, value?: unknown): void;
trackFormSubmission(formId: string, success: boolean): void;
trackFormAbandonment(formId: string, abandonmentPoint: string): void;
getAnalytics(formId: string): Promise<any>;
getAnalytics(formId: string): Promise<unknown>;
enablePrivacyMode(enabled: boolean): void;
}

// Storage Interface
export interface StorageProvider {
save(key: string, data: any): Promise<void>;
load(key: string): Promise<any>;
save(key: string, data: unknown): Promise<void>;
load(key: string): Promise<unknown>;
remove(key: string): Promise<void>;
clear(): Promise<void>;
getSize(): Promise<number>;
getQuota(): Promise<number>;
}

// Event Emitter Interface
export interface EventEmitter<T = any> {
export interface EventEmitter<T = unknown> {
on(event: string, callback: (data: T) => void): Subscription;
emit(event: string, data: T): void;
off(event: string, callback: (data: T) => void): void;
Expand Down
8 changes: 4 additions & 4 deletions src/form-management/utils/configuration-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ export class FormConfigurationParser implements ConfigurationParser {
/**
* Validate and transform parsed object to FormConfiguration
*/
private validateAndTransform(parsed: any): FormConfiguration {
private validateAndTransform(parsed: unknown): FormConfiguration {
const result = FormConfigurationSchema.parse(parsed);

// Additional custom validations
Expand Down Expand Up @@ -450,7 +450,7 @@ export class FormConfigurationParser implements ConfigurationParser {
/**
* Make configuration serializable by removing functions
*/
private makeSerializable(config: FormConfiguration): any {
private makeSerializable(config: FormConfiguration): unknown {
return JSON.parse(
JSON.stringify(config, (key, value) => {
// Skip function properties during serialization
Expand All @@ -465,7 +465,7 @@ export class FormConfigurationParser implements ConfigurationParser {
/**
* Recursively sort object keys for consistent output
*/
private sortObjectKeys(obj: any): any {
private sortObjectKeys(obj: unknown): unknown {
if (obj === null || typeof obj !== 'object') {
return obj;
}
Expand All @@ -475,7 +475,7 @@ export class FormConfigurationParser implements ConfigurationParser {
}

const sortedKeys = Object.keys(obj).sort();
const sortedObj: any = {};
const sortedObj: Record<string, unknown> = {};

for (const key of sortedKeys) {
sortedObj[key] = this.sortObjectKeys(obj[key]);
Expand Down
12 changes: 5 additions & 7 deletions src/form-management/validation/async-validation-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export interface AsyncValidationOptions {

export interface AsyncValidationRequest {
fieldId: string;
value: any;
value: unknown;
formState: FormState;
validationFunction: ValidationFunction;
options?: Partial<AsyncValidationOptions>;
Expand All @@ -38,7 +38,7 @@ export type AsyncValidationCallback = (response: AsyncValidationResponse) => voi
export class AsyncValidationManager {
private validationStates: Map<string, AsyncValidationState> = new Map();
private pendingValidations: Map<string, Promise<ValidationResult>> = new Map();
private debounceTimers: Map<string, NodeJS.Timeout> = new Map();
private debounceTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();
private callbacks: Set<AsyncValidationCallback> = new Set();

private defaultOptions: AsyncValidationOptions = {
Expand Down Expand Up @@ -131,7 +131,7 @@ export class AsyncValidationManager {
*/
private async executeValidationWithRetry(
fieldId: string,
value: any,
value: unknown,
formState: FormState,
validationFunction: ValidationFunction,
options: AsyncValidationOptions,
Expand Down Expand Up @@ -215,7 +215,7 @@ export class AsyncValidationManager {
*/
private async performValidationWithRetries(
fieldId: string,
value: any,
value: unknown,
formState: FormState,
validationFunction: ValidationFunction,
options: AsyncValidationOptions,
Expand All @@ -228,9 +228,8 @@ export class AsyncValidationManager {
this.updateValidationState(fieldId, { retryCount: attempt });

// Execute validation with timeout
let timeoutId: any;
const timeoutPromise = new Promise<never>((_, reject) => {
timeoutId = setTimeout(() => {
setTimeout(() => {
reject(new Error(`Validation timeout after ${options.timeout}ms`));
}, options.timeout);
});
Expand All @@ -242,7 +241,6 @@ export class AsyncValidationManager {
validationPromise.catch(() => {});

const result = await Promise.race([validationPromise, timeoutPromise]);
clearTimeout(timeoutId);

// Validation succeeded
return result;
Expand Down
18 changes: 9 additions & 9 deletions src/form-management/validation/custom-validation-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import { ValidationFunction, ValidationResult, FormState, FieldDescriptor } from

export interface ValidationContext {
fieldId: string;
fieldValue: any;
fieldValue: unknown;
formState: FormState;
fieldDescriptor?: FieldDescriptor;
allFieldDescriptors?: Map<string, FieldDescriptor>;
customData?: Record<string, any>;
customData?: Record<string, unknown>;
}

export interface CustomValidationRule {
Expand All @@ -24,22 +24,22 @@ export interface CustomValidationRule {
}

export interface ValidationExecutionContext {
getFieldValue(fieldId: string): any;
getFieldValue(fieldId: string): unknown;
getFieldDescriptor(fieldId: string): FieldDescriptor | undefined;
getAllFieldValues(): Record<string, any>;
getAllFieldValues(): Record<string, unknown>;
getFormMetadata(): FormState['metadata'];
hasField(fieldId: string): boolean;
isFieldTouched(fieldId: string): boolean;
isFieldDirty(fieldId: string): boolean;
getCustomData(key: string): any;
setCustomData(key: string, value: any): void;
getCustomData(key: string): unknown;
setCustomData(key: string, value: unknown): void;
}

export class CustomValidationRegistry {
private rules: Map<string, CustomValidationRule> = new Map();
private categories: Map<string, Set<string>> = new Map();
private dependencies: Map<string, Set<string>> = new Map();
private customData: Map<string, any> = new Map();
private customData: Map<string, unknown> = new Map();

/**
* Register a custom validation rule
Expand Down Expand Up @@ -387,7 +387,7 @@ export class CustomValidationRegistry {

// Enhanced validation function type with execution context
export type EnhancedValidationFunction = (
value: any,
value: unknown,
formState: FormState,
context?: ValidationExecutionContext,
) => ValidationResult | Promise<ValidationResult>;
Expand Down Expand Up @@ -478,7 +478,7 @@ export class ValidationRuleBuilders {
*/
static createAsyncApiRule(
name: string,
apiCall: (value: any) => Promise<boolean>,
apiCall: (value: unknown) => Promise<boolean>,
message: string,
): CustomValidationRule {
return {
Expand Down
Loading
Loading