@decaf-ts/core 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/core.bundle.min.js +1 -1
  2. package/dist/esm/core.bundle.min.esm.js +1 -1
  3. package/lib/esm/identity/decorators.d.ts +1 -1
  4. package/lib/esm/identity/decorators.js +3 -2
  5. package/lib/esm/identity/utils.d.ts +1 -0
  6. package/lib/esm/identity/utils.js +15 -3
  7. package/lib/esm/index.d.ts +1 -1
  8. package/lib/esm/index.js +2 -2
  9. package/lib/esm/interfaces/Paginatable.d.ts +4 -0
  10. package/lib/esm/interfaces/Paginatable.js +3 -0
  11. package/lib/esm/model/BaseModel.d.ts +2 -0
  12. package/lib/esm/model/BaseModel.js +10 -1
  13. package/lib/esm/model/User.d.ts +8 -0
  14. package/lib/esm/model/User.js +35 -0
  15. package/lib/esm/model/construction.d.ts +9 -9
  16. package/lib/esm/model/construction.js +37 -33
  17. package/lib/esm/model/decorators.d.ts +6 -2
  18. package/lib/esm/model/decorators.js +18 -8
  19. package/lib/esm/model/index.d.ts +2 -0
  20. package/lib/esm/model/index.js +3 -1
  21. package/lib/esm/persistence/Adapter.d.ts +6 -3
  22. package/lib/esm/persistence/Adapter.js +10 -11
  23. package/lib/esm/persistence/Sequence.d.ts +1 -1
  24. package/lib/esm/persistence/Sequence.js +2 -2
  25. package/lib/esm/persistence/constants.d.ts +11 -3
  26. package/lib/esm/persistence/constants.js +14 -4
  27. package/lib/esm/query/Clause.d.ts +8 -1
  28. package/lib/esm/query/Clause.js +8 -1
  29. package/lib/esm/query/Paginator.d.ts +22 -0
  30. package/lib/esm/query/Paginator.js +39 -0
  31. package/lib/esm/query/Query.d.ts +1 -1
  32. package/lib/esm/query/Query.js +1 -1
  33. package/lib/esm/query/Statement.d.ts +6 -0
  34. package/lib/esm/query/Statement.js +7 -2
  35. package/lib/esm/query/errors.d.ts +3 -0
  36. package/lib/esm/query/errors.js +6 -1
  37. package/lib/esm/query/index.d.ts +1 -0
  38. package/lib/esm/query/index.js +2 -1
  39. package/lib/esm/query/options.d.ts +4 -3
  40. package/lib/esm/query/options.js +1 -1
  41. package/lib/esm/repository/Repository.d.ts +8 -3
  42. package/lib/esm/repository/Repository.js +40 -23
  43. package/lib/identity/decorators.cjs +3 -2
  44. package/lib/identity/decorators.d.ts +1 -1
  45. package/lib/identity/utils.cjs +16 -3
  46. package/lib/identity/utils.d.ts +1 -0
  47. package/lib/index.cjs +2 -2
  48. package/lib/index.d.ts +1 -1
  49. package/lib/interfaces/Paginatable.cjs +4 -0
  50. package/lib/interfaces/Paginatable.d.ts +4 -0
  51. package/lib/model/BaseModel.cjs +10 -1
  52. package/lib/model/BaseModel.d.ts +2 -0
  53. package/lib/model/User.cjs +38 -0
  54. package/lib/model/User.d.ts +8 -0
  55. package/lib/model/construction.cjs +36 -32
  56. package/lib/model/construction.d.ts +9 -9
  57. package/lib/model/decorators.cjs +20 -7
  58. package/lib/model/decorators.d.ts +6 -2
  59. package/lib/model/index.cjs +3 -1
  60. package/lib/model/index.d.ts +2 -0
  61. package/lib/persistence/Adapter.cjs +9 -10
  62. package/lib/persistence/Adapter.d.ts +6 -3
  63. package/lib/persistence/Sequence.cjs +3 -3
  64. package/lib/persistence/Sequence.d.ts +1 -1
  65. package/lib/persistence/constants.cjs +15 -5
  66. package/lib/persistence/constants.d.ts +11 -3
  67. package/lib/query/Clause.cjs +8 -1
  68. package/lib/query/Clause.d.ts +8 -1
  69. package/lib/query/Paginator.cjs +43 -0
  70. package/lib/query/Paginator.d.ts +22 -0
  71. package/lib/query/Query.cjs +1 -1
  72. package/lib/query/Query.d.ts +1 -1
  73. package/lib/query/Statement.cjs +7 -2
  74. package/lib/query/Statement.d.ts +6 -0
  75. package/lib/query/errors.cjs +8 -2
  76. package/lib/query/errors.d.ts +3 -0
  77. package/lib/query/index.cjs +2 -1
  78. package/lib/query/index.d.ts +1 -0
  79. package/lib/query/options.cjs +1 -1
  80. package/lib/query/options.d.ts +4 -3
  81. package/lib/repository/Repository.cjs +40 -23
  82. package/lib/repository/Repository.d.ts +8 -3
  83. package/package.json +1 -1
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Adapter = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
- const errors_1 = require("../repository/errors.cjs");
6
5
  const decorator_validation_1 = require("@decaf-ts/decorator-validation");
7
6
  const constants_1 = require("./constants.cjs");
8
7
  const Query_1 = require("../query/Query.cjs");
