@decaf-ts/decorator-validation 1.10.5 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/decorator-validation.cjs +1 -1
- package/dist/decorator-validation.cjs.map +1 -1
- package/dist/decorator-validation.js +1 -1
- package/dist/decorator-validation.js.map +1 -1
- package/lib/esm/index.d.ts +2 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/model/Builder.d.ts +84 -0
- package/lib/esm/model/Builder.js +395 -129
- package/lib/esm/model/Builder.js.map +1 -1
- package/lib/esm/model/Model.d.ts +21 -19
- package/lib/esm/model/Model.js +112 -105
- package/lib/esm/model/Model.js.map +1 -1
- package/lib/esm/model/constants.d.ts +8 -8
- package/lib/esm/model/constants.js +8 -9
- package/lib/esm/model/constants.js.map +1 -1
- package/lib/esm/model/decorators.d.ts +2 -12
- package/lib/esm/model/decorators.js +5 -39
- package/lib/esm/model/decorators.js.map +1 -1
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +1 -0
- package/lib/esm/model/index.js.map +1 -1
- package/lib/esm/model/types.d.ts +0 -12
- package/lib/esm/model/utils.d.ts +0 -3
- package/lib/esm/model/utils.js +0 -10
- package/lib/esm/model/utils.js.map +1 -1
- package/lib/esm/model/validation.d.ts +4 -37
- package/lib/esm/model/validation.js +30 -106
- package/lib/esm/model/validation.js.map +1 -1
- package/lib/esm/overrides/Metadata.d.ts +128 -0
- package/lib/esm/overrides/Metadata.js +2 -0
- package/lib/esm/overrides/Metadata.js.map +1 -0
- package/lib/esm/overrides/index.d.ts +3 -0
- package/lib/esm/overrides/index.js +4 -0
- package/lib/esm/overrides/index.js.map +1 -0
- package/lib/esm/overrides/overrides.d.ts +1 -0
- package/lib/esm/overrides/overrides.js +79 -0
- package/lib/esm/overrides/overrides.js.map +1 -0
- package/lib/esm/overrides/types.d.ts +9 -0
- package/lib/esm/overrides/types.js +2 -0
- package/lib/esm/overrides/types.js.map +1 -0
- package/lib/esm/types/validation.d.ts +4 -2
- package/lib/esm/utils/constants.d.ts +4 -18
- package/lib/esm/utils/constants.js +4 -17
- package/lib/esm/utils/constants.js.map +1 -1
- package/lib/esm/utils/dates.d.ts +0 -1
- package/lib/esm/utils/dates.js +0 -1
- package/lib/esm/utils/dates.js.map +1 -1
- package/lib/esm/utils/equality.d.ts +56 -0
- package/lib/esm/utils/equality.js +160 -0
- package/lib/esm/utils/equality.js.map +1 -0
- package/lib/esm/utils/index.d.ts +1 -2
- package/lib/esm/utils/index.js +1 -2
- package/lib/esm/utils/index.js.map +1 -1
- package/lib/esm/utils/registry.d.ts +1 -1
- package/lib/esm/utils/serialization.d.ts +2 -2
- package/lib/esm/utils/serialization.js +10 -2
- package/lib/esm/utils/serialization.js.map +1 -1
- package/lib/esm/utils/types.d.ts +0 -102
- package/lib/esm/validation/Validation.d.ts +2 -3
- package/lib/esm/validation/Validation.js +11 -6
- package/lib/esm/validation/Validation.js.map +1 -1
- package/lib/esm/validation/Validators/BaseValidator.js +7 -3
- package/lib/esm/validation/Validators/BaseValidator.js.map +1 -1
- package/lib/esm/validation/Validators/DiffValidator.js +1 -1
- package/lib/esm/validation/Validators/DiffValidator.js.map +1 -1
- package/lib/esm/validation/Validators/EqualsValidator.js +1 -1
- package/lib/esm/validation/Validators/EqualsValidator.js.map +1 -1
- package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js +1 -1
- package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js.map +1 -1
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.js +1 -1
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.js.map +1 -1
- package/lib/esm/validation/Validators/ListValidator.js +4 -4
- package/lib/esm/validation/Validators/ListValidator.js.map +1 -1
- package/lib/esm/validation/Validators/MaxLengthValidator.js +3 -2
- package/lib/esm/validation/Validators/MaxLengthValidator.js.map +1 -1
- package/lib/esm/validation/Validators/MaxValidator.js +1 -1
- package/lib/esm/validation/Validators/MaxValidator.js.map +1 -1
- package/lib/esm/validation/Validators/MinLengthValidator.js +3 -2
- package/lib/esm/validation/Validators/MinLengthValidator.js.map +1 -1
- package/lib/esm/validation/Validators/MinValidator.js +1 -1
- package/lib/esm/validation/Validators/MinValidator.js.map +1 -1
- package/lib/esm/validation/Validators/OptionValidator.d.ts +29 -0
- package/lib/esm/validation/Validators/OptionValidator.js +61 -0
- package/lib/esm/validation/Validators/OptionValidator.js.map +1 -0
- package/lib/esm/validation/Validators/TypeValidator.js +2 -2
- package/lib/esm/validation/Validators/TypeValidator.js.map +1 -1
- package/lib/esm/validation/Validators/constants.d.ts +2 -1
- package/lib/esm/validation/Validators/constants.js +3 -2
- package/lib/esm/validation/Validators/constants.js.map +1 -1
- package/lib/esm/validation/Validators/decorators.d.ts +1 -1
- package/lib/esm/validation/Validators/decorators.js +2 -2
- package/lib/esm/validation/Validators/decorators.js.map +1 -1
- package/lib/esm/validation/Validators/index.d.ts +1 -0
- package/lib/esm/validation/Validators/index.js +1 -0
- package/lib/esm/validation/Validators/index.js.map +1 -1
- package/lib/esm/validation/Validators/utils.d.ts +33 -0
- package/lib/esm/validation/Validators/utils.js +62 -0
- package/lib/esm/validation/Validators/utils.js.map +1 -1
- package/lib/esm/validation/decorators.d.ts +28 -17
- package/lib/esm/validation/decorators.js +86 -55
- package/lib/esm/validation/decorators.js.map +1 -1
- package/lib/esm/validation/types.d.ts +15 -5
- package/lib/esm/validation/types.js.map +1 -1
- package/lib/index.cjs +2 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js.map +1 -1
- package/lib/model/Builder.cjs +399 -128
- package/lib/model/Builder.d.ts +84 -0
- package/lib/model/Builder.js.map +1 -1
- package/lib/model/Model.cjs +114 -107
- package/lib/model/Model.d.ts +21 -19
- package/lib/model/Model.js.map +1 -1
- package/lib/model/constants.cjs +8 -9
- package/lib/model/constants.d.ts +8 -8
- package/lib/model/constants.js.map +1 -1
- package/lib/model/decorators.cjs +4 -39
- package/lib/model/decorators.d.ts +2 -12
- package/lib/model/decorators.js.map +1 -1
- package/lib/model/index.cjs +1 -0
- package/lib/model/index.d.ts +1 -0
- package/lib/model/index.js.map +1 -1
- package/lib/model/types.d.ts +0 -12
- package/lib/model/utils.cjs +0 -12
- package/lib/model/utils.d.ts +0 -3
- package/lib/model/utils.js.map +1 -1
- package/lib/model/validation.cjs +30 -108
- package/lib/model/validation.d.ts +4 -37
- package/lib/model/validation.js.map +1 -1
- package/lib/overrides/Metadata.cjs +3 -0
- package/lib/overrides/Metadata.d.ts +128 -0
- package/lib/overrides/Metadata.js.map +1 -0
- package/lib/overrides/index.cjs +20 -0
- package/lib/overrides/index.d.ts +3 -0
- package/lib/overrides/index.js.map +1 -0
- package/lib/overrides/overrides.cjs +81 -0
- package/lib/overrides/overrides.d.ts +1 -0
- package/lib/overrides/overrides.js.map +1 -0
- package/lib/overrides/types.cjs +3 -0
- package/lib/overrides/types.d.ts +9 -0
- package/lib/overrides/types.js.map +1 -0
- package/lib/types/validation.d.ts +4 -2
- package/lib/utils/constants.cjs +5 -18
- package/lib/utils/constants.d.ts +4 -18
- package/lib/utils/constants.js.map +1 -1
- package/lib/utils/dates.cjs +0 -1
- package/lib/utils/dates.d.ts +0 -1
- package/lib/utils/dates.js.map +1 -1
- package/lib/utils/equality.cjs +163 -0
- package/lib/utils/equality.d.ts +56 -0
- package/lib/utils/equality.js.map +1 -0
- package/lib/utils/index.cjs +1 -2
- package/lib/utils/index.d.ts +1 -2
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/registry.d.ts +1 -1
- package/lib/utils/serialization.cjs +10 -2
- package/lib/utils/serialization.d.ts +2 -2
- package/lib/utils/serialization.js.map +1 -1
- package/lib/utils/types.d.ts +0 -102
- package/lib/validation/Validation.cjs +11 -6
- package/lib/validation/Validation.d.ts +2 -3
- package/lib/validation/Validation.js.map +1 -1
- package/lib/validation/Validators/BaseValidator.cjs +7 -3
- package/lib/validation/Validators/BaseValidator.js.map +1 -1
- package/lib/validation/Validators/DiffValidator.cjs +2 -2
- package/lib/validation/Validators/DiffValidator.js.map +1 -1
- package/lib/validation/Validators/EqualsValidator.cjs +2 -2
- package/lib/validation/Validators/EqualsValidator.js.map +1 -1
- package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +2 -2
- package/lib/validation/Validators/GreaterThanOrEqualValidator.js.map +1 -1
- package/lib/validation/Validators/LessThanOrEqualValidator.cjs +2 -2
- package/lib/validation/Validators/LessThanOrEqualValidator.js.map +1 -1
- package/lib/validation/Validators/ListValidator.cjs +4 -4
- package/lib/validation/Validators/ListValidator.js.map +1 -1
- package/lib/validation/Validators/MaxLengthValidator.cjs +3 -2
- package/lib/validation/Validators/MaxLengthValidator.js.map +1 -1
- package/lib/validation/Validators/MaxValidator.cjs +1 -1
- package/lib/validation/Validators/MaxValidator.js.map +1 -1
- package/lib/validation/Validators/MinLengthValidator.cjs +3 -2
- package/lib/validation/Validators/MinLengthValidator.js.map +1 -1
- package/lib/validation/Validators/MinValidator.cjs +1 -1
- package/lib/validation/Validators/MinValidator.js.map +1 -1
- package/lib/validation/Validators/OptionValidator.cjs +64 -0
- package/lib/validation/Validators/OptionValidator.d.ts +29 -0
- package/lib/validation/Validators/OptionValidator.js.map +1 -0
- package/lib/validation/Validators/TypeValidator.cjs +2 -2
- package/lib/validation/Validators/TypeValidator.js.map +1 -1
- package/lib/validation/Validators/constants.cjs +5 -4
- package/lib/validation/Validators/constants.d.ts +2 -1
- package/lib/validation/Validators/constants.js.map +1 -1
- package/lib/validation/Validators/decorators.cjs +3 -3
- package/lib/validation/Validators/decorators.d.ts +1 -1
- package/lib/validation/Validators/decorators.js.map +1 -1
- package/lib/validation/Validators/index.cjs +1 -0
- package/lib/validation/Validators/index.d.ts +1 -0
- package/lib/validation/Validators/index.js.map +1 -1
- package/lib/validation/Validators/utils.cjs +66 -0
- package/lib/validation/Validators/utils.d.ts +33 -0
- package/lib/validation/Validators/utils.js.map +1 -1
- package/lib/validation/decorators.cjs +102 -69
- package/lib/validation/decorators.d.ts +28 -17
- package/lib/validation/decorators.js.map +1 -1
- package/lib/validation/types.d.ts +15 -5
- package/lib/validation/types.js.map +1 -1
- package/package.json +2 -3
- package/lib/esm/utils/Decoration.d.ts +0 -135
- package/lib/esm/utils/Decoration.js +0 -227
- package/lib/esm/utils/Decoration.js.map +0 -1
- package/lib/esm/utils/decorators.d.ts +0 -38
- package/lib/esm/utils/decorators.js +0 -64
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/utils/Decoration.cjs +0 -231
- package/lib/utils/Decoration.d.ts +0 -135
- package/lib/utils/Decoration.js.map +0 -1
- package/lib/utils/decorators.cjs +0 -68
- package/lib/utils/decorators.d.ts +0 -38
- package/lib/utils/decorators.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Model } from "../model/Model";
|
|
2
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
3
|
+
import { designTypeReturn, ExtendedMetadata } from "./types";
|
|
4
|
+
import { ValidationMetadata } from "../validation/index";
|
|
5
|
+
declare module "@decaf-ts/decoration" {
|
|
6
|
+
namespace Metadata {
|
|
7
|
+
/**
|
|
8
|
+
* @description Retrieves validation metadata for a specific property of a model
|
|
9
|
+
* @summary Fetches validation rules and constraints that were applied to a property
|
|
10
|
+
* via decorators. The optional key parameter allows drilling down to specific
|
|
11
|
+
* validation types (e.g., 'required', 'min', 'max').
|
|
12
|
+
*
|
|
13
|
+
* @template M - The model type extending from Model
|
|
14
|
+
* @param {Constructor<M>} model - The constructor of the target model class
|
|
15
|
+
* @param {keyof M} property - The property name to retrieve validation for
|
|
16
|
+
* @param {string} [key] - Optional specific validation key to retrieve (e.g., 'required', 'pattern')
|
|
17
|
+
* @return {any} The validation metadata object or value at the specified key
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* class User extends Model {
|
|
21
|
+
* @required()
|
|
22
|
+
* @maxLength(100)
|
|
23
|
+
* name!: string;
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* // Get all validation metadata for 'name'
|
|
27
|
+
* const validations = Metadata.validationFor(User, 'name');
|
|
28
|
+
*
|
|
29
|
+
* // Get specific validation metadata
|
|
30
|
+
* const required = Metadata.validationFor(User, 'name', 'required');
|
|
31
|
+
*/
|
|
32
|
+
function validationFor<M extends Model, P extends keyof M = keyof M, K extends string = string>(this: Metadata, model: Constructor<M>, property?: keyof M, key?: string): (K extends string ? ValidationMetadata : P extends keyof M ? Record<string, ValidationMetadata> : Record<keyof M, Record<string, ValidationMetadata>>) | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* @description Retrieves all validatable for a model
|
|
35
|
+
* @param model
|
|
36
|
+
*/
|
|
37
|
+
function validatableProperties<M extends Model>(model: Constructor<M>, ...propsToIgnore: string[]): string[];
|
|
38
|
+
/**
|
|
39
|
+
* @description Retrieves extended metadata for a model or a specific key within it
|
|
40
|
+
* @summary When called with a constructor only, returns the entire metadata object
|
|
41
|
+
* associated with the model, including validation rules, property types, relationships,
|
|
42
|
+
* and other decorator-applied metadata. This override extends the base Metadata.get
|
|
43
|
+
* method with type-safe support for ExtendedMetadata.
|
|
44
|
+
*
|
|
45
|
+
* @template M - The model type
|
|
46
|
+
* @template META - The extended metadata type, defaults to ExtendedMetadata<M>
|
|
47
|
+
* @param {Constructor<M>} model - The target constructor used to locate the metadata record
|
|
48
|
+
* @param {keyof M} prop - Optional property of the model.
|
|
49
|
+
* @return {META|undefined} The complete metadata object for the model, or undefined if no metadata exists
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* class Article extends Model {
|
|
53
|
+
* @pk()
|
|
54
|
+
* @type(Number)
|
|
55
|
+
* id!: number;
|
|
56
|
+
*
|
|
57
|
+
* @required()
|
|
58
|
+
* @maxLength(200)
|
|
59
|
+
* title!: string;
|
|
60
|
+
*
|
|
61
|
+
* @oneToMany(() => Comment, { update: true, delete: true }, true)
|
|
62
|
+
* comments!: Comment[];
|
|
63
|
+
* }
|
|
64
|
+
*
|
|
65
|
+
* // Get all metadata for the Article model
|
|
66
|
+
* const metadata = Metadata.get<Article>(Article);
|
|
67
|
+
* // metadata contains:
|
|
68
|
+
* // - property definitions
|
|
69
|
+
* // - validation rules
|
|
70
|
+
* // - relationship mappings
|
|
71
|
+
* // - primary key information
|
|
72
|
+
* // - column mappings
|
|
73
|
+
*
|
|
74
|
+
* @remarks
|
|
75
|
+
* The @ts-expect-error directive is used because this declaration intentionally
|
|
76
|
+
* overrides the signature from the base module to provide enhanced type information
|
|
77
|
+
* specific to the decorator-validation system.
|
|
78
|
+
*/
|
|
79
|
+
function get<M, META extends ExtendedMetadata<M> = ExtendedMetadata<M>>(model: Constructor<M>, prop?: keyof M): META | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* @description Retrieves the original constructor name for a model
|
|
82
|
+
* @summary Fetches the original constructor name for a model from the metadata of a model.
|
|
83
|
+
*
|
|
84
|
+
* @template M - The model type extending from Model
|
|
85
|
+
* @param {Constructor<M>} model - The constructor of the target model class
|
|
86
|
+
* @return {string} The metadata object or value
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* class User extends Model {
|
|
90
|
+
*
|
|
91
|
+
* // Get the constructor name for 'User'
|
|
92
|
+
* const constName = Metadata.modelName(User);
|
|
93
|
+
*/
|
|
94
|
+
function modelName<M>(model: Constructor<M>): string;
|
|
95
|
+
/**
|
|
96
|
+
* @description Retrieves all allowed types for a model or a property
|
|
97
|
+
* @summary Retrieves all allowed types for a model or a property from it's metadata.
|
|
98
|
+
*
|
|
99
|
+
* @template M - The model type extending from Model
|
|
100
|
+
* @param {Constructor<M>} model - The constructor of the target model class
|
|
101
|
+
* @param {keyof M} property - The property name to retrieve validation for
|
|
102
|
+
* @return {any[]} An array of the allowed types
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* class User extends Model {
|
|
106
|
+
*
|
|
107
|
+
* // Get all validation metadata for 'User'
|
|
108
|
+
* const allowedTypes = Metadata.meallowedTypestadata(User);
|
|
109
|
+
*/
|
|
110
|
+
function allowedTypes<M>(model: Constructor<M>, property?: keyof M): any[];
|
|
111
|
+
/**
|
|
112
|
+
* @description Retrieves all allowed types for a model or a property
|
|
113
|
+
* @summary Retrieves all allowed types for a model or a property from it's metadata.
|
|
114
|
+
*
|
|
115
|
+
* @template model - The model type extending from Model
|
|
116
|
+
* @param {Constructor<M>} model - The constructor of the target model class
|
|
117
|
+
* @param {keyof M} property - The property name to retrieve validation for
|
|
118
|
+
* @return {designTypeReturn} An object of the designtypes
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* class User extends Model {
|
|
122
|
+
*
|
|
123
|
+
* // Get the designtypes for property name
|
|
124
|
+
* const { designTypes, designType } = Metadata.getPropDesignTypes(User.constructor, 'name');
|
|
125
|
+
*/
|
|
126
|
+
function getPropDesignTypes<M>(model: Constructor<M>, property: keyof M): designTypeReturn;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metadata.js","sourceRoot":"","sources":["../../src/overrides/Metadata.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
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("./Metadata.cjs"), exports);
|
|
18
|
+
__exportStar(require("./overrides.cjs"), exports);
|
|
19
|
+
__exportStar(require("./types.cjs"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/overrides/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA2B;AAC3B,kDAA4B;AAC5B,8CAAwB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("./Metadata.cjs");
|
|
4
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
5
|
+
const Model_1 = require("./../model/Model.cjs");
|
|
6
|
+
const constants_1 = require("./../validation/Validators/constants.cjs");
|
|
7
|
+
const constants_2 = require("./../model/constants.cjs");
|
|
8
|
+
decoration_1.Metadata.validationFor = function (model, property, key) {
|
|
9
|
+
const meta = decoration_1.Metadata.get(model);
|
|
10
|
+
if (!meta)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (!property)
|
|
13
|
+
return meta.validation;
|
|
14
|
+
if (!meta.validation)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (!meta.validation[constants_1.ValidationKeys.TYPE]) {
|
|
17
|
+
const { designTypes } = decoration_1.Metadata.getPropDesignTypes(model, property);
|
|
18
|
+
// Adds by default the type validation
|
|
19
|
+
// If the designtypes is object, we exclude it. It causes problems with pks.
|
|
20
|
+
if (meta.validation[property] &&
|
|
21
|
+
designTypes?.length &&
|
|
22
|
+
designTypes[0] !== constants_2.ReservedModels.OBJECT)
|
|
23
|
+
meta.validation[property][constants_1.ValidationKeys.TYPE] = {
|
|
24
|
+
customTypes: designTypes,
|
|
25
|
+
message: constants_1.DEFAULT_ERROR_MESSAGES.TYPE,
|
|
26
|
+
description: "defines the accepted types for the attribute",
|
|
27
|
+
async: false,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!key) {
|
|
31
|
+
const validationsForProp = meta.validation[property];
|
|
32
|
+
return validationsForProp;
|
|
33
|
+
}
|
|
34
|
+
const propValidation = meta.validation[property];
|
|
35
|
+
if (!propValidation)
|
|
36
|
+
return undefined;
|
|
37
|
+
return propValidation[key];
|
|
38
|
+
}.bind(decoration_1.Metadata);
|
|
39
|
+
decoration_1.Metadata.modelName = function (model) {
|
|
40
|
+
const constr = decoration_1.Metadata.constr(model);
|
|
41
|
+
return constr ? constr.name : model.name;
|
|
42
|
+
}.bind(decoration_1.Metadata);
|
|
43
|
+
decoration_1.Metadata.validatableProperties = function (model, ...propsToIgnore) {
|
|
44
|
+
const metavalidation = decoration_1.Metadata.validationFor(model);
|
|
45
|
+
const keys = metavalidation ? Object.keys(metavalidation) : [];
|
|
46
|
+
const props = [...new Set([...Model_1.Model.getAttributes(model), ...keys])];
|
|
47
|
+
return props.filter((k) => !propsToIgnore || !propsToIgnore?.includes(k));
|
|
48
|
+
}.bind(decoration_1.Metadata);
|
|
49
|
+
decoration_1.Metadata.allowedTypes = function (model, prop) {
|
|
50
|
+
const designType = decoration_1.Metadata.type(model, prop);
|
|
51
|
+
if (!designType)
|
|
52
|
+
throw new Error(`No metadata found for property ${String(prop)}`);
|
|
53
|
+
const validation = decoration_1.Metadata.validationFor(model, prop);
|
|
54
|
+
// TODO: CHeck why some are not iterable
|
|
55
|
+
return validation &&
|
|
56
|
+
validation[constants_1.ValidationKeys.TYPE] &&
|
|
57
|
+
typeof validation[constants_1.ValidationKeys.TYPE]?.customTypes[Symbol.iterator] ===
|
|
58
|
+
"function"
|
|
59
|
+
? [...validation[constants_1.ValidationKeys.TYPE].customTypes]
|
|
60
|
+
: [designType];
|
|
61
|
+
}.bind(decoration_1.Metadata);
|
|
62
|
+
decoration_1.Metadata.getPropDesignTypes = function (model, prop) {
|
|
63
|
+
const metadata = decoration_1.Metadata.get(model);
|
|
64
|
+
const designTypeMeta = decoration_1.Metadata.type(model, prop);
|
|
65
|
+
const validation = metadata?.[constants_1.ValidationKeys.REFLECT]?.[prop];
|
|
66
|
+
if (!designTypeMeta && (!validation || !validation[constants_1.ValidationKeys.TYPE]))
|
|
67
|
+
return {};
|
|
68
|
+
const propTypes = validation && validation[constants_1.ValidationKeys.TYPE]
|
|
69
|
+
? [validation[constants_1.ValidationKeys.TYPE].customTypes]
|
|
70
|
+
: [designTypeMeta];
|
|
71
|
+
if (!propTypes?.length)
|
|
72
|
+
return {};
|
|
73
|
+
const designTypeDec = propTypes[0];
|
|
74
|
+
const designType = designTypeDec.class ||
|
|
75
|
+
designTypeDec.clazz ||
|
|
76
|
+
designTypeDec.customTypes ||
|
|
77
|
+
designTypeDec;
|
|
78
|
+
const designTypes = (Array.isArray(designType) ? designType : [designType]).map((e) => (e = typeof e === "function" && !e.name ? e() : e));
|
|
79
|
+
return { designTypes, designType };
|
|
80
|
+
}.bind(decoration_1.Metadata);
|
|
81
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./Metadata";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/overrides/overrides.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BasicMetadata } from "@decaf-ts/decoration";
|
|
2
|
+
import { ValidatorOptions } from "../validation/index";
|
|
3
|
+
export type ExtendedMetadata<M> = BasicMetadata<M> & {
|
|
4
|
+
validation: Record<keyof M, ValidatorOptions>;
|
|
5
|
+
};
|
|
6
|
+
export type designTypeReturn = {
|
|
7
|
+
designTypes: any[];
|
|
8
|
+
designType: any;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/overrides/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DecoratorMetadata } from "@decaf-ts/reflection";
|
|
2
1
|
import { Model } from "../model/Model";
|
|
3
2
|
import { ModelErrorDefinition } from "../model/ModelErrorDefinition";
|
|
4
3
|
/**
|
|
@@ -20,7 +19,10 @@ import { ModelErrorDefinition } from "../model/ModelErrorDefinition";
|
|
|
20
19
|
* @memberOf module:decorator-validation
|
|
21
20
|
*/
|
|
22
21
|
export type ConditionalAsync<Async extends boolean, T> = Async extends true ? Promise<T> : T;
|
|
23
|
-
export type DecoratorMetadataAsync =
|
|
22
|
+
export type DecoratorMetadataAsync = {
|
|
24
23
|
async?: boolean;
|
|
25
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated
|
|
27
|
+
*/
|
|
26
28
|
export type ModelConditionalAsync<M> = M extends Model<true> ? Promise<ModelErrorDefinition | undefined> : ModelErrorDefinition | undefined;
|
package/lib/utils/constants.cjs
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ModelKeys = void 0;
|
|
4
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
4
5
|
/**
|
|
5
6
|
* @description Enum containing metadata keys used for reflection in the model system
|
|
6
7
|
* @summary Defines the various Model keys used for reflection and metadata storage.
|
|
7
8
|
* These keys are used throughout the library to store and retrieve metadata about models,
|
|
8
9
|
* their properties, and their behavior.
|
|
9
10
|
*
|
|
10
|
-
* @property {string} REFLECT - Prefix to all other keys, used as a namespace
|
|
11
11
|
* @property {string} TYPE - Key for storing design type information
|
|
12
|
-
* @property {string} PARAMS - Key for storing method parameter types
|
|
13
|
-
* @property {string} RETURN - Key for storing method return type
|
|
14
12
|
* @property {string} MODEL - Key for identifying model metadata
|
|
15
13
|
* @property {string} ANCHOR - Anchor key that serves as a ghost property in the model
|
|
16
14
|
* @property {string} CONSTRUCTION - Key for storing construction information
|
|
@@ -25,26 +23,15 @@ exports.DefaultFlavour = exports.ModelKeys = void 0;
|
|
|
25
23
|
*/
|
|
26
24
|
var ModelKeys;
|
|
27
25
|
(function (ModelKeys) {
|
|
28
|
-
ModelKeys["
|
|
29
|
-
ModelKeys["DESCRIPTION"] = "decaf.description.";
|
|
26
|
+
ModelKeys["DESCRIPTION"] = "description";
|
|
30
27
|
ModelKeys["TYPE"] = "design:type";
|
|
31
|
-
ModelKeys["PARAMS"] = "design:paramtypes";
|
|
32
|
-
ModelKeys["RETURN"] = "design:returntype";
|
|
33
28
|
ModelKeys["MODEL"] = "model";
|
|
34
29
|
ModelKeys["ANCHOR"] = "__model";
|
|
35
30
|
ModelKeys["CONSTRUCTION"] = "constructed-by";
|
|
36
31
|
ModelKeys["ATTRIBUTE"] = "__attributes";
|
|
37
32
|
ModelKeys["HASHING"] = "hashing";
|
|
38
33
|
ModelKeys["SERIALIZATION"] = "serialization";
|
|
34
|
+
ModelKeys["DECORATORS"] = "decorators";
|
|
35
|
+
ModelKeys["CONSTRUCTOR"] = "__original";
|
|
39
36
|
})(ModelKeys || (exports.ModelKeys = ModelKeys = {}));
|
|
40
|
-
/**
|
|
41
|
-
* @description Default flavour identifier for the decorator system
|
|
42
|
-
* @summary Defines the default flavour used by the Decoration class when no specific flavour is provided.
|
|
43
|
-
* This constant is used throughout the library as the fallback flavour for decorators.
|
|
44
|
-
*
|
|
45
|
-
* @const {string}
|
|
46
|
-
* @memberOf module:decorator-validation
|
|
47
|
-
* @category Model
|
|
48
|
-
*/
|
|
49
|
-
exports.DefaultFlavour = "decaf";
|
|
50
37
|
//# sourceMappingURL=constants.js.map
|
package/lib/utils/constants.d.ts
CHANGED
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
* These keys are used throughout the library to store and retrieve metadata about models,
|
|
5
5
|
* their properties, and their behavior.
|
|
6
6
|
*
|
|
7
|
-
* @property {string} REFLECT - Prefix to all other keys, used as a namespace
|
|
8
7
|
* @property {string} TYPE - Key for storing design type information
|
|
9
|
-
* @property {string} PARAMS - Key for storing method parameter types
|
|
10
|
-
* @property {string} RETURN - Key for storing method return type
|
|
11
8
|
* @property {string} MODEL - Key for identifying model metadata
|
|
12
9
|
* @property {string} ANCHOR - Anchor key that serves as a ghost property in the model
|
|
13
10
|
* @property {string} CONSTRUCTION - Key for storing construction information
|
|
@@ -21,25 +18,14 @@
|
|
|
21
18
|
* @category Model
|
|
22
19
|
*/
|
|
23
20
|
export declare enum ModelKeys {
|
|
24
|
-
|
|
25
|
-
DESCRIPTION = "decaf.description.",
|
|
21
|
+
DESCRIPTION = "description",
|
|
26
22
|
TYPE = "design:type",
|
|
27
|
-
PARAMS = "design:paramtypes",
|
|
28
|
-
RETURN = "design:returntype",
|
|
29
23
|
MODEL = "model",
|
|
30
24
|
ANCHOR = "__model",
|
|
31
25
|
CONSTRUCTION = "constructed-by",
|
|
32
26
|
ATTRIBUTE = "__attributes",
|
|
33
27
|
HASHING = "hashing",
|
|
34
|
-
SERIALIZATION = "serialization"
|
|
28
|
+
SERIALIZATION = "serialization",
|
|
29
|
+
DECORATORS = "decorators",
|
|
30
|
+
CONSTRUCTOR = "__original"
|
|
35
31
|
}
|
|
36
|
-
/**
|
|
37
|
-
* @description Default flavour identifier for the decorator system
|
|
38
|
-
* @summary Defines the default flavour used by the Decoration class when no specific flavour is provided.
|
|
39
|
-
* This constant is used throughout the library as the fallback flavour for decorators.
|
|
40
|
-
*
|
|
41
|
-
* @const {string}
|
|
42
|
-
* @memberOf module:decorator-validation
|
|
43
|
-
* @category Model
|
|
44
|
-
*/
|
|
45
|
-
export declare const DefaultFlavour = "decaf";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA,qDAAsD;AACtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,wCAA6C,CAAA;IAC7C,iCAAsC,CAAA;IACtC,4BAAe,CAAA;IACf,+BAAkB,CAAA;IAClB,4CAA+B,CAAA;IAC/B,uCAA0B,CAAA;IAC1B,gCAAmB,CAAA;IACnB,4CAA+B,CAAA;IAC/B,sCAAyB,CAAA;IACzB,uCAA6C,CAAA;AAC/C,CAAC,EAXW,SAAS,yBAAT,SAAS,QAWpB"}
|
package/lib/utils/dates.cjs
CHANGED
|
@@ -6,7 +6,6 @@ exports.isValidDate = isValidDate;
|
|
|
6
6
|
exports.twoDigitPad = twoDigitPad;
|
|
7
7
|
exports.formatDate = formatDate;
|
|
8
8
|
exports.parseDate = parseDate;
|
|
9
|
-
require("reflect-metadata");
|
|
10
9
|
const constants_1 = require("./../validation/Validators/constants.cjs");
|
|
11
10
|
const strings_1 = require("./strings.cjs");
|
|
12
11
|
/**
|
package/lib/utils/dates.d.ts
CHANGED
package/lib/utils/dates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/utils/dates.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/utils/dates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEqual = isEqual;
|
|
4
|
+
/**
|
|
5
|
+
* @description Enhanced algorithm for deep comparison of any two values with optional ignored properties
|
|
6
|
+
* @summary Performs a deep equality check between two values, handling various types including primitives, objects, arrays, dates, and more
|
|
7
|
+
* @param {unknown} a - First value to compare
|
|
8
|
+
* @param {unknown} b - Second value to compare
|
|
9
|
+
* @param {string[]} propsToIgnore - A list of property names to ignore during comparison
|
|
10
|
+
* @return {boolean} Returns true if the values are deeply equal, false otherwise
|
|
11
|
+
* @function isEqual
|
|
12
|
+
* @mermaid
|
|
13
|
+
* sequenceDiagram
|
|
14
|
+
* participant Caller
|
|
15
|
+
* participant isEqual
|
|
16
|
+
* participant Recursion
|
|
17
|
+
*
|
|
18
|
+
* Caller->>isEqual: isEqual(a, b, propsToIgnore)
|
|
19
|
+
* Note over isEqual: Check simple cases (identity, null, primitives)
|
|
20
|
+
*
|
|
21
|
+
* alt a === b
|
|
22
|
+
* isEqual-->>Caller: true (with special case for +0/-0)
|
|
23
|
+
* else a or b is null
|
|
24
|
+
* isEqual-->>Caller: a === b
|
|
25
|
+
* else different types
|
|
26
|
+
* isEqual-->>Caller: false
|
|
27
|
+
* else both NaN
|
|
28
|
+
* isEqual-->>Caller: true
|
|
29
|
+
* else primitive types
|
|
30
|
+
* isEqual-->>Caller: a === b
|
|
31
|
+
* else both Date objects
|
|
32
|
+
* isEqual-->>Caller: Compare timestamps
|
|
33
|
+
* else both RegExp objects
|
|
34
|
+
* isEqual-->>Caller: Compare string representations
|
|
35
|
+
* else both Error objects
|
|
36
|
+
* isEqual-->>Caller: Compare name and message
|
|
37
|
+
* else both Arrays
|
|
38
|
+
* Note over isEqual: Check length
|
|
39
|
+
* loop For each element
|
|
40
|
+
* isEqual->>Recursion: isEqual(a[i], b[i], propsToIgnore)
|
|
41
|
+
* end
|
|
42
|
+
* else both Maps or Sets
|
|
43
|
+
* Note over isEqual: Compare size and entries
|
|
44
|
+
* else both TypedArrays
|
|
45
|
+
* Note over isEqual: Compare byte by byte
|
|
46
|
+
* else both Objects
|
|
47
|
+
* Note over isEqual: Filter keys by propsToIgnore
|
|
48
|
+
* Note over isEqual: Compare key counts
|
|
49
|
+
* loop For each key
|
|
50
|
+
* isEqual->>Recursion: isEqual(a[key], b[key], propsToIgnore)
|
|
51
|
+
* end
|
|
52
|
+
* Note over isEqual: Check Symbol properties
|
|
53
|
+
* Note over isEqual: Compare prototypes
|
|
54
|
+
* end
|
|
55
|
+
*
|
|
56
|
+
* isEqual-->>Caller: Comparison result
|
|
57
|
+
* @memberOf module:decorator-validation
|
|
58
|
+
*/
|
|
59
|
+
function isEqual(a, b, ...propsToIgnore) {
|
|
60
|
+
// Handle simple cases
|
|
61
|
+
if (a === b) {
|
|
62
|
+
// Special case for +0 and -0
|
|
63
|
+
return a !== 0 || 1 / a === 1 / b;
|
|
64
|
+
}
|
|
65
|
+
if (a == null || b == null)
|
|
66
|
+
return a === b;
|
|
67
|
+
if (typeof a !== typeof b)
|
|
68
|
+
return false;
|
|
69
|
+
// Handle NaN
|
|
70
|
+
if (Number.isNaN(a) && Number.isNaN(b))
|
|
71
|
+
return true;
|
|
72
|
+
// Handle primitive types
|
|
73
|
+
if (typeof a !== "object")
|
|
74
|
+
return a === b;
|
|
75
|
+
// Handle Date objects
|
|
76
|
+
if (a instanceof Date && b instanceof Date) {
|
|
77
|
+
// Check if both dates are invalid
|
|
78
|
+
if (isNaN(a.getTime()) && isNaN(b.getTime()))
|
|
79
|
+
return true;
|
|
80
|
+
return a.getTime() === b.getTime();
|
|
81
|
+
}
|
|
82
|
+
// Handle RegExp objects
|
|
83
|
+
if (a instanceof RegExp && b instanceof RegExp)
|
|
84
|
+
return a.toString() === b.toString();
|
|
85
|
+
// Handle Error objects
|
|
86
|
+
if (a instanceof Error && b instanceof Error) {
|
|
87
|
+
return a.name === b.name && a.message === b.message;
|
|
88
|
+
}
|
|
89
|
+
// Handle Array objects
|
|
90
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
91
|
+
if (a.length !== b.length)
|
|
92
|
+
return false;
|
|
93
|
+
for (let i = 0; i < a.length; i++) {
|
|
94
|
+
if (!isEqual(a[i], b[i], ...propsToIgnore))
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
// Handle Map objects
|
|
100
|
+
if (a instanceof Map && b instanceof Map) {
|
|
101
|
+
if (a.size !== b.size)
|
|
102
|
+
return false;
|
|
103
|
+
for (const [key, value] of a) {
|
|
104
|
+
if (!b.has(key) || !isEqual(value, b.get(key), ...propsToIgnore))
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
// Handle Set objects
|
|
110
|
+
if (a instanceof Set && b instanceof Set) {
|
|
111
|
+
if (a.size !== b.size)
|
|
112
|
+
return false;
|
|
113
|
+
for (const item of a) {
|
|
114
|
+
if (!b.has(item))
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
// Handle TypedArray objects
|
|
120
|
+
if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
|
|
121
|
+
if (a.byteLength !== b.byteLength)
|
|
122
|
+
return false;
|
|
123
|
+
if (a.byteOffset !== b.byteOffset)
|
|
124
|
+
return false;
|
|
125
|
+
if (a.buffer.byteLength !== b.buffer.byteLength)
|
|
126
|
+
return false;
|
|
127
|
+
const uint8A = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
|
|
128
|
+
const uint8B = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
|
|
129
|
+
for (let i = 0; i < uint8A.length; i++) {
|
|
130
|
+
if (uint8A[i] !== uint8B[i])
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// Handle other objects
|
|
136
|
+
const aKeys = Object.keys(a).filter((k) => !propsToIgnore.includes(k));
|
|
137
|
+
const bKeys = Object.keys(b).filter((k) => !propsToIgnore.includes(k));
|
|
138
|
+
if (aKeys.length !== bKeys.length)
|
|
139
|
+
return false;
|
|
140
|
+
for (const key of aKeys) {
|
|
141
|
+
if (!bKeys.includes(key))
|
|
142
|
+
return false;
|
|
143
|
+
if (!isEqual(a[key], b[key], ...propsToIgnore))
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
// Handle Symbol properties
|
|
147
|
+
const aSymbols = Object.getOwnPropertySymbols(a).filter((s) => !propsToIgnore.includes(s.toString()));
|
|
148
|
+
const bSymbols = Object.getOwnPropertySymbols(b).filter((s) => !propsToIgnore.includes(s.toString()));
|
|
149
|
+
if (aSymbols.length !== bSymbols.length)
|
|
150
|
+
return false;
|
|
151
|
+
for (const sym of aSymbols) {
|
|
152
|
+
if (!bSymbols.includes(sym))
|
|
153
|
+
return false;
|
|
154
|
+
if (!isEqual(a[sym], b[sym], ...propsToIgnore))
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
// Add this check right before the final return statement
|
|
158
|
+
if (Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=equality.js.map
|