@arikajs/validation 0.0.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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +271 -0
  3. package/dist/ErrorBag.d.ts +28 -0
  4. package/dist/ErrorBag.d.ts.map +1 -0
  5. package/dist/ErrorBag.js +49 -0
  6. package/dist/ErrorBag.js.map +1 -0
  7. package/dist/Rule.d.ts +11 -0
  8. package/dist/Rule.d.ts.map +1 -0
  9. package/dist/Rule.js +3 -0
  10. package/dist/Rule.js.map +1 -0
  11. package/dist/Rules/Email.d.ts +6 -0
  12. package/dist/Rules/Email.d.ts.map +1 -0
  13. package/dist/Rules/Email.js +18 -0
  14. package/dist/Rules/Email.js.map +1 -0
  15. package/dist/Rules/Max.d.ts +8 -0
  16. package/dist/Rules/Max.d.ts.map +1 -0
  17. package/dist/Rules/Max.js +24 -0
  18. package/dist/Rules/Max.js.map +1 -0
  19. package/dist/Rules/Min.d.ts +8 -0
  20. package/dist/Rules/Min.d.ts.map +1 -0
  21. package/dist/Rules/Min.js +24 -0
  22. package/dist/Rules/Min.js.map +1 -0
  23. package/dist/Rules/Number.d.ts +6 -0
  24. package/dist/Rules/Number.d.ts.map +1 -0
  25. package/dist/Rules/Number.js +15 -0
  26. package/dist/Rules/Number.js.map +1 -0
  27. package/dist/Rules/Required.d.ts +6 -0
  28. package/dist/Rules/Required.d.ts.map +1 -0
  29. package/dist/Rules/Required.js +22 -0
  30. package/dist/Rules/Required.js.map +1 -0
  31. package/dist/Rules/RequiredIf.d.ts +11 -0
  32. package/dist/Rules/RequiredIf.d.ts.map +1 -0
  33. package/dist/Rules/RequiredIf.js +25 -0
  34. package/dist/Rules/RequiredIf.js.map +1 -0
  35. package/dist/Rules/String.d.ts +6 -0
  36. package/dist/Rules/String.d.ts.map +1 -0
  37. package/dist/Rules/String.js +15 -0
  38. package/dist/Rules/String.js.map +1 -0
  39. package/dist/ValidationError.d.ts +5 -0
  40. package/dist/ValidationError.d.ts.map +1 -0
  41. package/dist/ValidationError.js +12 -0
  42. package/dist/ValidationError.js.map +1 -0
  43. package/dist/Validator.d.ts +31 -0
  44. package/dist/Validator.d.ts.map +1 -0
  45. package/dist/Validator.js +193 -0
  46. package/dist/Validator.js.map +1 -0
  47. package/dist/index.d.ts +11 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +27 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/src/ErrorBag.d.ts +28 -0
  52. package/dist/src/ErrorBag.d.ts.map +1 -0
  53. package/dist/src/ErrorBag.js +49 -0
  54. package/dist/src/ErrorBag.js.map +1 -0
  55. package/dist/src/Rule.d.ts +11 -0
  56. package/dist/src/Rule.d.ts.map +1 -0
  57. package/dist/src/Rule.js +3 -0
  58. package/dist/src/Rule.js.map +1 -0
  59. package/dist/src/Rules/Email.d.ts +6 -0
  60. package/dist/src/Rules/Email.d.ts.map +1 -0
  61. package/dist/src/Rules/Email.js +18 -0
  62. package/dist/src/Rules/Email.js.map +1 -0
  63. package/dist/src/Rules/Max.d.ts +8 -0
  64. package/dist/src/Rules/Max.d.ts.map +1 -0
  65. package/dist/src/Rules/Max.js +24 -0
  66. package/dist/src/Rules/Max.js.map +1 -0
  67. package/dist/src/Rules/Min.d.ts +8 -0
  68. package/dist/src/Rules/Min.d.ts.map +1 -0
  69. package/dist/src/Rules/Min.js +24 -0
  70. package/dist/src/Rules/Min.js.map +1 -0
  71. package/dist/src/Rules/Number.d.ts +6 -0
  72. package/dist/src/Rules/Number.d.ts.map +1 -0
  73. package/dist/src/Rules/Number.js +15 -0
  74. package/dist/src/Rules/Number.js.map +1 -0
  75. package/dist/src/Rules/Required.d.ts +6 -0
  76. package/dist/src/Rules/Required.d.ts.map +1 -0
  77. package/dist/src/Rules/Required.js +22 -0
  78. package/dist/src/Rules/Required.js.map +1 -0
  79. package/dist/src/Rules/RequiredIf.d.ts +11 -0
  80. package/dist/src/Rules/RequiredIf.d.ts.map +1 -0
  81. package/dist/src/Rules/RequiredIf.js +25 -0
  82. package/dist/src/Rules/RequiredIf.js.map +1 -0
  83. package/dist/src/Rules/String.d.ts +6 -0
  84. package/dist/src/Rules/String.d.ts.map +1 -0
  85. package/dist/src/Rules/String.js +15 -0
  86. package/dist/src/Rules/String.js.map +1 -0
  87. package/dist/src/ValidationError.d.ts +5 -0
  88. package/dist/src/ValidationError.d.ts.map +1 -0
  89. package/dist/src/ValidationError.js +12 -0
  90. package/dist/src/ValidationError.js.map +1 -0
  91. package/dist/src/Validator.d.ts +31 -0
  92. package/dist/src/Validator.d.ts.map +1 -0
  93. package/dist/src/Validator.js +193 -0
  94. package/dist/src/Validator.js.map +1 -0
  95. package/dist/src/index.d.ts +11 -0
  96. package/dist/src/index.d.ts.map +1 -0
  97. package/dist/src/index.js +27 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/tests/AdvancedValidation.test.d.ts +2 -0
  100. package/dist/tests/AdvancedValidation.test.d.ts.map +1 -0
  101. package/dist/tests/AdvancedValidation.test.js +97 -0
  102. package/dist/tests/AdvancedValidation.test.js.map +1 -0
  103. package/dist/tests/Validator.test.d.ts +2 -0
  104. package/dist/tests/Validator.test.d.ts.map +1 -0
  105. package/dist/tests/Validator.test.js +133 -0
  106. package/dist/tests/Validator.test.js.map +1 -0
  107. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"String.js","sourceRoot":"","sources":["../../src/Rules/String.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IACjB,QAAQ,CAAC,KAAU;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACrC,CAAC;IAED,OAAO;QACH,OAAO,kCAAkC,CAAC;IAC9C,CAAC;CACJ;AATD,4BASC"}
