kanun 1.0.13 → 1.1.2

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.
Files changed (4) hide show
  1. package/README.md +7 -7
  2. package/dist/index.cjs +433 -293
  3. package/dist/index.js +424 -279
  4. package/package.json +10 -10
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region \0rolldown/runtime.js
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
@@ -7,16 +7,12 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __getProtoOf = Object.getPrototypeOf;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
9
  var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
12
- key = keys[i];
13
- if (!__hasOwnProp.call(to, key) && key !== except) {
14
- __defProp(to, key, {
15
- get: ((k) => from[k]).bind(null, key),
16
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
- });
18
- }
19
- }
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
20
16
  }
21
17
  return to;
22
18
  };
@@ -24,16 +20,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
20
  value: mod,
25
21
  enumerable: true
26
22
  }) : target, mod));
27
-
28
23
  //#endregion
29
24
  let node_async_hooks = require("node:async_hooks");
30
25
  let node_url = require("node:url");
31
26
  let node_net = require("node:net");
32
27
  let dayjs_plugin_customParseFormat_js = require("dayjs/plugin/customParseFormat.js");
33
- dayjs_plugin_customParseFormat_js = __toESM(dayjs_plugin_customParseFormat_js);
28
+ dayjs_plugin_customParseFormat_js = __toESM(dayjs_plugin_customParseFormat_js, 1);
34
29
  let dayjs = require("dayjs");
35
- dayjs = __toESM(dayjs);
36
-
30
+ dayjs = __toESM(dayjs, 1);
37
31
  //#region src/Context.ts
38
32
  const validatorContextStorage = new node_async_hooks.AsyncLocalStorage();
