@acorex/core 7.17.21 → 7.17.23

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 (35) hide show
  1. package/esm2022/utils/lib/auto-unsubscribe.mjs +1 -1
  2. package/esm2022/validation/index.mjs +13 -3
  3. package/esm2022/validation/lib/rules/callback-rule.mjs +19 -0
  4. package/esm2022/validation/lib/rules/equal-rule.mjs +19 -0
  5. package/esm2022/validation/lib/rules/length-rule.mjs +15 -0
  6. package/esm2022/validation/lib/rules/less-than-rule.mjs +17 -0
  7. package/esm2022/validation/lib/rules/maxlength-rule.mjs +17 -0
  8. package/esm2022/validation/lib/rules/minlength-rule.mjs +16 -0
  9. package/esm2022/validation/lib/rules/regex-rule.mjs +34 -0
  10. package/esm2022/validation/lib/rules/required-rule.mjs +25 -0
  11. package/esm2022/validation/lib/validation.config.mjs +34 -0
  12. package/esm2022/validation/lib/validation.mjs +1 -1
  13. package/esm2022/validation/lib/validation.module.mjs +14 -4
  14. package/esm2022/validation/lib/validation.service.mjs +26 -16
  15. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  16. package/fesm2022/acorex-core-validation.mjs +193 -32
  17. package/fesm2022/acorex-core-validation.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/utils/lib/auto-unsubscribe.d.ts +2 -2
  20. package/validation/index.d.ts +8 -2
  21. package/validation/lib/rules/callback-rule.d.ts +20 -0
  22. package/validation/lib/rules/equal-rule.d.ts +14 -0
  23. package/validation/lib/rules/length-rule.d.ts +14 -0
  24. package/validation/lib/rules/less-than-rule.d.ts +13 -0
  25. package/validation/lib/rules/maxlength-rule.d.ts +13 -0
  26. package/validation/lib/rules/minlength-rule.d.ts +13 -0
  27. package/validation/lib/rules/regex-rule.d.ts +13 -0
  28. package/validation/lib/rules/required-rule.d.ts +12 -0
  29. package/validation/lib/validation.config.d.ts +15 -0
  30. package/validation/lib/validation.d.ts +8 -5
  31. package/validation/lib/validation.service.d.ts +9 -6
  32. package/esm2022/validation/lib/regex-validator.mjs +0 -17
  33. package/esm2022/validation/lib/required-validator.mjs +0 -24
  34. package/validation/lib/regex-validator.d.ts +0 -8
  35. package/validation/lib/required-validator.d.ts +0 -7
@@ -1,57 +1,208 @@
1
- import { isNull, isUndefined, isString, isEmpty, isNumber, isArray, find } from 'lodash-es';
2
- import * as i0 from '@angular/core';
3
- import { Injectable, APP_INITIALIZER, NgModule } from '@angular/core';
1
+ import { isString, isEmpty, isNull, isUndefined, isNumber, isArray, find, isEqual } from 'lodash-es';
4
2
  import { AXTranslator } from '@acorex/core/translation';
3
+ import * as i0 from '@angular/core';
4
+ import { InjectionToken, inject, Injectable, APP_INITIALIZER, NgModule } from '@angular/core';
5
5
 