@@ -0,0 +1,5 @@
1
+ export declare class ValidationError extends Error {
2
+ errors: Record<string, string[]>;
3
+ constructor(errors: Record<string, string[]>);
4
+ }
5
+ //# sourceMappingURL=ValidationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationError.d.ts","sourceRoot":"","sources":["../src/ValidationError.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAAhC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAItD"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidationError = void 0;
4
+ class ValidationError extends Error {
5
+ constructor(errors) {
6
+ super('The given data was invalid.');
7
+ this.errors = errors;
8
+ this.name = 'ValidationError';
9
+ }
10
+ }
11
+ exports.ValidationError = ValidationError;
12
+ //# sourceMappingURL=ValidationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationError.js","sourceRoot":"","sources":["../src/ValidationError.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAgB,SAAQ,KAAK;IACtC,YAAmB,MAAgC;QAC/C,KAAK,CAAC,6BAA6B,CAAC,CAAC;QADtB,WAAM,GAAN,MAAM,CAA0B;QAE/C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AALD,0CAKC"}
@@ -0,0 +1,31 @@
1
+ import { Rule } from './Rule';
2
+ export declare class Validator {
3
+ private data;
4
+ private initialRules;
5
+ private errorBag;
6
+ private messages;
7
+ private customRules;
8
+ private validatedData;
9
+ constructor(data: Record<string, any>, rules?: Record<string, string | Rule | (string | Rule)[]>, messages?: Record<string, string>);
10
+ /**
11
+ * Determine if the data passes the validation rules.
12
+ */
13
+ validate(): Promise<boolean>;
14
+ private isRequirementRule;
15
+ fails(): Promise<boolean>;
16
+ errors(): Record<string, string[]>;
17
+ validated(): Record<string, any>;
18
+ /**
19
+ * Register a custom validation rule.
20
+ */
21
+ extend(name: string, rule: Rule): void;
22
+ private parseRules;
23
+ private createRuleFromString;
24
+ private getValue;
25
+ private setValidatedValue;
26
+ private isEmpty;
27
+ private formatMessage;
28
+ private expandRules;
29
+ private expandWildcards;
30
+ }
31
+ //# sourceMappingURL=Validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAU9B,qBAAa,SAAS;IAClB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,aAAa,CAA2B;gBAG5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAM,EAC7D,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAczC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAoDzC,OAAO,CAAC,iBAAiB;IAIZ,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAIlC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIvC;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAI7C,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;CAwB1B"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Validator = void 0;
4
+ const ErrorBag_1 = require("./ErrorBag");
5
+ const Required_1 = require("./Rules/Required");
6
+ const Email_1 = require("./Rules/Email");
7
+ const Min_1 = require("./Rules/Min");
8
+ const Max_1 = require("./Rules/Max");
9
+ const String_1 = require("./Rules/String");
10
+ const Number_1 = require("./Rules/Number");
11
+ const RequiredIf_1 = require("./Rules/RequiredIf");
12
+ class Validator {
13
+ constructor(data, rules = {}, messages = {}) {
14
+ this.messages = {};
15
+ this.customRules = new Map();
16
+ this.validatedData = {};
17
+ this.data = data;
18
+ this.initialRules = rules;
19
+ this.messages = messages;
20
+ this.errorBag = new ErrorBag_1.ErrorBag();
21
+ // Register default rules
22
+ this.customRules.set('required', new Required_1.Required());
23
+ this.customRules.set('email', new Email_1.Email());
24
+ this.customRules.set('string', new String_1.IsString());
25
+ this.customRules.set('number', new Number_1.IsNumber());
26
+ }
27
+ /**
28
+ * Determine if the data passes the validation rules.
29
+ */
30
+ async validate() {
31
+ this.errorBag = new ErrorBag_1.ErrorBag();
32
+ this.validatedData = {};
33
+ const expandedRules = this.expandRules(this.initialRules);
34
+ for (const [attribute, rules] of Object.entries(expandedRules)) {
35
+ const ruleSet = this.parseRules(rules);
36
+ const value = this.getValue(attribute);
37
+ const isNullable = ruleSet.some(r => r.name === 'nullable');
38
+ const shouldBail = ruleSet.some(r => r.name === 'bail');
39
+ // Handle nullable
40
+ if (isNullable && (value === null || value === undefined)) {
41
+ this.setValidatedValue(attribute, value);
42
+ continue;
43
+ }
44
+ let failed = false;
45
+ for (const rule of ruleSet) {
46
+ // Skip pseudo-rules
47
+ if (rule.name === 'nullable' || rule.name === 'bail') {
48
+ continue;
49
+ }
50
+ // If value is null/undefined/empty and rule is NOT 'required' (or similar), skip validation
51
+ if (this.isEmpty(value) && !this.isRequirementRule(rule)) {
52
+ continue;
53
+ }
54
+ const passes = await rule.validate(value, attribute);
55
+ if (!passes) {
56
+ const message = this.formatMessage(rule.message(), attribute);
57
+ this.errorBag.add(attribute, message);
58
+ failed = true;
59
+ if (shouldBail) {
60
+ break;
61
+ }
62
+ }
63
+ }
64
+ if (!failed) {
65
+ this.setValidatedValue(attribute, value);
66
+ }
67
+ }
68
+ return this.errorBag.isEmpty();
69
+ }
70
+ isRequirementRule(rule) {
71
+ return rule instanceof Required_1.Required || rule instanceof RequiredIf_1.RequiredIf;
72
+ }
73
+ async fails() {
74
+ return !(await this.validate());
75
+ }
76
+ errors() {
77
+ return this.errorBag.all();
78
+ }
79
+ validated() {
80
+ return this.validatedData;
81
+ }
82
+ /**
83
+ * Register a custom validation rule.
84
+ */
85
+ extend(name, rule) {
86
+ this.customRules.set(name, rule);
87
+ }
88
+ parseRules(rules) {
89
+ let parsed;
90
+ if (typeof rules === 'string') {
91
+ parsed = rules.split('|');
92
+ }
93
+ else if (Array.isArray(rules)) {
94
+ parsed = rules;
95
+ }
96
+ else {
97
+ parsed = [rules];
98
+ }
99
+ return parsed.flatMap(r => {
100
+ if (typeof r === 'string') {
101
+ return r.split('|').map(sub => this.createRuleFromString(sub));
102
+ }
103
+ return r;
104
+ });
105
+ }
106
+ createRuleFromString(ruleString) {
107
+ const [fullRule, ...rest] = ruleString.split(':');
108
+ const name = fullRule.trim();
109
+ const params = rest.length > 0 ? rest.join(':') : '';
110
+ const parameters = params ? params.split(',') : [];
111
+ switch (name) {
112
+ case 'min':
113
+ return new Min_1.Min(Number(parameters[0]));
114
+ case 'max':
115
+ return new Max_1.Max(Number(parameters[0]));
116
+ case 'required_if':
117
+ return new RequiredIf_1.RequiredIf(parameters[0], parameters[1], this.data);
118
+ case 'nullable':
119
+ case 'bail':
120
+ // Return a dummy rule that we'll handle in the main loop
121
+ return {
122
+ name,
123
+ validate: async () => true,
124
+ message: () => ''
125
+ };
126
+ default:
127
+ const rule = this.customRules.get(name);
128
+ if (!rule) {
129
+ throw new Error(`Validation rule '${name}' not found.`);
130
+ }
131
+ return rule;
132
+ }
133
+ }
134
+ getValue(key) {
135
+ return key.split('.').reduce((o, i) => (o ? o[i] : undefined), this.data);
136
+ }
137
+ setValidatedValue(path, value) {
138
+ const keys = path.split('.');
139
+ let current = this.validatedData;
140
+ for (let i = 0; i < keys.length; i++) {
141
+ const key = keys[i];
142
+ if (i === keys.length - 1) {
143
+ current[key] = value;
144
+ }
145
+ else {
146
+ current[key] = current[key] || {};
147
+ current = current[key];
148
+ }
149
+ }
150
+ }
151
+ isEmpty(value) {
152
+ return value === null || value === undefined || value === '';
153
+ }
154
+ formatMessage(message, attribute) {
155
+ return message.replace(':attribute', attribute);
156
+ }
157
+ expandRules(rules) {
158
+ const expanded = {};
159
+ for (const [key, rule] of Object.entries(rules)) {
160
+ if (key.includes('*')) {
161
+ this.expandWildcards(key, rule, this.data, expanded);
162
+ }
163
+ else {
164
+ expanded[key] = rule;
165
+ }
166
+ }
167
+ return expanded;
168
+ }
169
+ expandWildcards(path, rule, data, expanded) {
170
+ const parts = path.split('.');
171
+ const starIndex = parts.indexOf('*');
172
+ if (starIndex === -1) {
173
+ expanded[path] = rule;
174
+ return;
175
+ }
176
+ const before = parts.slice(0, starIndex).join('.');
177
+ const after = parts.slice(starIndex + 1).join('.');
178
+ const collection = this.getValue(before);
179
+ if (Array.isArray(collection)) {
180
+ for (let i = 0; i < collection.length; i++) {
181
+ const subPath = after ? `${before}.${i}.${after}` : `${before}.${i}`;
182
+ if (subPath.includes('*')) {
183
+ this.expandWildcards(subPath, rule, data, expanded);
184
+ }
185
+ else {
186
+ expanded[subPath] = rule;
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
192
+ exports.Validator = Validator;
193
+ //# sourceMappingURL=Validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from './Rule';
2
+ export * from './Validator';
3
+ export * from './ErrorBag';
4
+ export * from './ValidationError';
5
+ export * from './Rules/Required';
6
+ export * from './Rules/Email';
7
+ export * from './Rules/Min';
8
+ export * from './Rules/Max';
9
+ export * from './Rules/String';
10
+ export * from './Rules/Number';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Rule"), exports);
18
+ __exportStar(require("./Validator"), exports);
19
+ __exportStar(require("./ErrorBag"), exports);
20
+ __exportStar(require("./ValidationError"), exports);
21
+ __exportStar(require("./Rules/Required"), exports);
22
+ __exportStar(require("./Rules/Email"), exports);
23
+ __exportStar(require("./Rules/Min"), exports);
24
+ __exportStar(require("./Rules/Max"), exports);
25
+ __exportStar(require("./Rules/String"), exports);
26
+ __exportStar(require("./Rules/Number"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,8CAA4B;AAC5B,6CAA2B;AAC3B,oDAAkC;AAClC,mDAAiC;AACjC,gDAA8B;AAC9B,8CAA4B;AAC5B,8CAA4B;AAC5B,iDAA+B;AAC/B,iDAA+B"}
@@ -0,0 +1,28 @@
1
+ export declare class ErrorBag {
2
+ private errors;
3
+ /**
4
+ * Add an error message for a specific field.
5
+ */
6
+ add(field: string, message: string): void;
7
+ /**
8
+ * Determine if the error bag is empty.
9
+ */
10
+ isEmpty(): boolean;
11
+ /**
12
+ * Determine if there are any errors.
13
+ */
14
+ isNotEmpty(): boolean;
15
+ /**
16
+ * Get all error messages.
17
+ */
18
+ all(): Record<string, string[]>;
19
+ /**
20
+ * Get the first error message for a specific field.
21
+ */
22
+ first(field: string): string | null;
23
+ /**
24
+ * Determine if a field has an error.
25
+ */
26
+ has(field: string): boolean;
27
+ }
28
+ //# sourceMappingURL=ErrorBag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBag.d.ts","sourceRoot":"","sources":["../../src/ErrorBag.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOhD;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,UAAU,IAAI,OAAO;IAI5B;;OAEG;IACI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAItC;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGrC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorBag = void 0;
4
+ class ErrorBag {
5
+ constructor() {
6
+ this.errors = {};
7
+ }
8
+ /**
9
+ * Add an error message for a specific field.
10
+ */
11
+ add(field, message) {
12
+ if (!this.errors[field]) {
13
+ this.errors[field] = [];
14
+ }
15
+ this.errors[field].push(message);
16
+ }
17
+ /**
18
+ * Determine if the error bag is empty.
19
+ */
20
+ isEmpty() {
21
+ return Object.keys(this.errors).length === 0;
22
+ }
23
+ /**
24
+ * Determine if there are any errors.
25
+ */
26
+ isNotEmpty() {
27
+ return !this.isEmpty();
28
+ }
29
+ /**
30
+ * Get all error messages.
31
+ */
32
+ all() {
33
+ return this.errors;
34
+ }
35
+ /**
36
+ * Get the first error message for a specific field.
37
+ */
38
+ first(field) {
39
+ return this.errors[field] ? this.errors[field][0] : null;
40
+ }
41
+ /**
42
+ * Determine if a field has an error.
43
+ */
44
+ has(field) {
45
+ return !!this.errors[field];
46
+ }
47
+ }
48
+ exports.ErrorBag = ErrorBag;
49
+ //# sourceMappingURL=ErrorBag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBag.js","sourceRoot":"","sources":["../../src/ErrorBag.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAQ;IAArB;QACY,WAAM,GAA6B,EAAE,CAAC;IA8ClD,CAAC;IA5CG;;OAEG;IACI,GAAG,CAAC,KAAa,EAAE,OAAe;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,UAAU;QACb,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,GAAG;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,KAAa;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACJ;AA/CD,4BA+CC"}
@@ -0,0 +1,11 @@
1
+ export interface Rule {
2
+ /**
3
+ * Determine if the validation rule passes.
4
+ */
5
+ validate(value: any, attribute: string, params?: string[]): boolean | Promise<boolean>;
6
+ /**
7
+ * Get the validation error message.
8
+ */
9
+ message(): string;
10
+ }
11
+ //# sourceMappingURL=Rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../src/Rule.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACjB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvF;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../src/Rule.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class Email implements Rule {
3
+ validate(value: any): boolean;
4
+ message(): string;
5
+ }
6
+ //# sourceMappingURL=Email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../../src/Rules/Email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,KAAM,YAAW,IAAI;IAC9B,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQ7B,OAAO,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Email = void 0;
4
+ class Email {
5
+ validate(value) {
6
+ if (!value)
7
+ return true; // Let 'required' handle empty values
8
+ if (typeof value !== 'string')
9
+ return false;
10
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
11
+ return emailRegex.test(value);
12
+ }
13
+ message() {
14
+ return 'The :attribute must be a valid email address.';
15
+ }
16
+ }
17
+ exports.Email = Email;
18
+ //# sourceMappingURL=Email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.js","sourceRoot":"","sources":["../../../src/Rules/Email.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IACd,QAAQ,CAAC,KAAU;QACf,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,qCAAqC;QAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5C,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAChD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACH,OAAO,+CAA+C,CAAC;IAC3D,CAAC;CACJ;AAZD,sBAYC"}
@@ -0,0 +1,8 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class Max implements Rule {
3
+ private max;
4
+ constructor(max: number);
5
+ validate(value: any): boolean;
6
+ message(): string;
7
+ }
8
+ //# sourceMappingURL=Max.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Max.d.ts","sourceRoot":"","sources":["../../../src/Rules/Max.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,GAAI,YAAW,IAAI;IAC5B,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAc7B,OAAO,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Max = void 0;
4
+ class Max {
5
+ constructor(max) {
6
+ this.max = max;
7
+ }
8
+ validate(value) {
9
+ if (value === null || value === undefined)
10
+ return true;
11
+ if (typeof value === 'number') {
12
+ return value <= this.max;
13
+ }
14
+ if (typeof value === 'string' || Array.isArray(value)) {
15
+ return value.length <= this.max;
16
+ }
17
+ return false;
18
+ }
19
+ message() {
20
+ return `The :attribute must not be greater than ${this.max}.`;
21
+ }
22
+ }
23
+ exports.Max = Max;
24
+ //# sourceMappingURL=Max.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Max.js","sourceRoot":"","sources":["../../../src/Rules/Max.ts"],"names":[],"mappings":";;;AAEA,MAAa,GAAG;IAGZ,YAAY,GAAW;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAAU;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,OAAO,2CAA2C,IAAI,CAAC,GAAG,GAAG,CAAC;IAClE,CAAC;CACJ;AAxBD,kBAwBC"}
@@ -0,0 +1,8 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class Min implements Rule {
3
+ private min;
4
+ constructor(min: number);
5
+ validate(value: any): boolean;
6
+ message(): string;
7
+ }
8
+ //# sourceMappingURL=Min.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Min.d.ts","sourceRoot":"","sources":["../../../src/Rules/Min.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,GAAI,YAAW,IAAI;IAC5B,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAc7B,OAAO,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Min = void 0;
4
+ class Min {
5
+ constructor(min) {
6
+ this.min = min;
7
+ }
8
+ validate(value) {
9
+ if (value === null || value === undefined)
10
+ return true;
11
+ if (typeof value === 'number') {
12
+ return value >= this.min;
13
+ }
14
+ if (typeof value === 'string' || Array.isArray(value)) {
15
+ return value.length >= this.min;
16
+ }
17
+ return false;
18
+ }
19
+ message() {
20
+ return `The :attribute must be at least ${this.min}.`;
21
+ }
22
+ }
23
+ exports.Min = Min;
24
+ //# sourceMappingURL=Min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Min.js","sourceRoot":"","sources":["../../../src/Rules/Min.ts"],"names":[],"mappings":";;;AAEA,MAAa,GAAG;IAGZ,YAAY,GAAW;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAAU;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,OAAO,mCAAmC,IAAI,CAAC,GAAG,GAAG,CAAC;IAC1D,CAAC;CACJ;AAxBD,kBAwBC"}
@@ -0,0 +1,6 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class IsNumber implements Rule {
3
+ validate(value: any): boolean;
4
+ message(): string;
5
+ }
6
+ //# sourceMappingURL=Number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Number.d.ts","sourceRoot":"","sources":["../../../src/Rules/Number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,QAAS,YAAW,IAAI;IACjC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAK7B,OAAO,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsNumber = void 0;
4
+ class IsNumber {
5
+ validate(value) {
6
+ if (value === null || value === undefined)
7
+ return true;
8
+ return typeof value === 'number' && !isNaN(value);
9
+ }
10
+ message() {
11
+ return 'The :attribute must be a number.';
12
+ }
13
+ }
14
+ exports.IsNumber = IsNumber;
15
+ //# sourceMappingURL=Number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Number.js","sourceRoot":"","sources":["../../../src/Rules/Number.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IACjB,QAAQ,CAAC,KAAU;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACH,OAAO,kCAAkC,CAAC;IAC9C,CAAC;CACJ;AATD,4BASC"}
@@ -0,0 +1,6 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class Required implements Rule {
3
+ validate(value: any): boolean;
4
+ message(): string;
5
+ }
6
+ //# sourceMappingURL=Required.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Required.d.ts","sourceRoot":"","sources":["../../../src/Rules/Required.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,QAAS,YAAW,IAAI;IACjC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAgB7B,OAAO,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Required = void 0;
4
+ class Required {
5
+ validate(value) {
6
+ if (value === null || value === undefined) {
7
+ return false;
8
+ }
9
+ if (typeof value === 'string' && value.trim() === '') {
10
+ return false;
11
+ }
12
+ if (Array.isArray(value) && value.length === 0) {
13
+ return false;
14
+ }
15
+ return true;
16
+ }
17
+ message() {
18
+ return 'The :attribute field is required.';
19
+ }
20
+ }
21
+ exports.Required = Required;
22
+ //# sourceMappingURL=Required.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Required.js","sourceRoot":"","sources":["../../../src/Rules/Required.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IACjB,QAAQ,CAAC,KAAU;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,OAAO,mCAAmC,CAAC;IAC/C,CAAC;CACJ;AApBD,4BAoBC"}
@@ -0,0 +1,11 @@
1
+ import { Rule } from '../Rule';
2
+ export declare class RequiredIf implements Rule {
3
+ private otherField;
4
+ private otherValue;
5
+ private data;
6
+ constructor(otherField: string, otherValue: any, data: any);
7
+ validate(value: any): Promise<boolean>;
8
+ message(): string;
9
+ private getDataValue;
10
+ }
11
+ //# sourceMappingURL=RequiredIf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequiredIf.d.ts","sourceRoot":"","sources":["../../../src/Rules/RequiredIf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,UAAW,YAAW,IAAI;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,IAAI,CAAM;gBAEN,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAMpD,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5C,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,YAAY;CAGvB"}