@decaf-ts/db-decorators 0.6.1 → 0.6.3
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/LICENSE.md +21 -157
- package/README.md +571 -10
- package/dist/db-decorators.cjs +1599 -426
- package/dist/db-decorators.esm.cjs +1597 -428
- package/lib/esm/identity/decorators.d.ts +7 -0
- package/lib/esm/identity/decorators.js +11 -4
- package/lib/esm/identity/index.js +3 -3
- package/lib/esm/identity/utils.d.ts +36 -23
- package/lib/esm/identity/utils.js +38 -25
- package/lib/esm/index.d.ts +12 -27
- package/lib/esm/index.js +13 -28
- package/lib/esm/interfaces/BulkCrudOperator.d.ts +39 -0
- package/lib/esm/interfaces/BulkCrudOperator.js +1 -1
- package/lib/esm/interfaces/Contextual.d.ts +17 -0
- package/lib/esm/interfaces/Contextual.js +1 -1
- package/lib/esm/interfaces/CrudOperator.d.ts +26 -23
- package/lib/esm/interfaces/CrudOperator.js +1 -1
- package/lib/esm/interfaces/IRepository.d.ts +10 -2
- package/lib/esm/interfaces/IRepository.js +1 -1
- package/lib/esm/interfaces/index.js +5 -5
- package/lib/esm/model/constants.d.ts +11 -13
- package/lib/esm/model/constants.js +12 -14
- package/lib/esm/model/decorators.d.ts +112 -23
- package/lib/esm/model/decorators.js +119 -29
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +7 -6
- package/lib/esm/model/model.d.ts +2 -141
- package/lib/esm/model/model.js +2 -13
- package/lib/esm/model/overrides.d.ts +1 -0
- package/lib/esm/model/overrides.js +34 -0
- package/lib/esm/model/utils.d.ts +39 -0
- package/lib/esm/model/utils.js +42 -3
- package/lib/esm/model/validation.d.ts +51 -8
- package/lib/esm/model/validation.js +246 -107
- package/lib/esm/operations/Operations.d.ts +65 -3
- package/lib/esm/operations/Operations.js +68 -6
- package/lib/esm/operations/OperationsRegistry.d.ts +44 -16
- package/lib/esm/operations/OperationsRegistry.js +46 -18
- package/lib/esm/operations/constants.d.ts +27 -8
- package/lib/esm/operations/constants.js +16 -9
- package/lib/esm/operations/decorators.d.ts +140 -134
- package/lib/esm/operations/decorators.js +152 -137
- package/lib/esm/operations/index.js +6 -6
- package/lib/esm/operations/types.d.ts +10 -0
- package/lib/esm/operations/types.js +1 -1
- package/lib/esm/repository/BaseRepository.d.ts +322 -0
- package/lib/esm/repository/BaseRepository.js +297 -7
- package/lib/esm/repository/Context.d.ts +153 -2
- package/lib/esm/repository/Context.js +154 -6
- package/lib/esm/repository/Repository.d.ts +89 -0
- package/lib/esm/repository/Repository.js +102 -15
- package/lib/esm/repository/constants.d.ts +7 -0
- package/lib/esm/repository/constants.js +8 -1
- package/lib/esm/repository/errors.d.ts +61 -34
- package/lib/esm/repository/errors.js +62 -35
- package/lib/esm/repository/index.js +9 -9
- package/lib/esm/repository/types.d.ts +25 -0
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.d.ts +11 -0
- package/lib/esm/repository/utils.js +4 -4
- package/lib/esm/repository/wrappers.d.ts +2 -2
- package/lib/esm/repository/wrappers.js +5 -5
- package/lib/esm/validation/constants.d.ts +20 -5
- package/lib/esm/validation/constants.js +22 -7
- package/lib/esm/validation/decorators.d.ts +101 -19
- package/lib/esm/validation/decorators.js +109 -27
- package/lib/esm/validation/index.js +5 -5
- package/lib/esm/validation/validation.js +10 -2
- package/lib/esm/validation/validators/ReadOnlyValidator.d.ts +32 -8
- package/lib/esm/validation/validators/ReadOnlyValidator.js +34 -10
- package/lib/esm/validation/validators/TimestampValidator.d.ts +37 -3
- package/lib/esm/validation/validators/TimestampValidator.js +39 -5
- package/lib/esm/validation/validators/UpdateValidator.d.ts +28 -11
- package/lib/esm/validation/validators/UpdateValidator.js +23 -8
- package/lib/esm/validation/validators/index.js +4 -4
- package/lib/identity/decorators.cjs +8 -1
- package/lib/identity/decorators.d.ts +7 -0
- package/lib/identity/utils.cjs +35 -22
- package/lib/identity/utils.d.ts +36 -23
- package/lib/index.cjs +14 -28
- package/lib/index.d.ts +12 -27
- package/lib/interfaces/BulkCrudOperator.cjs +1 -1
- package/lib/interfaces/BulkCrudOperator.d.ts +39 -0
- package/lib/interfaces/Contextual.cjs +1 -1
- package/lib/interfaces/Contextual.d.ts +17 -0
- package/lib/interfaces/CrudOperator.cjs +1 -1
- package/lib/interfaces/CrudOperator.d.ts +26 -23
- package/lib/interfaces/IRepository.cjs +1 -1
- package/lib/interfaces/IRepository.d.ts +10 -2
- package/lib/model/constants.cjs +12 -14
- package/lib/model/constants.d.ts +11 -13
- package/lib/model/decorators.cjs +114 -24
- package/lib/model/decorators.d.ts +112 -23
- package/lib/model/index.cjs +2 -1
- package/lib/model/index.d.ts +1 -0
- package/lib/model/model.cjs +1 -13
- package/lib/model/model.d.ts +2 -141
- package/lib/model/overrides.cjs +36 -0
- package/lib/model/overrides.d.ts +1 -0
- package/lib/model/utils.cjs +40 -1
- package/lib/model/utils.d.ts +39 -0
- package/lib/model/validation.cjs +246 -104
- package/lib/model/validation.d.ts +51 -8
- package/lib/operations/Operations.cjs +66 -4
- package/lib/operations/Operations.d.ts +65 -3
- package/lib/operations/OperationsRegistry.cjs +45 -17
- package/lib/operations/OperationsRegistry.d.ts +44 -16
- package/lib/operations/constants.cjs +16 -9
- package/lib/operations/constants.d.ts +27 -8
- package/lib/operations/decorators.cjs +150 -135
- package/lib/operations/decorators.d.ts +140 -134
- package/lib/operations/types.cjs +1 -1
- package/lib/operations/types.d.ts +10 -0
- package/lib/repository/BaseRepository.cjs +291 -1
- package/lib/repository/BaseRepository.d.ts +322 -0
- package/lib/repository/Context.cjs +153 -5
- package/lib/repository/Context.d.ts +153 -2
- package/lib/repository/Repository.cjs +96 -9
- package/lib/repository/Repository.d.ts +89 -0
- package/lib/repository/constants.cjs +8 -1
- package/lib/repository/constants.d.ts +7 -0
- package/lib/repository/errors.cjs +62 -35
- package/lib/repository/errors.d.ts +61 -34
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/types.d.ts +25 -0
- package/lib/repository/utils.cjs +1 -1
- package/lib/repository/utils.d.ts +11 -0
- package/lib/repository/wrappers.cjs +3 -3
- package/lib/repository/wrappers.d.ts +2 -2
- package/lib/validation/constants.cjs +21 -6
- package/lib/validation/constants.d.ts +20 -5
- package/lib/validation/decorators.cjs +102 -20
- package/lib/validation/decorators.d.ts +101 -19
- package/lib/validation/validation.cjs +9 -1
- package/lib/validation/validators/ReadOnlyValidator.cjs +33 -9
- package/lib/validation/validators/ReadOnlyValidator.d.ts +32 -8
- package/lib/validation/validators/TimestampValidator.cjs +38 -4
- package/lib/validation/validators/TimestampValidator.d.ts +37 -3
- package/lib/validation/validators/UpdateValidator.cjs +23 -8
- package/lib/validation/validators/UpdateValidator.d.ts +28 -11
- package/package.json +2 -2
package/lib/model/model.d.ts
CHANGED
|
@@ -1,145 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ModelErrorDefinition } from "@decaf-ts/decorator-validation";
|
|
2
2
|
declare module "@decaf-ts/decorator-validation" {
|
|
3
|
-
|
|
4
|
-
protected constructor(arg?: ModelArg<Model>);
|
|
5
|
-
hasErrors(...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
3
|
+
interface Model {
|
|
6
4
|
hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* @summary Compare object equality recursively
|
|
9
|
-
* @param {any} obj object to compare to
|
|
10
|
-
* @param {string} [exceptions] property names to be excluded from the comparison
|
|
11
|
-
*/
|
|
12
|
-
equals(obj: any, ...exceptions: string[]): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* @summary Returns the serialized model according to the currently defined {@link Serializer}
|
|
15
|
-
*/
|
|
16
|
-
serialize(): string;
|
|
17
|
-
/**
|
|
18
|
-
* @summary Override the implementation for js's 'toString()' which sucks...
|
|
19
|
-
* @override
|
|
20
|
-
*/
|
|
21
|
-
toString(): string;
|
|
22
|
-
/**
|
|
23
|
-
* @summary Defines a default implementation for object hash. Relies on a very basic implementation based on Java's string hash;
|
|
24
|
-
*/
|
|
25
|
-
hash(): string;
|
|
26
|
-
/**
|
|
27
|
-
* @summary Deserializes a Model
|
|
28
|
-
* @param {string} str
|
|
29
|
-
*
|
|
30
|
-
* @throws {Error} If it fails to parse the string, or if it fails to build the model
|
|
31
|
-
*/
|
|
32
|
-
static deserialize(str: string): any;
|
|
33
|
-
/**
|
|
34
|
-
* @summary Repopulates the Object properties with the ones from the new object
|
|
35
|
-
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
36
|
-
*
|
|
37
|
-
* @param {T} self
|
|
38
|
-
* @param {T | Record<string, any>} [obj]
|
|
39
|
-
*
|
|
40
|
-
*/
|
|
41
|
-
static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
42
|
-
/**
|
|
43
|
-
* @summary Repopulates the instance with the ones from the new Model Object
|
|
44
|
-
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
45
|
-
* Is aware of nested Model Objects and rebuilds them also.
|
|
46
|
-
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
47
|
-
*
|
|
48
|
-
* @param {T} self
|
|
49
|
-
* @param {T | Record<string, any>} [obj]
|
|
50
|
-
*
|
|
51
|
-
*/
|
|
52
|
-
static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
53
|
-
/**
|
|
54
|
-
* @summary Sets the Global {@link ModelBuilderFunction}
|
|
55
|
-
* @param {ModelBuilderFunction} [builder]
|
|
56
|
-
*/
|
|
57
|
-
static setBuilder(builder?: ModelBuilderFunction): void;
|
|
58
|
-
/**
|
|
59
|
-
* @summary Retrieves the current global {@link ModelBuilderFunction}
|
|
60
|
-
*/
|
|
61
|
-
static getBuilder(): ModelBuilderFunction | undefined;
|
|
62
|
-
/**
|
|
63
|
-
* Returns the current {@link ModelRegistryManager}
|
|
64
|
-
*
|
|
65
|
-
* @return ModelRegistry, defaults to {@link ModelRegistryManager}
|
|
66
|
-
*/
|
|
67
|
-
private static getRegistry;
|
|
68
|
-
/**
|
|
69
|
-
* Returns the current actingModelRegistry
|
|
70
|
-
*
|
|
71
|
-
* @param {BuilderRegistry} modelRegistry the new implementation of Registry
|
|
72
|
-
*/
|
|
73
|
-
static setRegistry(modelRegistry: BuilderRegistry<any>): void;
|
|
74
|
-
/**
|
|
75
|
-
* @summary register new Models
|
|
76
|
-
* @param {any} constructor
|
|
77
|
-
* @param {string} [name] when not defined, the name of the constructor will be used
|
|
78
|
-
*
|
|
79
|
-
* @see ModelRegistry
|
|
80
|
-
*/
|
|
81
|
-
static register<T extends Model>(constructor: ModelConstructor<T>, name?: string): void;
|
|
82
|
-
/**
|
|
83
|
-
* @summary Gets a registered Model {@link ModelConstructor}
|
|
84
|
-
* @param {string} name
|
|
85
|
-
*
|
|
86
|
-
* @see ModelRegistry
|
|
87
|
-
*/
|
|
88
|
-
static get<T extends Model>(name: string): ModelConstructor<T> | undefined;
|
|
89
|
-
/**
|
|
90
|
-
* @param {Record<string, any>} obj
|
|
91
|
-
* @param {string} [clazz] when provided, it will attempt to find the matching constructor
|
|
92
|
-
*
|
|
93
|
-
* @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
|
|
94
|
-
*
|
|
95
|
-
* @see ModelRegistry
|
|
96
|
-
*/
|
|
97
|
-
static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
|
|
98
|
-
static getMetadata<V extends Model>(model: V): any;
|
|
99
|
-
static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
|
|
100
|
-
static equals<M extends Model>(obj1: M, obj2: M, ...exceptions: any[]): boolean;
|
|
101
|
-
static hasErrors<M extends Model>(model: M, ...propsToIgnore: string[]): ModelErrorDefinition | undefined;
|
|
102
|
-
static serialize<M extends Model>(model: M): any;
|
|
103
|
-
static hash<M extends Model>(model: M): any;
|
|
104
|
-
/**
|
|
105
|
-
* @summary Builds the key to store as Metadata under Reflections
|
|
106
|
-
* @description concatenates {@link ModelKeys#REFLECT} with the provided key
|
|
107
|
-
* @param {string} str
|
|
108
|
-
*/
|
|
109
|
-
static key(str: string): string;
|
|
110
|
-
/**
|
|
111
|
-
* @description Determines if an object is a model instance or has model metadata
|
|
112
|
-
* @summary Checks whether a given object is either an instance of the Model class or
|
|
113
|
-
* has model metadata attached to it. This function is essential for serialization and
|
|
114
|
-
* deserialization processes, as it helps identify model objects that need special handling.
|
|
115
|
-
* It safely handles potential errors during metadata retrieval.
|
|
116
|
-
*
|
|
117
|
-
* @param {Record<string, any>} target - The object to check
|
|
118
|
-
* @return {boolean} True if the object is a model instance or has model metadata, false otherwise
|
|
119
|
-
*
|
|
120
|
-
* @example
|
|
121
|
-
* ```typescript
|
|
122
|
-
* // Check if an object is a model
|
|
123
|
-
* const user = new User({ name: "John" });
|
|
124
|
-
* const isUserModel = isModel(user); // true
|
|
125
|
-
*
|
|
126
|
-
* // Check a plain object
|
|
127
|
-
* const plainObject = { name: "John" };
|
|
128
|
-
* const isPlainObjectModel = isModel(plainObject); // false
|
|
129
|
-
* ```
|
|
130
|
-
*/
|
|
131
|
-
static isModel(target: Record<string, any>): boolean;
|
|
132
|
-
/**
|
|
133
|
-
* @description Checks if a property of a model is itself a model or has a model type
|
|
134
|
-
* @summary Determines whether a specific property of a model instance is either a model instance
|
|
135
|
-
* or has a type that is registered as a model. This function is used for model serialization
|
|
136
|
-
* and deserialization to properly handle nested models.
|
|
137
|
-
* @template M extends {@link Model}
|
|
138
|
-
* @param {M} target - The model instance to check
|
|
139
|
-
* @param {string} attribute - The property name to check
|
|
140
|
-
* @return {boolean | string | undefined} Returns true if the property is a model instance,
|
|
141
|
-
* the model name if the property has a model type, or undefined if not a model
|
|
142
|
-
*/
|
|
143
|
-
static isPropertyModel<M extends Model>(target: M, attribute: string): boolean | string | undefined;
|
|
144
5
|
}
|
|
145
6
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
4
|
+
const validation_1 = require("./validation.cjs");
|
|
5
|
+
/**
|
|
6
|
+
* @description Validates the model and checks for errors
|
|
7
|
+
* @summary Validates the current model state and optionally compares with a previous version
|
|
8
|
+
* @template M - Type extending Model
|
|
9
|
+
* @param {M|any} [previousVersion] - Optional previous version of the model for comparison
|
|
10
|
+
* @param {...any[]} exclusions - Properties to exclude from validation
|
|
11
|
+
* @return {ModelErrorDefinition|undefined} Error definition if validation fails, undefined otherwise
|
|
12
|
+
* @function hasErrors
|
|
13
|
+
* @memberOf module:db-decorators
|
|
14
|
+
*/
|
|
15
|
+
// @ts-expect-error Overriding Model prototype method with dynamic conditional return type.
|
|
16
|
+
decorator_validation_1.Model.prototype.hasErrors = function (previousVersion, ...exclusions) {
|
|
17
|
+
if (previousVersion && !(previousVersion instanceof decorator_validation_1.Model)) {
|
|
18
|
+
exclusions.unshift(previousVersion);
|
|
19
|
+
previousVersion = undefined;
|
|
20
|
+
}
|
|
21
|
+
const async = this.isAsync();
|
|
22
|
+
const errs = (0, decorator_validation_1.validate)(this, async, ...exclusions);
|
|
23
|
+
if (async) {
|
|
24
|
+
return Promise.resolve(errs).then((resolvedErrs) => {
|
|
25
|
+
if (resolvedErrs || !previousVersion) {
|
|
26
|
+
return resolvedErrs;
|
|
27
|
+
}
|
|
28
|
+
return (0, validation_1.validateCompare)(previousVersion, this, async, ...exclusions);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (errs || !previousVersion)
|
|
32
|
+
return errs;
|
|
33
|
+
// @ts-expect-error Overriding Model prototype method with dynamic conditional return type.
|
|
34
|
+
return (0, validation_1.validateCompare)(previousVersion, this, async, ...exclusions);
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlFQUl3QztBQUN4QyxpREFBK0M7QUFFL0M7Ozs7Ozs7OztHQVNHO0FBQ0gsMkZBQTJGO0FBQzNGLDRCQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUUxQixlQUF5QixFQUN6QixHQUFHLFVBQWlCO0lBRXBCLElBQUksZUFBZSxJQUFJLENBQUMsQ0FBQyxlQUFlLFlBQVksNEJBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBQSwrQkFBUSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUVsRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ2pELElBQUksWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPLElBQUEsNEJBQWUsRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBUSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksSUFBSSxJQUFJLENBQUMsZUFBZTtRQUFFLE9BQU8sSUFBVyxDQUFDO0lBRWpELDJGQUEyRjtJQUMzRixPQUFPLElBQUEsNEJBQWUsRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1vZGVsLFxuICBNb2RlbENvbmRpdGlvbmFsQXN5bmMsXG4gIHZhbGlkYXRlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbXBhcmUgfSBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlcyB0aGUgbW9kZWwgYW5kIGNoZWNrcyBmb3IgZXJyb3JzXG4gKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIGN1cnJlbnQgbW9kZWwgc3RhdGUgYW5kIG9wdGlvbmFsbHkgY29tcGFyZXMgd2l0aCBhIHByZXZpb3VzIHZlcnNpb25cbiAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBwYXJhbSB7TXxhbnl9IFtwcmV2aW91c1ZlcnNpb25dIC0gT3B0aW9uYWwgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgbW9kZWwgZm9yIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7Li4uYW55W119IGV4Y2x1c2lvbnMgLSBQcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUgZnJvbSB2YWxpZGF0aW9uXG4gKiBAcmV0dXJuIHtNb2RlbEVycm9yRGVmaW5pdGlvbnx1bmRlZmluZWR9IEVycm9yIGRlZmluaXRpb24gaWYgdmFsaWRhdGlvbiBmYWlscywgdW5kZWZpbmVkIG90aGVyd2lzZVxuICogQGZ1bmN0aW9uIGhhc0Vycm9yc1xuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbi8vIEB0cy1leHBlY3QtZXJyb3IgT3ZlcnJpZGluZyBNb2RlbCBwcm90b3R5cGUgbWV0aG9kIHdpdGggZHluYW1pYyBjb25kaXRpb25hbCByZXR1cm4gdHlwZS5cbk1vZGVsLnByb3RvdHlwZS5oYXNFcnJvcnMgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgdGhpczogTSxcbiAgcHJldmlvdXNWZXJzaW9uPzogTSB8IGFueSxcbiAgLi4uZXhjbHVzaW9uczogYW55W11cbik6IE1vZGVsQ29uZGl0aW9uYWxBc3luYzxNPiB7XG4gIGlmIChwcmV2aW91c1ZlcnNpb24gJiYgIShwcmV2aW91c1ZlcnNpb24gaW5zdGFuY2VvZiBNb2RlbCkpIHtcbiAgICBleGNsdXNpb25zLnVuc2hpZnQocHJldmlvdXNWZXJzaW9uKTtcbiAgICBwcmV2aW91c1ZlcnNpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBhc3luYyA9IHRoaXMuaXNBc3luYygpO1xuICBjb25zdCBlcnJzID0gdmFsaWRhdGUodGhpcywgYXN5bmMsIC4uLmV4Y2x1c2lvbnMpO1xuXG4gIGlmIChhc3luYykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXJycykudGhlbigocmVzb2x2ZWRFcnJzKSA9PiB7XG4gICAgICBpZiAocmVzb2x2ZWRFcnJzIHx8ICFwcmV2aW91c1ZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRXJycztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXBhcmUocHJldmlvdXNWZXJzaW9uLCB0aGlzLCBhc3luYywgLi4uZXhjbHVzaW9ucyk7XG4gICAgfSkgYXMgYW55O1xuICB9XG5cbiAgaWYgKGVycnMgfHwgIXByZXZpb3VzVmVyc2lvbikgcmV0dXJuIGVycnMgYXMgYW55O1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgT3ZlcnJpZGluZyBNb2RlbCBwcm90b3R5cGUgbWV0aG9kIHdpdGggZHluYW1pYyBjb25kaXRpb25hbCByZXR1cm4gdHlwZS5cbiAgcmV0dXJuIHZhbGlkYXRlQ29tcGFyZShwcmV2aW91c1ZlcnNpb24sIHRoaXMsIGFzeW5jLCAuLi5leGNsdXNpb25zKTtcbn07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/model/utils.cjs
CHANGED
|
@@ -5,10 +5,49 @@ exports.modelToTransient = modelToTransient;
|
|
|
5
5
|
const repository_1 = require("./../repository/index.cjs");
|
|
6
6
|
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
7
7
|
const constants_1 = require("./constants.cjs");
|
|
8
|
+
/**
|
|
9
|
+
* @description Checks if a model is marked as transient
|
|
10
|
+
* @summary Determines whether a model class has been decorated with the transient decorator
|
|
11
|
+
* @template M - Type extending Model
|
|
12
|
+
* @param {M} model - The model instance to check
|
|
13
|
+
* @return {boolean} True if the model is transient, false otherwise
|
|
14
|
+
* @function isTransient
|
|
15
|
+
* @memberOf module:db-decorators
|
|
16
|
+
*/
|
|
8
17
|
function isTransient(model) {
|
|
9
18
|
return !!(Reflect.getMetadata(repository_1.Repository.key(constants_1.DBKeys.TRANSIENT), model.constructor) ||
|
|
10
19
|
Reflect.getMetadata(repository_1.Repository.key(constants_1.DBKeys.TRANSIENT), decorator_validation_1.Model.get(model.constructor.name)));
|
|
11
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* @description Separates transient properties from a model
|
|
23
|
+
* @summary Extracts properties marked as transient into a separate object
|
|
24
|
+
* @template M - Type extending Model
|
|
25
|
+
* @param {M} model - The model instance to process
|
|
26
|
+
* @return {Object} Object containing the model without transient properties and a separate transient object
|
|
27
|
+
* @property {M} model - The model with transient properties removed
|
|
28
|
+
* @property {Record<string, any>} [transient] - Object containing the transient properties
|
|
29
|
+
* @function modelToTransient
|
|
30
|
+
* @memberOf module:db-decorators
|
|
31
|
+
* @mermaid
|
|
32
|
+
* sequenceDiagram
|
|
33
|
+
* participant Caller
|
|
34
|
+
* participant modelToTransient
|
|
35
|
+
* participant isTransient
|
|
36
|
+
* participant getAllPropertyDecoratorsRecursive
|
|
37
|
+
*
|
|
38
|
+
* Caller->>modelToTransient: model
|
|
39
|
+
* modelToTransient->>isTransient: check if model is transient
|
|
40
|
+
* isTransient-->>modelToTransient: transient status
|
|
41
|
+
* alt model is not transient
|
|
42
|
+
* modelToTransient-->>Caller: {model}
|
|
43
|
+
* else model is transient
|
|
44
|
+
* modelToTransient->>getAllPropertyDecoratorsRecursive: get transient properties
|
|
45
|
+
* getAllPropertyDecoratorsRecursive-->>modelToTransient: property decorators
|
|
46
|
+
* modelToTransient->>modelToTransient: separate properties
|
|
47
|
+
* modelToTransient->>Model.build: rebuild model without transient props
|
|
48
|
+
* modelToTransient-->>Caller: {model, transient}
|
|
49
|
+
* end
|
|
50
|
+
*/
|
|
12
51
|
function modelToTransient(model) {
|
|
13
52
|
if (!isTransient(model))
|
|
14
53
|
return { model: model };
|
|
@@ -33,4 +72,4 @@ function modelToTransient(model) {
|
|
|
33
72
|
result.model = decorator_validation_1.Model.build(result.model, model.constructor.name);
|
|
34
73
|
return result;
|
|
35
74
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsa0NBUUM7QUFnQ0QsNENBbUNDO0FBNUZELDBEQUl1QjtBQUN2Qix5RUFBdUQ7QUFDdkQsK0NBQXFDO0FBRXJDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFrQixLQUFRO0lBQ25ELE9BQU8sQ0FBQyxDQUFDLENBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyx1QkFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FDakIsdUJBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFDaEMsNEJBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQVEsQ0FDekMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixLQUFRO0lBRVIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2pELE1BQU0sSUFBSSxHQUEwQixJQUFBLDhDQUFpQyxFQUNuRSxLQUFLLEVBQ0wsU0FBUyxFQUNULHVCQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLENBQ1IsQ0FBQztJQUUzQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDeEMsQ0FDRSxLQUFzRSxFQUN0RSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFDUixFQUFFO1FBQ0YsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBWSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSwrQkFBa0IsQ0FDMUIsMENBQTBDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBSSxLQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsRUFDRCxFQUFxRSxDQUN0RSxDQUFDO0lBQ0YsTUFBTSxDQUFDLEtBQUssR0FBRyw0QkFBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsT0FBTyxNQUF1RCxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUsXG4gIFJlcG9zaXRvcnksXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbn0gZnJvbSBcIi4uL3JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgREJLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIG1vZGVsIGlzIG1hcmtlZCBhcyB0cmFuc2llbnRcbiAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hldGhlciBhIG1vZGVsIGNsYXNzIGhhcyBiZWVuIGRlY29yYXRlZCB3aXRoIHRoZSB0cmFuc2llbnQgZGVjb3JhdG9yXG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBtb2RlbCBpcyB0cmFuc2llbnQsIGZhbHNlIG90aGVyd2lzZVxuICogQGZ1bmN0aW9uIGlzVHJhbnNpZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNpZW50PE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgcmV0dXJuICEhKFxuICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLlRSQU5TSUVOVCksIG1vZGVsLmNvbnN0cnVjdG9yKSB8fFxuICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBSZXBvc2l0b3J5LmtleShEQktleXMuVFJBTlNJRU5UKSxcbiAgICAgIE1vZGVsLmdldChtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lKSBhcyBhbnlcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNlcGFyYXRlcyB0cmFuc2llbnQgcHJvcGVydGllcyBmcm9tIGEgbW9kZWxcbiAqIEBzdW1tYXJ5IEV4dHJhY3RzIHByb3BlcnRpZXMgbWFya2VkIGFzIHRyYW5zaWVudCBpbnRvIGEgc2VwYXJhdGUgb2JqZWN0XG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHByb2Nlc3NcbiAqIEByZXR1cm4ge09iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1vZGVsIHdpdGhvdXQgdHJhbnNpZW50IHByb3BlcnRpZXMgYW5kIGEgc2VwYXJhdGUgdHJhbnNpZW50IG9iamVjdFxuICogQHByb3BlcnR5IHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB3aXRoIHRyYW5zaWVudCBwcm9wZXJ0aWVzIHJlbW92ZWRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3RyYW5zaWVudF0gLSBPYmplY3QgY29udGFpbmluZyB0aGUgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAqIEBmdW5jdGlvbiBtb2RlbFRvVHJhbnNpZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IG1vZGVsVG9UcmFuc2llbnRcbiAqICAgcGFydGljaXBhbnQgaXNUcmFuc2llbnRcbiAqICAgcGFydGljaXBhbnQgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlXG4gKlxuICogICBDYWxsZXItPj5tb2RlbFRvVHJhbnNpZW50OiBtb2RlbFxuICogICBtb2RlbFRvVHJhbnNpZW50LT4+aXNUcmFuc2llbnQ6IGNoZWNrIGlmIG1vZGVsIGlzIHRyYW5zaWVudFxuICogICBpc1RyYW5zaWVudC0tPj5tb2RlbFRvVHJhbnNpZW50OiB0cmFuc2llbnQgc3RhdHVzXG4gKiAgIGFsdCBtb2RlbCBpcyBub3QgdHJhbnNpZW50XG4gKiAgICAgbW9kZWxUb1RyYW5zaWVudC0tPj5DYWxsZXI6IHttb2RlbH1cbiAqICAgZWxzZSBtb2RlbCBpcyB0cmFuc2llbnRcbiAqICAgICBtb2RlbFRvVHJhbnNpZW50LT4+Z2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlOiBnZXQgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAqICAgICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUtLT4+bW9kZWxUb1RyYW5zaWVudDogcHJvcGVydHkgZGVjb3JhdG9yc1xuICogICAgIG1vZGVsVG9UcmFuc2llbnQtPj5tb2RlbFRvVHJhbnNpZW50OiBzZXBhcmF0ZSBwcm9wZXJ0aWVzXG4gKiAgICAgbW9kZWxUb1RyYW5zaWVudC0+Pk1vZGVsLmJ1aWxkOiByZWJ1aWxkIG1vZGVsIHdpdGhvdXQgdHJhbnNpZW50IHByb3BzXG4gKiAgICAgbW9kZWxUb1RyYW5zaWVudC0tPj5DYWxsZXI6IHttb2RlbCwgdHJhbnNpZW50fVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsVG9UcmFuc2llbnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IE1cbik6IHsgbW9kZWw6IE07IHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT4gfSB7XG4gIGlmICghaXNUcmFuc2llbnQobW9kZWwpKSByZXR1cm4geyBtb2RlbDogbW9kZWwgfTtcbiAgY29uc3QgZGVjczogUmVjb3JkPHN0cmluZywgYW55W10+ID0gZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlKFxuICAgIG1vZGVsLFxuICAgIHVuZGVmaW5lZCxcbiAgICBSZXBvc2l0b3J5LmtleShEQktleXMuVFJBTlNJRU5UKVxuICApIGFzIFJlY29yZDxzdHJpbmcsIGFueVtdPjtcblxuICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhkZWNzKS5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdW06IHsgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT47IHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT4gfSxcbiAgICAgIFtrLCB2YWxdXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2llbnQgPSB2YWwuZmluZCgoZWwpID0+IGVsLmtleSA9PT0gXCJcIik7XG4gICAgICBpZiAodHJhbnNpZW50KSB7XG4gICAgICAgIGFjY3VtLnRyYW5zaWVudCA9IGFjY3VtLnRyYW5zaWVudCB8fCB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY2N1bS50cmFuc2llbnRba10gPSBtb2RlbFtrIGFzIGtleW9mIE1dO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gc2VyaWFsaXplIHRyYW5zaWVudCBwcm9wZXJ0eSAke2t9OiAke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY3VtLm1vZGVsID0gYWNjdW0ubW9kZWwgfHwge307XG4gICAgICAgIGFjY3VtLm1vZGVsW2tdID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sXG4gICAge30gYXMgeyBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjsgdHJhbnNpZW50PzogUmVjb3JkPHN0cmluZywgYW55PiB9XG4gICk7XG4gIHJlc3VsdC5tb2RlbCA9IE1vZGVsLmJ1aWxkKHJlc3VsdC5tb2RlbCwgbW9kZWwuY29uc3RydWN0b3IubmFtZSk7XG4gIHJldHVybiByZXN1bHQgYXMgeyBtb2RlbDogTTsgdHJhbnNpZW50PzogUmVjb3JkPHN0cmluZywgYW55PiB9O1xufVxuIl19
|
package/lib/model/utils.d.ts
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
/**
|
|
3
|
+
* @description Checks if a model is marked as transient
|
|
4
|
+
* @summary Determines whether a model class has been decorated with the transient decorator
|
|
5
|
+
* @template M - Type extending Model
|
|
6
|
+
* @param {M} model - The model instance to check
|
|
7
|
+
* @return {boolean} True if the model is transient, false otherwise
|
|
8
|
+
* @function isTransient
|
|
9
|
+
* @memberOf module:db-decorators
|
|
10
|
+
*/
|
|
2
11
|
export declare function isTransient<M extends Model>(model: M): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* @description Separates transient properties from a model
|
|
14
|
+
* @summary Extracts properties marked as transient into a separate object
|
|
15
|
+
* @template M - Type extending Model
|
|
16
|
+
* @param {M} model - The model instance to process
|
|
17
|
+
* @return {Object} Object containing the model without transient properties and a separate transient object
|
|
18
|
+
* @property {M} model - The model with transient properties removed
|
|
19
|
+
* @property {Record<string, any>} [transient] - Object containing the transient properties
|
|
20
|
+
* @function modelToTransient
|
|
21
|
+
* @memberOf module:db-decorators
|
|
22
|
+
* @mermaid
|
|
23
|
+
* sequenceDiagram
|
|
24
|
+
* participant Caller
|
|
25
|
+
* participant modelToTransient
|
|
26
|
+
* participant isTransient
|
|
27
|
+
* participant getAllPropertyDecoratorsRecursive
|
|
28
|
+
*
|
|
29
|
+
* Caller->>modelToTransient: model
|
|
30
|
+
* modelToTransient->>isTransient: check if model is transient
|
|
31
|
+
* isTransient-->>modelToTransient: transient status
|
|
32
|
+
* alt model is not transient
|
|
33
|
+
* modelToTransient-->>Caller: {model}
|
|
34
|
+
* else model is transient
|
|
35
|
+
* modelToTransient->>getAllPropertyDecoratorsRecursive: get transient properties
|
|
36
|
+
* getAllPropertyDecoratorsRecursive-->>modelToTransient: property decorators
|
|
37
|
+
* modelToTransient->>modelToTransient: separate properties
|
|
38
|
+
* modelToTransient->>Model.build: rebuild model without transient props
|
|
39
|
+
* modelToTransient-->>Caller: {model, transient}
|
|
40
|
+
* end
|
|
41
|
+
*/
|
|
3
42
|
export declare function modelToTransient<M extends Model>(model: M): {
|
|
4
43
|
model: M;
|
|
5
44
|
transient?: Record<string, any>;
|