@leaflink/stash 42.1.0 → 42.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/dist/useValidation.js +87 -82
- package/dist/useValidation.js.map +1 -1
- package/package.json +1 -1
package/dist/useValidation.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as A, d as M } from "./debounce-6aca1ca9.js";
|
|
2
|
-
import { g as
|
|
3
|
-
import { toValue as
|
|
2
|
+
import { g as V } from "./get-27d90892.js";
|
|
3
|
+
import { toValue as f, computed as c, ref as T, watch as D, reactive as F, nextTick as S, readonly as E } from "vue";
|
|
4
4
|
import { DECIMAL_PRECISION as j, DEBOUNCE as C } from "./constants.js";
|
|
5
|
-
import { t as
|
|
6
|
-
import { i as
|
|
5
|
+
import { t as d } from "./locale.js";
|
|
6
|
+
import { i as g } from "./isDefined-2ce6cde4.js";
|
|
7
7
|
import { r as R } from "./isObjectLike-54341556.js";
|
|
8
8
|
import { t as w } from "./toString-7d5bf363.js";
|
|
9
9
|
import "./_MapCache-65811284.js";
|
|
@@ -15,53 +15,53 @@ function B(t) {
|
|
|
15
15
|
}
|
|
16
16
|
function U(t, e) {
|
|
17
17
|
e = e || {};
|
|
18
|
-
const
|
|
19
|
-
function v
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
if (!
|
|
23
|
-
return
|
|
24
|
-
u[m] =
|
|
18
|
+
const o = e.delimiter || ".", i = e.maxDepth, a = e.transformKey || B, u = {};
|
|
19
|
+
function h(v, y, l) {
|
|
20
|
+
l = l || 1, Object.keys(v).forEach(function(b) {
|
|
21
|
+
const r = v[b], N = e.safe && Array.isArray(r), n = Object.prototype.toString.call(r), s = q(r), I = n === "[object Object]" || n === "[object Array]", m = y ? y + o + a(b) : a(b);
|
|
22
|
+
if (!N && !s && I && Object.keys(r).length && (!e.maxDepth || l < i))
|
|
23
|
+
return h(r, m, l + 1);
|
|
24
|
+
u[m] = r;
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
return
|
|
27
|
+
return h(t), u;
|
|
28
28
|
}
|
|
29
29
|
function ne(t = {}) {
|
|
30
30
|
return {
|
|
31
31
|
name: "email",
|
|
32
32
|
validator(e) {
|
|
33
|
-
return !
|
|
33
|
+
return !g(e) || typeof e == "string" && /^\S+@\S+\.\S+$/.test(e);
|
|
34
34
|
},
|
|
35
|
-
message: t.message ||
|
|
35
|
+
message: t.message || d("ll.validation.email")
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
function oe(t) {
|
|
39
39
|
return {
|
|
40
40
|
name: "maxValue",
|
|
41
41
|
validator(e) {
|
|
42
|
-
const
|
|
43
|
-
return !
|
|
42
|
+
const o = f(t.max);
|
|
43
|
+
return !g(e) || Number(e) <= o;
|
|
44
44
|
},
|
|
45
|
-
message: t.message || (() =>
|
|
45
|
+
message: t.message || (() => d("ll.validation.maxValue", { max: String(f(t.max)) }))
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
function se(t) {
|
|
49
49
|
return {
|
|
50
50
|
name: "minValue",
|
|
51
51
|
validator(e) {
|
|
52
|
-
const
|
|
53
|
-
return !
|
|
52
|
+
const o = f(t.min);
|
|
53
|
+
return !g(e) || Number(e) >= o;
|
|
54
54
|
},
|
|
55
|
-
message: t.message || (() =>
|
|
55
|
+
message: t.message || (() => d("ll.validation.minValue", { min: String(f(t.min)) }))
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
function ae(t = {}) {
|
|
59
59
|
return {
|
|
60
60
|
name: "positiveNumber",
|
|
61
61
|
validator(e) {
|
|
62
|
-
return !
|
|
62
|
+
return !g(e) || Number(e) > 0;
|
|
63
63
|
},
|
|
64
|
-
message: t.message ||
|
|
64
|
+
message: t.message || d("ll.validation.positiveNumber")
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
var O = 1 / 0, $ = 17976931348623157e292;
|
|
@@ -75,18 +75,18 @@ function k(t) {
|
|
|
75
75
|
return t === t ? t : 0;
|
|
76
76
|
}
|
|
77
77
|
function K(t) {
|
|
78
|
-
var e = k(t),
|
|
79
|
-
return e === e ?
|
|
78
|
+
var e = k(t), o = e % 1;
|
|
79
|
+
return e === e ? o ? e - o : e : 0;
|
|
80
80
|
}
|
|
81
81
|
var _ = R.isFinite, L = Math.min;
|
|
82
82
|
function Y(t) {
|
|
83
83
|
var e = Math[t];
|
|
84
|
-
return function(
|
|
85
|
-
if (
|
|
86
|
-
var a = (w(
|
|
84
|
+
return function(o, i) {
|
|
85
|
+
if (o = A(o), i = i == null ? 0 : L(K(i), 292), i && _(o)) {
|
|
86
|
+
var a = (w(o) + "e").split("e"), u = e(a[0] + "e" + (+a[1] + i));
|
|
87
87
|
return a = (w(u) + "e").split("e"), +(a[0] + "e" + (+a[1] - i));
|
|
88
88
|
}
|
|
89
|
-
return e(
|
|
89
|
+
return e(o);
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
var G = Y("round");
|
|
@@ -95,126 +95,131 @@ function ie(t = {}) {
|
|
|
95
95
|
return {
|
|
96
96
|
name: "price",
|
|
97
97
|
validator(e) {
|
|
98
|
-
const
|
|
99
|
-
return !
|
|
98
|
+
const o = Number(e);
|
|
99
|
+
return !g(e) || o !== 1 / 0 && o >= 0 && o === P(o, j.CURRENCY);
|
|
100
100
|
},
|
|
101
|
-
message: t.message ||
|
|
101
|
+
message: t.message || d("ll.validation.price")
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
function ue(t = {}) {
|
|
105
105
|
return {
|
|
106
106
|
name: "required",
|
|
107
107
|
validator(e) {
|
|
108
|
-
return
|
|
108
|
+
return g(typeof e == "string" ? e.trim() : e);
|
|
109
109
|
},
|
|
110
|
-
message: t.message ||
|
|
110
|
+
message: t.message || d("ll.validation.required")
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
function ce(t = {}) {
|
|
114
114
|
return {
|
|
115
115
|
name: "wholeNumber",
|
|
116
116
|
validator(e) {
|
|
117
|
-
return !
|
|
117
|
+
return !g(e) || Number.isInteger(Number(e)) && Number(e) >= 0;
|
|
118
118
|
},
|
|
119
|
-
message: t.message ||
|
|
119
|
+
message: t.message || d("ll.validation.wholeNumber")
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
function me({
|
|
123
123
|
rules: t,
|
|
124
124
|
values: e
|
|
125
125
|
}) {
|
|
126
|
-
const i = c(() => Object.keys(U(t, { safe: !0 }))).value.reduce((
|
|
127
|
-
const I =
|
|
128
|
-
I.value =
|
|
129
|
-
},
|
|
126
|
+
const i = c(() => Object.keys(U(t, { safe: !0 }))).value.reduce((n, s) => {
|
|
127
|
+
const I = T(V(f(e), s)), m = (x) => {
|
|
128
|
+
I.value = V(f(e), x);
|
|
129
|
+
}, p = M(() => {
|
|
130
130
|
m(s);
|
|
131
131
|
}, C.FAST);
|
|
132
132
|
return D(
|
|
133
|
-
() =>
|
|
133
|
+
() => V(f(e), s),
|
|
134
134
|
() => {
|
|
135
|
-
|
|
135
|
+
p();
|
|
136
136
|
}
|
|
137
|
-
),
|
|
137
|
+
), n[s] = X({
|
|
138
138
|
fieldName: s,
|
|
139
139
|
fieldValue: I,
|
|
140
140
|
flush: () => {
|
|
141
|
-
|
|
141
|
+
p.cancel(), m(s);
|
|
142
142
|
},
|
|
143
|
-
rules:
|
|
144
|
-
}),
|
|
145
|
-
}, {}), a = c(() => Object.values(i)), u = c(() => a.value.some((
|
|
143
|
+
rules: V(t, s)
|
|
144
|
+
}), n;
|
|
145
|
+
}, {}), a = c(() => Object.values(i)), u = c(() => a.value.some((n) => n.errors.length > 0)), h = c(() => a.value.some((n) => n.isTouched)), v = c(() => a.value.filter((n) => n.isDirty));
|
|
146
146
|
return F({
|
|
147
|
-
validate: async function({ preventScroll:
|
|
147
|
+
validate: async function({ preventScroll: n } = {}) {
|
|
148
148
|
if (a.value.forEach((s) => {
|
|
149
149
|
s.setTouched(!1), s.setTouched(!0);
|
|
150
|
-
}), await S(), u.value && !
|
|
151
|
-
const s = Object.entries(i).find(([
|
|
150
|
+
}), await S(), u.value && !n) {
|
|
151
|
+
const s = Object.entries(i).find(([p, x]) => x.errorMessage), I = (s == null ? void 0 : s[0]) || "", m = document == null ? void 0 : document.querySelector(`[name=${I}]`);
|
|
152
152
|
m && m.scrollIntoView({ behavior: "smooth" });
|
|
153
153
|
}
|
|
154
154
|
return !u.value;
|
|
155
155
|
},
|
|
156
|
-
getError: function(
|
|
156
|
+
getError: function(n) {
|
|
157
157
|
var s;
|
|
158
|
-
return ((s = i[
|
|
158
|
+
return ((s = i[n]) == null ? void 0 : s.errorMessage) || "";
|
|
159
159
|
},
|
|
160
|
-
touch: function(
|
|
161
|
-
if (!i[
|
|
162
|
-
throw new Error(`In touch: fieldName "${
|
|
163
|
-
i[
|
|
160
|
+
touch: function(n) {
|
|
161
|
+
if (!i[n])
|
|
162
|
+
throw new Error(`In touch: fieldName "${n}" does not exist in the validation fields.`);
|
|
163
|
+
i[n].setTouched();
|
|
164
164
|
},
|
|
165
165
|
setAllUntouched: async function() {
|
|
166
|
-
await S(), a.value.forEach((
|
|
167
|
-
|
|
166
|
+
await S(), a.value.forEach((n) => {
|
|
167
|
+
n.setTouched(!1);
|
|
168
168
|
});
|
|
169
169
|
},
|
|
170
|
-
setInitialValues: function(
|
|
170
|
+
setInitialValues: function(n) {
|
|
171
171
|
a.value.forEach((s) => {
|
|
172
|
-
s.setInitialValue(
|
|
172
|
+
s.setInitialValue(n[s.name]);
|
|
173
173
|
});
|
|
174
174
|
},
|
|
175
175
|
fields: i,
|
|
176
|
-
dirtyFields:
|
|
176
|
+
dirtyFields: v,
|
|
177
177
|
hasErrors: u,
|
|
178
|
-
someTouched:
|
|
178
|
+
someTouched: h
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
function X({
|
|
182
182
|
fieldName: t,
|
|
183
183
|
fieldValue: e,
|
|
184
|
-
rules:
|
|
184
|
+
rules: o,
|
|
185
185
|
flush: i
|
|
186
186
|
}) {
|
|
187
|
-
const a =
|
|
187
|
+
const a = T(e.value), u = T(!1), h = c(() => (e.value ?? "") !== (a.value ?? "")), v = c(() => u.value ? o.map((r) => ({
|
|
188
188
|
fieldName: t,
|
|
189
|
-
ruleName:
|
|
190
|
-
isValid:
|
|
191
|
-
message: typeof
|
|
192
|
-
}))),
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
189
|
+
ruleName: r.name,
|
|
190
|
+
isValid: r.validator(e.value),
|
|
191
|
+
message: typeof r.message == "function" ? r.message(e.value) : r.message
|
|
192
|
+
})) : []), y = c(
|
|
193
|
+
() => v.value.filter((r) => !r.isValid).map((r) => ({
|
|
194
|
+
ruleName: r.ruleName,
|
|
195
|
+
message: r.message
|
|
196
|
+
}))
|
|
197
|
+
);
|
|
198
|
+
function l(r = !0) {
|
|
199
|
+
i(), u.value = r;
|
|
198
200
|
}
|
|
199
|
-
function b(
|
|
200
|
-
a.value =
|
|
201
|
+
function b(r) {
|
|
202
|
+
a.value = r;
|
|
201
203
|
}
|
|
202
204
|
return F({
|
|
203
205
|
name: t,
|
|
204
|
-
currentValue:
|
|
205
|
-
initialValue:
|
|
206
|
-
isTouched:
|
|
207
|
-
isDirty:
|
|
208
|
-
errorMessage: c(() =>
|
|
209
|
-
|
|
206
|
+
currentValue: E(e),
|
|
207
|
+
initialValue: E(a),
|
|
208
|
+
isTouched: E(u),
|
|
209
|
+
isDirty: E(h),
|
|
210
|
+
errorMessage: c(() => {
|
|
211
|
+
var r, N;
|
|
212
|
+
return ((N = (r = y.value) == null ? void 0 : r[0]) == null ? void 0 : N.message) || "";
|
|
213
|
+
}),
|
|
214
|
+
errors: y,
|
|
210
215
|
setInitialValue: b,
|
|
211
|
-
setTouched:
|
|
216
|
+
setTouched: l
|
|
212
217
|
});
|
|
213
218
|
}
|
|
214
219
|
export {
|
|
215
220
|
me as default,
|
|
216
221
|
ne as email,
|
|
217
|
-
|
|
222
|
+
g as isDefined,
|
|
218
223
|
oe as maxValue,
|
|
219
224
|
se as minValue,
|
|
220
225
|
ae as positiveNumber,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useValidation.js","sources":["../node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minValue.ts","../src/composables/useValidation/ruleFactories/positiveNumber.ts","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/round.js","../src/composables/useValidation/ruleFactories/price.ts","../src/composables/useValidation/ruleFactories/required.ts","../src/composables/useValidation/ruleFactories/wholeNumber.ts","../src/composables/useValidation/useValidation.ts"],"sourcesContent":["function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function email(config: Config = {}): ValidationRule {\n return {\n name: 'email',\n validator(value) {\n return !isDefined(value) || (typeof value === 'string' && /^\\S+@\\S+\\.\\S+$/.test(value));\n },\n message: config.message || t('ll.validation.email'),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function maxValue(config: Config): ValidationRule {\n return {\n name: 'maxValue',\n validator(value) {\n const max = toValue(config.max);\n\n return !isDefined(value) || Number(value) <= max;\n },\n message: config.message || (() => t('ll.validation.maxValue', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function minValue(config: Config): ValidationRule {\n return {\n name: 'minValue',\n validator(value) {\n const min = toValue(config.min);\n\n return !isDefined(value) || Number(value) >= min;\n },\n message: config.message || (() => t('ll.validation.minValue', { min: String(toValue(config.min)) })),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function positiveNumber(config: Config = {}): ValidationRule {\n return {\n name: 'positiveNumber',\n validator(value) {\n return !isDefined(value) || Number(value) > 0;\n },\n message: config.message || t('ll.validation.positiveNumber'),\n };\n}\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n}\n\nexport default createRound;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\n","import round from 'lodash-es/round';\n\nimport { DECIMAL_PRECISION } from '../../../constants';\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function price(config: Config = {}): ValidationRule {\n return {\n name: 'price',\n validator(value) {\n const price = Number(value);\n\n return (\n !isDefined(value) || (price !== Infinity && price >= 0 && price === round(price, DECIMAL_PRECISION.CURRENCY))\n );\n },\n message: config.message || t('ll.validation.price'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function required(config: Config = {}): ValidationRule {\n return {\n name: 'required',\n validator(value) {\n return isDefined(typeof value === 'string' ? value.trim() : value);\n },\n message: config.message || t('ll.validation.required'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function wholeNumber(config: Config = {}): ValidationRule {\n return {\n name: 'wholeNumber',\n validator(value) {\n return !isDefined(value) || (Number.isInteger(Number(value)) && Number(value) >= 0);\n },\n message: config.message || t('ll.validation.wholeNumber'),\n };\n}\n","import { flatten } from 'flat';\nimport debounce from 'lodash-es/debounce';\nimport get from 'lodash-es/get';\nimport { computed, ComputedRef, nextTick, reactive, readonly, Ref, ref, toValue, UnwrapRef, watch } from 'vue';\n\nimport { DEBOUNCE } from '../../constants';\nimport {\n UseValidationArgs,\n ValidationError,\n ValidationField,\n ValidationGroup,\n ValidationRule,\n} from './useValidation.types';\n\nexport default function useValidation<Values extends object>({\n rules,\n values,\n}: UseValidationArgs<Values>): ValidationGroup<Values> {\n const fieldNames = computed(() => Object.keys(flatten(rules, { safe: true })));\n\n const fields = fieldNames.value.reduce((map, fieldName) => {\n const fieldValue = ref(get(toValue(values), fieldName));\n\n // Having this function here allows us to update the fieldValue when the value of the field changes.\n // Also, passing `fieldValue` outside the `.reduce()` loop will cause a racing condition on `fieldValue` updates\n const updateFieldValue = (fieldName: string) => {\n fieldValue.value = get(toValue(values), fieldName);\n };\n\n const debouncedSetFieldValue = debounce(() => {\n updateFieldValue(fieldName);\n }, DEBOUNCE.FAST);\n\n watch(\n () => get(toValue(values), fieldName),\n () => {\n debouncedSetFieldValue();\n },\n );\n\n map[fieldName] = buildField<UnwrapRef<typeof fieldValue>>({\n fieldName,\n fieldValue,\n flush: () => {\n debouncedSetFieldValue.cancel();\n updateFieldValue(fieldName);\n },\n rules: get(rules, fieldName),\n });\n\n return map;\n }, {} as Record<string, ValidationField>);\n\n const fieldList = computed(() => Object.values(fields));\n\n const hasErrors = computed(() => {\n return fieldList.value.some((field) => field.errors.length > 0);\n });\n\n const someTouched = computed(() => {\n return fieldList.value.some((field) => field.isTouched);\n });\n\n const dirtyFields = computed(() => fieldList.value.filter((field) => field.isDirty));\n\n const validate: ValidationGroup<Values>['validate'] = async function ({ preventScroll } = {}) {\n fieldList.value.forEach((field) => {\n // Doing setTouched(true) on a field that already has isTouched as `true` will not trigger reactivity for that field. Therefore, setting isTouched to `false` for all fields ensures that setTouched(true) will trigger reactivity for every field, which will cause all validations to run and display any error messages.\n field.setTouched(false);\n field.setTouched(true);\n });\n await nextTick();\n\n if (hasErrors.value && !preventScroll) {\n const firstFieldWithError = Object.entries(fields).find(([_, field]) => field.errorMessage);\n const fieldName = firstFieldWithError?.[0] || '';\n const firstErrorElement = document?.querySelector(`[name=${fieldName}]`);\n\n if (firstErrorElement) {\n firstErrorElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n return !hasErrors.value;\n };\n\n const getError: ValidationGroup<Values>['getError'] = function (fieldName: string) {\n return fields[fieldName]?.errorMessage || '';\n };\n\n const touch: ValidationGroup<Values>['touch'] = function (fieldName: string) {\n if (!fields[fieldName]) {\n throw new Error(`In touch: fieldName \"${fieldName}\" does not exist in the validation fields.`);\n }\n\n fields[fieldName].setTouched();\n };\n\n const setAllUntouched: ValidationGroup<Values>['setAllUntouched'] = async function () {\n await nextTick(); // wait for field values to be reset\n fieldList.value.forEach((field) => {\n field.setTouched(false);\n });\n };\n\n const setInitialValues: ValidationGroup<Values>['setInitialValues'] = function (intialValues: Values) {\n fieldList.value.forEach((field) => {\n field.setInitialValue(intialValues[field.name]);\n });\n };\n\n return reactive({\n validate,\n getError,\n touch,\n setAllUntouched,\n setInitialValues,\n fields,\n dirtyFields,\n hasErrors,\n someTouched,\n });\n}\n\ninterface BuildFieldArgs<Value = unknown> {\n fieldName: string;\n fieldValue: ComputedRef<Value>;\n rules: ValidationRule[];\n flush: () => void;\n}\n\nfunction buildField<Value = unknown>({\n fieldName,\n fieldValue,\n rules,\n flush,\n}: BuildFieldArgs<Value>): ValidationField<Value> {\n /**\n * In order for `initialValue` to work properly, the `buildField` function must not be reactive; `buildField` should be called only once for each field when `useValidation` is called.\n */\n const initialValue = ref(fieldValue.value) as Ref<Value>;\n const isTouched = ref(false);\n const isDirty = computed(() => (fieldValue.value ?? '') !== (initialValue.value ?? ''));\n\n const results = computed(() => {\n return rules.map((rule) => {\n return {\n fieldName,\n ruleName: rule.name,\n isValid: rule.validator(fieldValue.value),\n message: typeof rule.message === 'function' ? rule.message(fieldValue.value) : rule.message,\n };\n });\n });\n\n const errors = computed<ValidationError[]>(() => {\n if (isTouched.value) {\n return results.value\n .filter((result) => !result.isValid)\n .map((result) => {\n return {\n ruleName: result.ruleName,\n message: result.message,\n };\n });\n }\n\n return [];\n });\n\n function setTouched(value = true) {\n // Flushing the debounced value to be updated right away.\n // So that, we can have reactivity for `rules` validation, `isTouched`, `isDirty`, among other values\n flush();\n\n isTouched.value = value;\n }\n\n function setInitialValue(value: Value) {\n initialValue.value = value;\n }\n\n return reactive({\n name: fieldName,\n currentValue: readonly(fieldValue),\n initialValue: readonly(initialValue),\n isTouched: readonly(isTouched),\n isDirty: readonly(isDirty),\n errorMessage: computed(() => (errors.value.length ? errors.value[0].message : '')),\n errors,\n setInitialValue,\n setTouched,\n });\n}\n\n// The ruleFactories are excluded from the main entrypoint in vite.config.ts, so they are exported here instead. This allows one import statement to be used for useValidation, its types, and all of the ruleFactories.\nexport { default as email } from './ruleFactories/email';\nexport { default as maxValue } from './ruleFactories/maxValue';\nexport { default as minValue } from './ruleFactories/minValue';\nexport { default as positiveNumber } from './ruleFactories/positiveNumber';\nexport { default as price } from './ruleFactories/price';\nexport { default as required } from './ruleFactories/required';\nexport { default as wholeNumber } from './ruleFactories/wholeNumber';\nexport * from './useValidation.types';\nexport { default as isDefined } from './utils/isDefined';\n"],"names":["isBuffer","obj","keyIdentity","key","flatten","target","opts","delimiter","maxDepth","transformKey","output","step","object","prev","currentDepth","value","isarray","type","isbuffer","isobject","newKey","email","config","isDefined","t","maxValue","max","toValue","minValue","min","positiveNumber","INFINITY","MAX_INTEGER","toFinite","toNumber","sign","toInteger","result","remainder","nativeIsFinite","root","nativeMin","createRound","methodName","func","number","precision","pair","toString","round","round$1","price","DECIMAL_PRECISION","required","wholeNumber","useValidation","rules","values","fields","computed","map","fieldName","fieldValue","ref","get","updateFieldValue","debouncedSetFieldValue","debounce","DEBOUNCE","watch","buildField","fieldList","hasErrors","field","someTouched","dirtyFields","reactive","preventScroll","nextTick","firstFieldWithError","_","firstErrorElement","_a","intialValues","flush","initialValue","isTouched","isDirty","results","rule","errors","setTouched","setInitialValue","readonly"],"mappings":";;;;;;;;;AAAA,SAASA,EAAUC,GAAK;AACtB,SAAOA,KACLA,EAAI,eACH,OAAOA,EAAI,YAAY,YAAa,cACrCA,EAAI,YAAY,SAASA,CAAG;AAChC;AAEA,SAASC,EAAaC,GAAK;AACzB,SAAOA;AACT;AAEO,SAASC,EAASC,GAAQC,GAAM;AACrC,EAAAA,IAAOA,KAAQ,CAAE;AAEjB,QAAMC,IAAYD,EAAK,aAAa,KAC9BE,IAAWF,EAAK,UAChBG,IAAeH,EAAK,gBAAgBJ,GACpCQ,IAAS,CAAE;AAEjB,WAASC,EAAMC,GAAQC,GAAMC,GAAc;AACzC,IAAAA,IAAeA,KAAgB,GAC/B,OAAO,KAAKF,CAAM,EAAE,QAAQ,SAAUT,GAAK;AACzC,YAAMY,IAAQH,EAAOT,CAAG,GAClBa,IAAUV,EAAK,QAAQ,MAAM,QAAQS,CAAK,GAC1CE,IAAO,OAAO,UAAU,SAAS,KAAKF,CAAK,GAC3CG,IAAWlB,EAASe,CAAK,GACzBI,IACJF,MAAS,qBACTA,MAAS,kBAGLG,IAASP,IACXA,IAAON,IAAYE,EAAaN,CAAG,IACnCM,EAAaN,CAAG;AAEpB,UAAI,CAACa,KAAW,CAACE,KAAYC,KAAY,OAAO,KAAKJ,CAAK,EAAE,WACzD,CAACT,EAAK,YAAYQ,IAAeN;AAClC,eAAOG,EAAKI,GAAOK,GAAQN,IAAe,CAAC;AAG7C,MAAAJ,EAAOU,CAAM,IAAIL;AAAA,IACvB,CAAK;AAAA,EACF;AAED,SAAAJ,EAAKN,CAAM,GAEJK;AACT;ACvCwB,SAAAW,GAAMC,IAAiB,IAAoB;AAC1D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACR,aAAA,CAACQ,EAAUR,CAAK,KAAM,OAAOA,KAAU,YAAY,iBAAiB,KAAKA,CAAK;AAAA,IACvF;AAAA,IACA,SAASO,EAAO,WAAWE,EAAE,qBAAqB;AAAA,EAAA;AAEtD;ACLA,SAAwBC,GAASH,GAAgC;AACxD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACT,YAAAW,IAAMC,EAAQL,EAAO,GAAG;AAE9B,aAAO,CAACC,EAAUR,CAAK,KAAK,OAAOA,CAAK,KAAKW;AAAA,IAC/C;AAAA,IACA,SAASJ,EAAO,YAAY,MAAME,EAAE,0BAA0B,EAAE,KAAK,OAAOG,EAAQL,EAAO,GAAG,CAAC,EAAG,CAAA;AAAA,EAAA;AAEtG;ACVA,SAAwBM,GAASN,GAAgC;AACxD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACT,YAAAc,IAAMF,EAAQL,EAAO,GAAG;AAE9B,aAAO,CAACC,EAAUR,CAAK,KAAK,OAAOA,CAAK,KAAKc;AAAA,IAC/C;AAAA,IACA,SAASP,EAAO,YAAY,MAAME,EAAE,0BAA0B,EAAE,KAAK,OAAOG,EAAQL,EAAO,GAAG,CAAC,EAAG,CAAA;AAAA,EAAA;AAEtG;ACbwB,SAAAQ,GAAeR,IAAiB,IAAoB;AACnE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACf,aAAO,CAACQ,EAAUR,CAAK,KAAK,OAAOA,CAAK,IAAI;AAAA,IAC9C;AAAA,IACA,SAASO,EAAO,WAAWE,EAAE,8BAA8B;AAAA,EAAA;AAE/D;ACbA,IAAIO,IAAW,IAAI,GACfC,IAAc;AAyBlB,SAASC,EAASlB,GAAO;AACvB,MAAI,CAACA;AACH,WAAOA,MAAU,IAAIA,IAAQ;AAG/B,MADAA,IAAQmB,EAASnB,CAAK,GAClBA,MAAUgB,KAAYhB,MAAU,CAACgB,GAAU;AAC7C,QAAII,IAAQpB,IAAQ,IAAI,KAAK;AAC7B,WAAOoB,IAAOH;AAAA,EACf;AACD,SAAOjB,MAAUA,IAAQA,IAAQ;AACnC;ACXA,SAASqB,EAAUrB,GAAO;AACxB,MAAIsB,IAASJ,EAASlB,CAAK,GACvBuB,IAAYD,IAAS;AAEzB,SAAOA,MAAWA,IAAUC,IAAYD,IAASC,IAAYD,IAAU;AACzE;AC3BA,IAAIE,IAAiBC,EAAK,UACtBC,IAAY,KAAK;AASrB,SAASC,EAAYC,GAAY;AAC/B,MAAIC,IAAO,KAAKD,CAAU;AAC1B,SAAO,SAASE,GAAQC,GAAW;AAGjC,QAFAD,IAASX,EAASW,CAAM,GACxBC,IAAYA,KAAa,OAAO,IAAIL,EAAUL,EAAUU,CAAS,GAAG,GAAG,GACnEA,KAAaP,EAAeM,CAAM,GAAG;AAGvC,UAAIE,KAAQC,EAASH,CAAM,IAAI,KAAK,MAAM,GAAG,GACzC9B,IAAQ6B,EAAKG,EAAK,CAAC,IAAI,OAAO,CAACA,EAAK,CAAC,IAAID,EAAU;AAEvD,aAAAC,KAAQC,EAASjC,CAAK,IAAI,KAAK,MAAM,GAAG,GACjC,EAAEgC,EAAK,CAAC,IAAI,OAAO,CAACA,EAAK,CAAC,IAAID;AAAA,IACtC;AACD,WAAOF,EAAKC,CAAM;AAAA,EACtB;AACA;ACTA,IAAII,IAAQP,EAAY,OAAO;AAE/B,MAAAQ,IAAeD;ACdS,SAAAE,GAAM7B,IAAiB,IAAoB;AAC1D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACToC,YAAAA,IAAQ,OAAOpC,CAAK;AAE1B,aACE,CAACQ,EAAUR,CAAK,KAAMoC,MAAU,SAAYA,KAAS,KAAKA,MAAUF,EAAME,GAAOC,EAAkB,QAAQ;AAAA,IAE/G;AAAA,IACA,SAAS9B,EAAO,WAAWE,EAAE,qBAAqB;AAAA,EAAA;AAEtD;ACfwB,SAAA6B,GAAS/B,IAAiB,IAAoB;AAC7D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACf,aAAOQ,EAAU,OAAOR,KAAU,WAAWA,EAAM,KAAA,IAASA,CAAK;AAAA,IACnE;AAAA,IACA,SAASO,EAAO,WAAWE,EAAE,wBAAwB;AAAA,EAAA;AAEzD;ACRwB,SAAA8B,GAAYhC,IAAiB,IAAoB;AAChE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAUP,GAAO;AACf,aAAO,CAACQ,EAAUR,CAAK,KAAM,OAAO,UAAU,OAAOA,CAAK,CAAC,KAAK,OAAOA,CAAK,KAAK;AAAA,IACnF;AAAA,IACA,SAASO,EAAO,WAAWE,EAAE,2BAA2B;AAAA,EAAA;AAE5D;ACFA,SAAwB+B,GAAqC;AAAA,EAC3D,OAAAC;AAAA,EACA,QAAAC;AACF,GAAuD;AAGrD,QAAMC,IAFaC,EAAS,MAAM,OAAO,KAAKvD,EAAQoD,GAAO,EAAE,MAAM,GAAM,CAAA,CAAC,CAAC,EAEnD,MAAM,OAAO,CAACI,GAAKC,MAAc;AACzD,UAAMC,IAAaC,EAAIC,EAAIrC,EAAQ8B,CAAM,GAAGI,CAAS,CAAC,GAIhDI,IAAmB,CAACJ,MAAsB;AAC9C,MAAAC,EAAW,QAAQE,EAAIrC,EAAQ8B,CAAM,GAAGI,CAAS;AAAA,IAAA,GAG7CK,IAAyBC,EAAS,MAAM;AAC5C,MAAAF,EAAiBJ,CAAS;AAAA,IAAA,GACzBO,EAAS,IAAI;AAEhB,WAAAC;AAAA,MACE,MAAML,EAAIrC,EAAQ8B,CAAM,GAAGI,CAAS;AAAA,MACpC,MAAM;AACmB,QAAAK;MACzB;AAAA,IAAA,GAGEN,EAAAC,CAAS,IAAIS,EAAyC;AAAA,MACxD,WAAAT;AAAA,MACA,YAAAC;AAAA,MACA,OAAO,MAAM;AACX,QAAAI,EAAuB,OAAO,GAC9BD,EAAiBJ,CAAS;AAAA,MAC5B;AAAA,MACA,OAAOG,EAAIR,GAAOK,CAAS;AAAA,IAAA,CAC5B,GAEMD;AAAA,EACT,GAAG,CAAqC,CAAA,GAElCW,IAAYZ,EAAS,MAAM,OAAO,OAAOD,CAAM,CAAC,GAEhDc,IAAYb,EAAS,MAClBY,EAAU,MAAM,KAAK,CAACE,MAAUA,EAAM,OAAO,SAAS,CAAC,CAC/D,GAEKC,IAAcf,EAAS,MACpBY,EAAU,MAAM,KAAK,CAACE,MAAUA,EAAM,SAAS,CACvD,GAEKE,IAAchB,EAAS,MAAMY,EAAU,MAAM,OAAO,CAACE,MAAUA,EAAM,OAAO,CAAC;AAgDnF,SAAOG,EAAS;AAAA,IACd,UA/CoD,eAAgB,EAAE,eAAAC,EAAc,IAAI,CAAA,GAAI;AAQxF,UAPMN,EAAA,MAAM,QAAQ,CAACE,MAAU;AAEjC,QAAAA,EAAM,WAAW,EAAK,GACtBA,EAAM,WAAW,EAAI;AAAA,MAAA,CACtB,GACD,MAAMK,EAAS,GAEXN,EAAU,SAAS,CAACK,GAAe;AACrC,cAAME,IAAsB,OAAO,QAAQrB,CAAM,EAAE,KAAK,CAAC,CAACsB,GAAGP,CAAK,MAAMA,EAAM,YAAY,GACpFZ,KAAYkB,KAAA,gBAAAA,EAAsB,OAAM,IACxCE,IAAoB,qCAAU,cAAc,SAASpB,CAAS;AAEpE,QAAIoB,KACFA,EAAkB,eAAe,EAAE,UAAU,SAAU,CAAA;AAAA,MAE3D;AAEA,aAAO,CAACT,EAAU;AAAA,IAAA;AAAA,IA8BlB,UA3BoD,SAAUX,GAAmB;;AAC1E,eAAAqB,IAAAxB,EAAOG,CAAS,MAAhB,gBAAAqB,EAAmB,iBAAgB;AAAA,IAAA;AAAA,IA2B1C,OAxB8C,SAAUrB,GAAmB;AACvE,UAAA,CAACH,EAAOG,CAAS;AACnB,cAAM,IAAI,MAAM,wBAAwBA,CAAS,4CAA4C;AAGxF,MAAAH,EAAAG,CAAS,EAAE;IAAW;AAAA,IAoB7B,iBAjBkE,iBAAkB;AACpF,YAAMiB,EAAS,GACLP,EAAA,MAAM,QAAQ,CAACE,MAAU;AACjC,QAAAA,EAAM,WAAW,EAAK;AAAA,MAAA,CACvB;AAAA,IAAA;AAAA,IAcD,kBAXoE,SAAUU,GAAsB;AAC1F,MAAAZ,EAAA,MAAM,QAAQ,CAACE,MAAU;AACjC,QAAAA,EAAM,gBAAgBU,EAAaV,EAAM,IAAI,CAAC;AAAA,MAAA,CAC/C;AAAA,IAAA;AAAA,IASD,QAAAf;AAAA,IACA,aAAAiB;AAAA,IACA,WAAAH;AAAA,IACA,aAAAE;AAAA,EAAA,CACD;AACH;AASA,SAASJ,EAA4B;AAAA,EACnC,WAAAT;AAAA,EACA,YAAAC;AAAA,EACA,OAAAN;AAAA,EACA,OAAA4B;AACF,GAAkD;AAI1C,QAAAC,IAAetB,EAAID,EAAW,KAAK,GACnCwB,IAAYvB,EAAI,EAAK,GACrBwB,IAAU5B,EAAS,OAAOG,EAAW,SAAS,SAASuB,EAAa,SAAS,GAAG,GAEhFG,IAAU7B,EAAS,MAChBH,EAAM,IAAI,CAACiC,OACT;AAAA,IACL,WAAA5B;AAAA,IACA,UAAU4B,EAAK;AAAA,IACf,SAASA,EAAK,UAAU3B,EAAW,KAAK;AAAA,IACxC,SAAS,OAAO2B,EAAK,WAAY,aAAaA,EAAK,QAAQ3B,EAAW,KAAK,IAAI2B,EAAK;AAAA,EAAA,EAEvF,CACF,GAEKC,IAAS/B,EAA4B,MACrC2B,EAAU,QACLE,EAAQ,MACZ,OAAO,CAACnD,MAAW,CAACA,EAAO,OAAO,EAClC,IAAI,CAACA,OACG;AAAA,IACL,UAAUA,EAAO;AAAA,IACjB,SAASA,EAAO;AAAA,EAAA,EAEnB,IAGE,EACR;AAEQ,WAAAsD,EAAW5E,IAAQ,IAAM;AAG1B,IAAAqE,KAENE,EAAU,QAAQvE;AAAA,EACpB;AAEA,WAAS6E,EAAgB7E,GAAc;AACrC,IAAAsE,EAAa,QAAQtE;AAAA,EACvB;AAEA,SAAO6D,EAAS;AAAA,IACd,MAAMf;AAAA,IACN,cAAcgC,EAAS/B,CAAU;AAAA,IACjC,cAAc+B,EAASR,CAAY;AAAA,IACnC,WAAWQ,EAASP,CAAS;AAAA,IAC7B,SAASO,EAASN,CAAO;AAAA,IACzB,cAAc5B,EAAS,MAAO+B,EAAO,MAAM,SAASA,EAAO,MAAM,CAAC,EAAE,UAAU,EAAG;AAAA,IACjF,QAAAA;AAAA,IACA,iBAAAE;AAAA,IACA,YAAAD;AAAA,EAAA,CACD;AACH;","x_google_ignoreList":[0,5,6,7,8]}
|
|
1
|
+
{"version":3,"file":"useValidation.js","sources":["../node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minValue.ts","../src/composables/useValidation/ruleFactories/positiveNumber.ts","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/round.js","../src/composables/useValidation/ruleFactories/price.ts","../src/composables/useValidation/ruleFactories/required.ts","../src/composables/useValidation/ruleFactories/wholeNumber.ts","../src/composables/useValidation/useValidation.ts"],"sourcesContent":["function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function email(config: Config = {}): ValidationRule {\n return {\n name: 'email',\n validator(value) {\n return !isDefined(value) || (typeof value === 'string' && /^\\S+@\\S+\\.\\S+$/.test(value));\n },\n message: config.message || t('ll.validation.email'),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function maxValue(config: Config): ValidationRule {\n return {\n name: 'maxValue',\n validator(value) {\n const max = toValue(config.max);\n\n return !isDefined(value) || Number(value) <= max;\n },\n message: config.message || (() => t('ll.validation.maxValue', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function minValue(config: Config): ValidationRule {\n return {\n name: 'minValue',\n validator(value) {\n const min = toValue(config.min);\n\n return !isDefined(value) || Number(value) >= min;\n },\n message: config.message || (() => t('ll.validation.minValue', { min: String(toValue(config.min)) })),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function positiveNumber(config: Config = {}): ValidationRule {\n return {\n name: 'positiveNumber',\n validator(value) {\n return !isDefined(value) || Number(value) > 0;\n },\n message: config.message || t('ll.validation.positiveNumber'),\n };\n}\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n}\n\nexport default createRound;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\n","import round from 'lodash-es/round';\n\nimport { DECIMAL_PRECISION } from '../../../constants';\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function price(config: Config = {}): ValidationRule {\n return {\n name: 'price',\n validator(value) {\n const price = Number(value);\n\n return (\n !isDefined(value) || (price !== Infinity && price >= 0 && price === round(price, DECIMAL_PRECISION.CURRENCY))\n );\n },\n message: config.message || t('ll.validation.price'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function required(config: Config = {}): ValidationRule {\n return {\n name: 'required',\n validator(value) {\n return isDefined(typeof value === 'string' ? value.trim() : value);\n },\n message: config.message || t('ll.validation.required'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function wholeNumber(config: Config = {}): ValidationRule {\n return {\n name: 'wholeNumber',\n validator(value) {\n return !isDefined(value) || (Number.isInteger(Number(value)) && Number(value) >= 0);\n },\n message: config.message || t('ll.validation.wholeNumber'),\n };\n}\n","import { flatten } from 'flat';\nimport debounce from 'lodash-es/debounce';\nimport get from 'lodash-es/get';\nimport { computed, ComputedRef, nextTick, reactive, readonly, Ref, ref, toValue, UnwrapRef, watch } from 'vue';\n\nimport { DEBOUNCE } from '../../constants';\nimport {\n UseValidationArgs,\n ValidationError,\n ValidationField,\n ValidationGroup,\n ValidationRule,\n} from './useValidation.types';\n\nexport default function useValidation<Values extends object>({\n rules,\n values,\n}: UseValidationArgs<Values>): ValidationGroup<Values> {\n const fieldNames = computed(() => Object.keys(flatten(rules, { safe: true })));\n\n const fields = fieldNames.value.reduce((map, fieldName) => {\n const fieldValue = ref(get(toValue(values), fieldName));\n\n // Having this function here allows us to update the fieldValue when the value of the field changes.\n // Also, passing `fieldValue` outside the `.reduce()` loop will cause a racing condition on `fieldValue` updates\n const updateFieldValue = (fieldName: string) => {\n fieldValue.value = get(toValue(values), fieldName);\n };\n\n const debouncedSetFieldValue = debounce(() => {\n updateFieldValue(fieldName);\n }, DEBOUNCE.FAST);\n\n watch(\n () => get(toValue(values), fieldName),\n () => {\n debouncedSetFieldValue();\n },\n );\n\n map[fieldName] = buildField<UnwrapRef<typeof fieldValue>>({\n fieldName,\n fieldValue,\n flush: () => {\n debouncedSetFieldValue.cancel();\n updateFieldValue(fieldName);\n },\n rules: get(rules, fieldName),\n });\n\n return map;\n }, {} as Record<string, ValidationField>);\n\n const fieldList = computed(() => Object.values(fields));\n\n const hasErrors = computed(() => fieldList.value.some((field) => field.errors.length > 0));\n\n const someTouched = computed(() => fieldList.value.some((field) => field.isTouched));\n\n const dirtyFields = computed(() => fieldList.value.filter((field) => field.isDirty));\n\n const validate: ValidationGroup<Values>['validate'] = async function ({ preventScroll } = {}) {\n fieldList.value.forEach((field) => {\n // Doing setTouched(true) on a field that already has isTouched as `true` will not trigger reactivity for that field. Therefore, setting isTouched to `false` for all fields ensures that setTouched(true) will trigger reactivity for every field, which will cause all validations to run and display any error messages.\n field.setTouched(false);\n field.setTouched(true);\n });\n await nextTick();\n\n if (hasErrors.value && !preventScroll) {\n const firstFieldWithError = Object.entries(fields).find(([_, field]) => field.errorMessage);\n const fieldName = firstFieldWithError?.[0] || '';\n const firstErrorElement = document?.querySelector(`[name=${fieldName}]`);\n\n if (firstErrorElement) {\n firstErrorElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n return !hasErrors.value;\n };\n\n const getError: ValidationGroup<Values>['getError'] = function (fieldName: string) {\n return fields[fieldName]?.errorMessage || '';\n };\n\n const touch: ValidationGroup<Values>['touch'] = function (fieldName: string) {\n if (!fields[fieldName]) {\n throw new Error(`In touch: fieldName \"${fieldName}\" does not exist in the validation fields.`);\n }\n\n fields[fieldName].setTouched();\n };\n\n const setAllUntouched: ValidationGroup<Values>['setAllUntouched'] = async function () {\n await nextTick(); // wait for field values to be reset\n fieldList.value.forEach((field) => {\n field.setTouched(false);\n });\n };\n\n const setInitialValues: ValidationGroup<Values>['setInitialValues'] = function (intialValues: Values) {\n fieldList.value.forEach((field) => {\n field.setInitialValue(intialValues[field.name]);\n });\n };\n\n return reactive({\n validate,\n getError,\n touch,\n setAllUntouched,\n setInitialValues,\n fields,\n dirtyFields,\n hasErrors,\n someTouched,\n });\n}\n\ninterface BuildFieldArgs<Value = unknown> {\n fieldName: string;\n fieldValue: ComputedRef<Value>;\n rules: ValidationRule[];\n flush: () => void;\n}\n\nfunction buildField<Value = unknown>({\n fieldName,\n fieldValue,\n rules,\n flush,\n}: BuildFieldArgs<Value>): ValidationField<Value> {\n /**\n * In order for `initialValue` to work properly, the `buildField` function must not be reactive; `buildField` should be called only once for each field when `useValidation` is called.\n */\n const initialValue = ref(fieldValue.value) as Ref<Value>;\n const isTouched = ref(false);\n const isDirty = computed(() => (fieldValue.value ?? '') !== (initialValue.value ?? ''));\n\n const results = computed(() => {\n // Adding a check for `isTouched` to avoid running the validation rules on the initial load, when the field is not touched.\n // if receives a fieldValue with some value as default or not, rule validation should also be triggered only via `touch()` or `validate()` methods.\n if (!isTouched.value) {\n return [];\n }\n\n return rules.map((rule) => ({\n fieldName,\n ruleName: rule.name,\n isValid: rule.validator(fieldValue.value),\n message: typeof rule.message === 'function' ? rule.message(fieldValue.value) : rule.message,\n }));\n });\n\n const errors = computed<ValidationError[]>(() =>\n results.value\n .filter((result) => !result.isValid)\n .map((result) => {\n return {\n ruleName: result.ruleName,\n message: result.message,\n };\n }),\n );\n\n function setTouched(value = true) {\n // Flushing the debounced value to be updated right away.\n // So that, we can have reactivity for `rules` validation, `isTouched`, `isDirty`, among other values\n flush();\n\n isTouched.value = value;\n }\n\n function setInitialValue(value: Value) {\n initialValue.value = value;\n }\n\n return reactive({\n name: fieldName,\n currentValue: readonly(fieldValue),\n initialValue: readonly(initialValue),\n isTouched: readonly(isTouched),\n isDirty: readonly(isDirty),\n errorMessage: computed(() => errors.value?.[0]?.message || ''),\n errors,\n setInitialValue,\n setTouched,\n });\n}\n\n// The ruleFactories are excluded from the main entrypoint in vite.config.ts, so they are exported here instead. This allows one import statement to be used for useValidation, its types, and all of the ruleFactories.\nexport { default as email } from './ruleFactories/email';\nexport { default as maxValue } from './ruleFactories/maxValue';\nexport { default as minValue } from './ruleFactories/minValue';\nexport { default as positiveNumber } from './ruleFactories/positiveNumber';\nexport { default as price } from './ruleFactories/price';\nexport { default as required } from './ruleFactories/required';\nexport { default as wholeNumber } from './ruleFactories/wholeNumber';\nexport * from './useValidation.types';\nexport { default as isDefined } from './utils/isDefined';\n"],"names":["isBuffer","obj","keyIdentity","key","flatten","target","opts","delimiter","maxDepth","transformKey","output","step","object","prev","currentDepth","value","isarray","type","isbuffer","isobject","newKey","email","config","isDefined","t","maxValue","max","toValue","minValue","min","positiveNumber","INFINITY","MAX_INTEGER","toFinite","toNumber","sign","toInteger","result","remainder","nativeIsFinite","root","nativeMin","createRound","methodName","func","number","precision","pair","toString","round","round$1","price","DECIMAL_PRECISION","required","wholeNumber","useValidation","rules","values","fields","computed","map","fieldName","fieldValue","ref","get","updateFieldValue","debouncedSetFieldValue","debounce","DEBOUNCE","watch","buildField","fieldList","hasErrors","field","someTouched","dirtyFields","reactive","preventScroll","nextTick","firstFieldWithError","_","firstErrorElement","_a","intialValues","flush","initialValue","isTouched","isDirty","results","rule","errors","setTouched","setInitialValue","readonly","_b"],"mappings":"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","x_google_ignoreList":[0,5,6,7,8]}
|