39
33
  /**
@@ -72,255 +66,244 @@ function runWithValidatorContext(context, callback) {
72
66
  ...context
73
67
  }, callback);
74
68
  }
75
-
76
69
  //#endregion
77
70
  //#region src/Rules/baseRule.ts
78
71
  var BaseRule = class {};
79
-
80
- //#endregion
81
- //#region src/locales/en.ts
82
- var en_default = {
83
- accepted: "The :attribute must be accepted.",
84
- accepted_if: "The :attribute must be accepted when :other is :value.",
85
- after: "The :attribute must be a date after :date.",
86
- after_or_equal: "The :attribute must be a date after or equal to :date.",
87
- alpha: "The :attribute must only contain letters.",
88
- alpha_dash: "The :attribute must only contain at least one letter or one number, and optionally dashes and underscores.",
89
- alpha_num: "The :attribute must only contain letters and numbers.",
90
- array: "The :attribute must be an array.",
91
- array_unique: "The :attribute must be an array with unique values.",
92
- before: "The :attribute must be a date before :date.",
93
- before_or_equal: "The :attribute must be a date before or equal to :date.",
94
- between: {
95
- number: "The :attribute must be between :min and :max.",
96
- string: "The :attribute must be between :min and :max characters.",
97
- array: "The :attribute must have between :min and :max items.",
98
- object: "The :attribute must have between :min and :max items."
99
- },
100
- boolean: "The :attribute field must be true or false.",
101
- confirmed: "The :attribute confirmation does not match.",
102
- date: "The :attribute is not a valid date.",
103
- datetime: "The :attribute must be a valid date matching the format :format.",
104
- date_equals: "The :attribute must be a date equal to :date.",
105
- declined: "The :attribute must be declined.",
106
- declined_if: "The :attribute must be declined when :other is :value.",
107
- different: "The :attribute and :other must be different.",
108
- distinct: "The :attribute field has a duplicate value.",
109
- digits: "The :attribute must be :digits digits.",
110
- digits_between: "The :attribute must be between :min and :max digits.",
111
- email: "The :attribute must be a valid email address.",
112
- ends_with: "The :attribute must end with one of the following: :values.",
113
- filled: "The :attribute field must have a value.",
114
- exists: "The selected :attribute is invalid.",
115
- gt: {
116
- number: "The :attribute must be greater than :value.",
117
- string: "The :attribute must be greater than :value characters.",
118
- array: "The :attribute must have more than :value items.",
119
- object: "The :attribute must have more than :value items."
120
- },
121
- gte: {
122
- number: "The :attribute must be greater than or equal :value.",
123
- string: "The :attribute must be greater than or equal :value characters.",
124
- array: "The :attribute must have :value items or more.",
125
- object: "The :attribute must have :value items or more."
126
- },
127
- hex: "The :attribute must be a valid hexadecimal color.",
128
- in: "The :attribute must be one of the following :values.",
129
- includes: "The :attribute must include one of the following values: :values.",
130
- integer: "The :attribute must be an integer.",
131
- ip: "The :attribute must be a valid IP address.",
132
- ipv4: "The :attribute must be a valid IPv4 address.",
133
- ipv6: "The :attribute must be a valid IPv6 address.",
134
- json: "The :attribute must be a valid JSON string.",
135
- lt: {
136
- number: "The :attribute must be less than :value.",
137
- string: "The :attribute must be less than :value characters.",
138
- array: "The :attribute must have less than :value items.",
139
- object: "The :attribute must have less than :value items."
140
- },
141
- lte: {
142
- number: "The :attribute must be less than or equal :value.",
143
- string: "The :attribute must be less than or equal :value characters.",
144
- array: "The :attribute must have :value items or less.",
145
- object: "The :attribute must have :value items or less."
146
- },
147
- max: {
148
- number: "The :attribute must not be greater than :max.",
149
- string: "The :attribute must not be greater than :max characters.",
150
- array: "The :attribute must not have more than :max items.",
151
- object: "The :attribute must not have more than :max items."
152
- },
153
- min: {
154
- number: "The :attribute must be at least :min.",
155
- string: "The :attribute must be at least :min characters.",
156
- array: "The :attribute must have at least :min items.",
157
- object: "The :attribute must have at least :min items."
158
- },
159
- mac_address: "The :attribute must be a valid MAC address.",
160
- not_in: "The selected :attribute is invalid.",
161
- not_regex: "The :attribute format is invalid.",
162
- not_includes: "The :attribute must not include any of the following values: :values.",
163
- numeric: "The :attribute must be a number.",
164
- object: "The :attribute must be an object.",
165
- password: {
166
- letter: "The :attribute must contain at least one letter.",
167
- letters: "The :attribute must contain at least :amount letters.",
168
- lower_case: "The :attribute must contain at least one lowercase letter.",
169
- lower_cases: "The :attribute must contain at least :amount lowercase letters.",
170
- number: "The :attribute must contain at least one number.",
171
- numbers: "The :attribute must contain at least :amount numbers.",
172
- symbol: "The :attribute must contain at least one symbol.",
173
- symbols: "The :attribute must contain at least :amount symbols.",
174
- upper_case: "The :attribute must contain at least one uppercase letter.",
175
- upper_cases: "The :attribute must contain at least :amount uppercase letters."
176
- },
177
- present: "The :attribute field must be present.",
178
- presentsame: "The :attribute field must be present.",
179
- prohibited: "The :attribute field is prohibited.",
180
- prohibited_unless: "The :attribute field is prohibited unless :other is in :values.",
181
- prohibits: "The :attribute field prohibits :values from being present.",
182
- regex: "The :attribute format is invalid.",
183
- required: "The :attribute field is required.",
184
- required_if: "The :attribute field is required when :other is :value.",
185
- required_unless: "The :attribute field is required unless :other is in :values.",
186
- required_with: "The :attribute field is required when :values is present.",
187
- required_with_all: "The :attribute field is required when :values are present.",
188
- required_without: "The :attribute field is required when :values is not present.",
189
- required_without_all: "The :attribute field is required when none of :values are present.",
190
- starts_with: "The :attribute must start with one of the following: :values.",
191
- same: "The :attribute and :other must match.",
192
- size: {
193
- number: "The :attribute must be :size.",
194
- string: "The :attribute must be :size characters.",
195
- array: "The :attribute must contain :size items.",
196
- object: "The :attribute must contain :size items."
197
- },
198
- string: "The :attribute must be a string.",
199
- timezone: "The :attribute must be a valid timezone.",
200
- unique: "The :attribute has already been taken.",
201
- url: "The :attribute must have a valid URL format.",
202
- multiple_of: "The :attribute must be a multiple of :value."
203
- };
204
-
205
- //#endregion
206
- //#region src/locales/ar.ts
207
- var ar_default = {
208
- accepted: "يجب قبول الحقل :attribute",
209
- accepted_if: "الحقل :attribute مقبول في حال ما إذا كان :other يساوي :value.",
210
- after: "يجب على الحقل :attribute أن يكون تاريخا لاحقا للتاريخ :date.",
211
- after_or_equal: "الحقل :attribute يجب أن يكون تاريخاً لاحقاً أو مطابقاً للتاريخ :date.",
212
- alpha: "يجب أن لا يحتوي الحقل :attribute سوى على حروف",
213
- alpha_dash: "يجب أن يحتوي الحقل :attribute على حرف واحد أو رقم واحد على الأقل، بالإضافة إلى شرطات وشرطات سفلية بشكل اختياري",
214
- alpha_num: "يجب أن يحتوي :attribute على حروف وأرقام فقط",
215
- array: "يجب أن يكون الحقل :attribute ًمصفوفة",
216
- before: "يجب على الحقل :attribute أن يكون تاريخا سابقا للتاريخ :date.",
217
- before_or_equal: "الحقل :attribute يجب أن يكون تاريخا سابقا أو مطابقا للتاريخ :date",
218
- between: {
219
- number: "يجب أن تكون قيمة :attribute بين :min و :max.",
220
- string: "يجب أن يكون عدد حروف النّص :attribute بين :min و :max",
221
- array: "يجب أن يحتوي :attribute على عدد من العناصر بين :min و :max",
222
- object: "يجب أن يحتوي :attribute على عدد من العناصر بين :min و :max"
223
- },
224
- boolean: "يجب أن تكون قيمة الحقل :attribute إما true أو false",
225
- confirmed: "حقل التأكيد غير مُطابق للحقل :attribute",
226
- date: "الحقل :attribute ليس تاريخًا صحيحًا",
227
- datetime: "الحقل :attribute يجب أن يكون تاريخًا صالحًا يطابق الصيغة :format.",
228
- date_equals: "لا يساوي الحقل :attribute مع :date.",
229
- declined: "يجب رفض الحقل :attribute",
230
- declined_if: "الحقل :attribute مرفوض في حال ما إذا كان :other يساوي :value.",
231
- different: "يجب أن يكون الحقلان :attribute و :other مُختلفان",
232
- digits: "يجب أن يحتوي الحقل :attribute على :digits رقمًا/أرقام",
233
- digits_between: "يجب أن يحتوي الحقل :attribute بين :min و :max رقمًا/أرقام",
234
- email: "يجب أن يكون :attribute عنوان بريد إلكتروني صحيح البُنية",
235
- ends_with: "حقل :attribute يجب ان ينتهي بأحد القيم التالية :value.",
236
- exists: "الحقل :attribute غير موجود",
237
- gt: {
238
- number: "حقل :attribute يجب ان يكون اكبر من :value.",
239
- string: "حقل :attribute يجب ان يكون اكبر من :value حروفٍ/حرفًا.",
240
- array: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر.",
241
- object: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر."
242
- },
243
- gte: {
244
- number: "حقل :attribute يجب ان يكون اكبر من او يساوي :value.",
245
- string: "حقل :attribute يجب ان يكون اكبر من او يساوي :value حروفٍ/حرفًا.",
246
- array: "حقل :attribute يجب ان يحتوي علي :value عناصر/عنصر او اكثر.",
247
- object: "حقل :attribute يجب ان يحتوي علي :value عناصر/عنصر او اكثر."
248
- },
249
- hex: "الحقل :attribute يجب أن يكون لونًا سداسيًا صالحًا.",
250
- in: "الحقل :attribute غير صالح",
251
- includes: "الحقل :attribute يجب أن يحتوي على أحد القيم التالية: :values.",
252
- integer: "يجب أن يكون الحقل :attribute عددًا صحيحًا",
253
- json: "يجب أن يكون الحقل :attribute نصا من نوع JSON.",
254
- lt: {
255
- number: "حقل :attribute يجب ان يكون اقل من :value.",
256
- string: "حقل :attribute يجب ان يكون اقل من :value حروفٍ/حرفًا.",
257
- array: "حقل :attribute يجب ان يحتوي علي اقل من :value عناصر/عنصر.",
258
- object: "حقل :attribute يجب ان يحتوي علي اقل من :value عناصر/عنصر."
259
- },
260
- lte: {
261
- number: "حقل :attribute يجب ان يكون اقل من او يساوي :value.",
262
- string: "حقل :attribute يجب ان يكون اقل من او يساوي :value حروفٍ/حرفًا.",
263
- array: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر.",
264
- object: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر."
265
- },
266
- max: {
267
- number: "يجب أن تكون قيمة الحقل :attribute مساوية أو أصغر لـ :max.",
268
- string: "يجب أن لا يتجاوز طول نص :attribute :max حروفٍ/حرفًا",
269
- array: "يجب أن لا يحتوي الحقل :attribute على أكثر من :max عناصر/عنصر.",
270
- object: "يجب أن لا يحتوي الحقل :attribute على أكثر من :max عناصر/عنصر."
271
- },
272
- min: {
273
- number: "يجب أن تكون قيمة الحقل :attribute مساوية أو أكبر لـ :min.",
274
- string: "يجب أن يكون طول نص :attribute على الأقل :min حروفٍ/حرفًا",
275
- array: "يجب أن يحتوي الحقل :attribute على الأقل على :min عُنصرًا/عناصر",
276
- object: "يجب أن يحتوي الحقل :attribute على الأقل على :min عُنصرًا/عناصر"
277
- },
278
- not_in: "الحقل :attribute غير صالح",
279
- not_regex: "الحقل :attribute نوعه غير صالح",
280
- not_includes: "الحقل :attribute يجب ألا يحتوي على أي من القيم التالية: :values.",
281
- numeric: "يجب على الحقل :attribute أن يكون رقمًا",
282
- object: "الحقل :attribute يجب ان يكون من نوع object.",
283
- password: {
284
- letter: "يجب ان يشمل حقل :attribute على حرف واحد على الاقل.",
285
- letters: "يجب ان يشمل حقل :attribute على عدد :amount حروف على الاقل.",
286
- lower_case: "يجب ان يشمل حقل :attribute على حرف واحد من صيغة صغيرة على الاقل.",
287
- lower_cases: "يجب ان يشمل حقل :attribute على عدد :amount حروف صغيرة على الاقل.",
288
- number: "يجب ان يشمل حقل :attribute على رقم واحد على الاقل.",
289
- numbers: "يجب ان يشمل حقل :attribute على عدد :amount من الارقام على الاقل.",
290
- symbol: "يجب ان يشمل حقل :attribute على رمز واحد على الاقل.",
291
- symbols: "يجب ان يشمل حقل :attribute على عدد :amount رموز على الاقل.",
292
- upper_case: "يجب ان يشمل حقل :attribute على حرف كبير واحد على الاقل.",
293
- upper_cases: "يجب ان يشمل حقل :attribute على عدد :amount حروف كبيرة على الاقل."
294
- },
295
- present: "يجب تقديم الحقل :attribute",
296
- regex: "صيغة الحقل :attribute .غير صحيحة",
297
- required: "الحقل :attribute مطلوب.",
298
- required_if: "الحقل :attribute مطلوب في حال ما إذا كان :other يساوي :value.",
299
- required_unless: "الحقل :attribute مطلوب في حال ما لم يكن :other يساوي :values.",
300
- required_with: "الحقل :attribute اجباري إذا توفّر :values.",
301
- required_with_all: "الحقل :attribute اجباري إذا توفّر :values.",
302
- required_without: "الحقل :attribute اجباري إذا لم يتوفّر :values.",
303
- required_without_all: "الحقل :attribute اجباري إذا لم يتوفّر :values.",
304
- starts_with: "الحقل :attribute يجب ان يبدأ بأحد القيم التالية: :values.",
305
- same: "يجب أن يتطابق الحقل :attribute مع :other",
306
- size: {
307
- number: "يجب أن تكون قيمة الحقل :attribute مساوية لـ :size",
308
- string: "يجب أن يحتوي النص :attribute على :size حروفٍ/حرفًا بالظبط",
309
- array: "يجب أن يحتوي الحقل :attribute على :size عنصرٍ/عناصر بالظبط",
310
- object: "يجب أن يحتوي الحقل :attribute على :size عنصرٍ/عناصر بالظبط"
311
- },
312
- string: "يجب أن يكون الحقل :attribute نصآ.",
313
- unique: "الحقل :attribute مستخدم بالفعل.",
314
- url: "صيغة الرابط :attribute غير صحيحة"
315
- };
316
-
317
72
  //#endregion
318
73
  //#region src/locales/index.ts
319
74
  var locales_default = {
320
- en: en_default,
321
- ar: ar_default
75
+ en: {
76
+ accepted: "The :attribute must be accepted.",
77
+ accepted_if: "The :attribute must be accepted when :other is :value.",
78
+ after: "The :attribute must be a date after :date.",
79
+ after_or_equal: "The :attribute must be a date after or equal to :date.",
80
+ alpha: "The :attribute must only contain letters.",
81
+ alpha_dash: "The :attribute must only contain at least one letter or one number, and optionally dashes and underscores.",
82
+ alpha_num: "The :attribute must only contain letters and numbers.",
83
+ array: "The :attribute must be an array.",
84
+ array_unique: "The :attribute must be an array with unique values.",
85
+ before: "The :attribute must be a date before :date.",
86
+ before_or_equal: "The :attribute must be a date before or equal to :date.",
87
+ between: {
88
+ number: "The :attribute must be between :min and :max.",
89
+ string: "The :attribute must be between :min and :max characters.",
90
+ array: "The :attribute must have between :min and :max items.",
91
+ object: "The :attribute must have between :min and :max items."
92
+ },
93
+ boolean: "The :attribute field must be true or false.",
94
+ confirmed: "The :attribute confirmation does not match.",
95
+ date: "The :attribute is not a valid date.",
96
+ datetime: "The :attribute must be a valid date matching the format :format.",
97
+ date_equals: "The :attribute must be a date equal to :date.",
98
+ declined: "The :attribute must be declined.",
99
+ declined_if: "The :attribute must be declined when :other is :value.",
100
+ different: "The :attribute and :other must be different.",
101
+ distinct: "The :attribute field has a duplicate value.",
102
+ digits: "The :attribute must be :digits digits.",
103
+ digits_between: "The :attribute must be between :min and :max digits.",
104
+ email: "The :attribute must be a valid email address.",
105
+ ends_with: "The :attribute must end with one of the following: :values.",
106
+ filled: "The :attribute field must have a value.",
107
+ exists: "The selected :attribute is invalid.",
108
+ gt: {
109
+ number: "The :attribute must be greater than :value.",
110
+ string: "The :attribute must be greater than :value characters.",
111
+ array: "The :attribute must have more than :value items.",
112
+ object: "The :attribute must have more than :value items."
113
+ },
114
+ gte: {
115
+ number: "The :attribute must be greater than or equal :value.",
116
+ string: "The :attribute must be greater than or equal :value characters.",
117
+ array: "The :attribute must have :value items or more.",
118
+ object: "The :attribute must have :value items or more."
119
+ },
120
+ hex: "The :attribute must be a valid hexadecimal color.",
121
+ in: "The :attribute must be one of the following :values.",
122
+ includes: "The :attribute must include one of the following values: :values.",
123
+ integer: "The :attribute must be an integer.",
124
+ ip: "The :attribute must be a valid IP address.",
125
+ ipv4: "The :attribute must be a valid IPv4 address.",
126
+ ipv6: "The :attribute must be a valid IPv6 address.",
127
+ json: "The :attribute must be a valid JSON string.",
128
+ lt: {
129
+ number: "The :attribute must be less than :value.",
130
+ string: "The :attribute must be less than :value characters.",
131
+ array: "The :attribute must have less than :value items.",
132
+ object: "The :attribute must have less than :value items."
133
+ },
134
+ lte: {
135
+ number: "The :attribute must be less than or equal :value.",
136
+ string: "The :attribute must be less than or equal :value characters.",
137
+ array: "The :attribute must have :value items or less.",
138
+ object: "The :attribute must have :value items or less."
139
+ },
140
+ max: {
141
+ number: "The :attribute must not be greater than :max.",
142
+ string: "The :attribute must not be greater than :max characters.",
143
+ array: "The :attribute must not have more than :max items.",
144
+ object: "The :attribute must not have more than :max items."
145
+ },
146
+ min: {
147
+ number: "The :attribute must be at least :min.",
148
+ string: "The :attribute must be at least :min characters.",
149
+ array: "The :attribute must have at least :min items.",
150
+ object: "The :attribute must have at least :min items."
151
+ },
152
+ mac_address: "The :attribute must be a valid MAC address.",
153
+ not_in: "The selected :attribute is invalid.",
154
+ not_regex: "The :attribute format is invalid.",
155
+ not_includes: "The :attribute must not include any of the following values: :values.",
156
+ numeric: "The :attribute must be a number.",
157
+ object: "The :attribute must be an object.",
158
+ password: {
159
+ letter: "The :attribute must contain at least one letter.",
160
+ letters: "The :attribute must contain at least :amount letters.",
161
+ lower_case: "The :attribute must contain at least one lowercase letter.",
162
+ lower_cases: "The :attribute must contain at least :amount lowercase letters.",
163
+ number: "The :attribute must contain at least one number.",
164
+ numbers: "The :attribute must contain at least :amount numbers.",
165
+ symbol: "The :attribute must contain at least one symbol.",
166
+ symbols: "The :attribute must contain at least :amount symbols.",
167
+ upper_case: "The :attribute must contain at least one uppercase letter.",
168
+ upper_cases: "The :attribute must contain at least :amount uppercase letters."
169
+ },
170
+ present: "The :attribute field must be present.",
171
+ presentsame: "The :attribute field must be present.",
172
+ prohibited: "The :attribute field is prohibited.",
173
+ prohibited_unless: "The :attribute field is prohibited unless :other is in :values.",
174
+ prohibits: "The :attribute field prohibits :values from being present.",
175
+ regex: "The :attribute format is invalid.",
176
+ required: "The :attribute field is required.",
177
+ required_if: "The :attribute field is required when :other is :value.",
178
+ required_unless: "The :attribute field is required unless :other is in :values.",
179
+ required_with: "The :attribute field is required when :values is present.",
180
+ required_with_all: "The :attribute field is required when :values are present.",
181
+ required_without: "The :attribute field is required when :values is not present.",
182
+ required_without_all: "The :attribute field is required when none of :values are present.",
183
+ starts_with: "The :attribute must start with one of the following: :values.",
184
+ same: "The :attribute and :other must match.",
185
+ size: {
186
+ number: "The :attribute must be :size.",
187
+ string: "The :attribute must be :size characters.",
188
+ array: "The :attribute must contain :size items.",
189
+ object: "The :attribute must contain :size items."
190
+ },
191
+ string: "The :attribute must be a string.",
192
+ timezone: "The :attribute must be a valid timezone.",
193
+ unique: "The :attribute has already been taken.",
194
+ url: "The :attribute must have a valid URL format.",
195
+ multiple_of: "The :attribute must be a multiple of :value."
196
+ },
197
+ ar: {
198
+ accepted: "يجب قبول الحقل :attribute",
199
+ accepted_if: "الحقل :attribute مقبول في حال ما إذا كان :other يساوي :value.",
200
+ after: "يجب على الحقل :attribute أن يكون تاريخا لاحقا للتاريخ :date.",
201
+ after_or_equal: "الحقل :attribute يجب أن يكون تاريخاً لاحقاً أو مطابقاً للتاريخ :date.",
202
+ alpha: "يجب أن لا يحتوي الحقل :attribute سوى على حروف",
203
+ alpha_dash: "يجب أن يحتوي الحقل :attribute على حرف واحد أو رقم واحد على الأقل، بالإضافة إلى شرطات وشرطات سفلية بشكل اختياري",
204
+ alpha_num: "يجب أن يحتوي :attribute على حروف وأرقام فقط",
205
+ array: "يجب أن يكون الحقل :attribute ًمصفوفة",
206
+ before: "يجب على الحقل :attribute أن يكون تاريخا سابقا للتاريخ :date.",
207
+ before_or_equal: "الحقل :attribute يجب أن يكون تاريخا سابقا أو مطابقا للتاريخ :date",
208
+ between: {
209
+ number: "يجب أن تكون قيمة :attribute بين :min و :max.",
210
+ string: "يجب أن يكون عدد حروف النّص :attribute بين :min و :max",
211
+ array: "يجب أن يحتوي :attribute على عدد من العناصر بين :min و :max",
212
+ object: "يجب أن يحتوي :attribute على عدد من العناصر بين :min و :max"
213
+ },
214
+ boolean: "يجب أن تكون قيمة الحقل :attribute إما true أو false",
215
+ confirmed: "حقل التأكيد غير مُطابق للحقل :attribute",
216
+ date: "الحقل :attribute ليس تاريخًا صحيحًا",
217
+ datetime: "الحقل :attribute يجب أن يكون تاريخًا صالحًا يطابق الصيغة :format.",
218
+ date_equals: "لا يساوي الحقل :attribute مع :date.",
219
+ declined: "يجب رفض الحقل :attribute",
220
+ declined_if: "الحقل :attribute مرفوض في حال ما إذا كان :other يساوي :value.",
221
+ different: "يجب أن يكون الحقلان :attribute و :other مُختلفان",
222
+ digits: "يجب أن يحتوي الحقل :attribute على :digits رقمًا/أرقام",
223
+ digits_between: "يجب أن يحتوي الحقل :attribute بين :min و :max رقمًا/أرقام",
224
+ email: "يجب أن يكون :attribute عنوان بريد إلكتروني صحيح البُنية",
225
+ ends_with: "حقل :attribute يجب ان ينتهي بأحد القيم التالية :value.",
226
+ exists: "الحقل :attribute غير موجود",
227
+ gt: {
228
+ number: "حقل :attribute يجب ان يكون اكبر من :value.",
229
+ string: "حقل :attribute يجب ان يكون اكبر من :value حروفٍ/حرفًا.",
230
+ array: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر.",
231
+ object: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر."
232
+ },
233
+ gte: {
234
+ number: "حقل :attribute يجب ان يكون اكبر من او يساوي :value.",
235
+ string: "حقل :attribute يجب ان يكون اكبر من او يساوي :value حروفٍ/حرفًا.",
236
+ array: "حقل :attribute يجب ان يحتوي علي :value عناصر/عنصر او اكثر.",
237
+ object: "حقل :attribute يجب ان يحتوي علي :value عناصر/عنصر او اكثر."
238
+ },
239
+ hex: "الحقل :attribute يجب أن يكون لونًا سداسيًا صالحًا.",
240
+ in: "الحقل :attribute غير صالح",
241
+ includes: "الحقل :attribute يجب أن يحتوي على أحد القيم التالية: :values.",
242
+ integer: "يجب أن يكون الحقل :attribute عددًا صحيحًا",
243
+ json: "يجب أن يكون الحقل :attribute نصا من نوع JSON.",
244
+ lt: {
245
+ number: "حقل :attribute يجب ان يكون اقل من :value.",
246
+ string: "حقل :attribute يجب ان يكون اقل من :value حروفٍ/حرفًا.",
247
+ array: "حقل :attribute يجب ان يحتوي علي اقل من :value عناصر/عنصر.",
248
+ object: "حقل :attribute يجب ان يحتوي علي اقل من :value عناصر/عنصر."
249
+ },
250
+ lte: {
251
+ number: "حقل :attribute يجب ان يكون اقل من او يساوي :value.",
252
+ string: "حقل :attribute يجب ان يكون اقل من او يساوي :value حروفٍ/حرفًا.",
253
+ array: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر.",
254
+ object: "حقل :attribute يجب ان يحتوي علي اكثر من :value عناصر/عنصر."
255
+ },
256
+ max: {
257
+ number: "يجب أن تكون قيمة الحقل :attribute مساوية أو أصغر لـ :max.",
258
+ string: "يجب أن لا يتجاوز طول نص :attribute :max حروفٍ/حرفًا",
259
+ array: "يجب أن لا يحتوي الحقل :attribute على أكثر من :max عناصر/عنصر.",
260
+ object: "يجب أن لا يحتوي الحقل :attribute على أكثر من :max عناصر/عنصر."
261
+ },
262
+ min: {
263
+ number: "يجب أن تكون قيمة الحقل :attribute مساوية أو أكبر لـ :min.",
264
+ string: "يجب أن يكون طول نص :attribute على الأقل :min حروفٍ/حرفًا",
265
+ array: "يجب أن يحتوي الحقل :attribute على الأقل على :min عُنصرًا/عناصر",
266
+ object: "يجب أن يحتوي الحقل :attribute على الأقل على :min عُنصرًا/عناصر"
267
+ },
268
+ not_in: "الحقل :attribute غير صالح",
269
+ not_regex: "الحقل :attribute نوعه غير صالح",
270
+ not_includes: "الحقل :attribute يجب ألا يحتوي على أي من القيم التالية: :values.",
271
+ numeric: "يجب على الحقل :attribute أن يكون رقمًا",
272
+ object: "الحقل :attribute يجب ان يكون من نوع object.",
273
+ password: {
274
+ letter: "يجب ان يشمل حقل :attribute على حرف واحد على الاقل.",
275
+ letters: "يجب ان يشمل حقل :attribute على عدد :amount حروف على الاقل.",
276
+ lower_case: "يجب ان يشمل حقل :attribute على حرف واحد من صيغة صغيرة على الاقل.",
277
+ lower_cases: "يجب ان يشمل حقل :attribute على عدد :amount حروف صغيرة على الاقل.",
278
+ number: "يجب ان يشمل حقل :attribute على رقم واحد على الاقل.",
279
+ numbers: "يجب ان يشمل حقل :attribute على عدد :amount من الارقام على الاقل.",
280
+ symbol: "يجب ان يشمل حقل :attribute على رمز واحد على الاقل.",
281
+ symbols: "يجب ان يشمل حقل :attribute على عدد :amount رموز على الاقل.",
282
+ upper_case: "يجب ان يشمل حقل :attribute على حرف كبير واحد على الاقل.",
283
+ upper_cases: "يجب ان يشمل حقل :attribute على عدد :amount حروف كبيرة على الاقل."
284
+ },
285
+ present: "يجب تقديم الحقل :attribute",
286
+ regex: "صيغة الحقل :attribute .غير صحيحة",
287
+ required: "الحقل :attribute مطلوب.",
288
+ required_if: "الحقل :attribute مطلوب في حال ما إذا كان :other يساوي :value.",
289
+ required_unless: "الحقل :attribute مطلوب في حال ما لم يكن :other يساوي :values.",
290
+ required_with: "الحقل :attribute اجباري إذا توفّر :values.",
291
+ required_with_all: "الحقل :attribute اجباري إذا توفّر :values.",
292
+ required_without: "الحقل :attribute اجباري إذا لم يتوفّر :values.",
293
+ required_without_all: "الحقل :attribute اجباري إذا لم يتوفّر :values.",
294
+ starts_with: "الحقل :attribute يجب ان يبدأ بأحد القيم التالية: :values.",
295
+ same: "يجب أن يتطابق الحقل :attribute مع :other",
296
+ size: {
297
+ number: "يجب أن تكون قيمة الحقل :attribute مساوية لـ :size",
298
+ string: "يجب أن يحتوي النص :attribute على :size حروفٍ/حرفًا بالظبط",
299
+ array: "يجب أن يحتوي الحقل :attribute على :size عنصرٍ/عناصر بالظبط",
300
+ object: "يجب أن يحتوي الحقل :attribute على :size عنصرٍ/عناصر بالظبط"
301
+ },
302
+ string: "يجب أن يكون الحقل :attribute نصآ.",
303
+ unique: "الحقل :attribute مستخدم بالفعل.",
304
+ url: "صيغة الرابط :attribute غير صحيحة"
305
+ }
322
306
  };
323
-
324
307
  //#endregion
325
308
  //#region src/utilities/helpers.ts
326
309
  /**
@@ -375,7 +358,6 @@ function deepFindMessage(obj, path) {
375
358
  }
376
359
  return obj;
377
360
  }
378
-
379
361
  //#endregion
380
362
  //#region src/Lang.ts
381
363
  var Lang = class {
@@ -489,7 +471,6 @@ var Lang = class {
489
471
  this.fallbackMessages = locales_default.en;
490
472
  }
491
473
  };
492
-
493
474
  //#endregion
494
475
  //#region src/Rules/IRuleContract.ts
495
476
  var IRuleContract = class {
@@ -541,7 +522,6 @@ var IRuleContract = class {
541
522
  return message;
542
523
  }
543
524
  };
544
-
545
525
  //#endregion
546
526
  //#region src/utilities/date.ts
547
527
  /**
@@ -551,10 +531,12 @@ function toDate(value) {
551
531
  const date = Date.parse(value);
552
532
  return !isNaN(date) ? new Date(date) : null;
553
533
  }
554
-
555
534
  //#endregion
556
535
  //#region src/validators/replaceAttributes.ts
557
536
  const replaceAttributes = {
537
+ /**
538
+ * Replace all place-holders for the accepted_if rule.
539
+ */
558
540
  replaceAcceptedIf: function({ data, message, parameters, getDisplayableAttribute }) {
559
541
  const [other] = parameters;
560
542
  const result = deepFind(data, other);
@@ -564,19 +546,34 @@ const replaceAttributes = {
564
546
  };
565
547
  return message.replace(/:other|:value/gi, (matched) => values[matched]);
566
548
  },
