@decaf-ts/core 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- 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 +4 -10
- package/lib/esm/identity/decorators.js +57 -1
- package/lib/esm/identity/index.js +3 -1
- package/lib/esm/identity/utils.d.ts +2 -0
- package/lib/esm/identity/utils.js +6 -0
- package/lib/esm/index.d.ts +3 -1
- package/lib/esm/index.js +30 -1
- package/lib/esm/interfaces/Builder.js +3 -0
- package/lib/esm/interfaces/Executor.d.ts +3 -1
- package/lib/esm/interfaces/Executor.js +3 -0
- package/lib/esm/interfaces/Observable.js +3 -0
- package/lib/esm/interfaces/Observer.js +3 -0
- package/lib/esm/interfaces/Queriable.d.ts +6 -0
- package/lib/esm/interfaces/Queriable.js +3 -0
- package/lib/esm/interfaces/RawExecutor.d.ts +4 -3
- package/lib/esm/interfaces/RawExecutor.js +3 -0
- package/lib/esm/interfaces/Sequence.d.ts +3 -2
- package/lib/esm/interfaces/Sequence.js +10 -0
- package/lib/esm/interfaces/SequenceOptions.d.ts +9 -1
- package/lib/esm/interfaces/SequenceOptions.js +20 -0
- package/lib/esm/interfaces/index.d.ts +1 -0
- package/lib/esm/interfaces/index.js +10 -1
- package/lib/esm/model/BaseModel.d.ts +2 -3
- package/lib/esm/model/BaseModel.js +28 -1
- package/lib/esm/model/decorators.d.ts +6 -5
- package/lib/esm/model/decorators.js +52 -1
- package/lib/esm/model/index.js +4 -1
- package/lib/esm/persistence/Adapter.d.ts +45 -14
- package/lib/esm/persistence/Adapter.js +178 -1
- package/lib/esm/persistence/constants.d.ts +10 -1
- package/lib/esm/persistence/constants.js +13 -1
- package/lib/esm/persistence/decorators.d.ts +1 -2
- package/lib/esm/persistence/decorators.js +10 -1
- package/lib/esm/persistence/errors.d.ts +4 -0
- package/lib/esm/persistence/errors.js +8 -0
- package/lib/esm/persistence/index.d.ts +1 -1
- package/lib/esm/persistence/index.js +6 -1
- package/lib/esm/query/Clause.d.ts +43 -0
- package/lib/esm/query/Clause.js +76 -0
- package/lib/esm/query/ClauseFactory.d.ts +71 -0
- package/lib/esm/query/ClauseFactory.js +7 -0
- package/lib/esm/query/Condition.d.ts +75 -0
- package/lib/esm/query/Condition.js +248 -0
- package/lib/esm/query/Query.d.ts +43 -0
- package/lib/esm/query/Query.js +55 -0
- package/lib/esm/query/Statement.d.ts +49 -0
- package/lib/esm/query/Statement.js +158 -0
- package/lib/esm/query/clauses/FromClause.d.ts +45 -0
- package/lib/esm/query/clauses/FromClause.js +60 -0
- package/lib/esm/query/clauses/GroupByClause.d.ts +21 -0
- package/lib/esm/query/clauses/GroupByClause.js +20 -0
- package/lib/esm/query/clauses/InsertClause.d.ts +37 -0
- package/lib/esm/query/clauses/InsertClause.js +56 -0
- package/lib/esm/query/clauses/LimitClause.d.ts +29 -0
- package/lib/esm/query/clauses/LimitClause.js +28 -0
- package/lib/esm/query/clauses/OffsetClause.d.ts +21 -0
- package/lib/esm/query/clauses/OffsetClause.js +20 -0
- package/lib/esm/query/clauses/OrderByClause.d.ts +37 -0
- package/lib/esm/query/clauses/OrderByClause.js +40 -0
- package/lib/esm/query/clauses/SelectClause.d.ts +47 -0
- package/lib/esm/query/clauses/SelectClause.js +63 -0
- package/lib/esm/query/clauses/SelectorBasedClause.d.ts +25 -0
- package/lib/esm/query/clauses/SelectorBasedClause.js +45 -0
- package/lib/esm/query/clauses/ValuesClause.d.ts +21 -0
- package/lib/esm/query/clauses/ValuesClause.js +37 -0
- package/lib/esm/query/clauses/WhereClause.d.ts +46 -0
- package/lib/esm/query/clauses/WhereClause.js +72 -0
- package/lib/esm/query/clauses/index.d.ts +10 -0
- package/lib/esm/query/clauses/index.js +12 -0
- package/lib/esm/query/constants.d.ts +79 -0
- package/lib/esm/query/constants.js +88 -0
- package/lib/esm/query/errors.d.ts +4 -0
- package/lib/esm/query/errors.js +8 -0
- package/lib/esm/query/index.d.ts +11 -0
- package/lib/esm/query/index.js +13 -0
- package/lib/esm/query/options.d.ts +371 -0
- package/lib/esm/query/options.js +3 -0
- package/lib/esm/query/selectors.d.ts +38 -0
- package/lib/esm/query/selectors.js +3 -0
- package/lib/esm/query/types.d.ts +2 -0
- package/lib/esm/query/types.js +3 -0
- package/lib/esm/repository/Repository.d.ts +31 -11
- package/lib/esm/repository/Repository.js +275 -1
- package/lib/esm/repository/constants.js +31 -1
- package/lib/esm/repository/decorators.d.ts +2 -3
- package/lib/esm/repository/decorators.js +23 -1
- package/lib/esm/repository/errors.js +16 -1
- package/lib/esm/repository/index.d.ts +1 -0
- package/lib/esm/repository/index.js +9 -1
- package/lib/esm/repository/injectables.d.ts +5 -0
- package/lib/esm/repository/injectables.js +32 -0
- package/lib/esm/repository/types.d.ts +3 -0
- package/lib/esm/repository/types.js +3 -0
- package/lib/esm/repository/utils.d.ts +2 -4
- package/lib/esm/repository/utils.js +17 -1
- package/lib/esm/validators/ClauseSequenceValidator.d.ts +28 -0
- package/lib/esm/validators/ClauseSequenceValidator.js +96 -0
- package/lib/esm/validators/decorators.d.ts +10 -0
- package/lib/esm/validators/decorators.js +25 -0
- package/lib/esm/validators/index.d.ts +2 -0
- package/lib/esm/validators/index.js +4 -0
- package/lib/identity/decorators.cjs +61 -1
- package/lib/identity/decorators.d.ts +4 -10
- package/lib/identity/index.cjs +19 -1
- package/lib/identity/utils.cjs +9 -0
- package/lib/identity/utils.d.ts +2 -0
- package/lib/index.cjs +47 -1
- package/lib/index.d.ts +3 -1
- package/lib/interfaces/Builder.cjs +4 -1
- package/lib/interfaces/Executor.cjs +4 -1
- package/lib/interfaces/Executor.d.ts +3 -1
- package/lib/interfaces/Observable.cjs +4 -1
- package/lib/interfaces/Observer.cjs +4 -1
- package/lib/interfaces/Queriable.cjs +4 -0
- package/lib/interfaces/Queriable.d.ts +6 -0
- package/lib/interfaces/RawExecutor.cjs +4 -1
- package/lib/interfaces/RawExecutor.d.ts +4 -3
- package/lib/interfaces/Sequence.cjs +11 -1
- package/lib/interfaces/Sequence.d.ts +3 -2
- package/lib/interfaces/SequenceOptions.cjs +23 -1
- package/lib/interfaces/SequenceOptions.d.ts +9 -1
- package/lib/interfaces/index.cjs +26 -1
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/model/BaseModel.cjs +32 -1
- package/lib/model/BaseModel.d.ts +2 -3
- package/lib/model/decorators.cjs +59 -1
- package/lib/model/decorators.d.ts +6 -5
- package/lib/model/index.cjs +20 -1
- package/lib/persistence/Adapter.cjs +182 -1
- package/lib/persistence/Adapter.d.ts +45 -14
- package/lib/persistence/constants.cjs +16 -1
- package/lib/persistence/constants.d.ts +10 -1
- package/lib/persistence/decorators.cjs +13 -1
- package/lib/persistence/decorators.d.ts +1 -2
- package/lib/persistence/errors.cjs +12 -0
- package/lib/persistence/errors.d.ts +4 -0
- package/lib/persistence/index.cjs +22 -1
- package/lib/persistence/index.d.ts +1 -1
- package/lib/query/Clause.cjs +80 -0
- package/lib/query/Clause.d.ts +43 -0
- package/lib/query/ClauseFactory.cjs +11 -0
- package/lib/query/ClauseFactory.d.ts +71 -0
- package/lib/query/Condition.cjs +252 -0
- package/lib/query/Condition.d.ts +75 -0
- package/lib/query/Query.cjs +59 -0
- package/lib/query/Query.d.ts +43 -0
- package/lib/query/Statement.cjs +162 -0
- package/lib/query/Statement.d.ts +49 -0
- package/lib/query/clauses/FromClause.cjs +64 -0
- package/lib/query/clauses/FromClause.d.ts +45 -0
- package/lib/query/clauses/GroupByClause.cjs +24 -0
- package/lib/query/clauses/GroupByClause.d.ts +21 -0
- package/lib/query/clauses/InsertClause.cjs +60 -0
- package/lib/query/clauses/InsertClause.d.ts +37 -0
- package/lib/query/clauses/LimitClause.cjs +32 -0
- package/lib/query/clauses/LimitClause.d.ts +29 -0
- package/lib/query/clauses/OffsetClause.cjs +24 -0
- package/lib/query/clauses/OffsetClause.d.ts +21 -0
- package/lib/query/clauses/OrderByClause.cjs +44 -0
- package/lib/query/clauses/OrderByClause.d.ts +37 -0
- package/lib/query/clauses/SelectClause.cjs +67 -0
- package/lib/query/clauses/SelectClause.d.ts +47 -0
- package/lib/query/clauses/SelectorBasedClause.cjs +49 -0
- package/lib/query/clauses/SelectorBasedClause.d.ts +25 -0
- package/lib/query/clauses/ValuesClause.cjs +41 -0
- package/lib/query/clauses/ValuesClause.d.ts +21 -0
- package/lib/query/clauses/WhereClause.cjs +76 -0
- package/lib/query/clauses/WhereClause.d.ts +46 -0
- package/lib/query/clauses/index.cjs +28 -0
- package/lib/query/clauses/index.d.ts +10 -0
- package/lib/query/constants.cjs +91 -0
- package/lib/query/constants.d.ts +79 -0
- package/lib/query/errors.cjs +12 -0
- package/lib/query/errors.d.ts +4 -0
- package/lib/query/index.cjs +29 -0
- package/lib/query/index.d.ts +11 -0
- package/lib/query/options.cjs +4 -0
- package/lib/query/options.d.ts +371 -0
- package/lib/query/selectors.cjs +4 -0
- package/lib/query/selectors.d.ts +38 -0
- package/lib/query/types.cjs +4 -0
- package/lib/query/types.d.ts +2 -0
- package/lib/repository/Repository.cjs +279 -1
- package/lib/repository/Repository.d.ts +31 -11
- package/lib/repository/constants.cjs +34 -1
- package/lib/repository/decorators.cjs +26 -1
- package/lib/repository/decorators.d.ts +2 -3
- package/lib/repository/errors.cjs +20 -1
- package/lib/repository/index.cjs +25 -1
- package/lib/repository/index.d.ts +1 -0
- package/lib/repository/injectables.cjs +36 -0
- package/lib/repository/injectables.d.ts +5 -0
- package/lib/repository/types.cjs +4 -1
- package/lib/repository/types.d.ts +3 -0
- package/lib/repository/utils.cjs +20 -1
- package/lib/repository/utils.d.ts +3 -0
- package/lib/validators/ClauseSequenceValidator.cjs +99 -0
- package/lib/validators/ClauseSequenceValidator.d.ts +28 -0
- package/lib/validators/decorators.cjs +28 -0
- package/lib/validators/decorators.d.ts +10 -0
- package/lib/validators/index.cjs +20 -0
- package/lib/validators/index.d.ts +2 -0
- package/package.json +14 -11
- package/lib/esm/persistence/utils.d.ts +0 -3
- package/lib/esm/persistence/utils.js +0 -1
- package/lib/persistence/utils.cjs +0 -1
- package/lib/persistence/utils.d.ts +0 -3
package/lib/model/decorators.cjs
CHANGED
|
@@ -1 +1,59 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.table = table;
|
|
4
|
+
exports.column = column;
|
|
5
|
+
exports.index = index;
|
|
6
|
+
exports.uniqueOnCreateUpdate = uniqueOnCreateUpdate;
|
|
7
|
+
exports.unique = unique;
|
|
8
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
9
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
10
|
+
const constants_1 = require("../persistence/constants.cjs");
|
|
11
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
12
|
+
const Adapter_1 = require("../persistence/Adapter.cjs");
|
|
13
|
+
const Repository_1 = require("../repository/Repository.cjs");
|
|
14
|
+
const Condition_1 = require("../query/Condition.cjs");
|
|
15
|
+
function table(tableName) {
|
|
16
|
+
return (0, reflection_1.metadata)(Adapter_1.Adapter.key(constants_1.PersistenceKeys.TABLE), tableName);
|
|
17
|
+
}
|
|
18
|
+
function column(columnName) {
|
|
19
|
+
return (0, decorator_validation_1.propMetadata)(Adapter_1.Adapter.key(constants_1.PersistenceKeys.COLUMN), columnName);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @summary Index Decorator
|
|
23
|
+
* @description properties decorated will the index in the
|
|
24
|
+
* DB for performance in queries
|
|
25
|
+
*
|
|
26
|
+
* @param {OrderDirection[]} [directions]
|
|
27
|
+
* @param {string[]} [compositions]
|
|
28
|
+
*
|
|
29
|
+
* @function index
|
|
30
|
+
*/
|
|
31
|
+
function index(compositions, directions) {
|
|
32
|
+
return (0, decorator_validation_1.propMetadata)(Repository_1.Repository.key(`${constants_1.PersistenceKeys.INDEX}${compositions && compositions.length ? `.${compositions.join(".")}` : ""}`), {
|
|
33
|
+
directions: directions,
|
|
34
|
+
compositions: compositions,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function uniqueOnCreateUpdate(data, key, model) {
|
|
38
|
+
if (!model[key])
|
|
39
|
+
return;
|
|
40
|
+
const existing = await this.select()
|
|
41
|
+
.where(Condition_1.Condition.attribute(key).eq(model[key]))
|
|
42
|
+
.execute();
|
|
43
|
+
if (existing.length)
|
|
44
|
+
throw new db_decorators_1.ConflictError(`model already exists with property ${key} equal to ${JSON.stringify(model[key], undefined, 2)}`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @summary Unique Decorator
|
|
48
|
+
* @description Tags a property as unique.
|
|
49
|
+
* No other elements in that table can have the same property value
|
|
50
|
+
*
|
|
51
|
+
* @function unique
|
|
52
|
+
*
|
|
53
|
+
* @memberOf module:wallet-db.Decorators
|
|
54
|
+
*/
|
|
55
|
+
function unique() {
|
|
56
|
+
return (0, reflection_1.apply)((0, db_decorators_1.onCreateUpdate)(uniqueOnCreateUpdate), (0, decorator_validation_1.propMetadata)(Repository_1.Repository.key(constants_1.PersistenceKeys.UNIQUE), {}));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsc0JBRUM7QUFFRCx3QkFFQztBQVlELHNCQVVDO0FBRUQsb0RBYUM7QUFXRCx3QkFLQztBQXJFRCwyREFBd0U7QUFDeEUscURBQXVEO0FBQ3ZELHdEQUEyRDtBQUczRCx5RUFBcUU7QUFDckUsb0RBQWlEO0FBQ2pELHlEQUFzRDtBQUN0RCxrREFBK0M7QUFFL0MsU0FBZ0IsS0FBSyxDQUFDLFNBQWlCO0lBQ3JDLE9BQU8sSUFBQSxxQkFBUSxFQUFDLGlCQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxVQUFrQjtJQUN2QyxPQUFPLElBQUEsbUNBQVksRUFBQyxpQkFBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixLQUFLLENBQUMsWUFBdUIsRUFBRSxVQUE2QjtJQUMxRSxPQUFPLElBQUEsbUNBQVksRUFDakIsdUJBQVUsQ0FBQyxHQUFHLENBQ1osR0FBRywyQkFBZSxDQUFDLEtBQUssR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNyRyxFQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsWUFBWSxFQUFFLFlBQVk7S0FDVixDQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FJL0IsSUFBTyxFQUFFLEdBQVcsRUFBRSxLQUFRO0lBQ3ZDLElBQUksQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUU7U0FDakMsS0FBSyxDQUFDLHFCQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RCxPQUFPLEVBQU8sQ0FBQztJQUNsQixJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQixzQ0FBc0MsR0FBRyxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUUsS0FBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUMxRyxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsTUFBTTtJQUNwQixPQUFPLElBQUEsa0JBQUssRUFDVixJQUFBLDhCQUFjLEVBQUMsb0JBQW9CLENBQUMsRUFDcEMsSUFBQSxtQ0FBWSxFQUFDLHVCQUFVLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ3pELENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Im1vZGVsL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25mbGljdEVycm9yLCBvbkNyZWF0ZVVwZGF0ZSB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgYXBwbHksIG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJbmRleE1ldGFkYXRhIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvdHlwZXNcIjtcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCwgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGUodGFibGVOYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5UQUJMRSksIHRhYmxlTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGEoQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkNPTFVNTiksIGNvbHVtbk5hbWUpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEluZGV4IERlY29yYXRvclxuICogQGRlc2NyaXB0aW9uIHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpbGwgdGhlIGluZGV4IGluIHRoZVxuICogREIgZm9yIHBlcmZvcm1hbmNlIGluIHF1ZXJpZXNcbiAqXG4gKiBAcGFyYW0ge09yZGVyRGlyZWN0aW9uW119IFtkaXJlY3Rpb25zXVxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2NvbXBvc2l0aW9uc11cbiAqXG4gKiBAZnVuY3Rpb24gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KGNvbXBvc2l0aW9ucz86IHN0cmluZ1tdLCBkaXJlY3Rpb25zPzogT3JkZXJEaXJlY3Rpb25bXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhKFxuICAgIFJlcG9zaXRvcnkua2V5KFxuICAgICAgYCR7UGVyc2lzdGVuY2VLZXlzLklOREVYfSR7Y29tcG9zaXRpb25zICYmIGNvbXBvc2l0aW9ucy5sZW5ndGggPyBgLiR7Y29tcG9zaXRpb25zLmpvaW4oXCIuXCIpfWAgOiBcIlwifWBcbiAgICApLFxuICAgIHtcbiAgICAgIGRpcmVjdGlvbnM6IGRpcmVjdGlvbnMsXG4gICAgICBjb21wb3NpdGlvbnM6IGNvbXBvc2l0aW9ucyxcbiAgICB9IGFzIEluZGV4TWV0YWRhdGFcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaXF1ZU9uQ3JlYXRlVXBkYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0+LFxuICBZID0gYW55LFxuPih0aGlzOiBSLCBkYXRhOiBZLCBrZXk6IHN0cmluZywgbW9kZWw6IE0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCEobW9kZWwgYXMgYW55KVtrZXldKSByZXR1cm47XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5zZWxlY3QoKVxuICAgIC53aGVyZShDb25kaXRpb24uYXR0cmlidXRlKGtleSkuZXEoKG1vZGVsIGFzIGFueSlba2V5XSkpXG4gICAgLmV4ZWN1dGU8TVtdPigpO1xuICBpZiAoZXhpc3RpbmcubGVuZ3RoKVxuICAgIHRocm93IG5ldyBDb25mbGljdEVycm9yKFxuICAgICAgYG1vZGVsIGFscmVhZHkgZXhpc3RzIHdpdGggcHJvcGVydHkgJHtrZXl9IGVxdWFsIHRvICR7SlNPTi5zdHJpbmdpZnkoKG1vZGVsIGFzIGFueSlba2V5XSwgdW5kZWZpbmVkLCAyKX1gXG4gICAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVbmlxdWUgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVGFncyBhIHByb3BlcnR5IGFzIHVuaXF1ZS5cbiAqICBObyBvdGhlciBlbGVtZW50cyBpbiB0aGF0IHRhYmxlIGNhbiBoYXZlIHRoZSBzYW1lIHByb3BlcnR5IHZhbHVlXG4gKlxuICogQGZ1bmN0aW9uIHVuaXF1ZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6d2FsbGV0LWRiLkRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZSgpIHtcbiAgcmV0dXJuIGFwcGx5KFxuICAgIG9uQ3JlYXRlVXBkYXRlKHVuaXF1ZU9uQ3JlYXRlVXBkYXRlKSxcbiAgICBwcm9wTWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoUGVyc2lzdGVuY2VLZXlzLlVOSVFVRSksIHt9KVxuICApO1xufVxuIl19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { DBModel, IRepository } from "@decaf-ts/db-decorators";
|
|
2
1
|
import { OrderDirection } from "../repository/constants";
|
|
2
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { Repository } from "../repository/Repository";
|
|
3
4
|
export declare function table(tableName: string): import("@decaf-ts/reflection").CustomDecorator<V>;
|
|
4
|
-
export declare function column(columnName: string):
|
|
5
|
+
export declare function column(columnName: string): PropertyDecorator;
|
|
5
6
|
/**
|
|
6
7
|
* @summary Index Decorator
|
|
7
8
|
* @description properties decorated will the index in the
|
|
@@ -12,8 +13,8 @@ export declare function column(columnName: string): import("@decaf-ts/reflection
|
|
|
12
13
|
*
|
|
13
14
|
* @function index
|
|
14
15
|
*/
|
|
15
|
-
export declare function index(compositions?: string[], directions?: OrderDirection[]):
|
|
16
|
-
export declare function uniqueOnCreateUpdate<
|
|
16
|
+
export declare function index(compositions?: string[], directions?: OrderDirection[]): PropertyDecorator;
|
|
17
|
+
export declare function uniqueOnCreateUpdate<M extends Model, R extends Repository<M>, Y = any>(this: R, data: Y, key: string, model: M): Promise<void>;
|
|
17
18
|
/**
|
|
18
19
|
* @summary Unique Decorator
|
|
19
20
|
* @description Tags a property as unique.
|
|
@@ -23,4 +24,4 @@ export declare function uniqueOnCreateUpdate<T extends DBModel, V extends IRepos
|
|
|
23
24
|
*
|
|
24
25
|
* @memberOf module:wallet-db.Decorators
|
|
25
26
|
*/
|
|
26
|
-
export declare function unique():
|
|
27
|
+
export declare function unique(): (target: object, propertyKey?: any, descriptor?: any) => void;
|
package/lib/model/index.cjs
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./BaseModel.cjs"), exports);
|
|
18
|
+
__exportStar(require("./decorators.cjs"), exports);
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLCtDQUE2QiIsImZpbGUiOiJtb2RlbC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuIl19
|
|
@@ -1 +1,182 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Adapter = void 0;
|
|
4
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
+
const errors_1 = require("../repository/errors.cjs");
|
|
6
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
7
|
+
const constants_1 = require("./constants.cjs");
|
|
8
|
+
const Query_1 = require("../query/Query.cjs");
|
|
9
|
+
const Repository_1 = require("../repository/Repository.cjs");
|
|
10
|
+
/**
|
|
11
|
+
* @summary Abstract Decaf-ts Persistence Adapter Class
|
|
12
|
+
* @description Offers the base implementation for all Adapter Classes
|
|
13
|
+
* and manages them various registered {@link Adapter}s
|
|
14
|
+
*
|
|
15
|
+
* @typedef Y the underlying persistence object type
|
|
16
|
+
* @typedef Q The query object the adapter uses
|
|
17
|
+
*
|
|
18
|
+
* @param {Y} native the underlying persistence object
|
|
19
|
+
* @param {string} flavour the under witch the persistence adapter should be stored
|
|
20
|
+
*
|
|
21
|
+
* @class Adapter
|
|
22
|
+
* @implements RawExecutor
|
|
23
|
+
* @implements Observable
|
|
24
|
+
*/
|
|
25
|
+
class Adapter {
|
|
26
|
+
static { this._cache = {}; }
|
|
27
|
+
get native() {
|
|
28
|
+
return this._native;
|
|
29
|
+
}
|
|
30
|
+
constructor(native, flavour) {
|
|
31
|
+
this.flavour = flavour;
|
|
32
|
+
this._observers = [];
|
|
33
|
+
this._native = native;
|
|
34
|
+
Adapter._cache[flavour] = this;
|
|
35
|
+
}
|
|
36
|
+
Query() {
|
|
37
|
+
return new Query_1.Query(this);
|
|
38
|
+
}
|
|
39
|
+
isReserved(attr) {
|
|
40
|
+
return !attr;
|
|
41
|
+
}
|
|
42
|
+
prepare(model, pk) {
|
|
43
|
+
const result = Object.entries(model).reduce((accum, [key, val]) => {
|
|
44
|
+
if (key === pk)
|
|
45
|
+
return accum;
|
|
46
|
+
const mappedProp = Repository_1.Repository.column(model, key);
|
|
47
|
+
if (this.isReserved(mappedProp))
|
|
48
|
+
throw new db_decorators_1.InternalError(`Property name ${mappedProp} is reserved`);
|
|
49
|
+
accum[mappedProp] = val;
|
|
50
|
+
return accum;
|
|
51
|
+
}, {});
|
|
52
|
+
if (model[constants_1.PersistenceKeys.METADATA])
|
|
53
|
+
Object.defineProperty(result, constants_1.PersistenceKeys.METADATA, {
|
|
54
|
+
enumerable: false,
|
|
55
|
+
writable: false,
|
|
56
|
+
configurable: true,
|
|
57
|
+
value: model[constants_1.PersistenceKeys.METADATA],
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
record: result,
|
|
61
|
+
id: model[pk],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
revert(obj, clazz, pk, id) {
|
|
65
|
+
const ob = {};
|
|
66
|
+
ob[pk] = id;
|
|
67
|
+
const m = (typeof clazz === "string" ? decorator_validation_1.Model.build(ob, clazz) : new clazz(ob));
|
|
68
|
+
const metadata = obj[constants_1.PersistenceKeys.METADATA];
|
|
69
|
+
const result = Object.keys(m).reduce((accum, key) => {
|
|
70
|
+
if (key === pk)
|
|
71
|
+
return accum;
|
|
72
|
+
accum[key] = obj[Repository_1.Repository.column(accum, key)];
|
|
73
|
+
return accum;
|
|
74
|
+
}, m);
|
|
75
|
+
if (metadata)
|
|
76
|
+
Object.defineProperty(result, constants_1.PersistenceKeys.METADATA, {
|
|
77
|
+
enumerable: false,
|
|
78
|
+
configurable: false,
|
|
79
|
+
writable: false,
|
|
80
|
+
value: metadata,
|
|
81
|
+
});
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
async createAll(tableName, id, model, ...args) {
|
|
85
|
+
if (id.length !== model.length)
|
|
86
|
+
throw new db_decorators_1.InternalError("Ids and models must have the same length");
|
|
87
|
+
return Promise.all(id.map((i, count) => this.create(tableName, i, model[count], ...args)));
|
|
88
|
+
}
|
|
89
|
+
async readAll(tableName, id, ...args) {
|
|
90
|
+
return Promise.all(id.map((i) => this.read(tableName, i, ...args)));
|
|
91
|
+
}
|
|
92
|
+
async updateAll(tableName, id, model, ...args) {
|
|
93
|
+
if (id.length !== model.length)
|
|
94
|
+
throw new db_decorators_1.InternalError("Ids and models must have the same length");
|
|
95
|
+
return Promise.all(id.map((i, count) => this.update(tableName, i, model[count], ...args)));
|
|
96
|
+
}
|
|
97
|
+
async deleteAll(tableName, id, ...args) {
|
|
98
|
+
return Promise.all(id.map((i) => this.delete(tableName, i, ...args)));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @summary Registers an {@link Observer}
|
|
102
|
+
* @param {Observer} observer
|
|
103
|
+
*
|
|
104
|
+
* @see {Observable#observe}
|
|
105
|
+
*/
|
|
106
|
+
observe(observer) {
|
|
107
|
+
const index = this._observers.indexOf(observer);
|
|
108
|
+
if (index !== -1)
|
|
109
|
+
throw new db_decorators_1.InternalError("Observer already registered");
|
|
110
|
+
this._observers.push(observer);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @summary Unregisters an {@link Observer}
|
|
114
|
+
* @param {Observer} observer
|
|
115
|
+
*
|
|
116
|
+
* @see {Observable#unObserve}
|
|
117
|
+
*/
|
|
118
|
+
unObserve(observer) {
|
|
119
|
+
const index = this._observers.indexOf(observer);
|
|
120
|
+
if (index === -1)
|
|
121
|
+
throw new db_decorators_1.InternalError("Failed to find Observer");
|
|
122
|
+
this._observers.splice(index, 1);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @summary calls all registered {@link Observer}s to update themselves
|
|
126
|
+
* @param {any[]} [args] optional arguments to be passed to the {@link Observer#refresh} method
|
|
127
|
+
*/
|
|
128
|
+
async updateObservers(...args) {
|
|
129
|
+
return new Promise((resolve, reject) => {
|
|
130
|
+
Promise.all(this._observers.map((o) => o.refresh(...args)))
|
|
131
|
+
.then(() => {
|
|
132
|
+
resolve();
|
|
133
|
+
})
|
|
134
|
+
.catch((e) => reject(new errors_1.ObserverError(e)));
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
static get current() {
|
|
138
|
+
return this._current;
|
|
139
|
+
}
|
|
140
|
+
static get(flavour) {
|
|
141
|
+
if (flavour in this._cache)
|
|
142
|
+
return this._cache[flavour];
|
|
143
|
+
throw new db_decorators_1.InternalError(`No Adapter registered under ${flavour}.`);
|
|
144
|
+
}
|
|
145
|
+
static setCurrent(flavour) {
|
|
146
|
+
const adapter = this.get(flavour);
|
|
147
|
+
if (!adapter)
|
|
148
|
+
throw new db_decorators_1.NotFoundError(`No persistence flavour ${flavour} registered`);
|
|
149
|
+
this._current = adapter;
|
|
150
|
+
}
|
|
151
|
+
static key(key) {
|
|
152
|
+
return Repository_1.Repository.key(key);
|
|
153
|
+
}
|
|
154
|
+
static models(flavour) {
|
|
155
|
+
try {
|
|
156
|
+
const registry = decorator_validation_1.Model.getRegistry();
|
|
157
|
+
const cache = registry.cache;
|
|
158
|
+
const managedModels = Object.values(cache)
|
|
159
|
+
.map((m) => {
|
|
160
|
+
let f = Reflect.getMetadata(Adapter.key(constants_1.PersistenceKeys.ADAPTER), m);
|
|
161
|
+
if (f && f === flavour)
|
|
162
|
+
return m;
|
|
163
|
+
if (!f) {
|
|
164
|
+
const repo = Reflect.getMetadata(Repository_1.Repository.key(db_decorators_1.DBKeys.REPOSITORY), m);
|
|
165
|
+
if (!repo)
|
|
166
|
+
return;
|
|
167
|
+
const repository = Repository_1.Repository.forModel(m);
|
|
168
|
+
f = Reflect.getMetadata(Adapter.key(constants_1.PersistenceKeys.ADAPTER), repository);
|
|
169
|
+
return f;
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
.filter((m) => !!m);
|
|
173
|
+
return managedModels;
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
throw new db_decorators_1.InternalError(e);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.Adapter = Adapter;
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9BZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUtpQztBQUVqQyxpREFBcUQ7QUFFckQseUVBS3dDO0FBSXhDLDJDQUE4QztBQUM5QywwQ0FBdUM7QUFJdkMseURBQXNEO0FBRXREOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBc0IsT0FBTzthQUVaLFdBQU0sR0FBc0MsRUFBdEMsQUFBd0MsQ0FBQztJQUs5RCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQ0UsTUFBUyxFQUNBLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBVFQsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQVFTLFVBQVUsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDZixDQUFDO0lBVUQsT0FBTyxDQUNMLEtBQVEsRUFDUixFQUFtQjtRQUtuQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxLQUEwQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxHQUFHLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM3QixNQUFNLFVBQVUsR0FBRyx1QkFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLDZC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QUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsT0FBTyxDQUFDLEVBQ3BDLFVBQVUsQ0FDWCxDQUFDO29CQUNGLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUM7WUFDSCxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLDZCQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7O0FBcFFILDBCQXFRQyIsImZpbGUiOiJwZXJzaXN0ZW5jZS9BZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBEQktleXMsXG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJFcnJvciB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2Vycm9yc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZVwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIE1vZGVsLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBNb2RlbFJlZ2lzdHJ5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7IFJhd0V4ZWN1dG9yIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvUmF3RXhlY3V0b3JcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4uL3F1ZXJ5L1F1ZXJ5XCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcXVlcnkvU3RhdGVtZW50XCI7XG5pbXBvcnQgeyBDbGF1c2VGYWN0b3J5IH0gZnJvbSBcIi4uL3F1ZXJ5L0NsYXVzZUZhY3RvcnlcIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuLi9xdWVyeS9Db25kaXRpb25cIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQWJzdHJhY3QgRGVjYWYtdHMgUGVyc2lzdGVuY2UgQWRhcHRlciBDbGFzc1xuICogQGRlc2NyaXB0aW9uIE9mZmVycyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIEFkYXB0ZXIgQ2xhc3Nlc1xuICogYW5kIG1hbmFnZXMgdGhlbSB2YXJpb3VzIHJlZ2lzdGVyZWQge0BsaW5rIEFkYXB0ZXJ9c1xuICpcbiAqIEB0eXBlZGVmIFkgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVuY2Ugb2JqZWN0IHR5cGVcbiAqIEB0eXBlZGVmIFEgVGhlIHF1ZXJ5IG9iamVjdCB0aGUgYWRhcHRlciB1c2VzXG4gKlxuICogQHBhcmFtIHtZfSBuYXRpdmUgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhdm91ciB0aGUgdW5kZXIgd2l0Y2ggdGhlIHBlcnNpc3RlbmNlIGFkYXB0ZXIgc2hvdWxkIGJlIHN0b3JlZFxuICpcbiAqIEBjbGFzcyBBZGFwdGVyXG4gKiBAaW1wbGVtZW50cyBSYXdFeGVjdXRvclxuICogQGltcGxlbWVudHMgT2JzZXJ2YWJsZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWRhcHRlcjxZLCBRPiBpbXBsZW1lbnRzIFJhd0V4ZWN1dG9yPFE+LCBPYnNlcnZhYmxlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2N1cnJlbnQ6IEFkYXB0ZXI8YW55LCBhbnk+O1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IFJlY29yZDxzdHJpbmcsIEFkYXB0ZXI8YW55LCBhbnk+PiA9IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29ic2VydmVyczogT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uYXRpdmU6IFk7XG5cbiAgZ2V0IG5hdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmF0aXZlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIG5hdGl2ZTogWSxcbiAgICByZWFkb25seSBmbGF2b3VyOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5fbmF0aXZlID0gbmF0aXZlO1xuICAgIEFkYXB0ZXIuX2NhY2hlW2ZsYXZvdXJdID0gdGhpcztcbiAgfVxuXG4gIFF1ZXJ5PE0gZXh0ZW5kcyBNb2RlbD4oKTogUXVlcnk8USwgTT4ge1xuICAgIHJldHVybiBuZXcgUXVlcnkodGhpcyk7XG4gIH1cblxuICBhYnN0cmFjdCBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbik6IFE7XG5cbiAgYWJzdHJhY3QgZ2V0IFN0YXRlbWVudCgpOiBTdGF0ZW1lbnQ8UT47XG5cbiAgYWJzdHJhY3QgZ2V0IENsYXVzZXMoKTogQ2xhdXNlRmFjdG9yeTxZLCBRPjtcblxuICBwcm90ZWN0ZWQgaXNSZXNlcnZlZChhdHRyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gIWF0dHI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VFcnJvcihlcnI6IEVycm9yKTogQmFzZUVycm9yO1xuXG4gIGFic3RyYWN0IGluaXRpYWxpemUoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGFic3RyYWN0IGluZGV4PE0gZXh0ZW5kcyBNb2RlbD4oLi4ubW9kZWxzOiBNW10pOiBQcm9taXNlPGFueT47XG5cbiAgYWJzdHJhY3QgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT47XG5cbiAgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIHBrOiBzdHJpbmcgfCBudW1iZXJcbiAgKToge1xuICAgIHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpZDogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhtb2RlbCkucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHBrKSByZXR1cm4gYWNjdW07XG4gICAgICAgIGNvbnN0IG1hcHBlZFByb3AgPSBSZXBvc2l0b3J5LmNvbHVtbihtb2RlbCwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNlcnZlZChtYXBwZWRQcm9wKSlcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgUHJvcGVydHkgbmFtZSAke21hcHBlZFByb3B9IGlzIHJlc2VydmVkYCk7XG4gICAgICAgIGFjY3VtW21hcHBlZFByb3BdID0gdmFsO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICAgIGlmICgobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0sXG4gICAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiByZXN1bHQsXG4gICAgICBpZDogKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3BrXSxcbiAgICB9O1xuICB9XG5cbiAgcmV2ZXJ0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNsYXp6OiBzdHJpbmcgfCBDb25zdHJ1Y3RvcjxNPixcbiAgICBwazogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKTogTSB7XG4gICAgY29uc3Qgb2I6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBvYltwa10gPSBpZDtcbiAgICBjb25zdCBtID0gKFxuICAgICAgdHlwZW9mIGNsYXp6ID09PSBcInN0cmluZ1wiID8gTW9kZWwuYnVpbGQob2IsIGNsYXp6KSA6IG5ldyBjbGF6eihvYilcbiAgICApIGFzIE07XG4gICAgY29uc3QgbWV0YWRhdGEgPSBvYmpbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyhtKS5yZWR1Y2UoKGFjY3VtOiBNLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09IHBrKSByZXR1cm4gYWNjdW07XG4gICAgICAoYWNjdW0gYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSA9IG9ialtSZXBvc2l0b3J5LmNvbHVtbihhY2N1bSwga2V5KV07XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgbSk7XG4gICAgaWYgKG1ldGFkYXRhKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhYnN0cmFjdCBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFzeW5jIGNyZWF0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkLmxlbmd0aCAhPT0gbW9kZWwubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGlkLm1hcCgoaSwgY291bnQpID0+IHRoaXMuY3JlYXRlKHRhYmxlTmFtZSwgaSwgbW9kZWxbY291bnRdLCAuLi5hcmdzKSlcbiAgICApO1xuICB9XG5cbiAgYWJzdHJhY3QgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgYXN5bmMgcmVhZEFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogKHN0cmluZyB8IG51bWJlciB8IGJpZ2ludClbXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChpZC5tYXAoKGkpID0+IHRoaXMucmVhZCh0YWJsZU5hbWUsIGksIC4uLmFyZ3MpKSk7XG4gIH1cblxuICBhYnN0cmFjdCB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFzeW5jIHVwZGF0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkLmxlbmd0aCAhPT0gbW9kZWwubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGlkLm1hcCgoaSwgY291bnQpID0+IHRoaXMudXBkYXRlKHRhYmxlTmFtZSwgaSwgbW9kZWxbY291bnRdLCAuLi5hcmdzKSlcbiAgICApO1xuICB9XG5cbiAgYWJzdHJhY3QgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhc3luYyBkZWxldGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoaWQubWFwKChpKSA9PiB0aGlzLmRlbGV0ZSh0YWJsZU5hbWUsIGksIC4uLmFyZ3MpKSk7XG4gIH1cblxuICBhYnN0cmFjdCByYXc8Uj4ocmF3SW5wdXQ6IFEsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSPjtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIHtAbGluayBPYnNlcnZlcn1cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcbiAgICpcbiAgICogQHNlZSB7T2JzZXJ2YWJsZSNvYnNlcnZlfVxuICAgKi9cbiAgb2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk9ic2VydmVyIGFscmVhZHkgcmVnaXN0ZXJlZFwiKTtcbiAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVW5yZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkZhaWxlZCB0byBmaW5kIE9ic2VydmVyXCIpO1xuICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGNhbGxzIGFsbCByZWdpc3RlcmVkIHtAbGluayBPYnNlcnZlcn1zIHRvIHVwZGF0ZSB0aGVtc2VsdmVzXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSBvcHRpb25hbCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgT2JzZXJ2ZXIjcmVmcmVzaH0gbWV0aG9kXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgUHJvbWlzZS5hbGwodGhpcy5fb2JzZXJ2ZXJzLm1hcCgobzogT2JzZXJ2ZXIpID0+IG8ucmVmcmVzaCguLi5hcmdzKSkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZTogYW55KSA9PiByZWplY3QobmV3IE9ic2VydmVyRXJyb3IoZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8WSwgUT4oZmxhdm91cjogYW55KTogQWRhcHRlcjxZLCBRPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZsYXZvdXIgaW4gdGhpcy5fY2FjaGUpIHJldHVybiB0aGlzLl9jYWNoZVtmbGF2b3VyXTtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQWRhcHRlciByZWdpc3RlcmVkIHVuZGVyICR7Zmxhdm91cn0uYCk7XG4gIH1cblxuICBzdGF0aWMgc2V0Q3VycmVudChmbGF2b3VyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5nZXQoZmxhdm91cik7XG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYE5vIHBlcnNpc3RlbmNlIGZsYXZvdXIgJHtmbGF2b3VyfSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5fY3VycmVudCA9IGFkYXB0ZXI7XG4gIH1cblxuICBzdGF0aWMga2V5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFJlcG9zaXRvcnkua2V5KGtleSk7XG4gIH1cblxuICBzdGF0aWMgbW9kZWxzPE0gZXh0ZW5kcyBNb2RlbD4oZmxhdm91cjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKE1vZGVsIGFzIGFueSkuZ2V0UmVnaXN0cnkoKSBhcyBNb2RlbFJlZ2lzdHJ5PGFueT47XG4gICAgICBjb25zdCBjYWNoZSA9IChcbiAgICAgICAgcmVnaXN0cnkgYXMgdW5rbm93biBhcyB7IGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvbnN0cnVjdG9yPGFueT4+IH1cbiAgICAgICkuY2FjaGU7XG4gICAgICBjb25zdCBtYW5hZ2VkTW9kZWxzOiBNb2RlbENvbnN0cnVjdG9yPGFueT5bXSA9IE9iamVjdC52YWx1ZXMoY2FjaGUpXG4gICAgICAgIC5tYXAoKG06IE1vZGVsQ29uc3RydWN0b3I8TT4pID0+IHtcbiAgICAgICAgICBsZXQgZiA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksXG4gICAgICAgICAgICBtIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGYgJiYgZiA9PT0gZmxhdm91cikgcmV0dXJuIG07XG4gICAgICAgICAgaWYgKCFmKSB7XG4gICAgICAgICAgICBjb25zdCByZXBvID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLlJFUE9TSVRPUlkpLFxuICAgICAgICAgICAgICBtIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghcmVwbykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwobSk7XG5cbiAgICAgICAgICAgIGYgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksXG4gICAgICAgICAgICAgIHJlcG9zaXRvcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKG0pID0+ICEhbSk7XG4gICAgICByZXR1cm4gbWFuYWdlZE1vZGVscztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,31 +1,60 @@
|
|
|
1
|
-
import { BaseError
|
|
1
|
+
import { BaseError } from "@decaf-ts/db-decorators";
|
|
2
2
|
import { Observer } from "../interfaces/Observer";
|
|
3
3
|
import { Sequence } from "../interfaces/Sequence";
|
|
4
|
-
import { Constructor } from "@decaf-ts/decorator-validation";
|
|
4
|
+
import { Constructor, Model, ModelConstructor } from "@decaf-ts/decorator-validation";
|
|
5
5
|
import { SequenceOptions } from "../interfaces/SequenceOptions";
|
|
6
6
|
import { RawExecutor } from "../interfaces/RawExecutor";
|
|
7
7
|
import { Observable } from "../interfaces/Observable";
|
|
8
|
-
|
|
8
|
+
import { Query } from "../query/Query";
|
|
9
|
+
import { Statement } from "../query/Statement";
|
|
10
|
+
import { ClauseFactory } from "../query/ClauseFactory";
|
|
11
|
+
import { Condition } from "../query/Condition";
|
|
12
|
+
/**
|
|
13
|
+
* @summary Abstract Decaf-ts Persistence Adapter Class
|
|
14
|
+
* @description Offers the base implementation for all Adapter Classes
|
|
15
|
+
* and manages them various registered {@link Adapter}s
|
|
16
|
+
*
|
|
17
|
+
* @typedef Y the underlying persistence object type
|
|
18
|
+
* @typedef Q The query object the adapter uses
|
|
19
|
+
*
|
|
20
|
+
* @param {Y} native the underlying persistence object
|
|
21
|
+
* @param {string} flavour the under witch the persistence adapter should be stored
|
|
22
|
+
*
|
|
23
|
+
* @class Adapter
|
|
24
|
+
* @implements RawExecutor
|
|
25
|
+
* @implements Observable
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class Adapter<Y, Q> implements RawExecutor<Q>, Observable {
|
|
28
|
+
readonly flavour: string;
|
|
9
29
|
private static _current;
|
|
10
30
|
private static _cache;
|
|
11
|
-
private
|
|
31
|
+
private readonly _observers;
|
|
12
32
|
private readonly _native;
|
|
13
33
|
get native(): Y;
|
|
14
|
-
constructor(native: Y, flavour: string);
|
|
34
|
+
protected constructor(native: Y, flavour: string);
|
|
35
|
+
Query<M extends Model>(): Query<Q, M>;
|
|
36
|
+
abstract parseCondition(condition: Condition): Q;
|
|
37
|
+
abstract get Statement(): Statement<Q>;
|
|
38
|
+
abstract get Clauses(): ClauseFactory<Y, Q>;
|
|
15
39
|
protected isReserved(attr: string): boolean;
|
|
16
40
|
protected abstract parseError(err: Error): BaseError;
|
|
17
|
-
abstract
|
|
18
|
-
abstract
|
|
19
|
-
|
|
41
|
+
abstract initialize(...args: any[]): Promise<void>;
|
|
42
|
+
abstract index<M extends Model>(...models: M[]): Promise<any>;
|
|
43
|
+
abstract Sequence(options: SequenceOptions): Promise<Sequence>;
|
|
44
|
+
prepare<M extends Model>(model: M, pk: string | number): {
|
|
20
45
|
record: Record<string, any>;
|
|
21
46
|
id: string;
|
|
22
|
-
}
|
|
23
|
-
revert<
|
|
47
|
+
};
|
|
48
|
+
revert<M extends Model>(obj: Record<string, any>, clazz: string | Constructor<M>, pk: string, id: string | number | bigint): M;
|
|
24
49
|
abstract create(tableName: string, id: string | number, model: Record<string, any>, ...args: any[]): Promise<Record<string, any>>;
|
|
25
|
-
|
|
50
|
+
createAll(tableName: string, id: (string | number)[], model: Record<string, any>[], ...args: any[]): Promise<Record<string, any>[]>;
|
|
51
|
+
abstract read(tableName: string, id: string | number | bigint, ...args: any[]): Promise<Record<string, any>>;
|
|
52
|
+
readAll(tableName: string, id: (string | number | bigint)[], ...args: any[]): Promise<Record<string, any>[]>;
|
|
26
53
|
abstract update(tableName: string, id: string | number, model: Record<string, any>, ...args: any[]): Promise<Record<string, any>>;
|
|
27
|
-
|
|
28
|
-
abstract
|
|
54
|
+
updateAll(tableName: string, id: string[] | number[], model: Record<string, any>[], ...args: any[]): Promise<Record<string, any>[]>;
|
|
55
|
+
abstract delete(tableName: string, id: string | number | bigint, ...args: any[]): Promise<Record<string, any>>;
|
|
56
|
+
deleteAll(tableName: string, id: (string | number | bigint)[], ...args: any[]): Promise<Record<string, any>[]>;
|
|
57
|
+
abstract raw<R>(rawInput: Q, ...args: any[]): Promise<R>;
|
|
29
58
|
/**
|
|
30
59
|
* @summary Registers an {@link Observer}
|
|
31
60
|
* @param {Observer} observer
|
|
@@ -46,6 +75,8 @@ export declare abstract class Adapter<Y, T = string> implements RawExecutor<T>,
|
|
|
46
75
|
*/
|
|
47
76
|
updateObservers(...args: any[]): Promise<void>;
|
|
48
77
|
static get current(): Adapter<any, any>;
|
|
49
|
-
static get(flavour: any): Adapter<
|
|
78
|
+
static get<Y, Q>(flavour: any): Adapter<Y, Q> | undefined;
|
|
50
79
|
static setCurrent(flavour: string): void;
|
|
80
|
+
static key(key: string): string;
|
|
81
|
+
static models<M extends Model>(flavour: string): ModelConstructor<any>[];
|
|
51
82
|
}
|
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PersistenceKeys = void 0;
|
|
4
|
+
var PersistenceKeys;
|
|
5
|
+
(function (PersistenceKeys) {
|
|
6
|
+
PersistenceKeys["INDEX"] = "index";
|
|
7
|
+
PersistenceKeys["UNIQUE"] = "unique";
|
|
8
|
+
PersistenceKeys["ADAPTER"] = "adapter";
|
|
9
|
+
PersistenceKeys["INJECTABLE"] = "decaf_{0}_adapter_for_{1}";
|
|
10
|
+
PersistenceKeys["TABLE"] = "table";
|
|
11
|
+
PersistenceKeys["COLUMN"] = "column";
|
|
12
|
+
PersistenceKeys["METADATA"] = "__metadata";
|
|
13
|
+
PersistenceKeys["CLAUSE_SEQUENCE"] = "clause-sequence";
|
|
14
|
+
})(PersistenceKeys || (exports.PersistenceKeys = PersistenceKeys = {}));
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxlQVNYO0FBVEQsV0FBWSxlQUFlO0lBQ3pCLGtDQUFlLENBQUE7SUFDZixvQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBbUIsQ0FBQTtJQUNuQiwyREFBd0MsQ0FBQTtJQUN4QyxrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsMENBQXVCLENBQUE7SUFDdkIsc0RBQW1DLENBQUE7QUFDckMsQ0FBQyxFQVRXLGVBQWUsK0JBQWYsZUFBZSxRQVMxQiIsImZpbGUiOiJwZXJzaXN0ZW5jZS9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBQZXJzaXN0ZW5jZUtleXMge1xuICBJTkRFWCA9IFwiaW5kZXhcIixcbiAgVU5JUVVFID0gXCJ1bmlxdWVcIixcbiAgQURBUFRFUiA9IFwiYWRhcHRlclwiLFxuICBJTkpFQ1RBQkxFID0gXCJkZWNhZl97MH1fYWRhcHRlcl9mb3JfezF9XCIsXG4gIFRBQkxFID0gXCJ0YWJsZVwiLFxuICBDT0xVTU4gPSBcImNvbHVtblwiLFxuICBNRVRBREFUQSA9IFwiX19tZXRhZGF0YVwiLFxuICBDTEFVU0VfU0VRVUVOQ0UgPSBcImNsYXVzZS1zZXF1ZW5jZVwiLFxufVxuIl19
|
|
@@ -1 +1,10 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare enum PersistenceKeys {
|
|
2
|
+
INDEX = "index",
|
|
3
|
+
UNIQUE = "unique",
|
|
4
|
+
ADAPTER = "adapter",
|
|
5
|
+
INJECTABLE = "decaf_{0}_adapter_for_{1}",
|
|
6
|
+
TABLE = "table",
|
|
7
|
+
COLUMN = "column",
|
|
8
|
+
METADATA = "__metadata",
|
|
9
|
+
CLAUSE_SEQUENCE = "clause-sequence"
|
|
10
|
+
}
|
|
@@ -1 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uses = uses;
|
|
4
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
5
|
+
const constants_1 = require("./constants.cjs");
|
|
6
|
+
const Adapter_1 = require("./Adapter.cjs");
|
|
7
|
+
function uses(flavour) {
|
|
8
|
+
return (original) => {
|
|
9
|
+
return (0, reflection_1.metadata)(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), flavour)(original);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsb0JBT0M7QUFYRCxxREFBZ0Q7QUFDaEQsMkNBQThDO0FBQzlDLHVDQUFvQztBQUVwQyxTQUFnQixJQUFJLENBQUMsT0FBZTtJQUNsQyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1FBQzFCLE9BQU8sSUFBQSxxQkFBUSxFQUNiLGlCQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsT0FBTyxDQUFDLEVBQ3BDLE9BQU8sQ0FDUixDQUFDLFFBQWUsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoicGVyc2lzdGVuY2UvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi9BZGFwdGVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VzKGZsYXZvdXI6IHN0cmluZyk6IENsYXNzRGVjb3JhdG9yIHtcbiAgcmV0dXJuIChvcmlnaW5hbDogb2JqZWN0KSA9PiB7XG4gICAgcmV0dXJuIG1ldGFkYXRhKFxuICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgZmxhdm91clxuICAgICkob3JpZ2luYWwgYXMgYW55KTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export declare function
|
|
2
|
-
export declare function uses(flavour: string): import("@decaf-ts/reflection").CustomDecorator<V>;
|
|
1
|
+
export declare function uses(flavour: string): ClassDecorator;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectionError = void 0;
|
|
4
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
+
class ConnectionError extends db_decorators_1.BaseError {
|
|
6
|
+
constructor(msg) {
|
|
7
|
+
super(ConnectionError.name, msg);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ConnectionError = ConnectionError;
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQW9EO0FBRXBELE1BQWEsZUFBZ0IsU0FBUSx5QkFBUztJQUM1QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUpELDBDQUlDIiwiZmlsZSI6InBlcnNpc3RlbmNlL2Vycm9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKENvbm5lY3Rpb25FcnJvci5uYW1lLCBtc2cpO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Adapter.cjs"), exports);
|
|
18
|
+
__exportStar(require("./constants.cjs"), exports);
|
|
19
|
+
__exportStar(require("./decorators.cjs"), exports);
|
|
20
|
+
__exportStar(require("./errors.cjs"), exports);
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDhDQUE0QjtBQUM1QiwrQ0FBNkI7QUFDN0IsMkNBQXlCIiwiZmlsZSI6InBlcnNpc3RlbmNlL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbiJdfQ==
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Clause = void 0;
|
|
13
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
14
|
+
const errors_1 = require("./errors.cjs");
|
|
15
|
+
const constants_1 = require("./constants.cjs");
|
|
16
|
+
const Statement_1 = require("./Statement.cjs");
|
|
17
|
+
/**
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* @summary Clause Class
|
|
21
|
+
* @description Represents a Clause in a {@link Statement}
|
|
22
|
+
*
|
|
23
|
+
* @typedef Q Represents que query object the persistence adapter uses
|
|
24
|
+
*
|
|
25
|
+
* @param {ModelArg<Clause<Q>>} [clause]
|
|
26
|
+
*
|
|
27
|
+
* @class Clause
|
|
28
|
+
* @extends Model
|
|
29
|
+
* @implements Executor
|
|
30
|
+
* @implements QueryBuilder
|
|
31
|
+
* @abstract
|
|
32
|
+
*
|
|
33
|
+
* @category Query
|
|
34
|
+
* @subcategory Clauses
|
|
35
|
+
*/
|
|
36
|
+
class Clause extends decorator_validation_1.Model {
|
|
37
|
+
constructor(clause) {
|
|
38
|
+
super();
|
|
39
|
+
this.priority = clause?.priority;
|
|
40
|
+
this.statement = clause?.statement;
|
|
41
|
+
if (!this.statement || !this.priority)
|
|
42
|
+
throw new errors_1.QueryError("Missing statement or priority. Should be impossible");
|
|
43
|
+
this.statement.addClause(this);
|
|
44
|
+
}
|
|
45
|
+
get adapter() {
|
|
46
|
+
return this.statement.getAdapter();
|
|
47
|
+
}
|
|
48
|
+
get Clauses() {
|
|
49
|
+
return this.statement.getAdapter().Clauses;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @summary return the priority of the clause
|
|
53
|
+
* @see Priority
|
|
54
|
+
*/
|
|
55
|
+
getPriority() {
|
|
56
|
+
return this.priority;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @inheritDoc
|
|
60
|
+
* @abstract
|
|
61
|
+
*/
|
|
62
|
+
async execute() {
|
|
63
|
+
return this.statement.execute();
|
|
64
|
+
}
|
|
65
|
+
toString() {
|
|
66
|
+
return this.constructor.name;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.Clause = Clause;
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, decorator_validation_1.required)(),
|
|
72
|
+
__metadata("design:type", Number)
|
|
73
|
+
], Clause.prototype, "priority", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, decorator_validation_1.required)(),
|
|
76
|
+
(0, decorator_validation_1.type)("object"),
|
|
77
|
+
__metadata("design:type", Statement_1.Statement)
|
|
78
|
+
], Clause.prototype, "statement", void 0);
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9DbGF1c2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EseUVBS3dDO0FBRXhDLHFDQUFzQztBQUN0QywyQ0FBdUM7QUFDdkMsMkNBQXdDO0FBRXhDO0dBQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQXNCLE1BQ3BCLFNBQVEsNEJBQUs7SUFVYixZQUFzQixNQUE0QjtRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNuQyxNQUFNLElBQUksbUJBQVUsQ0FDbEIscURBQXFELENBQ3RELENBQUM7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFJRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztDQWtCRjtBQXBFRCx3QkFvRUM7QUEvRFU7SUFEUixJQUFBLCtCQUFRLEdBQUU7O3dDQUNrQjtBQUlwQjtJQUZSLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEsMkJBQUksRUFBQyxRQUFRLENBQUM7OEJBQ00scUJBQVM7eUNBQUkiLCJmaWxlIjoicXVlcnkvQ2xhdXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIE1vZGVsQXJnLFxuICByZXF1aXJlZCxcbiAgdHlwZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuL1N0YXRlbWVudFwiO1xuXG4vKipcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IENsYXVzZSBDbGFzc1xuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBDbGF1c2UgaW4gYSB7QGxpbmsgU3RhdGVtZW50fVxuICpcbiAqIEB0eXBlZGVmIFEgUmVwcmVzZW50cyBxdWUgcXVlcnkgb2JqZWN0IHRoZSBwZXJzaXN0ZW5jZSBhZGFwdGVyIHVzZXNcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPENsYXVzZTxRPj59IFtjbGF1c2VdXG4gKlxuICogQGNsYXNzIENsYXVzZVxuICogQGV4dGVuZHMgTW9kZWxcbiAqIEBpbXBsZW1lbnRzIEV4ZWN1dG9yXG4gKiBAaW1wbGVtZW50cyBRdWVyeUJ1aWxkZXJcbiAqIEBhYnN0cmFjdFxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsYXVzZTxRPlxuICBleHRlbmRzIE1vZGVsXG4gIGltcGxlbWVudHMgRXhlY3V0b3IsIFF1ZXJ5QnVpbGRlcjxRPlxue1xuICBAcmVxdWlyZWQoKVxuICByZWFkb25seSBwcmlvcml0eSE6IFByaW9yaXR5O1xuXG4gIEByZXF1aXJlZCgpXG4gIEB0eXBlKFwib2JqZWN0XCIpXG4gIHJlYWRvbmx5IHN0YXRlbWVudCE6IFN0YXRlbWVudDxRPjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoY2xhdXNlPzogTW9kZWxBcmc8Q2xhdXNlPFE+Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wcmlvcml0eSA9IGNsYXVzZT8ucHJpb3JpdHk7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBjbGF1c2U/LnN0YXRlbWVudDtcbiAgICBpZiAoIXRoaXMuc3RhdGVtZW50IHx8ICF0aGlzLnByaW9yaXR5KVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgIFwiTWlzc2luZyBzdGF0ZW1lbnQgb3IgcHJpb3JpdHkuIFNob3VsZCBiZSBpbXBvc3NpYmxlXCIsXG4gICAgICApO1xuICAgIHRoaXMuc3RhdGVtZW50LmFkZENsYXVzZSh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0QWRhcHRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBDbGF1c2VzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRBZGFwdGVyKCkuQ2xhdXNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZXR1cm4gdGhlIHByaW9yaXR5IG9mIHRoZSBjbGF1c2VcbiAgICogQHNlZSBQcmlvcml0eVxuICAgKi9cbiAgZ2V0UHJpb3JpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmlvcml0eSBhcyBudW1iZXI7XG4gIH1cblxuICBhYnN0cmFjdCBidWlsZChwcmV2aW91czogUSk6IFE7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZTxSPigpOiBQcm9taXNlPFI+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZXhlY3V0ZSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3Ige0BsaW5rIEZyb21DbGF1c2V9XG4gIC8vICAqIEBwYXJhbSB7e3ByaW9yaXR5OiBudW1iZXIsIHN0YXRlbWVudDogU3RhdGVtZW50LCBnZXRQcmlvcml0eTogRnVuY3Rpb24sIGJ1aWxkOiBGdW5jdGlvbiwgcHJvY2VzczogRnVuY3Rpb259fSBjbGF1c2VcbiAgLy8gICovXG4gIC8vIHN0YXRpYyBpc0NsYXVzZShjbGF1c2U6IFBhcnRpYWw8Q2xhdXNlPGFueT4+KSB7XG4gIC8vICAgcmV0dXJuIGNsYXVzZSBpbnN0YW5jZW9mIENsYXVzZTtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgY2xhdXNlLmNvbnN0cnVjdG9yICYmXG4gIC8vICAgICBjbGF1c2UuY29uc3RydWN0b3IubmFtZSAmJlxuICAvLyAgICAgY2xhdXNlLnByaW9yaXR5ICYmXG4gIC8vICAgICBjbGF1c2Uuc3RhdGVtZW50ICYmXG4gIC8vICAgICBjbGF1c2UuZ2V0UHJpb3JpdHkgJiZcbiAgLy8gICAgIGNsYXVzZS5idWlsZCAmJlxuICAvLyAgICAgY2xhdXNlLmV4ZWN1dGVcbiAgLy8gICApO1xuICAvLyB9XG59XG4iXX0=
|