thesimplevalidation 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,11 @@ import { Validator } from "./Validator";
4
4
  export declare class Validation<TModel extends {}> {
5
5
  private originalModel;
6
6
  private modelInfo;
7
+ private isDisabled;
7
8
  constructor(originalModel: TModel);
9
+ disable: () => Validation<TModel>;
10
+ enable: () => Validation<TModel>;
11
+ getisEnabled: () => boolean;
8
12
  useOriginal: (model: TModel) => Validation<TModel>;
9
13
  useNoValidators: () => Validation<TModel>;
10
14
  useValidators: <K extends keyof TModel>(key: K, ...validators: Array<Validator<TModel, K>>) => Validation<TModel>;
@@ -2,6 +2,18 @@ import get from "lodash.get";
2
2
  import isEqual from "lodash.isequal";
3
3
  export class Validation {
4
4
  constructor(originalModel) {
5
+ this.isDisabled = false;
6
+ this.disable = () => {
7
+ this.isDisabled = true;
8
+ return this;
9
+ };
10
+ this.enable = () => {
11
+ this.isDisabled = false;
12
+ return this;
13
+ };
14
+ this.getisEnabled = () => {
15
+ return !this.isDisabled;
16
+ };
5
17
  this.useOriginal = (model) => {
6
18
  this.originalModel = structuredClone(model);
7
19
  return this;
@@ -17,6 +29,8 @@ export class Validation {
17
29
  return this;
18
30
  };
19
31
  this.isPropertyDirty = (model, field, key = null) => {
32
+ if (this.isDisabled === true)
33
+ return false;
20
34
  const originalField = this.originalModel[field];
21
35
  const modelField = model[field];
22
36
  if (Array.isArray(originalField) && Array.isArray(modelField)) {
@@ -1 +1 @@
1
- {"version":3,"file":"Validation.js","sourceRoot":"","sources":["../src/Validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Validation.js","sourceRoot":"","sources":["../src/Validation.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export type ValidationErrorsModel<TModel> = {
2
- [k in keyof TModel]: string[];
3
- };
1
+ export type ValidationErrorsModel<TModel> = {
2
+ [k in keyof TModel]: string[];
3
+ };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=ValidationErrorsModel.js.map
@@ -1,3 +1,3 @@
1
- export type ValidationModel<TModel> = {
2
- [K in keyof TModel]: boolean;
3
- };
1
+ export type ValidationModel<TModel> = {
2
+ [K in keyof TModel]: boolean;
3
+ };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=ValidationModel.js.map
@@ -1,15 +1,15 @@
1
- import { ValidationPropertyResult } from "./ValidationPropertyResult";
2
- import { ValidationResult } from "./ValidationResult";
3
- import { Validator } from "./Validator";
4
- export declare class ValidationScope<TModel extends {}> {
5
- private originalModel;
6
- private modelInfo;
7
- constructor(originalModel: TModel);
8
- useOriginal: (model: TModel) => ValidationScope<TModel>;
9
- useValidators: <K extends keyof TModel>(key: K, ...validators: Array<Validator<TModel, K>>) => ValidationScope<TModel>;
10
- isPropertyDirty: (model: TModel, field: keyof TModel, key?: string | null) => boolean;
11
- getOriginalProperty: <K extends keyof TModel>(field: K) => TModel[K];
12
- isDirty: (model: TModel, ...fields: Array<keyof TModel>) => boolean;
13
- isPropertyValid: <K extends keyof TModel>(model: TModel, field: K) => Promise<ValidationPropertyResult>;
14
- isValid: (model: TModel, ...fields: Array<keyof TModel>) => Promise<ValidationResult<TModel>>;
15
- }
1
+ import { ValidationPropertyResult } from "./ValidationPropertyResult";
2
+ import { ValidationResult } from "./ValidationResult";
3
+ import { Validator } from "./Validator";
4
+ export declare class ValidationScope<TModel extends {}> {
5
+ private originalModel;
6
+ private modelInfo;
7
+ constructor(originalModel: TModel);
8
+ useOriginal: (model: TModel) => ValidationScope<TModel>;
9
+ useValidators: <K extends keyof TModel>(key: K, ...validators: Array<Validator<TModel, K>>) => ValidationScope<TModel>;
10
+ isPropertyDirty: (model: TModel, field: keyof TModel, key?: string | null) => boolean;
11
+ getOriginalProperty: <K extends keyof TModel>(field: K) => TModel[K];
12
+ isDirty: (model: TModel, ...fields: Array<keyof TModel>) => boolean;
13
+ isPropertyValid: <K extends keyof TModel>(model: TModel, field: K) => Promise<ValidationPropertyResult>;
14
+ isValid: (model: TModel, ...fields: Array<keyof TModel>) => Promise<ValidationResult<TModel>>;
15
+ }
@@ -1,95 +1,95 @@
1
- import get from "lodash.get";
2
- import isEqual from "lodash.isequal";
3
- export class ValidationScope {
4
- constructor(originalModel) {
5
- this.useOriginal = (model) => {
6
- this.originalModel = structuredClone(model);
7
- return this;
8
- };
9
- this.useValidators = (key, ...validators) => {
10
- this.modelInfo[key] = {
11
- validators: validators,
12
- };
13
- return this;
14
- };
15
- this.isPropertyDirty = (model, field, key = null) => {
16
- const originalField = this.originalModel[field];
17
- const modelField = model[field];
18
- if (Array.isArray(originalField) && Array.isArray(modelField)) {
19
- if (originalField.length !== modelField.length)
20
- return true;
21
- for (let index = 0; index < originalField.length; index++) {
22
- if (originalField[index] === modelField[index])
23
- continue;
24
- if (key == null)
25
- return true;
26
- if (get(originalField[index], key) !== get(modelField[index], key))
27
- return true;
28
- }
29
- return false;
30
- }
31
- if (key == null)
32
- return !isEqual(this.originalModel[field], model[field]);
33
- return get(this.originalModel[field], key) !== get(model[field], key);
34
- };
35
- this.getOriginalProperty = (field) => {
36
- return this.originalModel[field];
37
- };
38
- this.isDirty = (model, ...fields) => {
39
- for (const property in this.originalModel) {
40
- if (!this.originalModel.hasOwnProperty(property))
41
- continue;
42
- if (fields && fields.length > 0) {
43
- if (!fields.some((x) => x === property))
44
- continue;
45
- }
46
- if (this.isPropertyDirty(model, property))
47
- return true;
48
- }
49
- return false;
50
- };
51
- this.isPropertyValid = async (model, field) => {
52
- if (this.modelInfo[field] &&
53
- this.modelInfo[field].validators &&
54
- this.modelInfo[field].validators) {
55
- let isValid = true;
56
- let errors = [];
57
- const value = model[field];
58
- for (const validator of this.modelInfo[field].validators) {
59
- const validatorResult = await validator.isValid(value, model, field);
60
- isValid = isValid && validatorResult.isValid;
61
- if (!validatorResult.isValid)
62
- errors = [...errors, ...validatorResult.errors];
63
- }
64
- return {
65
- isValid: isValid,
66
- errors: errors,
67
- };
68
- }
69
- return {
70
- isValid: true,
71
- errors: [],
72
- };
73
- };
74
- this.isValid = async (model, ...fields) => {
75
- model = model ?? {};
76
- const properties = (fields == null || fields.length === 0 ? Object.keys(model) : fields);
77
- const result = {
78
- isValid: true,
79
- errors: [],
80
- properties: {},
81
- };
82
- for (const property of properties) {
83
- const propertyValidationResult = await this.isPropertyValid(model, property);
84
- result.isValid = result.isValid && propertyValidationResult.isValid;
85
- result.properties[property] = propertyValidationResult;
86
- if (!propertyValidationResult.isValid)
87
- result.errors = [...result.errors, ...propertyValidationResult.errors];
88
- }
89
- return result;
90
- };
91
- this.originalModel = structuredClone(originalModel);
92
- this.modelInfo = {};
93
- }
94
- }
1
+ import get from "lodash.get";
2
+ import isEqual from "lodash.isequal";
3
+ export class ValidationScope {
4
+ constructor(originalModel) {
5
+ this.useOriginal = (model) => {
6
+ this.originalModel = structuredClone(model);
7
+ return this;
8
+ };
9
+ this.useValidators = (key, ...validators) => {
10
+ this.modelInfo[key] = {
11
+ validators: validators,
12
+ };
13
+ return this;
14
+ };
15
+ this.isPropertyDirty = (model, field, key = null) => {
16
+ const originalField = this.originalModel[field];
17
+ const modelField = model[field];
18
+ if (Array.isArray(originalField) && Array.isArray(modelField)) {
19
+ if (originalField.length !== modelField.length)
20
+ return true;
21
+ for (let index = 0; index < originalField.length; index++) {
22
+ if (originalField[index] === modelField[index])
23
+ continue;
24
+ if (key == null)
25
+ return true;
26
+ if (get(originalField[index], key) !== get(modelField[index], key))
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ if (key == null)
32
+ return !isEqual(this.originalModel[field], model[field]);
33
+ return get(this.originalModel[field], key) !== get(model[field], key);
34
+ };
35
+ this.getOriginalProperty = (field) => {
36
+ return this.originalModel[field];
37
+ };
38
+ this.isDirty = (model, ...fields) => {
39
+ for (const property in this.originalModel) {
40
+ if (!this.originalModel.hasOwnProperty(property))
41
+ continue;
42
+ if (fields && fields.length > 0) {
43
+ if (!fields.some((x) => x === property))
44
+ continue;
45
+ }
46
+ if (this.isPropertyDirty(model, property))
47
+ return true;
48
+ }
49
+ return false;
50
+ };
51
+ this.isPropertyValid = async (model, field) => {
52
+ if (this.modelInfo[field] &&
53
+ this.modelInfo[field].validators &&
54
+ this.modelInfo[field].validators) {
55
+ let isValid = true;
56
+ let errors = [];
57
+ const value = model[field];
58
+ for (const validator of this.modelInfo[field].validators) {
59
+ const validatorResult = await validator.isValid(value, model, field);
60
+ isValid = isValid && validatorResult.isValid;
61
+ if (!validatorResult.isValid)
62
+ errors = [...errors, ...validatorResult.errors];
63
+ }
64
+ return {
65
+ isValid: isValid,
66
+ errors: errors,
67
+ };
68
+ }
69
+ return {
70
+ isValid: true,
71
+ errors: [],
72
+ };
73
+ };
74
+ this.isValid = async (model, ...fields) => {
75
+ model = model ?? {};
76
+ const properties = (fields == null || fields.length === 0 ? Object.keys(model) : fields);
77
+ const result = {
78
+ isValid: true,
79
+ errors: [],
80
+ properties: {},
81
+ };
82
+ for (const property of properties) {
83
+ const propertyValidationResult = await this.isPropertyValid(model, property);
84
+ result.isValid = result.isValid && propertyValidationResult.isValid;
85
+ result.properties[property] = propertyValidationResult;
86
+ if (!propertyValidationResult.isValid)
87
+ result.errors = [...result.errors, ...propertyValidationResult.errors];
88
+ }
89
+ return result;
90
+ };
91
+ this.originalModel = structuredClone(originalModel);
92
+ this.modelInfo = {};
93
+ }
94
+ }
95
95
  //# sourceMappingURL=ValidationScope.js.map
package/dist/Validator.js CHANGED
@@ -6,7 +6,8 @@ export class Validator {
6
6
  return [`${field.toString()}.${this.name}`];
7
7
  };
8
8
  this.isValid = async (value, model, field) => {
9
- if (this.setup.isDisabled != null && this.setup.isDisabled(value)) {
9
+ if (this.setup.isDisabled != null &&
10
+ this.setup.isDisabled(value, model, field)) {
10
11
  return {
11
12
  isValid: true,
12
13
  errors: [],
@@ -15,7 +16,7 @@ export class Validator {
15
16
  const result = await this.isValidInternal(value, model, field);
16
17
  if (result.isValid !== true) {
17
18
  if (this.setup.getErrors != null) {
18
- result.errors = this.setup.getErrors(value);
19
+ result.errors = this.setup.getErrors(value, model, field);
19
20
  }
20
21
  else {
21
22
  result.errors = this.getErrors(value, model, field);
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,SAAS;IAK7B,YAAsB,IAAY,EAAY,KAAa;QAArC,SAAI,GAAJ,IAAI,CAAQ;QAAY,UAAK,GAAL,KAAK,CAAQ;QAEjD,cAAS,GAAG,CACpB,KAAgB,EAChB,KAAa,EACb,KAAQ,EACE,EAAE;YACZ,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEK,YAAO,GAAG,KAAK,EACpB,KAAgB,EAChB,KAAa,EACb,KAAQ,EAC2B,EAAE;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,EAAE;iBACX,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAA6B,MAAM,IAAI,CAAC,eAAe,CACjE,KAAK,EACL,KAAK,EACL,KAAK,CACN,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;oBACjC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IArC4D,CAAC;CA4ChE"}
1
+ {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,SAAS;IAK7B,YAAsB,IAAY,EAAY,KAAa;QAArC,SAAI,GAAJ,IAAI,CAAQ;QAAY,UAAK,GAAL,KAAK,CAAQ;QAEjD,cAAS,GAAG,CACpB,KAAgB,EAChB,KAAa,EACb,KAAQ,EACE,EAAE;YACZ,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEK,YAAO,GAAG,KAAK,EACpB,KAAgB,EAChB,KAAa,EACb,KAAQ,EAC2B,EAAE;YACrC,IACE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI;gBAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC1C,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,EAAE;iBACX,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAA6B,MAAM,IAAI,CAAC,eAAe,CACjE,KAAK,EACL,KAAK,EACL,KAAK,CACN,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;oBACjC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IAxC4D,CAAC;CA+ChE"}
@@ -1,4 +1,4 @@
1
1
  export type ValidatorSetup<TModel, K extends keyof TModel> = {
2
- isDisabled?: (value: TModel[K]) => boolean;
3
- getErrors?: (value: TModel[K]) => string[];
2
+ isDisabled?: (value: TModel[K], model: TModel, key: K) => boolean;
3
+ getErrors?: (value: TModel[K], model: TModel, key: K) => string[];
4
4
  };
@@ -0,0 +1,10 @@
1
+ import { ValidationPropertyResult } from "../../ValidationPropertyResult";
2
+ import { Validator } from "../../Validator";
3
+ import { EmailValidatorSetup } from "./EmailValidatorSetup";
4
+ export declare class EmailValidator<TModel, K extends keyof TModel> extends Validator<TModel, K, EmailValidatorSetup<TModel, K>> {
5
+ private localAtom;
6
+ private domainLabel;
7
+ constructor(setup?: EmailValidatorSetup<TModel, K>);
8
+ isValidInternal(value: TModel[K]): Promise<ValidationPropertyResult>;
9
+ private isEmailAsciiStrict;
10
+ }
@@ -0,0 +1,79 @@
1
+ import { Validator } from "../../Validator";
2
+ export class EmailValidator extends Validator {
3
+ constructor(setup) {
4
+ super("EmailValidator", { ...setup });
5
+ this.localAtom = /^[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+$/;
6
+ this.domainLabel = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$/;
7
+ }
8
+ async isValidInternal(value) {
9
+ const isValid = this.isEmailAsciiStrict(value);
10
+ return {
11
+ isValid: isValid,
12
+ errors: [],
13
+ };
14
+ }
15
+ isEmailAsciiStrict(value) {
16
+ // Only strings can be validated as emails
17
+ if (typeof value !== "string")
18
+ return false;
19
+ // Reject empty string
20
+ if (value.length === 0)
21
+ return false;
22
+ // If you want to auto-trim user input, uncomment this.
23
+ // NOTE: If you keep trimming, tests with leading/trailing spaces should expect `true`.
24
+ // value = value.trim();
25
+ // Reasonable maximum length for an email address (common practical limit)
26
+ if (value.length > 254)
27
+ return false;
28
+ // Find exactly one '@'
29
+ const at = value.indexOf("@");
30
+ if (at <= 0)
31
+ return false; // no local-part or '@' is the first character
32
+ if (value.indexOf("@", at + 1) !== -1)
33
+ return false; // multiple '@'
34
+ const local = value.slice(0, at);
35
+ const domain = value.slice(at + 1);
36
+ // Domain part must not be empty
37
+ if (domain.length === 0)
38
+ return false;
39
+ // Common practical max length for local-part
40
+ if (local.length > 64)
41
+ return false;
42
+ // ---- local-part checks ----
43
+ // local-part is "dot-atom": atoms separated by dots.
44
+ // This forbids:
45
+ // - leading dot (".max@...")
46
+ // - trailing dot ("max.@...")
47
+ // - double dots ("max..john@...")
48
+ const localParts = local.split(".");
49
+ if (localParts.some((p) => p.length === 0))
50
+ return false;
51
+ // Each atom must contain only allowed ASCII characters
52
+ if (localParts.some((p) => !(this.setup.localAtom ?? this.localAtom).test(p)))
53
+ return false;
54
+ // ---- domain checks ----
55
+ // Domain must have at least one dot -> requires TLD ("example.com")
56
+ // This also forbids:
57
+ // - double dots ("example..com")
58
+ // - leading/trailing dot (".example.com", "example.com.")
59
+ const labels = domain.split(".");
60
+ if (labels.length < 2)
61
+ return false;
62
+ if (labels.some((l) => l.length === 0))
63
+ return false;
64
+ // Each label must be a valid hostname label:
65
+ // - starts with alphanumeric
66
+ // - ends with alphanumeric
67
+ // - may contain hyphens in the middle
68
+ // This forbids "-domain.com" and "domain-.com"
69
+ if (labels.some((l) => !(this.setup.domainLabel ?? this.domainLabel).test(l)))
70
+ return false;
71
+ // TLD policy: letters only, 2..63 chars.
72
+ // This rejects very short/odd TLDs like "x@y.z".
73
+ const tld = labels[labels.length - 1];
74
+ if (!/^[A-Za-z]{2,63}$/.test(tld))
75
+ return false;
76
+ return true;
77
+ }
78
+ }
79
+ //# sourceMappingURL=EmailValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailValidator.js","sourceRoot":"","sources":["../../../src/validators/email/EmailValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ValidatorSetup } from "../../ValidatorSetup";
2
+ export interface EmailValidatorSetup<TModel, K extends keyof TModel> extends ValidatorSetup<TModel, K> {
3
+ localAtom?: RegExp;
4
+ domainLabel?: RegExp;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EmailValidatorSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailValidatorSetup.js","sourceRoot":"","sources":["../../../src/validators/email/EmailValidatorSetup.ts"],"names":[],"mappings":""}
@@ -2,6 +2,8 @@ export { SimpleValidator } from "./simple/SimpleValidator";
2
2
  export type { SimpleValidatorSetup } from "./simple/SimpleValidatorSetup";
3
3
  export { BooleanValidator } from "./boolean/BooleanValidator";
4
4
  export type { BooleanValidatorSetup } from "./boolean/BooleanValidatorSetup";
5
+ export { EmailValidator } from "./email/EmailValidator";
6
+ export type { EmailValidatorSetup } from "./email/EmailValidatorSetup";
5
7
  export { RequiredValidator } from "./required/RequiredValidator";
6
8
  export { MinValidator } from "./min/MinValidator";
7
9
  export type { MinValidatorSetup } from "./min/MinValidatorSetup";
@@ -1,5 +1,6 @@
1
1
  export { SimpleValidator } from "./simple/SimpleValidator";
2
2
  export { BooleanValidator } from "./boolean/BooleanValidator";
3
+ export { EmailValidator } from "./email/EmailValidator";
3
4
  export { RequiredValidator } from "./required/RequiredValidator";
4
5
  export { MinValidator } from "./min/MinValidator";
5
6
  export { MaxValidator } from "./max/MaxValidator";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -3,5 +3,5 @@ import { Validator } from "../../Validator";
3
3
  import { SimpleValidatorSetup } from "./SimpleValidatorSetup";
4
4
  export declare class SimpleValidator<TModel, K extends keyof TModel> extends Validator<TModel, K, SimpleValidatorSetup<TModel, K>> {
5
5
  constructor(setup: SimpleValidatorSetup<TModel, K>);
6
- isValidInternal(_value: TModel[K]): Promise<ValidationPropertyResult>;
6
+ isValidInternal(value: TModel[K], model: TModel, field: K): Promise<ValidationPropertyResult>;
7
7
  }
@@ -3,12 +3,8 @@ export class SimpleValidator extends Validator {
3
3
  constructor(setup) {
4
4
  super("SimpleValidator", setup);
5
5
  }
6
- async isValidInternal(_value) {
7
- const isValid = this.setup.getValidation();
8
- return {
9
- isValid: isValid,
10
- errors: [],
11
- };
6
+ isValidInternal(value, model, field) {
7
+ return this.setup.getValidation(value, model, field);
12
8
  }
13
9
  }
14
10
  //# sourceMappingURL=SimpleValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleValidator.js","sourceRoot":"","sources":["../../../src/validators/simple/SimpleValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,eAAgD,SAAQ,SAIpE;IACC,YAAY,KAAsC;QAChD,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,MAAiB;QAEjB,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAEpD,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"SimpleValidator.js","sourceRoot":"","sources":["../../../src/validators/simple/SimpleValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,eAAgD,SAAQ,SAIpE;IACC,YAAY,KAAsC;QAChD,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAEM,eAAe,CACpB,KAAgB,EAChB,KAAa,EACb,KAAQ;QAER,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
+ import { ValidationPropertyResult } from "../../ValidationPropertyResult";
1
2
  import { ValidatorSetup } from "../../ValidatorSetup";
2
3
  export interface SimpleValidatorSetup<TModel, K extends keyof TModel> extends ValidatorSetup<TModel, K> {
3
- getValidation: () => boolean;
4
+ getValidation: (value: TModel[K], model: TModel, key: K) => Promise<ValidationPropertyResult>;
4
5
  }
package/package.json CHANGED
@@ -1,43 +1,44 @@
1
- {
2
- "name": "thesimplevalidation",
3
- "description": "The simple validation",
4
- "version": "2.1.0",
5
- "main": "./dist/index.js",
6
- "types": "./dist/index.d.ts",
7
- "files": [
8
- "dist"
9
- ],
10
- "scripts": {
11
- "build": "tsc",
12
- "test": "jest"
13
- },
14
- "publishConfig": {
15
- "registry": "https://registry.npmjs.org"
16
- },
17
- "author": "Alexey Ripenko <alexey@ripenko.ru>",
18
- "license": "MIT",
19
- "repository": {
20
- "type": "git",
21
- "url": "git@github.com:ripenko/thesimplevalidation.git"
22
- },
23
- "keywords": [
24
- "validation",
25
- "simple",
26
- "thesimplevalidation",
27
- "isdirty",
28
- "typescript",
29
- "promise"
30
- ],
31
- "dependencies": {
32
- "lodash.get": "4.4.2",
33
- "lodash.isequal": "4.5.0"
34
- },
35
- "devDependencies": {
36
- "@types/lodash.get": "4.4.9",
37
- "@types/lodash.isequal": "4.5.8",
38
- "@types/jest": "30.0.0",
39
- "typescript": "5.9.3",
40
- "jest": "30.2.0",
41
- "ts-jest": "29.4.5"
42
- }
43
- }
1
+ {
2
+ "name": "thesimplevalidation",
3
+ "description": "The simple validation",
4
+ "version": "2.2.1",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "test": "vitest",
13
+ "test:run": "vitest run",
14
+ "coverage": "vitest run --coverage"
15
+ },
16
+ "publishConfig": {
17
+ "registry": "https://registry.npmjs.org"
18
+ },
19
+ "author": "Alexey Ripenko <alexey@ripenko.ru>",
20
+ "license": "MIT",
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git@github.com:ripenko/thesimplevalidation.git"
24
+ },
25
+ "keywords": [
26
+ "validation",
27
+ "simple",
28
+ "thesimplevalidation",
29
+ "isdirty",
30
+ "typescript",
31
+ "promise"
32
+ ],
33
+ "dependencies": {
34
+ "lodash.get": "4.4.2",
35
+ "lodash.isequal": "4.5.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/lodash.get": "4.4.9",
39
+ "@types/lodash.isequal": "4.5.8",
40
+ "@vitest/coverage-v8": "^4.0.9",
41
+ "typescript": "5.9.3",
42
+ "vitest": "4.0.9"
43
+ }
44
+ }