@dolanske/v-valid 2.1.0 → 2.1.1

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 CHANGED
@@ -4,10 +4,10 @@ You know what they say, you can not trust a thief or a murderer. You know who yo
4
4
 
5
5
  ## Example + Setup
6
6
 
7
- 1. Make sure you clone this repository or install it with npm
7
+ 1. Install the package via npm
8
8
 
9
9
  ```cmd
10
- npm i -S git+https://github.com/dolanske/v-valid.git
10
+ npm i @dolanske/v-valid
11
11
  ```
12
12
 
13
13
  2. Set up your component
@@ -494,7 +494,7 @@ const arrAndMinLen = createRuleArg<{ length: number }> (
494
494
  const checkPassword = createRule(
495
495
  (password) =>
496
496
  new Promise((resolve) => {
497
- const result = awiat someApiCall(password)
497
+ const result = await someApiCall(password)
498
498
  resolve(result)
499
499
  }),
500
500
  'Incorrect password. Please try again.'
package/dist/v-valid.d.ts CHANGED
@@ -115,6 +115,16 @@ declare type _DeepKeys<T> = T extends object ? ({
115
115
  [K in (string | number) & keyof T]: `${(`.${K}` | (`${K}` extends `${number}` ? `[${K}]` : never))}${'' | _DeepKeys<FixArr<T[K]>>}`;
116
116
  }[(string | number) & keyof T]) : never;
117
117
 
118
+ /**
119
+ * Type safe helper to generating rules from form objects. Also allows array rule definition
120
+ *
121
+ * @param rules
122
+ * @returns Rules to be used within the composable
123
+ */
124
+ export declare function defineRules<F>(rules: DefineRuleType<F>): DefineRuleType<F>;
125
+
126
+ declare type DefineRuleType<T> = ReplacePrimitivesOptional<T, Record<string, Rule> | Array<Rule>>;
127
+
118
128
  declare type DefLabel = string | ((value: any) => string);
119
129
 
120
130
  /**
@@ -277,12 +287,18 @@ declare type ReplacePrimitives<T, ReplaceWith> = T extends Record<string, unknow
277
287
  [K in keyof T]: ReplacePrimitives<T[K], ReplaceWith>;
278
288
  } : ReplaceWith;
279
289
 
290
+ declare type ReplacePrimitivesOptional<T, ReplaceWith> = T extends Record<string, unknown> ? {
291
+ [K in keyof T]?: ReplacePrimitivesOptional<T[K], ReplaceWith>;
292
+ } : ReplaceWith;
293
+
280
294
  /**
281
295
  * @Rule Input must not be empty, null or undefined.
282
296
  * If input is number with value 0, it will return true as value was provided
283
297
  */
284
298
  export declare const required: ValidationRuleObject;
285
299
 
300
+ declare type Rule = ValidationRule | ValidationRuleObject;
301
+
286
302
  declare type RuleParams = Record<string, any>;
287
303
 
288
304
  /**
@@ -375,84 +391,84 @@ declare interface ValidationRuleObject extends ValidationRule {
375
391
  }
376
392
 
377
393
  export { }
378
-
379
-
380
- declare namespace $and {
381
- var skip: (..._args: any[]) => ValidationRule;
382
- }
383
-
384
-
385
- declare namespace $or {
386
- var skip: (..._args: any[]) => ValidationRule;
387
- }
388
-
389
-
390
- declare namespace $not {
391
- var skip: ValidationRule;
392
- }
393
-
394
-
395
- declare namespace minLength {
396
- var skip: (..._args: any[]) => ValidationRule;
397
- }
398
-
399
-
400
- declare namespace sameAs {
401
- var skip: (..._args: any[]) => ValidationRule;
402
- }
403
-
404
-
405
- declare namespace maxLength {
406
- var skip: (..._args: any[]) => ValidationRule;
407
- }
408
-
409
-
410
- declare namespace match {
411
- var skip: (..._args: any[]) => ValidationRule;
412
- }
413
-
414
-
415
- declare namespace between {
416
- var skip: (..._args: any[]) => import("../types").ValidationRule;
417
- }
418
-
419
-
420
- declare namespace minValue {
421
- var skip: (..._args: any[]) => ValidationRule;
422
- }
423
-
424
-
425
- declare namespace maxLenNoSpace {
426
- var skip: (..._args: any[]) => ValidationRule;
427
- }
428
-
429
-
430
- declare namespace maxValue {
431
- var skip: (..._args: any[]) => ValidationRule;
432
- }
433
-
434
-
435
- declare namespace startsWith {
436
- var skip: (..._args: any[]) => import("../../types").ValidationRule;
437
- }
438
-
439
-
440
- declare namespace endsWith {
441
- var skip: (..._args: any[]) => import("../../types").ValidationRule;
442
- }
443
-
444
-
445
- declare namespace contains {
446
- var skip: (..._args: any[]) => ValidationRule;
447
- }
448
-
449
-
450
- declare namespace minLenNoSpace {
451
- var skip: (..._args: any[]) => ValidationRule;
452
- }
453
-
454
-
455
- declare namespace password {
456
- var skip: (..._args: any[]) => ValidationRule;
457
- }
458
-
394
+
395
+
396
+ declare namespace $and {
397
+ var skip: (..._args: any[]) => ValidationRule;
398
+ }
399
+
400
+
401
+ declare namespace $not {
402
+ var skip: ValidationRule;
403
+ }
404
+
405
+
406
+ declare namespace $or {
407
+ var skip: (..._args: any[]) => ValidationRule;
408
+ }
409
+
410
+
411
+ declare namespace minLength {
412
+ var skip: (..._args: any[]) => ValidationRule;
413
+ }
414
+
415
+
416
+ declare namespace maxLength {
417
+ var skip: (..._args: any[]) => ValidationRule;
418
+ }
419
+
420
+
421
+ declare namespace sameAs {
422
+ var skip: (..._args: any[]) => ValidationRule;
423
+ }
424
+
425
+
426
+ declare namespace match {
427
+ var skip: (..._args: any[]) => ValidationRule;
428
+ }
429
+
430
+
431
+ declare namespace between {
432
+ var skip: (..._args: any[]) => import("../types").ValidationRule;
433
+ }
434
+
435
+
436
+ declare namespace maxValue {
437
+ var skip: (..._args: any[]) => ValidationRule;
438
+ }
439
+
440
+
441
+ declare namespace minValue {
442
+ var skip: (..._args: any[]) => ValidationRule;
443
+ }
444
+
445
+
446
+ declare namespace maxLenNoSpace {
447
+ var skip: (..._args: any[]) => ValidationRule;
448
+ }
449
+
450
+
451
+ declare namespace minLenNoSpace {
452
+ var skip: (..._args: any[]) => ValidationRule;
453
+ }
454
+
455
+
456
+ declare namespace contains {
457
+ var skip: (..._args: any[]) => ValidationRule;
458
+ }
459
+
460
+
461
+ declare namespace endsWith {
462
+ var skip: (..._args: any[]) => import("../../types").ValidationRule;
463
+ }
464
+
465
+
466
+ declare namespace startsWith {
467
+ var skip: (..._args: any[]) => import("../../types").ValidationRule;
468
+ }
469
+
470
+
471
+ declare namespace password {
472
+ var skip: (..._args: any[]) => ValidationRule;
473
+ }
474
+
package/dist/v-valid.js CHANGED
@@ -1,508 +1,520 @@
1
- import { ref as L, reactive as Q, watch as R, isRef as E, unref as i } from "vue-demi";
2
- function y(e) {
3
- return e.trim().replace(" ", ".");
4
- }
5
- async function z(e, t, n = "") {
6
- for (const s in e) {
7
- const f = `${n} ${s}`.trim();
8
- m(e[s]) && !(e[s] instanceof Date) ? await z(e[s], t, f) : await t(s, e[s], f);
9
- }
10
- }
11
- function a(e) {
12
- return e == null;
13
- }
14
- function q(e) {
15
- return typeof e == "boolean";
16
- }
17
- function A(e) {
18
- return typeof e == "function" && e instanceof Function;
19
- }
20
- function k(e) {
21
- return typeof e == "number" || e instanceof Number;
22
- }
23
- function h(e) {
24
- return e instanceof Date;
25
- }
26
- function O(e) {
27
- return Array.isArray(e);
28
- }
29
- function X(e) {
30
- return typeof e == "string" || e instanceof String;
31
- }
32
- function Y(e) {
33
- return a(e) ? !0 : "length" in e ? e.length <= 0 : "size" in e ? e.size <= 0 : m(e) ? Object.keys(e).length <= 0 : !0;
34
- }
35
- function $(e) {
36
- return e instanceof Map;
37
- }
38
- function m(e) {
39
- return typeof e == "object" && !O(e) && e !== null && !A(e);
40
- }
41
- function V(e) {
42
- return e instanceof Set;
43
- }
44
- function Z(e) {
45
- return e instanceof Symbol;
46
- }
47
- function p(e, t, n) {
48
- if (a(e) || !m(e))
49
- return;
50
- t = y(t.trim());
51
- const s = t.split(".");
52
- let f = e;
53
- const u = s.length;
54
- if (u > 1)
55
- for (let o = 0; o < u; o++) {
56
- const l = s[o];
57
- if (l.length === 0)
58
- continue;
59
- const d = Reflect.get(f, l);
60
- if (m(d))
61
- f = d;
62
- else if (o === u - 1) {
63
- Reflect.set(f, l, n);
64
- break;
65
- } else
66
- d === void 0 && (Reflect.set(f, l, {}), f = Reflect.get(f, l));
67
- }
68
- else
69
- Reflect.set(f, s[0], n);
70
- }
71
- function I(e, t) {
72
- if (a(e) || !m(e))
73
- return;
74
- t = y(t.trim());
75
- const n = t.split(".");
76
- let s = e;
77
- for (const f of n)
78
- f.length !== 0 && (s = Reflect.get(s, f));
79
- return s;
80
- }
81
- function P() {
82
- return { id: null, value: null, invalid: !1, errors: {} };
83
- }
84
- function Le(e, t, n = {}) {
85
- const { proactive: s = !1, autoclear: f = !1 } = n, u = L(!1), o = L(!1), l = L({}), d = Q({
86
- didValidate: !1
87
- });
88
- f ? R(e, () => {
89
- d.didValidate && _();
90
- }, { deep: !0 }) : s && (R(e, () => w(), { deep: !0 }), E(t) && R(t, () => w(), { deep: !0 })), _();
91
- function W() {
92
- u.value = !1, o.value = !1, z(e, (b, g, D) => {
93
- p(l.value, y(D), P());
94
- });
95
- }
96
- function _() {
97
- d.didValidate = !1, W();
98
- }
99
- async function w(...b) {
100
- return _(), o.value = !0, new Promise(async (g, D) => {
101
- await z(e, async (U, S, c) => {
102
- c = y(c), p(l.value, c, P());
103
- const F = i(t), T = I(F, c);
104
- if (!T)
105
- return Promise.resolve();
106
- for (const [j, B] of Object.entries(T)) {
107
- if (b.length > 0 && !b.includes(j))
108
- continue;
109
- const { label: K, validate: G, __skip: H } = B;
110
- if (H)
111
- continue;
112
- const J = await G(S);
113
- p(l.value, `${c}.id`, U), p(l.value, `${c}.value`, S), J || (u.value = !0, p(l.value, `${c}.invalid`, !0), p(l.value, `${c}.errors.${j}`, K(S)));
114
- }
115
- return Promise.resolve();
116
- }), o.value = !1, d.didValidate = !0, u.value ? D(l.value) : g(l.value);
117
- });
118
- }
119
- function C(b, g) {
120
- p(l.value, `${b}.errors.${g.key}`, g.message), p(l.value, `${b}.invalid`, !0);
121
- }
122
- return {
123
- reset: _,
124
- validate: w,
125
- addError: C,
126
- errors: l,
127
- anyError: u,
128
- pending: o
129
- };
130
- }
131
- const r = function(...e) {
132
- return {
133
- name: "skipped-rule",
134
- __skip: !0,
135
- validate: () => !0,
136
- label: () => "test"
137
- };
138
- };
139
- function N(e, t, n) {
140
- return new Promise(async (s) => {
141
- const f = [];
142
- for (const u of t) {
143
- if (!u.validate)
144
- throw new Error("Rule is missing a validator function");
145
- const o = await u.validate(e);
146
- f.push(o);
147
- }
148
- switch (n) {
149
- case "every": {
150
- s(f.every((u) => u));
151
- break;
152
- }
153
- case "some": {
154
- s(f.some((u) => u));
155
- break;
156
- }
157
- case "none": {
158
- s(!f.every((u) => u));
159
- break;
160
- }
161
- }
162
- });
163
- }
164
- const v = "Value does not satisfy the validation rule.";
165
- function Re(e, t, n) {
166
- return {
167
- skip: r,
168
- name: n ?? "custom-object-rule",
169
- __skip: !1,
170
- validate: (s) => e(s),
171
- label: (s) => a(t) ? v : typeof t == "string" ? t : t(s)
172
- };
173
- }
174
- function ze(e, t, n) {
175
- const s = (f) => ({
176
- // the value from validate is the actual value we are testing against
177
- // injected during validation
178
- __skip: !1,
179
- name: n ?? "custom-param-rule",
180
- validate: (u) => e(u, f),
181
- label: (u) => a(t) ? v : typeof t == "string" ? t : t(u, f)
182
- });
183
- return s.skip = r, s;
184
- }
185
- function Ee(e, t) {
186
- const { validate: n, __skip: s, name: f } = t;
187
- if (a(n))
188
- throw new Error("[withLabel] Missing validator function");
189
- return {
190
- name: f,
191
- __skip: s,
192
- validate: n,
193
- label: (u) => typeof e == "string" ? e : e(u)
194
- };
195
- }
196
- function Ae(e, t) {
197
- return q(e) ? e ? t : r() : E(e) ? e.value ? t : r() : A(e) ? e() ? t : r() : e.then((n) => n ? t : r());
198
- }
199
- function Oe(e, t) {
200
- return q(e) ? e ? r() : t : E(e) ? e.value ? r() : t : A(e) ? e() ? r() : t : e.then((n) => n ? r() : t);
201
- }
202
- function x(...e) {
203
- return {
204
- name: "and-validator",
205
- __skip: !1,
206
- validate: (t) => N(t, e, "every"),
207
- label() {
208
- return "Value must pass all the required checks";
209
- }
210
- };
211
- }
212
- x.skip = r;
213
- function ee(...e) {
214
- return {
215
- name: "or-validator",
216
- __skip: !1,
217
- validate: (t) => N(t, e, "some"),
218
- label() {
219
- return "Value must pass some of the checks";
220
- }
221
- };
222
- }
223
- ee.skip = r;
224
- function te(...e) {
225
- return {
226
- name: "not-validator",
227
- __skip: !1,
228
- validate: (t) => N(t, e, "none"),
229
- label() {
230
- return "Value must pass none of the checks";
231
- }
232
- };
233
- }
234
- te.skip = r();
235
- function Ne(e, t) {
236
- return e.validate(t);
237
- }
238
- const Te = {
239
- __skip: !1,
240
- name: "required",
241
- skip: r,
242
- validate: (e) => a(e) || e === "null" || e === "undefined" ? !1 : typeof e == "string" ? e.length > 0 : typeof e == "number" ? !0 : !Y(e),
243
- /* c8 ignore next 3 */
244
- label: () => "Value is required"
245
- };
246
- function ne(e) {
247
- return {
248
- name: "minLength",
249
- __skip: !1,
250
- validate: (t) => a(t) ? !1 : (e = i(e), V(t) || $(t) ? t.size >= e : m(t) ? Object.keys(t).length >= e : t != null && t.length ? t.length >= e : !1),
251
- /* c8 ignore next 3 */
252
- label: () => `Value must be greater or equal to ${i(e)}`
253
- };
254
- }
255
- ne.skip = r;
256
- function re(e) {
257
- return {
258
- name: "maxLength",
259
- __skip: !1,
260
- validate: (t) => a(t) ? !1 : (e = i(e), V(t) || $(t) ? t.size <= e : m(t) ? Object.keys(t).length <= e : t.length <= e),
261
- /* c8 ignore next 3 */
262
- label: () => `Value must be lesser or equal to ${i(e)}`
263
- };
264
- }
265
- re.skip = r;
266
- const se = /^([\w!#$%&'*+/=?^`{|}~-]+(?:\.[\w!#$%&'*+/=?^`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/i, ie = /[^a-z0-9]/i, M = /\S/g, je = {
267
- __skip: !1,
268
- name: "email",
269
- skip: r,
270
- validate: (e) => a(e) ? !1 : se.test(e),
271
- /* c8 ignore next 3 */
272
- label: () => "Value must be in a valid email format"
273
- };
274
- function ae(e, t = !1) {
275
- return {
276
- name: "sameAs",
277
- __skip: !1,
278
- validate: (n) => (e = i(e), t ? i(n) == i(e) : i(n) === i(e)),
279
- /* c8 ignore next 3 */
280
- label: () => "Values must be matching"
281
- };
282
- }
283
- ae.skip = r;
284
- function fe(e) {
285
- const t = typeof e == "string" ? new RegExp(e) : e;
286
- return {
287
- name: "match",
288
- __skip: !1,
289
- validate: (n) => a(n) ? !1 : t.test(n),
290
- /* c8 ignore next 3 */
291
- label: () => "Value must match the provided rule."
292
- };
293
- }
294
- fe.skip = r;
295
- const Pe = {
296
- __skip: !1,
297
- name: "url",
298
- skip: r,
299
- validate: (e) => {
300
- if (a(e))
301
- return !1;
302
- try {
303
- return new URL(e) instanceof URL;
304
- } catch {
305
- return !1;
306
- }
307
- },
308
- label: () => "Value must be a valid URL"
309
- }, ue = {
310
- __skip: !1,
311
- name: "str",
312
- skip: r,
313
- validate: (e) => a(e) ? !1 : X(e),
314
- label: ({ value: e }) => `Value <${typeof e}> must be a string`
315
- }, le = {
316
- name: "num",
317
- __skip: !1,
318
- skip: r,
319
- validate: (e) => a(e) ? !1 : k(e),
320
- label: ({ value: e }) => `Value <${typeof e}> must be a number`
321
- }, oe = {
322
- name: "arr",
323
- __skip: !1,
324
- skip: r,
325
- validate: (e) => a(e) ? !1 : O(e),
326
- label: ({ value: e }) => `Value <${typeof e}> must be an Array`
327
- }, ce = {
328
- name: "obj",
329
- __skip: !1,
330
- skip: r,
331
- validate: (e) => a(e) || O(e) || V(e) || $(e) ? !1 : m(e),
332
- label: ({ value: e }) => `Value <${typeof e}> must be an Object`
333
- }, pe = {
334
- name: "set",
335
- __skip: !1,
336
- skip: r,
337
- validate: (e) => a(e) ? !1 : V(e),
338
- label: ({ value: e }) => `Value <${typeof e}> must be a Set`
339
- }, me = {
340
- name: "map",
341
- __skip: !1,
342
- skip: r,
343
- validate: (e) => a(e) ? !1 : $(e),
344
- label: ({ value: e }) => `Value <${typeof e}> must be a Map`
345
- }, de = {
346
- name: "date",
347
- __skip: !1,
348
- skip: r,
349
- validate: (e) => {
350
- if (a(e) || e == "Invalid Date")
351
- return !1;
352
- if (h(e) && e.getTime())
353
- return !0;
354
- const t = new Date(e);
355
- return h(t);
356
- },
357
- label: ({ value: e }) => `Value <${typeof e}> must be a valid Date object`
358
- }, be = {
359
- name: "symbol",
360
- __skip: !1,
361
- skip: r,
362
- validate: (e) => a(e) ? !1 : Z(e),
363
- label: ({ value: e }) => `Value <${typeof e}> must be a Symbol`
364
- }, ge = {
365
- str: ue,
366
- num: le,
367
- arr: oe,
368
- obj: ce,
369
- set: pe,
370
- map: me,
371
- date: de,
372
- symbol: be
373
- };
374
- function ke(e, t) {
375
- return {
376
- __skip: !1,
377
- name: "between",
378
- validate: (n) => a(n) ? !1 : (e = i(e), t = i(t), ge.date.validate(n) && (e = e instanceof Date ? e.getTime() : new Date(e).getTime(), t = t instanceof Date ? t.getTime() : new Date(t).getTime(), n = n instanceof Date ? n.getTime() : new Date(n).getTime()), n >= e && n <= t),
379
- label: () => `Value must be between ${i(e)} and ${i(t)}`
380
- };
381
- }
382
- ke.skip = r;
383
- function _e(e) {
384
- return {
385
- name: "minValue",
386
- __skip: !1,
387
- validate: (t) => a(t) ? !1 : (e = i(e), k(t) && k(e) ? t >= e : h(t) ? new Date(t) >= new Date(e) : !1),
388
- /* c8 ignore next 3 */
389
- label: () => `Minimum allowed value is ${i(e)}`
390
- };
391
- }
392
- _e.skip = r;
393
- function ye(e) {
394
- return {
395
- name: "maxValue",
396
- __skip: !1,
397
- validate: (t) => a(t) ? !1 : (e = i(e), k(t) && k(e) ? t <= e : h(t) ? new Date(t) <= new Date(e) : !1),
398
- /* c8 ignore next 3 */
399
- label: () => `Value must be shorter or equal to ${i(e)}`
400
- };
401
- }
402
- ye.skip = r;
403
- function he(e) {
404
- return {
405
- __skip: !1,
406
- name: "maxLenNoSpace",
407
- validate: (t) => {
408
- if (a(t) || typeof t != "string")
409
- return !1;
410
- e = i(e);
411
- const n = t.match(M);
412
- return n ? n.length <= e : !1;
413
- },
414
- label: (t) => typeof t != "string" ? "Value must be a string and " : `Value must have maximal lenght of ${i(e)} excluding spaces`
415
- };
416
- }
417
- he.skip = r;
418
- function $e(e) {
419
- return {
420
- name: "minLenNoSpace",
421
- __skip: !1,
422
- validate: (t) => {
423
- if (a(t) || typeof t != "string")
424
- return !1;
425
- e = i(e);
426
- const n = t.match(M);
427
- return n ? n.length >= e : !1;
428
- },
429
- /* c8 ignore next 3 */
430
- label: () => `Value must have minimal lenght of ${i(e)} excluding spaces`
431
- };
432
- }
433
- $e.skip = r;
434
- const qe = {
435
- __skip: !1,
436
- name: "hasSpecialChars",
437
- skip: r,
438
- validate: (e) => a(e) ? !1 : !ie.test(e),
439
- label: (e) => typeof e != "string" ? "Value must be a string and contain no special characters" : "Value must not contain any special characters"
440
- };
441
- function Ve(e, t = !1) {
442
- return {
443
- __skip: !1,
444
- name: "contains",
445
- validate: (n) => a(n) || typeof n != "string" ? !1 : (typeof e == "string" && (e = t ? [e] : e.trim().split(/\s+/)), e.every((s) => n.toLowerCase().includes(s.toLowerCase()))),
446
- label: (n) => {
447
- e = i(e);
448
- const s = typeof e == "string" ? e : e.join(", ");
449
- return typeof n != "string" ? `Value must be a string and contain <${s}>` : `Value must contain <${s}>`;
450
- }
451
- };
452
- }
453
- Ve.skip = r;
454
- function we(e, t) {
455
- return {
456
- __skip: !1,
457
- name: "startsWith",
458
- validate: (n) => (e = i(e), !n || typeof n != "string" ? !1 : n.startsWith(e, t)),
459
- label: (n) => typeof n != "string" ? `Value must be a string and start with '${i(e)}'` : `Value must start with '${i(e)}'`
460
- };
461
- }
462
- we.skip = r;
463
- function De(e, t) {
464
- return {
465
- __skip: !1,
466
- name: "endsWith",
467
- validate: (n) => (e = i(e), !n || typeof n != "string" ? !1 : n.endsWith(e, t)),
468
- label: (n) => typeof n != "string" ? `Value must be a string and end with '${i(e)}'` : `Value must end with '${i(e)}'`
469
- };
470
- }
471
- De.skip = r;
472
- export {
473
- x as $and,
474
- te as $not,
475
- ee as $or,
476
- Ne as $test,
477
- Ae as $validateIf,
478
- Oe as $validateIfNot,
479
- Ee as $withLabel,
480
- ke as between,
481
- Ve as contains,
482
- Re as createRule,
483
- ze as createRuleArg,
484
- je as email,
485
- De as endsWith,
486
- qe as hasSpecialChars,
487
- oe as isArr,
488
- de as isDate,
489
- me as isMap,
490
- le as isNum,
491
- ce as isObj,
492
- pe as isSet,
493
- ue as isStr,
494
- be as isSymbol,
495
- fe as match,
496
- he as maxLenNoSpace,
497
- re as maxLength,
498
- ye as maxValue,
499
- $e as minLenNoSpace,
500
- ne as minLength,
501
- _e as minValue,
502
- Te as required,
503
- ae as sameAs,
504
- we as startsWith,
505
- ge as type,
506
- Pe as url,
507
- Le as useValidation
508
- };
1
+ import { ref as z, reactive as Q, watch as E, isRef as A, unref as f } from "vue-demi";
2
+ function y(e) {
3
+ return e.trim().replace(" ", ".");
4
+ }
5
+ async function h(e, t, n = "") {
6
+ for (const r in e) {
7
+ const i = `${n} ${r}`.trim();
8
+ p(e[r]) && !(e[r] instanceof Date) ? await h(e[r], t, i) : await t(r, e[r], i);
9
+ }
10
+ }
11
+ function X(e, t, n = "") {
12
+ for (const r in e) {
13
+ const i = `${n} ${r}`.trim();
14
+ p(e[r]) && !(e[r] instanceof Date) ? h(e[r], t, i) : t(r, e[r], i);
15
+ }
16
+ }
17
+ function u(e) {
18
+ return e == null;
19
+ }
20
+ function M(e) {
21
+ return typeof e == "boolean";
22
+ }
23
+ function O(e) {
24
+ return typeof e == "function" && e instanceof Function;
25
+ }
26
+ function _(e) {
27
+ return typeof e == "number" || e instanceof Number;
28
+ }
29
+ function $(e) {
30
+ return e instanceof Date;
31
+ }
32
+ function V(e) {
33
+ return Array.isArray(e);
34
+ }
35
+ function Y(e) {
36
+ return typeof e == "string" || e instanceof String;
37
+ }
38
+ function Z(e) {
39
+ return u(e) ? !0 : "length" in e ? e.length <= 0 : "size" in e ? e.size <= 0 : p(e) ? Object.keys(e).length <= 0 : !0;
40
+ }
41
+ function w(e) {
42
+ return e instanceof Map;
43
+ }
44
+ function p(e) {
45
+ return typeof e == "object" && !V(e) && e !== null && !O(e);
46
+ }
47
+ function D(e) {
48
+ return e instanceof Set;
49
+ }
50
+ function I(e) {
51
+ return e instanceof Symbol;
52
+ }
53
+ function c(e, t, n) {
54
+ if (u(e) || !p(e))
55
+ return;
56
+ t = y(t.trim());
57
+ const r = t.split(".");
58
+ let i = e;
59
+ const a = r.length;
60
+ if (a > 1)
61
+ for (let o = 0; o < a; o++) {
62
+ const l = r[o];
63
+ if (l.length === 0)
64
+ continue;
65
+ const d = Reflect.get(i, l);
66
+ if (p(d))
67
+ i = d;
68
+ else if (o === a - 1) {
69
+ Reflect.set(i, l, n);
70
+ break;
71
+ } else
72
+ d === void 0 && (Reflect.set(i, l, {}), i = Reflect.get(i, l));
73
+ }
74
+ else
75
+ Reflect.set(i, r[0], n);
76
+ }
77
+ function x(e, t) {
78
+ if (u(e) || !p(e))
79
+ return;
80
+ t = y(t.trim());
81
+ const n = t.split(".");
82
+ let r = e;
83
+ for (const i of n)
84
+ i.length !== 0 && (r = Reflect.get(r, i));
85
+ return r;
86
+ }
87
+ function q() {
88
+ return { id: null, value: null, invalid: !1, errors: {} };
89
+ }
90
+ function Le(e, t, n = {}) {
91
+ const { proactive: r = !1, autoclear: i = !1 } = n, a = z(!1), o = z(!1), l = z({}), d = Q({
92
+ didValidate: !1
93
+ });
94
+ i ? E(e, () => {
95
+ d.didValidate && b();
96
+ }, { deep: !0 }) : r && (E(e, () => R(), { deep: !0 }), A(t) && E(t, () => R(), { deep: !0 })), b();
97
+ function C() {
98
+ a.value = !1, o.value = !1, h(e, (k, g, S) => {
99
+ c(l.value, y(S), q());
100
+ });
101
+ }
102
+ function b() {
103
+ d.didValidate = !1, C();
104
+ }
105
+ async function R(...k) {
106
+ return b(), o.value = !0, new Promise(async (g, S) => {
107
+ await h(e, async (j, L, m) => {
108
+ m = y(m), c(l.value, m, q());
109
+ const F = f(t), P = x(F, m);
110
+ if (!P)
111
+ return Promise.resolve();
112
+ for (const [T, B] of Object.entries(P)) {
113
+ if (k.length > 0 && !k.includes(T))
114
+ continue;
115
+ const { label: K, validate: G, __skip: H } = B;
116
+ if (H)
117
+ continue;
118
+ const J = await G(L);
119
+ c(l.value, `${m}.id`, j), c(l.value, `${m}.value`, L), J || (a.value = !0, c(l.value, `${m}.invalid`, !0), c(l.value, `${m}.errors.${T}`, K(L)));
120
+ }
121
+ return Promise.resolve();
122
+ }), o.value = !1, d.didValidate = !0, a.value ? S(l.value) : g(l.value);
123
+ });
124
+ }
125
+ function U(k, g) {
126
+ c(l.value, `${k}.errors.${g.key}`, g.message), c(l.value, `${k}.invalid`, !0);
127
+ }
128
+ return {
129
+ reset: b,
130
+ validate: R,
131
+ addError: U,
132
+ errors: l,
133
+ anyError: a,
134
+ pending: o
135
+ };
136
+ }
137
+ const s = function(...e) {
138
+ return {
139
+ name: "skipped-rule",
140
+ __skip: !0,
141
+ validate: () => !0,
142
+ label: () => "test"
143
+ };
144
+ };
145
+ function N(e, t, n) {
146
+ return new Promise(async (r) => {
147
+ const i = [];
148
+ for (const a of t) {
149
+ if (!a.validate)
150
+ throw new Error("Rule is missing a validator function");
151
+ const o = await a.validate(e);
152
+ i.push(o);
153
+ }
154
+ switch (n) {
155
+ case "every": {
156
+ r(i.every((a) => a));
157
+ break;
158
+ }
159
+ case "some": {
160
+ r(i.some((a) => a));
161
+ break;
162
+ }
163
+ case "none": {
164
+ r(!i.every((a) => a));
165
+ break;
166
+ }
167
+ }
168
+ });
169
+ }
170
+ const W = "Value does not satisfy the validation rule.";
171
+ function ze(e, t, n) {
172
+ return {
173
+ skip: s,
174
+ name: n ?? "custom-object-rule",
175
+ __skip: !1,
176
+ validate: (r) => e(r),
177
+ label: (r) => u(t) ? W : typeof t == "string" ? t : t(r)
178
+ };
179
+ }
180
+ function Ee(e, t, n) {
181
+ const r = (i) => ({
182
+ // the value from validate is the actual value we are testing against
183
+ // injected during validation
184
+ __skip: !1,
185
+ name: n ?? "custom-param-rule",
186
+ validate: (a) => e(a, i),
187
+ label: (a) => u(t) ? W : typeof t == "string" ? t : t(a, i)
188
+ });
189
+ return r.skip = s, r;
190
+ }
191
+ function Ae(e) {
192
+ return X(e, (t, n, r) => {
193
+ V(n) && c(e, r, n.reduce((i, a, o) => (a.name in i ? Reflect.set(i, a.name + o, a) : Reflect.set(i, a.name, a), i), {}));
194
+ }), e;
195
+ }
196
+ function Oe(e, t) {
197
+ const { validate: n, __skip: r, name: i } = t;
198
+ if (u(n))
199
+ throw new Error("[withLabel] Missing validator function");
200
+ return {
201
+ name: i,
202
+ __skip: r,
203
+ validate: n,
204
+ label: (a) => typeof e == "string" ? e : e(a)
205
+ };
206
+ }
207
+ function Ne(e, t) {
208
+ return M(e) ? e ? t : s() : A(e) ? e.value ? t : s() : O(e) ? e() ? t : s() : e.then((n) => n ? t : s());
209
+ }
210
+ function Pe(e, t) {
211
+ return M(e) ? e ? s() : t : A(e) ? e.value ? s() : t : O(e) ? e() ? s() : t : e.then((n) => n ? s() : t);
212
+ }
213
+ function ee(...e) {
214
+ return {
215
+ name: "and-validator",
216
+ __skip: !1,
217
+ validate: (t) => N(t, e, "every"),
218
+ label() {
219
+ return "Value must pass all the required checks";
220
+ }
221
+ };
222
+ }
223
+ ee.skip = s;
224
+ function te(...e) {
225
+ return {
226
+ name: "or-validator",
227
+ __skip: !1,
228
+ validate: (t) => N(t, e, "some"),
229
+ label() {
230
+ return "Value must pass some of the checks";
231
+ }
232
+ };
233
+ }
234
+ te.skip = s;
235
+ function ne(...e) {
236
+ return {
237
+ name: "not-validator",
238
+ __skip: !1,
239
+ validate: (t) => N(t, e, "none"),
240
+ label() {
241
+ return "Value must pass none of the checks";
242
+ }
243
+ };
244
+ }
245
+ ne.skip = s();
246
+ function Te(e, t) {
247
+ return e.validate(t);
248
+ }
249
+ const qe = {
250
+ __skip: !1,
251
+ name: "required",
252
+ skip: s,
253
+ validate: (e) => u(e) || e === "null" || e === "undefined" ? !1 : typeof e == "string" ? e.length > 0 : typeof e == "number" ? !0 : !Z(e),
254
+ /* c8 ignore next 3 */
255
+ label: () => "Value is required"
256
+ };
257
+ function re(e) {
258
+ return {
259
+ name: "minLength",
260
+ __skip: !1,
261
+ validate: (t) => u(t) ? !1 : (e = f(e), D(t) || w(t) ? t.size >= e : p(t) ? Object.keys(t).length >= e : t != null && t.length ? t.length >= e : !1),
262
+ /* c8 ignore next 3 */
263
+ label: () => `Value must be greater or equal to ${f(e)}`
264
+ };
265
+ }
266
+ re.skip = s;
267
+ function se(e) {
268
+ return {
269
+ name: "maxLength",
270
+ __skip: !1,
271
+ validate: (t) => u(t) ? !1 : (e = f(e), D(t) || w(t) ? t.size <= e : p(t) ? Object.keys(t).length <= e : t.length <= e),
272
+ /* c8 ignore next 3 */
273
+ label: () => `Value must be lesser or equal to ${f(e)}`
274
+ };
275
+ }
276
+ se.skip = s;
277
+ const ie = /^([\w!#$%&'*+/=?^`{|}~-]+(?:\.[\w!#$%&'*+/=?^`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/i, ae = /[^a-z0-9]/i, v = /\S/g, Me = {
278
+ __skip: !1,
279
+ name: "email",
280
+ skip: s,
281
+ validate: (e) => u(e) ? !1 : ie.test(e),
282
+ /* c8 ignore next 3 */
283
+ label: () => "Value must be in a valid email format"
284
+ };
285
+ function fe(e, t = !1) {
286
+ return {
287
+ name: "sameAs",
288
+ __skip: !1,
289
+ validate: (n) => (e = f(e), t ? f(n) == f(e) : f(n) === f(e)),
290
+ /* c8 ignore next 3 */
291
+ label: () => "Values must be matching"
292
+ };
293
+ }
294
+ fe.skip = s;
295
+ function ue(e) {
296
+ const t = typeof e == "string" ? new RegExp(e) : e;
297
+ return {
298
+ name: "match",
299
+ __skip: !1,
300
+ validate: (n) => u(n) ? !1 : t.test(n),
301
+ /* c8 ignore next 3 */
302
+ label: () => "Value must match the provided rule."
303
+ };
304
+ }
305
+ ue.skip = s;
306
+ const We = {
307
+ __skip: !1,
308
+ name: "url",
309
+ skip: s,
310
+ validate: (e) => {
311
+ if (u(e))
312
+ return !1;
313
+ try {
314
+ return new URL(e) instanceof URL;
315
+ } catch {
316
+ return !1;
317
+ }
318
+ },
319
+ label: () => "Value must be a valid URL"
320
+ }, le = {
321
+ __skip: !1,
322
+ name: "str",
323
+ skip: s,
324
+ validate: (e) => u(e) ? !1 : Y(e),
325
+ label: ({ value: e }) => `Value <${typeof e}> must be a string`
326
+ }, oe = {
327
+ name: "num",
328
+ __skip: !1,
329
+ skip: s,
330
+ validate: (e) => u(e) ? !1 : _(e),
331
+ label: ({ value: e }) => `Value <${typeof e}> must be a number`
332
+ }, ce = {
333
+ name: "arr",
334
+ __skip: !1,
335
+ skip: s,
336
+ validate: (e) => u(e) ? !1 : V(e),
337
+ label: ({ value: e }) => `Value <${typeof e}> must be an Array`
338
+ }, pe = {
339
+ name: "obj",
340
+ __skip: !1,
341
+ skip: s,
342
+ validate: (e) => u(e) || V(e) || D(e) || w(e) ? !1 : p(e),
343
+ label: ({ value: e }) => `Value <${typeof e}> must be an Object`
344
+ }, me = {
345
+ name: "set",
346
+ __skip: !1,
347
+ skip: s,
348
+ validate: (e) => u(e) ? !1 : D(e),
349
+ label: ({ value: e }) => `Value <${typeof e}> must be a Set`
350
+ }, de = {
351
+ name: "map",
352
+ __skip: !1,
353
+ skip: s,
354
+ validate: (e) => u(e) ? !1 : w(e),
355
+ label: ({ value: e }) => `Value <${typeof e}> must be a Map`
356
+ }, ke = {
357
+ name: "date",
358
+ __skip: !1,
359
+ skip: s,
360
+ validate: (e) => {
361
+ if (u(e) || e == "Invalid Date")
362
+ return !1;
363
+ if ($(e) && e.getTime())
364
+ return !0;
365
+ const t = new Date(e);
366
+ return $(t);
367
+ },
368
+ label: ({ value: e }) => `Value <${typeof e}> must be a valid Date object`
369
+ }, ge = {
370
+ name: "symbol",
371
+ __skip: !1,
372
+ skip: s,
373
+ validate: (e) => u(e) ? !1 : I(e),
374
+ label: ({ value: e }) => `Value <${typeof e}> must be a Symbol`
375
+ }, _e = {
376
+ str: le,
377
+ num: oe,
378
+ arr: ce,
379
+ obj: pe,
380
+ set: me,
381
+ map: de,
382
+ date: ke,
383
+ symbol: ge
384
+ };
385
+ function be(e, t) {
386
+ return {
387
+ __skip: !1,
388
+ name: "between",
389
+ validate: (n) => u(n) ? !1 : (e = f(e), t = f(t), _e.date.validate(n) && (e = e instanceof Date ? e.getTime() : new Date(e).getTime(), t = t instanceof Date ? t.getTime() : new Date(t).getTime(), n = n instanceof Date ? n.getTime() : new Date(n).getTime()), n >= e && n <= t),
390
+ label: () => `Value must be between ${f(e)} and ${f(t)}`
391
+ };
392
+ }
393
+ be.skip = s;
394
+ function ye(e) {
395
+ return {
396
+ name: "minValue",
397
+ __skip: !1,
398
+ validate: (t) => u(t) ? !1 : (e = f(e), _(t) && _(e) ? t >= e : $(t) ? new Date(t) >= new Date(e) : !1),
399
+ /* c8 ignore next 3 */
400
+ label: () => `Minimum allowed value is ${f(e)}`
401
+ };
402
+ }
403
+ ye.skip = s;
404
+ function he(e) {
405
+ return {
406
+ name: "maxValue",
407
+ __skip: !1,
408
+ validate: (t) => u(t) ? !1 : (e = f(e), _(t) && _(e) ? t <= e : $(t) ? new Date(t) <= new Date(e) : !1),
409
+ /* c8 ignore next 3 */
410
+ label: () => `Value must be shorter or equal to ${f(e)}`
411
+ };
412
+ }
413
+ he.skip = s;
414
+ function $e(e) {
415
+ return {
416
+ __skip: !1,
417
+ name: "maxLenNoSpace",
418
+ validate: (t) => {
419
+ if (u(t) || typeof t != "string")
420
+ return !1;
421
+ e = f(e);
422
+ const n = t.match(v);
423
+ return n ? n.length <= e : !1;
424
+ },
425
+ label: (t) => typeof t != "string" ? "Value must be a string and " : `Value must have maximal lenght of ${f(e)} excluding spaces`
426
+ };
427
+ }
428
+ $e.skip = s;
429
+ function Ve(e) {
430
+ return {
431
+ name: "minLenNoSpace",
432
+ __skip: !1,
433
+ validate: (t) => {
434
+ if (u(t) || typeof t != "string")
435
+ return !1;
436
+ e = f(e);
437
+ const n = t.match(v);
438
+ return n ? n.length >= e : !1;
439
+ },
440
+ /* c8 ignore next 3 */
441
+ label: () => `Value must have minimal lenght of ${f(e)} excluding spaces`
442
+ };
443
+ }
444
+ Ve.skip = s;
445
+ const ve = {
446
+ __skip: !1,
447
+ name: "hasSpecialChars",
448
+ skip: s,
449
+ validate: (e) => u(e) ? !1 : !ae.test(e),
450
+ label: (e) => typeof e != "string" ? "Value must be a string and contain no special characters" : "Value must not contain any special characters"
451
+ };
452
+ function we(e, t = !1) {
453
+ return {
454
+ __skip: !1,
455
+ name: "contains",
456
+ validate: (n) => u(n) || typeof n != "string" ? !1 : (typeof e == "string" && (e = t ? [e] : e.trim().split(/\s+/)), e.every((r) => n.toLowerCase().includes(r.toLowerCase()))),
457
+ label: (n) => {
458
+ e = f(e);
459
+ const r = typeof e == "string" ? e : e.join(", ");
460
+ return typeof n != "string" ? `Value must be a string and contain <${r}>` : `Value must contain <${r}>`;
461
+ }
462
+ };
463
+ }
464
+ we.skip = s;
465
+ function De(e, t) {
466
+ return {
467
+ __skip: !1,
468
+ name: "startsWith",
469
+ validate: (n) => (e = f(e), !n || typeof n != "string" ? !1 : n.startsWith(e, t)),
470
+ label: (n) => typeof n != "string" ? `Value must be a string and start with '${f(e)}'` : `Value must start with '${f(e)}'`
471
+ };
472
+ }
473
+ De.skip = s;
474
+ function Re(e, t) {
475
+ return {
476
+ __skip: !1,
477
+ name: "endsWith",
478
+ validate: (n) => (e = f(e), !n || typeof n != "string" ? !1 : n.endsWith(e, t)),
479
+ label: (n) => typeof n != "string" ? `Value must be a string and end with '${f(e)}'` : `Value must end with '${f(e)}'`
480
+ };
481
+ }
482
+ Re.skip = s;
483
+ export {
484
+ ee as $and,
485
+ ne as $not,
486
+ te as $or,
487
+ Te as $test,
488
+ Ne as $validateIf,
489
+ Pe as $validateIfNot,
490
+ Oe as $withLabel,
491
+ be as between,
492
+ we as contains,
493
+ ze as createRule,
494
+ Ee as createRuleArg,
495
+ Ae as defineRules,
496
+ Me as email,
497
+ Re as endsWith,
498
+ ve as hasSpecialChars,
499
+ ce as isArr,
500
+ ke as isDate,
501
+ de as isMap,
502
+ oe as isNum,
503
+ pe as isObj,
504
+ me as isSet,
505
+ le as isStr,
506
+ ge as isSymbol,
507
+ ue as match,
508
+ $e as maxLenNoSpace,
509
+ se as maxLength,
510
+ he as maxValue,
511
+ Ve as minLenNoSpace,
512
+ re as minLength,
513
+ ye as minValue,
514
+ qe as required,
515
+ fe as sameAs,
516
+ De as startsWith,
517
+ _e as type,
518
+ We as url,
519
+ Le as useValidation
520
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dolanske/v-valid",
3
3
  "type": "module",
4
- "version": "2.1.0",
4
+ "version": "2.1.1",
5
5
  "private": false,
6
6
  "description": "Model based form validation made for vue 3. Inspired by vuelidate with personal take on the API and implementation",
7
7
  "author": "dolanske",