6
- class AXRegexValidator {
6
+ class AXRegexValidationRule {
7
7
  get name() {
8
8
  return 'regex';
9
9
  }
10
- validate(context) {
10
+ validate(value, options) {
11
11
  // Convert string pattern to RegExp if necessary
12
- const regexPattern = typeof context.pattern === 'string' ? new RegExp(context.pattern) : context.pattern;
13
- const isValid = regexPattern.test(context.value);
12
+ const regexPattern = typeof options.pattern === 'string' ? new RegExp(options.pattern) : options.pattern;
13
+ if (!value || (isString(value) && isEmpty(value.trim()))) {
14
+ return {
15
+ rule: this.name,
16
+ result: true,
17
+ message: null,
18
+ value: value
19
+ };
20
+ }
21
+ else if (!isString(value)) {
22
+ return {
23
+ rule: this.name,
24
+ result: false,
25
+ message: `${value} is not string value.`,
26
+ value: value
27
+ };
28
+ }
29
+ const isValid = regexPattern.test(value);
14
30
  return {
15
- name: this.name,
31
+ rule: this.name,
16
32
  result: isValid,
17
- message: isValid ? '' : `The value does not match the pattern ${regexPattern}.`,
18
- value: context.value
33
+ message: isValid ? '' : options?.message ?? `The value does not match the pattern ${regexPattern}.`,
34
+ value: value
19
35
  };
20
36
  }
21
37
  }
22
38
 
23
- class AXRequiredValidator {
39
+ class AXRequiredValidationRule {
24
40
  get name() {
25
41
  return 'required';
26
42
  }
27
- validate(context) {
43
+ validate(value, options) {
28
44
  const rules = [
29
45
  { test: val => isNull(val) || isUndefined(val) },
30
46
  { test: val => isString(val) && isEmpty(val.trim()) },
31
47
  { test: val => isNumber(val) && isNaN(val) },
32
48
  { test: val => isArray(val) && isEmpty(val) }
33
49
  ];
34
- const failedRule = find(rules, rule => rule.test(context.value));
50
+ const failedRule = find(rules, rule => rule.test(value));
35
51
  const isValid = !failedRule;
36
- const message = failedRule ? "This filed is required" : null;
52
+ const message = failedRule ? options?.message ?? AXTranslator.get("validation.messages.required", { name: options?.['title'] ?? options?.['name'] }) : null;
37
53
  return {
38
- name: this.name,
54
+ rule: this.name,
39
55
  result: isValid,
40
56
  message: message,
41
- value: context.value
57
+ value
58
+ };
59
+ }
60
+ }
61
+
62
+ class AXCallbackValidationRule {
63
+ get name() {
64
+ return 'callback';
65
+ }
66
+ validate(value, options) {
67
+ const validationResult = options?.validate(value) || { result: false, message: "Invalid callback function" };
68
+ const createResult = (result) => ({
69
+ rule: this.name,
70
+ result: result.result,
71
+ message: result.message ?? options?.message ?? '',
72
+ value: value
73
+ });
74
+ if (validationResult instanceof Promise) {
75
+ return validationResult.then(createResult);
76
+ }
77
+ return createResult(validationResult);
78
+ }
79
+ }
80
+
81
+ class AXMinLengthValidationRule {
82
+ get name() {
83
+ return 'minLength';
84
+ }
85
+ validate(value, options) {
86
+ const isValid = isEmpty(value) ? true : (value?.length >= options.value);
87
+ return {
88
+ rule: this.name,
89
+ result: isValid,
90
+ message: isValid ? '' : options?.message ?? `The value must be at least ${options.value} characters long.`,
91
+ value: value
92
+ };
93
+ }
94
+ }
95
+
96
+ // ax-max-length-validation-rule.ts
97
+ class AXMaxLengthValidationRule {
98
+ get name() {
99
+ return 'maxLength';
100
+ }
101
+ validate(value, options) {
102
+ const isValid = isEmpty(value) ? true : (value?.length <= options.value);
103
+ return {
104
+ rule: this.name,
105
+ result: isValid,
106
+ message: isValid ? '' : options?.message ?? `The value must not exceed ${options.value} characters.`,
107
+ value: value
42
108
  };
43
109
  }
44
110
  }
45
111
 
112
+ class AXLengthValidationRule {
113
+ get name() {
114
+ return 'length';
115
+ }
116
+ validate(value, options) {
117
+ const isValid = value?.length >= options.min && value?.length <= options.max;
118
+ return {
119
+ rule: this.name,
120
+ result: isValid,
121
+ message: isValid ? null : options?.message ?? `The value must be between ${options.min} and ${options.max} chars`,
122
+ value: value
123
+ };
124
+ }
125
+ }
126
+
127
+ // ax-equal-validation-rule.ts
128
+ class AXEqualValidationRule {
129
+ get name() {
130
+ return 'equal';
131
+ }
132
+ validate(value, options) {
133
+ const isValueEqual = isEqual(value, options.value);
134
+ const isValid = options.not ? !isValueEqual : isValueEqual;
135
+ const defaultMessage = `The value must ${options.not ? 'not ' : ''}be equal to ${options.value}.`;
136
+ return {
137
+ rule: this.name,
138
+ result: isValid,
139
+ message: isValid ? '' : options?.message ?? defaultMessage,
140
+ value: value
141
+ };
142
+ }
143
+ }
144
+
145
+ // ax-less-than-validation-rule.ts
146
+ class AXLessThanValidationRule {
147
+ get name() {
148
+ return 'lessThan';
149
+ }
150
+ validate(value, options) {
151
+ const isValid = isEmpty(value) ? false : value < options.value;
152
+ return {
153
+ rule: this.name,
154
+ result: isValid,
155
+ message: isValid ? null : options?.message ?? `The value must be less than ${options.value}.`,
156
+ value: value
157
+ };
158
+ }
159
+ }
160
+
161
+ const AX_VALIDATION_CONFIG = new InjectionToken('AX_VALIDATION_CONFIG', {
162
+ providedIn: 'root',
163
+ factory: () => {
164
+ return AXValidationDefaultConfig;
165
+ },
166
+ });
167
+ const AXValidationDefaultConfig = {
168
+ rules: {
169
+ email: {
170
+ rule: 'regex',
171
+ options: {
172
+ pattern: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
173
+ message: AXTranslator.get('validation.messages.email'),
174
+ }
175
+ },
176
+ phone: {
177
+ rule: 'regex',
178
+ options: {
179
+ pattern: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$/,
180
+ message: AXTranslator.get('validation.messages.phone'),
181
+ }
182
+ },
183
+ },
184
+ };
185
+ function validationConfig(config = {}) {
186
+ const result = {
187
+ ...AXValidationDefaultConfig,
188
+ ...config,
189
+ };
190
+ return result;
191
+ }
192
+
46
193
  class AXValidationRegistryService {
47
194
  constructor() {
48
195
  this.plugins = [];
196
+ this.configs = inject(AX_VALIDATION_CONFIG);
197
+ }
198
+ get customRules() {
199
+ return this.configs.rules;
49
200
  }
50
201
  register(...plugin) {
51
202
  this.plugins.push(...plugin.filter(p => !this.plugins.some(c => c.name == p.name)));
52
203
  }
53
- get validators() {
54
- return this.plugins;
204
+ get(ruleName) {
205
+ return this.plugins.find((c) => c.name == ruleName);
55
206
  }
56
207
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
57
208
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationRegistryService, providedIn: 'root' }); }
@@ -66,19 +217,24 @@ class AXValidationService {
66
217
  constructor(pluginRegistry) {
67
218
  this.pluginRegistry = pluginRegistry;
68
219
  }
69
- validate(name, context) {
70
- const validator = this.pluginRegistry.validators.find((c) => c.name == name);
71
- if (!validator) {
220
+ validate(ruleName, value, options) {
221
+ const customRule = this.pluginRegistry.customRules[ruleName];
222
+ const validator = this.pluginRegistry.get(ruleName);
223
+ if (!validator && !customRule) {
72
224
  return {
73
- name: name,
225
+ rule: ruleName,
74
226
  result: false,
75
- message: AXTranslator.get('validation.messages.invalid-rull-name'),
76
- value: context.value
227
+ message: AXTranslator.get('validation.messages.invalid-rull-name', { name: ruleName }),
228
+ value
77
229
  };
78
230
  }
79
- return validator.validate(context);
231
+ if (validator)
232
+ return validator.validate(value, options);
233
+ else {
234
+ return this.validate(customRule.rule, value, customRule.options);
235
+ }
80
236
  }
81
- chain(value) {
237
+ ruleFor(value) {
82
238
  return new AXValidationRuleChain(this, value);
83
239
  }
84
240
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationService, deps: [{ token: AXValidationRegistryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -95,13 +251,13 @@ class AXValidationRuleChain {
95
251
  this.rules = [];
96
252
  this.validationSummary = { result: true, rules: [] };
97
253
  }
98
- addRule(name, context) {
99
- this.rules.push({ name, context: { ...context, value: this.initialValue } });
254
+ addRule(name, options) {
255
+ this.rules.push({ name, options });
100
256
  return this;
101
257
  }
102
- async execute() {
258
+ async validate() {
103
259
  for (const rule of this.rules) {
104
- const result = await this.validationService.validate(rule.name, rule.context);
260
+ const result = await this.validationService.validate(rule.name, this.initialValue, rule.options);
105
261
  this.validationSummary.rules.push(result);
106
262
  if (!result.result) {
107
263
  this.validationSummary.result = false;
@@ -111,6 +267,7 @@ class AXValidationRuleChain {
111
267
  }
112
268
  }
113
269
 
270
+ // import { AXNotEqualValidationRule } from './rules/not-equal-rule';
114
271
  class AXValidationModule {
115
272
  static forRoot(config) {
116
273
  return {
@@ -129,7 +286,11 @@ class AXValidationModule {
129
286
  };
130
287
  }
131
288
  constructor(pluginRegistry) {
132
- pluginRegistry.register(new AXRegexValidator(), new AXRequiredValidator());
289
+ pluginRegistry.register(new AXRegexValidationRule(), new AXRequiredValidationRule(), new AXCallbackValidationRule(),
290
+ //
291
+ new AXMinLengthValidationRule(), new AXMaxLengthValidationRule(), new AXLengthValidationRule(),
292
+ //
293
+ new AXEqualValidationRule());
133
294
  }
134
295
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule, deps: [{ token: AXValidationRegistryService }], target: i0.ɵɵFactoryTarget.NgModule }); }
135
296
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule }); }
@@ -146,5 +307,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
146
307
  * Generated bundle index. Do not edit.
147
308
  */
148
309
 
149
- export { AXRegexValidator, AXRequiredValidator, AXValidationModule, AXValidationRegistryService, AXValidationService };
310
+ export { AXCallbackValidationRule, AXEqualValidationRule, AXLengthValidationRule, AXLessThanValidationRule, AXMaxLengthValidationRule, AXMinLengthValidationRule, AXRegexValidationRule, AXRequiredValidationRule, AXValidationModule, AXValidationRegistryService, AXValidationService };
150
311
  //# sourceMappingURL=acorex-core-validation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-validation.mjs","sources":["../../../../libs/core/validation/src/lib/regex-validator.ts","../../../../libs/core/validation/src/lib/required-validator.ts","../../../../libs/core/validation/src/lib/validation.service.ts","../../../../libs/core/validation/src/lib/validation.module.ts","../../../../libs/core/validation/src/acorex-core-validation.ts"],"sourcesContent":["import { AXValidationRule, AXValidationRuleResult } from \"./validation\";\n\nexport class AXRegexValidator implements AXValidationRule {\n\n get name(): string {\n return 'regex';\n }\n\n validate(context: { value: string, pattern: string | RegExp }): AXValidationRuleResult {\n // Convert string pattern to RegExp if necessary\n const regexPattern = typeof context.pattern === 'string' ? new RegExp(context.pattern) : context.pattern;\n\n const isValid = regexPattern.test(context.value);\n return {\n name: this.name,\n result: isValid,\n message: isValid ? '' : `The value does not match the pattern ${regexPattern}.`,\n value: context.value\n };\n }\n\n}","import { find, isArray, isEmpty, isNull, isNumber, isString, isUndefined } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleResult } from \"./validation\";\n\nexport class AXRequiredValidator implements AXValidationRule {\n\n get name(): string {\n return 'required';\n }\n\n validate(context: { value?: unknown }): AXValidationRuleResult {\n const rules = [\n { test: val => isNull(val) || isUndefined(val) },\n { test: val => isString(val) && isEmpty(val.trim()) },\n { test: val => isNumber(val) && isNaN(val) },\n { test: val => isArray(val) && isEmpty(val) }\n ];\n\n const failedRule = find(rules, rule => rule.test(context.value));\n const isValid = !failedRule;\n const message = failedRule ? \"This filed is required\" : null;\n\n return {\n name: this.name,\n result: isValid,\n message: message,\n value: context.value\n };\n }\n}","import { Injectable } from \"@angular/core\";\nimport { AXValidationRule, AXValidationContext, AXValidationRuleResult, AXValidationSummary } from \"./validation\";\nimport { AXTranslator } from \"@acorex/core/translation\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXValidationRegistryService {\n private plugins: AXValidationRule[] = [];\n\n register(...plugin: AXValidationRule[]) {\n this.plugins.push(...plugin.filter(p => !this.plugins.some(c => c.name == p.name)));\n }\n\n get validators(): AXValidationRule[] {\n return this.plugins;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXValidationService {\n constructor(\n private pluginRegistry: AXValidationRegistryService\n ) { }\n\n validate(name: string, context: AXValidationContext): AXValidationRuleResult | Promise<AXValidationRuleResult> {\n const validator = this.pluginRegistry.validators.find((c) => c.name == name);\n if (!validator) {\n return {\n name: name,\n result: false,\n message: AXTranslator.get('validation.messages.invalid-rull-name'),\n value: context.value\n };\n }\n return validator.validate(context);\n }\n\n\n chain(value: unknown) {\n return new AXValidationRuleChain(this, value);\n }\n}\n\nclass AXValidationRuleChain {\n private rules: { name: string, context: AXValidationContext }[] = [];\n private validationSummary: AXValidationSummary = { result: true, rules: [] };\n\n constructor(private validationService: AXValidationService, private initialValue: unknown) { }\n\n addRule(name: string, context?: Omit<AXValidationContext, 'value'>): AXValidationRuleChain {\n this.rules.push({ name, context: { ...context, value: this.initialValue } });\n return this;\n }\n\n async execute(): Promise<AXValidationSummary> {\n for (const rule of this.rules) {\n const result = await this.validationService.validate(rule.name, rule.context);\n this.validationSummary.rules.push(result);\n if (!result.result) {\n this.validationSummary.result = false;\n }\n }\n return this.validationSummary;\n }\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AXValidationRegistryService } from './validation.service';\nimport { AXValidationRule } from './validation';\nimport { AXRegexValidator } from './regex-validator';\nimport { AXRequiredValidator } from './required-validator';\n\n\n@NgModule({\n imports: [],\n})\nexport class AXValidationModule {\n\n static forRoot(config?: { validators?: AXValidationRule[] }): ModuleWithProviders<AXValidationModule> {\n return {\n ngModule: AXValidationModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (pluginRegistry: AXValidationRegistryService) => () => {\n if (config?.validators?.length)\n pluginRegistry.register(...config.validators);\n },\n deps: [AXValidationRegistryService],\n multi: true\n }\n ]\n };\n }\n\n constructor(pluginRegistry: AXValidationRegistryService) {\n pluginRegistry.register(new AXRegexValidator(), new AXRequiredValidator())\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AXValidationRegistryService"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-validation.mjs","sources":["../../../../libs/core/validation/src/lib/rules/regex-rule.ts","../../../../libs/core/validation/src/lib/rules/required-rule.ts","../../../../libs/core/validation/src/lib/rules/callback-rule.ts","../../../../libs/core/validation/src/lib/rules/minlength-rule.ts","../../../../libs/core/validation/src/lib/rules/maxlength-rule.ts","../../../../libs/core/validation/src/lib/rules/length-rule.ts","../../../../libs/core/validation/src/lib/rules/equal-rule.ts","../../../../libs/core/validation/src/lib/rules/less-than-rule.ts","../../../../libs/core/validation/src/lib/validation.config.ts","../../../../libs/core/validation/src/lib/validation.service.ts","../../../../libs/core/validation/src/lib/validation.module.ts","../../../../libs/core/validation/src/acorex-core-validation.ts"],"sourcesContent":["import { isEmpty, isString } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\n\nexport interface AXRegexValidationRuleOptions extends AXValidationRuleOptions {\n pattern: string | RegExp;\n}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'regex': AXRegexValidationRuleOptions;\n }\n}\n\nexport class AXRegexValidationRule implements AXValidationRule {\n\n get name(): string {\n return 'regex';\n }\n\n validate(value: string, options: AXRegexValidationRuleOptions): AXValidationRuleResult {\n // Convert string pattern to RegExp if necessary\n const regexPattern = typeof options.pattern === 'string' ? new RegExp(options.pattern) : options.pattern;\n\n if (!value || (isString(value) && isEmpty(value.trim()))) {\n return {\n rule: this.name,\n result: true,\n message: null,\n value: value\n };\n }\n else if (!isString(value)) {\n return {\n rule: this.name,\n result: false,\n message: `${value} is not string value.`,\n value: value\n };\n }\n\n const isValid = regexPattern.test(value);\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? `The value does not match the pattern ${regexPattern}.`,\n value: value\n };\n }\n\n}","import { find, isArray, isEmpty, isNull, isNumber, isString, isUndefined } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\nimport { AXTranslator } from \"@acorex/core/translation\";\n\n\nexport interface AXRequiredValidationRuleOptions extends AXValidationRuleOptions {\n}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'required': AXRequiredValidationRuleOptions;\n }\n}\n\nexport class AXRequiredValidationRule implements AXValidationRule {\n\n get name(): string {\n return 'required';\n }\n\n validate(value?: unknown, options?: AXRequiredValidationRuleOptions): AXValidationRuleResult {\n const rules = [\n { test: val => isNull(val) || isUndefined(val) },\n { test: val => isString(val) && isEmpty(val.trim()) },\n { test: val => isNumber(val) && isNaN(val) },\n { test: val => isArray(val) && isEmpty(val) }\n ];\n\n const failedRule = find(rules, rule => rule.test(value));\n const isValid = !failedRule;\n const message = failedRule ? options?.message ?? AXTranslator.get(\"validation.messages.required\", { name: options?.['title'] ?? options?.['name'] }) : null;\n\n return {\n rule: this.name,\n result: isValid,\n message: message,\n value\n };\n }\n}","import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport type AXCallbackValidation<T> = (value: T) => Promise<{ result: boolean, message?: string }> | { result: boolean, message?: string };\n\nexport interface AXCallbackValidationRuleOptions<T> extends AXValidationRuleOptions {\n validate: AXCallbackValidation<T>\n}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'callback': AXCallbackValidationRuleOptions<unknown>;\n }\n}\n\nexport class AXCallbackValidationRule<T> implements AXValidationRule {\n\n get name(): string {\n return 'callback';\n }\n\n validate(value: T, options: AXCallbackValidationRuleOptions<T>): AXValidationRuleResult | Promise<AXValidationRuleResult> {\n const validationResult = options?.validate(value) || { result: false, message: \"Invalid callback function\" };\n const createResult = (result: { result: boolean, message?: string }) => ({\n rule: this.name,\n result: result.result,\n message: result.message ?? options?.message ?? '',\n value: value\n });\n\n if (validationResult instanceof Promise) {\n return validationResult.then(createResult);\n }\n\n return createResult(validationResult);\n }\n}","import { isEmpty } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport interface AXMinLengthValidationRuleOptions extends AXValidationRuleOptions {\n value: number;\n}\n\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'minLength': AXMinLengthValidationRuleOptions;\n }\n}\n\nexport class AXMinLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'minLength';\n }\n\n validate(value: string, options: AXMinLengthValidationRuleOptions): AXValidationRuleResult {\n const isValid = isEmpty(value) ? true : (value?.length >= options.value);\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? `The value must be at least ${options.value} characters long.`,\n value: value\n };\n }\n}","// ax-max-length-validation-rule.ts\nimport { isEmpty } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport interface AXMaxLengthValidationRuleOptions extends AXValidationRuleOptions {\n value: number;\n}\n\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'maxLength': AXMaxLengthValidationRuleOptions;\n }\n}\n\nexport class AXMaxLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'maxLength';\n }\n\n validate(value: string, options: AXMaxLengthValidationRuleOptions): AXValidationRuleResult {\n const isValid = isEmpty(value) ? true : (value?.length <= options.value);\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? `The value must not exceed ${options.value} characters.`,\n value: value\n };\n }\n}\n","// ax-max-length-validation-rule.ts\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport interface AXLengthValidationRuleOptions extends AXValidationRuleOptions {\n min: number;\n max: number;\n}\n\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'length': AXLengthValidationRuleOptions;\n }\n}\n\nexport class AXLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'length';\n }\n\n validate(value: string, options: AXLengthValidationRuleOptions): AXValidationRuleResult {\n const isValid = value?.length >= options.min && value?.length <= options.max;\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? null : options?.message ?? `The value must be between ${options.min} and ${options.max} chars`,\n value: value\n };\n }\n}\n","// ax-equal-validation-rule.ts\nimport { isEqual, isEmpty } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport interface AXEqualValidationRuleOptions extends AXValidationRuleOptions {\n value: any;\n not?: boolean; // Optional flag to invert the validation logic\n}\n\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'equal': AXEqualValidationRuleOptions;\n }\n}\n\nexport class AXEqualValidationRule implements AXValidationRule {\n get name(): string {\n return 'equal';\n }\n\n validate(value: any, options: AXEqualValidationRuleOptions): AXValidationRuleResult {\n const isValueEqual = isEqual(value, options.value);\n const isValid = options.not ? !isValueEqual : isValueEqual;\n\n const defaultMessage = `The value must ${options.not ? 'not ' : ''}be equal to ${options.value}.`;\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? defaultMessage,\n value: value\n };\n }\n}\n","// ax-less-than-validation-rule.ts\nimport { isEmpty } from \"lodash-es\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from \"../validation\";\n\nexport interface AXLessThanValidationRuleOptions extends AXValidationRuleOptions {\n value: number;\n}\n\ndeclare module '../validation' {\n interface AXValidationRuleOptionsMap {\n 'lessThan': AXLessThanValidationRuleOptions;\n }\n}\n\nexport class AXLessThanValidationRule implements AXValidationRule {\n get name(): string {\n return 'lessThan';\n }\n\n validate(value: number, options: AXLessThanValidationRuleOptions): AXValidationRuleResult {\n const isValid = isEmpty(value) ? false : value < options.value;\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? null : options?.message ?? `The value must be less than ${options.value}.`,\n value: value\n };\n }\n}\n","import { AXTranslator } from '@acorex/core/translation';\nimport { InjectionToken } from '@angular/core';\nimport { AXValidationRuleOptions, AXValidationRuleOptionsMap } from './validation';\n\nexport type AXValidationConfigRules = {\n [key: string]: {\n rule: keyof AXValidationRuleOptionsMap;\n options: AXValidationRuleOptions\n };\n}\n\nexport interface AXValidationConfig {\n rules: AXValidationConfigRules;\n}\n\nexport const AX_VALIDATION_CONFIG = new InjectionToken<AXValidationConfig>('AX_VALIDATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXValidationDefaultConfig;\n },\n});\n\nexport const AXValidationDefaultConfig: AXValidationConfig = {\n rules: {\n email: {\n rule: 'regex',\n options: {\n pattern:\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n message: AXTranslator.get('validation.messages.email'),\n }\n },\n phone: {\n rule: 'regex',\n options: {\n pattern: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$/,\n message: AXTranslator.get('validation.messages.phone'),\n }\n },\n },\n};\n\nexport type PartialFormConfig = Partial<AXValidationConfig>;\n\nexport function validationConfig(config: PartialFormConfig = {}): AXValidationConfig {\n const result = {\n ...AXValidationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { AXValidationRule, AXValidationRuleOptions, AXValidationRuleOptionsMap, AXValidationRuleResult, AXValidationSummary } from \"./validation\";\nimport { AXTranslator } from \"@acorex/core/translation\";\nimport { AXValidationConfigRules, AX_VALIDATION_CONFIG } from \"./validation.config\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXValidationRegistryService {\n private plugins: AXValidationRule[] = [];\n\n private configs = inject(AX_VALIDATION_CONFIG);\n\n public get customRules(): AXValidationConfigRules {\n return this.configs.rules;\n }\n\n register(...plugin: AXValidationRule[]) {\n this.plugins.push(...plugin.filter(p => !this.plugins.some(c => c.name == p.name)));\n }\n\n get(ruleName: string): AXValidationRule | undefined {\n return this.plugins.find((c) => c.name == ruleName)\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXValidationService {\n constructor(\n private pluginRegistry: AXValidationRegistryService,\n\n ) { }\n\n validate(ruleName: string, value: unknown, options?: AXValidationRuleOptions): AXValidationRuleResult | Promise<AXValidationRuleResult> {\n const customRule = this.pluginRegistry.customRules[ruleName];\n const validator = this.pluginRegistry.get(ruleName);\n if (!validator && !customRule) {\n return {\n rule: ruleName,\n result: false,\n message: AXTranslator.get('validation.messages.invalid-rull-name', { name: ruleName }),\n value\n };\n }\n if (validator)\n return validator.validate(value, options);\n else {\n\n return this.validate(customRule.rule, value, customRule.options);\n }\n\n }\n\n\n ruleFor(value: unknown): AXValidationRuleChain {\n return new AXValidationRuleChain(this, value);\n }\n}\n\nclass AXValidationRuleChain {\n private rules: { name: string, options?: AXValidationRuleOptions }[] = [];\n private validationSummary: AXValidationSummary = { result: true, rules: [] };\n\n constructor(private validationService: AXValidationService, private initialValue: unknown) { }\n\n addRule<K extends keyof AXValidationRuleOptionsMap>(name: K, options?: AXValidationRuleOptionsMap[K]): AXValidationRuleChain {\n this.rules.push({ name, options });\n return this;\n }\n\n async validate(): Promise<AXValidationSummary> {\n for (const rule of this.rules) {\n const result = await this.validationService.validate(rule.name, this.initialValue, rule.options);\n this.validationSummary.rules.push(result);\n if (!result.result) {\n this.validationSummary.result = false;\n }\n }\n return this.validationSummary;\n }\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AXValidationRegistryService } from './validation.service';\nimport { AXValidationRule } from './validation';\nimport { AXRegexValidationRule } from './rules/regex-rule';\nimport { AXRequiredValidationRule } from './rules/required-rule';\nimport { AXCallbackValidationRule } from './rules/callback-rule';\nimport { AXMinLengthValidationRule } from './rules/minlength-rule';\nimport { AXMaxLengthValidationRule } from './rules/maxlength-rule';\nimport { AXLengthValidationRule } from './rules/length-rule';\nimport { AXEqualValidationRule } from './rules/equal-rule';\n// import { AXNotEqualValidationRule } from './rules/not-equal-rule';\n\n\n@NgModule({\n imports: [],\n})\nexport class AXValidationModule {\n\n static forRoot(config?: { validators?: AXValidationRule[] }): ModuleWithProviders<AXValidationModule> {\n return {\n ngModule: AXValidationModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (pluginRegistry: AXValidationRegistryService) => () => {\n if (config?.validators?.length)\n pluginRegistry.register(...config.validators);\n },\n deps: [AXValidationRegistryService],\n multi: true\n }\n ]\n };\n }\n\n constructor(pluginRegistry: AXValidationRegistryService) {\n pluginRegistry.register(\n new AXRegexValidationRule(),\n new AXRequiredValidationRule(),\n new AXCallbackValidationRule(),\n //\n new AXMinLengthValidationRule(),\n new AXMaxLengthValidationRule(),\n new AXLengthValidationRule(),\n //\n new AXEqualValidationRule()\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AXValidationRegistryService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/core",
3
- "version": "7.17.21",
3
+ "version": "7.17.23",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=17.0.3",
@@ -1,10 +1,10 @@
1
1
  import { OnDestroy } from '@angular/core';
2
- import { Observable } from 'rxjs';
2
+ import { Observable, Subject } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare function AXAutoUnsubscriber(): (constructor: any) => void;
5
5
  export declare class AXUnsubscriber implements OnDestroy {
6
6
  private readonly _destroy$;
7
- readonly takeUntilDestroy: <T>(origin: Observable<T>) => Observable<T>;
7
+ readonly takeUntilDestroy: <T>(origin: Observable<T> | Subject<T>) => Observable<T> | Subject<T>;
8
8
  unsubscribe(): void;
9
9
  ngOnDestroy(): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<AXUnsubscriber, never>;
@@ -1,5 +1,11 @@
1
1
  export * from './lib/validation';
2
- export * from './lib/regex-validator';
3
- export * from './lib/required-validator';
2
+ export * from './lib/rules/regex-rule';
3
+ export * from './lib/rules/required-rule';
4
+ export * from './lib/rules/callback-rule';
5
+ export * from './lib/rules/minlength-rule';
6
+ export * from './lib/rules/maxlength-rule';
7
+ export * from './lib/rules/length-rule';
8
+ export * from './lib/rules/equal-rule';
9
+ export * from './lib/rules/less-than-rule';
4
10
  export * from './lib/validation.service';
5
11
  export * from './lib/validation.module';
@@ -0,0 +1,20 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export type AXCallbackValidation<T> = (value: T) => Promise<{
3
+ result: boolean;
4
+ message?: string;
5
+ }> | {
6
+ result: boolean;
7
+ message?: string;
8
+ };
9
+ export interface AXCallbackValidationRuleOptions<T> extends AXValidationRuleOptions {
10
+ validate: AXCallbackValidation<T>;
11
+ }
12
+ declare module '../validation' {
13
+ interface AXValidationRuleOptionsMap {
14
+ 'callback': AXCallbackValidationRuleOptions<unknown>;
15
+ }
16
+ }
17
+ export declare class AXCallbackValidationRule<T> implements AXValidationRule {
18
+ get name(): string;
19
+ validate(value: T, options: AXCallbackValidationRuleOptions<T>): AXValidationRuleResult | Promise<AXValidationRuleResult>;
20
+ }
@@ -0,0 +1,14 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXEqualValidationRuleOptions extends AXValidationRuleOptions {
3
+ value: any;
4
+ not?: boolean;
5
+ }
6
+ declare module '../validation' {
7
+ interface AXValidationRuleOptionsMap {
8
+ 'equal': AXEqualValidationRuleOptions;
9
+ }
10
+ }
11
+ export declare class AXEqualValidationRule implements AXValidationRule {
12
+ get name(): string;
13
+ validate(value: any, options: AXEqualValidationRuleOptions): AXValidationRuleResult;
14
+ }
@@ -0,0 +1,14 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXLengthValidationRuleOptions extends AXValidationRuleOptions {
3
+ min: number;
4
+ max: number;
5
+ }
6
+ declare module '../validation' {
7
+ interface AXValidationRuleOptionsMap {
8
+ 'length': AXLengthValidationRuleOptions;
9
+ }
10
+ }
11
+ export declare class AXLengthValidationRule implements AXValidationRule {
12
+ get name(): string;
13
+ validate(value: string, options: AXLengthValidationRuleOptions): AXValidationRuleResult;
14
+ }
@@ -0,0 +1,13 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXLessThanValidationRuleOptions extends AXValidationRuleOptions {
3
+ value: number;
4
+ }
5
+ declare module '../validation' {
6
+ interface AXValidationRuleOptionsMap {
7
+ 'lessThan': AXLessThanValidationRuleOptions;
8
+ }
9
+ }
10
+ export declare class AXLessThanValidationRule implements AXValidationRule {
11
+ get name(): string;
12
+ validate(value: number, options: AXLessThanValidationRuleOptions): AXValidationRuleResult;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXMaxLengthValidationRuleOptions extends AXValidationRuleOptions {
3
+ value: number;
4
+ }
5
+ declare module '../validation' {
6
+ interface AXValidationRuleOptionsMap {
7
+ 'maxLength': AXMaxLengthValidationRuleOptions;
8
+ }
9
+ }
10
+ export declare class AXMaxLengthValidationRule implements AXValidationRule {
11
+ get name(): string;
12
+ validate(value: string, options: AXMaxLengthValidationRuleOptions): AXValidationRuleResult;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXMinLengthValidationRuleOptions extends AXValidationRuleOptions {
3
+ value: number;
4
+ }
5
+ declare module '../validation' {
6
+ interface AXValidationRuleOptionsMap {
7
+ 'minLength': AXMinLengthValidationRuleOptions;
8
+ }
9
+ }
10
+ export declare class AXMinLengthValidationRule implements AXValidationRule {
11
+ get name(): string;
12
+ validate(value: string, options: AXMinLengthValidationRuleOptions): AXValidationRuleResult;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXRegexValidationRuleOptions extends AXValidationRuleOptions {
3
+ pattern: string | RegExp;
4
+ }
5
+ declare module '../validation' {
6
+ interface AXValidationRuleOptionsMap {
7
+ 'regex': AXRegexValidationRuleOptions;
8
+ }
9
+ }
10
+ export declare class AXRegexValidationRule implements AXValidationRule {
11
+ get name(): string;
12
+ validate(value: string, options: AXRegexValidationRuleOptions): AXValidationRuleResult;
13
+ }
@@ -0,0 +1,12 @@
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleResult } from "../validation";
2
+ export interface AXRequiredValidationRuleOptions extends AXValidationRuleOptions {
3
+ }
4
+ declare module '../validation' {
5
+ interface AXValidationRuleOptionsMap {
6
+ 'required': AXRequiredValidationRuleOptions;
7
+ }
8
+ }
9
+ export declare class AXRequiredValidationRule implements AXValidationRule {
10
+ get name(): string;
11
+ validate(value?: unknown, options?: AXRequiredValidationRuleOptions): AXValidationRuleResult;
12
+ }
@@ -0,0 +1,15 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AXValidationRuleOptions, AXValidationRuleOptionsMap } from './validation';
3
+ export type AXValidationConfigRules = {
4
+ [key: string]: {
5
+ rule: keyof AXValidationRuleOptionsMap;
6
+ options: AXValidationRuleOptions;
7
+ };
8
+ };
9
+ export interface AXValidationConfig {
10
+ rules: AXValidationConfigRules;
11
+ }
12
+ export declare const AX_VALIDATION_CONFIG: InjectionToken<AXValidationConfig>;
13
+ export declare const AXValidationDefaultConfig: AXValidationConfig;
14
+ export type PartialFormConfig = Partial<AXValidationConfig>;
15
+ export declare function validationConfig(config?: PartialFormConfig): AXValidationConfig;
@@ -1,16 +1,19 @@
1
- export interface AXValidationContext {
2
- value: unknown;
1
+ export interface AXValidationRuleOptions {
2
+ message?: string;
3
3
  [key: string]: unknown;
4
4
  }
5
+ export interface AXValidationRuleOptionsMap {
6
+ }
5
7
  export interface AXValidationRule {
6
8
  get name(): string;
7
- validate(context: AXValidationContext): AXValidationRuleResult | Promise<AXValidationRuleResult>;
9
+ validate(value: unknown, options?: AXValidationRuleOptions): AXValidationRuleResult | Promise<AXValidationRuleResult>;
8
10
  }
9
11
  export interface AXValidationRuleResult {
10
- name: string;
12
+ rule: string;
11
13
  value?: unknown;
12
- message?: string;
14
+ message?: string | null;
13
15
  result: boolean;
16
+ [key: string]: unknown;
14
17
  }
15
18
  export interface AXValidationSummary {
16
19
  result: boolean;
@@ -1,17 +1,20 @@
1
- import { AXValidationRule, AXValidationContext, AXValidationRuleResult, AXValidationSummary } from "./validation";
1
+ import { AXValidationRule, AXValidationRuleOptions, AXValidationRuleOptionsMap, AXValidationRuleResult, AXValidationSummary } from "./validation";
2
+ import { AXValidationConfigRules } from "./validation.config";
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class AXValidationRegistryService {
4
5
  private plugins;
6
+ private configs;
7
+ get customRules(): AXValidationConfigRules;
5
8
  register(...plugin: AXValidationRule[]): void;
6
- get validators(): AXValidationRule[];
9
+ get(ruleName: string): AXValidationRule | undefined;
7
10
  static ɵfac: i0.ɵɵFactoryDeclaration<AXValidationRegistryService, never>;
8
11
  static ɵprov: i0.ɵɵInjectableDeclaration<AXValidationRegistryService>;
9
12
  }
10
13
  export declare class AXValidationService {
11
14
  private pluginRegistry;
12
15
  constructor(pluginRegistry: AXValidationRegistryService);
13
- validate(name: string, context: AXValidationContext): AXValidationRuleResult | Promise<AXValidationRuleResult>;
14
- chain(value: unknown): AXValidationRuleChain;
16
+ validate(ruleName: string, value: unknown, options?: AXValidationRuleOptions): AXValidationRuleResult | Promise<AXValidationRuleResult>;
17
+ ruleFor(value: unknown): AXValidationRuleChain;
15
18
  static ɵfac: i0.ɵɵFactoryDeclaration<AXValidationService, never>;
16
19
  static ɵprov: i0.ɵɵInjectableDeclaration<AXValidationService>;
17
20
  }
@@ -21,7 +24,7 @@ declare class AXValidationRuleChain {
21
24
  private rules;
22
25
  private validationSummary;
23
26
  constructor(validationService: AXValidationService, initialValue: unknown);
24
- addRule(name: string, context?: Omit<AXValidationContext, 'value'>): AXValidationRuleChain;
25
- execute(): Promise<AXValidationSummary>;
27
+ addRule<K extends keyof AXValidationRuleOptionsMap>(name: K, options?: AXValidationRuleOptionsMap[K]): AXValidationRuleChain;
28
+ validate(): Promise<AXValidationSummary>;
26
29
  }
27
30
  export {};