@decaf-ts/core 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.bundle.min.js +1 -1
- package/dist/esm/core.bundle.min.esm.js +1 -1
- package/lib/esm/identity/decorators.d.ts +2 -1
- package/lib/esm/identity/decorators.js +4 -3
- package/lib/esm/identity/index.d.ts +1 -0
- package/lib/esm/identity/index.js +2 -1
- package/lib/esm/identity/utils.d.ts +3 -2
- package/lib/esm/identity/utils.js +15 -3
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/Paginatable.d.ts +4 -0
- package/lib/esm/interfaces/Paginatable.js +3 -0
- package/lib/esm/interfaces/index.d.ts +0 -1
- package/lib/esm/interfaces/index.js +1 -2
- package/lib/esm/model/BaseModel.d.ts +4 -2
- package/lib/esm/model/BaseModel.js +10 -3
- package/lib/esm/model/User.d.ts +8 -0
- package/lib/esm/model/User.js +35 -0
- package/lib/esm/model/construction.d.ts +15 -0
- package/lib/esm/model/construction.js +205 -0
- package/lib/esm/model/decorators.d.ts +51 -3
- package/lib/esm/model/decorators.js +91 -5
- package/lib/esm/model/index.d.ts +2 -0
- package/lib/esm/model/index.js +3 -1
- package/lib/esm/model/types.d.ts +6 -0
- package/lib/esm/model/types.js +3 -0
- package/lib/esm/persistence/Adapter.d.ts +8 -4
- package/lib/esm/persistence/Adapter.js +13 -11
- package/lib/esm/persistence/Sequence.d.ts +22 -0
- package/lib/esm/persistence/Sequence.js +11 -0
- package/lib/esm/persistence/constants.d.ts +13 -1
- package/lib/esm/persistence/constants.js +16 -1
- package/lib/esm/persistence/index.d.ts +1 -0
- package/lib/esm/persistence/index.js +2 -1
- package/lib/esm/query/Clause.d.ts +8 -1
- package/lib/esm/query/Clause.js +8 -1
- package/lib/esm/query/Paginator.d.ts +22 -0
- package/lib/esm/query/Paginator.js +39 -0
- package/lib/esm/query/Query.d.ts +1 -1
- package/lib/esm/query/Query.js +1 -1
- package/lib/esm/query/Statement.d.ts +6 -0
- package/lib/esm/query/Statement.js +7 -2
- package/lib/esm/query/errors.d.ts +3 -0
- package/lib/esm/query/errors.js +6 -1
- package/lib/esm/query/index.d.ts +1 -0
- package/lib/esm/query/index.js +2 -1
- package/lib/esm/query/options.d.ts +4 -3
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/repository/Repository.d.ts +10 -6
- package/lib/esm/repository/Repository.js +85 -62
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/injectables.js +3 -1
- package/lib/identity/decorators.cjs +4 -3
- package/lib/identity/decorators.d.ts +2 -1
- package/lib/identity/index.cjs +2 -1
- package/lib/identity/index.d.ts +1 -0
- package/lib/identity/utils.cjs +16 -3
- package/lib/identity/utils.d.ts +3 -2
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/Paginatable.cjs +4 -0
- package/lib/interfaces/Paginatable.d.ts +4 -0
- package/lib/interfaces/index.cjs +1 -2
- package/lib/interfaces/index.d.ts +0 -1
- package/lib/model/BaseModel.cjs +10 -3
- package/lib/model/BaseModel.d.ts +4 -2
- package/lib/model/User.cjs +38 -0
- package/lib/model/User.d.ts +8 -0
- package/lib/model/construction.cjs +218 -0
- package/lib/model/construction.d.ts +15 -0
- package/lib/model/decorators.cjs +95 -3
- package/lib/model/decorators.d.ts +51 -3
- package/lib/model/index.cjs +3 -1
- package/lib/model/index.d.ts +2 -0
- package/lib/model/types.cjs +4 -0
- package/lib/model/types.d.ts +6 -0
- package/lib/persistence/Adapter.cjs +12 -10
- package/lib/persistence/Adapter.d.ts +8 -4
- package/lib/persistence/Sequence.cjs +15 -0
- package/lib/persistence/Sequence.d.ts +22 -0
- package/lib/persistence/constants.cjs +17 -2
- package/lib/persistence/constants.d.ts +13 -1
- package/lib/persistence/index.cjs +2 -1
- package/lib/persistence/index.d.ts +1 -0
- package/lib/query/Clause.cjs +8 -1
- package/lib/query/Clause.d.ts +8 -1
- package/lib/query/Paginator.cjs +43 -0
- package/lib/query/Paginator.d.ts +22 -0
- package/lib/query/Query.cjs +1 -1
- package/lib/query/Query.d.ts +1 -1
- package/lib/query/Statement.cjs +7 -2
- package/lib/query/Statement.d.ts +6 -0
- package/lib/query/errors.cjs +8 -2
- package/lib/query/errors.d.ts +3 -0
- package/lib/query/index.cjs +2 -1
- package/lib/query/index.d.ts +1 -0
- package/lib/query/options.cjs +1 -1
- package/lib/query/options.d.ts +4 -3
- package/lib/repository/Repository.cjs +85 -62
- package/lib/repository/Repository.d.ts +10 -6
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/injectables.cjs +3 -1
- package/package.json +1 -1
- package/lib/esm/interfaces/Sequence.d.ts +0 -17
- package/lib/esm/interfaces/Sequence.js +0 -10
- package/lib/interfaces/Sequence.cjs +0 -11
- package/lib/interfaces/Sequence.d.ts +0 -17
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Model } from "@decaf-ts/decorator-validation";
|
2
2
|
import { SequenceOptions } from "../interfaces/SequenceOptions";
|
3
3
|
import { Repository } from "../repository/Repository";
|
4
|
+
import { Context } from "@decaf-ts/db-decorators/lib/repository/Context";
|
4
5
|
/**
|
5
6
|
* @summary Primary Key Decorator
|
6
7
|
* @description Marks the property as the {@link Model}s primary key.
|
@@ -19,5 +20,5 @@ import { Repository } from "../repository/Repository";
|
|
19
20
|
* @param key
|
20
21
|
* @param model
|
21
22
|
*/
|
22
|
-
export declare function pkOnCreate<M extends Model, V extends Repository<M, any>>(this: V, data: SequenceOptions, key: string, model: M): Promise<void>;
|
23
|
+
export declare function pkOnCreate<M extends Model, V extends Repository<M, any>>(this: V, context: Context<M>, data: SequenceOptions, key: string, model: M): Promise<void>;
|
23
24
|
export declare function pk(opts?: Omit<SequenceOptions, "cycle" | "startWith" | "incrementBy">): (target: object, propertyKey?: any, descriptor?: any) => void;
|
@@ -5,6 +5,7 @@ import { apply } from "@decaf-ts/reflection";
|
|
5
5
|
import { Repository } from "../repository/Repository";
|
6
6
|
import { index } from "../model/decorators";
|
7
7
|
import { sequenceNameForModel } from "./utils";
|
8
|
+
import { OrderDirection } from "../repository";
|
8
9
|
/**
|
9
10
|
* @summary Primary Key Decorator
|
10
11
|
* @description Marks the property as the {@link Model}s primary key.
|
@@ -23,7 +24,7 @@ import { sequenceNameForModel } from "./utils";
|
|
23
24
|
* @param key
|
24
25
|
* @param model
|
25
26
|
*/
|
26
|
-
export async function pkOnCreate(data, key, model) {
|
27
|
+
export async function pkOnCreate(context, data, key, model) {
|
27
28
|
if (!data.type || model[key]) {
|
28
29
|
return;
|
29
30
|
}
|
@@ -49,9 +50,9 @@ export async function pkOnCreate(data, key, model) {
|
|
49
50
|
}
|
50
51
|
export function pk(opts = DefaultSequenceOptions) {
|
51
52
|
opts = Object.assign({}, DefaultSequenceOptions, opts);
|
52
|
-
return apply(index(), required(), readonly(),
|
53
|
+
return apply(index([OrderDirection.ASC, OrderDirection.DSC]), required(), readonly(),
|
53
54
|
// type([String.name, Number.name, BigInt.name]),
|
54
55
|
propMetadata(Repository.key(DBKeys.ID), opts), onCreate(pkOnCreate, opts));
|
55
56
|
}
|
56
57
|
|
57
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUNMLHNCQUFzQixHQUV2QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBQ04sYUFBYSxFQUNiLFFBQVEsRUFDUixRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FFOUIsT0FBbUIsRUFDbkIsSUFBcUIsRUFDckIsR0FBVyxFQUNYLEtBQVE7SUFFUixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSyxLQUE2QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLGtCQUFrQixHQUFHLFVBQ3pCLE1BQVMsRUFDVCxXQUFtQixFQUNuQixLQUErQjtRQUUvQixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7WUFDekMsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixZQUFZLEVBQUUsSUFBSTtZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtRQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksYUFBYSxDQUNyQixrQ0FBa0MsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsRUFBRSxDQUNoQixPQUdJLHNCQUFzQjtJQUUxQixJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFvQixDQUFDO0lBQzFFLE9BQU8sS0FBSyxDQUNWLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQy9DLFFBQVEsRUFBRSxFQUNWLFFBQVEsRUFBRTtJQUNWLGlEQUFpRDtJQUNqRCxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBdUIsQ0FBQyxFQUNoRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQXVCLENBQUMsQ0FDOUMsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoiaWRlbnRpdHkvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsLCBwcm9wTWV0YWRhdGEsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdFNlcXVlbmNlT3B0aW9ucyxcbiAgU2VxdWVuY2VPcHRpb25zLFxufSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7XG4gIERCS2V5cyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgb25DcmVhdGUsXG4gIHJlYWRvbmx5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGFwcGx5IH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgaW5kZXggfSBmcm9tIFwiLi4vbW9kZWwvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgc2VxdWVuY2VOYW1lRm9yTW9kZWwgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvU2VxdWVuY2VcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMvbGliL3JlcG9zaXRvcnkvQ29udGV4dFwiO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24gfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFByaW1hcnkgS2V5IERlY29yYXRvclxuICogQGRlc2NyaXB0aW9uIE1hcmtzIHRoZSBwcm9wZXJ0eSBhcyB0aGUge0BsaW5rIE1vZGVsfXMgcHJpbWFyeSBrZXkuXG4gKiAgQWxzbyBtYXJrcyB0aGUgcHJvcGVydHkgYXMge0BsaW5rIHVuaXF1ZX0gYXMge0ByZXF1aXJlZH0gYW5kIGVuc3VyZXMgdGhlIGluZGV4IGlzIGNyZWF0ZWQgcHJvcGVybHkgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCB7QGxpbmsgU2VxdWVuY2V9XG4gKlxuICpcbiAqXG4gKiBAZnVuY3Rpb24gcGtcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOndhbGxldC1kYi5EZWNvcmF0b3JzXG4gKlxuICogQHNlZSB1bmlxdWVcbiAqIEBzZWUgcmVxdWlyZWRcbiAqIEBzZWUgb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gbW9kZWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBrT25DcmVhdGU8TSBleHRlbmRzIE1vZGVsLCBWIGV4dGVuZHMgUmVwb3NpdG9yeTxNLCBhbnk+PihcbiAgdGhpczogVixcbiAgY29udGV4dDogQ29udGV4dDxNPixcbiAgZGF0YTogU2VxdWVuY2VPcHRpb25zLFxuICBrZXk6IHN0cmluZyxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWRhdGEudHlwZSB8fCAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNldFByaW1hcnlLZXlWYWx1ZSA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHRhcmdldDogTSxcbiAgICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfSk7XG4gIH07XG4gIGlmICghZGF0YS5uYW1lKSBkYXRhLm5hbWUgPSBzZXF1ZW5jZU5hbWVGb3JNb2RlbChtb2RlbCwgXCJwa1wiKTtcbiAgbGV0IHNlcXVlbmNlOiBTZXF1ZW5jZTtcbiAgdHJ5IHtcbiAgICBzZXF1ZW5jZSA9IGF3YWl0IHRoaXMuYWRhcHRlci5TZXF1ZW5jZShkYXRhKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGluc3RhbnRpYXRlIFNlcXVlbmNlICR7ZGF0YS5uYW1lfTogJHtlfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IGF3YWl0IHNlcXVlbmNlLm5leHQoKTtcbiAgc2V0UHJpbWFyeUtleVZhbHVlKG1vZGVsLCBrZXksIG5leHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGsoXG4gIG9wdHM6IE9taXQ8XG4gICAgU2VxdWVuY2VPcHRpb25zLFxuICAgIFwiY3ljbGVcIiB8IFwic3RhcnRXaXRoXCIgfCBcImluY3JlbWVudEJ5XCJcbiAgPiA9IERlZmF1bHRTZXF1ZW5jZU9wdGlvbnNcbikge1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFNlcXVlbmNlT3B0aW9ucywgb3B0cykgYXMgU2VxdWVuY2VPcHRpb25zO1xuICByZXR1cm4gYXBwbHkoXG4gICAgaW5kZXgoW09yZGVyRGlyZWN0aW9uLkFTQywgT3JkZXJEaXJlY3Rpb24uRFNDXSksXG4gICAgcmVxdWlyZWQoKSxcbiAgICByZWFkb25seSgpLFxuICAgIC8vIHR5cGUoW1N0cmluZy5uYW1lLCBOdW1iZXIubmFtZSwgQmlnSW50Lm5hbWVdKSxcbiAgICBwcm9wTWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLklEKSwgb3B0cyBhcyBTZXF1ZW5jZU9wdGlvbnMpLFxuICAgIG9uQ3JlYXRlKHBrT25DcmVhdGUsIG9wdHMgYXMgU2VxdWVuY2VPcHRpb25zKVxuICApO1xufVxuIl19
|
@@ -1,3 +1,4 @@
|
|
1
1
|
export * from "./decorators";
|
2
|
+
export * from "./utils";
|
2
3
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFNBQVMsQ0FBQyIsImZpbGUiOiJpZGVudGl0eS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG4iXX0=
|
@@ -1,2 +1,3 @@
|
|
1
|
-
import { Model } from "@decaf-ts/decorator-validation";
|
2
|
-
export declare function
|
1
|
+
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
2
|
+
export declare function getTableName<M extends Model>(model: M | Constructor<M>): any;
|
3
|
+
export declare function sequenceNameForModel<M extends Model>(model: M | Constructor<M>, ...args: string[]): string;
|
@@ -1,6 +1,18 @@
|
|
1
|
-
import {
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
2
|
+
import { Adapter } from "../persistence/Adapter";
|
3
|
+
import { PersistenceKeys } from "../persistence/constants";
|
4
|
+
export function getTableName(model) {
|
5
|
+
const metadata = Reflect.getMetadata(Adapter.key(PersistenceKeys.TABLE), model instanceof Model ? model.constructor : model);
|
6
|
+
if (metadata) {
|
7
|
+
return metadata;
|
8
|
+
}
|
9
|
+
if (model instanceof Model) {
|
10
|
+
return model.constructor.name;
|
11
|
+
}
|
12
|
+
return model.name;
|
13
|
+
}
|
2
14
|
export function sequenceNameForModel(model, ...args) {
|
3
|
-
return [
|
15
|
+
return [getTableName(model), ...args].join("_");
|
4
16
|
}
|
5
17
|
|
6
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxNQUFNLFVBQVUsWUFBWSxDQUFrQixLQUF5QjtJQUNyRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFDbEMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUNuRCxDQUFDO0lBQ0YsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsS0FBeUIsRUFDekIsR0FBRyxJQUFjO0lBRWpCLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsImZpbGUiOiJpZGVudGl0eS91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVOYW1lPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPikge1xuICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLlRBQkxFKSxcbiAgICBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsID8gbW9kZWwuY29uc3RydWN0b3IgOiBtb2RlbFxuICApO1xuICBpZiAobWV0YWRhdGEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cbiAgaWYgKG1vZGVsIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICByZXR1cm4gbW9kZWwuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuICByZXR1cm4gbW9kZWwubmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlTmFtZUZvck1vZGVsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4sXG4gIC4uLmFyZ3M6IHN0cmluZ1tdXG4pIHtcbiAgcmV0dXJuIFtnZXRUYWJsZU5hbWUobW9kZWwpLCAuLi5hcmdzXS5qb2luKFwiX1wiKTtcbn1cbiJdfQ==
|
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
@@ -25,6 +25,6 @@ Injectables.setRegistry(new InjectablesRegistry());
|
|
25
25
|
* @const VERSION
|
26
26
|
* @memberOf module:ts-workspace
|
27
27
|
*/
|
28
|
-
export const VERSION = "0.
|
28
|
+
export const VERSION = "0.3.0";
|
29
29
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlEOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVILGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBRTdCLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZXNSZWdpc3RyeSB9IGZyb20gXCIuL3JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IEluamVjdGFibGVzIH0gZnJvbSBcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBNb2R1bGUgc3VtbWFyeVxuICogQGRlc2NyaXB0aW9uIE1vZHVsZSBkZXNjcmlwdGlvblxuICogQG1vZHVsZSB0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IE5hbWVzcGFjZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTmFtZXNwYWNlIGRlc2NyaXB0aW9uXG4gKiBAbmFtZXNwYWNlIE5hbWVzcGFjZVxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9pZGVudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BlcnNpc3RlbmNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVwb3NpdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdG9yc1wiO1xuXG5JbmplY3RhYmxlcy5zZXRSZWdpc3RyeShuZXcgSW5qZWN0YWJsZXNSZWdpc3RyeSgpKTtcblxuLyoqXG4gKiBAc3VtbWFyeSBzdG9yZXMgdGhlIGN1cnJlbnQgcGFja2FnZSB2ZXJzaW9uXG4gKiBAZGVzY3JpcHRpb24gdGhpcyBpcyBob3cgeW91IHNob3VsZCBkb2N1bWVudCBhIGNvbnN0YW50XG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjAuMy4wXCI7XG4iXX0=
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export {};
|
2
|
+
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL1BhZ2luYXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW50ZXJmYWNlcy9QYWdpbmF0YWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2luYXRvciB9IGZyb20gXCIuLi9xdWVyeS9QYWdpbmF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0YWJsZSB7XG4gIHBhZ2luYXRlPFY+KC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxQYWdpbmF0b3I8ViwgYW55Pj47XG59XG4iXX0=
|
@@ -4,7 +4,6 @@ export * from "./Observable";
|
|
4
4
|
export * from "./Observer";
|
5
5
|
export * from "./Queriable";
|
6
6
|
export * from "./RawExecutor";
|
7
|
-
export * from "./Sequence";
|
8
7
|
export * from "./SequenceOptions";
|
9
8
|
|
10
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUMiLCJmaWxlIjoiaW50ZXJmYWNlcy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0J1aWxkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0V4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9PYnNlcnZhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9PYnNlcnZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUXVlcmlhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SYXdFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VxdWVuY2VPcHRpb25zXCI7XG4iXX0=
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import { ModelArg, Model } from "@decaf-ts/decorator-validation";
|
2
2
|
export declare abstract class BaseModel extends Model {
|
3
|
-
createdOn
|
4
|
-
updatedOn
|
3
|
+
createdOn: Date;
|
4
|
+
updatedOn: Date;
|
5
|
+
createdBy: string;
|
6
|
+
updatedBy: string;
|
5
7
|
protected constructor(arg?: ModelArg<BaseModel>);
|
6
8
|
}
|
@@ -9,11 +9,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
};
|
10
10
|
import { DBOperations, timestamp } from "@decaf-ts/db-decorators";
|
11
11
|
import { Model } from "@decaf-ts/decorator-validation";
|
12
|
+
import { createdBy, updatedBy } from "./decorators";
|
12
13
|
export class BaseModel extends Model {
|
13
14
|
constructor(arg) {
|
14
15
|
super(arg);
|
15
|
-
this.createdOn = undefined;
|
16
|
-
this.updatedOn = undefined;
|
17
16
|
}
|
18
17
|
}
|
19
18
|
__decorate([
|
@@ -24,5 +23,13 @@ __decorate([
|
|
24
23
|
timestamp(),
|
25
24
|
__metadata("design:type", Date)
|
26
25
|
], BaseModel.prototype, "updatedOn", void 0);
|
26
|
+
__decorate([
|
27
|
+
createdBy(),
|
28
|
+
__metadata("design:type", String)
|
29
|
+
], BaseModel.prototype, "createdBy", void 0);
|
30
|
+
__decorate([
|
31
|
+
updatedBy(),
|
32
|
+
__metadata("design:type", String)
|
33
|
+
], BaseModel.prototype, "updatedBy", void 0);
|
27
34
|
|
28
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9CYXNlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQVksS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsTUFBTSxPQUFnQixTQUFVLFNBQVEsS0FBSztJQVczQyxZQUFzQixHQUF5QjtRQUM3QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFaQztJQURDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDOzhCQUNuQixJQUFJOzRDQUFDO0FBRWpCO0lBREMsU0FBUyxFQUFFOzhCQUNBLElBQUk7NENBQUM7QUFHakI7SUFEQyxTQUFTLEVBQUU7OzRDQUNPO0FBRW5CO0lBREMsU0FBUyxFQUFFOzs0Q0FDTyIsImZpbGUiOiJtb2RlbC9CYXNlTW9kZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQk9wZXJhdGlvbnMsIHRpbWVzdGFtcCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTW9kZWxBcmcsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlZEJ5LCB1cGRhdGVkQnkgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWwgZXh0ZW5kcyBNb2RlbCB7XG4gIEB0aW1lc3RhbXAoREJPcGVyYXRpb25zLkNSRUFURSlcbiAgY3JlYXRlZE9uITogRGF0ZTtcbiAgQHRpbWVzdGFtcCgpXG4gIHVwZGF0ZWRPbiE6IERhdGU7XG5cbiAgQGNyZWF0ZWRCeSgpXG4gIGNyZWF0ZWRCeSE6IHN0cmluZztcbiAgQHVwZGF0ZWRCeSgpXG4gIHVwZGF0ZWRCeSE6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYXJnPzogTW9kZWxBcmc8QmFzZU1vZGVsPikge1xuICAgIHN1cGVyKGFyZyk7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Model, ModelArg } from "@decaf-ts/decorator-validation";
|
2
|
+
import { Roles } from "../persistence/constants";
|
3
|
+
export declare class User extends Model {
|
4
|
+
id: string;
|
5
|
+
roles?: (string | Roles)[];
|
6
|
+
affiliations?: string[];
|
7
|
+
constructor(arg?: ModelArg<User>);
|
8
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
+
};
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
|
+
};
|
10
|
+
import { list, model, Model } from "@decaf-ts/decorator-validation";
|
11
|
+
import { pk } from "../identity/decorators";
|
12
|
+
let User = class User extends Model {
|
13
|
+
constructor(arg) {
|
14
|
+
super(arg);
|
15
|
+
}
|
16
|
+
};
|
17
|
+
__decorate([
|
18
|
+
pk(),
|
19
|
+
__metadata("design:type", String)
|
20
|
+
], User.prototype, "id", void 0);
|
21
|
+
__decorate([
|
22
|
+
list([String]),
|
23
|
+
__metadata("design:type", Array)
|
24
|
+
], User.prototype, "roles", void 0);
|
25
|
+
__decorate([
|
26
|
+
list([String]),
|
27
|
+
__metadata("design:type", Array)
|
28
|
+
], User.prototype, "affiliations", void 0);
|
29
|
+
User = __decorate([
|
30
|
+
model(),
|
31
|
+
__metadata("design:paramtypes", [Object])
|
32
|
+
], User);
|
33
|
+
export { User };
|
34
|
+
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9Vc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdyQyxJQUFNLElBQUksR0FBVixNQUFNLElBQUssU0FBUSxLQUFLO0lBVTdCLFlBQVksR0FBb0I7UUFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFYQztJQURDLEVBQUUsRUFBRTs7Z0NBQ087QUFHWjtJQURDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzttQ0FDWTtBQUczQjtJQURDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzswQ0FDUztBQVJiLElBQUk7SUFEaEIsS0FBSyxFQUFFOztHQUNLLElBQUksQ0FhaEIiLCJmaWxlIjoibW9kZWwvVXNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxpc3QsIG1vZGVsLCBNb2RlbCwgTW9kZWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSb2xlcyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBrIH0gZnJvbSBcIi4uL2lkZW50aXR5L2RlY29yYXRvcnNcIjtcblxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBVc2VyIGV4dGVuZHMgTW9kZWwge1xuICBAcGsoKVxuICBpZCE6IHN0cmluZztcblxuICBAbGlzdChbU3RyaW5nXSlcbiAgcm9sZXM/OiAoc3RyaW5nIHwgUm9sZXMpW107XG5cbiAgQGxpc3QoW1N0cmluZ10pXG4gIGFmZmlsaWF0aW9ucz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPFVzZXI+KSB7XG4gICAgc3VwZXIoYXJnKTtcbiAgfVxufVxuIl19
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
2
|
+
import { Repository } from "../repository/Repository";
|
3
|
+
import { RelationsMetadata } from "./types";
|
4
|
+
import { Context } from "@decaf-ts/db-decorators/lib/repository/Context";
|
5
|
+
export declare function createOrUpdate<M extends Model>(model: M, context: Context<M>, repository?: Repository<M>): Promise<M>;
|
6
|
+
export declare function oneToOneOnCreate<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
7
|
+
export declare function oneToOneOnUpdate<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
8
|
+
export declare function oneToOneOnDelete<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
9
|
+
export declare function oneToManyOnCreate<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
10
|
+
export declare function oneToManyOnUpdate<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
11
|
+
export declare function oneToManyOnDelete<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
12
|
+
export declare function getPopulateKey(tableName: string, fieldName: string, id: string | number): string;
|
13
|
+
export declare function cacheModelForPopulate<M extends Model>(context: Context<M>, parentModel: M, propertyKey: string, pkValue: string | number, cacheValue: any): Promise<void>;
|
14
|
+
export declare function populate<M extends Model, R extends Repository<M>, Y extends RelationsMetadata>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
15
|
+
export declare function repositoryFromTypeMetadata<M extends Model>(model: any, propertyKey: string): Repository<M>;
|
@@ -0,0 +1,205 @@
|
|
1
|
+
import { Model, Validation, ValidationKeys, } from "@decaf-ts/decorator-validation";
|
2
|
+
import { Repository } from "../repository/Repository";
|
3
|
+
import { findPrimaryKey, InternalError, NotFoundError, } from "@decaf-ts/db-decorators";
|
4
|
+
import { PersistenceKeys } from "../persistence/constants";
|
5
|
+
import { Cascade } from "../repository/constants";
|
6
|
+
export async function createOrUpdate(model, context, repository) {
|
7
|
+
if (!repository) {
|
8
|
+
const constructor = Model.get(model.constructor.name);
|
9
|
+
if (!constructor)
|
10
|
+
throw new InternalError(`Could not find model ${model.constructor.name}`);
|
11
|
+
repository = Repository.forModel(constructor);
|
12
|
+
}
|
13
|
+
if (typeof model[repository.pk] === "undefined")
|
14
|
+
return repository.create(model, context);
|
15
|
+
else {
|
16
|
+
try {
|
17
|
+
return repository.update(model, context);
|
18
|
+
}
|
19
|
+
catch (e) {
|
20
|
+
if (!(e instanceof NotFoundError))
|
21
|
+
throw e;
|
22
|
+
return repository.create(model, context);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
export async function oneToOneOnCreate(context, data, key, model) {
|
27
|
+
const propertyValue = model[key];
|
28
|
+
if (!propertyValue)
|
29
|
+
return;
|
30
|
+
if (typeof propertyValue !== "object") {
|
31
|
+
const innerRepo = repositoryFromTypeMetadata(model, key);
|
32
|
+
const read = await innerRepo.read(propertyValue);
|
33
|
+
await cacheModelForPopulate(context, model, key, propertyValue, read);
|
34
|
+
model[key] = propertyValue;
|
35
|
+
return;
|
36
|
+
}
|
37
|
+
const constructor = Model.get(data.class);
|
38
|
+
if (!constructor)
|
39
|
+
throw new InternalError(`Could not find model ${data.class}`);
|
40
|
+
const repo = Repository.forModel(constructor);
|
41
|
+
const created = await repo.create(propertyValue);
|
42
|
+
const pk = findPrimaryKey(created).id;
|
43
|
+
await cacheModelForPopulate(context, model, key, created[pk], created);
|
44
|
+
model[key] = created[pk];
|
45
|
+
}
|
46
|
+
export async function oneToOneOnUpdate(context, data, key, model) {
|
47
|
+
const propertyValue = model[key];
|
48
|
+
if (!propertyValue)
|
49
|
+
return;
|
50
|
+
if (data.cascade.update !== Cascade.CASCADE)
|
51
|
+
return;
|
52
|
+
if (typeof propertyValue !== "object") {
|
53
|
+
const innerRepo = repositoryFromTypeMetadata(model, key);
|
54
|
+
const read = await innerRepo.read(propertyValue);
|
55
|
+
await cacheModelForPopulate(context, model, key, propertyValue, read);
|
56
|
+
model[key] = propertyValue;
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
const updated = await createOrUpdate(model[key], context);
|
60
|
+
const pk = findPrimaryKey(updated).id;
|
61
|
+
await cacheModelForPopulate(context, model, key, updated[pk], updated);
|
62
|
+
model[key] = updated[pk];
|
63
|
+
}
|
64
|
+
export async function oneToOneOnDelete(context, data, key, model) {
|
65
|
+
const propertyValue = model[key];
|
66
|
+
if (!propertyValue)
|
67
|
+
return;
|
68
|
+
if (data.cascade.update !== Cascade.CASCADE)
|
69
|
+
return;
|
70
|
+
const innerRepo = repositoryFromTypeMetadata(model, key);
|
71
|
+
let deleted;
|
72
|
+
if (!(propertyValue instanceof Model))
|
73
|
+
deleted = await innerRepo.delete(model[key], context);
|
74
|
+
else
|
75
|
+
deleted = await innerRepo.delete(model[key][innerRepo.pk], context);
|
76
|
+
await cacheModelForPopulate(context, model, key, deleted[innerRepo.pk], deleted);
|
77
|
+
}
|
78
|
+
export async function oneToManyOnCreate(context, data, key, model) {
|
79
|
+
const propertyValues = model[key];
|
80
|
+
if (!propertyValues || !propertyValues.length)
|
81
|
+
return;
|
82
|
+
const arrayType = typeof propertyValues[0];
|
83
|
+
if (!propertyValues.every((item) => typeof item === arrayType))
|
84
|
+
throw new InternalError(`Invalid operation. All elements of property ${key} must match the same type.`);
|
85
|
+
const uniqueValues = new Set([...propertyValues]);
|
86
|
+
if (arrayType !== "object") {
|
87
|
+
const repo = repositoryFromTypeMetadata(model, key);
|
88
|
+
for (const id of uniqueValues) {
|
89
|
+
const read = await repo.read(id);
|
90
|
+
await cacheModelForPopulate(context, model, key, id, read);
|
91
|
+
}
|
92
|
+
model[key] = [...uniqueValues];
|
93
|
+
return;
|
94
|
+
}
|
95
|
+
const pkName = findPrimaryKey(propertyValues[0]).id;
|
96
|
+
const result = new Set();
|
97
|
+
for (const m of propertyValues) {
|
98
|
+
const record = await createOrUpdate(m, context);
|
99
|
+
await cacheModelForPopulate(context, model, key, record[pkName], record);
|
100
|
+
result.add(record[pkName]);
|
101
|
+
}
|
102
|
+
model[key] = [...result];
|
103
|
+
}
|
104
|
+
export async function oneToManyOnUpdate(context, data, key, model) {
|
105
|
+
const { cascade } = data;
|
106
|
+
if (cascade.update !== Cascade.CASCADE)
|
107
|
+
return;
|
108
|
+
return oneToManyOnCreate.call(this, context, data, key, model);
|
109
|
+
}
|
110
|
+
export async function oneToManyOnDelete(context, data, key, model) {
|
111
|
+
if (data.cascade.delete !== Cascade.CASCADE)
|
112
|
+
return;
|
113
|
+
const values = model[key];
|
114
|
+
if (!values || !values.length)
|
115
|
+
return;
|
116
|
+
const arrayType = typeof values[0];
|
117
|
+
const areAllSameType = values.every((item) => typeof item === arrayType);
|
118
|
+
if (!areAllSameType)
|
119
|
+
throw new InternalError(`Invalid operation. All elements of property ${key} must match the same type.`);
|
120
|
+
const isInstantiated = arrayType === "object";
|
121
|
+
const repo = isInstantiated
|
122
|
+
? Repository.forModel(values[0])
|
123
|
+
: repositoryFromTypeMetadata(model, key);
|
124
|
+
const uniqueValues = new Set([
|
125
|
+
...(isInstantiated
|
126
|
+
? values.map((v) => v[repo.pk])
|
127
|
+
: values),
|
128
|
+
]);
|
129
|
+
for (const id of uniqueValues.values()) {
|
130
|
+
const deleted = await repo.delete(id, context);
|
131
|
+
await cacheModelForPopulate(context, model, key, id, deleted);
|
132
|
+
}
|
133
|
+
model[key] = [...uniqueValues];
|
134
|
+
}
|
135
|
+
export function getPopulateKey(tableName, fieldName, id) {
|
136
|
+
return [PersistenceKeys.POPULATE, tableName, fieldName, id].join(".");
|
137
|
+
}
|
138
|
+
export async function cacheModelForPopulate(context, parentModel, propertyKey, pkValue, cacheValue) {
|
139
|
+
const cacheKey = getPopulateKey(parentModel.constructor.name, propertyKey, pkValue);
|
140
|
+
return context.put(cacheKey, cacheValue);
|
141
|
+
}
|
142
|
+
export async function populate(context, data, key, model) {
|
143
|
+
if (!data.populate)
|
144
|
+
return;
|
145
|
+
const nested = model[key];
|
146
|
+
const isArr = Array.isArray(nested);
|
147
|
+
if (typeof nested === "undefined" || (isArr && nested.length === 0))
|
148
|
+
return;
|
149
|
+
async function fetchPopulateValues(c, model, propName, propKeyValues) {
|
150
|
+
let cacheKey;
|
151
|
+
let val;
|
152
|
+
const results = [];
|
153
|
+
for (const proKeyValue of propKeyValues) {
|
154
|
+
cacheKey = getPopulateKey(model.constructor.name, propName, proKeyValue);
|
155
|
+
try {
|
156
|
+
val = await c.get(cacheKey);
|
157
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
158
|
+
}
|
159
|
+
catch (e) {
|
160
|
+
const repo = repositoryFromTypeMetadata(model, propName);
|
161
|
+
if (!repo)
|
162
|
+
throw new InternalError("Could not find repo");
|
163
|
+
val = await repo.read(proKeyValue);
|
164
|
+
}
|
165
|
+
results.push(val);
|
166
|
+
}
|
167
|
+
return results;
|
168
|
+
}
|
169
|
+
const res = await fetchPopulateValues(context, model, key, isArr ? nested : [nested]);
|
170
|
+
model[key] = isArr ? res : res[0];
|
171
|
+
}
|
172
|
+
const commomTypes = [
|
173
|
+
"array",
|
174
|
+
"string",
|
175
|
+
"number",
|
176
|
+
"boolean",
|
177
|
+
"symbol",
|
178
|
+
"function",
|
179
|
+
"object",
|
180
|
+
"undefined",
|
181
|
+
"null",
|
182
|
+
"bigint",
|
183
|
+
];
|
184
|
+
export function repositoryFromTypeMetadata(model, propertyKey) {
|
185
|
+
const types = Reflect.getMetadata(Validation.key(Array.isArray(model[propertyKey])
|
186
|
+
? ValidationKeys.LIST
|
187
|
+
: ValidationKeys.TYPE), model, propertyKey);
|
188
|
+
const customTypes = Array.isArray(model[propertyKey])
|
189
|
+
? types.class
|
190
|
+
: types.customTypes;
|
191
|
+
if (!types || !customTypes)
|
192
|
+
throw new InternalError(`Failed to find types decorators for property ${propertyKey}`);
|
193
|
+
const allowedTypes = Array.isArray(customTypes)
|
194
|
+
? [...customTypes]
|
195
|
+
: [customTypes];
|
196
|
+
const constructorName = allowedTypes.find((t) => !commomTypes.includes(`${t}`.toLowerCase()));
|
197
|
+
if (!constructorName)
|
198
|
+
throw new InternalError(`Property key ${propertyKey} does not have a valid constructor type`);
|
199
|
+
const constructor = Model.get(constructorName);
|
200
|
+
if (!constructor)
|
201
|
+
throw new InternalError(`No registered model found for ${constructorName}`);
|
202
|
+
return Repository.forModel(constructor);
|
203
|
+
}
|
204
|
+
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLEtBQUssRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUNmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFDTCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsR0FDZCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbEQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLEtBQVEsRUFDUixPQUFtQixFQUNuQixVQUEwQjtJQUUxQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO1lBQ2QsTUFBTSxJQUFJLGFBQWEsQ0FBQyx3QkFBd0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBa0IsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxPQUFRLEtBQTZCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVc7UUFDdEUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN0QyxDQUFDO1FBQ0osSUFBSSxDQUFDO1lBQ0gsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENB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QUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztRQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3RCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXO1FBQ3hCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLGdEQUFnRCxXQUFXLEVBQUUsQ0FDOUQsQ0FBQztJQUVKLE1BQU0sWUFBWSxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQ3ZDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUNuRCxDQUFDO0lBQ0YsSUFBSSxDQUFDLGVBQWU7UUFDbEIsTUFBTSxJQUFJLGFBQWEsQ0FDckIsZ0JBQWdCLFdBQVcseUNBQXlDLENBQ3JFLENBQUM7SUFDSixNQUFNLFdBQVcsR0FBK0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzRSxJQUFJLENBQUMsV0FBVztRQUNkLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFFOUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFDLENBQUMiLCJmaWxlIjoibW9kZWwvY29uc3RydWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIE1vZGVsLFxuICBWYWxpZGF0aW9uLFxuICBWYWxpZGF0aW9uS2V5cyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGZpbmRQcmltYXJ5S2V5LFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IENhc2NhZGUgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMvbGliL3JlcG9zaXRvcnkvQ29udGV4dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IE0sXG4gIGNvbnRleHQ6IENvbnRleHQ8TT4sXG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5PE0+XG4pOiBQcm9taXNlPE0+IHtcbiAgaWYgKCFyZXBvc2l0b3J5KSB7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSk7XG4gICAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb3VsZCBub3QgZmluZCBtb2RlbCAke21vZGVsLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoY29uc3RydWN0b3IpIGFzIFJlcG9zaXRvcnk8TT47XG4gIH1cbiAgaWYgKHR5cGVvZiAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcmVwb3NpdG9yeS5wa10gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgcmV0dXJuIHJlcG9zaXRvcnkuY3JlYXRlKG1vZGVsLCBjb250ZXh0KTtcbiAgZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXBvc2l0b3J5LnVwZGF0ZShtb2RlbCwgY29udGV4dCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikpIHRocm93IGU7XG4gICAgICByZXR1cm4gcmVwb3NpdG9yeS5jcmVhdGUobW9kZWwsIGNvbnRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPbkNyZWF0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxNPixcbiAgWSBleHRlbmRzIFJlbGF0aW9uc01ldGFkYXRhLFxuPih0aGlzOiBSLCBjb250ZXh0OiBDb250ZXh0PE0+LCBkYXRhOiBZLCBrZXk6IHN0cmluZywgbW9kZWw6IE0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvcGVydHlWYWx1ZTogYW55ID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZSkgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGlubmVyUmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXkpO1xuICAgIGNvbnN0IHJlYWQgPSBhd2FpdCBpbm5lclJlcG8ucmVhZChwcm9wZXJ0eVZhbHVlKTtcbiAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcHJvcGVydHlWYWx1ZSwgcmVhZCk7XG4gICAgKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBwcm9wZXJ0eVZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gTW9kZWwuZ2V0KGRhdGEuY2xhc3MpO1xuICBpZiAoIWNvbnN0cnVjdG9yKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb3VsZCBub3QgZmluZCBtb2RlbCAke2RhdGEuY2xhc3N9YCk7XG4gIGNvbnN0IHJlcG86IFJlcG9zaXRvcnk8YW55PiA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoY29uc3RydWN0b3IpO1xuICBjb25zdCBjcmVhdGVkID0gYXdhaXQgcmVwby5jcmVhdGUocHJvcGVydHlWYWx1ZSk7XG4gIGNvbnN0IHBrID0gZmluZFByaW1hcnlLZXkoY3JlYXRlZCkuaWQ7XG4gIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBjcmVhdGVkW3BrXSwgY3JlYXRlZCk7XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBjcmVhdGVkW3BrXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvT25lT25VcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TT4sXG4gIFkgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbj4odGhpczogUiwgY29udGV4dDogQ29udGV4dDxNPiwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBNKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWU6IGFueSA9IChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWUpIHJldHVybjtcbiAgaWYgKGRhdGEuY2FzY2FkZS51cGRhdGUgIT09IENhc2NhZGUuQ0FTQ0FERSkgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGlubmVyUmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXkpO1xuICAgIGNvbnN0IHJlYWQgPSBhd2FpdCBpbm5lclJlcG8ucmVhZChwcm9wZXJ0eVZhbHVlKTtcbiAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcHJvcGVydHlWYWx1ZSwgcmVhZCk7XG4gICAgKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBwcm9wZXJ0eVZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBjcmVhdGVPclVwZGF0ZShcbiAgICAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSxcbiAgICBjb250ZXh0XG4gICk7XG4gIGNvbnN0IHBrID0gZmluZFByaW1hcnlLZXkodXBkYXRlZCkuaWQ7XG4gIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShcbiAgICBjb250ZXh0LFxuICAgIG1vZGVsLFxuICAgIGtleSxcbiAgICAodXBkYXRlZCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwa10sXG4gICAgdXBkYXRlZFxuICApO1xuICAobW9kZWwgYXMgYW55KVtrZXldID0gKHVwZGF0ZWQgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcGtdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPbkRlbGV0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxNPixcbiAgWSBleHRlbmRzIFJlbGF0aW9uc01ldGFkYXRhLFxuPih0aGlzOiBSLCBjb250ZXh0OiBDb250ZXh0PE0+LCBkYXRhOiBZLCBrZXk6IHN0cmluZywgbW9kZWw6IE0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvcGVydHlWYWx1ZTogYW55ID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZSkgcmV0dXJuO1xuICBpZiAoZGF0YS5jYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIGNvbnN0IGlubmVyUmVwbzogUmVwb3NpdG9yeTxNPiA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXkpO1xuICBsZXQgZGVsZXRlZDogTTtcbiAgaWYgKCEocHJvcGVydHlWYWx1ZSBpbnN0YW5jZW9mIE1vZGVsKSlcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShcbiAgICAgIChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gIGVsc2VcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShcbiAgICAgIChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldW2lubmVyUmVwby5wa10sXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIChkZWxldGVkIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2lubmVyUmVwby5wa10sXG4gICAgZGVsZXRlZFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9NYW55T25DcmVhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TT4sXG4gIFkgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbj4odGhpczogUiwgY29udGV4dDogQ29udGV4dDxNPiwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBNKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XTtcbiAgaWYgKCFwcm9wZXJ0eVZhbHVlcyB8fCAhcHJvcGVydHlWYWx1ZXMubGVuZ3RoKSByZXR1cm47XG4gIGNvbnN0IGFycmF5VHlwZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1swXTtcbiAgaWYgKCFwcm9wZXJ0eVZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gYXJyYXlUeXBlKSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBJbnZhbGlkIG9wZXJhdGlvbi4gQWxsIGVsZW1lbnRzIG9mIHByb3BlcnR5ICR7a2V5fSBtdXN0IG1hdGNoIHRoZSBzYW1lIHR5cGUuYFxuICAgICk7XG4gIGNvbnN0IHVuaXF1ZVZhbHVlcyA9IG5ldyBTZXQoWy4uLnByb3BlcnR5VmFsdWVzXSk7XG4gIGlmIChhcnJheVR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEobW9kZWwsIGtleSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCByZXBvLnJlYWQoaWQpO1xuICAgICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIGlkLCByZWFkKTtcbiAgICB9XG4gICAgKG1vZGVsIGFzIGFueSlba2V5XSA9IFsuLi51bmlxdWVWYWx1ZXNdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBrTmFtZSA9IGZpbmRQcmltYXJ5S2V5KHByb3BlcnR5VmFsdWVzWzBdKS5pZDtcblxuICBjb25zdCByZXN1bHQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIGZvciAoY29uc3QgbSBvZiBwcm9wZXJ0eVZhbHVlcykge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNyZWF0ZU9yVXBkYXRlKG0sIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCByZWNvcmRbcGtOYW1lXSwgcmVjb3JkKTtcbiAgICByZXN1bHQuYWRkKHJlY29yZFtwa05hbWVdKTtcbiAgfVxuXG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBbLi4ucmVzdWx0XTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvTWFueU9uVXBkYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0+LFxuICBZIGV4dGVuZHMgUmVsYXRpb25zTWV0YWRhdGEsXG4+KHRoaXM6IFIsIGNvbnRleHQ6IENvbnRleHQ8TT4sIGRhdGE6IFksIGtleTogc3RyaW5nLCBtb2RlbDogTSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNhc2NhZGUgfSA9IGRhdGE7XG4gIGlmIChjYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIHJldHVybiBvbmVUb01hbnlPbkNyZWF0ZS5jYWxsKHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWwpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9NYW55T25EZWxldGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TT4sXG4gIFkgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbj4odGhpczogUiwgY29udGV4dDogQ29udGV4dDxNPiwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBNKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChkYXRhLmNhc2NhZGUuZGVsZXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgY29uc3QgdmFsdWVzID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XG4gIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSByZXR1cm47XG4gIGNvbnN0IGFycmF5VHlwZSA9IHR5cGVvZiB2YWx1ZXNbMF07XG4gIGNvbnN0IGFyZUFsbFNhbWVUeXBlID0gdmFsdWVzLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtID09PSBhcnJheVR5cGUpO1xuICBpZiAoIWFyZUFsbFNhbWVUeXBlKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYEludmFsaWQgb3BlcmF0aW9uLiBBbGwgZWxlbWVudHMgb2YgcHJvcGVydHkgJHtrZXl9IG11c3QgbWF0Y2ggdGhlIHNhbWUgdHlwZS5gXG4gICAgKTtcbiAgY29uc3QgaXNJbnN0YW50aWF0ZWQgPSBhcnJheVR5cGUgPT09IFwib2JqZWN0XCI7XG4gIGNvbnN0IHJlcG8gPSBpc0luc3RhbnRpYXRlZFxuICAgID8gUmVwb3NpdG9yeS5mb3JNb2RlbCh2YWx1ZXNbMF0pXG4gICAgOiByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShtb2RlbCwga2V5KTtcblxuICBjb25zdCB1bmlxdWVWYWx1ZXMgPSBuZXcgU2V0KFtcbiAgICAuLi4oaXNJbnN0YW50aWF0ZWRcbiAgICAgID8gdmFsdWVzLm1hcCgodjogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdltyZXBvLnBrXSlcbiAgICAgIDogdmFsdWVzKSxcbiAgXSk7XG5cbiAgZm9yIChjb25zdCBpZCBvZiB1bmlxdWVWYWx1ZXMudmFsdWVzKCkpIHtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgcmVwby5kZWxldGUoaWQsIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBpZCwgZGVsZXRlZCk7XG4gIH1cbiAgKG1vZGVsIGFzIGFueSlba2V5XSA9IFsuLi51bmlxdWVWYWx1ZXNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wdWxhdGVLZXkoXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuKSB7XG4gIHJldHVybiBbUGVyc2lzdGVuY2VLZXlzLlBPUFVMQVRFLCB0YWJsZU5hbWUsIGZpZWxkTmFtZSwgaWRdLmpvaW4oXCIuXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FjaGVNb2RlbEZvclBvcHVsYXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnRleHQ6IENvbnRleHQ8TT4sXG4gIHBhcmVudE1vZGVsOiBNLFxuICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuICBwa1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gIGNhY2hlVmFsdWU6IGFueVxuKSB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gZ2V0UG9wdWxhdGVLZXkoXG4gICAgcGFyZW50TW9kZWwuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm9wZXJ0eUtleSxcbiAgICBwa1ZhbHVlXG4gICk7XG4gIHJldHVybiBjb250ZXh0LnB1dChjYWNoZUtleSwgY2FjaGVWYWx1ZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3B1bGF0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxNPixcbiAgWSBleHRlbmRzIFJlbGF0aW9uc01ldGFkYXRhLFxuPih0aGlzOiBSLCBjb250ZXh0OiBDb250ZXh0PE0+LCBkYXRhOiBZLCBrZXk6IHN0cmluZywgbW9kZWw6IE0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFkYXRhLnBvcHVsYXRlKSByZXR1cm47XG4gIGNvbnN0IG5lc3RlZDogYW55ID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV07XG4gIGNvbnN0IGlzQXJyID0gQXJyYXkuaXNBcnJheShuZXN0ZWQpO1xuICBpZiAodHlwZW9mIG5lc3RlZCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAoaXNBcnIgJiYgbmVzdGVkLmxlbmd0aCA9PT0gMCkpIHJldHVybjtcblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaFBvcHVsYXRlVmFsdWVzKFxuICAgIGM6IENvbnRleHQ8TT4sXG4gICAgbW9kZWw6IE0sXG4gICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICBwcm9wS2V5VmFsdWVzOiBhbnlbXVxuICApIHtcbiAgICBsZXQgY2FjaGVLZXk6IHN0cmluZztcbiAgICBsZXQgdmFsOiBhbnk7XG4gICAgY29uc3QgcmVzdWx0czogTVtdID0gW107XG4gICAgZm9yIChjb25zdCBwcm9LZXlWYWx1ZSBvZiBwcm9wS2V5VmFsdWVzKSB7XG4gICAgICBjYWNoZUtleSA9IGdldFBvcHVsYXRlS2V5KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUsIHByb3BOYW1lLCBwcm9LZXlWYWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICB2YWwgPSBhd2FpdCBjLmdldChjYWNoZUtleSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEobW9kZWwsIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKCFyZXBvKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHJlcG9cIik7XG4gICAgICAgIHZhbCA9IGF3YWl0IHJlcG8ucmVhZChwcm9LZXlWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXN1bHRzLnB1c2godmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hQb3B1bGF0ZVZhbHVlcyhcbiAgICBjb250ZXh0LFxuICAgIG1vZGVsLFxuICAgIGtleSxcbiAgICBpc0FyciA/IG5lc3RlZCA6IFtuZXN0ZWRdXG4gICk7XG4gIChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldID0gaXNBcnIgPyByZXMgOiByZXNbMF07XG59XG5cbmNvbnN0IGNvbW1vbVR5cGVzID0gW1xuICBcImFycmF5XCIsXG4gIFwic3RyaW5nXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwiYm9vbGVhblwiLFxuICBcInN5bWJvbFwiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwib2JqZWN0XCIsXG4gIFwidW5kZWZpbmVkXCIsXG4gIFwibnVsbFwiLFxuICBcImJpZ2ludFwiLFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBhbnksXG4gIHByb3BlcnR5S2V5OiBzdHJpbmdcbik6IFJlcG9zaXRvcnk8TT4ge1xuICBjb25zdCB0eXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgVmFsaWRhdGlvbi5rZXkoXG4gICAgICBBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5S2V5XSlcbiAgICAgICAgPyBWYWxpZGF0aW9uS2V5cy5MSVNUXG4gICAgICAgIDogVmFsaWRhdGlvbktleXMuVFlQRVxuICAgICksXG4gICAgbW9kZWwsXG4gICAgcHJvcGVydHlLZXlcbiAgKTtcbiAgY29uc3QgY3VzdG9tVHlwZXM6IGFueSA9IEFycmF5LmlzQXJyYXkobW9kZWxbcHJvcGVydHlLZXldKVxuICAgID8gdHlwZXMuY2xhc3NcbiAgICA6IHR5cGVzLmN1c3RvbVR5cGVzO1xuICBpZiAoIXR5cGVzIHx8ICFjdXN0b21UeXBlcylcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmluZCB0eXBlcyBkZWNvcmF0b3JzIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5S2V5fWBcbiAgICApO1xuXG4gIGNvbnN0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGN1c3RvbVR5cGVzKVxuICAgID8gWy4uLmN1c3RvbVR5cGVzXVxuICAgIDogW2N1c3RvbVR5cGVzXTtcbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gYWxsb3dlZFR5cGVzLmZpbmQoXG4gICAgKHQpID0+ICFjb21tb21UeXBlcy5pbmNsdWRlcyhgJHt0fWAudG9Mb3dlckNhc2UoKSlcbiAgKTtcbiAgaWYgKCFjb25zdHJ1Y3Rvck5hbWUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgUHJvcGVydHkga2V5ICR7cHJvcGVydHlLZXl9IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjb25zdHJ1Y3RvciB0eXBlYFxuICAgICk7XG4gIGNvbnN0IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxNPiB8IHVuZGVmaW5lZCA9IE1vZGVsLmdldChjb25zdHJ1Y3Rvck5hbWUpO1xuICBpZiAoIWNvbnN0cnVjdG9yKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBObyByZWdpc3RlcmVkIG1vZGVsIGZvdW5kIGZvciAke2NvbnN0cnVjdG9yTmFtZX1gKTtcblxuICByZXR1cm4gUmVwb3NpdG9yeS5mb3JNb2RlbChjb25zdHJ1Y3Rvcik7XG59XG4iXX0=
|
@@ -1,5 +1,7 @@
|
|
1
|
+
import { Context } from "@decaf-ts/db-decorators";
|
2
|
+
import { CascadeMetadata } from "../repository/types";
|
1
3
|
import { OrderDirection } from "../repository/constants";
|
2
|
-
import { Model } from "@decaf-ts/decorator-validation";
|
4
|
+
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
3
5
|
import { Repository } from "../repository/Repository";
|
4
6
|
export declare function table(tableName: string): import("@decaf-ts/reflection").CustomDecorator<V>;
|
5
7
|
export declare function column(columnName: string): PropertyDecorator;
|
@@ -13,8 +15,8 @@ export declare function column(columnName: string): PropertyDecorator;
|
|
13
15
|
*
|
14
16
|
* @function index
|
15
17
|
*/
|
16
|
-
export declare function index(
|
17
|
-
export declare function uniqueOnCreateUpdate<M extends Model, R extends Repository<M>, Y = any>(this: R, data: Y, key: string, model: M): Promise<void>;
|
18
|
+
export declare function index(directions?: OrderDirection[], compositions?: string[]): PropertyDecorator;
|
19
|
+
export declare function uniqueOnCreateUpdate<M extends Model, R extends Repository<M>, Y = any>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
18
20
|
/**
|
19
21
|
* @summary Unique Decorator
|
20
22
|
* @description Tags a property as unique.
|
@@ -25,3 +27,49 @@ export declare function uniqueOnCreateUpdate<M extends Model, R extends Reposito
|
|
25
27
|
* @memberOf module:wallet-db.Decorators
|
26
28
|
*/
|
27
29
|
export declare function unique(): (target: object, propertyKey?: any, descriptor?: any) => void;
|
30
|
+
export declare function createdByOnCreateUpdate<M extends Model, R extends Repository<M>, Y = any>(this: R, context: Context<M>, data: Y, key: string, model: M): Promise<void>;
|
31
|
+
export declare function createdBy(): (target: object, propertyKey?: any, descriptor?: any) => void;
|
32
|
+
export declare function updatedBy(): (target: object, propertyKey?: any, descriptor?: any) => void;
|
33
|
+
/**
|
34
|
+
* @summary One To One relation Decorators
|
35
|
+
*
|
36
|
+
* @param {Constructor<any>} clazz the {@link Sequence} to use. Defaults to {@link NoneSequence}
|
37
|
+
* @param {CascadeMetadata} [cascadeOptions]
|
38
|
+
* @param {boolean} populate If true, replaces the specified key in the document with the corresponding record from the database
|
39
|
+
*
|
40
|
+
* @function onToOne
|
41
|
+
*
|
42
|
+
* @memberOf module:wallet-db.Decorators
|
43
|
+
*
|
44
|
+
* @see oneToMany
|
45
|
+
* @see manyToOne
|
46
|
+
*/
|
47
|
+
export declare function oneToOne<M extends Model>(clazz: Constructor<M>, cascadeOptions?: CascadeMetadata, populate?: boolean): (target: object, propertyKey?: any, descriptor?: any) => void;
|
48
|
+
/**
|
49
|
+
* @summary One To Many relation Decorators
|
50
|
+
*
|
51
|
+
* @param {Constructor<any>} clazz the {@link Sequence} to use. Defaults to {@link NoneSequence}
|
52
|
+
* @param {CascadeMetadata} [cascadeOptions]
|
53
|
+
*
|
54
|
+
* @function oneToMany
|
55
|
+
*
|
56
|
+
* @memberOf module:wallet-db.Decorators
|
57
|
+
*
|
58
|
+
* @see oneToOne
|
59
|
+
* @see manyToOne
|
60
|
+
*/
|
61
|
+
export declare function oneToMany<M extends Model>(clazz: Constructor<M>, cascadeOptions?: CascadeMetadata, populate?: boolean): (target: object, propertyKey?: any, descriptor?: any) => void;
|
62
|
+
/**
|
63
|
+
* @summary Many To One relation Decorators
|
64
|
+
*
|
65
|
+
* @param {Constructor<any>} clazz the {@link Sequence} to use. Defaults to {@link NoneSequence}
|
66
|
+
* @param {CascadeMetadata} [cascadeOptions]
|
67
|
+
*
|
68
|
+
* @function manyToOne
|
69
|
+
*
|
70
|
+
* @memberOf module:wallet-db.Decorators
|
71
|
+
*
|
72
|
+
* @see oneToMany
|
73
|
+
* @see oneToOne
|
74
|
+
*/
|
75
|
+
export declare function manyToOne(clazz: Constructor<any>, cascadeOptions?: CascadeMetadata, populate?: boolean): (target: object, propertyKey?: any, descriptor?: any) => void;
|