@decaf-ts/decorator-validation 1.7.1 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +312 -20
- package/dist/decorator-validation.cjs +242 -94
- package/dist/decorator-validation.esm.cjs +242 -95
- package/lib/constants/validation.cjs +6 -8
- package/lib/constants/validation.d.ts +4 -6
- package/lib/esm/constants/validation.d.ts +4 -6
- package/lib/esm/constants/validation.js +6 -8
- package/lib/esm/index.d.ts +8 -1
- package/lib/esm/index.js +9 -2
- package/lib/esm/model/Model.d.ts +164 -40
- package/lib/esm/model/Model.js +165 -41
- package/lib/esm/model/construction.d.ts +4 -2
- package/lib/esm/model/construction.js +4 -2
- package/lib/esm/model/decorators.d.ts +25 -1
- package/lib/esm/model/decorators.js +26 -2
- package/lib/esm/model/types.d.ts +48 -31
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/utils/decorators.d.ts +7 -12
- package/lib/esm/utils/decorators.js +8 -13
- package/lib/esm/validation/Validators/decorators.d.ts +1 -1
- package/lib/esm/validation/Validators/decorators.js +2 -2
- package/lib/esm/validation/Validators/utils.d.ts +4 -0
- package/lib/esm/validation/Validators/utils.js +5 -1
- package/lib/esm/validation/decorators.d.ts +20 -26
- package/lib/esm/validation/decorators.js +21 -27
- package/lib/index.cjs +9 -2
- package/lib/index.d.ts +8 -1
- package/lib/model/Model.cjs +165 -41
- package/lib/model/Model.d.ts +164 -40
- package/lib/model/construction.cjs +4 -2
- package/lib/model/construction.d.ts +4 -2
- package/lib/model/decorators.cjs +26 -2
- package/lib/model/decorators.d.ts +25 -1
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +48 -31
- package/lib/utils/decorators.cjs +8 -13
- package/lib/utils/decorators.d.ts +7 -12
- package/lib/validation/Validators/decorators.cjs +2 -2
- package/lib/validation/Validators/decorators.d.ts +1 -1
- package/lib/validation/Validators/utils.cjs +5 -1
- package/lib/validation/Validators/utils.d.ts +4 -0
- package/lib/validation/decorators.cjs +21 -27
- package/lib/validation/decorators.d.ts +20 -26
- package/package.json +1 -1
package/lib/model/Model.d.ts
CHANGED
|
@@ -131,112 +131,236 @@ export declare function bulkModelRegister<M extends Model>(...models: (Construct
|
|
|
131
131
|
export declare abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model> {
|
|
132
132
|
protected constructor(arg?: ModelArg<Model>);
|
|
133
133
|
/**
|
|
134
|
-
* @
|
|
134
|
+
* @description Validates the model object against its defined validation rules
|
|
135
|
+
* @summary Validates the object according to its decorated properties, returning any validation errors
|
|
135
136
|
*
|
|
136
|
-
* @param {any[]} [exceptions]
|
|
137
|
+
* @param {any[]} [exceptions] - Properties in the object to be ignored for the validation. Marked as 'any' to allow for extension but expects strings
|
|
138
|
+
* @return {ModelErrorDefinition | undefined} - Returns a ModelErrorDefinition object if validation errors exist, otherwise undefined
|
|
137
139
|
*/
|
|
138
140
|
hasErrors(...exceptions: any[]): ModelErrorDefinition | undefined;
|
|
139
141
|
/**
|
|
140
|
-
* @
|
|
141
|
-
* @
|
|
142
|
-
*
|
|
142
|
+
* @description Determines if this model is equal to another object
|
|
143
|
+
* @summary Compare object equality recursively, checking all properties unless excluded
|
|
144
|
+
*
|
|
145
|
+
* @param {any} obj - Object to compare to
|
|
146
|
+
* @param {string[]} [exceptions] - Property names to be excluded from the comparison
|
|
147
|
+
* @return {boolean} - True if objects are equal, false otherwise
|
|
143
148
|
*/
|
|
144
149
|
equals(obj: any, ...exceptions: string[]): boolean;
|
|
145
150
|
/**
|
|
151
|
+
* @description Converts the model to a serialized string representation
|
|
146
152
|
* @summary Returns the serialized model according to the currently defined {@link Serializer}
|
|
153
|
+
*
|
|
154
|
+
* @return {string} - The serialized string representation of the model
|
|
147
155
|
*/
|
|
148
156
|
serialize(): string;
|
|
149
157
|
/**
|
|
150
|
-
* @
|
|
158
|
+
* @description Provides a human-readable string representation of the model
|
|
159
|
+
* @summary Override the implementation for js's 'toString()' to provide a more useful representation
|
|
160
|
+
*
|
|
161
|
+
* @return {string} - A string representation of the model including its class name and JSON representation
|
|
151
162
|
* @override
|
|
152
163
|
*/
|
|
153
164
|
toString(): string;
|
|
154
165
|
/**
|
|
155
|
-
* @
|
|
166
|
+
* @description Generates a hash string for the model object
|
|
167
|
+
* @summary Defines a default implementation for object hash, relying on a basic implementation based on Java's string hash
|
|
168
|
+
*
|
|
169
|
+
* @return {string} - A hash string representing the model
|
|
156
170
|
*/
|
|
157
171
|
hash(): string;
|
|
158
172
|
/**
|
|
159
|
-
* @
|
|
160
|
-
* @
|
|
173
|
+
* @description Converts a serialized string back into a model instance
|
|
174
|
+
* @summary Deserializes a Model from its string representation
|
|
161
175
|
*
|
|
176
|
+
* @param {string} str - The serialized string to convert back to a model
|
|
177
|
+
* @return {any} - The deserialized model instance
|
|
162
178
|
* @throws {Error} If it fails to parse the string, or if it fails to build the model
|
|
163
179
|
*/
|
|
164
180
|
static deserialize(str: string): any;
|
|
165
181
|
/**
|
|
182
|
+
* @description Copies properties from a source object to a model instance
|
|
166
183
|
* @summary Repopulates the Object properties with the ones from the new object
|
|
167
|
-
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
168
|
-
*
|
|
169
|
-
* @param {T} self
|
|
170
|
-
* @param {T | Record<string, any>} [obj]
|
|
171
184
|
*
|
|
185
|
+
* @template T
|
|
186
|
+
* @param {T} self - The target model instance to update
|
|
187
|
+
* @param {T | Record<string, any>} [obj] - The source object containing properties to copy
|
|
188
|
+
* @return {T} - The updated model instance
|
|
172
189
|
*/
|
|
173
190
|
static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
174
191
|
/**
|
|
175
|
-
* @
|
|
176
|
-
* @
|
|
177
|
-
* Is aware of nested Model Objects and rebuilds them also.
|
|
178
|
-
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
192
|
+
* @description Copies and rebuilds properties from a source object to a model instance, handling nested models
|
|
193
|
+
* @summary Repopulates the instance with properties from the new Model Object, recursively rebuilding nested models
|
|
179
194
|
*
|
|
180
|
-
* @
|
|
181
|
-
* @param {T
|
|
195
|
+
* @template T
|
|
196
|
+
* @param {T} self - The target model instance to update
|
|
197
|
+
* @param {T | Record<string, any>} [obj] - The source object containing properties to copy
|
|
198
|
+
* @return {T} - The updated model instance with rebuilt nested models
|
|
182
199
|
*
|
|
200
|
+
* @mermaid
|
|
201
|
+
* sequenceDiagram
|
|
202
|
+
* participant C as Client
|
|
203
|
+
* participant M as Model.fromModel
|
|
204
|
+
* participant B as Model.build
|
|
205
|
+
* participant R as Reflection
|
|
206
|
+
*
|
|
207
|
+
* C->>M: fromModel(self, obj)
|
|
208
|
+
* M->>M: Get attributes from self
|
|
209
|
+
* loop For each property
|
|
210
|
+
* M->>M: Copy property from obj to self
|
|
211
|
+
* alt Property is a model
|
|
212
|
+
* M->>M: Check if property is a model
|
|
213
|
+
* M->>B: build(property, modelType)
|
|
214
|
+
* B-->>M: Return built model
|
|
215
|
+
* else Property is a complex type
|
|
216
|
+
* M->>R: Get property decorators
|
|
217
|
+
* R-->>M: Return decorators
|
|
218
|
+
* M->>M: Filter type decorators
|
|
219
|
+
* alt Property is Array/Set with list decorator
|
|
220
|
+
* M->>M: Process each item in collection
|
|
221
|
+
* loop For each item
|
|
222
|
+
* M->>B: build(item, itemModelType)
|
|
223
|
+
* B-->>M: Return built model
|
|
224
|
+
* end
|
|
225
|
+
* else Property is another model type
|
|
226
|
+
* M->>B: build(property, propertyType)
|
|
227
|
+
* B-->>M: Return built model
|
|
228
|
+
* end
|
|
229
|
+
* end
|
|
230
|
+
* end
|
|
231
|
+
* M-->>C: Return updated self
|
|
183
232
|
*/
|
|
184
233
|
static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
185
234
|
/**
|
|
186
|
-
* @
|
|
187
|
-
* @
|
|
235
|
+
* @description Configures the global model builder function
|
|
236
|
+
* @summary Sets the Global {@link ModelBuilderFunction} used for building model instances
|
|
237
|
+
*
|
|
238
|
+
* @param {ModelBuilderFunction} [builder] - The builder function to set as the global builder
|
|
239
|
+
* @return {void}
|
|
188
240
|
*/
|
|
189
241
|
static setBuilder(builder?: ModelBuilderFunction): void;
|
|
190
242
|
/**
|
|
191
|
-
* @
|
|
243
|
+
* @description Retrieves the currently configured global model builder function
|
|
244
|
+
* @summary Returns the current global {@link ModelBuilderFunction} used for building model instances
|
|
245
|
+
*
|
|
246
|
+
* @return {ModelBuilderFunction | undefined} - The current global builder function or undefined if not set
|
|
192
247
|
*/
|
|
193
248
|
static getBuilder(): ModelBuilderFunction | undefined;
|
|
194
249
|
/**
|
|
195
|
-
*
|
|
250
|
+
* @description Provides access to the current model registry
|
|
251
|
+
* @summary Returns the current {@link ModelRegistryManager} instance, creating one if it doesn't exist
|
|
196
252
|
*
|
|
197
|
-
* @return ModelRegistry, defaults to {@link ModelRegistryManager}
|
|
253
|
+
* @return {ModelRegistry<any>} - The current model registry, defaults to a new {@link ModelRegistryManager} if not set
|
|
254
|
+
* @private
|
|
198
255
|
*/
|
|
199
256
|
private static getRegistry;
|
|
200
257
|
/**
|
|
201
|
-
*
|
|
258
|
+
* @description Configures the model registry to be used by the Model system
|
|
259
|
+
* @summary Sets the current model registry to a custom implementation
|
|
202
260
|
*
|
|
203
|
-
* @param {BuilderRegistry} modelRegistry
|
|
261
|
+
* @param {BuilderRegistry<any>} modelRegistry - The new implementation of Registry to use
|
|
262
|
+
* @return {void}
|
|
204
263
|
*/
|
|
205
264
|
static setRegistry(modelRegistry: BuilderRegistry<any>): void;
|
|
206
265
|
/**
|
|
207
|
-
* @
|
|
208
|
-
* @
|
|
209
|
-
*
|
|
266
|
+
* @description Registers a model constructor with the model registry
|
|
267
|
+
* @summary Registers new model classes to make them available for serialization and deserialization
|
|
268
|
+
*
|
|
269
|
+
* @template T
|
|
270
|
+
* @param {ModelConstructor<T>} constructor - The model constructor to register
|
|
271
|
+
* @param {string} [name] - Optional name to register the constructor under, defaults to constructor.name
|
|
272
|
+
* @return {void}
|
|
210
273
|
*
|
|
211
274
|
* @see ModelRegistry
|
|
212
275
|
*/
|
|
213
276
|
static register<T extends Model>(constructor: ModelConstructor<T>, name?: string): void;
|
|
214
277
|
/**
|
|
215
|
-
* @
|
|
216
|
-
* @
|
|
278
|
+
* @description Retrieves a registered model constructor by name
|
|
279
|
+
* @summary Gets a registered Model {@link ModelConstructor} from the model registry
|
|
280
|
+
*
|
|
281
|
+
* @template T
|
|
282
|
+
* @param {string} name - The name of the model constructor to retrieve
|
|
283
|
+
* @return {ModelConstructor<T> | undefined} - The model constructor if found, undefined otherwise
|
|
217
284
|
*
|
|
218
285
|
* @see ModelRegistry
|
|
219
286
|
*/
|
|
220
287
|
static get<T extends Model>(name: string): ModelConstructor<T> | undefined;
|
|
221
288
|
/**
|
|
222
|
-
* @
|
|
223
|
-
* @
|
|
289
|
+
* @description Creates a model instance from a plain object
|
|
290
|
+
* @summary Builds a model instance using the model registry, optionally specifying the model class
|
|
224
291
|
*
|
|
225
|
-
* @
|
|
292
|
+
* @template T
|
|
293
|
+
* @param {Record<string, any>} obj - The source object to build the model from
|
|
294
|
+
* @param {string} [clazz] - When provided, it will attempt to find the matching constructor by name
|
|
295
|
+
* @return {T} - The built model instance
|
|
296
|
+
* @throws {Error} If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
|
|
226
297
|
*
|
|
227
298
|
* @see ModelRegistry
|
|
228
299
|
*/
|
|
229
300
|
static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
|
|
301
|
+
/**
|
|
302
|
+
* @description Retrieves the model metadata from a model instance
|
|
303
|
+
* @summary Gets the metadata associated with a model instance, typically the model class name
|
|
304
|
+
*
|
|
305
|
+
* @template M
|
|
306
|
+
* @param {M} model - The model instance to get metadata from
|
|
307
|
+
* @return {string} - The model metadata (typically the class name)
|
|
308
|
+
*/
|
|
230
309
|
static getMetadata<M extends Model>(model: M): any;
|
|
310
|
+
/**
|
|
311
|
+
* @description Retrieves all attribute names from a model class or instance
|
|
312
|
+
* @summary Gets all attributes defined in a model, traversing the prototype chain to include inherited attributes
|
|
313
|
+
*
|
|
314
|
+
* @template V
|
|
315
|
+
* @param {Constructor<V> | V} model - The model class or instance to get attributes from
|
|
316
|
+
* @return {string[]} - Array of attribute names defined in the model
|
|
317
|
+
*/
|
|
231
318
|
static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
|
|
319
|
+
/**
|
|
320
|
+
* @description Compares two model instances for equality
|
|
321
|
+
* @summary Determines if two model instances are equal by comparing their properties
|
|
322
|
+
*
|
|
323
|
+
* @template M
|
|
324
|
+
* @param {M} obj1 - First model instance to compare
|
|
325
|
+
* @param {M} obj2 - Second model instance to compare
|
|
326
|
+
* @param {any[]} [exceptions] - Property names to exclude from comparison
|
|
327
|
+
* @return {boolean} - True if the models are equal, false otherwise
|
|
328
|
+
*/
|
|
232
329
|
static equals<M extends Model>(obj1: M, obj2: M, ...exceptions: any[]): boolean;
|
|
330
|
+
/**
|
|
331
|
+
* @description Validates a model instance against its validation rules
|
|
332
|
+
* @summary Checks if a model has validation errors, optionally ignoring specified properties
|
|
333
|
+
*
|
|
334
|
+
* @template M
|
|
335
|
+
* @param {M} model - The model instance to validate
|
|
336
|
+
* @param {string[]} [propsToIgnore] - Properties to exclude from validation
|
|
337
|
+
* @return {ModelErrorDefinition | undefined} - Returns validation errors if any, otherwise undefined
|
|
338
|
+
*/
|
|
233
339
|
static hasErrors<M extends Model>(model: M, ...propsToIgnore: string[]): ModelErrorDefinition | undefined;
|
|
340
|
+
/**
|
|
341
|
+
* @description Converts a model instance to a serialized string
|
|
342
|
+
* @summary Serializes a model instance using the configured serializer or the default one
|
|
343
|
+
*
|
|
344
|
+
* @template M
|
|
345
|
+
* @param {M} model - The model instance to serialize
|
|
346
|
+
* @return {string} - The serialized string representation of the model
|
|
347
|
+
*/
|
|
234
348
|
static serialize<M extends Model>(model: M): any;
|
|
349
|
+
/**
|
|
350
|
+
* @description Generates a hash string for a model instance
|
|
351
|
+
* @summary Creates a hash representation of a model using the configured algorithm or the default one
|
|
352
|
+
*
|
|
353
|
+
* @template M
|
|
354
|
+
* @param {M} model - The model instance to hash
|
|
355
|
+
* @return {string} - The hash string representing the model
|
|
356
|
+
*/
|
|
235
357
|
static hash<M extends Model>(model: M): any;
|
|
236
358
|
/**
|
|
359
|
+
* @description Creates a metadata key for use with the Reflection API
|
|
237
360
|
* @summary Builds the key to store as Metadata under Reflections
|
|
238
|
-
*
|
|
239
|
-
* @param {string} str
|
|
361
|
+
*
|
|
362
|
+
* @param {string} str - The base key to concatenate with the model reflection prefix
|
|
363
|
+
* @return {string} - The complete metadata key
|
|
240
364
|
*/
|
|
241
365
|
static key(str: string): string;
|
|
242
366
|
/**
|
|
@@ -264,12 +388,12 @@ export declare abstract class Model implements Validatable, Serializable, Hashab
|
|
|
264
388
|
/**
|
|
265
389
|
* @description Checks if a property of a model is itself a model or has a model type
|
|
266
390
|
* @summary Determines whether a specific property of a model instance is either a model instance
|
|
267
|
-
* or has a type that is registered as a model
|
|
268
|
-
*
|
|
269
|
-
* @template M
|
|
391
|
+
* or has a type that is registered as a model
|
|
392
|
+
*
|
|
393
|
+
* @template M
|
|
270
394
|
* @param {M} target - The model instance to check
|
|
271
395
|
* @param {string} attribute - The property name to check
|
|
272
|
-
* @return {boolean | string | undefined} Returns true if the property is a model instance,
|
|
396
|
+
* @return {boolean | string | undefined} - Returns true if the property is a model instance,
|
|
273
397
|
* the model name if the property has a model type, or undefined if not a model
|
|
274
398
|
*/
|
|
275
399
|
static isPropertyModel<M extends Model>(target: M, attribute: string): boolean | string | undefined;
|
|
@@ -7,9 +7,11 @@ const Model_1 = require("./Model.cjs");
|
|
|
7
7
|
/**
|
|
8
8
|
* @summary Helper Function to override constructors
|
|
9
9
|
*
|
|
10
|
+
* @template M the model instance type
|
|
11
|
+
*
|
|
10
12
|
* @param {Function} constructor
|
|
11
13
|
* @param {any[]} [args]
|
|
12
|
-
* @return {
|
|
14
|
+
* @return {M} the new instance
|
|
13
15
|
*
|
|
14
16
|
* @function construct
|
|
15
17
|
* @memberOf module:decorator-validation
|
|
@@ -66,4 +68,4 @@ function bindModelPrototype(obj) {
|
|
|
66
68
|
}
|
|
67
69
|
throw new Error("Could not find proper prototype to bind");
|
|
68
70
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLDhCQU9DO0FBU0QsOERBU0M7QUFVRCxnREFxQkM7QUF0RUQsdUNBQWdDO0FBRWhDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixXQUFnQixFQUNoQixHQUFHLElBQVc7SUFFZCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxHQUFXO0lBQ25ELElBQUksU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsR0FBWTtJQUM3QyxJQUFJLEdBQUcsWUFBWSxhQUFLO1FBQUUsT0FBTztJQUVqQyxTQUFTLGFBQWEsQ0FBQyxhQUFzQixFQUFFLFNBQWlCO1FBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBUSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsYUFBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUNFLElBQUksS0FBSyxNQUFNLENBQUMsU0FBUztZQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQ2hELENBQUM7WUFDRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIEZ1bmN0aW9uIHRvIG92ZXJyaWRlIGNvbnN0cnVjdG9yc1xuICpcbiAqIEB0ZW1wbGF0ZSBNIHRoZSBtb2RlbCBpbnN0YW5jZSB0eXBlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICogQHJldHVybiB7TX0gdGhlIG5ldyBpbnN0YW5jZVxuICpcbiAqIEBmdW5jdGlvbiBjb25zdHJ1Y3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdDxNIGV4dGVuZHMgTW9kZWw+KFxuICBjb25zdHJ1Y3RvcjogYW55LFxuICAuLi5hcmdzOiBhbnlbXVxuKTogTSB7XG4gIGNvbnN0IF9jb25zdHIgPSAoLi4uYXJnejogYW55W10pID0+IG5ldyBjb25zdHJ1Y3RvciguLi5hcmd6KTtcbiAgX2NvbnN0ci5wcm90b3R5cGUgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBfY29uc3RyKC4uLmFyZ3MpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlY3Vyc2l2ZWx5IGZpbmRzIHRoZSBsYXN0IHByb3RvdHlwZSBiZWZvcmUgT2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKlxuICogQGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3Qob2JqOiBvYmplY3QpOiBvYmplY3Qge1xuICBsZXQgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIG9iajtcbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGVcIik7XG59XG5cbi8qKlxuICogQHN1bWFyeSBiaW5kcyB0aGUge0BsaW5rIE1vZGVsfSBjbGFzcyBhcyBhIHJvb3QgcHJvdG90eXBlIG9mIHRoZSBwcm92aWRlZCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gb2JqXG4gKlxuICogQGZ1bmN0aW9uIGJpbmRNb2RlbFByb3RvdHlwZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZE1vZGVsUHJvdG90eXBlKG9iajogdW5rbm93bikge1xuICBpZiAob2JqIGluc3RhbmNlb2YgTW9kZWwpIHJldHVybjtcblxuICBmdW5jdGlvbiBiaW5kUHJvdG90eXBlKG9ialRvT3ZlcnJpZGU6IHVua25vd24sIHByb3RvdHlwZTogb2JqZWN0KSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9ialRvT3ZlcnJpZGUsIHByb3RvdHlwZSk7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGU6IGFueSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGJpbmRQcm90b3R5cGUob2JqLCBNb2RlbC5wcm90b3R5cGUpO1xuICB9XG4gIHdoaWxlIChwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBwcm90ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgaWYgKFxuICAgICAgcHJvdCA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3QpID09PSBPYmplY3QucHJvdG90eXBlXG4gICAgKSB7XG4gICAgICByZXR1cm4gYmluZFByb3RvdHlwZShwcm90b3R5cGUsIE1vZGVsLnByb3RvdHlwZSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGUgdG8gYmluZFwiKTtcbn1cbiJdfQ==
|
|
@@ -2,14 +2,16 @@ import { Model } from "./Model";
|
|
|
2
2
|
/**
|
|
3
3
|
* @summary Helper Function to override constructors
|
|
4
4
|
*
|
|
5
|
+
* @template M the model instance type
|
|
6
|
+
*
|
|
5
7
|
* @param {Function} constructor
|
|
6
8
|
* @param {any[]} [args]
|
|
7
|
-
* @return {
|
|
9
|
+
* @return {M} the new instance
|
|
8
10
|
*
|
|
9
11
|
* @function construct
|
|
10
12
|
* @memberOf module:decorator-validation
|
|
11
13
|
*/
|
|
12
|
-
export declare function construct<
|
|
14
|
+
export declare function construct<M extends Model>(constructor: any, ...args: any[]): M;
|
|
13
15
|
/**
|
|
14
16
|
* @summary Recursively finds the last prototype before Object
|
|
15
17
|
* @param {object} obj
|
package/lib/model/decorators.cjs
CHANGED
|
@@ -20,7 +20,7 @@ const reflection_1 = require("@decaf-ts/reflection");
|
|
|
20
20
|
*
|
|
21
21
|
* @function model
|
|
22
22
|
*
|
|
23
|
-
* @category Decorators
|
|
23
|
+
* @category Class Decorators
|
|
24
24
|
*/
|
|
25
25
|
function model(instanceCallback) {
|
|
26
26
|
return ((original) => {
|
|
@@ -55,16 +55,40 @@ function model(instanceCallback) {
|
|
|
55
55
|
return newConstructor;
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* @summary Defines the hashing algorithm to use on the model
|
|
60
|
+
* @description
|
|
61
|
+
*
|
|
62
|
+
* - Registers the class under the model registry so it can be easily rebuilt;
|
|
63
|
+
* - Overrides the class constructor;
|
|
64
|
+
* - Runs the global {@link ModelBuilderFunction} if defined;
|
|
65
|
+
* - Runs the optional {@link InstanceCallback} if provided;
|
|
66
|
+
*
|
|
67
|
+
* @param {string} algorithm the algorithm to use
|
|
68
|
+
*
|
|
69
|
+
* @function hashedBy
|
|
70
|
+
*
|
|
71
|
+
* @category Class Decorators
|
|
72
|
+
*/
|
|
58
73
|
function hashedBy(algorithm, ...args) {
|
|
59
74
|
return (0, reflection_1.metadata)(Model_1.Model.key(constants_1.ModelKeys.HASHING), {
|
|
60
75
|
algorithm: algorithm,
|
|
61
76
|
args: args,
|
|
62
77
|
});
|
|
63
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* @summary Defines the serialization algorithm to use on the model
|
|
81
|
+
*
|
|
82
|
+
* @param {string} serializer the algorithm to use
|
|
83
|
+
*
|
|
84
|
+
* @function serializedBy
|
|
85
|
+
*
|
|
86
|
+
* @category Class Decorators
|
|
87
|
+
*/
|
|
64
88
|
function serializedBy(serializer, ...args) {
|
|
65
89
|
return (0, reflection_1.metadata)(Model_1.Model.key(constants_1.ModelKeys.SERIALIZATION), {
|
|
66
90
|
serializer: serializer,
|
|
67
91
|
args: args,
|
|
68
92
|
});
|
|
69
93
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEJBLHNCQTZDQztBQWlCRCw0QkFLQztBQVdELG9DQUtDO0FBL0dELHFEQUErRDtBQUMvRCx3REFBK0M7QUFDL0MsdUNBQWdDO0FBQ2hDLHFEQUFnRDtBQVVoRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLEtBQUssQ0FBQyxnQkFBbUM7SUFDdkQsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDeEIsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFRLFVBQVUsR0FBRyxJQUFXO1lBQ2xELE1BQU0sUUFBUSxHQUFnQyxJQUFBLHdCQUFTLEVBQ3JELFFBQVEsRUFDUixHQUFHLElBQUksQ0FDUixDQUFDO1lBQ0YsSUFBQSxpQ0FBa0IsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUM3QiwyRUFBMkU7WUFDM0UsTUFBTSxPQUFPLEdBQUcsYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbEUsSUFBQSxxQkFBUSxFQUFDLGFBQUssQ0FBQyxHQUFHLENBQUMscUJBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTFFLElBQUksZ0JBQWdCO2dCQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTFELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLG9EQUFvRDtRQUNwRCxjQUFjLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFFOUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoRCxPQUFPLENBQUMsY0FBYyxDQUNwQixHQUFHLEVBQ0gsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQ2xDLGNBQWMsQ0FDZixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCx5REFBeUQ7UUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO1lBQzVDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBQSxxQkFBUSxFQUFDLGFBQUssQ0FBQyxHQUFHLENBQUMscUJBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsYUFBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlDLGtEQUFrRDtRQUNsRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQVEsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxTQUFpQixFQUFFLEdBQUcsSUFBVztJQUN4RCxPQUFPLElBQUEscUJBQVEsRUFBQyxhQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixZQUFZLENBQUMsVUFBa0IsRUFBRSxHQUFHLElBQVc7SUFDN0QsT0FBTyxJQUFBLHFCQUFRLEVBQUMsYUFBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ2xELFVBQVUsRUFBRSxVQUFVO1FBQ3RCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpbmRNb2RlbFByb3RvdHlwZSwgY29uc3RydWN0IH0gZnJvbSBcIi4vY29uc3RydWN0aW9uXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IGRlZmluZXMgdGhlIHRwZSBvcyBhbiBJbnN0YW5jZUNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlQ2FsbGJhY2sgPSAoaW5zdGFuY2U6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGEgTW9kZWwgY2xhc3NcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIC0gUmVnaXN0ZXJzIHRoZSBjbGFzcyB1bmRlciB0aGUgbW9kZWwgcmVnaXN0cnkgc28gaXQgY2FuIGJlIGVhc2lseSByZWJ1aWx0O1xuICogLSBPdmVycmlkZXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yO1xuICogLSBSdW5zIHRoZSBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufSBpZiBkZWZpbmVkO1xuICogLSBSdW5zIHRoZSBvcHRpb25hbCB7QGxpbmsgSW5zdGFuY2VDYWxsYmFja30gaWYgcHJvdmlkZWQ7XG4gKlxuICogQHBhcmFtIHtJbnN0YW5jZUNhbGxiYWNrfSBbaW5zdGFuY2VDYWxsYmFja10gb3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSB1cG9uIGluc3RhbnRpYXRpb24uIGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICpcbiAqIEBmdW5jdGlvbiBtb2RlbFxuICpcbiAqIEBjYXRlZ29yeSBDbGFzcyBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbChpbnN0YW5jZUNhbGxiYWNrPzogSW5zdGFuY2VDYWxsYmFjaykge1xuICByZXR1cm4gKChvcmlnaW5hbDogYW55KSA9PiB7XG4gICAgLy8gdGhlIG5ldyBjb25zdHJ1Y3RvciBiZWhhdmlvdXJcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogUmV0dXJuVHlwZTx0eXBlb2Ygb3JpZ2luYWw+ID0gY29uc3RydWN0KFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICAgIGJpbmRNb2RlbFByb3RvdHlwZShpbnN0YW5jZSk7XG4gICAgICAvLyBydW4gYSBidWlsZGVyIGZ1bmN0aW9uIGlmIGRlZmluZWQgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgKFRoZSBNb2RlbEFyZylcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBNb2RlbC5nZXRCdWlsZGVyKCk7XG4gICAgICBpZiAoYnVpbGRlcikgYnVpbGRlcihpbnN0YW5jZSwgYXJncy5sZW5ndGggPyBhcmdzWzBdIDogdW5kZWZpbmVkKTtcblxuICAgICAgbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5NT0RFTCksIG9yaWdpbmFsLm5hbWUpKGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcblxuICAgICAgaWYgKGluc3RhbmNlQ2FsbGJhY2spIGluc3RhbmNlQ2FsbGJhY2soaW5zdGFuY2UsIC4uLmFyZ3MpO1xuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIGNvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGU7XG5cbiAgICBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhvcmlnaW5hbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICBrZXksXG4gICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoa2V5LCBvcmlnaW5hbCksXG4gICAgICAgIG5ld0NvbnN0cnVjdG9yXG4gICAgICApO1xuICAgIH0pO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5NT0RFTCksIG9yaWdpbmFsLm5hbWUpKG9yaWdpbmFsKTtcblxuICAgIE1vZGVsLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBvcmlnaW5hbC5uYW1lKTtcblxuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9KSBhcyBhbnk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgaGFzaGluZyBhbGdvcml0aG0gdG8gdXNlIG9uIHRoZSBtb2RlbFxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogLSBSZWdpc3RlcnMgdGhlIGNsYXNzIHVuZGVyIHRoZSBtb2RlbCByZWdpc3RyeSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlYnVpbHQ7XG4gKiAtIE92ZXJyaWRlcyB0aGUgY2xhc3MgY29uc3RydWN0b3I7XG4gKiAtIFJ1bnMgdGhlIGdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259IGlmIGRlZmluZWQ7XG4gKiAtIFJ1bnMgdGhlIG9wdGlvbmFsIHtAbGluayBJbnN0YW5jZUNhbGxiYWNrfSBpZiBwcm92aWRlZDtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxnb3JpdGhtIHRoZSBhbGdvcml0aG0gdG8gdXNlXG4gKlxuICogQGZ1bmN0aW9uIGhhc2hlZEJ5XG4gKlxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hlZEJ5KGFsZ29yaXRobTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5IQVNISU5HKSwge1xuICAgIGFsZ29yaXRobTogYWxnb3JpdGhtLFxuICAgIGFyZ3M6IGFyZ3MsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIHRvIHVzZSBvbiB0aGUgbW9kZWxcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VyaWFsaXplciB0aGUgYWxnb3JpdGhtIHRvIHVzZVxuICpcbiAqIEBmdW5jdGlvbiBzZXJpYWxpemVkQnlcbiAqXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplZEJ5KHNlcmlhbGl6ZXI6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgcmV0dXJuIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuU0VSSUFMSVpBVElPTiksIHtcbiAgICBzZXJpYWxpemVyOiBzZXJpYWxpemVyLFxuICAgIGFyZ3M6IGFyZ3MsXG4gIH0pO1xufVxuIl19
|
|
@@ -18,8 +18,32 @@ export type InstanceCallback = (instance: any, ...args: any[]) => void;
|
|
|
18
18
|
*
|
|
19
19
|
* @function model
|
|
20
20
|
*
|
|
21
|
-
* @category Decorators
|
|
21
|
+
* @category Class Decorators
|
|
22
22
|
*/
|
|
23
23
|
export declare function model(instanceCallback?: InstanceCallback): any;
|
|
24
|
+
/**
|
|
25
|
+
* @summary Defines the hashing algorithm to use on the model
|
|
26
|
+
* @description
|
|
27
|
+
*
|
|
28
|
+
* - Registers the class under the model registry so it can be easily rebuilt;
|
|
29
|
+
* - Overrides the class constructor;
|
|
30
|
+
* - Runs the global {@link ModelBuilderFunction} if defined;
|
|
31
|
+
* - Runs the optional {@link InstanceCallback} if provided;
|
|
32
|
+
*
|
|
33
|
+
* @param {string} algorithm the algorithm to use
|
|
34
|
+
*
|
|
35
|
+
* @function hashedBy
|
|
36
|
+
*
|
|
37
|
+
* @category Class Decorators
|
|
38
|
+
*/
|
|
24
39
|
export declare function hashedBy(algorithm: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
40
|
+
/**
|
|
41
|
+
* @summary Defines the serialization algorithm to use on the model
|
|
42
|
+
*
|
|
43
|
+
* @param {string} serializer the algorithm to use
|
|
44
|
+
*
|
|
45
|
+
* @function serializedBy
|
|
46
|
+
*
|
|
47
|
+
* @category Class Decorators
|
|
48
|
+
*/
|
|
25
49
|
export declare function serializedBy(serializer: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
package/lib/model/types.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdHlwZSBmb3IgYnVpbGRpbmcgbW9kZWwgaW5zdGFuY2VzIGZyb20gb2JqZWN0c1xuICogQHN1bW1hcnkgVHlwZSBkZWZpbml0aW9uIGZvciBhIG1vZGVsIGJ1aWxkZXIgZnVuY3Rpb24gdGhhdCBwb3B1bGF0ZXMgbW9kZWwgcHJvcGVydGllc1xuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gc2VsZiAtIFRoZSB0YXJnZXQgbW9kZWwgaW5zdGFuY2UgdG8gcG9wdWxhdGVcbiAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdIC0gVGhlIHNvdXJjZSBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHRvIGNvcHlcbiAqIEByZXR1cm4ge1R9IC0gVGhlIHBvcHVsYXRlZCBtb2RlbCBpbnN0YW5jZVxuICogQHR5cGVkZWYgTW9kZWxCdWlsZGVyRnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxCdWlsZGVyRnVuY3Rpb24gPSA8VCBleHRlbmRzIE1vZGVsPihcbiAgc2VsZjogVCxcbiAgb2JqPzogVCB8IFJlY29yZDxzdHJpbmcsIGFueT5cbikgPT4gVDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSByZXByZXNlbnRpbmcgdmFsaWQgYXJndW1lbnQgdHlwZXMgZm9yIG1vZGVsIGNvbnN0cnVjdG9yc1xuICogQHN1bW1hcnkgRGVmaW5pdGlvbiBvZiBhIE1vZGVsIENvbnN0cnVjdG9yIEFyZ3VtZW50IHRoYXQgY2FuIGJlIGEgY29tcGxldGUgbW9kZWwsIHBhcnRpYWwgbW9kZWwsIG9yIHBsYWluIG9iamVjdFxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIE1vZGVsQXJnXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAc2VlIE1vZGVsQ29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxBcmc8VD4gPSBUIHwgUGFydGlhbDxUPiB8IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgY2xhc3MgY29uc3RydWN0b3IgZnVuY3Rpb25zXG4gKiBAc3VtbWFyeSBEZWZpbml0aW9uIG9mIGEgQ2xhc3MgQ29uc3RydWN0b3IgdGhhdCBjYW4gY3JlYXRlIGluc3RhbmNlcyBvZiBhIHNwZWNpZmllZCB0eXBlXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQ29uc3RydWN0b3IgYXJndW1lbnRzXG4gKiBAcmV0dXJuIHtUfSAtIEFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuICogQHR5cGVkZWYgQ29uc3RydWN0b3JcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VD4gPSB7XG4gIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3BlY2lhbGl6ZWQgY29uc3RydWN0b3IgdHlwZSBmb3IgTW9kZWwgY2xhc3Nlc1xuICogQHN1bW1hcnkgRGVmaW5pdGlvbiBvZiBhIE1vZGVsIENvbnN0cnVjdG9yIHRoYXQgY3JlYXRlcyBpbnN0YW5jZXMgb2YgTW9kZWwgc3ViY2xhc3Nlc1xuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7TW9kZWxBcmc8VD59IFttb2RlbF0gLSBJbml0aWFsIGRhdGEgdG8gcG9wdWxhdGUgdGhlIG1vZGVsIHdpdGhcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFkZGl0aW9uYWwgY29uc3RydWN0b3IgYXJndW1lbnRzXG4gKiBAcmV0dXJuIHtUfSAtIEFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBjbGFzc1xuICogQHR5cGVkZWYgTW9kZWxDb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbENvbnN0cnVjdG9yPFQgZXh0ZW5kcyBNb2RlbD4gPSB7XG4gIG5ldyAobW9kZWw/OiBNb2RlbEFyZzxUPiwgLi4uYXJnczogYW55W10pOiBUO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGJlIHZhbGlkYXRlZFxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRhYmxlIG1vZGVsc1xuICogQGludGVyZmFjZSBWYWxpZGF0YWJsZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGFibGUge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlcyB0aGUgb2JqZWN0IGFnYWluc3QgaXRzIHZhbGlkYXRpb24gcnVsZXNcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcmV0dXJucyB0aGUge0BsaW5rIE1vZGVsRXJyb3JEZWZpbml0aW9ufSBpZiBhbnkgZXJyb3JzIGV4aXN0XG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBjb250cm9sIHZhbGlkYXRpb24gYmVoYXZpb3JcbiAgICogQHJldHVybiB7TW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWR9IC0gVmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55LCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGhhc0Vycm9ycyguLi5hcmdzOiBhbnlbXSk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCB0byBzdHJpbmdcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHNlcmlhbGl6YXRpb24gQVBJIGZvciBtb2RlbCBvYmplY3RzXG4gKiBAaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgb2JqZWN0IHRvIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHN1bW1hcnkgU2VyaWFsaXplcyB0aGUgbW9kZWwgdG8gYSBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gLSBUaGUgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQG1ldGhvZFxuICAgKi9cbiAgc2VyaWFsaXplKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGdlbmVyYXRlIGEgaGFzaCByZXByZXNlbnRhdGlvblxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgaGFzaGluZyBBUEkgZm9yIG1vZGVsIG9iamVjdHNcbiAqIEBpbnRlcmZhY2UgSGFzaGFibGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hhYmxlIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSB1bmlxdWUgaGFzaCBzdHJpbmcgZm9yIHRoZSBvYmplY3RcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIGhhc2ggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSAtIEhhc2ggdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBvYmplY3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaGFzaCgpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBjb21wYXJlZCB3aXRoIG90aGVyIG9iamVjdHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24gQVBJIGZvciBtb2RlbCBvYmplY3RzXG4gKiBAdGVtcGxhdGUgVFxuICogQGludGVyZmFjZSBDb21wYXJhYmxlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wYXJhYmxlPFQ+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIHRoaXMgb2JqZWN0IGlzIGVxdWFsIHRvIGFub3RoZXIgb2JqZWN0XG4gICAqIEBzdW1tYXJ5IENvbXBhcmVzIHRoaXMgb2JqZWN0IHdpdGggYW5vdGhlciBmb3IgZXF1YWxpdHlcbiAgICogQHBhcmFtIHtUfSBvdGhlciAtIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciBjb21wYXJpc29uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gVHJ1ZSBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBlcXVhbHMob3RoZXI6IFQsIC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbjtcbn1cbiJdfQ==
|
package/lib/model/types.d.ts
CHANGED
|
@@ -1,98 +1,115 @@
|
|
|
1
1
|
import { ModelErrorDefinition } from "./ModelErrorDefinition";
|
|
2
2
|
import { Model } from "./Model";
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
4
|
+
* @description Function type for building model instances from objects
|
|
5
|
+
* @summary Type definition for a model builder function that populates model properties
|
|
6
|
+
* @template T
|
|
7
|
+
* @param {T} self - The target model instance to populate
|
|
8
|
+
* @param {T | Record<string, any>} [obj] - The source object containing properties to copy
|
|
9
|
+
* @return {T} - The populated model instance
|
|
10
|
+
* @typedef ModelBuilderFunction
|
|
5
11
|
* @memberOf module:decorator-validation
|
|
6
12
|
*/
|
|
7
13
|
export type ModelBuilderFunction = <T extends Model>(self: T, obj?: T | Record<string, any>) => T;
|
|
8
14
|
/**
|
|
9
|
-
* @
|
|
10
|
-
*
|
|
15
|
+
* @description Type representing valid argument types for model constructors
|
|
16
|
+
* @summary Definition of a Model Constructor Argument that can be a complete model, partial model, or plain object
|
|
17
|
+
* @template T
|
|
18
|
+
* @typedef ModelArg
|
|
11
19
|
* @memberOf module:decorator-validation
|
|
12
|
-
*
|
|
13
20
|
* @see ModelConstructor
|
|
14
21
|
*/
|
|
15
22
|
export type ModelArg<T> = T | Partial<T> | Record<string, any>;
|
|
16
23
|
/**
|
|
17
|
-
* @
|
|
18
|
-
* @
|
|
19
|
-
*
|
|
24
|
+
* @description Generic type for class constructor functions
|
|
25
|
+
* @summary Definition of a Class Constructor that can create instances of a specified type
|
|
26
|
+
* @template T
|
|
27
|
+
* @param {any[]} [args] - Constructor arguments
|
|
28
|
+
* @return {T} - An instance of the class
|
|
20
29
|
* @typedef Constructor
|
|
21
|
-
*
|
|
22
|
-
* @param {any[]} [args]
|
|
23
30
|
* @memberOf module:decorator-validation
|
|
24
31
|
*/
|
|
25
32
|
export type Constructor<T> = {
|
|
26
33
|
new (...args: any[]): T;
|
|
27
34
|
};
|
|
28
35
|
/**
|
|
29
|
-
* @
|
|
30
|
-
* @
|
|
31
|
-
*
|
|
36
|
+
* @description Specialized constructor type for Model classes
|
|
37
|
+
* @summary Definition of a Model Constructor that creates instances of Model subclasses
|
|
38
|
+
* @template T
|
|
39
|
+
* @param {ModelArg<T>} [model] - Initial data to populate the model with
|
|
40
|
+
* @param {any[]} [args] - Additional constructor arguments
|
|
41
|
+
* @return {T} - An instance of the model class
|
|
32
42
|
* @typedef ModelConstructor
|
|
33
|
-
*
|
|
34
|
-
* @param {ModelArg<T>} [model]
|
|
35
|
-
* @param {any[]} [args]
|
|
36
43
|
* @memberOf module:decorator-validation
|
|
37
44
|
*/
|
|
38
45
|
export type ModelConstructor<T extends Model> = {
|
|
39
46
|
new (model?: ModelArg<T>, ...args: any[]): T;
|
|
40
47
|
};
|
|
41
48
|
/**
|
|
49
|
+
* @description Interface for objects that can be validated
|
|
42
50
|
* @summary Defines the Validation API for validatable models
|
|
43
51
|
* @interface Validatable
|
|
44
|
-
*
|
|
52
|
+
* @memberOf module:decorator-validation
|
|
45
53
|
* @category Model
|
|
46
54
|
*/
|
|
47
55
|
export interface Validatable {
|
|
48
56
|
/**
|
|
49
|
-
* @
|
|
50
|
-
* @
|
|
51
|
-
*
|
|
57
|
+
* @description Validates the object against its validation rules
|
|
58
|
+
* @summary Validates the model and returns the {@link ModelErrorDefinition} if any errors exist
|
|
59
|
+
* @param {any[]} [args] - Optional arguments to control validation behavior
|
|
60
|
+
* @return {ModelErrorDefinition | undefined} - Validation errors if any, otherwise undefined
|
|
52
61
|
* @method
|
|
53
62
|
*/
|
|
54
63
|
hasErrors(...args: any[]): ModelErrorDefinition | undefined;
|
|
55
64
|
}
|
|
56
65
|
/**
|
|
57
|
-
* @
|
|
58
|
-
*
|
|
66
|
+
* @description Interface for objects that can be serialized to string
|
|
67
|
+
* @summary Defines the serialization API for model objects
|
|
59
68
|
* @interface Serializable
|
|
60
|
-
*
|
|
69
|
+
* @memberOf module:decorator-validation
|
|
61
70
|
* @category Model
|
|
62
71
|
*/
|
|
63
72
|
export interface Serializable {
|
|
64
73
|
/**
|
|
65
|
-
* @
|
|
74
|
+
* @description Converts the object to a serialized string representation
|
|
75
|
+
* @summary Serializes the model to a string format
|
|
76
|
+
* @return {string} - The serialized string representation
|
|
66
77
|
* @method
|
|
67
78
|
*/
|
|
68
79
|
serialize(): string;
|
|
69
80
|
}
|
|
70
81
|
/**
|
|
71
|
-
* @
|
|
82
|
+
* @description Interface for objects that can generate a hash representation
|
|
83
|
+
* @summary Defines the hashing API for model objects
|
|
72
84
|
* @interface Hashable
|
|
85
|
+
* @memberOf module:decorator-validation
|
|
73
86
|
* @category Model
|
|
74
87
|
*/
|
|
75
88
|
export interface Hashable {
|
|
76
89
|
/**
|
|
77
|
-
* @
|
|
90
|
+
* @description Generates a unique hash string for the object
|
|
91
|
+
* @summary Creates a hash string representation of the object
|
|
92
|
+
* @return {string} - Hash value representing the object
|
|
78
93
|
* @method
|
|
79
|
-
* @returns {string} Hash value representing the object
|
|
80
94
|
*/
|
|
81
95
|
hash(): string;
|
|
82
96
|
}
|
|
83
97
|
/**
|
|
84
|
-
* @
|
|
98
|
+
* @description Interface for objects that can be compared with other objects
|
|
99
|
+
* @summary Defines the equality comparison API for model objects
|
|
100
|
+
* @template T
|
|
85
101
|
* @interface Comparable
|
|
86
|
-
* @
|
|
102
|
+
* @memberOf module:decorator-validation
|
|
87
103
|
* @category Model
|
|
88
104
|
*/
|
|
89
105
|
export interface Comparable<T> {
|
|
90
106
|
/**
|
|
107
|
+
* @description Determines if this object is equal to another object
|
|
91
108
|
* @summary Compares this object with another for equality
|
|
92
|
-
* @method
|
|
93
109
|
* @param {T} other - The object to compare with
|
|
94
|
-
* @param {
|
|
95
|
-
* @
|
|
110
|
+
* @param {any[]} [args] - Additional arguments for comparison
|
|
111
|
+
* @return {boolean} - True if the objects are equal, false otherwise
|
|
112
|
+
* @method
|
|
96
113
|
*/
|
|
97
114
|
equals(other: T, ...args: any[]): boolean;
|
|
98
115
|
}
|