@mappoh/nova 0.2.3 → 0.5.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/README.md +180 -30
- package/dist/a11y/index.d.ts +40 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/index.js +162 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/alert/alert.d.ts +32 -0
- package/dist/alert/alert.d.ts.map +1 -0
- package/dist/alert/alert.js +307 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/alert/index.d.ts +3 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/alert/index.js +2 -0
- package/dist/alert/index.js.map +1 -0
- package/dist/animation/flip.d.ts +28 -0
- package/dist/animation/flip.d.ts.map +1 -0
- package/dist/animation/flip.js +113 -0
- package/dist/animation/flip.js.map +1 -0
- package/dist/animation/spring.d.ts +34 -0
- package/dist/animation/spring.d.ts.map +1 -0
- package/dist/animation/spring.js +86 -0
- package/dist/animation/spring.js.map +1 -0
- package/dist/animation/stagger.d.ts +43 -0
- package/dist/animation/stagger.d.ts.map +1 -0
- package/dist/animation/stagger.js +150 -0
- package/dist/animation/stagger.js.map +1 -0
- package/dist/avatar/avatar.d.ts +27 -0
- package/dist/avatar/avatar.d.ts.map +1 -0
- package/dist/avatar/avatar.js +132 -0
- package/dist/avatar/avatar.js.map +1 -0
- package/dist/avatar/index.d.ts +3 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/avatar/index.js +2 -0
- package/dist/avatar/index.js.map +1 -0
- package/dist/badge/badge.d.ts +27 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +118 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/badge/index.d.ts +3 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/badge/index.js +2 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/cache/cache.d.ts +28 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +67 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/chart/chart.d.ts +31 -0
- package/dist/chart/chart.d.ts.map +1 -0
- package/dist/chart/chart.js +372 -0
- package/dist/chart/chart.js.map +1 -0
- package/dist/chart/index.d.ts +3 -0
- package/dist/chart/index.d.ts.map +1 -0
- package/dist/chart/index.js +2 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/color-picker/color-picker.d.ts +18 -0
- package/dist/color-picker/color-picker.d.ts.map +1 -0
- package/dist/color-picker/color-picker.js +243 -0
- package/dist/color-picker/color-picker.js.map +1 -0
- package/dist/color-picker/index.d.ts +3 -0
- package/dist/color-picker/index.d.ts.map +1 -0
- package/dist/color-picker/index.js +2 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/combobox/combobox.d.ts +26 -0
- package/dist/combobox/combobox.d.ts.map +1 -0
- package/dist/combobox/combobox.js +262 -0
- package/dist/combobox/combobox.js.map +1 -0
- package/dist/combobox/index.d.ts +3 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/combobox/index.js +2 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/command-palette/command-palette.d.ts +31 -0
- package/dist/command-palette/command-palette.d.ts.map +1 -0
- package/dist/command-palette/command-palette.js +590 -0
- package/dist/command-palette/command-palette.js.map +1 -0
- package/dist/command-palette/index.d.ts +3 -0
- package/dist/command-palette/index.d.ts.map +1 -0
- package/dist/command-palette/index.js +2 -0
- package/dist/command-palette/index.js.map +1 -0
- package/dist/component/component.d.ts +20 -2
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/component.js +115 -5
- package/dist/component/component.js.map +1 -1
- package/dist/component/connect.d.ts +50 -0
- package/dist/component/connect.d.ts.map +1 -1
- package/dist/component/connect.js +135 -0
- package/dist/component/connect.js.map +1 -1
- package/dist/component/directives.d.ts +20 -0
- package/dist/component/directives.d.ts.map +1 -0
- package/dist/component/directives.js +42 -0
- package/dist/component/directives.js.map +1 -0
- package/dist/component/html.d.ts +8 -0
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/html.js +11 -0
- package/dist/component/html.js.map +1 -1
- package/dist/component/index.d.ts +9 -3
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +6 -2
- package/dist/component/index.js.map +1 -1
- package/dist/component/portal.d.ts +32 -0
- package/dist/component/portal.d.ts.map +1 -0
- package/dist/component/portal.js +59 -0
- package/dist/component/portal.js.map +1 -0
- package/dist/component/ref.d.ts +18 -0
- package/dist/component/ref.d.ts.map +1 -0
- package/dist/component/ref.js +17 -0
- package/dist/component/ref.js.map +1 -0
- package/dist/component/slot-styles.d.ts +18 -0
- package/dist/component/slot-styles.d.ts.map +1 -0
- package/dist/component/slot-styles.js +47 -0
- package/dist/component/slot-styles.js.map +1 -0
- package/dist/component/template.d.ts +2 -0
- package/dist/component/template.d.ts.map +1 -1
- package/dist/component/template.js +122 -4
- package/dist/component/template.js.map +1 -1
- package/dist/context/context.d.ts +39 -0
- package/dist/context/context.d.ts.map +1 -0
- package/dist/context/context.js +111 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/data-table/data-table.d.ts +34 -0
- package/dist/data-table/data-table.d.ts.map +1 -0
- package/dist/data-table/data-table.js +256 -0
- package/dist/data-table/data-table.js.map +1 -0
- package/dist/data-table/index.d.ts +3 -0
- package/dist/data-table/index.d.ts.map +1 -0
- package/dist/data-table/index.js +2 -0
- package/dist/data-table/index.js.map +1 -0
- package/dist/date-picker/date-picker.d.ts +22 -0
- package/dist/date-picker/date-picker.d.ts.map +1 -0
- package/dist/date-picker/date-picker.js +282 -0
- package/dist/date-picker/date-picker.js.map +1 -0
- package/dist/date-picker/index.d.ts +3 -0
- package/dist/date-picker/index.d.ts.map +1 -0
- package/dist/date-picker/index.js +2 -0
- package/dist/date-picker/index.js.map +1 -0
- package/dist/devtools/devtools.d.ts +54 -0
- package/dist/devtools/devtools.d.ts.map +1 -1
- package/dist/devtools/devtools.js +86 -0
- package/dist/devtools/devtools.js.map +1 -1
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.d.ts.map +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/devtools/index.js.map +1 -1
- package/dist/editor/editor.d.ts +40 -0
- package/dist/editor/editor.d.ts.map +1 -0
- package/dist/editor/editor.js +955 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/index.d.ts +3 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +2 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/event-bus/event-bus.d.ts +20 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -0
- package/dist/event-bus/event-bus.js +55 -0
- package/dist/event-bus/event-bus.js.map +1 -0
- package/dist/event-bus/index.d.ts +3 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +2 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/file-upload/file-upload.d.ts +24 -0
- package/dist/file-upload/file-upload.d.ts.map +1 -0
- package/dist/file-upload/file-upload.js +177 -0
- package/dist/file-upload/file-upload.js.map +1 -0
- package/dist/file-upload/index.d.ts +3 -0
- package/dist/file-upload/index.d.ts.map +1 -0
- package/dist/file-upload/index.js +2 -0
- package/dist/file-upload/index.js.map +1 -0
- package/dist/forms/form-engine.d.ts +19 -6
- package/dist/forms/form-engine.d.ts.map +1 -1
- package/dist/forms/form-engine.js +97 -11
- package/dist/forms/form-engine.js.map +1 -1
- package/dist/forms/validators.d.ts +4 -0
- package/dist/forms/validators.d.ts.map +1 -1
- package/dist/forms/validators.js +6 -0
- package/dist/forms/validators.js.map +1 -1
- package/dist/forms/wasm-validators.d.ts +19 -11
- package/dist/forms/wasm-validators.d.ts.map +1 -1
- package/dist/forms/wasm-validators.js +191 -31
- package/dist/forms/wasm-validators.js.map +1 -1
- package/dist/gesture/gesture.d.ts +2 -0
- package/dist/gesture/gesture.d.ts.map +1 -1
- package/dist/gesture/gesture.js +81 -0
- package/dist/gesture/gesture.js.map +1 -1
- package/dist/http/http.d.ts +8 -0
- package/dist/http/http.d.ts.map +1 -1
- package/dist/http/http.js +18 -4
- package/dist/http/http.js.map +1 -1
- package/dist/i18n/i18n.d.ts +6 -0
- package/dist/i18n/i18n.d.ts.map +1 -1
- package/dist/i18n/i18n.js +71 -9
- package/dist/i18n/i18n.js.map +1 -1
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +2 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/machine/machine.d.ts +26 -0
- package/dist/machine/machine.d.ts.map +1 -0
- package/dist/machine/machine.js +79 -0
- package/dist/machine/machine.js.map +1 -0
- package/dist/modal/modal.d.ts.map +1 -1
- package/dist/modal/modal.js +13 -29
- package/dist/modal/modal.js.map +1 -1
- package/dist/notification-center/index.d.ts +3 -0
- package/dist/notification-center/index.d.ts.map +1 -0
- package/dist/notification-center/index.js +2 -0
- package/dist/notification-center/index.js.map +1 -0
- package/dist/notification-center/notification-center.d.ts +55 -0
- package/dist/notification-center/notification-center.d.ts.map +1 -0
- package/dist/notification-center/notification-center.js +941 -0
- package/dist/notification-center/notification-center.js.map +1 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +2 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/pagination/pagination.d.ts +31 -0
- package/dist/pagination/pagination.d.ts.map +1 -0
- package/dist/pagination/pagination.js +213 -0
- package/dist/pagination/pagination.js.map +1 -0
- package/dist/progress/progress.d.ts.map +1 -1
- package/dist/progress/progress.js +5 -7
- package/dist/progress/progress.js.map +1 -1
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +2 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query.d.ts +31 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/query/query.js +150 -0
- package/dist/query/query.js.map +1 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.d.ts.map +1 -0
- package/dist/radio-group/index.js +2 -0
- package/dist/radio-group/index.js.map +1 -0
- package/dist/radio-group/radio-group.d.ts +37 -0
- package/dist/radio-group/radio-group.d.ts.map +1 -0
- package/dist/radio-group/radio-group.js +251 -0
- package/dist/radio-group/radio-group.js.map +1 -0
- package/dist/rating/index.d.ts +3 -0
- package/dist/rating/index.d.ts.map +1 -0
- package/dist/rating/index.js +2 -0
- package/dist/rating/index.js.map +1 -0
- package/dist/rating/rating.d.ts +31 -0
- package/dist/rating/rating.d.ts.map +1 -0
- package/dist/rating/rating.js +187 -0
- package/dist/rating/rating.js.map +1 -0
- package/dist/router/index.d.ts +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/router.d.ts +30 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +131 -16
- package/dist/router/router.js.map +1 -1
- package/dist/skeleton/index.d.ts +3 -0
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/index.js +2 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/skeleton/skeleton.d.ts +24 -0
- package/dist/skeleton/skeleton.d.ts.map +1 -0
- package/dist/skeleton/skeleton.js +91 -0
- package/dist/skeleton/skeleton.js.map +1 -0
- package/dist/slider/index.d.ts +3 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/slider/index.js +2 -0
- package/dist/slider/index.js.map +1 -0
- package/dist/slider/slider.d.ts +33 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +248 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/index.d.ts +3 -0
- package/dist/spinner/index.d.ts.map +1 -0
- package/dist/spinner/index.js +2 -0
- package/dist/spinner/index.js.map +1 -0
- package/dist/spinner/spinner.d.ts +23 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +82 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/state/store.d.ts +4 -0
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +27 -7
- package/dist/state/store.js.map +1 -1
- package/dist/sw/sw.d.ts.map +1 -1
- package/dist/sw/sw.js +39 -7
- package/dist/sw/sw.js.map +1 -1
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/switch/index.js +2 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/switch/switch.d.ts +27 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +163 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/scale.d.ts +40 -0
- package/dist/theme/scale.d.ts.map +1 -0
- package/dist/theme/scale.js +62 -0
- package/dist/theme/scale.js.map +1 -0
- package/dist/tree-view/index.d.ts +3 -0
- package/dist/tree-view/index.d.ts.map +1 -0
- package/dist/tree-view/index.js +2 -0
- package/dist/tree-view/index.js.map +1 -0
- package/dist/tree-view/tree-view.d.ts +29 -0
- package/dist/tree-view/tree-view.d.ts.map +1 -0
- package/dist/tree-view/tree-view.js +273 -0
- package/dist/tree-view/tree-view.js.map +1 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +114 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/websocket/index.d.ts +3 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +2 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/websocket.d.ts +31 -0
- package/dist/websocket/websocket.d.ts.map +1 -0
- package/dist/websocket/websocket.js +164 -0
- package/dist/websocket/websocket.js.map +1 -0
- package/package.json +135 -2
|
@@ -11,6 +11,7 @@ export class NovaForm {
|
|
|
11
11
|
submitting = false;
|
|
12
12
|
submitError = null;
|
|
13
13
|
listeners = new Set();
|
|
14
|
+
asyncTimers = new Map();
|
|
14
15
|
constructor(schema) {
|
|
15
16
|
this.schema = schema;
|
|
16
17
|
this.initFields();
|
|
@@ -20,7 +21,7 @@ export class NovaForm {
|
|
|
20
21
|
for (const step of this.schema.steps) {
|
|
21
22
|
for (const [name, field] of Object.entries(step.fields)) {
|
|
22
23
|
this.fieldStates[name] = {
|
|
23
|
-
value: field.defaultValue ?? (field.type === 'checkbox' ? false : ''),
|
|
24
|
+
value: field.defaultValue ?? (field.type === 'checkbox' ? false : field.type === 'array' ? [] : ''),
|
|
24
25
|
error: null,
|
|
25
26
|
touched: false,
|
|
26
27
|
dirty: false,
|
|
@@ -63,11 +64,22 @@ export class NovaForm {
|
|
|
63
64
|
if (!field)
|
|
64
65
|
return;
|
|
65
66
|
field.touched = true;
|
|
66
|
-
|
|
67
|
+
// Run sync validation immediately
|
|
68
|
+
const syncError = this.validateFieldSync(name);
|
|
67
69
|
this.notify();
|
|
70
|
+
// Debounce async validators (300ms) — only if sync passed
|
|
71
|
+
if (!syncError) {
|
|
72
|
+
const schema = this.getFieldSchema(name);
|
|
73
|
+
if (schema?.asyncValidators?.length) {
|
|
74
|
+
clearTimeout(this.asyncTimers.get(name));
|
|
75
|
+
this.asyncTimers.set(name, setTimeout(() => {
|
|
76
|
+
this.runAsyncValidators(name);
|
|
77
|
+
}, 300));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
|
-
/**
|
|
70
|
-
|
|
81
|
+
/** Run sync validators for a single field */
|
|
82
|
+
validateFieldSync(name) {
|
|
71
83
|
const field = this.fieldStates[name];
|
|
72
84
|
if (!field)
|
|
73
85
|
return null;
|
|
@@ -84,6 +96,16 @@ export class NovaForm {
|
|
|
84
96
|
// Run validators
|
|
85
97
|
if (schema.validators) {
|
|
86
98
|
for (const validator of schema.validators) {
|
|
99
|
+
// Handle cross-field validator
|
|
100
|
+
if ('_crossField' in validator) {
|
|
101
|
+
const crossFn = validator;
|
|
102
|
+
const error = crossFn(this.getData());
|
|
103
|
+
if (error) {
|
|
104
|
+
field.error = error;
|
|
105
|
+
return error;
|
|
106
|
+
}
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
87
109
|
// Handle match validator
|
|
88
110
|
if ('_matchField' in validator) {
|
|
89
111
|
const matchName = validator._matchField;
|
|
@@ -104,12 +126,44 @@ export class NovaForm {
|
|
|
104
126
|
field.error = null;
|
|
105
127
|
return null;
|
|
106
128
|
}
|
|
129
|
+
/** Run async validators for a field */
|
|
130
|
+
async runAsyncValidators(name) {
|
|
131
|
+
const field = this.fieldStates[name];
|
|
132
|
+
if (!field)
|
|
133
|
+
return null;
|
|
134
|
+
const schema = this.getFieldSchema(name);
|
|
135
|
+
if (!schema?.asyncValidators?.length)
|
|
136
|
+
return null;
|
|
137
|
+
field.validating = true;
|
|
138
|
+
this.notify();
|
|
139
|
+
for (const asyncValidator of schema.asyncValidators) {
|
|
140
|
+
const error = await asyncValidator(field.value);
|
|
141
|
+
if (error) {
|
|
142
|
+
field.error = error;
|
|
143
|
+
field.validating = false;
|
|
144
|
+
this.notify();
|
|
145
|
+
return error;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
field.validating = false;
|
|
149
|
+
this.notify();
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
/** Validate a single field (sync + async) */
|
|
153
|
+
async validateField(name) {
|
|
154
|
+
// Clear any pending debounce
|
|
155
|
+
clearTimeout(this.asyncTimers.get(name));
|
|
156
|
+
const syncError = this.validateFieldSync(name);
|
|
157
|
+
if (syncError)
|
|
158
|
+
return syncError;
|
|
159
|
+
return this.runAsyncValidators(name);
|
|
160
|
+
}
|
|
107
161
|
/** Validate all fields in the current step */
|
|
108
|
-
validateStep() {
|
|
162
|
+
async validateStep() {
|
|
109
163
|
const step = this.schema.steps[this.currentStep];
|
|
110
164
|
let valid = true;
|
|
111
165
|
for (const name of Object.keys(step.fields)) {
|
|
112
|
-
const error = this.validateField(name);
|
|
166
|
+
const error = await this.validateField(name);
|
|
113
167
|
if (error)
|
|
114
168
|
valid = false;
|
|
115
169
|
this.fieldStates[name].touched = true;
|
|
@@ -118,11 +172,11 @@ export class NovaForm {
|
|
|
118
172
|
return valid;
|
|
119
173
|
}
|
|
120
174
|
/** Validate all fields across all steps */
|
|
121
|
-
validateAll() {
|
|
175
|
+
async validateAll() {
|
|
122
176
|
let valid = true;
|
|
123
177
|
for (const step of this.schema.steps) {
|
|
124
178
|
for (const name of Object.keys(step.fields)) {
|
|
125
|
-
const error = this.validateField(name);
|
|
179
|
+
const error = await this.validateField(name);
|
|
126
180
|
if (error)
|
|
127
181
|
valid = false;
|
|
128
182
|
this.fieldStates[name].touched = true;
|
|
@@ -136,8 +190,8 @@ export class NovaForm {
|
|
|
136
190
|
return Object.values(this.fieldStates).every((f) => f.error === null);
|
|
137
191
|
}
|
|
138
192
|
/** Go to next step (validates current step first) */
|
|
139
|
-
nextStep() {
|
|
140
|
-
if (!this.validateStep())
|
|
193
|
+
async nextStep() {
|
|
194
|
+
if (!(await this.validateStep()))
|
|
141
195
|
return false;
|
|
142
196
|
if (this.currentStep < this.schema.steps.length - 1) {
|
|
143
197
|
this.currentStep++;
|
|
@@ -164,7 +218,7 @@ export class NovaForm {
|
|
|
164
218
|
}
|
|
165
219
|
/** Submit the form */
|
|
166
220
|
async submit() {
|
|
167
|
-
if (!this.validateAll())
|
|
221
|
+
if (!(await this.validateAll()))
|
|
168
222
|
return false;
|
|
169
223
|
this.submitting = true;
|
|
170
224
|
this.submitError = null;
|
|
@@ -186,6 +240,38 @@ export class NovaForm {
|
|
|
186
240
|
return false;
|
|
187
241
|
}
|
|
188
242
|
}
|
|
243
|
+
/** Add an item to a field array */
|
|
244
|
+
addItem(fieldName, defaults) {
|
|
245
|
+
const field = this.fieldStates[fieldName];
|
|
246
|
+
const schema = this.getFieldSchema(fieldName);
|
|
247
|
+
if (!field || schema?.type !== 'array' || !schema.itemSchema)
|
|
248
|
+
return;
|
|
249
|
+
const item = {};
|
|
250
|
+
for (const [key, s] of Object.entries(schema.itemSchema)) {
|
|
251
|
+
item[key] = defaults?.[key] ?? s.defaultValue ?? '';
|
|
252
|
+
}
|
|
253
|
+
const arr = Array.isArray(field.value) ? field.value : [];
|
|
254
|
+
arr.push(item);
|
|
255
|
+
field.value = arr;
|
|
256
|
+
field.dirty = true;
|
|
257
|
+
this.notify();
|
|
258
|
+
}
|
|
259
|
+
/** Remove an item from a field array by index */
|
|
260
|
+
removeItem(fieldName, index) {
|
|
261
|
+
const field = this.fieldStates[fieldName];
|
|
262
|
+
if (!field || !Array.isArray(field.value))
|
|
263
|
+
return;
|
|
264
|
+
if (index < 0 || index >= field.value.length)
|
|
265
|
+
return;
|
|
266
|
+
field.value.splice(index, 1);
|
|
267
|
+
field.dirty = true;
|
|
268
|
+
this.notify();
|
|
269
|
+
}
|
|
270
|
+
/** Get items from a field array */
|
|
271
|
+
getItems(fieldName) {
|
|
272
|
+
const field = this.fieldStates[fieldName];
|
|
273
|
+
return Array.isArray(field?.value) ? field.value : [];
|
|
274
|
+
}
|
|
189
275
|
/** Get all form data */
|
|
190
276
|
getData() {
|
|
191
277
|
const data = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-engine.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"form-engine.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,10 @@ export declare function maxValue(max: number, msg?: string): Validator;
|
|
|
15
15
|
export declare function match(fieldName: string, _msg?: string): Validator & {
|
|
16
16
|
_matchField: string;
|
|
17
17
|
};
|
|
18
|
+
/** Cross-field validator — receives all form values instead of a single field value */
|
|
19
|
+
export declare function crossField(fn: (values: Record<string, unknown>) => string | null): Validator & {
|
|
20
|
+
_crossField: true;
|
|
21
|
+
};
|
|
18
22
|
/** Run multiple validators in sequence, returning the first error */
|
|
19
23
|
export declare function compose(...validators: Validator[]): Validator;
|
|
20
24
|
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/forms/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAExE,wBAAgB,QAAQ,CAAC,GAAG,SAA2B,GAAG,SAAS,CAOlE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAO9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAO9D;AAED,wBAAgB,OAAO,CAAC,GAAG,SAAwB,GAAG,SAAS,CAM9D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAmB,GAAG,SAAS,CAKxE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAQ7D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAQ7D;AAED,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAO3F;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAQ7D"}
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/forms/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAExE,wBAAgB,QAAQ,CAAC,GAAG,SAA2B,GAAG,SAAS,CAOlE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAO9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAO9D;AAED,wBAAgB,OAAO,CAAC,GAAG,SAAwB,GAAG,SAAS,CAM9D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAmB,GAAG,SAAS,CAKxE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAQ7D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAQ7D;AAED,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAO3F;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CACxB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,IAAI,GACrD,SAAS,GAAG;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,CAInC;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAQ7D"}
|
package/dist/forms/validators.js
CHANGED
|
@@ -68,6 +68,12 @@ export function match(fieldName, _msg) {
|
|
|
68
68
|
validator._matchField = fieldName;
|
|
69
69
|
return validator;
|
|
70
70
|
}
|
|
71
|
+
/** Cross-field validator — receives all form values instead of a single field value */
|
|
72
|
+
export function crossField(fn) {
|
|
73
|
+
const validator = ((values) => fn(values));
|
|
74
|
+
validator._crossField = true;
|
|
75
|
+
return validator;
|
|
76
|
+
}
|
|
71
77
|
/** Run multiple validators in sequence, returning the first error */
|
|
72
78
|
export function compose(...validators) {
|
|
73
79
|
return (value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* Augments the pure-TS validators with high-performance
|
|
6
6
|
* RFC-compliant email, credit card (Luhn), IBAN, URL, and
|
|
7
7
|
* phone validation plus password strength scoring.
|
|
8
|
+
*
|
|
9
|
+
* When WASM is not initialized, each validator falls back to
|
|
10
|
+
* a TypeScript regex-based implementation so validation still
|
|
11
|
+
* works without the WASM module.
|
|
8
12
|
*/
|
|
9
13
|
import type { Validator } from './validators';
|
|
10
14
|
interface CardResult {
|
|
@@ -23,37 +27,41 @@ export declare function initWasm(): Promise<void>;
|
|
|
23
27
|
/** Check if the WASM validation module is loaded. */
|
|
24
28
|
export declare function isReady(): boolean;
|
|
25
29
|
/**
|
|
26
|
-
* RFC 5322 email validator
|
|
27
|
-
*
|
|
30
|
+
* RFC 5322 email validator.
|
|
31
|
+
* Uses WASM when available, otherwise falls back to TS regex.
|
|
28
32
|
*/
|
|
29
33
|
export declare function email(msg?: string): Validator;
|
|
30
34
|
/**
|
|
31
|
-
* Credit card validator using Luhn algorithm
|
|
32
|
-
*
|
|
35
|
+
* Credit card validator using Luhn algorithm.
|
|
36
|
+
* Uses WASM when available, otherwise falls back to TS implementation.
|
|
33
37
|
* Optionally returns issuer info via the result callback.
|
|
34
38
|
*/
|
|
35
39
|
export declare function creditCard(msg?: string, onResult?: (result: CardResult) => void): Validator;
|
|
36
40
|
/**
|
|
37
|
-
* IBAN validator with mod-97 check
|
|
41
|
+
* IBAN validator with mod-97 check.
|
|
42
|
+
* Uses WASM when available, otherwise falls back to TS implementation.
|
|
38
43
|
*/
|
|
39
44
|
export declare function iban(msg?: string): Validator;
|
|
40
45
|
/**
|
|
41
|
-
* URL validator for HTTP/HTTPS URLs
|
|
46
|
+
* URL validator for HTTP/HTTPS URLs.
|
|
47
|
+
* Uses WASM when available, otherwise falls back to TS URL parser.
|
|
42
48
|
*/
|
|
43
49
|
export declare function url(msg?: string): Validator;
|
|
44
50
|
/**
|
|
45
|
-
* Phone number validator
|
|
51
|
+
* Phone number validator.
|
|
46
52
|
* Validates international format (7-15 digits).
|
|
53
|
+
* Uses WASM when available, otherwise falls back to TS regex.
|
|
47
54
|
*/
|
|
48
55
|
export declare function phone(msg?: string): Validator;
|
|
49
56
|
/**
|
|
50
|
-
* Password strength scorer
|
|
51
|
-
*
|
|
57
|
+
* Password strength scorer.
|
|
58
|
+
* Uses WASM when available, otherwise falls back to TS heuristic scorer.
|
|
52
59
|
*/
|
|
53
|
-
export declare function checkPasswordStrength(password: string): PasswordStrengthResult
|
|
60
|
+
export declare function checkPasswordStrength(password: string): PasswordStrengthResult;
|
|
54
61
|
/**
|
|
55
|
-
* Password strength validator
|
|
62
|
+
* Password strength validator.
|
|
56
63
|
* Fails if score is below the given threshold (0-100).
|
|
64
|
+
* Uses WASM when available, otherwise falls back to TS heuristic scorer.
|
|
57
65
|
*/
|
|
58
66
|
export declare function passwordStrength(minScore?: number, msg?: string): Validator;
|
|
59
67
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-validators.d.ts","sourceRoot":"","sources":["../../src/forms/wasm-validators.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wasm-validators.d.ts","sourceRoot":"","sources":["../../src/forms/wasm-validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuKD;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAW9C;AAED,qDAAqD;AACrD,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,SAA0B,GAAG,SAAS,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,SAA+B,EAClC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GACtC,SAAS,CAYX;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,GAAG,SAAiB,GAAG,SAAS,CAMpD;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,SAAgB,GAAG,SAAS,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,SAAyB,GAAG,SAAS,CAM7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAG9E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,SAAK,EACb,GAAG,SAAyB,GAC3B,SAAS,CAUX"}
|
|
@@ -5,9 +5,159 @@
|
|
|
5
5
|
* Augments the pure-TS validators with high-performance
|
|
6
6
|
* RFC-compliant email, credit card (Luhn), IBAN, URL, and
|
|
7
7
|
* phone validation plus password strength scoring.
|
|
8
|
+
*
|
|
9
|
+
* When WASM is not initialized, each validator falls back to
|
|
10
|
+
* a TypeScript regex-based implementation so validation still
|
|
11
|
+
* works without the WASM module.
|
|
8
12
|
*/
|
|
9
13
|
let wasm = null;
|
|
10
14
|
let initPromise = null;
|
|
15
|
+
/* ------------------------------------------------------------------ */
|
|
16
|
+
/* TypeScript fallback helpers */
|
|
17
|
+
/* ------------------------------------------------------------------ */
|
|
18
|
+
/**
|
|
19
|
+
* RFC 5322-ish email check.
|
|
20
|
+
* Intentionally more permissive than a full RFC parser but catches
|
|
21
|
+
* the most common mistakes (missing @, double dots, trailing dots).
|
|
22
|
+
*/
|
|
23
|
+
function tsValidateEmail(email) {
|
|
24
|
+
const re = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;
|
|
25
|
+
return re.test(email);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Luhn algorithm for credit card numbers.
|
|
29
|
+
* Also identifies the card issuer based on the BIN prefix.
|
|
30
|
+
*/
|
|
31
|
+
function tsValidateCreditCard(number) {
|
|
32
|
+
const digits = number.replace(/[\s-]/g, '');
|
|
33
|
+
if (!/^\d{12,19}$/.test(digits)) {
|
|
34
|
+
return { valid: false, issuer: 'unknown' };
|
|
35
|
+
}
|
|
36
|
+
// Luhn check
|
|
37
|
+
let sum = 0;
|
|
38
|
+
let double = false;
|
|
39
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
40
|
+
let digit = parseInt(digits[i], 10);
|
|
41
|
+
if (double) {
|
|
42
|
+
digit *= 2;
|
|
43
|
+
if (digit > 9)
|
|
44
|
+
digit -= 9;
|
|
45
|
+
}
|
|
46
|
+
sum += digit;
|
|
47
|
+
double = !double;
|
|
48
|
+
}
|
|
49
|
+
const valid = sum % 10 === 0;
|
|
50
|
+
// Simple issuer detection
|
|
51
|
+
let issuer = 'unknown';
|
|
52
|
+
if (/^4/.test(digits))
|
|
53
|
+
issuer = 'visa';
|
|
54
|
+
else if (/^5[1-5]/.test(digits) || /^2[2-7]/.test(digits))
|
|
55
|
+
issuer = 'mastercard';
|
|
56
|
+
else if (/^3[47]/.test(digits))
|
|
57
|
+
issuer = 'amex';
|
|
58
|
+
else if (/^6(?:011|5)/.test(digits))
|
|
59
|
+
issuer = 'discover';
|
|
60
|
+
return { valid, issuer };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* IBAN validation using mod-97 (ISO 13616).
|
|
64
|
+
*/
|
|
65
|
+
function tsValidateIBAN(iban) {
|
|
66
|
+
const cleaned = iban.replace(/\s/g, '').toUpperCase();
|
|
67
|
+
if (!/^[A-Z]{2}\d{2}[A-Z0-9]{4,30}$/.test(cleaned))
|
|
68
|
+
return false;
|
|
69
|
+
// Move first 4 chars to end, convert letters to numbers (A=10 … Z=35)
|
|
70
|
+
const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
|
|
71
|
+
const numericStr = rearranged
|
|
72
|
+
.split('')
|
|
73
|
+
.map((ch) => {
|
|
74
|
+
const code = ch.charCodeAt(0);
|
|
75
|
+
return code >= 65 && code <= 90 ? (code - 55).toString() : ch;
|
|
76
|
+
})
|
|
77
|
+
.join('');
|
|
78
|
+
// Mod-97 on a potentially very long number string
|
|
79
|
+
let remainder = 0;
|
|
80
|
+
for (const ch of numericStr) {
|
|
81
|
+
remainder = (remainder * 10 + parseInt(ch, 10)) % 97;
|
|
82
|
+
}
|
|
83
|
+
return remainder === 1;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* URL validator — accepts http and https URLs.
|
|
87
|
+
*/
|
|
88
|
+
function tsValidateUrl(url) {
|
|
89
|
+
try {
|
|
90
|
+
const parsed = new URL(url);
|
|
91
|
+
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Phone number validator — international format, 7-15 digits.
|
|
99
|
+
* Allows optional leading +, spaces, dashes, dots, and parens.
|
|
100
|
+
*/
|
|
101
|
+
function tsValidatePhone(phone) {
|
|
102
|
+
const digits = phone.replace(/[\s\-().+]/g, '');
|
|
103
|
+
return /^\d{7,15}$/.test(digits);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Password strength scorer (TypeScript fallback).
|
|
107
|
+
* Returns a score 0-100 with feedback strings.
|
|
108
|
+
*/
|
|
109
|
+
function tsPasswordStrength(password) {
|
|
110
|
+
let score = 0;
|
|
111
|
+
const feedback = [];
|
|
112
|
+
// Length scoring
|
|
113
|
+
if (password.length >= 8)
|
|
114
|
+
score += 20;
|
|
115
|
+
else
|
|
116
|
+
feedback.push('Use at least 8 characters');
|
|
117
|
+
if (password.length >= 12)
|
|
118
|
+
score += 10;
|
|
119
|
+
if (password.length >= 16)
|
|
120
|
+
score += 10;
|
|
121
|
+
// Character variety
|
|
122
|
+
if (/[a-z]/.test(password))
|
|
123
|
+
score += 10;
|
|
124
|
+
else
|
|
125
|
+
feedback.push('Add lowercase letters');
|
|
126
|
+
if (/[A-Z]/.test(password))
|
|
127
|
+
score += 10;
|
|
128
|
+
else
|
|
129
|
+
feedback.push('Add uppercase letters');
|
|
130
|
+
if (/\d/.test(password))
|
|
131
|
+
score += 10;
|
|
132
|
+
else
|
|
133
|
+
feedback.push('Add numbers');
|
|
134
|
+
if (/[^a-zA-Z0-9]/.test(password))
|
|
135
|
+
score += 15;
|
|
136
|
+
else
|
|
137
|
+
feedback.push('Add special characters');
|
|
138
|
+
// Penalty for repeated chars
|
|
139
|
+
if (/(.)\1{2,}/.test(password)) {
|
|
140
|
+
score -= 10;
|
|
141
|
+
feedback.push('Avoid repeated characters');
|
|
142
|
+
}
|
|
143
|
+
// Penalty for sequential runs (abc, 123)
|
|
144
|
+
if (/(?:abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz|012|123|234|345|456|567|678|789)/i.test(password)) {
|
|
145
|
+
score -= 10;
|
|
146
|
+
feedback.push('Avoid sequential characters');
|
|
147
|
+
}
|
|
148
|
+
// Bonus for mixing categories
|
|
149
|
+
const categories = (/[a-z]/.test(password) ? 1 : 0) +
|
|
150
|
+
(/[A-Z]/.test(password) ? 1 : 0) +
|
|
151
|
+
(/\d/.test(password) ? 1 : 0) +
|
|
152
|
+
(/[^a-zA-Z0-9]/.test(password) ? 1 : 0);
|
|
153
|
+
if (categories >= 4)
|
|
154
|
+
score += 15;
|
|
155
|
+
score = Math.max(0, Math.min(100, score));
|
|
156
|
+
return { score, feedback };
|
|
157
|
+
}
|
|
158
|
+
/* ------------------------------------------------------------------ */
|
|
159
|
+
/* Public API */
|
|
160
|
+
/* ------------------------------------------------------------------ */
|
|
11
161
|
/**
|
|
12
162
|
* Initialize the WASM validation module.
|
|
13
163
|
* Call once at app startup. Safe to call multiple times.
|
|
@@ -29,92 +179,102 @@ export function isReady() {
|
|
|
29
179
|
return wasm !== null;
|
|
30
180
|
}
|
|
31
181
|
/**
|
|
32
|
-
* RFC 5322 email validator
|
|
33
|
-
*
|
|
182
|
+
* RFC 5322 email validator.
|
|
183
|
+
* Uses WASM when available, otherwise falls back to TS regex.
|
|
34
184
|
*/
|
|
35
185
|
export function email(msg = 'Invalid email address') {
|
|
36
186
|
return (value) => {
|
|
37
187
|
if (typeof value !== 'string' || !value)
|
|
38
188
|
return null;
|
|
39
|
-
if (
|
|
40
|
-
return
|
|
41
|
-
return
|
|
189
|
+
if (wasm)
|
|
190
|
+
return wasm.validateEmail(value) ? null : msg;
|
|
191
|
+
return tsValidateEmail(value) ? null : msg;
|
|
42
192
|
};
|
|
43
193
|
}
|
|
44
194
|
/**
|
|
45
|
-
* Credit card validator using Luhn algorithm
|
|
46
|
-
*
|
|
195
|
+
* Credit card validator using Luhn algorithm.
|
|
196
|
+
* Uses WASM when available, otherwise falls back to TS implementation.
|
|
47
197
|
* Optionally returns issuer info via the result callback.
|
|
48
198
|
*/
|
|
49
199
|
export function creditCard(msg = 'Invalid credit card number', onResult) {
|
|
50
200
|
return (value) => {
|
|
51
201
|
if (typeof value !== 'string' || !value)
|
|
52
202
|
return null;
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
203
|
+
if (wasm) {
|
|
204
|
+
const result = wasm.validateCreditCard(value);
|
|
205
|
+
if (onResult)
|
|
206
|
+
onResult(result);
|
|
207
|
+
return result.valid ? null : msg;
|
|
208
|
+
}
|
|
209
|
+
const result = tsValidateCreditCard(value);
|
|
56
210
|
if (onResult)
|
|
57
211
|
onResult(result);
|
|
58
212
|
return result.valid ? null : msg;
|
|
59
213
|
};
|
|
60
214
|
}
|
|
61
215
|
/**
|
|
62
|
-
* IBAN validator with mod-97 check
|
|
216
|
+
* IBAN validator with mod-97 check.
|
|
217
|
+
* Uses WASM when available, otherwise falls back to TS implementation.
|
|
63
218
|
*/
|
|
64
219
|
export function iban(msg = 'Invalid IBAN') {
|
|
65
220
|
return (value) => {
|
|
66
221
|
if (typeof value !== 'string' || !value)
|
|
67
222
|
return null;
|
|
68
|
-
if (
|
|
69
|
-
return null;
|
|
70
|
-
return
|
|
223
|
+
if (wasm)
|
|
224
|
+
return wasm.validateIBAN(value) ? null : msg;
|
|
225
|
+
return tsValidateIBAN(value) ? null : msg;
|
|
71
226
|
};
|
|
72
227
|
}
|
|
73
228
|
/**
|
|
74
|
-
* URL validator for HTTP/HTTPS URLs
|
|
229
|
+
* URL validator for HTTP/HTTPS URLs.
|
|
230
|
+
* Uses WASM when available, otherwise falls back to TS URL parser.
|
|
75
231
|
*/
|
|
76
232
|
export function url(msg = 'Invalid URL') {
|
|
77
233
|
return (value) => {
|
|
78
234
|
if (typeof value !== 'string' || !value)
|
|
79
235
|
return null;
|
|
80
|
-
if (
|
|
81
|
-
return null;
|
|
82
|
-
return
|
|
236
|
+
if (wasm)
|
|
237
|
+
return wasm.validateUrl(value) ? null : msg;
|
|
238
|
+
return tsValidateUrl(value) ? null : msg;
|
|
83
239
|
};
|
|
84
240
|
}
|
|
85
241
|
/**
|
|
86
|
-
* Phone number validator
|
|
242
|
+
* Phone number validator.
|
|
87
243
|
* Validates international format (7-15 digits).
|
|
244
|
+
* Uses WASM when available, otherwise falls back to TS regex.
|
|
88
245
|
*/
|
|
89
246
|
export function phone(msg = 'Invalid phone number') {
|
|
90
247
|
return (value) => {
|
|
91
248
|
if (typeof value !== 'string' || !value)
|
|
92
249
|
return null;
|
|
93
|
-
if (
|
|
94
|
-
return null;
|
|
95
|
-
return
|
|
250
|
+
if (wasm)
|
|
251
|
+
return wasm.validatePhone(value) ? null : msg;
|
|
252
|
+
return tsValidatePhone(value) ? null : msg;
|
|
96
253
|
};
|
|
97
254
|
}
|
|
98
255
|
/**
|
|
99
|
-
* Password strength scorer
|
|
100
|
-
*
|
|
256
|
+
* Password strength scorer.
|
|
257
|
+
* Uses WASM when available, otherwise falls back to TS heuristic scorer.
|
|
101
258
|
*/
|
|
102
259
|
export function checkPasswordStrength(password) {
|
|
103
|
-
if (
|
|
104
|
-
return
|
|
105
|
-
return
|
|
260
|
+
if (wasm)
|
|
261
|
+
return wasm.passwordStrength(password);
|
|
262
|
+
return tsPasswordStrength(password);
|
|
106
263
|
}
|
|
107
264
|
/**
|
|
108
|
-
* Password strength validator
|
|
265
|
+
* Password strength validator.
|
|
109
266
|
* Fails if score is below the given threshold (0-100).
|
|
267
|
+
* Uses WASM when available, otherwise falls back to TS heuristic scorer.
|
|
110
268
|
*/
|
|
111
269
|
export function passwordStrength(minScore = 50, msg = 'Password is too weak') {
|
|
112
270
|
return (value) => {
|
|
113
271
|
if (typeof value !== 'string' || !value)
|
|
114
272
|
return null;
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
273
|
+
if (wasm) {
|
|
274
|
+
const result = wasm.passwordStrength(value);
|
|
275
|
+
return result.score >= minScore ? null : msg;
|
|
276
|
+
}
|
|
277
|
+
const result = tsPasswordStrength(value);
|
|
118
278
|
return result.score >= minScore ? null : msg;
|
|
119
279
|
};
|
|
120
280
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-validators.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wasm-validators.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|