549
+ /**
550
+ * Replace all place-holders for the after rule.
551
+ */
567
552
  replaceAfter: function(payload) {
568
553
  return this.replaceBefore(payload);
569
554
  },
555
+ /**
556
+ * Replace all place-holders for the after_or_equal rule.
557
+ */
570
558
  replaceAfterOrEqual: function(payload) {
571
559
  return this.replaceBefore(payload);
572
560
  },
561
+ /**
562
+ * Replace all place-holders for the before rule.
563
+ */
573
564
  replaceBefore: function({ message, parameters, getDisplayableAttribute }) {
574
565
  if (!toDate(parameters[0])) return message.replace(":date", getDisplayableAttribute(parameters[0]));
575
566
  return message.replace(":date", parameters[0]);
576
567
  },
568
+ /**
569
+ * Replace all place-holders for the before_or_equal rule.
570
+ */
577
571
  replaceBeforeOrEqual: function(payload) {
578
572
  return this.replaceBefore(payload);
579
573
  },
574
+ /**
575
+ * Replace all the place-holders for the between rule.
576
+ */
580
577
  replaceBetween: function({ message, parameters }) {
581
578
  const values = {
582
579
  ":min": parameters[0],
@@ -584,12 +581,21 @@ const replaceAttributes = {
584
581
  };
585
582
  return message.replace(/:min|:max/gi, (matched) => values[matched]);
586
583
  },
584
+ /**
585
+ * Replace all place-holders for the before_or_equal rule.
586
+ */
587
587
  replaceDateEquals: function(payload) {
588
588
  return this.replaceBefore(payload);
589
589
  },
590
+ /**
591
+ * Replace all place-holders for the datetime rule.
592
+ */
590
593
  replaceDatetime: function({ message, parameters }) {
591
594
  return message.replace(":format", parameters[0]);
592
595
  },
596
+ /**
597
+ * Replace all place-holders for the declined_if rule.
598
+ */
593
599
  replaceDeclinedIf: function({ message, parameters, data, getDisplayableAttribute }) {
594
600
  const [other] = parameters;
595
601
  const result = deepFind(data, other);
@@ -599,66 +605,126 @@ const replaceAttributes = {
599
605
  };
600
606
  return message.replace(/:other|:value/gi, (matched) => values[matched]);
601
607
  },
608
+ /**
609
+ * Replace all place-holders for the different rule.
610
+ */
602
611
  replaceDifferent: function(payload) {
603
612
  return this.replaceSame(payload);
604
613
  },
614
+ /**
615
+ * Replace all place-holders for the digits rule.
616
+ */
605
617
  replaceDigits: function({ message, parameters }) {
606
618
  return message.replace(":digits", parameters[0]);
607
619
  },
620
+ /**
621
+ * Replace all place-holders for the digits (between) rule.
622
+ */
608
623
  replaceDigitsBetween: function(payload) {
609
624
  return this.replaceBetween(payload);
610
625
  },
626
+ /**
627
+ * Replace all place-holders for the ends_with rule.
628
+ */
611
629
  replaceEndsWith: function({ message, parameters }) {
612
630
  return message.replace(":values", parameters.join(", "));
613
631
  },
632
+ /**
633
+ * Replace all place-holders for the exists rule.
634
+ */
614
635
  replaceExists: function({ message, parameters, data }) {
615
636
  return message.replace(":value", data[parameters[1]]);
616
637
  },
638
+ /**
639
+ * Replace all place-holders for the in rule.
640
+ */
617
641
  replaceIn: function({ message, parameters }) {
618
642
  return message.replace(":values", parameters.join(", "));
619
643
  },
644
+ /**
645
+ * Replace all place-holders for the not_includes rule.
646
+ */
620
647
  replaceIncludes: function({ message, parameters }) {
621
648
  return message.replace(":values", parameters.join(", "));
622
649
  },
650
+ /**
651
+ * Replace all place-holders for the starts_with rule.
652
+ */
623
653
  replaceStartsWith: function({ message, parameters }) {
624
654
  return message.replace(":values", parameters.join(", "));
625
655
  },
656
+ /**
657
+ * Replace all place-holders for the min rule.
658
+ */
626
659
  replaceMin: function({ message, parameters }) {
627
660
  return message.replace(":min", parameters[0]);
628
661
  },
662
+ /**
663
+ * Replace all place-holders for the max rule.
664
+ */
629
665
  replaceMax: function({ message, parameters }) {
630
666
  return message.replace(":max", parameters[0]);
631
667
  },
668
+ /**
669
+ * Replace all place-holders for the not_includes rule.
670
+ */
632
671
  replaceNotIncludes: function({ message, parameters }) {
633
672
  return message.replace(":values", parameters.join(", "));
634
673
  },
674
+ /**
675
+ * Replace all place-holders for the required_with rule.
676
+ */
635
677
  replaceRequiredWith: function({ message, parameters, getDisplayableAttribute }) {
636
678
  return message.replace(":values", parameters.map((attribute) => getDisplayableAttribute(attribute)).join(", "));
637
679
  },
680
+ /**
681
+ * Replace all place-holders for the required_with_all rule.
682
+ */
638
683
  replaceRequiredWithAll: function(payload) {
639
684
  return this.replaceRequiredWith(payload);
640
685
  },
686
+ /**
687
+ * Replace all place-holders for the required_without rule.
688
+ */
641
689
  replaceRequiredWithout: function(payload) {
642
690
  return this.replaceRequiredWith(payload);
643
691
  },
692
+ /**
693
+ * Replace all place-holders for the required_without_all rule.
694
+ */
644
695
  replaceRequiredWithoutAll: function(payload) {
645
696
  return this.replaceRequiredWith(payload);
646
697
  },
698
+ /**
699
+ * Replace all place-holders for the gt rule.
700
+ */
647
701
  replaceGt: function({ message, parameters, data, hasNumericRule }) {
648
702
  const [value] = parameters;
649
703
  const result = deepFind(data, value);
650
704
  if (typeof result === "undefined") return message.replace(":value", value);
651
705
  return message.replace(":value", getSize(result, hasNumericRule).toString());
652
706
  },
707
+ /**
708
+ * Replace all place-holders for the lt rule.
709
+ */
653
710
  replaceLt: function(payload) {
654
711
  return this.replaceGt(payload);
655
712
  },
713
+ /**
714
+ * Replace all place-holders for the gte rule.
715
+ */
656
716
  replaceGte: function(payload) {
657
717
  return this.replaceGt(payload);
658
718
  },
719
+ /**
720
+ * Replace all place-holders for the lte rule.
721
+ */
659
722
  replaceLte: function(payload) {
660
723
  return this.replaceGt(payload);
661
724
  },
725
+ /**
726
+ * Replace all place-holders for the required_if rule.
727
+ */
662
728
  replaceRequiredIf: function({ message, parameters, data, getDisplayableAttribute }) {
663
729
  const [other] = parameters;
664
730
  const result = deepFind(data, other);
@@ -668,12 +734,21 @@ const replaceAttributes = {
668
734
  };
669
735
  return message.replace(/:other|:value/gi, (matched) => values[matched]);
670
736
  },
737
+ /**
738
+ * Replace all place-holders for the prohibited_unless rule.
739
+ */
671
740
  replaceProhibitedUnless: function(payload) {
672
741
  return this.replaceRequiredUnless(payload);
673
742
  },
743
+ /**
744
+ * Replace all place-holders for the prohibits rule.
745
+ */
674
746
  replaceProhibits: function({ message, parameters, getDisplayableAttribute }) {
675
747
  return message.replace(":values", parameters.map((attribute) => getDisplayableAttribute(attribute)).join(", "));
676
748
  },
749
+ /**
750
+ * Replace all the place-holders for the required_unless rule.
751
+ */
677
752
  replaceRequiredUnless: function({ message, parameters, getDisplayableAttribute }) {
678
753
  const [other] = parameters;
679
754
  const values = {
@@ -682,23 +757,41 @@ const replaceAttributes = {
682
757
  };
683
758
  return message.replace(/:other|:values/gi, (matched) => values[matched]);
684
759
  },
760
+ /**
761
+ * Replace all place-holders for the same rule.
762
+ */
685
763
  replaceSame: function({ message, parameters, getDisplayableAttribute }) {
686
764
  return message.replace(":other", getDisplayableAttribute(parameters[0]));
687
765
  },
766
+ /**
767
+ * Replace all place-holders for the size rule.
768
+ */
688
769
  replaceSize: function({ message, parameters }) {
689
770
  return message.replace(":size", parameters[0]);
690
771
  },
772
+ /**
773
+ * Replace all place-holders for the multiple_of rule.
774
+ */
691
775
  replaceMultipleOf: function({ message, parameters }) {
692
776
  return message.replace(":value", parameters[0]);
693
777
  },
778
+ /**
779
+ * Replace all place-holders for the unique rule.
780
+ */
694
781
  replaceUnique: function({ message, parameters, data }) {
695
782
  return message.replace(":value", data[parameters[1]]);
696
783
  }
697
784
  };
698
-
699
785
  //#endregion
700
786
  //#region src/validators/validationData.ts
701
787
  const validationData = {
788
+ /**
789
+ * initialize and gather data for the given attribute.
790
+ *
791
+ * @param attribute
792
+ * @param masterData
793
+ * @returns
794
+ */
702
795
  initializeAndGatherData: function(attribute, masterData) {
703
796
  const data = dotify(this.initializeAttributeOnData(attribute, masterData));
704
797
  return {
@@ -706,6 +799,13 @@ const validationData = {
706
799
  ...this.extractValuesFromWildCards(masterData, data, attribute)
707
800
  };
708
801
  },
802
+ /**
803
+ * Gather a copy of the attribute data filled with any missing attributes.
804
+ *
805
+ * @param attribute
806
+ * @param masterData
807
+ * @returns
808
+ */
709
809
  initializeAttributeOnData: function(attribute, masterData) {
710
810
  const explicitPath = this.getLeadingExplicitAttributePath(attribute);
711
811
  const data = this.extractDataFromPath(explicitPath, JSON.parse(JSON.stringify(masterData)));
@@ -713,6 +813,14 @@ const validationData = {
713
813
  deepSet(data, attribute, null);
714
814
  return data;
715
815
  },
816
+ /**
817
+ * Get all of the exact attribute values for a given wildcard attribute.
818
+ *
819
+ * @param masterData
820
+ * @param data
821
+ * @param attribute
822
+ * @returns
823
+ */
716
824
  extractValuesFromWildCards(masterData, data, attribute) {
717
825
  const keys = [];
718
826
  const pattern = new RegExp("^" + attribute.replace(/\*/g, "[^\\.]*"));
@@ -725,9 +833,22 @@ const validationData = {
725
833
  keys.forEach((key) => data[key] = deepFind(masterData, key));
726
834
  return data;
727
835
  },
836
+ /**
837
+ * Get the explicit part of the attribute name - ex: 'foo.bar.*.baz' -> 'foo.bar'
838
+ *
839
+ * @param attribute
840
+ * @returns
841
+ */
728
842
  getLeadingExplicitAttributePath: function(attribute) {
729
843
  return attribute.split("*")[0].replace(/\.$/, "");
730
844
  },
845
+ /**
846
+ * Extract data based on the given dot-notated path.
847
+ *
848
+ * @param path
849
+ * @param masterData
850
+ * @returns
851
+ */
731
852
  extractDataFromPath(path, masterData) {
732
853
  const results = {};
733
854
  const value = deepFind(masterData, path);
@@ -735,7 +856,6 @@ const validationData = {
735
856
  return results;
736
857
  }
737
858
  };
738
-
739
859
  //#endregion
740
860
  //#region src/Rules/closureValidationRule.ts
741
861
  var ClosureValidationRule = class extends IRuleContract {
@@ -764,10 +884,16 @@ var ClosureValidationRule = class extends IRuleContract {
764
884
  return !this.failed;
765
885
  }
766
886
  };
767
-
768
887
  //#endregion
769
888
  //#region src/validators/validationRuleParser.ts
770
889
  const validationRuleParser = {
890
+ /**
891
+ * Convert rules to array
892
+ *
893
+ * @param rules
894
+ * @param data
895
+ * @returns
896
+ */
771
897
  explodeRules: function(rules, data = {}) {
772
898
  const implicitAttributes = {};
773
899
  for (const key in rules) if (key.indexOf("*") !== -1) {
@@ -780,6 +906,15 @@ const validationRuleParser = {
780
906
  implicitAttributes
781
907
  };
782
908
  },
909
+ /**
910
+ * Define a set of rules that apply to each element in an array attribute.
911
+ *
912
+ * @param results
913
+ * @param attribute
914
+ * @param masterData
915
+ * @param implicitAttributes
916
+ * @returns
917
+ */
783
918
  explodeWildCardRules: function(results, attribute, masterData, implicitAttributes) {
784
919
  const pattern = new RegExp("^" + attribute.replace(/\*/g, "[^.]*") + "$");
785
920
  const data = validationData.initializeAndGatherData(attribute, masterData);
@@ -791,25 +926,45 @@ const validationRuleParser = {
791
926
  }
792
927
  return results;
793
928
  },
929
+ /**
930
+ * Merge additional rules into a given attribute.
931
+ *
932
+ * @param results
933
+ * @param attribute
934
+ * @param rules
935
+ * @returns
936
+ */
794
937
  mergeRulesForAttribute(results, attribute, rules) {
795
938
  const merge = this.explodeRules([rules]).rules[0];
796
939
  results[attribute] = [...results[attribute] ? this.explodeExplicitRules(results[attribute]) : [], ...merge];
797
940
  return results;
798
941
  },
942
+ /**
943
+ * In case the rules specified by the user are a string seperated with '|' - convert them to an array
944
+ */
799
945
  explodeExplicitRules: function(rules) {
800
946
  if (typeof rules === "string") return rules.split("|");
801
947
  if (!Array.isArray(rules)) return [this.prepareRule(rules)];
802
948
  return rules.map((rule) => this.prepareRule(rule));
803
949
  },
950
+ /**
951
+ * Prepare the given rule for the Validator.
952
+ */
804
953
  prepareRule(rule) {
805
954
  if (rule instanceof IRuleContract) return rule;
806
955
  if (typeof rule === "function") return new ClosureValidationRule(rule);
807
956
  return rule.toString();
808
957
  },
958
+ /**
959
+ * Extract the rule name and parameters from a rule.
960
+ */
809
961
  parse(rule) {
810
962
  if (rule instanceof IRuleContract) return [rule, []];
811
963
  return this.parseStringRule(rule);
812
964
  },
965
+ /**
966
+ * Parse the parameters associated with a rule
967
+ */
813
968
  parseStringRule: function(rule) {
814
969
  let parameters = [];
815
970
  let parameter;
@@ -819,6 +974,14 @@ const validationRuleParser = {
819
974
  }
820
975
  return [rule, parameters];
821
976
  },
977
+ /**
978
+ * Get a rule and its parameters for a given attribute.
979
+ *
980
+ * @param attribute
981
+ * @param searchRules
982
+ * @param availableRules
983
+ * @returns
984
+ */
822
985
  getRule: function(attribute, searchRules, availableRules) {
823
986
  if (!availableRules[attribute]) return [];
824
987
  searchRules = Array.isArray(searchRules) ? searchRules : [searchRules];
@@ -828,11 +991,13 @@ const validationRuleParser = {
828
991
  }
829
992
  return [];
830
993
  },
994
+ /**
995
+ * Determine if the given attribute has a rule in the given set of available rules.
996
+ */
831
997
  hasRule: function(attribute, searchRules, availableRules) {
832
998
  return this.getRule(attribute, searchRules, availableRules).length > 0;
833
999
  }
834
1000
  };
835
-
836
1001
  //#endregion
837
1002
  //#region src/validators/validateAttributes.ts
838
1003
  var validateAttributes = class {
@@ -1436,7 +1601,7 @@ var validateAttributes = class {
1436
1601
  */
1437
1602
  validateUrl(value) {
1438
1603
  if (typeof value !== "string") return false;
1439
- return new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|localhost|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", "i").test(value);
1604
+ return (/* @__PURE__ */ new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|localhost|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", "i")).test(value);
1440
1605
  }
1441
1606
  /**
1442
1607
  * Determine if a comparison passes between the given values.
@@ -1519,7 +1684,6 @@ var validateAttributes = class {
1519
1684
  return stringValue.split(".")[1]?.length ?? 0;
1520
1685
  }
1521
1686
  };
1522
-
1523
1687
  //#endregion
1524
1688
  //#region src/Rules/registerRule.ts
1525
1689
  function register(rule, validate, replaceMessage) {
@@ -1532,7 +1696,6 @@ function register(rule, validate, replaceMessage) {
1532
1696
  function registerImplicit(rule, validate, replaceMessage) {
1533
1697
  if (register(rule, validate, replaceMessage) === true) addImplicitRule(rule);
1534
1698
  }
1535
-
1536
1699
  //#endregion
1537
1700
  //#region src/Plugin.ts
1538
1701
  const valueInspectors = [];
@@ -1576,7 +1739,6 @@ function getValidationSize(value, hasNumericRule = false) {
1576
1739
  if (typeof value === "object" && value !== null) return Object.keys(value).length;
1577
1740
  return -1;
1578
1741
  }
1579
-
1580
1742
  //#endregion
1581
1743
  //#region src/utilities/general.ts
1582
1744
  const implicitRues = [
@@ -1710,7 +1872,6 @@ function convertValuesToNull(values) {
1710
1872
  return value;
1711
1873
  });
1712
1874
  }
1713
-
1714
1875
  //#endregion
1715
1876
  //#region src/utilities/object.ts
1716
1877
  /**
@@ -1787,7 +1948,6 @@ function deepEqual(firstParam, secondParam) {
1787
1948
  if (Object.keys(first).length !== Object.keys(second).length) return false;
1788
1949
  return Object.entries(first).every(([key, value]) => second[key] === value);
1789
1950
  }
1790
-
1791
1951
  //#endregion
1792
1952
  //#region src/utilities/formatMessages.ts
1793
1953
  /**
@@ -1873,7 +2033,6 @@ function getPrimaryKeyFromPath(path) {
1873
2033
  if (isNaN(parseInt(key)) === false) return getPrimaryKeyFromPath(splittedPath.join("."));
1874
2034
  return key;
1875
2035
  }
1876
-
1877
2036
  //#endregion
1878
2037
  //#region src/validators/errorBag.ts
1879
2038
  var ErrorBag = class ErrorBag {
@@ -1982,7 +2141,6 @@ var ErrorBag = class ErrorBag {
1982
2141
  return new ErrorBag({ ...this.errors }, { ...this.messages }, this.firstMessage, this.withErrorTypes);
1983
2142
  }
1984
2143
  };
1985
-
1986
2144
  //#endregion
1987
2145
  //#region src/Rules/password.ts
1988
2146
  var Password$1 = class Password$1 extends IRuleContract {
@@ -2173,14 +2331,12 @@ var Password$1 = class Password$1 extends IRuleContract {
2173
2331
  return password instanceof IRuleContract ? password : Password$1.create().min(8);
2174
2332
  }
2175
2333
  };
2176
-
2177
2334
  //#endregion
2178
2335
  //#region src/utilities/build.ts
2179
2336
  function buildValidationMethodName(rule) {
2180
2337
  if (!rule) return rule;
2181
2338
  return rule.split("_").map((rule) => `${rule[0].toUpperCase()}${rule.slice(1)}`).join("");
2182
2339
  }
2183
-
2184
2340
  //#endregion
2185
2341
  //#region src/payloads/replaceAttributePayload.ts
2186
2342
  var replaceAttributePayload = class {
@@ -2212,7 +2368,6 @@ var replaceAttributePayload = class {
2212
2368
  this.getDisplayableAttribute = getDisplayableAttribute;
2213
2369
  }
2214
2370
  };
2215
-
2216
2371
  //#endregion
2217
2372
  //#region src/BaseValidator.ts
2218
2373
  var BaseValidator = class BaseValidator {
@@ -2689,11 +2844,9 @@ var BaseValidator = class BaseValidator {
2689
2844
  return [];
2690
2845
  }
2691
2846
  };
2692
-
2693
2847
  //#endregion
2694
2848
  //#region src/Contracts/IDatabaseDriver.ts
2695
2849
  var IDatabaseDriver = class {};
2696
-
2697
2850
  //#endregion
2698
2851
  //#region src/Rules/in.ts
2699
2852
  var In = class extends BaseRule {
@@ -2719,7 +2872,6 @@ var In = class extends BaseRule {
2719
2872
  return `${this.rule}:${this.values.join(",")}`;
2720
2873
  }
2721
2874
  };
2722
-
2723
2875
  //#endregion
2724
2876
  //#region src/Rules/notIn.ts
2725
2877
  var NotIn = class extends BaseRule {
@@ -2745,7 +2897,6 @@ var NotIn = class extends BaseRule {
2745
2897
  return `${this.rule}:${this.values.join(",")}`;
2746
2898
  }
2747
2899
  };
2748
-
2749
2900
  //#endregion
2750
2901
  //#region src/Rules/regex.ts
2751
2902
  var Regex = class extends IRuleContract {
@@ -2771,7 +2922,6 @@ var Regex = class extends IRuleContract {
2771
2922
  return this.trans("not_regex");
2772
2923
  }
2773
2924
  };
2774
-
2775
2925
  //#endregion
2776
2926
  //#region src/Rules/requiredIf.ts
2777
2927
  var RequiredIf = class extends BaseRule {
@@ -2794,7 +2944,6 @@ var RequiredIf = class extends BaseRule {
2794
2944
  return this.condition ? "required" : "";
2795
2945
  }
2796
2946
  };
2797
-
2798
2947
  //#endregion
2799
2948
  //#region src/rule.ts
2800
2949
  function requiredIf(callback) {
@@ -2812,32 +2961,29 @@ function regex(value) {
2812
2961
  function notRegex(value) {
2813
2962
  return new Regex(value, false);
2814
2963
  }
2815
-
2816
2964
  //#endregion
2817
2965
  //#region src/Core.ts
2818
2966
  var Password = class extends Password$1 {};
2819
2967
  function make(data = {}, rules = {}, customMessages = {}, customAttributes = {}) {
2820
2968
  return new BaseValidator(data, rules, customMessages, customAttributes);
2821
2969
  }
2822
-
2823
2970
  //#endregion
2824
2971
  //#region src/Rules/IImplicitRule.ts
2825
2972
  var IImplicitRule = class extends IRuleContract {
2826
2973
  __isImplicitRule = true;
2827
2974
  };
2828
-
2829
2975
  //#endregion
2830
2976
  //#region src/ImplicitRule.ts
2831
2977
  var ImplicitRule = class extends IImplicitRule {
2832
2978
  rules = [];
2833
2979
  };
2834
-
2835
2980
  //#endregion
2836
2981
  //#region src/Providers/ValidationServiceProvider.ts
2837
2982
  /**
2838
2983
  * Service provider for Validation utilities
2839
2984
  */
2840
2985
  var ValidationServiceProvider = class {
2986
+ app;
2841
2987
  registeredCommands;
2842
2988
  static priority = 895;
2843
2989
  constructor(app) {
@@ -2852,7 +2998,6 @@ var ValidationServiceProvider = class {
2852
2998
  */
2853
2999
  boot() {}
2854
3000
  };
2855
-
2856
3001
  //#endregion
2857
3002
  //#region src/ValidationRule.ts
2858
3003
  var ValidationRule = class extends IRuleContract {
@@ -2873,7 +3018,6 @@ var ValidationRule = class extends IRuleContract {
2873
3018
  return this.passing;
2874
3019
  }
2875
3020
  };
2876
-
2877
3021
  //#endregion
2878
3022
  //#region src/Rules/ExtendedRules.ts
2879
3023
  dayjs.default.extend(dayjs_plugin_customParseFormat_js.default);
@@ -2983,7 +3127,6 @@ var ExtendedRules = class extends ValidationRule {
2983
3127
  ];
2984
3128
  validate() {}
2985
3129
  };
2986
-
2987
3130
  //#endregion
2988
3131
  //#region src/utilities/MessageBag.ts
2989
3132
  var MessageBag = class {
@@ -3197,7 +3340,6 @@ var MessageBag = class {
3197
3340
  return this.toJson();
3198
3341
  }
3199
3342
  };
3200
-
3201
3343
  //#endregion
3202
3344
  //#region src/Validator.ts
3203
3345
  var Validator = class Validator {
@@ -3480,7 +3622,6 @@ var Validator = class Validator {
3480
3622
  return this;
3481
3623
  }
3482
3624
  };
3483
-
3484
3625
  //#endregion
3485
3626
  //#region src/ValidationException.ts
3486
3627
  var ValidationException = class ValidationException extends Error {
@@ -3568,7 +3709,6 @@ var ValidationException = class ValidationException extends Error {
3568
3709
  return this.response;
3569
3710
  }
3570
3711
  };
3571
-
3572
3712
  //#endregion
3573
3713
  exports.BaseRule = BaseRule;
3574
3714
  exports.BaseValidator = BaseValidator;
@@ -3627,4 +3767,4 @@ exports.sameType = sameType;
3627
3767
  exports.toDate = toDate;
3628
3768
  exports.toSnakeCase = toSnakeCase;
3629
3769
  exports.usePlugin = usePlugin;
3630
- exports.useValidatorContext = useValidatorContext;
3770
+ exports.useValidatorContext = useValidatorContext;