@@ -42,10 +41,12 @@ class Adapter {
42
41
  async timestamp() {
43
42
  return new Date();
44
43
  }
44
+ async context(operation, model) {
45
+ return db_decorators_1.Context.from(operation, model);
46
+ }
45
47
  prepare(model, pk) {
46
48
  const result = Object.entries(model).reduce((accum, [key, val]) => {
47
- if (key === pk)
48
- return accum;
49
+ // if (key === pk) return accum;
49
50
  const mappedProp = Repository_1.Repository.column(model, key);
50
51
  if (this.isReserved(mappedProp))
51
52
  throw new db_decorators_1.InternalError(`Property name ${mappedProp} is reserved`);
@@ -129,12 +130,10 @@ class Adapter {
129
130
  * @param {any[]} [args] optional arguments to be passed to the {@link Observer#refresh} method
130
131
  */
131
132
  async updateObservers(...args) {
132
- return new Promise((resolve, reject) => {
133
- Promise.all(this._observers.map((o) => o.refresh(...args)))
134
- .then(() => {
135
- resolve();
136
- })
137
- .catch((e) => reject(new errors_1.ObserverError(e)));
133
+ const results = await Promise.allSettled(this._observers.map((o) => o.refresh(...args)));
134
+ results.forEach((result, i) => {
135
+ if (result.status === "rejected")
136
+ console.warn(`Failed to update observable ${this._observers[i]}: ${result.reason}`);
138
137
  });
139
138
  }
140
139
  static get current() {
@@ -182,4 +181,4 @@ class Adapter {
182
181
  }
183
182
  exports.Adapter = Adapter;
184
183
 
185
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9BZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUtpQztBQUVqQyxpREFBcUQ7QUFDckQseUVBS3dDO0FBSXhDLDJDQUE4QztBQUM5QywwQ0FBdUM7QUFJdkMseURBQXNEO0FBR3REOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBc0IsT0FBTzthQUVaLFdBQU0sR0FBc0MsRUFBdEMsQUFBd0MsQ0FBQztJQUs5RCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQ0UsTUFBUyxFQUNBLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBVFQsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQVczQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQVFTLFVBQVUsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDZixDQUFDO0lBVUQsS0FBSyxDQUFDLFNBQVM7UUFDYixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sQ0FDTCxLQUFRLEVBQ1IsRUFBbUI7UUFLbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQ3pDLENBQUMsS0FBMEIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksR0FBRyxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDN0IsTUFBTSxVQUFVLEdBQUcsdUJBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFD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LENBQUMsQ0FBQyxDQUFDO29CQUUxQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxVQUFVLENBQ1gsQ0FBQztvQkFDRixPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSw2QkFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDOztBQXhRSCwwQkF5UUMiLCJmaWxlIjoicGVyc2lzdGVuY2UvQWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VFcnJvcixcbiAgREJLZXlzLFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2ZXJcIjtcbmltcG9ydCB7IE9ic2VydmVyRXJyb3IgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9lcnJvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBNb2RlbCxcbiAgTW9kZWxDb25zdHJ1Y3RvcixcbiAgTW9kZWxSZWdpc3RyeSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VxdWVuY2VPcHRpb25zXCI7XG5pbXBvcnQgeyBSYXdFeGVjdXRvciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1Jhd0V4ZWN1dG9yXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuLi9xdWVyeS9RdWVyeVwiO1xuaW1wb3J0IHsgU3RhdGVtZW50IH0gZnJvbSBcIi4uL3F1ZXJ5L1N0YXRlbWVudFwiO1xuaW1wb3J0IHsgQ2xhdXNlRmFjdG9yeSB9IGZyb20gXCIuLi9xdWVyeS9DbGF1c2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi4vcXVlcnkvQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi9TZXF1ZW5jZVwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEFic3RyYWN0IERlY2FmLXRzIFBlcnNpc3RlbmNlIEFkYXB0ZXIgQ2xhc3NcbiAqIEBkZXNjcmlwdGlvbiBPZmZlcnMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFsbCBBZGFwdGVyIENsYXNzZXNcbiAqIGFuZCBtYW5hZ2VzIHRoZW0gdmFyaW91cyByZWdpc3RlcmVkIHtAbGluayBBZGFwdGVyfXNcbiAqXG4gKiBAdHlwZWRlZiBZIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIG9iamVjdCB0eXBlXG4gKiBAdHlwZWRlZiBRIFRoZSBxdWVyeSBvYmplY3QgdGhlIGFkYXB0ZXIgdXNlc1xuICpcbiAqIEBwYXJhbSB7WX0gbmF0aXZlIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgdGhlIHVuZGVyIHdpdGNoIHRoZSBwZXJzaXN0ZW5jZSBhZGFwdGVyIHNob3VsZCBiZSBzdG9yZWRcbiAqXG4gKiBAY2xhc3MgQWRhcHRlclxuICogQGltcGxlbWVudHMgUmF3RXhlY3V0b3JcbiAqIEBpbXBsZW1lbnRzIE9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFkYXB0ZXI8WSwgUT4gaW1wbGVtZW50cyBSYXdFeGVjdXRvcjxRPiwgT2JzZXJ2YWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIF9jdXJyZW50OiBBZGFwdGVyPGFueSwgYW55PjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBSZWNvcmQ8c3RyaW5nLCBBZGFwdGVyPGFueSwgYW55Pj4gPSB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vYnNlcnZlcnM6IE9ic2VydmVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmF0aXZlOiBZO1xuXG4gIGdldCBuYXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBuYXRpdmU6IFksXG4gICAgcmVhZG9ubHkgZmxhdm91cjogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuX25hdGl2ZSA9IG5hdGl2ZTtcbiAgICBBZGFwdGVyLl9jYWNoZVtmbGF2b3VyXSA9IHRoaXM7XG4gIH1cblxuICBRdWVyeTxNIGV4dGVuZHMgTW9kZWw+KCk6IFF1ZXJ5PFEsIE0+IHtcbiAgICByZXR1cm4gbmV3IFF1ZXJ5KHRoaXMpO1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb24pOiBRO1xuXG4gIGFic3RyYWN0IGdldCBTdGF0ZW1lbnQoKTogU3RhdGVtZW50PFE+O1xuXG4gIGFic3RyYWN0IGdldCBDbGF1c2VzKCk6IENsYXVzZUZhY3Rvcnk8WSwgUT47XG5cbiAgcHJvdGVjdGVkIGlzUmVzZXJ2ZWQoYXR0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuICFhdHRyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhcnNlRXJyb3IoZXJyOiBFcnJvcik6IEJhc2VFcnJvcjtcblxuICBhYnN0cmFjdCBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcblxuICBhYnN0cmFjdCBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KC4uLm1vZGVsczogTVtdKTogUHJvbWlzZTxhbnk+O1xuXG4gIGFic3RyYWN0IFNlcXVlbmNlKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucyk6IFByb21pc2U8U2VxdWVuY2U+O1xuXG4gIGFzeW5jIHRpbWVzdGFtcCgpOiBQcm9taXNlPERhdGU+IHtcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgfVxuXG4gIHByZXBhcmU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICBwazogc3RyaW5nIHwgbnVtYmVyXG4gICk6IHtcbiAgICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgaWQ6IHN0cmluZztcbiAgfSB7XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXMobW9kZWwpLnJlZHVjZShcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBwaykgcmV0dXJuIGFjY3VtO1xuICAgICAgICBjb25zdCBtYXBwZWRQcm9wID0gUmVwb3NpdG9yeS5jb2x1bW4obW9kZWwsIGtleSk7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWQobWFwcGVkUHJvcCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYFByb3BlcnR5IG5hbWUgJHttYXBwZWRQcm9wfSBpcyByZXNlcnZlZGApO1xuICAgICAgICBhY2N1bVttYXBwZWRQcm9wXSA9IHZhbDtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBpZiAoKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXSlcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZDogcmVzdWx0LFxuICAgICAgaWQ6IChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwa10sXG4gICAgfTtcbiAgfVxuXG4gIHJldmVydDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjbGF6ejogc3RyaW5nIHwgQ29uc3RydWN0b3I8TT4sXG4gICAgcGs6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50XG4gICk6IE0ge1xuICAgIGNvbnN0IG9iOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgb2JbcGtdID0gaWQ7XG4gICAgY29uc3QgbSA9IChcbiAgICAgIHR5cGVvZiBjbGF6eiA9PT0gXCJzdHJpbmdcIiA/IE1vZGVsLmJ1aWxkKG9iLCBjbGF6eikgOiBuZXcgY2xhenoob2IpXG4gICAgKSBhcyBNO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gb2JqW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMobSkucmVkdWNlKChhY2N1bTogTSwga2V5KSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSBwaykgcmV0dXJuIGFjY3VtO1xuICAgICAgKGFjY3VtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gPSBvYmpbUmVwb3NpdG9yeS5jb2x1bW4oYWNjdW0sIGtleSldO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIG0pO1xuICAgIGlmIChtZXRhZGF0YSlcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbWV0YWRhdGEsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYWJzdHJhY3QgY3JlYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhc3luYyBjcmVhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZC5sZW5ndGggIT09IG1vZGVsLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBpZC5tYXAoKGksIGNvdW50KSA9PiB0aGlzLmNyZWF0ZSh0YWJsZU5hbWUsIGksIG1vZGVsW2NvdW50XSwgLi4uYXJncykpXG4gICAgKTtcbiAgfVxuXG4gIGFic3RyYWN0IHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFzeW5jIHJlYWRBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoaWQubWFwKChpKSA9PiB0aGlzLnJlYWQodGFibGVOYW1lLCBpLCAuLi5hcmdzKSkpO1xuICB9XG5cbiAgYWJzdHJhY3QgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhc3luYyB1cGRhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZC5sZW5ndGggIT09IG1vZGVsLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBpZC5tYXAoKGksIGNvdW50KSA9PiB0aGlzLnVwZGF0ZSh0YWJsZU5hbWUsIGksIG1vZGVsW2NvdW50XSwgLi4uYXJncykpXG4gICAgKTtcbiAgfVxuXG4gIGFic3RyYWN0IGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgYXN5bmMgZGVsZXRlQWxsKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiAoc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KVtdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGlkLm1hcCgoaSkgPT4gdGhpcy5kZWxldGUodGFibGVOYW1lLCBpLCAuLi5hcmdzKSkpO1xuICB9XG5cbiAgYWJzdHJhY3QgcmF3PFI+KHJhd0lucHV0OiBRLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Uj47XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyBhbiB7QGxpbmsgT2JzZXJ2ZXJ9XG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG4gICAqXG4gICAqIEBzZWUge09ic2VydmFibGUjb2JzZXJ2ZX1cbiAgICovXG4gIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJPYnNlcnZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7XG4gICAgdGhpcy5fb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFVucmVnaXN0ZXJzIGFuIHtAbGluayBPYnNlcnZlcn1cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcbiAgICpcbiAgICogQHNlZSB7T2JzZXJ2YWJsZSN1bk9ic2VydmV9XG4gICAqL1xuICB1bk9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBPYnNlcnZlclwiKTtcbiAgICB0aGlzLl9vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBjYWxscyBhbGwgcmVnaXN0ZXJlZCB7QGxpbmsgT2JzZXJ2ZXJ9cyB0byB1cGRhdGUgdGhlbXNlbHZlc1xuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIE9ic2VydmVyI3JlZnJlc2h9IG1ldGhvZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIFByb21pc2UuYWxsKHRoaXMuX29ic2VydmVycy5tYXAoKG86IE9ic2VydmVyKSA9PiBvLnJlZnJlc2goLi4uYXJncykpKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGU6IGFueSkgPT4gcmVqZWN0KG5ldyBPYnNlcnZlckVycm9yKGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0PFksIFE+KGZsYXZvdXI6IGFueSk6IEFkYXB0ZXI8WSwgUT4gfCB1bmRlZmluZWQge1xuICAgIGlmIChmbGF2b3VyIGluIHRoaXMuX2NhY2hlKSByZXR1cm4gdGhpcy5fY2FjaGVbZmxhdm91cl07XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE5vIEFkYXB0ZXIgcmVnaXN0ZXJlZCB1bmRlciAke2ZsYXZvdXJ9LmApO1xuICB9XG5cbiAgc3RhdGljIHNldEN1cnJlbnQoZmxhdm91cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuZ2V0KGZsYXZvdXIpO1xuICAgIGlmICghYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBObyBwZXJzaXN0ZW5jZSBmbGF2b3VyICR7Zmxhdm91cn0gcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMuX2N1cnJlbnQgPSBhZGFwdGVyO1xuICB9XG5cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBSZXBvc2l0b3J5LmtleShrZXkpO1xuICB9XG5cbiAgc3RhdGljIG1vZGVsczxNIGV4dGVuZHMgTW9kZWw+KGZsYXZvdXI6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IChNb2RlbCBhcyBhbnkpLmdldFJlZ2lzdHJ5KCkgYXMgTW9kZWxSZWdpc3RyeTxhbnk+O1xuICAgICAgY29uc3QgY2FjaGUgPSAoXG4gICAgICAgIHJlZ2lzdHJ5IGFzIHVua25vd24gYXMgeyBjYWNoZTogUmVjb3JkPHN0cmluZywgTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+PiB9XG4gICAgICApLmNhY2hlO1xuICAgICAgY29uc3QgbWFuYWdlZE1vZGVsczogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+W10gPSBPYmplY3QudmFsdWVzKGNhY2hlKVxuICAgICAgICAubWFwKChtOiBNb2RlbENvbnN0cnVjdG9yPE0+KSA9PiB7XG4gICAgICAgICAgbGV0IGYgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgICAgICAgbSBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT5cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmICYmIGYgPT09IGZsYXZvdXIpIHJldHVybiBtO1xuICAgICAgICAgIGlmICghZikge1xuICAgICAgICAgICAgY29uc3QgcmVwbyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICAgIFJlcG9zaXRvcnkua2V5KERCS2V5cy5SRVBPU0lUT1JZKSxcbiAgICAgICAgICAgICAgbSBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXJlcG8pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBSZXBvc2l0b3J5LmZvck1vZGVsKG0pO1xuXG4gICAgICAgICAgICBmID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgICAgICAgICByZXBvc2l0b3J5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChtKSA9PiAhIW0pO1xuICAgICAgcmV0dXJuIG1hbmFnZWRNb2RlbHM7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
184
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9BZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQU9pQztBQUVqQyx5RUFLd0M7QUFJeEMsMkNBQThDO0FBQzlDLDBDQUF1QztBQUl2Qyx5REFBc0Q7QUFJdEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFzQixPQUFPO2FBRVosV0FBTSxHQUFzQyxFQUF0QyxBQUF3QyxDQUFDO0lBSzlELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFDRSxNQUFTLEVBQ0EsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFUVCxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBVzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBUVMsVUFBVSxDQUFDLElBQVk7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNmLENBQUM7SUFVRCxLQUFLLENBQUMsU0FBUztRQUNiLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBSUQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxTQUl3QixFQUN4QixLQUFxQjtRQUVyQixPQUFPLHVCQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxDQUNMLEtBQVEsRUFDUixFQUFtQjtRQUtuQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxLQUEwQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDekMsZ0NBQWdDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLHVCQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO2dCQUM3QixNQUFNLElBQUksNkJBQWEsQ0FBQyxpQkFBaUIsVUFBVSxjQUFjLENBQUMsQ0FBQztZQUNyRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsSUFBSyxLQUFhLENBQUMsMkJBQWUsQ0FBQyxRQUFRLENBQUM7WUFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsMkJBQWUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RELFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsS0FBSztnQkFDZixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsS0FBSyxFQUFHLEtBQWEsQ0FBQywyQkFBZSxDQUFDLFFBQVEsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDTCxPQUFPO1lBQ0wsTUFBTSxFQUFFLE1BQU07WUFDZCxFQUFFLEVBQUcsS0FBNkIsQ0FBQyxFQUFFLENBQUM7U0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQ0osR0FBd0IsRUFDeEIsS0FBOEIsRUFDOUIsRUFBVSxFQUNWLEVBQTRCO1FBRTVCLE1BQU0sRUFBRSxHQUF3QixFQUFFLENBQUM7UUFDbkMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyw0QkFBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO1FBQ1AsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLDJCQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDckQsSUFBSSxHQUFHLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM1QixLQUE2QixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyx1QkFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNOLElBQUksUUFBUTtZQUNWLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLDJCQUFlLENBQUMsUUFBUSxFQUFFO2dCQUN0RCxVQUFVLEVBQUUsS0FBSztnQkFDakIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxRQUFRO2FBQ2hCLENBQUMsQ0FBQztRQUNMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFTRCxLQUFLLENBQUMsU0FBUyxDQUNiLFNBQWlCLEVBQ2pCLEVBQXVCLEVBQ3ZCLEtBQTRCLEVBQzVCLEdBQUcsSUFBVztRQUVkLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtZQUM1QixNQUFNLElBQUksNkJBQWEsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDaEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQVFELEtBQUssQ0FBQyxPQUFPLENBQ1gsU0FBaUIsRUFDakIsRUFBZ0MsRUFDaEMsR0FBRyxJQUFXO1FBRWQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBU0QsS0FBSyxDQUFDLFNBQVMsQ0FDYixTQUFpQixFQUNqQixFQUF1QixFQUN2QixLQUE0QixFQUM1QixHQUFHLElBQVc7UUFFZCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07WUFDNUIsTUFBTSxJQUFJLDZCQUFhLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN0RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFRRCxLQUFLLENBQUMsU0FBUyxDQUNiLFNBQWlCLEVBQ2pCLEVBQWdDLEVBQ2hDLEdBQUcsSUFBVztRQUVkLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUlEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLFFBQWtCO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE1BQU0sSUFBSSw2QkFBYSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLFFBQWtCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE1BQU0sSUFBSSw2QkFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBVztRQUNsQyxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FDL0MsQ0FBQztRQUNGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0JBQStCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUN0RSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxLQUFLLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFPLE9BQVk7UUFDM0IsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLDZCQUFhLENBQUMsK0JBQStCLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBZTtRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPO1lBQ1YsTUFBTSxJQUFJLDZCQUFhLENBQUMsMEJBQTBCLE9BQU8sYUFBYSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLHVCQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFrQixPQUFlO1FBQzVDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFJLDRCQUFhLENBQUMsV0FBVyxFQUF3QixDQUFDO1lBQ3BFLE1BQU0sS0FBSyxHQUNULFFBQ0QsQ0FBQyxLQUFLLENBQUM7WUFDUixNQUFNLGFBQWEsR0FBNEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ2hFLEdBQUcsQ0FBQyxDQUFDLENBQXNCLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxDQUEwQixDQUMzQixDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPO29CQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDOUIsdUJBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFDakMsQ0FBMEIsQ0FDM0IsQ0FBQztvQkFDRixJQUFJLENBQUMsSUFBSTt3QkFBRSxPQUFPO29CQUNsQixNQUFNLFVBQVUsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFMUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsRUFDcEMsVUFBVSxDQUNYLENBQUM7b0JBQ0YsT0FBTyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQztZQUNILENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksNkJBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQzs7QUF2UkgsMEJBd1JDIiwiZmlsZSI6InBlcnNpc3RlbmNlL0FkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbnRleHQsXG4gIERCS2V5cyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL09ic2VydmVyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgTW9kZWwsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG4gIE1vZGVsUmVnaXN0cnksXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlcXVlbmNlT3B0aW9uc1wiO1xuaW1wb3J0IHsgUmF3RXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9SYXdFeGVjdXRvclwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL09ic2VydmFibGVcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnkvUXVlcnlcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuLi9xdWVyeS9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IENsYXVzZUZhY3RvcnkgfSBmcm9tIFwiLi4vcXVlcnkvQ2xhdXNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFNlcXVlbmNlIH0gZnJvbSBcIi4vU2VxdWVuY2VcIjtcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vbW9kZWwvVXNlclwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEFic3RyYWN0IERlY2FmLXRzIFBlcnNpc3RlbmNlIEFkYXB0ZXIgQ2xhc3NcbiAqIEBkZXNjcmlwdGlvbiBPZmZlcnMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFsbCBBZGFwdGVyIENsYXNzZXNcbiAqIGFuZCBtYW5hZ2VzIHRoZW0gdmFyaW91cyByZWdpc3RlcmVkIHtAbGluayBBZGFwdGVyfXNcbiAqXG4gKiBAdHlwZWRlZiBZIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIG9iamVjdCB0eXBlXG4gKiBAdHlwZWRlZiBRIFRoZSBxdWVyeSBvYmplY3QgdGhlIGFkYXB0ZXIgdXNlc1xuICpcbiAqIEBwYXJhbSB7WX0gbmF0aXZlIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbmNlIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgdGhlIHVuZGVyIHdpdGNoIHRoZSBwZXJzaXN0ZW5jZSBhZGFwdGVyIHNob3VsZCBiZSBzdG9yZWRcbiAqXG4gKiBAY2xhc3MgQWRhcHRlclxuICogQGltcGxlbWVudHMgUmF3RXhlY3V0b3JcbiAqIEBpbXBsZW1lbnRzIE9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFkYXB0ZXI8WSwgUT4gaW1wbGVtZW50cyBSYXdFeGVjdXRvcjxRPiwgT2JzZXJ2YWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIF9jdXJyZW50OiBBZGFwdGVyPGFueSwgYW55PjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBSZWNvcmQ8c3RyaW5nLCBBZGFwdGVyPGFueSwgYW55Pj4gPSB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vYnNlcnZlcnM6IE9ic2VydmVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmF0aXZlOiBZO1xuXG4gIGdldCBuYXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBuYXRpdmU6IFksXG4gICAgcmVhZG9ubHkgZmxhdm91cjogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuX25hdGl2ZSA9IG5hdGl2ZTtcbiAgICBBZGFwdGVyLl9jYWNoZVtmbGF2b3VyXSA9IHRoaXM7XG4gIH1cblxuICBRdWVyeTxNIGV4dGVuZHMgTW9kZWw+KCk6IFF1ZXJ5PFEsIE0+IHtcbiAgICByZXR1cm4gbmV3IFF1ZXJ5KHRoaXMpO1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb24pOiBRO1xuXG4gIGFic3RyYWN0IGdldCBTdGF0ZW1lbnQoKTogU3RhdGVtZW50PFE+O1xuXG4gIGFic3RyYWN0IGdldCBDbGF1c2VzKCk6IENsYXVzZUZhY3Rvcnk8WSwgUT47XG5cbiAgcHJvdGVjdGVkIGlzUmVzZXJ2ZWQoYXR0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuICFhdHRyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhcnNlRXJyb3IoZXJyOiBFcnJvcik6IEJhc2VFcnJvcjtcblxuICBhYnN0cmFjdCBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcblxuICBhYnN0cmFjdCBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KC4uLm1vZGVsczogQ29uc3RydWN0b3I8TT5bXSk6IFByb21pc2U8YW55PjtcblxuICBhYnN0cmFjdCBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPjtcblxuICBhc3luYyB0aW1lc3RhbXAoKTogUHJvbWlzZTxEYXRlPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gIH1cblxuICBhYnN0cmFjdCB1c2VyKCk6IFByb21pc2U8VXNlcj47XG5cbiAgYXN5bmMgY29udGV4dDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9wZXJhdGlvbjpcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPlxuICApIHtcbiAgICByZXR1cm4gQ29udGV4dC5mcm9tKG9wZXJhdGlvbiwgbW9kZWwpO1xuICB9XG5cbiAgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIHBrOiBzdHJpbmcgfCBudW1iZXJcbiAgKToge1xuICAgIHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpZDogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhtb2RlbCkucmVkdWNlKFxuICAgICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIC8vIGlmIChrZXkgPT09IHBrKSByZXR1cm4gYWNjdW07XG4gICAgICAgIGNvbnN0IG1hcHBlZFByb3AgPSBSZXBvc2l0b3J5LmNvbHVtbihtb2RlbCwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNlcnZlZChtYXBwZWRQcm9wKSlcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgUHJvcGVydHkgbmFtZSAke21hcHBlZFByb3B9IGlzIHJlc2VydmVkYCk7XG4gICAgICAgIGFjY3VtW21hcHBlZFByb3BdID0gdmFsO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICAgIGlmICgobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0sXG4gICAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiByZXN1bHQsXG4gICAgICBpZDogKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3BrXSxcbiAgICB9O1xuICB9XG5cbiAgcmV2ZXJ0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNsYXp6OiBzdHJpbmcgfCBDb25zdHJ1Y3RvcjxNPixcbiAgICBwazogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKTogTSB7XG4gICAgY29uc3Qgb2I6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBvYltwa10gPSBpZDtcbiAgICBjb25zdCBtID0gKFxuICAgICAgdHlwZW9mIGNsYXp6ID09PSBcInN0cmluZ1wiID8gTW9kZWwuYnVpbGQob2IsIGNsYXp6KSA6IG5ldyBjbGF6eihvYilcbiAgICApIGFzIE07XG4gICAgY29uc3QgbWV0YWRhdGEgPSBvYmpbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyhtKS5yZWR1Y2UoKGFjY3VtOiBNLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09IHBrKSByZXR1cm4gYWNjdW07XG4gICAgICAoYWNjdW0gYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSA9IG9ialtSZXBvc2l0b3J5LmNvbHVtbihhY2N1bSwga2V5KV07XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgbSk7XG4gICAgaWYgKG1ldGFkYXRhKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhYnN0cmFjdCBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFzeW5jIGNyZWF0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkLmxlbmd0aCAhPT0gbW9kZWwubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGlkLm1hcCgoaSwgY291bnQpID0+IHRoaXMuY3JlYXRlKHRhYmxlTmFtZSwgaSwgbW9kZWxbY291bnRdLCAuLi5hcmdzKSlcbiAgICApO1xuICB9XG5cbiAgYWJzdHJhY3QgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgYXN5bmMgcmVhZEFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogKHN0cmluZyB8IG51bWJlciB8IGJpZ2ludClbXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChpZC5tYXAoKGkpID0+IHRoaXMucmVhZCh0YWJsZU5hbWUsIGksIC4uLmFyZ3MpKSk7XG4gIH1cblxuICBhYnN0cmFjdCB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFzeW5jIHVwZGF0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkLmxlbmd0aCAhPT0gbW9kZWwubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGlkLm1hcCgoaSwgY291bnQpID0+IHRoaXMudXBkYXRlKHRhYmxlTmFtZSwgaSwgbW9kZWxbY291bnRdLCAuLi5hcmdzKSlcbiAgICApO1xuICB9XG5cbiAgYWJzdHJhY3QgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhc3luYyBkZWxldGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoaWQubWFwKChpKSA9PiB0aGlzLmRlbGV0ZSh0YWJsZU5hbWUsIGksIC4uLmFyZ3MpKSk7XG4gIH1cblxuICBhYnN0cmFjdCByYXc8Uj4ocmF3SW5wdXQ6IFEsIHByb2Nlc3M6IGJvb2xlYW4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSPjtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIHtAbGluayBPYnNlcnZlcn1cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcbiAgICpcbiAgICogQHNlZSB7T2JzZXJ2YWJsZSNvYnNlcnZlfVxuICAgKi9cbiAgb2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk9ic2VydmVyIGFscmVhZHkgcmVnaXN0ZXJlZFwiKTtcbiAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVW5yZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkZhaWxlZCB0byBmaW5kIE9ic2VydmVyXCIpO1xuICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGNhbGxzIGFsbCByZWdpc3RlcmVkIHtAbGluayBPYnNlcnZlcn1zIHRvIHVwZGF0ZSB0aGVtc2VsdmVzXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSBvcHRpb25hbCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgT2JzZXJ2ZXIjcmVmcmVzaH0gbWV0aG9kXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLm1hcCgobykgPT4gby5yZWZyZXNoKC4uLmFyZ3MpKVxuICAgICk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBvYnNlcnZhYmxlICR7dGhpcy5fb2JzZXJ2ZXJzW2ldfTogJHtyZXN1bHQucmVhc29ufWBcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8WSwgUT4oZmxhdm91cjogYW55KTogQWRhcHRlcjxZLCBRPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZsYXZvdXIgaW4gdGhpcy5fY2FjaGUpIHJldHVybiB0aGlzLl9jYWNoZVtmbGF2b3VyXTtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQWRhcHRlciByZWdpc3RlcmVkIHVuZGVyICR7Zmxhdm91cn0uYCk7XG4gIH1cblxuICBzdGF0aWMgc2V0Q3VycmVudChmbGF2b3VyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5nZXQoZmxhdm91cik7XG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYE5vIHBlcnNpc3RlbmNlIGZsYXZvdXIgJHtmbGF2b3VyfSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5fY3VycmVudCA9IGFkYXB0ZXI7XG4gIH1cblxuICBzdGF0aWMga2V5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFJlcG9zaXRvcnkua2V5KGtleSk7XG4gIH1cblxuICBzdGF0aWMgbW9kZWxzPE0gZXh0ZW5kcyBNb2RlbD4oZmxhdm91cjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKE1vZGVsIGFzIGFueSkuZ2V0UmVnaXN0cnkoKSBhcyBNb2RlbFJlZ2lzdHJ5PGFueT47XG4gICAgICBjb25zdCBjYWNoZSA9IChcbiAgICAgICAgcmVnaXN0cnkgYXMgdW5rbm93biBhcyB7IGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvbnN0cnVjdG9yPGFueT4+IH1cbiAgICAgICkuY2FjaGU7XG4gICAgICBjb25zdCBtYW5hZ2VkTW9kZWxzOiBNb2RlbENvbnN0cnVjdG9yPGFueT5bXSA9IE9iamVjdC52YWx1ZXMoY2FjaGUpXG4gICAgICAgIC5tYXAoKG06IE1vZGVsQ29uc3RydWN0b3I8TT4pID0+IHtcbiAgICAgICAgICBsZXQgZiA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksXG4gICAgICAgICAgICBtIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGYgJiYgZiA9PT0gZmxhdm91cikgcmV0dXJuIG07XG4gICAgICAgICAgaWYgKCFmKSB7XG4gICAgICAgICAgICBjb25zdCByZXBvID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLlJFUE9TSVRPUlkpLFxuICAgICAgICAgICAgICBtIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghcmVwbykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwobSk7XG5cbiAgICAgICAgICAgIGYgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksXG4gICAgICAgICAgICAgIHJlcG9zaXRvcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKG0pID0+ICEhbSk7XG4gICAgICByZXR1cm4gbWFuYWdlZE1vZGVscztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { BaseError } from "@decaf-ts/db-decorators";
1
+ import { BaseError, Context, OperationKeys } from "@decaf-ts/db-decorators";
2
2
  import { Observer } from "../interfaces/Observer";
3
3
  import { Constructor, Model, ModelConstructor } from "@decaf-ts/decorator-validation";
4
4
  import { SequenceOptions } from "../interfaces/SequenceOptions";
@@ -9,6 +9,7 @@ import { Statement } from "../query/Statement";
9
9
  import { ClauseFactory } from "../query/ClauseFactory";
10
10
  import { Condition } from "../query/Condition";
11
11
  import { Sequence } from "./Sequence";
12
+ import { User } from "../model/User";
12
13
  /**
13
14
  * @summary Abstract Decaf-ts Persistence Adapter Class
14
15
  * @description Offers the base implementation for all Adapter Classes
@@ -39,9 +40,11 @@ export declare abstract class Adapter<Y, Q> implements RawExecutor<Q>, Observabl
39
40
  protected isReserved(attr: string): boolean;
40
41
  protected abstract parseError(err: Error): BaseError;
41
42
  abstract initialize(...args: any[]): Promise<void>;
42
- abstract index<M extends Model>(...models: M[]): Promise<any>;
43
+ abstract index<M extends Model>(...models: Constructor<M>[]): Promise<any>;
43
44
  abstract Sequence(options: SequenceOptions): Promise<Sequence>;
44
45
  timestamp(): Promise<Date>;
46
+ abstract user(): Promise<User>;
47
+ context<M extends Model>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, model: Constructor<M>): Promise<Context<M>>;
45
48
  prepare<M extends Model>(model: M, pk: string | number): {
46
49
  record: Record<string, any>;
47
50
  id: string;
@@ -55,7 +58,7 @@ export declare abstract class Adapter<Y, Q> implements RawExecutor<Q>, Observabl
55
58
  updateAll(tableName: string, id: string[] | number[], model: Record<string, any>[], ...args: any[]): Promise<Record<string, any>[]>;
56
59
  abstract delete(tableName: string, id: string | number | bigint, ...args: any[]): Promise<Record<string, any>>;
57
60
  deleteAll(tableName: string, id: (string | number | bigint)[], ...args: any[]): Promise<Record<string, any>[]>;
58
- abstract raw<R>(rawInput: Q, ...args: any[]): Promise<R>;
61
+ abstract raw<R>(rawInput: Q, process: boolean, ...args: any[]): Promise<R>;
59
62
  /**
60
63
  * @summary Registers an {@link Observer}
61
64
  * @param {Observer} observer
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Sequence = void 0;
4
- const identity_1 = require("../identity/index.cjs");
4
+ const utils_1 = require("../identity/utils.cjs");
5
5
  class Sequence {
6
6
  constructor(options) {
7
7
  this.options = options;
8
8
  }
9
9
  static pk(model) {
10
- return (0, identity_1.sequenceNameForModel)(model, "pk");
10
+ return (0, utils_1.sequenceNameForModel)(model, "pk");
11
11
  }
12
12
  }
13
13
  exports.Sequence = Sequence;
14
14
 
15
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9TZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSwwQ0FBbUQ7QUFHbkQsTUFBc0IsUUFBUTtJQUM1QixZQUF5QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtJQUFHLENBQUM7SUFXckUsTUFBTSxDQUFDLEVBQUUsQ0FBa0IsS0FBeUI7UUFDbEQsT0FBTyxJQUFBLCtCQUFvQixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFmRCw0QkFlQyIsImZpbGUiOiJwZXJzaXN0ZW5jZS9TZXF1ZW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgU2VxdWVuY2VcbiAqXG4gKiBAaW50ZXJmYWNlIFNlcXVlbmNlXG4gKlxuICogQGNhdGVnb3J5IFNlcXVlbmNlc1xuICovXG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBzZXF1ZW5jZU5hbWVGb3JNb2RlbCB9IGZyb20gXCIuLi9pZGVudGl0eVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGdlbmVyYXRlcyB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgc2VxdWVuY2VcbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgYWJzdHJhY3QgbmV4dCgpOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD47XG4gIGFic3RyYWN0IGN1cnJlbnQoKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+O1xuICBhYnN0cmFjdCByYW5nZShjb3VudDogbnVtYmVyKTogUHJvbWlzZTwobnVtYmVyIHwgc3RyaW5nIHwgYmlnaW50KVtdPjtcblxuICBzdGF0aWMgcGs8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSB8IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgcmV0dXJuIHNlcXVlbmNlTmFtZUZvck1vZGVsKG1vZGVsLCBcInBrXCIpO1xuICB9XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9TZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSw2Q0FBeUQ7QUFHekQsTUFBc0IsUUFBUTtJQUM1QixZQUF5QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtJQUFHLENBQUM7SUFXckUsTUFBTSxDQUFDLEVBQUUsQ0FBa0IsS0FBeUI7UUFDbEQsT0FBTyxJQUFBLDRCQUFvQixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFmRCw0QkFlQyIsImZpbGUiOiJwZXJzaXN0ZW5jZS9TZXF1ZW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgU2VxdWVuY2VcbiAqXG4gKiBAaW50ZXJmYWNlIFNlcXVlbmNlXG4gKlxuICogQGNhdGVnb3J5IFNlcXVlbmNlc1xuICovXG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBzZXF1ZW5jZU5hbWVGb3JNb2RlbCB9IGZyb20gXCIuLi9pZGVudGl0eS91dGlsc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2VPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VxdWVuY2VPcHRpb25zXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXF1ZW5jZSB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogU2VxdWVuY2VPcHRpb25zKSB7fVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBnZW5lcmF0ZXMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIHNlcXVlbmNlXG4gICAqXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGFic3RyYWN0IG5leHQoKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+O1xuICBhYnN0cmFjdCBjdXJyZW50KCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PjtcbiAgYWJzdHJhY3QgcmFuZ2UoY291bnQ6IG51bWJlcik6IFByb21pc2U8KG51bWJlciB8IHN0cmluZyB8IGJpZ2ludClbXT47XG5cbiAgc3RhdGljIHBrPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPikge1xuICAgIHJldHVybiBzZXF1ZW5jZU5hbWVGb3JNb2RlbChtb2RlbCwgXCJwa1wiKTtcbiAgfVxufVxuIl19
@@ -6,7 +6,7 @@
6
6
  * @category Sequences
7
7
  */
8
8
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
9
- import { SequenceOptions } from "../interfaces";
9
+ import { SequenceOptions } from "../interfaces/SequenceOptions";
10
10
  export declare abstract class Sequence {
11
11
  protected readonly options: SequenceOptions;
12
12
  protected constructor(options: SequenceOptions);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PersistenceKeys = void 0;
3
+ exports.Roles = exports.PersistenceKeys = void 0;
4
4
  var PersistenceKeys;
5
5
  (function (PersistenceKeys) {
6
6
  PersistenceKeys["INDEX"] = "index";
@@ -10,12 +10,22 @@ var PersistenceKeys;
10
10
  PersistenceKeys["TABLE"] = "table";
11
11
  PersistenceKeys["COLUMN"] = "column";
12
12
  PersistenceKeys["METADATA"] = "__metadata";
13
+ PersistenceKeys["RELATIONS"] = "__relations";
13
14
  PersistenceKeys["CLAUSE_SEQUENCE"] = "clause-sequence";
15
+ // Ownership
16
+ PersistenceKeys["CREATED_BY"] = "ownership.created-by";
17
+ PersistenceKeys["UPDATED_BY"] = "ownership.updated-by";
14
18
  // Relations
15
- PersistenceKeys["ONE_TO_ONE"] = "one-to-one";
16
- PersistenceKeys["ONE_TO_MANY"] = "one-to-many";
17
- PersistenceKeys["MANY_TO_ONE"] = "many-to-one";
19
+ PersistenceKeys["ONE_TO_ONE"] = "relations.one-to-one";
20
+ PersistenceKeys["ONE_TO_MANY"] = "relations.one-to-many";
21
+ PersistenceKeys["MANY_TO_ONE"] = "relations.many-to-one";
18
22
  PersistenceKeys["POPULATE"] = "populate";
19
23
  })(PersistenceKeys || (exports.PersistenceKeys = PersistenceKeys = {}));
24
+ var Roles;
25
+ (function (Roles) {
26
+ Roles["ADMIN"] = "admin";
27
+ Roles["WRITER"] = "writer";
28
+ Roles["READER"] = "reader";
29
+ })(Roles || (exports.Roles = Roles = {}));
20
30
 
21
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxlQWNYO0FBZEQsV0FBWSxlQUFlO0lBQ3pCLGtDQUFlLENBQUE7SUFDZixvQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBbUIsQ0FBQTtJQUNuQiwyREFBd0MsQ0FBQTtJQUN4QyxrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsMENBQXVCLENBQUE7SUFDdkIsc0RBQW1DLENBQUE7SUFDbkMsWUFBWTtJQUNaLDRDQUF5QixDQUFBO0lBQ3pCLDhDQUEyQixDQUFBO0lBQzNCLDhDQUEyQixDQUFBO0lBQzNCLHdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFkVyxlQUFlLCtCQUFmLGVBQWUsUUFjMUIiLCJmaWxlIjoicGVyc2lzdGVuY2UvY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gUGVyc2lzdGVuY2VLZXlzIHtcbiAgSU5ERVggPSBcImluZGV4XCIsXG4gIFVOSVFVRSA9IFwidW5pcXVlXCIsXG4gIEFEQVBURVIgPSBcImFkYXB0ZXJcIixcbiAgSU5KRUNUQUJMRSA9IFwiZGVjYWZfezB9X2FkYXB0ZXJfZm9yX3sxfVwiLFxuICBUQUJMRSA9IFwidGFibGVcIixcbiAgQ09MVU1OID0gXCJjb2x1bW5cIixcbiAgTUVUQURBVEEgPSBcIl9fbWV0YWRhdGFcIixcbiAgQ0xBVVNFX1NFUVVFTkNFID0gXCJjbGF1c2Utc2VxdWVuY2VcIixcbiAgLy8gUmVsYXRpb25zXG4gIE9ORV9UT19PTkUgPSBcIm9uZS10by1vbmVcIixcbiAgT05FX1RPX01BTlkgPSBcIm9uZS10by1tYW55XCIsXG4gIE1BTllfVE9fT05FID0gXCJtYW55LXRvLW9uZVwiLFxuICBQT1BVTEFURSA9IFwicG9wdWxhdGVcIixcbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wZXJzaXN0ZW5jZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxlQWtCWDtBQWxCRCxXQUFZLGVBQWU7SUFDekIsa0NBQWUsQ0FBQTtJQUNmLG9DQUFpQixDQUFBO0lBQ2pCLHNDQUFtQixDQUFBO0lBQ25CLDJEQUF3QyxDQUFBO0lBQ3hDLGtDQUFlLENBQUE7SUFDZixvQ0FBaUIsQ0FBQTtJQUNqQiwwQ0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBeUIsQ0FBQTtJQUN6QixzREFBbUMsQ0FBQTtJQUNuQyxZQUFZO0lBQ1osc0RBQW1DLENBQUE7SUFDbkMsc0RBQW1DLENBQUE7SUFDbkMsWUFBWTtJQUNaLHNEQUFtQyxDQUFBO0lBQ25DLHdEQUFxQyxDQUFBO0lBQ3JDLHdEQUFxQyxDQUFBO0lBQ3JDLHdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFsQlcsZUFBZSwrQkFBZixlQUFlLFFBa0IxQjtBQUVELElBQVksS0FJWDtBQUpELFdBQVksS0FBSztJQUNmLHdCQUFlLENBQUE7SUFDZiwwQkFBaUIsQ0FBQTtJQUNqQiwwQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsS0FBSyxxQkFBTCxLQUFLLFFBSWhCIiwiZmlsZSI6InBlcnNpc3RlbmNlL2NvbnN0YW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFBlcnNpc3RlbmNlS2V5cyB7XG4gIElOREVYID0gXCJpbmRleFwiLFxuICBVTklRVUUgPSBcInVuaXF1ZVwiLFxuICBBREFQVEVSID0gXCJhZGFwdGVyXCIsXG4gIElOSkVDVEFCTEUgPSBcImRlY2FmX3swfV9hZGFwdGVyX2Zvcl97MX1cIixcbiAgVEFCTEUgPSBcInRhYmxlXCIsXG4gIENPTFVNTiA9IFwiY29sdW1uXCIsXG4gIE1FVEFEQVRBID0gXCJfX21ldGFkYXRhXCIsXG4gIFJFTEFUSU9OUyA9IFwiX19yZWxhdGlvbnNcIixcbiAgQ0xBVVNFX1NFUVVFTkNFID0gXCJjbGF1c2Utc2VxdWVuY2VcIixcbiAgLy8gT3duZXJzaGlwXG4gIENSRUFURURfQlkgPSBcIm93bmVyc2hpcC5jcmVhdGVkLWJ5XCIsXG4gIFVQREFURURfQlkgPSBcIm93bmVyc2hpcC51cGRhdGVkLWJ5XCIsXG4gIC8vIFJlbGF0aW9uc1xuICBPTkVfVE9fT05FID0gXCJyZWxhdGlvbnMub25lLXRvLW9uZVwiLFxuICBPTkVfVE9fTUFOWSA9IFwicmVsYXRpb25zLm9uZS10by1tYW55XCIsXG4gIE1BTllfVE9fT05FID0gXCJyZWxhdGlvbnMubWFueS10by1vbmVcIixcbiAgUE9QVUxBVEUgPSBcInBvcHVsYXRlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFJvbGVzIHtcbiAgQURNSU4gPSBcImFkbWluXCIsXG4gIFdSSVRFUiA9IFwid3JpdGVyXCIsXG4gIFJFQURFUiA9IFwicmVhZGVyXCIsXG59XG4iXX0=
@@ -6,9 +6,17 @@ export declare enum PersistenceKeys {
6
6
  TABLE = "table",
7
7
  COLUMN = "column",
8
8
  METADATA = "__metadata",
9
+ RELATIONS = "__relations",
9
10
  CLAUSE_SEQUENCE = "clause-sequence",
10
- ONE_TO_ONE = "one-to-one",
11
- ONE_TO_MANY = "one-to-many",
12
- MANY_TO_ONE = "many-to-one",
11
+ CREATED_BY = "ownership.created-by",
12
+ UPDATED_BY = "ownership.updated-by",
13
+ ONE_TO_ONE = "relations.one-to-one",
14
+ ONE_TO_MANY = "relations.one-to-many",
15
+ MANY_TO_ONE = "relations.many-to-one",
13
16
  POPULATE = "populate"
14
17
  }
18
+ export declare enum Roles {
19
+ ADMIN = "admin",
20
+ WRITER = "writer",
21
+ READER = "reader"
22
+ }
@@ -62,6 +62,13 @@ class Clause extends decorator_validation_1.Model {
62
62
  async execute() {
63
63
  return this.statement.execute();
64
64
  }
65
+ /**
66
+ * @inheritDoc
67
+ * @abstract
68
+ */
69
+ async paginate(size) {
70
+ return this.statement.paginate(size);
71
+ }
65
72
  toString() {
66
73
  return this.constructor.name;
67
74
  }
@@ -77,4 +84,4 @@ __decorate([
77
84
  __metadata("design:type", Statement_1.Statement)
78
85
  ], Clause.prototype, "statement", void 0);
79
86
 
80
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9DbGF1c2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EseUVBS3dDO0FBRXhDLHFDQUFzQztBQUN0QywyQ0FBdUM7QUFDdkMsMkNBQXdDO0FBRXhDO0dBQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQXNCLE1BQ3BCLFNBQVEsNEJBQUs7SUFVYixZQUFzQixNQUE0QjtRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNuQyxNQUFNLElBQUksbUJBQVUsQ0FDbEIscURBQXFELENBQ3RELENBQUM7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFJRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztDQWtCRjtBQXBFRCx3QkFvRUM7QUEvRFU7SUFEUixJQUFBLCtCQUFRLEdBQUU7O3dDQUNrQjtBQUlwQjtJQUZSLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEsMkJBQUksRUFBQyxRQUFRLENBQUM7OEJBQ00scUJBQVM7eUNBQUkiLCJmaWxlIjoicXVlcnkvQ2xhdXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIE1vZGVsQXJnLFxuICByZXF1aXJlZCxcbiAgdHlwZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuL1N0YXRlbWVudFwiO1xuXG4vKipcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IENsYXVzZSBDbGFzc1xuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBDbGF1c2UgaW4gYSB7QGxpbmsgU3RhdGVtZW50fVxuICpcbiAqIEB0eXBlZGVmIFEgUmVwcmVzZW50cyBxdWUgcXVlcnkgb2JqZWN0IHRoZSBwZXJzaXN0ZW5jZSBhZGFwdGVyIHVzZXNcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPENsYXVzZTxRPj59IFtjbGF1c2VdXG4gKlxuICogQGNsYXNzIENsYXVzZVxuICogQGV4dGVuZHMgTW9kZWxcbiAqIEBpbXBsZW1lbnRzIEV4ZWN1dG9yXG4gKiBAaW1wbGVtZW50cyBRdWVyeUJ1aWxkZXJcbiAqIEBhYnN0cmFjdFxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsYXVzZTxRPlxuICBleHRlbmRzIE1vZGVsXG4gIGltcGxlbWVudHMgRXhlY3V0b3IsIFF1ZXJ5QnVpbGRlcjxRPlxue1xuICBAcmVxdWlyZWQoKVxuICByZWFkb25seSBwcmlvcml0eSE6IFByaW9yaXR5O1xuXG4gIEByZXF1aXJlZCgpXG4gIEB0eXBlKFwib2JqZWN0XCIpXG4gIHJlYWRvbmx5IHN0YXRlbWVudCE6IFN0YXRlbWVudDxRPjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoY2xhdXNlPzogTW9kZWxBcmc8Q2xhdXNlPFE+Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wcmlvcml0eSA9IGNsYXVzZT8ucHJpb3JpdHk7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBjbGF1c2U/LnN0YXRlbWVudDtcbiAgICBpZiAoIXRoaXMuc3RhdGVtZW50IHx8ICF0aGlzLnByaW9yaXR5KVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgIFwiTWlzc2luZyBzdGF0ZW1lbnQgb3IgcHJpb3JpdHkuIFNob3VsZCBiZSBpbXBvc3NpYmxlXCIsXG4gICAgICApO1xuICAgIHRoaXMuc3RhdGVtZW50LmFkZENsYXVzZSh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0QWRhcHRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBDbGF1c2VzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRBZGFwdGVyKCkuQ2xhdXNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZXR1cm4gdGhlIHByaW9yaXR5IG9mIHRoZSBjbGF1c2VcbiAgICogQHNlZSBQcmlvcml0eVxuICAgKi9cbiAgZ2V0UHJpb3JpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmlvcml0eSBhcyBudW1iZXI7XG4gIH1cblxuICBhYnN0cmFjdCBidWlsZChwcmV2aW91czogUSk6IFE7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZTxSPigpOiBQcm9taXNlPFI+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZXhlY3V0ZSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3Ige0BsaW5rIEZyb21DbGF1c2V9XG4gIC8vICAqIEBwYXJhbSB7e3ByaW9yaXR5OiBudW1iZXIsIHN0YXRlbWVudDogU3RhdGVtZW50LCBnZXRQcmlvcml0eTogRnVuY3Rpb24sIGJ1aWxkOiBGdW5jdGlvbiwgcHJvY2VzczogRnVuY3Rpb259fSBjbGF1c2VcbiAgLy8gICovXG4gIC8vIHN0YXRpYyBpc0NsYXVzZShjbGF1c2U6IFBhcnRpYWw8Q2xhdXNlPGFueT4+KSB7XG4gIC8vICAgcmV0dXJuIGNsYXVzZSBpbnN0YW5jZW9mIENsYXVzZTtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgY2xhdXNlLmNvbnN0cnVjdG9yICYmXG4gIC8vICAgICBjbGF1c2UuY29uc3RydWN0b3IubmFtZSAmJlxuICAvLyAgICAgY2xhdXNlLnByaW9yaXR5ICYmXG4gIC8vICAgICBjbGF1c2Uuc3RhdGVtZW50ICYmXG4gIC8vICAgICBjbGF1c2UuZ2V0UHJpb3JpdHkgJiZcbiAgLy8gICAgIGNsYXVzZS5idWlsZCAmJlxuICAvLyAgICAgY2xhdXNlLmV4ZWN1dGVcbiAgLy8gICApO1xuICAvLyB9XG59XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9DbGF1c2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EseUVBS3dDO0FBRXhDLHFDQUFzQztBQUN0QywyQ0FBdUM7QUFDdkMsMkNBQXdDO0FBSXhDO0dBQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQXNCLE1BQ3BCLFNBQVEsNEJBQUs7SUFVYixZQUFzQixNQUE0QjtRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNuQyxNQUFNLElBQUksbUJBQVUsQ0FDbEIscURBQXFELENBQ3RELENBQUM7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFJRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBSSxJQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7Q0FrQkY7QUEzRUQsd0JBMkVDO0FBdEVVO0lBRFIsSUFBQSwrQkFBUSxHQUFFOzt3Q0FDa0I7QUFJcEI7SUFGUixJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLDJCQUFJLEVBQUMsUUFBUSxDQUFDOzhCQUNNLHFCQUFTO3lDQUFJIiwiZmlsZSI6InF1ZXJ5L0NsYXVzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4ZWN1dG9yIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIE1vZGVsLFxuICBNb2RlbEFyZyxcbiAgcmVxdWlyZWQsXG4gIHR5cGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlciB9IGZyb20gXCIuL29wdGlvbnNcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IFByaW9yaXR5IH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiLi9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IFBhZ2luYXRhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvUGFnaW5hdGFibGVcIjtcbmltcG9ydCB7IFBhZ2luYXRvciB9IGZyb20gXCIuL1BhZ2luYXRvclwiO1xuXG4vKipcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IENsYXVzZSBDbGFzc1xuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBDbGF1c2UgaW4gYSB7QGxpbmsgU3RhdGVtZW50fVxuICpcbiAqIEB0eXBlZGVmIFEgUmVwcmVzZW50cyBxdWUgcXVlcnkgb2JqZWN0IHRoZSBwZXJzaXN0ZW5jZSBhZGFwdGVyIHVzZXNcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPENsYXVzZTxRPj59IFtjbGF1c2VdXG4gKlxuICogQGNsYXNzIENsYXVzZVxuICogQGV4dGVuZHMgTW9kZWxcbiAqIEBpbXBsZW1lbnRzIEV4ZWN1dG9yXG4gKiBAaW1wbGVtZW50cyBRdWVyeUJ1aWxkZXJcbiAqIEBhYnN0cmFjdFxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsYXVzZTxRPlxuICBleHRlbmRzIE1vZGVsXG4gIGltcGxlbWVudHMgRXhlY3V0b3IsIFBhZ2luYXRhYmxlLCBRdWVyeUJ1aWxkZXI8UT5cbntcbiAgQHJlcXVpcmVkKClcbiAgcmVhZG9ubHkgcHJpb3JpdHkhOiBQcmlvcml0eTtcblxuICBAcmVxdWlyZWQoKVxuICBAdHlwZShcIm9iamVjdFwiKVxuICByZWFkb25seSBzdGF0ZW1lbnQhOiBTdGF0ZW1lbnQ8UT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNsYXVzZT86IE1vZGVsQXJnPENsYXVzZTxRPj4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucHJpb3JpdHkgPSBjbGF1c2U/LnByaW9yaXR5O1xuICAgIHRoaXMuc3RhdGVtZW50ID0gY2xhdXNlPy5zdGF0ZW1lbnQ7XG4gICAgaWYgKCF0aGlzLnN0YXRlbWVudCB8fCAhdGhpcy5wcmlvcml0eSlcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBcIk1pc3Npbmcgc3RhdGVtZW50IG9yIHByaW9yaXR5LiBTaG91bGQgYmUgaW1wb3NzaWJsZVwiXG4gICAgICApO1xuICAgIHRoaXMuc3RhdGVtZW50LmFkZENsYXVzZSh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0QWRhcHRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBDbGF1c2VzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRBZGFwdGVyKCkuQ2xhdXNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZXR1cm4gdGhlIHByaW9yaXR5IG9mIHRoZSBjbGF1c2VcbiAgICogQHNlZSBQcmlvcml0eVxuICAgKi9cbiAgZ2V0UHJpb3JpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmlvcml0eSBhcyBudW1iZXI7XG4gIH1cblxuICBhYnN0cmFjdCBidWlsZChwcmV2aW91czogUSk6IFE7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZTxSPigpOiBQcm9taXNlPFI+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZXhlY3V0ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIGFzeW5jIHBhZ2luYXRlPFI+KHNpemU6IG51bWJlcik6IFByb21pc2U8UGFnaW5hdG9yPFIsIFE+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnBhZ2luYXRlKHNpemUpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3Ige0BsaW5rIEZyb21DbGF1c2V9XG4gIC8vICAqIEBwYXJhbSB7e3ByaW9yaXR5OiBudW1iZXIsIHN0YXRlbWVudDogU3RhdGVtZW50LCBnZXRQcmlvcml0eTogRnVuY3Rpb24sIGJ1aWxkOiBGdW5jdGlvbiwgcHJvY2VzczogRnVuY3Rpb259fSBjbGF1c2VcbiAgLy8gICovXG4gIC8vIHN0YXRpYyBpc0NsYXVzZShjbGF1c2U6IFBhcnRpYWw8Q2xhdXNlPGFueT4+KSB7XG4gIC8vICAgcmV0dXJuIGNsYXVzZSBpbnN0YW5jZW9mIENsYXVzZTtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgY2xhdXNlLmNvbnN0cnVjdG9yICYmXG4gIC8vICAgICBjbGF1c2UuY29uc3RydWN0b3IubmFtZSAmJlxuICAvLyAgICAgY2xhdXNlLnByaW9yaXR5ICYmXG4gIC8vICAgICBjbGF1c2Uuc3RhdGVtZW50ICYmXG4gIC8vICAgICBjbGF1c2UuZ2V0UHJpb3JpdHkgJiZcbiAgLy8gICAgIGNsYXVzZS5idWlsZCAmJlxuICAvLyAgICAgY2xhdXNlLmV4ZWN1dGVcbiAgLy8gICApO1xuICAvLyB9XG59XG4iXX0=
@@ -3,6 +3,8 @@ import { Model, ModelArg } from "@decaf-ts/decorator-validation";
3
3
  import { QueryBuilder } from "./options";
4
4
  import { Priority } from "./constants";
5
5
  import { Statement } from "./Statement";
6
+ import { Paginatable } from "../interfaces/Paginatable";
7
+ import { Paginator } from "./Paginator";
6
8
  /**
7
9
  */
8
10
  /**
@@ -22,7 +24,7 @@ import { Statement } from "./Statement";
22
24
  * @category Query
23
25
  * @subcategory Clauses
24
26
  */
25
- export declare abstract class Clause<Q> extends Model implements Executor, QueryBuilder<Q> {
27
+ export declare abstract class Clause<Q> extends Model implements Executor, Paginatable, QueryBuilder<Q> {
26
28
  readonly priority: Priority;
27
29
  readonly statement: Statement<Q>;
28
30
  protected constructor(clause?: ModelArg<Clause<Q>>);
@@ -39,5 +41,10 @@ export declare abstract class Clause<Q> extends Model implements Executor, Query
39
41
  * @abstract
40
42
  */
41
43
  execute<R>(): Promise<R>;
44
+ /**
45
+ * @inheritDoc
46
+ * @abstract
47
+ */
48
+ paginate<R>(size: number): Promise<Paginator<R, Q>>;
42
49
  toString(): string;
43
50
  }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Paginator = void 0;
4
+ const errors_1 = require("./errors.cjs");
5
+ class Paginator {
6
+ get current() {
7
+ return this._currentPage;
8
+ }
9
+ get total() {
10
+ return this._totalPages;
11
+ }
12
+ get count() {
13
+ return this._recordCount;
14
+ }
15
+ get statement() {
16
+ if (!this._statement)
17
+ this._statement = this.prepare(this._rawStatement);
18
+ return this._statement;
19
+ }
20
+ get adapter() {
21
+ return this.stat.getAdapter();
22
+ }
23
+ constructor(stat, size, _rawStatement) {
24
+ this.stat = stat;
25
+ this.size = size;
26
+ this._rawStatement = _rawStatement;
27
+ }
28
+ async next() {
29
+ return this.page(this.current + 1);
30
+ }
31
+ async previous() {
32
+ return this.page(this.current - 1);
33
+ }
34
+ validatePage(page) {
35
+ if (page < 1 || !Number.isInteger(page))
36
+ throw new errors_1.PagingError("page number cannot be under 1 and must be an integer");
37
+ if (page > this._totalPages)
38
+ throw new errors_1.PagingError("page number cannot be under 1 and must be an integer");
39
+ }
40
+ }
41
+ exports.Paginator = Paginator;
42
+
43
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9QYWdpbmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXVDO0FBR3ZDLE1BQXNCLFNBQVM7SUFRN0IsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWMsT0FBTztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQ1ksSUFBa0IsRUFDbkIsSUFBWSxFQUNGLGFBQWdCO1FBRnpCLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNGLGtCQUFhLEdBQWIsYUFBYSxDQUFHO0lBQ2xDLENBQUM7SUFJSixLQUFLLENBQUMsSUFBSTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWTtRQUNqQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNyQyxNQUFNLElBQUksb0JBQVcsQ0FDbkIsc0RBQXNELENBQ3ZELENBQUM7UUFDSixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVztZQUN6QixNQUFNLElBQUksb0JBQVcsQ0FDbkIsc0RBQXNELENBQ3ZELENBQUM7SUFDTixDQUFDO0NBR0Y7QUF6REQsOEJBeURDIiwiZmlsZSI6InF1ZXJ5L1BhZ2luYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2luZ0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiLi9TdGF0ZW1lbnRcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhZ2luYXRvcjxWLCBRPiB7XG4gIHByb3RlY3RlZCBfY3VycmVudFBhZ2UhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdG90YWxQYWdlcyE6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9yZWNvcmRDb3VudCE6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGxpbWl0ITogbnVtYmVyO1xuXG4gIHByaXZhdGUgX3N0YXRlbWVudD86IFE7XG5cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlO1xuICB9XG5cbiAgZ2V0IHRvdGFsKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzO1xuICB9XG5cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY29yZENvdW50O1xuICB9XG5cbiAgZ2V0IHN0YXRlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX3N0YXRlbWVudCkgdGhpcy5fc3RhdGVtZW50ID0gdGhpcy5wcmVwYXJlKHRoaXMuX3Jhd1N0YXRlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0LmdldEFkYXB0ZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc3RhdDogU3RhdGVtZW50PFE+LFxuICAgIHJlYWRvbmx5IHNpemU6IG51bWJlcixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Jhd1N0YXRlbWVudDogUVxuICApIHt9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByZXBhcmUocmF3U3RhdGVtZW50OiBRKTogUTtcblxuICBhc3luYyBuZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UodGhpcy5jdXJyZW50ICsgMSk7XG4gIH1cblxuICBhc3luYyBwcmV2aW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlKHRoaXMuY3VycmVudCAtIDEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZSA8IDEgfHwgIU51bWJlci5pc0ludGVnZXIocGFnZSkpXG4gICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgIFwicGFnZSBudW1iZXIgY2Fubm90IGJlIHVuZGVyIDEgYW5kIG11c3QgYmUgYW4gaW50ZWdlclwiXG4gICAgICApO1xuICAgIGlmIChwYWdlID4gdGhpcy5fdG90YWxQYWdlcylcbiAgICAgIHRocm93IG5ldyBQYWdpbmdFcnJvcihcbiAgICAgICAgXCJwYWdlIG51bWJlciBjYW5ub3QgYmUgdW5kZXIgMSBhbmQgbXVzdCBiZSBhbiBpbnRlZ2VyXCJcbiAgICAgICk7XG4gIH1cblxuICBhYnN0cmFjdCBwYWdlKHBhZ2U/OiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxWW10+O1xufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Statement } from "./Statement";
2
+ export declare abstract class Paginator<V, Q> {
3
+ protected stat: Statement<Q>;
4
+ readonly size: number;
5
+ protected readonly _rawStatement: Q;
6
+ protected _currentPage: number;
7
+ protected _totalPages: number;
8
+ protected _recordCount: number;
9
+ protected limit: number;
10
+ private _statement?;
11
+ get current(): number;
12
+ get total(): number;
13
+ get count(): number;
14
+ get statement(): Q;
15
+ protected get adapter(): import("..").Adapter<any, Q>;
16
+ protected constructor(stat: Statement<Q>, size: number, _rawStatement: Q);
17
+ protected abstract prepare(rawStatement: Q): Q;
18
+ next(): Promise<V[]>;
19
+ previous(): Promise<V[]>;
20
+ protected validatePage(page: number): void;
21
+ abstract page(page?: number, ...args: any[]): Promise<V[]>;
22
+ }
@@ -56,4 +56,4 @@ class Query {
56
56
  }
57
57
  exports.Query = Query;
58
58
 
59
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9RdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSwyQ0FBb0M7QUFHcEM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLEtBQUs7SUFDaEIsWUFBb0IsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7SUFBRyxDQUFDO0lBRWhEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUEyQixpQkFBSyxDQUFDLFdBQVc7UUFDakQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUksUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxRQUF3QjtRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUF3QjtRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBSyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQTFDRCxzQkEwQ0MiLCJmaWxlIjoicXVlcnkvUXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb3VudE9wdGlvbixcbiAgRGlzdGluY3RPcHRpb24sXG4gIEluc2VydE9wdGlvbixcbiAgTWF4T3B0aW9uLFxuICBNaW5PcHRpb24sXG4gIFNlbGVjdE9wdGlvbixcbn0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgU2VsZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi9zZWxlY3RvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IENvbnN0IH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBIZWxwZXIgQ2xhc3MgdG8gYnVpbGQgcXVlcmllc1xuICpcbiAqIEBwYXJhbSB7RGF0YWJhc2V9IGRiXG4gKlxuICogQGNsYXNzIFF1ZXJ5XG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVyeTxRLCBNIGV4dGVuZHMgTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhZGFwdGVyOiBBZGFwdGVyPGFueSwgUT4pIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBTZWxlY3QgQ2xhdXNlXG4gICAqIEBwYXJhbSB7U2VsZWN0U2VsZWN0b3J9IFtzZWxlY3Rvcl1cbiAgICovXG4gIHNlbGVjdChzZWxlY3RvcjogU2VsZWN0U2VsZWN0b3IgPSBDb25zdC5GVUxMX1JFQ09SRCk6IFNlbGVjdE9wdGlvbjxNPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5DbGF1c2VzLnNlbGVjdDxNPihzZWxlY3Rvcik7XG4gIH1cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBNaW4gQ2xhdXNlXG4gICAqIEBwYXJhbSB7U2VsZWN0U2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBtaW4oc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogTWluT3B0aW9uPE0+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKS5taW4oc2VsZWN0b3IpO1xuICB9XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgTWF4IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgbWF4KHNlbGVjdG9yOiBTZWxlY3RTZWxlY3Rvcik6IE1heE9wdGlvbjxNPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCkubWF4KHNlbGVjdG9yKTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIERpc3RpbmN0IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgZGlzdGluY3Qoc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogRGlzdGluY3RPcHRpb248TT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLmRpc3RpbmN0KHNlbGVjdG9yKTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIENvdW50IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgY291bnQoc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogQ291bnRPcHRpb248TT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLmNvdW50KHNlbGVjdG9yKTtcbiAgfVxuXG4gIGluc2VydCgpOiBJbnNlcnRPcHRpb248TT4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuQ2xhdXNlcy5pbnNlcnQ8TT4oKTtcbiAgfVxufVxuIl19
59
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9RdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSwyQ0FBb0M7QUFHcEM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLEtBQUs7SUFDaEIsWUFBb0IsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7SUFBRyxDQUFDO0lBRWhEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUEyQixpQkFBSyxDQUFDLFdBQVc7UUFDakQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUksUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxRQUF3QjtRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUF5QjtRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBSyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQTFDRCxzQkEwQ0MiLCJmaWxlIjoicXVlcnkvUXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb3VudE9wdGlvbixcbiAgRGlzdGluY3RPcHRpb24sXG4gIEluc2VydE9wdGlvbixcbiAgTWF4T3B0aW9uLFxuICBNaW5PcHRpb24sXG4gIFNlbGVjdE9wdGlvbixcbn0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgU2VsZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi9zZWxlY3RvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IENvbnN0IH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBIZWxwZXIgQ2xhc3MgdG8gYnVpbGQgcXVlcmllc1xuICpcbiAqIEBwYXJhbSB7RGF0YWJhc2V9IGRiXG4gKlxuICogQGNsYXNzIFF1ZXJ5XG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVyeTxRLCBNIGV4dGVuZHMgTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhZGFwdGVyOiBBZGFwdGVyPGFueSwgUT4pIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBTZWxlY3QgQ2xhdXNlXG4gICAqIEBwYXJhbSB7U2VsZWN0U2VsZWN0b3J9IFtzZWxlY3Rvcl1cbiAgICovXG4gIHNlbGVjdChzZWxlY3RvcjogU2VsZWN0U2VsZWN0b3IgPSBDb25zdC5GVUxMX1JFQ09SRCk6IFNlbGVjdE9wdGlvbjxNPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5DbGF1c2VzLnNlbGVjdDxNPihzZWxlY3Rvcik7XG4gIH1cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBNaW4gQ2xhdXNlXG4gICAqIEBwYXJhbSB7U2VsZWN0U2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBtaW4oc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogTWluT3B0aW9uPE0+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKS5taW4oc2VsZWN0b3IpO1xuICB9XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgTWF4IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgbWF4KHNlbGVjdG9yOiBTZWxlY3RTZWxlY3Rvcik6IE1heE9wdGlvbjxNPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCkubWF4KHNlbGVjdG9yKTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIERpc3RpbmN0IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgZGlzdGluY3Qoc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogRGlzdGluY3RPcHRpb248TT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLmRpc3RpbmN0KHNlbGVjdG9yKTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIENvdW50IENsYXVzZVxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgY291bnQoc2VsZWN0b3I/OiBTZWxlY3RTZWxlY3Rvcik6IENvdW50T3B0aW9uPE0+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKS5jb3VudChzZWxlY3Rvcik7XG4gIH1cblxuICBpbnNlcnQoKTogSW5zZXJ0T3B0aW9uPE0+IHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLkNsYXVzZXMuaW5zZXJ0PE0+KCk7XG4gIH1cbn1cbiJdfQ==
@@ -38,6 +38,6 @@ export declare class Query<Q, M extends Model> {
38
38
  * @summary Creates a Count Clause
39
39
  * @param {SelectSelector} selector
40
40
  */
41
- count(selector: SelectSelector): CountOption<M>;
41
+ count(selector?: SelectSelector): CountOption<M>;
42
42
  insert(): InsertOption<M>;
43
43
  }
@@ -76,7 +76,7 @@ class Statement extends decorator_validation_1.Model {
76
76
  }
77
77
  }
78
78
  async raw(rawInput, ...args) {
79
- const results = await this.adapter.raw(rawInput, ...args);
79
+ const results = await this.adapter.raw(rawInput, true, ...args);
80
80
  if (!this.fullRecord)
81
81
  return results;
82
82
  if (!this.target)
@@ -131,6 +131,11 @@ class Statement extends decorator_validation_1.Model {
131
131
  throw new errors_1.QueryError((0, decorator_validation_1.sf)("Output class already defined to {0}", this.target.name));
132
132
  this.target = clazz;
133
133
  }
134
+ getTarget() {
135
+ if (!this.target)
136
+ throw new db_decorators_1.InternalError("No target defined for statement");
137
+ return this.target;
138
+ }
134
139
  setFullRecord() {
135
140
  this.fullRecord = true;
136
141
  }
@@ -159,4 +164,4 @@ __decorate([
159
164
  __metadata("design:type", String)
160
165
  ], Statement.prototype, "type", void 0);
161
166
 
162
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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SUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSwyQkFBSSxFQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7OEJBQ0UscUJBQU87MENBQVM7QUFFekI7SUFEVCxJQUFBLCtCQUFRLEdBQUU7O3lDQUNxQztBQUt0QztJQURULElBQUEsK0JBQVEsR0FBRTs7dUNBQ3lCIiwiZmlsZSI6InF1ZXJ5L1N0YXRlbWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBtaW5sZW5ndGgsXG4gIE1vZGVsLFxuICBNb2RlbEVycm9yRGVmaW5pdGlvbixcbiAgcmVxdWlyZWQsXG4gIHR5cGUsXG4gIHNmLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBFeGVjdXRvciwgUmF3RXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgTWFuZGF0b3J5UHJpb3JpdGllcywgU3RhdGVtZW50VHlwZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgQ2xhdXNlIH0gZnJvbSBcIi4vQ2xhdXNlXCI7XG5pbXBvcnQgeyBjbGF1c2VTZXF1ZW5jZSB9IGZyb20gXCIuLi92YWxpZGF0b3JzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFN0YXRlbWVudCBDbGFzc1xuICogQGRlc2NyaXB0aW9uIGhvbGRzIGFsbCB0aGUgY2xhdXNlcyB1bnRpbCB0aGV5IGNhbiBiZSBwcm9jZXNzZWRcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnfSBbc3RhdGVtZW50XVxuICpcbiAqIEBjbGFzcyBTdGF0ZW1lbnRcbiAqIEBleHRlbmRzIE1vZGVsXG4gKiBAaW1wbGVtZW50cyBFeGVjdXRvclxuICogQGltcGxlbWVudHMgUmF3RXhlY3V0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXRlbWVudDxRPlxuICBleHRlbmRzIE1vZGVsXG4gIGltcGxlbWVudHMgRXhlY3V0b3IsIFJhd0V4ZWN1dG9yPFE+XG57XG4gIEByZXF1aXJlZCgpXG4gIEBtaW5sZW5ndGgoTWFuZGF0b3J5UHJpb3JpdGllcy5sZW5ndGgpXG4gIEBjbGF1c2VTZXF1ZW5jZSgpXG4gIHByb3RlY3RlZCBjbGF1c2VzPzogQ2xhdXNlPGFueT5bXSA9IHVuZGVmaW5lZDtcbiAgQHJlcXVpcmVkKClcbiAgQHR5cGUoW1wib2JqZWN0XCJdKVxuICBwcm90ZWN0ZWQgYWRhcHRlcjogQWRhcHRlcjxhbnksIFE+O1xuICBAcmVxdWlyZWQoKVxuICBwcm90ZWN0ZWQgdGFyZ2V0PzogQ29uc3RydWN0b3I8YW55PiA9IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgZnVsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEByZXF1aXJlZCgpXG4gIHByb3RlY3RlZCB0eXBlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYjogQWRhcHRlcjxhbnksIFE+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBkYjtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZCgpOiBRIHtcbiAgICBpZiAoIXRoaXMuY2xhdXNlcylcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKHNmKFwiRmFpbGVkIHRvIGJ1aWxkIFN0YXRlbWVudDpcXG57MH1cIiwgXCJObyBDbGF1c2VzXCIpKTtcbiAgICB0aGlzLmNsYXVzZXMuc29ydCgoYzEsIGMyKSA9PiB7XG4gICAgICByZXR1cm4gYzEuZ2V0UHJpb3JpdHkoKSAtIGMyLmdldFByaW9yaXR5KCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmhhc0Vycm9ycygpO1xuICAgIGlmIChlcnJvcnMpXG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgc2YoXCJQb29ybHkgYnVpbHQgc3RhdGVtZW50OiB7MH1cIiwgZXJyb3JzLnRvU3RyaW5nKCkpXG4gICAgICApO1xuXG4gICAgbGV0IHF1ZXJ5OiBRO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGZ1bmN0aW9uIChcbiAgICAgICAgY2xhdXNlczogQ2xhdXNlPGFueT5bXSxcbiAgICAgICAgcHJldmlvdXM6IGFueSA9IHt9XG4gICAgICApOiBRIHtcbiAgICAgICAgY29uc3QgYyA9IGNsYXVzZXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFjKSByZXR1cm4gcHJldmlvdXMgYXMgUTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMuYnVpbGQocHJldmlvdXMpO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IoY2xhdXNlcywgcmVzdWx0cyBhcyBhbnkpO1xuICAgICAgfTtcblxuICAgICAgcXVlcnkgPSBpdGVyYXRvcihuZXcgQXJyYXkoLi4uKHRoaXMuY2xhdXNlcyBhcyBDbGF1c2U8UT5bXSkpKSBhcyBRO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBhc3luYyBleGVjdXRlPFk+KCk6IFByb21pc2U8WT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeTogUSA9IHRoaXMuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0aGlzLnJhdyhxdWVyeSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByYXc8Uj4ocmF3SW5wdXQ6IFEsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuYWRhcHRlci5yYXc8Uj4ocmF3SW5wdXQsIC4uLmFyZ3MpO1xuICAgIGlmICghdGhpcy5mdWxsUmVjb3JkKSByZXR1cm4gcmVzdWx0cztcbiAgICBpZiAoIXRoaXMudGFyZ2V0KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiTm8gdGFyZ2V0IGRlZmluZWQgaW4gc3RhdGVtZW50LiBzaG91bGQgbmV2ZXIgaGFwcGVuXCJcbiAgICAgICk7XG5cbiAgICBjb25zdCBwa0F0dHIgPSBmaW5kUHJpbWFyeUtleShuZXcgdGhpcy50YXJnZXQoKSBhcyBhbnkpLmlkO1xuXG4gICAgY29uc3QgcHJvY2Vzc29yID0gZnVuY3Rpb24gcmVjb3JkUHJvY2Vzc29yKHRoaXM6IFN0YXRlbWVudDxRPiwgcjogYW55KSB7XG4gICAgICBjb25zdCBpZCA9IHJbcGtBdHRyXTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KFxuICAgICAgICByLFxuICAgICAgICB0aGlzLnRhcmdldCBhcyBDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgICAgICBwa0F0dHIsXG4gICAgICAgIGlkXG4gICAgICApIGFzIGFueTtcbiAgICB9LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzKSkgcmV0dXJuIHJlc3VsdHMubWFwKHByb2Nlc3NvcikgYXMgUjtcbiAgICByZXR1cm4gcHJvY2Vzc29yKHJlc3VsdHMpIGFzIFI7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIGhhc0Vycm9ycyguLi5leGNlcHRpb25zOiBzdHJpbmdbXSk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJvcnMgPSBzdXBlci5oYXNFcnJvcnMoLi4uZXhjZXB0aW9ucyk7XG4gICAgaWYgKGVycm9ycykgcmV0dXJuIGVycm9ycztcblxuICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLmNsYXVzZXMpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY2xhdXNlc1tpIGFzIGFueV0uaGFzRXJyb3JzKCk7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBBZGRzIGEgY2xhdXNlIHRvIHRoZSBTdGF0ZW1lbnRcbiAgICogQHBhcmFtIHtDbGF1c2V9IGNsYXVzZVxuICAgKi9cbiAgYWRkQ2xhdXNlKGNsYXVzZTogQ2xhdXNlPFE+KSB7XG4gICAgaWYgKCF0aGlzLmNsYXVzZXMpIHRoaXMuY2xhdXNlcyA9IFtdO1xuXG4gICAgY29uc3QgcHJpb3JpdHkgPSBjbGF1c2UuZ2V0UHJpb3JpdHkoKTtcbiAgICBjb25zdCBjdXJyZW50UHJpb3JpdHkgPSB0aGlzLmNsYXVzZXNcbiAgICAgIC5tYXAoKGMsIGkpID0+ICh7IGluZGV4OiBpLCBjbGF1c2U6IGMgfSkpXG4gICAgICAuZmluZCgoYykgPT4gYy5jbGF1c2UuZ2V0UHJpb3JpdHkoKSA9PT0gcHJpb3JpdHkpO1xuICAgIGlmIChjdXJyZW50UHJpb3JpdHkpIHtcbiAgICAgIHRoaXMuY2xhdXNlc1tjdXJyZW50UHJpb3JpdHkuaW5kZXhdID0gY2xhdXNlO1xuICAgIH1cbiAgICB0aGlzLmNsYXVzZXMucHVzaChjbGF1c2UpO1xuICB9XG5cbiAgZ2V0QWRhcHRlcigpOiBBZGFwdGVyPGFueSwgUT4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgb3V0cHV0IGNsYXNzICh3aGVuIGV4aXN0aW5nKVxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yfSBjbGF6elxuICAgKi9cbiAgc2V0VGFyZ2V0KGNsYXp6OiBDb25zdHJ1Y3Rvcjxhbnk+KSB7XG4gICAgaWYgKHRoaXMudGFyZ2V0KVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgIHNmKFwiT3V0cHV0IGNsYXNzIGFscmVhZHkgZGVmaW5lZCB0byB7MH1cIiwgdGhpcy50YXJnZXQhLm5hbWUpXG4gICAgICApO1xuICAgIHRoaXMudGFyZ2V0ID0gY2xheno7XG4gIH1cblxuICBzZXRGdWxsUmVjb3JkKCkge1xuICAgIHRoaXMuZnVsbFJlY29yZCA9IHRydWU7XG4gIH1cblxuICBzZXRNb2RlKHR5cGU6IFN0YXRlbWVudFR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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LENBQUM7Q0FDRjtBQTdKRCw4QkE2SkM7QUF0Slc7SUFIVCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLGdDQUFTLEVBQUMsK0JBQW1CLENBQUMsTUFBTSxDQUFDO0lBQ3JDLElBQUEsMkJBQWMsR0FBRTs7MENBQzZCO0FBR3BDO0lBRlQsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSwyQkFBSSxFQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7OEJBQ0UscUJBQU87MENBQVM7QUFFekI7SUFEVCxJQUFBLCtCQUFRLEdBQUU7O3lDQUNxQztBQUt0QztJQURULElBQUEsK0JBQVEsR0FBRTs7dUNBQ3lCIiwiZmlsZSI6InF1ZXJ5L1N0YXRlbWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBtaW5sZW5ndGgsXG4gIE1vZGVsLFxuICBNb2RlbEVycm9yRGVmaW5pdGlvbixcbiAgcmVxdWlyZWQsXG4gIHR5cGUsXG4gIHNmLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBFeGVjdXRvciwgUmF3RXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgTWFuZGF0b3J5UHJpb3JpdGllcywgU3RhdGVtZW50VHlwZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgQ2xhdXNlIH0gZnJvbSBcIi4vQ2xhdXNlXCI7XG5pbXBvcnQgeyBjbGF1c2VTZXF1ZW5jZSB9IGZyb20gXCIuLi92YWxpZGF0b3JzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUGFnaW5hdG9yIH0gZnJvbSBcIi4vUGFnaW5hdG9yXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU3RhdGVtZW50IENsYXNzXG4gKiBAZGVzY3JpcHRpb24gaG9sZHMgYWxsIHRoZSBjbGF1c2VzIHVudGlsIHRoZXkgY2FuIGJlIHByb2Nlc3NlZFxuICpcbiAqIEBwYXJhbSB7TW9kZWxBcmd9IFtzdGF0ZW1lbnRdXG4gKlxuICogQGNsYXNzIFN0YXRlbWVudFxuICogQGV4dGVuZHMgTW9kZWxcbiAqIEBpbXBsZW1lbnRzIEV4ZWN1dG9yXG4gKiBAaW1wbGVtZW50cyBSYXdFeGVjdXRvclxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50PFE+XG4gIGV4dGVuZHMgTW9kZWxcbiAgaW1wbGVtZW50cyBFeGVjdXRvciwgUmF3RXhlY3V0b3I8UT5cbntcbiAgQHJlcXVpcmVkKClcbiAgQG1pbmxlbmd0aChNYW5kYXRvcnlQcmlvcml0aWVzLmxlbmd0aClcbiAgQGNsYXVzZVNlcXVlbmNlKClcbiAgcHJvdGVjdGVkIGNsYXVzZXM/OiBDbGF1c2U8YW55PltdID0gdW5kZWZpbmVkO1xuICBAcmVxdWlyZWQoKVxuICBAdHlwZShbXCJvYmplY3RcIl0pXG4gIHByb3RlY3RlZCBhZGFwdGVyOiBBZGFwdGVyPGFueSwgUT47XG4gIEByZXF1aXJlZCgpXG4gIHByb3RlY3RlZCB0YXJnZXQ/OiBDb25zdHJ1Y3Rvcjxhbnk+ID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBmdWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQHJlcXVpcmVkKClcbiAgcHJvdGVjdGVkIHR5cGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRiOiBBZGFwdGVyPGFueSwgUT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRhcHRlciA9IGRiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkKCk6IFEge1xuICAgIGlmICghdGhpcy5jbGF1c2VzKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3Ioc2YoXCJGYWlsZWQgdG8gYnVpbGQgU3RhdGVtZW50OlxcbnswfVwiLCBcIk5vIENsYXVzZXNcIikpO1xuICAgIHRoaXMuY2xhdXNlcy5zb3J0KChjMSwgYzIpID0+IHtcbiAgICAgIHJldHVybiBjMS5nZXRQcmlvcml0eSgpIC0gYzIuZ2V0UHJpb3JpdHkoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaGFzRXJyb3JzKCk7XG4gICAgaWYgKGVycm9ycylcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICBzZihcIlBvb3JseSBidWlsdCBzdGF0ZW1lbnQ6IHswfVwiLCBlcnJvcnMudG9TdHJpbmcoKSlcbiAgICAgICk7XG5cbiAgICBsZXQgcXVlcnk6IFE7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gZnVuY3Rpb24gKFxuICAgICAgICBjbGF1c2VzOiBDbGF1c2U8YW55PltdLFxuICAgICAgICBwcmV2aW91czogYW55ID0ge31cbiAgICAgICk6IFEge1xuICAgICAgICBjb25zdCBjID0gY2xhdXNlcy5zaGlmdCgpO1xuICAgICAgICBpZiAoIWMpIHJldHVybiBwcmV2aW91cyBhcyBRO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5idWlsZChwcmV2aW91cyk7XG4gICAgICAgIHJldHVybiBpdGVyYXRvcihjbGF1c2VzLCByZXN1bHRzIGFzIGFueSk7XG4gICAgICB9O1xuXG4gICAgICBxdWVyeSA9IGl0ZXJhdG9yKG5ldyBBcnJheSguLi4odGhpcy5jbGF1c2VzIGFzIENsYXVzZTxRPltdKSkpIGFzIFE7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGU8WT4oKTogUHJvbWlzZTxZPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRID0gdGhpcy5idWlsZCgpO1xuICAgICAgcmV0dXJuIHRoaXMucmF3KHF1ZXJ5KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgYWJzdHJhY3QgcGFnaW5hdGU8WT4oc2l6ZTogbnVtYmVyKTogUHJvbWlzZTxQYWdpbmF0b3I8WSwgUT4+O1xuXG4gIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogUSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdzxSPihyYXdJbnB1dCwgdHJ1ZSwgLi4uYXJncyk7XG4gICAgaWYgKCF0aGlzLmZ1bGxSZWNvcmQpIHJldHVybiByZXN1bHRzO1xuICAgIGlmICghdGhpcy50YXJnZXQpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgXCJObyB0YXJnZXQgZGVmaW5lZCBpbiBzdGF0ZW1lbnQuIHNob3VsZCBuZXZlciBoYXBwZW5cIlxuICAgICAgKTtcblxuICAgIGNvbnN0IHBrQXR0ciA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLnRhcmdldCgpIGFzIGFueSkuaWQ7XG5cbiAgICBjb25zdCBwcm9jZXNzb3IgPSBmdW5jdGlvbiByZWNvcmRQcm9jZXNzb3IodGhpczogU3RhdGVtZW50PFE+LCByOiBhbnkpIHtcbiAgICAgIGNvbnN0IGlkID0gcltwa0F0dHJdO1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQoXG4gICAgICAgIHIsXG4gICAgICAgIHRoaXMudGFyZ2V0IGFzIENvbnN0cnVjdG9yPGFueT4sXG4gICAgICAgIHBrQXR0cixcbiAgICAgICAgaWRcbiAgICAgICkgYXMgYW55O1xuICAgIH0uYmluZCh0aGlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSByZXR1cm4gcmVzdWx0cy5tYXAocHJvY2Vzc29yKSBhcyBSO1xuICAgIHJldHVybiBwcm9jZXNzb3IocmVzdWx0cykgYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgaGFzRXJyb3JzKC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHN1cGVyLmhhc0Vycm9ycyguLi5leGNlcHRpb25zKTtcbiAgICBpZiAoZXJyb3JzKSByZXR1cm4gZXJyb3JzO1xuXG4gICAgZm9yIChjb25zdCBpIGluIHRoaXMuY2xhdXNlcykge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jbGF1c2VzW2kgYXMgYW55XS5oYXNFcnJvcnMoKTtcbiAgICAgIGlmIChlcnIpIHJldHVybiBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEFkZHMgYSBjbGF1c2UgdG8gdGhlIFN0YXRlbWVudFxuICAgKiBAcGFyYW0ge0NsYXVzZX0gY2xhdXNlXG4gICAqL1xuICBhZGRDbGF1c2UoY2xhdXNlOiBDbGF1c2U8UT4pIHtcbiAgICBpZiAoIXRoaXMuY2xhdXNlcykgdGhpcy5jbGF1c2VzID0gW107XG5cbiAgICBjb25zdCBwcmlvcml0eSA9IGNsYXVzZS5nZXRQcmlvcml0eSgpO1xuICAgIGNvbnN0IGN1cnJlbnRQcmlvcml0eSA9IHRoaXMuY2xhdXNlc1xuICAgICAgLm1hcCgoYywgaSkgPT4gKHsgaW5kZXg6IGksIGNsYXVzZTogYyB9KSlcbiAgICAgIC5maW5kKChjKSA9PiBjLmNsYXVzZS5nZXRQcmlvcml0eSgpID09PSBwcmlvcml0eSk7XG4gICAgaWYgKGN1cnJlbnRQcmlvcml0eSkge1xuICAgICAgdGhpcy5jbGF1c2VzW2N1cnJlbnRQcmlvcml0eS5pbmRleF0gPSBjbGF1c2U7XG4gICAgfVxuICAgIHRoaXMuY2xhdXNlcy5wdXNoKGNsYXVzZSk7XG4gIH1cblxuICBnZXRBZGFwdGVyKCk6IEFkYXB0ZXI8YW55LCBRPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBvdXRwdXQgY2xhc3MgKHdoZW4gZXhpc3RpbmcpXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNsYXp6XG4gICAqL1xuICBzZXRUYXJnZXQoY2xheno6IENvbnN0cnVjdG9yPGFueT4pIHtcbiAgICBpZiAodGhpcy50YXJnZXQpXG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgc2YoXCJPdXRwdXQgY2xhc3MgYWxyZWFkeSBkZWZpbmVkIHRvIHswfVwiLCB0aGlzLnRhcmdldCEubmFtZSlcbiAgICAgICk7XG4gICAgdGhpcy50YXJnZXQgPSBjbGF6ejtcbiAgfVxuXG4gIGdldFRhcmdldCgpIHtcbiAgICBpZiAoIXRoaXMudGFyZ2V0KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJObyB0YXJnZXQgZGVmaW5lZCBmb3Igc3RhdGVtZW50XCIpO1xuICAgIHJldHVybiB0aGlzLnRhcmdldDtcbiAgfVxuXG4gIHNldEZ1bGxSZWNvcmQoKSB7XG4gICAgdGhpcy5mdWxsUmVjb3JkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldE1vZGUodHlwZTogU3RhdGVtZW50VHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cbn1cbiJdfQ==
@@ -3,6 +3,7 @@ import { Executor, RawExecutor } from "../interfaces";
3
3
  import { StatementType } from "./constants";
4
4
  import { Clause } from "./Clause";
5
5
  import { Adapter } from "../persistence";
6
+ import { Paginator } from "./Paginator";
6
7
  /**
7
8
  * @summary Statement Class
8
9
  * @description holds all the clauses until they can be processed
@@ -28,6 +29,10 @@ export declare abstract class Statement<Q> extends Model implements Executor, Ra
28
29
  * @inheritDoc
29
30
  */
30
31
  execute<Y>(): Promise<Y>;
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ abstract paginate<Y>(size: number): Promise<Paginator<Y, Q>>;
31
36
  raw<R>(rawInput: Q, ...args: any[]): Promise<R>;
32
37
  /**
33
38
  * @inheritDoc
@@ -44,6 +49,7 @@ export declare abstract class Statement<Q> extends Model implements Executor, Ra
44
49
  * @param {Constructor} clazz
45
50
  */
46
51
  setTarget(clazz: Constructor<any>): void;
52
+ getTarget(): Constructor<any>;
47
53
  setFullRecord(): void;
48
54
  setMode(type: StatementType): void;
49
55
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryError = void 0;
3
+ exports.PagingError = exports.QueryError = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
5
  class QueryError extends db_decorators_1.BaseError {
6
6
  constructor(msg) {
@@ -8,5 +8,11 @@ class QueryError extends db_decorators_1.BaseError {
8
8
  }
9
9
  }
10
10
  exports.QueryError = QueryError;
11
+ class PagingError extends db_decorators_1.BaseError {
12
+ constructor(msg) {
13
+ super(PagingError.name, msg);
14
+ }
15
+ }
16
+ exports.PagingError = PagingError;
11
17
 
12
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQW9EO0FBRXBELE1BQWEsVUFBVyxTQUFRLHlCQUFTO0lBQ3ZDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBSkQsZ0NBSUMiLCJmaWxlIjoicXVlcnkvZXJyb3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKFF1ZXJ5RXJyb3IubmFtZSwgbXNnKTtcbiAgfVxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQW9EO0FBRXBELE1BQWEsVUFBVyxTQUFRLHlCQUFTO0lBQ3ZDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBSkQsZ0NBSUM7QUFFRCxNQUFhLFdBQVksU0FBUSx5QkFBUztJQUN4QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUpELGtDQUlDIiwiZmlsZSI6InF1ZXJ5L2Vycm9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihRdWVyeUVycm9yLm5hbWUsIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhZ2luZ0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKFBhZ2luZ0Vycm9yLm5hbWUsIG1zZyk7XG4gIH1cbn1cbiJdfQ==
@@ -2,3 +2,6 @@ import { BaseError } from "@decaf-ts/db-decorators";
2
2
  export declare class QueryError extends BaseError {
3
3
  constructor(msg: string | Error);
4
4
  }
5
+ export declare class PagingError extends BaseError {
6
+ constructor(msg: string | Error);
7
+ }
@@ -21,9 +21,10 @@ __exportStar(require("./Condition.cjs"), exports);
21
21
  __exportStar(require("./constants.cjs"), exports);
22
22
  __exportStar(require("./errors.cjs"), exports);
23
23
  __exportStar(require("./options.cjs"), exports);
24
+ __exportStar(require("./Paginator.cjs"), exports);
24
25
  __exportStar(require("./Query.cjs"), exports);
25
26
  __exportStar(require("./selectors.cjs"), exports);
26
27
  __exportStar(require("./Statement.cjs"), exports);
27
28
  __exportStar(require("./types.cjs"), exports);
28
29
 
29
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDJDQUF5QjtBQUN6QixrREFBZ0M7QUFDaEMsOENBQTRCO0FBQzVCLDhDQUE0QjtBQUM1QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDBDQUF3QjtBQUN4Qiw4Q0FBNEI7QUFDNUIsOENBQTRCO0FBQzVCLDBDQUF3QiIsImZpbGUiOiJxdWVyeS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NsYXVzZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NsYXVzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ2xhdXNlRmFjdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3B0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUXVlcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3RhdGVtZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
30
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDJDQUF5QjtBQUN6QixrREFBZ0M7QUFDaEMsOENBQTRCO0FBQzVCLDhDQUE0QjtBQUM1QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDhDQUE0QjtBQUM1QiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLDhDQUE0QjtBQUM1QiwwQ0FBd0IiLCJmaWxlIjoicXVlcnkvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jbGF1c2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9DbGF1c2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NsYXVzZUZhY3RvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NvbmRpdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1BhZ2luYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUXVlcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3RhdGVtZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
@@ -5,6 +5,7 @@ export * from "./Condition";
5
5
  export * from "./constants";
6
6
  export * from "./errors";
7
7
  export * from "./options";
8
+ export * from "./Paginator";
8
9
  export * from "./Query";
9
10
  export * from "./selectors";
10
11
  export * from "./Statement";