@rilaykit/core 1.2.0 → 2.0.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/dist/index.d.mts CHANGED
@@ -17,6 +17,19 @@ declare class ril {
17
17
  * @returns The ril instance for chaining
18
18
  */
19
19
  addComponent<TProps = any>(type: string, config: Omit<ComponentConfig<TProps>, 'id' | 'type'>): this;
20
+ /**
21
+ * Generic method to set any renderer type easily
22
+ * @param rendererType - The type of renderer to set
23
+ * @param renderer - The renderer function
24
+ * @returns The ril instance for chaining
25
+ */
26
+ setRenderer<T extends keyof (FormRenderConfig & WorkflowRenderConfig)>(rendererType: T, renderer: (FormRenderConfig & WorkflowRenderConfig)[T]): this;
27
+ /**
28
+ * Set multiple renderers at once
29
+ * @param renderers - Object with renderer configurations
30
+ * @returns The ril instance for chaining
31
+ */
32
+ setRenderers(renderers: Partial<FormRenderConfig & WorkflowRenderConfig>): this;
20
33
  /**
21
34
  * Set custom row renderer
22
35
  * @param renderer - Custom row renderer function
@@ -58,12 +71,6 @@ declare class ril {
58
71
  * @returns The ril instance for chaining
59
72
  */
60
73
  setStepperRenderer(renderer: WorkflowStepperRenderer): this;
61
- /**
62
- * Set custom workflow navigation renderer
63
- * @param renderer - Custom workflow navigation renderer function
64
- * @returns The ril instance for chaining
65
- */
66
- setWorkflowNavigationRenderer(renderer: WorkflowNavigationRenderer): this;
67
74
  /**
68
75
  * Set custom workflow next button renderer
69
76
  * @param renderer - Custom workflow next button renderer function
@@ -103,12 +110,6 @@ declare class ril {
103
110
  * @returns Component configuration or undefined
104
111
  */
105
112
  getComponent(id: string): ComponentConfig | undefined;
106
- /**
107
- * Get components by category
108
- * @param category - Component category
109
- * @returns Array of matching components
110
- */
111
- getComponentsByCategory(category: string): ComponentConfig[];
112
113
  /**
113
114
  * List all registered components
114
115
  * @returns Array of all components
@@ -130,17 +131,6 @@ declare class ril {
130
131
  * Clear all components
131
132
  */
132
133
  clear(): void;
133
- /**
134
- * Export configuration as a plain object
135
- * @returns Object with component configurations
136
- */
137
- export(): Record<string, ComponentConfig>;
138
- /**
139
- * Import configuration from a plain object
140
- * @param config - Object with component configurations
141
- * @returns The ril instance for chaining
142
- */
143
- import(config: Record<string, ComponentConfig>): this;
144
134
  /**
145
135
  * Get statistics about registered components and renderers
146
136
  * @returns Object with comprehensive statistics
@@ -148,14 +138,12 @@ declare class ril {
148
138
  getStats(): {
149
139
  total: number;
150
140
  byType: Record<string, number>;
151
- byCategory: Record<string, number>;
152
141
  hasCustomRenderers: {
153
142
  row: boolean;
154
143
  body: boolean;
155
144
  submitButton: boolean;
156
145
  field: boolean;
157
146
  stepper: boolean;
158
- workflowNavigation: boolean;
159
147
  workflowNextButton: boolean;
160
148
  workflowPreviousButton: boolean;
161
149
  workflowSkipButton: boolean;
@@ -176,18 +164,12 @@ interface RilayLicenseConfig {
176
164
  interface ValidationResult {
177
165
  readonly isValid: boolean;
178
166
  readonly errors: ValidationError[];
179
- readonly warnings?: ValidationWarning[];
180
167
  }
181
168
  interface ValidationError {
182
169
  readonly code: string;
183
170
  readonly message: string;
184
171
  readonly path?: string[];
185
172
  }
186
- interface ValidationWarning {
187
- readonly code: string;
188
- readonly message: string;
189
- readonly path?: string[];
190
- }
191
173
  interface ValidationContext {
192
174
  readonly fieldId: string;
193
175
  readonly formData: Record<string, any>;
@@ -212,32 +194,19 @@ interface ComponentRenderProps<TProps = any> {
212
194
  onChange?: (value: any) => void;
213
195
  onBlur?: () => void;
214
196
  error?: ValidationError[];
215
- warnings?: ValidationWarning[];
216
197
  touched?: boolean;
217
198
  disabled?: boolean;
218
199
  isValidating?: boolean;
219
200
  [key: string]: any;
220
201
  }
221
- interface ComponentOptions<TProps = any> {
222
- readonly configurable?: Array<{
223
- key: keyof TProps;
224
- type: 'string' | 'number' | 'boolean' | 'select' | 'array';
225
- label: string;
226
- options?: any[];
227
- default?: any;
228
- }>;
229
- readonly previewProps?: Partial<TProps>;
230
- readonly icon?: string;
231
- readonly tags?: string[];
232
- }
202
+ type RendererChildrenFunction<TProps = any> = (props: TProps) => React.ReactNode;
203
+ declare function resolveRendererChildren<TProps>(children: React.ReactNode | RendererChildrenFunction<TProps> | undefined, props: TProps): React.ReactNode;
233
204
  interface ComponentConfig<TProps = any> {
234
205
  readonly id: string;
235
206
  readonly type: string;
236
207
  readonly name: string;
237
208
  readonly description?: string;
238
- readonly category?: string;
239
209
  readonly renderer: ComponentRenderer<TProps>;
240
- readonly options?: ComponentOptions<TProps>;
241
210
  readonly validation?: ValidationConfig<TProps>;
242
211
  readonly defaultProps?: Partial<TProps>;
243
212
  readonly useFieldRenderer?: boolean;
@@ -293,11 +262,6 @@ interface RetryPolicy {
293
262
  readonly delayMs: number;
294
263
  readonly backoffMultiplier?: number;
295
264
  }
296
- interface ConditionalBranch {
297
- readonly condition: (data: any, context: WorkflowContext) => boolean | Promise<boolean>;
298
- readonly steps: StepConfig[];
299
- readonly fallback?: StepConfig[];
300
- }
301
265
  interface StepConfig {
302
266
  readonly id: string;
303
267
  readonly title: string;
@@ -366,18 +330,6 @@ interface WorkflowAnalytics {
366
330
  readonly onValidationError?: (stepId: string, errors: ValidationError[], context: WorkflowContext) => void;
367
331
  readonly onError?: (error: Error, context: WorkflowContext) => void;
368
332
  }
369
- interface WorkflowOptimizations {
370
- readonly preloadNextStep?: boolean;
371
- readonly cacheValidation?: boolean;
372
- readonly virtualizeSteps?: boolean;
373
- readonly lazyLoadComponents?: boolean;
374
- readonly maxConcurrentRequests?: number;
375
- }
376
- interface WorkflowVersion {
377
- readonly version: string;
378
- readonly migrationStrategy?: (oldData: any, newConfig: any) => any;
379
- readonly compatibilityMode?: boolean;
380
- }
381
333
  interface WorkflowHooks {
382
334
  readonly onStepChange?: (from: string, to: string, context: WorkflowContext) => void;
383
335
  readonly onDataChange?: (data: any, context: WorkflowContext) => void;
@@ -395,13 +347,10 @@ interface WorkflowConfig {
395
347
  readonly name: string;
396
348
  readonly description?: string;
397
349
  readonly steps: StepConfig[];
398
- readonly branches?: ConditionalBranch[];
399
350
  readonly navigation?: NavigationConfig;
400
351
  readonly persistence?: PersistenceConfig;
401
352
  readonly completion?: CompletionConfig;
402
353
  readonly analytics?: WorkflowAnalytics;
403
- readonly optimizations?: WorkflowOptimizations;
404
- readonly version?: WorkflowVersion;
405
354
  readonly plugins?: WorkflowPlugin[];
406
355
  readonly renderConfig?: WorkflowRenderConfig;
407
356
  }
@@ -423,24 +372,9 @@ interface WorkflowStepperRendererProps {
423
372
  readonly onStepClick?: (stepIndex: number) => void;
424
373
  readonly className?: string;
425
374
  }
426
- interface WorkflowNavigationRendererProps {
427
- readonly currentStep: StepConfig;
428
- readonly context: WorkflowContext;
429
- readonly canGoNext: boolean;
430
- readonly canGoPrevious: boolean;
431
- readonly canSkip: boolean;
432
- readonly isSubmitting: boolean;
433
- readonly onNext: (event?: React.FormEvent) => void;
434
- readonly onPrevious: (event?: React.FormEvent) => void;
435
- readonly onSkip: (event?: React.FormEvent) => void;
436
- readonly onSubmit: (event?: React.FormEvent) => void;
437
- readonly className?: string;
438
- }
439
375
  type WorkflowStepperRenderer = (props: WorkflowStepperRendererProps) => React.ReactElement;
440
- type WorkflowNavigationRenderer = (props: WorkflowNavigationRendererProps) => React.ReactElement;
441
376
  interface WorkflowRenderConfig {
442
377
  readonly stepperRenderer?: WorkflowStepperRenderer;
443
- readonly navigationRenderer?: WorkflowNavigationRenderer;
444
378
  readonly nextButtonRenderer?: WorkflowNextButtonRenderer;
445
379
  readonly previousButtonRenderer?: WorkflowPreviousButtonRenderer;
446
380
  readonly skipButtonRenderer?: WorkflowSkipButtonRenderer;
@@ -472,7 +406,6 @@ interface FieldRendererProps {
472
406
  children: React.ReactNode;
473
407
  id: string;
474
408
  error?: ValidationError[];
475
- warnings?: ValidationWarning[];
476
409
  touched?: boolean;
477
410
  disabled?: boolean;
478
411
  isValidating?: boolean;
@@ -501,18 +434,30 @@ interface WorkflowNextButtonRendererProps {
501
434
  onSubmit: (event?: React.FormEvent) => void;
502
435
  className?: string;
503
436
  children?: React.ReactNode;
437
+ currentStep: StepConfig;
438
+ stepData: Record<string, any>;
439
+ allData: Record<string, any>;
440
+ context: WorkflowContext;
504
441
  }
505
442
  interface WorkflowPreviousButtonRendererProps {
506
443
  canGoPrevious: boolean;
507
444
  onPrevious: (event?: React.FormEvent) => void;
508
445
  className?: string;
509
446
  children?: React.ReactNode;
447
+ currentStep: StepConfig;
448
+ stepData: Record<string, any>;
449
+ allData: Record<string, any>;
450
+ context: WorkflowContext;
510
451
  }
511
452
  interface WorkflowSkipButtonRendererProps {
512
453
  canSkip: boolean;
513
454
  onSkip: (event?: React.FormEvent) => void;
514
455
  className?: string;
515
456
  children?: React.ReactNode;
457
+ currentStep: StepConfig;
458
+ stepData: Record<string, any>;
459
+ allData: Record<string, any>;
460
+ context: WorkflowContext;
516
461
  }
517
462
  type WorkflowNextButtonRenderer = (props: WorkflowNextButtonRendererProps) => React.ReactElement;
518
463
  type WorkflowPreviousButtonRenderer = (props: WorkflowPreviousButtonRendererProps) => React.ReactElement;
@@ -589,10 +534,9 @@ declare const commonValidators: {
589
534
  * Utility to create validation result
590
535
  * @param isValid - Whether validation passed
591
536
  * @param errors - Array of errors (optional)
592
- * @param warnings - Array of warnings (optional)
593
537
  * @returns ValidationResult object
594
538
  */
595
- declare const createValidationResult: (isValid: boolean, errors?: ValidationError[], warnings?: ValidationError[]) => ValidationResult;
539
+ declare const createValidationResult: (isValid: boolean, errors?: ValidationError[]) => ValidationResult;
596
540
  /**
597
541
  * Utility to create validation error
598
542
  * @param code - Error code
@@ -682,4 +626,4 @@ declare const persistence: {
682
626
  */
683
627
  declare function createResilientPersistence(primary: PersistenceAdapter, fallback?: PersistenceAdapter, options?: Partial<PersistenceConfig>): PersistenceConfig;
684
628
 
685
- export { type CompletionConfig, type ComponentConfig, type ComponentOptions, type ComponentRenderProps, type ComponentRenderer, CompositeAdapter, type ConditionalBranch, type ConditionalConfig, type CustomStepRenderer, type DynamicStepConfig, type FieldRenderer, type FieldRendererProps, type FormBodyRenderer, type FormBodyRendererProps, type FormConfiguration, type FormFieldConfig, type FormFieldRow, type FormRenderConfig, type FormRowRenderer, type FormRowRendererProps, type FormSubmitButtonRenderer, type FormSubmitButtonRendererProps, LocalStorageAdapter, MemoryAdapter, type NavigationConfig, type PersistenceAdapter, type PersistenceConfig, type RetryPolicy, type RilayLicenseConfig, SessionStorageAdapter, type StepConditionalConfig, type StepConfig, type StepLifecycleHooks, type StepPermissions, type StepValidationConfig, type ValidationConfig, type ValidationContext, type ValidationError, type ValidationResult, type ValidationWarning, type ValidatorFunction, type WorkflowAnalytics, type WorkflowConfig, type WorkflowContext, type WorkflowHooks, type WorkflowNavigationRenderer, type WorkflowNavigationRendererProps, type WorkflowNextButtonRenderer, type WorkflowNextButtonRendererProps, type WorkflowOptimizations, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowPreviousButtonRenderer, type WorkflowPreviousButtonRendererProps, type WorkflowRenderConfig, type WorkflowSkipButtonRenderer, type WorkflowSkipButtonRendererProps, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, type WorkflowVersion, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, ril };
629
+ export { type CompletionConfig, type ComponentConfig, type ComponentRenderProps, type ComponentRenderer, CompositeAdapter, type ConditionalConfig, type CustomStepRenderer, type DynamicStepConfig, type FieldRenderer, type FieldRendererProps, type FormBodyRenderer, type FormBodyRendererProps, type FormConfiguration, type FormFieldConfig, type FormFieldRow, type FormRenderConfig, type FormRowRenderer, type FormRowRendererProps, type FormSubmitButtonRenderer, type FormSubmitButtonRendererProps, LocalStorageAdapter, MemoryAdapter, type NavigationConfig, type PersistenceAdapter, type PersistenceConfig, type RendererChildrenFunction, type RetryPolicy, type RilayLicenseConfig, SessionStorageAdapter, type StepConditionalConfig, type StepConfig, type StepLifecycleHooks, type StepPermissions, type StepValidationConfig, type ValidationConfig, type ValidationContext, type ValidationError, type ValidationResult, type ValidatorFunction, type WorkflowAnalytics, type WorkflowConfig, type WorkflowContext, type WorkflowHooks, type WorkflowNextButtonRenderer, type WorkflowNextButtonRendererProps, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowPreviousButtonRenderer, type WorkflowPreviousButtonRendererProps, type WorkflowRenderConfig, type WorkflowSkipButtonRenderer, type WorkflowSkipButtonRendererProps, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, resolveRendererChildren, ril };
package/dist/index.d.ts CHANGED
@@ -17,6 +17,19 @@ declare class ril {
17
17
  * @returns The ril instance for chaining
18
18
  */
19
19
  addComponent<TProps = any>(type: string, config: Omit<ComponentConfig<TProps>, 'id' | 'type'>): this;
20
+ /**
21
+ * Generic method to set any renderer type easily
22
+ * @param rendererType - The type of renderer to set
23
+ * @param renderer - The renderer function
24
+ * @returns The ril instance for chaining
25
+ */
26
+ setRenderer<T extends keyof (FormRenderConfig & WorkflowRenderConfig)>(rendererType: T, renderer: (FormRenderConfig & WorkflowRenderConfig)[T]): this;
27
+ /**
28
+ * Set multiple renderers at once
29
+ * @param renderers - Object with renderer configurations
30
+ * @returns The ril instance for chaining
31
+ */
32
+ setRenderers(renderers: Partial<FormRenderConfig & WorkflowRenderConfig>): this;
20
33
  /**
21
34
  * Set custom row renderer
22
35
  * @param renderer - Custom row renderer function
@@ -58,12 +71,6 @@ declare class ril {
58
71
  * @returns The ril instance for chaining
59
72
  */
60
73
  setStepperRenderer(renderer: WorkflowStepperRenderer): this;
61
- /**
62
- * Set custom workflow navigation renderer
63
- * @param renderer - Custom workflow navigation renderer function
64
- * @returns The ril instance for chaining
65
- */
66
- setWorkflowNavigationRenderer(renderer: WorkflowNavigationRenderer): this;
67
74
  /**
68
75
  * Set custom workflow next button renderer
69
76
  * @param renderer - Custom workflow next button renderer function
@@ -103,12 +110,6 @@ declare class ril {
103
110
  * @returns Component configuration or undefined
104
111
  */
105
112
  getComponent(id: string): ComponentConfig | undefined;
106
- /**
107
- * Get components by category
108
- * @param category - Component category
109
- * @returns Array of matching components
110
- */
111
- getComponentsByCategory(category: string): ComponentConfig[];
112
113
  /**
113
114
  * List all registered components
114
115
  * @returns Array of all components
@@ -130,17 +131,6 @@ declare class ril {
130
131
  * Clear all components
131
132
  */
132
133
  clear(): void;
133
- /**
134
- * Export configuration as a plain object
135
- * @returns Object with component configurations
136
- */
137
- export(): Record<string, ComponentConfig>;
138
- /**
139
- * Import configuration from a plain object
140
- * @param config - Object with component configurations
141
- * @returns The ril instance for chaining
142
- */
143
- import(config: Record<string, ComponentConfig>): this;
144
134
  /**
145
135
  * Get statistics about registered components and renderers
146
136
  * @returns Object with comprehensive statistics
@@ -148,14 +138,12 @@ declare class ril {
148
138
  getStats(): {
149
139
  total: number;
150
140
  byType: Record<string, number>;
151
- byCategory: Record<string, number>;
152
141
  hasCustomRenderers: {
153
142
  row: boolean;
154
143
  body: boolean;
155
144
  submitButton: boolean;
156
145
  field: boolean;
157
146
  stepper: boolean;
158
- workflowNavigation: boolean;
159
147
  workflowNextButton: boolean;
160
148
  workflowPreviousButton: boolean;
161
149
  workflowSkipButton: boolean;
@@ -176,18 +164,12 @@ interface RilayLicenseConfig {
176
164
  interface ValidationResult {
177
165
  readonly isValid: boolean;
178
166
  readonly errors: ValidationError[];
179
- readonly warnings?: ValidationWarning[];
180
167
  }
181
168
  interface ValidationError {
182
169
  readonly code: string;
183
170
  readonly message: string;
184
171
  readonly path?: string[];
185
172
  }
186
- interface ValidationWarning {
187
- readonly code: string;
188
- readonly message: string;
189
- readonly path?: string[];
190
- }
191
173
  interface ValidationContext {
192
174
  readonly fieldId: string;
193
175
  readonly formData: Record<string, any>;
@@ -212,32 +194,19 @@ interface ComponentRenderProps<TProps = any> {
212
194
  onChange?: (value: any) => void;
213
195
  onBlur?: () => void;
214
196
  error?: ValidationError[];
215
- warnings?: ValidationWarning[];
216
197
  touched?: boolean;
217
198
  disabled?: boolean;
218
199
  isValidating?: boolean;
219
200
  [key: string]: any;
220
201
  }
221
- interface ComponentOptions<TProps = any> {
222
- readonly configurable?: Array<{
223
- key: keyof TProps;
224
- type: 'string' | 'number' | 'boolean' | 'select' | 'array';
225
- label: string;
226
- options?: any[];
227
- default?: any;
228
- }>;
229
- readonly previewProps?: Partial<TProps>;
230
- readonly icon?: string;
231
- readonly tags?: string[];
232
- }
202
+ type RendererChildrenFunction<TProps = any> = (props: TProps) => React.ReactNode;
203
+ declare function resolveRendererChildren<TProps>(children: React.ReactNode | RendererChildrenFunction<TProps> | undefined, props: TProps): React.ReactNode;
233
204
  interface ComponentConfig<TProps = any> {
234
205
  readonly id: string;
235
206
  readonly type: string;
236
207
  readonly name: string;
237
208
  readonly description?: string;
238
- readonly category?: string;
239
209
  readonly renderer: ComponentRenderer<TProps>;
240
- readonly options?: ComponentOptions<TProps>;
241
210
  readonly validation?: ValidationConfig<TProps>;
242
211
  readonly defaultProps?: Partial<TProps>;
243
212
  readonly useFieldRenderer?: boolean;
@@ -293,11 +262,6 @@ interface RetryPolicy {
293
262
  readonly delayMs: number;
294
263
  readonly backoffMultiplier?: number;
295
264
  }
296
- interface ConditionalBranch {
297
- readonly condition: (data: any, context: WorkflowContext) => boolean | Promise<boolean>;
298
- readonly steps: StepConfig[];
299
- readonly fallback?: StepConfig[];
300
- }
301
265
  interface StepConfig {
302
266
  readonly id: string;
303
267
  readonly title: string;
@@ -366,18 +330,6 @@ interface WorkflowAnalytics {
366
330
  readonly onValidationError?: (stepId: string, errors: ValidationError[], context: WorkflowContext) => void;
367
331
  readonly onError?: (error: Error, context: WorkflowContext) => void;
368
332
  }
369
- interface WorkflowOptimizations {
370
- readonly preloadNextStep?: boolean;
371
- readonly cacheValidation?: boolean;
372
- readonly virtualizeSteps?: boolean;
373
- readonly lazyLoadComponents?: boolean;
374
- readonly maxConcurrentRequests?: number;
375
- }
376
- interface WorkflowVersion {
377
- readonly version: string;
378
- readonly migrationStrategy?: (oldData: any, newConfig: any) => any;
379
- readonly compatibilityMode?: boolean;
380
- }
381
333
  interface WorkflowHooks {
382
334
  readonly onStepChange?: (from: string, to: string, context: WorkflowContext) => void;
383
335
  readonly onDataChange?: (data: any, context: WorkflowContext) => void;
@@ -395,13 +347,10 @@ interface WorkflowConfig {
395
347
  readonly name: string;
396
348
  readonly description?: string;
397
349
  readonly steps: StepConfig[];
398
- readonly branches?: ConditionalBranch[];
399
350
  readonly navigation?: NavigationConfig;
400
351
  readonly persistence?: PersistenceConfig;
401
352
  readonly completion?: CompletionConfig;
402
353
  readonly analytics?: WorkflowAnalytics;
403
- readonly optimizations?: WorkflowOptimizations;
404
- readonly version?: WorkflowVersion;
405
354
  readonly plugins?: WorkflowPlugin[];
406
355
  readonly renderConfig?: WorkflowRenderConfig;
407
356
  }
@@ -423,24 +372,9 @@ interface WorkflowStepperRendererProps {
423
372
  readonly onStepClick?: (stepIndex: number) => void;
424
373
  readonly className?: string;
425
374
  }
426
- interface WorkflowNavigationRendererProps {
427
- readonly currentStep: StepConfig;
428
- readonly context: WorkflowContext;
429
- readonly canGoNext: boolean;
430
- readonly canGoPrevious: boolean;
431
- readonly canSkip: boolean;
432
- readonly isSubmitting: boolean;
433
- readonly onNext: (event?: React.FormEvent) => void;
434
- readonly onPrevious: (event?: React.FormEvent) => void;
435
- readonly onSkip: (event?: React.FormEvent) => void;
436
- readonly onSubmit: (event?: React.FormEvent) => void;
437
- readonly className?: string;
438
- }
439
375
  type WorkflowStepperRenderer = (props: WorkflowStepperRendererProps) => React.ReactElement;
440
- type WorkflowNavigationRenderer = (props: WorkflowNavigationRendererProps) => React.ReactElement;
441
376
  interface WorkflowRenderConfig {
442
377
  readonly stepperRenderer?: WorkflowStepperRenderer;
443
- readonly navigationRenderer?: WorkflowNavigationRenderer;
444
378
  readonly nextButtonRenderer?: WorkflowNextButtonRenderer;
445
379
  readonly previousButtonRenderer?: WorkflowPreviousButtonRenderer;
446
380
  readonly skipButtonRenderer?: WorkflowSkipButtonRenderer;
@@ -472,7 +406,6 @@ interface FieldRendererProps {
472
406
  children: React.ReactNode;
473
407
  id: string;
474
408
  error?: ValidationError[];
475
- warnings?: ValidationWarning[];
476
409
  touched?: boolean;
477
410
  disabled?: boolean;
478
411
  isValidating?: boolean;
@@ -501,18 +434,30 @@ interface WorkflowNextButtonRendererProps {
501
434
  onSubmit: (event?: React.FormEvent) => void;
502
435
  className?: string;
503
436
  children?: React.ReactNode;
437
+ currentStep: StepConfig;
438
+ stepData: Record<string, any>;
439
+ allData: Record<string, any>;
440
+ context: WorkflowContext;
504
441
  }
505
442
  interface WorkflowPreviousButtonRendererProps {
506
443
  canGoPrevious: boolean;
507
444
  onPrevious: (event?: React.FormEvent) => void;
508
445
  className?: string;
509
446
  children?: React.ReactNode;
447
+ currentStep: StepConfig;
448
+ stepData: Record<string, any>;
449
+ allData: Record<string, any>;
450
+ context: WorkflowContext;
510
451
  }
511
452
  interface WorkflowSkipButtonRendererProps {
512
453
  canSkip: boolean;
513
454
  onSkip: (event?: React.FormEvent) => void;
514
455
  className?: string;
515
456
  children?: React.ReactNode;
457
+ currentStep: StepConfig;
458
+ stepData: Record<string, any>;
459
+ allData: Record<string, any>;
460
+ context: WorkflowContext;
516
461
  }
517
462
  type WorkflowNextButtonRenderer = (props: WorkflowNextButtonRendererProps) => React.ReactElement;
518
463
  type WorkflowPreviousButtonRenderer = (props: WorkflowPreviousButtonRendererProps) => React.ReactElement;
@@ -589,10 +534,9 @@ declare const commonValidators: {
589
534
  * Utility to create validation result
590
535
  * @param isValid - Whether validation passed
591
536
  * @param errors - Array of errors (optional)
592
- * @param warnings - Array of warnings (optional)
593
537
  * @returns ValidationResult object
594
538
  */
595
- declare const createValidationResult: (isValid: boolean, errors?: ValidationError[], warnings?: ValidationError[]) => ValidationResult;
539
+ declare const createValidationResult: (isValid: boolean, errors?: ValidationError[]) => ValidationResult;
596
540
  /**
597
541
  * Utility to create validation error
598
542
  * @param code - Error code
@@ -682,4 +626,4 @@ declare const persistence: {
682
626
  */
683
627
  declare function createResilientPersistence(primary: PersistenceAdapter, fallback?: PersistenceAdapter, options?: Partial<PersistenceConfig>): PersistenceConfig;
684
628
 
685
- export { type CompletionConfig, type ComponentConfig, type ComponentOptions, type ComponentRenderProps, type ComponentRenderer, CompositeAdapter, type ConditionalBranch, type ConditionalConfig, type CustomStepRenderer, type DynamicStepConfig, type FieldRenderer, type FieldRendererProps, type FormBodyRenderer, type FormBodyRendererProps, type FormConfiguration, type FormFieldConfig, type FormFieldRow, type FormRenderConfig, type FormRowRenderer, type FormRowRendererProps, type FormSubmitButtonRenderer, type FormSubmitButtonRendererProps, LocalStorageAdapter, MemoryAdapter, type NavigationConfig, type PersistenceAdapter, type PersistenceConfig, type RetryPolicy, type RilayLicenseConfig, SessionStorageAdapter, type StepConditionalConfig, type StepConfig, type StepLifecycleHooks, type StepPermissions, type StepValidationConfig, type ValidationConfig, type ValidationContext, type ValidationError, type ValidationResult, type ValidationWarning, type ValidatorFunction, type WorkflowAnalytics, type WorkflowConfig, type WorkflowContext, type WorkflowHooks, type WorkflowNavigationRenderer, type WorkflowNavigationRendererProps, type WorkflowNextButtonRenderer, type WorkflowNextButtonRendererProps, type WorkflowOptimizations, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowPreviousButtonRenderer, type WorkflowPreviousButtonRendererProps, type WorkflowRenderConfig, type WorkflowSkipButtonRenderer, type WorkflowSkipButtonRendererProps, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, type WorkflowVersion, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, ril };
629
+ export { type CompletionConfig, type ComponentConfig, type ComponentRenderProps, type ComponentRenderer, CompositeAdapter, type ConditionalConfig, type CustomStepRenderer, type DynamicStepConfig, type FieldRenderer, type FieldRendererProps, type FormBodyRenderer, type FormBodyRendererProps, type FormConfiguration, type FormFieldConfig, type FormFieldRow, type FormRenderConfig, type FormRowRenderer, type FormRowRendererProps, type FormSubmitButtonRenderer, type FormSubmitButtonRendererProps, LocalStorageAdapter, MemoryAdapter, type NavigationConfig, type PersistenceAdapter, type PersistenceConfig, type RendererChildrenFunction, type RetryPolicy, type RilayLicenseConfig, SessionStorageAdapter, type StepConditionalConfig, type StepConfig, type StepLifecycleHooks, type StepPermissions, type StepValidationConfig, type ValidationConfig, type ValidationContext, type ValidationError, type ValidationResult, type ValidatorFunction, type WorkflowAnalytics, type WorkflowConfig, type WorkflowContext, type WorkflowHooks, type WorkflowNextButtonRenderer, type WorkflowNextButtonRendererProps, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowPreviousButtonRenderer, type WorkflowPreviousButtonRendererProps, type WorkflowRenderConfig, type WorkflowSkipButtonRenderer, type WorkflowSkipButtonRendererProps, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, resolveRendererChildren, ril };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var zod=require('zod');var h=class o{constructor(){this.components=new Map;this.formRenderConfig={};this.workflowRenderConfig={};}static create(){return new o}addComponent(e,r){let t={id:e,type:e,...r};return this.components.set(e,t),this}setRowRenderer(e){return this.formRenderConfig={...this.formRenderConfig,rowRenderer:e},this}setBodyRenderer(e){return this.formRenderConfig={...this.formRenderConfig,bodyRenderer:e},this}setSubmitButtonRenderer(e){return this.formRenderConfig={...this.formRenderConfig,submitButtonRenderer:e},this}setFieldRenderer(e){return this.formRenderConfig={...this.formRenderConfig,fieldRenderer:e},this}setFormRenderConfig(e){return this.formRenderConfig=e,this}getFormRenderConfig(){return {...this.formRenderConfig}}setStepperRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,stepperRenderer:e},this}setWorkflowNavigationRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,navigationRenderer:e},this}setWorkflowNextButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,nextButtonRenderer:e},this}setWorkflowPreviousButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,previousButtonRenderer:e},this}setWorkflowSkipButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,skipButtonRenderer:e},this}setWorkflowRenderConfig(e){return this.workflowRenderConfig=e,this}getWorkflowRenderConfig(){return {...this.workflowRenderConfig}}setRenderConfig(e){return this.setFormRenderConfig(e)}getComponent(e){return this.components.get(e)}getComponentsByCategory(e){return Array.from(this.components.values()).filter(r=>r.category===e)}getAllComponents(){return Array.from(this.components.values())}hasComponent(e){return this.components.has(e)}removeComponent(e){return this.components.delete(e)}clear(){this.components.clear();}export(){return Object.fromEntries(this.components)}import(e){for(let[r,t]of Object.entries(e))this.components.set(r,t);return this}getStats(){let e=Array.from(this.components.values());return {total:e.length,byType:e.reduce((r,t)=>(r[t.type]=(r[t.type]||0)+1,r),{}),byCategory:e.reduce((r,t)=>{let n=t.category||"uncategorized";return r[n]=(r[n]||0)+1,r},{}),hasCustomRenderers:{row:!!this.formRenderConfig.rowRenderer,body:!!this.formRenderConfig.bodyRenderer,submitButton:!!this.formRenderConfig.submitButtonRenderer,field:!!this.formRenderConfig.fieldRenderer,stepper:!!this.workflowRenderConfig.stepperRenderer,workflowNavigation:!!this.workflowRenderConfig.navigationRenderer,workflowNextButton:!!this.workflowRenderConfig.nextButtonRenderer,workflowPreviousButton:!!this.workflowRenderConfig.previousButtonRenderer,workflowSkipButton:!!this.workflowRenderConfig.skipButtonRenderer}}}validate(){let e=[],r=Array.from(this.components.values()),t=r.map(s=>s.id),n=t.filter((s,a)=>t.indexOf(s)!==a);n.length>0&&e.push(`Duplicate component IDs found: ${n.join(", ")}`);let i=r.filter(s=>!s.renderer);return i.length>0&&e.push(`Components without renderer: ${i.map(s=>s.id).join(", ")}`),e}};var f=o=>async e=>{try{return await o.parseAsync(e),{isValid:!0,errors:[]}}catch(r){return r&&typeof r=="object"&&"errors"in r&&Array.isArray(r.errors)?{isValid:false,errors:r.errors.map(t=>({code:t.code,message:t.message,path:t.path?t.path.map(String):[]}))}:{isValid:false,errors:[{code:"unknown",message:r instanceof Error?r.message:"Unknown validation error"}]}}},y=o=>async(e,r,t)=>{try{let n=await o(e,r);return n===!0?{isValid:!0,errors:[]}:n===!1?{isValid:!1,errors:[{code:"validation_failed",message:"Validation failed"}]}:{isValid:!1,errors:[{code:"validation_failed",message:String(n)}]}}catch(n){return {isValid:false,errors:[{code:"validation_error",message:n instanceof Error?n.message:"Validation error"}]}}},k=(o,e="all")=>async(r,t,n)=>{let i=await Promise.all(o.map(l=>l(r,t,n)));if(e==="all"){let l=i.flatMap(u=>u.errors),d=i.flatMap(u=>u.warnings||[]);return {isValid:i.every(u=>u.isValid),errors:l,warnings:d.length>0?d:void 0}}if(i.some(l=>l.isValid)){let l=i.flatMap(d=>d.warnings||[]);return {isValid:true,errors:[],warnings:l.length>0?l:void 0}}return {isValid:false,errors:i.flatMap(l=>l.errors)}},v=(o,e)=>async(r,t,n)=>o(r,t)?e(r,t,n):{isValid:true,errors:[]},P={required:(o="This field is required")=>y(e=>e==null||e===""?o:!0),email:(o="Invalid email format")=>f(zod.z.string().email(o)),minLength:(o,e)=>f(zod.z.string().min(o,e||`Minimum ${o} characters required`)),maxLength:(o,e)=>f(zod.z.string().max(o,e||`Maximum ${o} characters allowed`)),pattern:(o,e="Invalid format")=>f(zod.z.string().regex(o,e)),numberRange:(o,e,r)=>{let t=zod.z.number();return o!==void 0&&(t=t.min(o,r||`Value must be at least ${o}`)),e!==void 0&&(t=t.max(e,r||`Value must be at most ${e}`)),f(t)},url:(o="Invalid URL format")=>f(zod.z.string().url(o)),phoneNumber:(o="Invalid phone number format")=>f(zod.z.string().regex(/^\+?[\d\s\-\(\)]+$/,o)),asyncValidation:(o,e=300)=>{let r=new Map;return (t,n,i)=>new Promise(s=>{let a=`${n.fieldId}-${JSON.stringify(t)}`;r.has(a)&&clearTimeout(r.get(a));let l=setTimeout(async()=>{try{let d=await o(t,n);s(d===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof d=="string"?d:"Async validation failed"}]});}catch(d){s({isValid:false,errors:[{code:"async_validation_error",message:d instanceof Error?d.message:"Async validation error"}]});}finally{r.delete(a);}},e);r.set(a,l);})}},b=(o,e=[],r)=>({isValid:o,errors:e,warnings:r}),V=(o,e,r)=>({code:o,message:e,path:r});var g=class{constructor(){this.name="localStorage";}async save(e,r){try{localStorage.setItem(e,JSON.stringify(r));}catch(t){throw new Error(`Failed to save to localStorage: ${t}`)}}async load(e){try{let r=localStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from localStorage: ${r}`)}}async remove(e){try{localStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from localStorage: ${r}`)}}async exists(e){return localStorage.getItem(e)!==null}async list(e){let r=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&(!e||n.includes(e))&&r.push(n);}return r}},p=class{constructor(){this.name="sessionStorage";}async save(e,r){try{sessionStorage.setItem(e,JSON.stringify(r));}catch(t){throw new Error(`Failed to save to sessionStorage: ${t}`)}}async load(e){try{let r=sessionStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from sessionStorage: ${r}`)}}async remove(e){try{sessionStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from sessionStorage: ${r}`)}}async exists(e){return sessionStorage.getItem(e)!==null}async list(e){let r=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&(!e||n.includes(e))&&r.push(n);}return r}},m=class{constructor(){this.name="memory";this.storage=new Map;}async save(e,r){this.storage.set(e,{...r});}async load(e){let r=this.storage.get(e);return r?{...r}:null}async remove(e){this.storage.delete(e);}async exists(e){return this.storage.has(e)}async list(e){let r=Array.from(this.storage.keys());return e?r.filter(t=>t.includes(e)):r}clear(){this.storage.clear();}},w=class{constructor(e,r=[]){this.primary=e;this.fallbacks=r;this.name="composite";}async save(e,r){let t=[this.primary,...this.fallbacks];for(let n of t)try{await n.save(e,r);return}catch(i){console.warn(`Failed to save with ${n.name}:`,i);}throw new Error("All persistence adapters failed to save")}async load(e){let r=[this.primary,...this.fallbacks];for(let t of r)try{let n=await t.load(e);if(n)return n}catch(n){console.warn(`Failed to load with ${t.name}:`,n);}return null}async remove(e){let r=[this.primary,...this.fallbacks],t=[];for(let n of r)try{await n.remove(e);}catch(i){t.push(i);}if(t.length===r.length)throw new Error(`All adapters failed to remove: ${t.map(n=>n.message).join(", ")}`)}async exists(e){let r=[this.primary,...this.fallbacks];for(let t of r)try{if(await t.exists(e))return !0}catch(n){console.warn(`Failed to check existence with ${t.name}:`,n);}return false}async list(e){try{return await this.primary.list?.(e)||[]}catch(r){console.warn("Failed to list with primary adapter:",r);for(let t of this.fallbacks)try{return await t.list?.(e)||[]}catch(n){console.warn(`Failed to list with fallback ${t.name}:`,n);}return []}}};var F={localStorage(o={}){return {adapter:new g,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...o}},sessionStorage(o={}){return {adapter:new p,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...o}},memory(o={}){return {adapter:new m,debounceMs:0,autoSave:true,saveOnStepChange:true,...o}},custom(o,e={}){return {adapter:o,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function W(o,e,r={}){let t=e||new m;return {adapter:{name:`resilient-${o.name}`,async save(i,s){try{await o.save(i,s);}catch(a){console.warn("Primary persistence failed, using fallback:",a),await t.save(i,s);}},async load(i){try{let s=await o.load(i);if(s)return s}catch(s){console.warn("Primary persistence load failed, trying fallback:",s);}return await t.load(i)},async remove(i){let s=[];try{await o.remove(i);}catch(a){s.push(a);}try{await t.remove(i);}catch(a){s.push(a);}if(s.length===2)throw new Error(`Both adapters failed: ${s.map(a=>a.message).join(", ")}`)},async exists(i){try{if(await o.exists(i))return !0}catch(s){console.warn("Primary persistence exists check failed:",s);}try{return await t.exists(i)}catch(s){return console.warn("Fallback persistence exists check failed:",s),false}},async list(i){try{return await o.list?.(i)||[]}catch(s){console.warn("Primary persistence list failed:",s);try{return await t.list?.(i)||[]}catch(a){return console.warn("Fallback persistence list failed:",a),[]}}}},debounceMs:1e3,autoSave:true,saveOnStepChange:true,maxRetries:3,retryDelayMs:1e3,...r}}exports.CompositeAdapter=w;exports.LocalStorageAdapter=g;exports.MemoryAdapter=m;exports.SessionStorageAdapter=p;exports.combineValidators=k;exports.commonValidators=P;exports.createConditionalValidator=v;exports.createCustomValidator=y;exports.createResilientPersistence=W;exports.createValidationError=V;exports.createValidationResult=b;exports.createZodValidator=f;exports.persistence=F;exports.ril=h;
1
+ 'use strict';var zod=require('zod');function w(n,e){return typeof n=="function"?n(e):n}var u=class n{constructor(){this.components=new Map;this.formRenderConfig={};this.workflowRenderConfig={};}static create(){return new n}addComponent(e,r){let o={id:e,type:e,...r};return this.components.set(e,o),this}setRenderer(e,r){return e in this.formRenderConfig?this.formRenderConfig={...this.formRenderConfig,[e]:r}:e in this.workflowRenderConfig&&(this.workflowRenderConfig={...this.workflowRenderConfig,[e]:r}),this}setRenderers(e){let r={},o={};for(let[t,i]of Object.entries(e))["rowRenderer","bodyRenderer","submitButtonRenderer","fieldRenderer"].includes(t)?r[t]=i:o[t]=i;return this.formRenderConfig={...this.formRenderConfig,...r},this.workflowRenderConfig={...this.workflowRenderConfig,...o},this}setRowRenderer(e){return this.formRenderConfig={...this.formRenderConfig,rowRenderer:e},this}setBodyRenderer(e){return this.formRenderConfig={...this.formRenderConfig,bodyRenderer:e},this}setSubmitButtonRenderer(e){return this.formRenderConfig={...this.formRenderConfig,submitButtonRenderer:e},this}setFieldRenderer(e){return this.formRenderConfig={...this.formRenderConfig,fieldRenderer:e},this}setFormRenderConfig(e){return this.formRenderConfig=e,this}getFormRenderConfig(){return {...this.formRenderConfig}}setStepperRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,stepperRenderer:e},this}setWorkflowNextButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,nextButtonRenderer:e},this}setWorkflowPreviousButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,previousButtonRenderer:e},this}setWorkflowSkipButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,skipButtonRenderer:e},this}setWorkflowRenderConfig(e){return this.workflowRenderConfig=e,this}getWorkflowRenderConfig(){return {...this.workflowRenderConfig}}setRenderConfig(e){return this.setFormRenderConfig(e)}getComponent(e){return this.components.get(e)}getAllComponents(){return Array.from(this.components.values())}hasComponent(e){return this.components.has(e)}removeComponent(e){return this.components.delete(e)}clear(){this.components.clear();}getStats(){let e=Array.from(this.components.values());return {total:e.length,byType:e.reduce((r,o)=>(r[o.type]=(r[o.type]||0)+1,r),{}),hasCustomRenderers:{row:!!this.formRenderConfig.rowRenderer,body:!!this.formRenderConfig.bodyRenderer,submitButton:!!this.formRenderConfig.submitButtonRenderer,field:!!this.formRenderConfig.fieldRenderer,stepper:!!this.workflowRenderConfig.stepperRenderer,workflowNextButton:!!this.workflowRenderConfig.nextButtonRenderer,workflowPreviousButton:!!this.workflowRenderConfig.previousButtonRenderer,workflowSkipButton:!!this.workflowRenderConfig.skipButtonRenderer}}}validate(){let e=[],r=Array.from(this.components.values()),o=r.map(a=>a.id),t=o.filter((a,s)=>o.indexOf(a)!==s);t.length>0&&e.push(`Duplicate component IDs found: ${t.join(", ")}`);let i=r.filter(a=>!a.renderer);return i.length>0&&e.push(`Components without renderer: ${i.map(a=>a.id).join(", ")}`),e}};var f=n=>async e=>{try{return await n.parseAsync(e),{isValid:!0,errors:[]}}catch(r){return r&&typeof r=="object"&&"errors"in r&&Array.isArray(r.errors)?{isValid:false,errors:r.errors.map(o=>({code:o.code,message:o.message,path:o.path?o.path.map(String):[]}))}:{isValid:false,errors:[{code:"unknown",message:r instanceof Error?r.message:"Unknown validation error"}]}}},R=n=>async(e,r,o)=>{try{let t=await n(e,r);return t===!0?{isValid:!0,errors:[]}:t===!1?{isValid:!1,errors:[{code:"validation_failed",message:"Validation failed"}]}:{isValid:!1,errors:[{code:"validation_failed",message:String(t)}]}}catch(t){return {isValid:false,errors:[{code:"validation_error",message:t instanceof Error?t.message:"Validation error"}]}}},P=(n,e="all")=>async(r,o,t)=>{let i=await Promise.all(n.map(d=>d(r,o,t)));if(e==="all"){let d=i.flatMap(l=>l.errors);return {isValid:i.every(l=>l.isValid),errors:d}}return i.some(d=>d.isValid)?{isValid:true,errors:[]}:{isValid:false,errors:i.flatMap(d=>d.errors)}},x=(n,e)=>async(r,o,t)=>n(r,o)?e(r,o,t):{isValid:true,errors:[]},v={required:(n="This field is required")=>R(e=>e==null||e===""?n:!0),email:(n="Invalid email format")=>f(zod.z.string().email(n)),minLength:(n,e)=>f(zod.z.string().min(n,e||`Minimum ${n} characters required`)),maxLength:(n,e)=>f(zod.z.string().max(n,e||`Maximum ${n} characters allowed`)),pattern:(n,e="Invalid format")=>f(zod.z.string().regex(n,e)),numberRange:(n,e,r)=>{let o=zod.z.number();return n!==void 0&&(o=o.min(n,r||`Value must be at least ${n}`)),e!==void 0&&(o=o.max(e,r||`Value must be at most ${e}`)),f(o)},url:(n="Invalid URL format")=>f(zod.z.string().url(n)),phoneNumber:(n="Invalid phone number format")=>f(zod.z.string().regex(/^\+?[\d\s\-\(\)]+$/,n)),asyncValidation:(n,e=300)=>{let r=new Map;return (o,t,i)=>new Promise(a=>{let s=`${t.fieldId}-${JSON.stringify(o)}`;r.has(s)&&clearTimeout(r.get(s));let d=setTimeout(async()=>{try{let l=await n(o,t);a(l===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof l=="string"?l:"Async validation failed"}]});}catch(l){a({isValid:false,errors:[{code:"async_validation_error",message:l instanceof Error?l.message:"Async validation error"}]});}finally{r.delete(s);}},e);r.set(s,d);})}},b=(n,e=[])=>({isValid:n,errors:e}),S=(n,e,r)=>({code:n,message:e,path:r});var m=class{constructor(){this.name="localStorage";}async save(e,r){try{localStorage.setItem(e,JSON.stringify(r));}catch(o){throw new Error(`Failed to save to localStorage: ${o}`)}}async load(e){try{let r=localStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from localStorage: ${r}`)}}async remove(e){try{localStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from localStorage: ${r}`)}}async exists(e){return localStorage.getItem(e)!==null}async list(e){let r=[];for(let o=0;o<localStorage.length;o++){let t=localStorage.key(o);t&&(!e||t.includes(e))&&r.push(t);}return r}},y=class{constructor(){this.name="sessionStorage";}async save(e,r){try{sessionStorage.setItem(e,JSON.stringify(r));}catch(o){throw new Error(`Failed to save to sessionStorage: ${o}`)}}async load(e){try{let r=sessionStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from sessionStorage: ${r}`)}}async remove(e){try{sessionStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from sessionStorage: ${r}`)}}async exists(e){return sessionStorage.getItem(e)!==null}async list(e){let r=[];for(let o=0;o<sessionStorage.length;o++){let t=sessionStorage.key(o);t&&(!e||t.includes(e))&&r.push(t);}return r}},p=class{constructor(){this.name="memory";this.storage=new Map;}async save(e,r){this.storage.set(e,{...r});}async load(e){let r=this.storage.get(e);return r?{...r}:null}async remove(e){this.storage.delete(e);}async exists(e){return this.storage.has(e)}async list(e){let r=Array.from(this.storage.keys());return e?r.filter(o=>o.includes(e)):r}clear(){this.storage.clear();}},g=class{constructor(e,r=[]){this.primary=e;this.fallbacks=r;this.name="composite";}async save(e,r){let o=[this.primary,...this.fallbacks];for(let t of o)try{await t.save(e,r);return}catch(i){console.warn(`Failed to save with ${t.name}:`,i);}throw new Error("All persistence adapters failed to save")}async load(e){let r=[this.primary,...this.fallbacks];for(let o of r)try{let t=await o.load(e);if(t)return t}catch(t){console.warn(`Failed to load with ${o.name}:`,t);}return null}async remove(e){let r=[this.primary,...this.fallbacks],o=[];for(let t of r)try{await t.remove(e);}catch(i){o.push(i);}if(o.length===r.length)throw new Error(`All adapters failed to remove: ${o.map(t=>t.message).join(", ")}`)}async exists(e){let r=[this.primary,...this.fallbacks];for(let o of r)try{if(await o.exists(e))return !0}catch(t){console.warn(`Failed to check existence with ${o.name}:`,t);}return false}async list(e){try{return await this.primary.list?.(e)||[]}catch(r){console.warn("Failed to list with primary adapter:",r);for(let o of this.fallbacks)try{return await o.list?.(e)||[]}catch(t){console.warn(`Failed to list with fallback ${o.name}:`,t);}return []}}};var B={localStorage(n={}){return {adapter:new m,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...n}},sessionStorage(n={}){return {adapter:new y,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...n}},memory(n={}){return {adapter:new p,debounceMs:0,autoSave:true,saveOnStepChange:true,...n}},custom(n,e={}){return {adapter:n,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function E(n,e,r={}){let o=e||new p;return {adapter:{name:`resilient-${n.name}`,async save(i,a){try{await n.save(i,a);}catch(s){console.warn("Primary persistence failed, using fallback:",s),await o.save(i,a);}},async load(i){try{let a=await n.load(i);if(a)return a}catch(a){console.warn("Primary persistence load failed, trying fallback:",a);}return await o.load(i)},async remove(i){let a=[];try{await n.remove(i);}catch(s){a.push(s);}try{await o.remove(i);}catch(s){a.push(s);}if(a.length===2)throw new Error(`Both adapters failed: ${a.map(s=>s.message).join(", ")}`)},async exists(i){try{if(await n.exists(i))return !0}catch(a){console.warn("Primary persistence exists check failed:",a);}try{return await o.exists(i)}catch(a){return console.warn("Fallback persistence exists check failed:",a),false}},async list(i){try{return await n.list?.(i)||[]}catch(a){console.warn("Primary persistence list failed:",a);try{return await o.list?.(i)||[]}catch(s){return console.warn("Fallback persistence list failed:",s),[]}}}},debounceMs:1e3,autoSave:true,saveOnStepChange:true,maxRetries:3,retryDelayMs:1e3,...r}}exports.CompositeAdapter=g;exports.LocalStorageAdapter=m;exports.MemoryAdapter=p;exports.SessionStorageAdapter=y;exports.combineValidators=P;exports.commonValidators=v;exports.createConditionalValidator=x;exports.createCustomValidator=R;exports.createResilientPersistence=E;exports.createValidationError=S;exports.createValidationResult=b;exports.createZodValidator=f;exports.persistence=B;exports.resolveRendererChildren=w;exports.ril=u;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import {z}from'zod';var h=class o{constructor(){this.components=new Map;this.formRenderConfig={};this.workflowRenderConfig={};}static create(){return new o}addComponent(e,r){let t={id:e,type:e,...r};return this.components.set(e,t),this}setRowRenderer(e){return this.formRenderConfig={...this.formRenderConfig,rowRenderer:e},this}setBodyRenderer(e){return this.formRenderConfig={...this.formRenderConfig,bodyRenderer:e},this}setSubmitButtonRenderer(e){return this.formRenderConfig={...this.formRenderConfig,submitButtonRenderer:e},this}setFieldRenderer(e){return this.formRenderConfig={...this.formRenderConfig,fieldRenderer:e},this}setFormRenderConfig(e){return this.formRenderConfig=e,this}getFormRenderConfig(){return {...this.formRenderConfig}}setStepperRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,stepperRenderer:e},this}setWorkflowNavigationRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,navigationRenderer:e},this}setWorkflowNextButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,nextButtonRenderer:e},this}setWorkflowPreviousButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,previousButtonRenderer:e},this}setWorkflowSkipButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,skipButtonRenderer:e},this}setWorkflowRenderConfig(e){return this.workflowRenderConfig=e,this}getWorkflowRenderConfig(){return {...this.workflowRenderConfig}}setRenderConfig(e){return this.setFormRenderConfig(e)}getComponent(e){return this.components.get(e)}getComponentsByCategory(e){return Array.from(this.components.values()).filter(r=>r.category===e)}getAllComponents(){return Array.from(this.components.values())}hasComponent(e){return this.components.has(e)}removeComponent(e){return this.components.delete(e)}clear(){this.components.clear();}export(){return Object.fromEntries(this.components)}import(e){for(let[r,t]of Object.entries(e))this.components.set(r,t);return this}getStats(){let e=Array.from(this.components.values());return {total:e.length,byType:e.reduce((r,t)=>(r[t.type]=(r[t.type]||0)+1,r),{}),byCategory:e.reduce((r,t)=>{let n=t.category||"uncategorized";return r[n]=(r[n]||0)+1,r},{}),hasCustomRenderers:{row:!!this.formRenderConfig.rowRenderer,body:!!this.formRenderConfig.bodyRenderer,submitButton:!!this.formRenderConfig.submitButtonRenderer,field:!!this.formRenderConfig.fieldRenderer,stepper:!!this.workflowRenderConfig.stepperRenderer,workflowNavigation:!!this.workflowRenderConfig.navigationRenderer,workflowNextButton:!!this.workflowRenderConfig.nextButtonRenderer,workflowPreviousButton:!!this.workflowRenderConfig.previousButtonRenderer,workflowSkipButton:!!this.workflowRenderConfig.skipButtonRenderer}}}validate(){let e=[],r=Array.from(this.components.values()),t=r.map(s=>s.id),n=t.filter((s,a)=>t.indexOf(s)!==a);n.length>0&&e.push(`Duplicate component IDs found: ${n.join(", ")}`);let i=r.filter(s=>!s.renderer);return i.length>0&&e.push(`Components without renderer: ${i.map(s=>s.id).join(", ")}`),e}};var f=o=>async e=>{try{return await o.parseAsync(e),{isValid:!0,errors:[]}}catch(r){return r&&typeof r=="object"&&"errors"in r&&Array.isArray(r.errors)?{isValid:false,errors:r.errors.map(t=>({code:t.code,message:t.message,path:t.path?t.path.map(String):[]}))}:{isValid:false,errors:[{code:"unknown",message:r instanceof Error?r.message:"Unknown validation error"}]}}},y=o=>async(e,r,t)=>{try{let n=await o(e,r);return n===!0?{isValid:!0,errors:[]}:n===!1?{isValid:!1,errors:[{code:"validation_failed",message:"Validation failed"}]}:{isValid:!1,errors:[{code:"validation_failed",message:String(n)}]}}catch(n){return {isValid:false,errors:[{code:"validation_error",message:n instanceof Error?n.message:"Validation error"}]}}},k=(o,e="all")=>async(r,t,n)=>{let i=await Promise.all(o.map(l=>l(r,t,n)));if(e==="all"){let l=i.flatMap(u=>u.errors),d=i.flatMap(u=>u.warnings||[]);return {isValid:i.every(u=>u.isValid),errors:l,warnings:d.length>0?d:void 0}}if(i.some(l=>l.isValid)){let l=i.flatMap(d=>d.warnings||[]);return {isValid:true,errors:[],warnings:l.length>0?l:void 0}}return {isValid:false,errors:i.flatMap(l=>l.errors)}},v=(o,e)=>async(r,t,n)=>o(r,t)?e(r,t,n):{isValid:true,errors:[]},P={required:(o="This field is required")=>y(e=>e==null||e===""?o:!0),email:(o="Invalid email format")=>f(z.string().email(o)),minLength:(o,e)=>f(z.string().min(o,e||`Minimum ${o} characters required`)),maxLength:(o,e)=>f(z.string().max(o,e||`Maximum ${o} characters allowed`)),pattern:(o,e="Invalid format")=>f(z.string().regex(o,e)),numberRange:(o,e,r)=>{let t=z.number();return o!==void 0&&(t=t.min(o,r||`Value must be at least ${o}`)),e!==void 0&&(t=t.max(e,r||`Value must be at most ${e}`)),f(t)},url:(o="Invalid URL format")=>f(z.string().url(o)),phoneNumber:(o="Invalid phone number format")=>f(z.string().regex(/^\+?[\d\s\-\(\)]+$/,o)),asyncValidation:(o,e=300)=>{let r=new Map;return (t,n,i)=>new Promise(s=>{let a=`${n.fieldId}-${JSON.stringify(t)}`;r.has(a)&&clearTimeout(r.get(a));let l=setTimeout(async()=>{try{let d=await o(t,n);s(d===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof d=="string"?d:"Async validation failed"}]});}catch(d){s({isValid:false,errors:[{code:"async_validation_error",message:d instanceof Error?d.message:"Async validation error"}]});}finally{r.delete(a);}},e);r.set(a,l);})}},b=(o,e=[],r)=>({isValid:o,errors:e,warnings:r}),V=(o,e,r)=>({code:o,message:e,path:r});var g=class{constructor(){this.name="localStorage";}async save(e,r){try{localStorage.setItem(e,JSON.stringify(r));}catch(t){throw new Error(`Failed to save to localStorage: ${t}`)}}async load(e){try{let r=localStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from localStorage: ${r}`)}}async remove(e){try{localStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from localStorage: ${r}`)}}async exists(e){return localStorage.getItem(e)!==null}async list(e){let r=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&(!e||n.includes(e))&&r.push(n);}return r}},p=class{constructor(){this.name="sessionStorage";}async save(e,r){try{sessionStorage.setItem(e,JSON.stringify(r));}catch(t){throw new Error(`Failed to save to sessionStorage: ${t}`)}}async load(e){try{let r=sessionStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from sessionStorage: ${r}`)}}async remove(e){try{sessionStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from sessionStorage: ${r}`)}}async exists(e){return sessionStorage.getItem(e)!==null}async list(e){let r=[];for(let t=0;t<sessionStorage.length;t++){let n=sessionStorage.key(t);n&&(!e||n.includes(e))&&r.push(n);}return r}},m=class{constructor(){this.name="memory";this.storage=new Map;}async save(e,r){this.storage.set(e,{...r});}async load(e){let r=this.storage.get(e);return r?{...r}:null}async remove(e){this.storage.delete(e);}async exists(e){return this.storage.has(e)}async list(e){let r=Array.from(this.storage.keys());return e?r.filter(t=>t.includes(e)):r}clear(){this.storage.clear();}},w=class{constructor(e,r=[]){this.primary=e;this.fallbacks=r;this.name="composite";}async save(e,r){let t=[this.primary,...this.fallbacks];for(let n of t)try{await n.save(e,r);return}catch(i){console.warn(`Failed to save with ${n.name}:`,i);}throw new Error("All persistence adapters failed to save")}async load(e){let r=[this.primary,...this.fallbacks];for(let t of r)try{let n=await t.load(e);if(n)return n}catch(n){console.warn(`Failed to load with ${t.name}:`,n);}return null}async remove(e){let r=[this.primary,...this.fallbacks],t=[];for(let n of r)try{await n.remove(e);}catch(i){t.push(i);}if(t.length===r.length)throw new Error(`All adapters failed to remove: ${t.map(n=>n.message).join(", ")}`)}async exists(e){let r=[this.primary,...this.fallbacks];for(let t of r)try{if(await t.exists(e))return !0}catch(n){console.warn(`Failed to check existence with ${t.name}:`,n);}return false}async list(e){try{return await this.primary.list?.(e)||[]}catch(r){console.warn("Failed to list with primary adapter:",r);for(let t of this.fallbacks)try{return await t.list?.(e)||[]}catch(n){console.warn(`Failed to list with fallback ${t.name}:`,n);}return []}}};var F={localStorage(o={}){return {adapter:new g,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...o}},sessionStorage(o={}){return {adapter:new p,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...o}},memory(o={}){return {adapter:new m,debounceMs:0,autoSave:true,saveOnStepChange:true,...o}},custom(o,e={}){return {adapter:o,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function W(o,e,r={}){let t=e||new m;return {adapter:{name:`resilient-${o.name}`,async save(i,s){try{await o.save(i,s);}catch(a){console.warn("Primary persistence failed, using fallback:",a),await t.save(i,s);}},async load(i){try{let s=await o.load(i);if(s)return s}catch(s){console.warn("Primary persistence load failed, trying fallback:",s);}return await t.load(i)},async remove(i){let s=[];try{await o.remove(i);}catch(a){s.push(a);}try{await t.remove(i);}catch(a){s.push(a);}if(s.length===2)throw new Error(`Both adapters failed: ${s.map(a=>a.message).join(", ")}`)},async exists(i){try{if(await o.exists(i))return !0}catch(s){console.warn("Primary persistence exists check failed:",s);}try{return await t.exists(i)}catch(s){return console.warn("Fallback persistence exists check failed:",s),false}},async list(i){try{return await o.list?.(i)||[]}catch(s){console.warn("Primary persistence list failed:",s);try{return await t.list?.(i)||[]}catch(a){return console.warn("Fallback persistence list failed:",a),[]}}}},debounceMs:1e3,autoSave:true,saveOnStepChange:true,maxRetries:3,retryDelayMs:1e3,...r}}export{w as CompositeAdapter,g as LocalStorageAdapter,m as MemoryAdapter,p as SessionStorageAdapter,k as combineValidators,P as commonValidators,v as createConditionalValidator,y as createCustomValidator,W as createResilientPersistence,V as createValidationError,b as createValidationResult,f as createZodValidator,F as persistence,h as ril};
1
+ import {z}from'zod';function w(n,e){return typeof n=="function"?n(e):n}var u=class n{constructor(){this.components=new Map;this.formRenderConfig={};this.workflowRenderConfig={};}static create(){return new n}addComponent(e,r){let o={id:e,type:e,...r};return this.components.set(e,o),this}setRenderer(e,r){return e in this.formRenderConfig?this.formRenderConfig={...this.formRenderConfig,[e]:r}:e in this.workflowRenderConfig&&(this.workflowRenderConfig={...this.workflowRenderConfig,[e]:r}),this}setRenderers(e){let r={},o={};for(let[t,i]of Object.entries(e))["rowRenderer","bodyRenderer","submitButtonRenderer","fieldRenderer"].includes(t)?r[t]=i:o[t]=i;return this.formRenderConfig={...this.formRenderConfig,...r},this.workflowRenderConfig={...this.workflowRenderConfig,...o},this}setRowRenderer(e){return this.formRenderConfig={...this.formRenderConfig,rowRenderer:e},this}setBodyRenderer(e){return this.formRenderConfig={...this.formRenderConfig,bodyRenderer:e},this}setSubmitButtonRenderer(e){return this.formRenderConfig={...this.formRenderConfig,submitButtonRenderer:e},this}setFieldRenderer(e){return this.formRenderConfig={...this.formRenderConfig,fieldRenderer:e},this}setFormRenderConfig(e){return this.formRenderConfig=e,this}getFormRenderConfig(){return {...this.formRenderConfig}}setStepperRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,stepperRenderer:e},this}setWorkflowNextButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,nextButtonRenderer:e},this}setWorkflowPreviousButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,previousButtonRenderer:e},this}setWorkflowSkipButtonRenderer(e){return this.workflowRenderConfig={...this.workflowRenderConfig,skipButtonRenderer:e},this}setWorkflowRenderConfig(e){return this.workflowRenderConfig=e,this}getWorkflowRenderConfig(){return {...this.workflowRenderConfig}}setRenderConfig(e){return this.setFormRenderConfig(e)}getComponent(e){return this.components.get(e)}getAllComponents(){return Array.from(this.components.values())}hasComponent(e){return this.components.has(e)}removeComponent(e){return this.components.delete(e)}clear(){this.components.clear();}getStats(){let e=Array.from(this.components.values());return {total:e.length,byType:e.reduce((r,o)=>(r[o.type]=(r[o.type]||0)+1,r),{}),hasCustomRenderers:{row:!!this.formRenderConfig.rowRenderer,body:!!this.formRenderConfig.bodyRenderer,submitButton:!!this.formRenderConfig.submitButtonRenderer,field:!!this.formRenderConfig.fieldRenderer,stepper:!!this.workflowRenderConfig.stepperRenderer,workflowNextButton:!!this.workflowRenderConfig.nextButtonRenderer,workflowPreviousButton:!!this.workflowRenderConfig.previousButtonRenderer,workflowSkipButton:!!this.workflowRenderConfig.skipButtonRenderer}}}validate(){let e=[],r=Array.from(this.components.values()),o=r.map(a=>a.id),t=o.filter((a,s)=>o.indexOf(a)!==s);t.length>0&&e.push(`Duplicate component IDs found: ${t.join(", ")}`);let i=r.filter(a=>!a.renderer);return i.length>0&&e.push(`Components without renderer: ${i.map(a=>a.id).join(", ")}`),e}};var f=n=>async e=>{try{return await n.parseAsync(e),{isValid:!0,errors:[]}}catch(r){return r&&typeof r=="object"&&"errors"in r&&Array.isArray(r.errors)?{isValid:false,errors:r.errors.map(o=>({code:o.code,message:o.message,path:o.path?o.path.map(String):[]}))}:{isValid:false,errors:[{code:"unknown",message:r instanceof Error?r.message:"Unknown validation error"}]}}},R=n=>async(e,r,o)=>{try{let t=await n(e,r);return t===!0?{isValid:!0,errors:[]}:t===!1?{isValid:!1,errors:[{code:"validation_failed",message:"Validation failed"}]}:{isValid:!1,errors:[{code:"validation_failed",message:String(t)}]}}catch(t){return {isValid:false,errors:[{code:"validation_error",message:t instanceof Error?t.message:"Validation error"}]}}},P=(n,e="all")=>async(r,o,t)=>{let i=await Promise.all(n.map(d=>d(r,o,t)));if(e==="all"){let d=i.flatMap(l=>l.errors);return {isValid:i.every(l=>l.isValid),errors:d}}return i.some(d=>d.isValid)?{isValid:true,errors:[]}:{isValid:false,errors:i.flatMap(d=>d.errors)}},x=(n,e)=>async(r,o,t)=>n(r,o)?e(r,o,t):{isValid:true,errors:[]},v={required:(n="This field is required")=>R(e=>e==null||e===""?n:!0),email:(n="Invalid email format")=>f(z.string().email(n)),minLength:(n,e)=>f(z.string().min(n,e||`Minimum ${n} characters required`)),maxLength:(n,e)=>f(z.string().max(n,e||`Maximum ${n} characters allowed`)),pattern:(n,e="Invalid format")=>f(z.string().regex(n,e)),numberRange:(n,e,r)=>{let o=z.number();return n!==void 0&&(o=o.min(n,r||`Value must be at least ${n}`)),e!==void 0&&(o=o.max(e,r||`Value must be at most ${e}`)),f(o)},url:(n="Invalid URL format")=>f(z.string().url(n)),phoneNumber:(n="Invalid phone number format")=>f(z.string().regex(/^\+?[\d\s\-\(\)]+$/,n)),asyncValidation:(n,e=300)=>{let r=new Map;return (o,t,i)=>new Promise(a=>{let s=`${t.fieldId}-${JSON.stringify(o)}`;r.has(s)&&clearTimeout(r.get(s));let d=setTimeout(async()=>{try{let l=await n(o,t);a(l===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof l=="string"?l:"Async validation failed"}]});}catch(l){a({isValid:false,errors:[{code:"async_validation_error",message:l instanceof Error?l.message:"Async validation error"}]});}finally{r.delete(s);}},e);r.set(s,d);})}},b=(n,e=[])=>({isValid:n,errors:e}),S=(n,e,r)=>({code:n,message:e,path:r});var m=class{constructor(){this.name="localStorage";}async save(e,r){try{localStorage.setItem(e,JSON.stringify(r));}catch(o){throw new Error(`Failed to save to localStorage: ${o}`)}}async load(e){try{let r=localStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from localStorage: ${r}`)}}async remove(e){try{localStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from localStorage: ${r}`)}}async exists(e){return localStorage.getItem(e)!==null}async list(e){let r=[];for(let o=0;o<localStorage.length;o++){let t=localStorage.key(o);t&&(!e||t.includes(e))&&r.push(t);}return r}},y=class{constructor(){this.name="sessionStorage";}async save(e,r){try{sessionStorage.setItem(e,JSON.stringify(r));}catch(o){throw new Error(`Failed to save to sessionStorage: ${o}`)}}async load(e){try{let r=sessionStorage.getItem(e);return r?JSON.parse(r):null}catch(r){throw new Error(`Failed to load from sessionStorage: ${r}`)}}async remove(e){try{sessionStorage.removeItem(e);}catch(r){throw new Error(`Failed to remove from sessionStorage: ${r}`)}}async exists(e){return sessionStorage.getItem(e)!==null}async list(e){let r=[];for(let o=0;o<sessionStorage.length;o++){let t=sessionStorage.key(o);t&&(!e||t.includes(e))&&r.push(t);}return r}},p=class{constructor(){this.name="memory";this.storage=new Map;}async save(e,r){this.storage.set(e,{...r});}async load(e){let r=this.storage.get(e);return r?{...r}:null}async remove(e){this.storage.delete(e);}async exists(e){return this.storage.has(e)}async list(e){let r=Array.from(this.storage.keys());return e?r.filter(o=>o.includes(e)):r}clear(){this.storage.clear();}},g=class{constructor(e,r=[]){this.primary=e;this.fallbacks=r;this.name="composite";}async save(e,r){let o=[this.primary,...this.fallbacks];for(let t of o)try{await t.save(e,r);return}catch(i){console.warn(`Failed to save with ${t.name}:`,i);}throw new Error("All persistence adapters failed to save")}async load(e){let r=[this.primary,...this.fallbacks];for(let o of r)try{let t=await o.load(e);if(t)return t}catch(t){console.warn(`Failed to load with ${o.name}:`,t);}return null}async remove(e){let r=[this.primary,...this.fallbacks],o=[];for(let t of r)try{await t.remove(e);}catch(i){o.push(i);}if(o.length===r.length)throw new Error(`All adapters failed to remove: ${o.map(t=>t.message).join(", ")}`)}async exists(e){let r=[this.primary,...this.fallbacks];for(let o of r)try{if(await o.exists(e))return !0}catch(t){console.warn(`Failed to check existence with ${o.name}:`,t);}return false}async list(e){try{return await this.primary.list?.(e)||[]}catch(r){console.warn("Failed to list with primary adapter:",r);for(let o of this.fallbacks)try{return await o.list?.(e)||[]}catch(t){console.warn(`Failed to list with fallback ${o.name}:`,t);}return []}}};var B={localStorage(n={}){return {adapter:new m,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...n}},sessionStorage(n={}){return {adapter:new y,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...n}},memory(n={}){return {adapter:new p,debounceMs:0,autoSave:true,saveOnStepChange:true,...n}},custom(n,e={}){return {adapter:n,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function E(n,e,r={}){let o=e||new p;return {adapter:{name:`resilient-${n.name}`,async save(i,a){try{await n.save(i,a);}catch(s){console.warn("Primary persistence failed, using fallback:",s),await o.save(i,a);}},async load(i){try{let a=await n.load(i);if(a)return a}catch(a){console.warn("Primary persistence load failed, trying fallback:",a);}return await o.load(i)},async remove(i){let a=[];try{await n.remove(i);}catch(s){a.push(s);}try{await o.remove(i);}catch(s){a.push(s);}if(a.length===2)throw new Error(`Both adapters failed: ${a.map(s=>s.message).join(", ")}`)},async exists(i){try{if(await n.exists(i))return !0}catch(a){console.warn("Primary persistence exists check failed:",a);}try{return await o.exists(i)}catch(a){return console.warn("Fallback persistence exists check failed:",a),false}},async list(i){try{return await n.list?.(i)||[]}catch(a){console.warn("Primary persistence list failed:",a);try{return await o.list?.(i)||[]}catch(s){return console.warn("Fallback persistence list failed:",s),[]}}}},debounceMs:1e3,autoSave:true,saveOnStepChange:true,maxRetries:3,retryDelayMs:1e3,...r}}export{g as CompositeAdapter,m as LocalStorageAdapter,p as MemoryAdapter,y as SessionStorageAdapter,P as combineValidators,v as commonValidators,x as createConditionalValidator,R as createCustomValidator,E as createResilientPersistence,S as createValidationError,b as createValidationResult,f as createZodValidator,B as persistence,w as resolveRendererChildren,u as ril};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rilaykit/core",
3
- "version": "1.2.0",
3
+ "version": "2.0.0",
4
4
  "description": "Core types, configurations, and utilities for the RilayKit form library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",