@rilaykit/core 1.1.0 → 1.3.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 +49 -1
- package/dist/index.d.ts +49 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -64,6 +64,24 @@ declare class ril {
|
|
|
64
64
|
* @returns The ril instance for chaining
|
|
65
65
|
*/
|
|
66
66
|
setWorkflowNavigationRenderer(renderer: WorkflowNavigationRenderer): this;
|
|
67
|
+
/**
|
|
68
|
+
* Set custom workflow next button renderer
|
|
69
|
+
* @param renderer - Custom workflow next button renderer function
|
|
70
|
+
* @returns The ril instance for chaining
|
|
71
|
+
*/
|
|
72
|
+
setWorkflowNextButtonRenderer(renderer: WorkflowNextButtonRenderer): this;
|
|
73
|
+
/**
|
|
74
|
+
* Set custom workflow previous button renderer
|
|
75
|
+
* @param renderer - Custom workflow previous button renderer function
|
|
76
|
+
* @returns The ril instance for chaining
|
|
77
|
+
*/
|
|
78
|
+
setWorkflowPreviousButtonRenderer(renderer: WorkflowPreviousButtonRenderer): this;
|
|
79
|
+
/**
|
|
80
|
+
* Set custom workflow skip button renderer
|
|
81
|
+
* @param renderer - Custom workflow skip button renderer function
|
|
82
|
+
* @returns The ril instance for chaining
|
|
83
|
+
*/
|
|
84
|
+
setWorkflowSkipButtonRenderer(renderer: WorkflowSkipButtonRenderer): this;
|
|
67
85
|
/**
|
|
68
86
|
* Set complete workflow render configuration
|
|
69
87
|
* @param config - Workflow render configuration
|
|
@@ -138,6 +156,9 @@ declare class ril {
|
|
|
138
156
|
field: boolean;
|
|
139
157
|
stepper: boolean;
|
|
140
158
|
workflowNavigation: boolean;
|
|
159
|
+
workflowNextButton: boolean;
|
|
160
|
+
workflowPreviousButton: boolean;
|
|
161
|
+
workflowSkipButton: boolean;
|
|
141
162
|
};
|
|
142
163
|
};
|
|
143
164
|
/**
|
|
@@ -420,6 +441,9 @@ type WorkflowNavigationRenderer = (props: WorkflowNavigationRendererProps) => Re
|
|
|
420
441
|
interface WorkflowRenderConfig {
|
|
421
442
|
readonly stepperRenderer?: WorkflowStepperRenderer;
|
|
422
443
|
readonly navigationRenderer?: WorkflowNavigationRenderer;
|
|
444
|
+
readonly nextButtonRenderer?: WorkflowNextButtonRenderer;
|
|
445
|
+
readonly previousButtonRenderer?: WorkflowPreviousButtonRenderer;
|
|
446
|
+
readonly skipButtonRenderer?: WorkflowSkipButtonRenderer;
|
|
423
447
|
}
|
|
424
448
|
interface FormRowRendererProps {
|
|
425
449
|
row: FormFieldRow;
|
|
@@ -469,6 +493,30 @@ interface FormConfiguration {
|
|
|
469
493
|
readonly allFields: FormFieldConfig[];
|
|
470
494
|
readonly renderConfig?: FormRenderConfig;
|
|
471
495
|
}
|
|
496
|
+
interface WorkflowNextButtonRendererProps {
|
|
497
|
+
isLastStep: boolean;
|
|
498
|
+
canGoNext: boolean;
|
|
499
|
+
isSubmitting: boolean;
|
|
500
|
+
onNext: (event?: React.FormEvent) => void;
|
|
501
|
+
onSubmit: (event?: React.FormEvent) => void;
|
|
502
|
+
className?: string;
|
|
503
|
+
children?: React.ReactNode;
|
|
504
|
+
}
|
|
505
|
+
interface WorkflowPreviousButtonRendererProps {
|
|
506
|
+
canGoPrevious: boolean;
|
|
507
|
+
onPrevious: (event?: React.FormEvent) => void;
|
|
508
|
+
className?: string;
|
|
509
|
+
children?: React.ReactNode;
|
|
510
|
+
}
|
|
511
|
+
interface WorkflowSkipButtonRendererProps {
|
|
512
|
+
canSkip: boolean;
|
|
513
|
+
onSkip: (event?: React.FormEvent) => void;
|
|
514
|
+
className?: string;
|
|
515
|
+
children?: React.ReactNode;
|
|
516
|
+
}
|
|
517
|
+
type WorkflowNextButtonRenderer = (props: WorkflowNextButtonRendererProps) => React.ReactElement;
|
|
518
|
+
type WorkflowPreviousButtonRenderer = (props: WorkflowPreviousButtonRendererProps) => React.ReactElement;
|
|
519
|
+
type WorkflowSkipButtonRenderer = (props: WorkflowSkipButtonRendererProps) => React.ReactElement;
|
|
472
520
|
|
|
473
521
|
/**
|
|
474
522
|
* Create a Zod-based validator
|
|
@@ -634,4 +682,4 @@ declare const persistence: {
|
|
|
634
682
|
*/
|
|
635
683
|
declare function createResilientPersistence(primary: PersistenceAdapter, fallback?: PersistenceAdapter, options?: Partial<PersistenceConfig>): PersistenceConfig;
|
|
636
684
|
|
|
637
|
-
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 WorkflowOptimizations, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowRenderConfig, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, type WorkflowVersion, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, ril };
|
|
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -64,6 +64,24 @@ declare class ril {
|
|
|
64
64
|
* @returns The ril instance for chaining
|
|
65
65
|
*/
|
|
66
66
|
setWorkflowNavigationRenderer(renderer: WorkflowNavigationRenderer): this;
|
|
67
|
+
/**
|
|
68
|
+
* Set custom workflow next button renderer
|
|
69
|
+
* @param renderer - Custom workflow next button renderer function
|
|
70
|
+
* @returns The ril instance for chaining
|
|
71
|
+
*/
|
|
72
|
+
setWorkflowNextButtonRenderer(renderer: WorkflowNextButtonRenderer): this;
|
|
73
|
+
/**
|
|
74
|
+
* Set custom workflow previous button renderer
|
|
75
|
+
* @param renderer - Custom workflow previous button renderer function
|
|
76
|
+
* @returns The ril instance for chaining
|
|
77
|
+
*/
|
|
78
|
+
setWorkflowPreviousButtonRenderer(renderer: WorkflowPreviousButtonRenderer): this;
|
|
79
|
+
/**
|
|
80
|
+
* Set custom workflow skip button renderer
|
|
81
|
+
* @param renderer - Custom workflow skip button renderer function
|
|
82
|
+
* @returns The ril instance for chaining
|
|
83
|
+
*/
|
|
84
|
+
setWorkflowSkipButtonRenderer(renderer: WorkflowSkipButtonRenderer): this;
|
|
67
85
|
/**
|
|
68
86
|
* Set complete workflow render configuration
|
|
69
87
|
* @param config - Workflow render configuration
|
|
@@ -138,6 +156,9 @@ declare class ril {
|
|
|
138
156
|
field: boolean;
|
|
139
157
|
stepper: boolean;
|
|
140
158
|
workflowNavigation: boolean;
|
|
159
|
+
workflowNextButton: boolean;
|
|
160
|
+
workflowPreviousButton: boolean;
|
|
161
|
+
workflowSkipButton: boolean;
|
|
141
162
|
};
|
|
142
163
|
};
|
|
143
164
|
/**
|
|
@@ -420,6 +441,9 @@ type WorkflowNavigationRenderer = (props: WorkflowNavigationRendererProps) => Re
|
|
|
420
441
|
interface WorkflowRenderConfig {
|
|
421
442
|
readonly stepperRenderer?: WorkflowStepperRenderer;
|
|
422
443
|
readonly navigationRenderer?: WorkflowNavigationRenderer;
|
|
444
|
+
readonly nextButtonRenderer?: WorkflowNextButtonRenderer;
|
|
445
|
+
readonly previousButtonRenderer?: WorkflowPreviousButtonRenderer;
|
|
446
|
+
readonly skipButtonRenderer?: WorkflowSkipButtonRenderer;
|
|
423
447
|
}
|
|
424
448
|
interface FormRowRendererProps {
|
|
425
449
|
row: FormFieldRow;
|
|
@@ -469,6 +493,30 @@ interface FormConfiguration {
|
|
|
469
493
|
readonly allFields: FormFieldConfig[];
|
|
470
494
|
readonly renderConfig?: FormRenderConfig;
|
|
471
495
|
}
|
|
496
|
+
interface WorkflowNextButtonRendererProps {
|
|
497
|
+
isLastStep: boolean;
|
|
498
|
+
canGoNext: boolean;
|
|
499
|
+
isSubmitting: boolean;
|
|
500
|
+
onNext: (event?: React.FormEvent) => void;
|
|
501
|
+
onSubmit: (event?: React.FormEvent) => void;
|
|
502
|
+
className?: string;
|
|
503
|
+
children?: React.ReactNode;
|
|
504
|
+
}
|
|
505
|
+
interface WorkflowPreviousButtonRendererProps {
|
|
506
|
+
canGoPrevious: boolean;
|
|
507
|
+
onPrevious: (event?: React.FormEvent) => void;
|
|
508
|
+
className?: string;
|
|
509
|
+
children?: React.ReactNode;
|
|
510
|
+
}
|
|
511
|
+
interface WorkflowSkipButtonRendererProps {
|
|
512
|
+
canSkip: boolean;
|
|
513
|
+
onSkip: (event?: React.FormEvent) => void;
|
|
514
|
+
className?: string;
|
|
515
|
+
children?: React.ReactNode;
|
|
516
|
+
}
|
|
517
|
+
type WorkflowNextButtonRenderer = (props: WorkflowNextButtonRendererProps) => React.ReactElement;
|
|
518
|
+
type WorkflowPreviousButtonRenderer = (props: WorkflowPreviousButtonRendererProps) => React.ReactElement;
|
|
519
|
+
type WorkflowSkipButtonRenderer = (props: WorkflowSkipButtonRendererProps) => React.ReactElement;
|
|
472
520
|
|
|
473
521
|
/**
|
|
474
522
|
* Create a Zod-based validator
|
|
@@ -634,4 +682,4 @@ declare const persistence: {
|
|
|
634
682
|
*/
|
|
635
683
|
declare function createResilientPersistence(primary: PersistenceAdapter, fallback?: PersistenceAdapter, options?: Partial<PersistenceConfig>): PersistenceConfig;
|
|
636
684
|
|
|
637
|
-
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 WorkflowOptimizations, type WorkflowPersistenceData, type WorkflowPlugin, type WorkflowRenderConfig, type WorkflowStepperRenderer, type WorkflowStepperRendererProps, type WorkflowVersion, combineValidators, commonValidators, createConditionalValidator, createCustomValidator, createResilientPersistence, createValidationError, createValidationResult, createZodValidator, persistence, ril };
|
|
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 };
|
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}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}}}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"}]}}},w=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"}]}}},v=(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(m=>m.errors),c=i.flatMap(m=>m.warnings||[]);return {isValid:i.every(m=>m.isValid),errors:l,warnings:c.length>0?c:void 0}}if(i.some(l=>l.isValid)){let l=i.flatMap(c=>c.warnings||[]);return {isValid:true,errors:[],warnings:l.length>0?l:void 0}}return {isValid:false,errors:i.flatMap(l=>l.errors)}},P=(o,e)=>async(r,t,n)=>o(r,t)?e(r,t,n):{isValid:true,errors:[]},b={required:(o="This field is required")=>w(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 c=await o(t,n);s(c===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof c=="string"?c:"Async validation failed"}]});}catch(c){s({isValid:false,errors:[{code:"async_validation_error",message:c instanceof Error?c.message:"Async validation error"}]});}finally{r.delete(a);}},e);r.set(a,l);})}},k=(o,e=[],r)=>({isValid:o,errors:e,warnings:r}),V=(o,e,r)=>({code:o,message:e,path:r});var u=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}},g=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();}},y=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 E={localStorage(o={}){return {adapter:new u,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 g,debounceMs:0,autoSave:true,saveOnStepChange:true,...o}},custom(o,e={}){return {adapter:o,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function A(o,e,r={}){let t=e||new g;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=y;exports.LocalStorageAdapter=u;exports.MemoryAdapter=g;exports.SessionStorageAdapter=p;exports.combineValidators=v;exports.commonValidators=b;exports.createConditionalValidator=P;exports.createCustomValidator=w;exports.createResilientPersistence=A;exports.createValidationError=V;exports.createValidationResult=k;exports.createZodValidator=f;exports.persistence=E;exports.ril=h;
|
|
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;
|
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}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}}}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"}]}}},w=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"}]}}},v=(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(m=>m.errors),c=i.flatMap(m=>m.warnings||[]);return {isValid:i.every(m=>m.isValid),errors:l,warnings:c.length>0?c:void 0}}if(i.some(l=>l.isValid)){let l=i.flatMap(c=>c.warnings||[]);return {isValid:true,errors:[],warnings:l.length>0?l:void 0}}return {isValid:false,errors:i.flatMap(l=>l.errors)}},P=(o,e)=>async(r,t,n)=>o(r,t)?e(r,t,n):{isValid:true,errors:[]},b={required:(o="This field is required")=>w(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 c=await o(t,n);s(c===!0?{isValid:!0,errors:[]}:{isValid:!1,errors:[{code:"async_validation_failed",message:typeof c=="string"?c:"Async validation failed"}]});}catch(c){s({isValid:false,errors:[{code:"async_validation_error",message:c instanceof Error?c.message:"Async validation error"}]});}finally{r.delete(a);}},e);r.set(a,l);})}},k=(o,e=[],r)=>({isValid:o,errors:e,warnings:r}),V=(o,e,r)=>({code:o,message:e,path:r});var u=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}},g=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();}},y=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 E={localStorage(o={}){return {adapter:new u,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 g,debounceMs:0,autoSave:true,saveOnStepChange:true,...o}},custom(o,e={}){return {adapter:o,debounceMs:1e3,autoSave:true,saveOnStepChange:true,...e}}};function A(o,e,r={}){let t=e||new g;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{y as CompositeAdapter,u as LocalStorageAdapter,g as MemoryAdapter,p as SessionStorageAdapter,v as combineValidators,b as commonValidators,P as createConditionalValidator,w as createCustomValidator,A as createResilientPersistence,V as createValidationError,k as createValidationResult,f as createZodValidator,E as persistence,h as ril};
|
|
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};
|