@decaf-ts/core 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +4 -4
  2. package/dist/core.bundle.min.js +1 -1
  3. package/dist/esm/core.bundle.min.esm.js +1 -1
  4. package/lib/esm/identity/decorators.d.ts +4 -10
  5. package/lib/esm/identity/decorators.js +57 -1
  6. package/lib/esm/identity/index.js +3 -1
  7. package/lib/esm/identity/utils.d.ts +2 -0
  8. package/lib/esm/identity/utils.js +6 -0
  9. package/lib/esm/index.d.ts +3 -1
  10. package/lib/esm/index.js +30 -1
  11. package/lib/esm/interfaces/Builder.js +3 -0
  12. package/lib/esm/interfaces/Executor.d.ts +3 -1
  13. package/lib/esm/interfaces/Executor.js +3 -0
  14. package/lib/esm/interfaces/Observable.js +3 -0
  15. package/lib/esm/interfaces/Observer.js +3 -0
  16. package/lib/esm/interfaces/Queriable.d.ts +6 -0
  17. package/lib/esm/interfaces/Queriable.js +3 -0
  18. package/lib/esm/interfaces/RawExecutor.d.ts +4 -3
  19. package/lib/esm/interfaces/RawExecutor.js +3 -0
  20. package/lib/esm/interfaces/Sequence.d.ts +3 -2
  21. package/lib/esm/interfaces/Sequence.js +10 -0
  22. package/lib/esm/interfaces/SequenceOptions.d.ts +9 -1
  23. package/lib/esm/interfaces/SequenceOptions.js +20 -0
  24. package/lib/esm/interfaces/index.d.ts +1 -0
  25. package/lib/esm/interfaces/index.js +10 -1
  26. package/lib/esm/model/BaseModel.d.ts +2 -3
  27. package/lib/esm/model/BaseModel.js +28 -1
  28. package/lib/esm/model/decorators.d.ts +6 -5
  29. package/lib/esm/model/decorators.js +52 -1
  30. package/lib/esm/model/index.js +4 -1
  31. package/lib/esm/persistence/Adapter.d.ts +45 -14
  32. package/lib/esm/persistence/Adapter.js +178 -1
  33. package/lib/esm/persistence/constants.d.ts +10 -1
  34. package/lib/esm/persistence/constants.js +13 -1
  35. package/lib/esm/persistence/decorators.d.ts +1 -2
  36. package/lib/esm/persistence/decorators.js +10 -1
  37. package/lib/esm/persistence/errors.d.ts +4 -0
  38. package/lib/esm/persistence/errors.js +8 -0
  39. package/lib/esm/persistence/index.d.ts +1 -1
  40. package/lib/esm/persistence/index.js +6 -1
  41. package/lib/esm/query/Clause.d.ts +43 -0
  42. package/lib/esm/query/Clause.js +76 -0
  43. package/lib/esm/query/ClauseFactory.d.ts +71 -0
  44. package/lib/esm/query/ClauseFactory.js +7 -0
  45. package/lib/esm/query/Condition.d.ts +75 -0
  46. package/lib/esm/query/Condition.js +248 -0
  47. package/lib/esm/query/Query.d.ts +43 -0
  48. package/lib/esm/query/Query.js +55 -0
  49. package/lib/esm/query/Statement.d.ts +49 -0
  50. package/lib/esm/query/Statement.js +158 -0
  51. package/lib/esm/query/clauses/FromClause.d.ts +45 -0
  52. package/lib/esm/query/clauses/FromClause.js +60 -0
  53. package/lib/esm/query/clauses/GroupByClause.d.ts +21 -0
  54. package/lib/esm/query/clauses/GroupByClause.js +20 -0
  55. package/lib/esm/query/clauses/InsertClause.d.ts +37 -0
  56. package/lib/esm/query/clauses/InsertClause.js +56 -0
  57. package/lib/esm/query/clauses/LimitClause.d.ts +29 -0
  58. package/lib/esm/query/clauses/LimitClause.js +28 -0
  59. package/lib/esm/query/clauses/OffsetClause.d.ts +21 -0
  60. package/lib/esm/query/clauses/OffsetClause.js +20 -0
  61. package/lib/esm/query/clauses/OrderByClause.d.ts +37 -0
  62. package/lib/esm/query/clauses/OrderByClause.js +40 -0
  63. package/lib/esm/query/clauses/SelectClause.d.ts +47 -0
  64. package/lib/esm/query/clauses/SelectClause.js +63 -0
  65. package/lib/esm/query/clauses/SelectorBasedClause.d.ts +25 -0
  66. package/lib/esm/query/clauses/SelectorBasedClause.js +45 -0
  67. package/lib/esm/query/clauses/ValuesClause.d.ts +21 -0
  68. package/lib/esm/query/clauses/ValuesClause.js +37 -0
  69. package/lib/esm/query/clauses/WhereClause.d.ts +46 -0
  70. package/lib/esm/query/clauses/WhereClause.js +72 -0
  71. package/lib/esm/query/clauses/index.d.ts +10 -0
  72. package/lib/esm/query/clauses/index.js +12 -0
  73. package/lib/esm/query/constants.d.ts +79 -0
  74. package/lib/esm/query/constants.js +88 -0
  75. package/lib/esm/query/errors.d.ts +4 -0
  76. package/lib/esm/query/errors.js +8 -0
  77. package/lib/esm/query/index.d.ts +11 -0
  78. package/lib/esm/query/index.js +13 -0
  79. package/lib/esm/query/options.d.ts +371 -0
  80. package/lib/esm/query/options.js +3 -0
  81. package/lib/esm/query/selectors.d.ts +38 -0
  82. package/lib/esm/query/selectors.js +3 -0
  83. package/lib/esm/query/types.d.ts +2 -0
  84. package/lib/esm/query/types.js +3 -0
  85. package/lib/esm/repository/Repository.d.ts +31 -11
  86. package/lib/esm/repository/Repository.js +275 -1
  87. package/lib/esm/repository/constants.js +31 -1
  88. package/lib/esm/repository/decorators.d.ts +2 -3
  89. package/lib/esm/repository/decorators.js +23 -1
  90. package/lib/esm/repository/errors.js +16 -1
  91. package/lib/esm/repository/index.d.ts +1 -0
  92. package/lib/esm/repository/index.js +9 -1
  93. package/lib/esm/repository/injectables.d.ts +5 -0
  94. package/lib/esm/repository/injectables.js +32 -0
  95. package/lib/esm/repository/types.d.ts +3 -0
  96. package/lib/esm/repository/types.js +3 -0
  97. package/lib/esm/repository/utils.d.ts +2 -4
  98. package/lib/esm/repository/utils.js +17 -1
  99. package/lib/esm/validators/ClauseSequenceValidator.d.ts +28 -0
  100. package/lib/esm/validators/ClauseSequenceValidator.js +96 -0
  101. package/lib/esm/validators/decorators.d.ts +10 -0
  102. package/lib/esm/validators/decorators.js +25 -0
  103. package/lib/esm/validators/index.d.ts +2 -0
  104. package/lib/esm/validators/index.js +4 -0
  105. package/lib/identity/decorators.cjs +61 -1
  106. package/lib/identity/decorators.d.ts +4 -10
  107. package/lib/identity/index.cjs +19 -1
  108. package/lib/identity/utils.cjs +9 -0
  109. package/lib/identity/utils.d.ts +2 -0
  110. package/lib/index.cjs +47 -1
  111. package/lib/index.d.ts +3 -1
  112. package/lib/interfaces/Builder.cjs +4 -1
  113. package/lib/interfaces/Executor.cjs +4 -1
  114. package/lib/interfaces/Executor.d.ts +3 -1
  115. package/lib/interfaces/Observable.cjs +4 -1
  116. package/lib/interfaces/Observer.cjs +4 -1
  117. package/lib/interfaces/Queriable.cjs +4 -0
  118. package/lib/interfaces/Queriable.d.ts +6 -0
  119. package/lib/interfaces/RawExecutor.cjs +4 -1
  120. package/lib/interfaces/RawExecutor.d.ts +4 -3
  121. package/lib/interfaces/Sequence.cjs +11 -1
  122. package/lib/interfaces/Sequence.d.ts +3 -2
  123. package/lib/interfaces/SequenceOptions.cjs +23 -1
  124. package/lib/interfaces/SequenceOptions.d.ts +9 -1
  125. package/lib/interfaces/index.cjs +26 -1
  126. package/lib/interfaces/index.d.ts +1 -0
  127. package/lib/model/BaseModel.cjs +32 -1
  128. package/lib/model/BaseModel.d.ts +2 -3
  129. package/lib/model/decorators.cjs +59 -1
  130. package/lib/model/decorators.d.ts +6 -5
  131. package/lib/model/index.cjs +20 -1
  132. package/lib/persistence/Adapter.cjs +182 -1
  133. package/lib/persistence/Adapter.d.ts +45 -14
  134. package/lib/persistence/constants.cjs +16 -1
  135. package/lib/persistence/constants.d.ts +10 -1
  136. package/lib/persistence/decorators.cjs +13 -1
  137. package/lib/persistence/decorators.d.ts +1 -2
  138. package/lib/persistence/errors.cjs +12 -0
  139. package/lib/persistence/errors.d.ts +4 -0
  140. package/lib/persistence/index.cjs +22 -1
  141. package/lib/persistence/index.d.ts +1 -1
  142. package/lib/query/Clause.cjs +80 -0
  143. package/lib/query/Clause.d.ts +43 -0
  144. package/lib/query/ClauseFactory.cjs +11 -0
  145. package/lib/query/ClauseFactory.d.ts +71 -0
  146. package/lib/query/Condition.cjs +252 -0
  147. package/lib/query/Condition.d.ts +75 -0
  148. package/lib/query/Query.cjs +59 -0
  149. package/lib/query/Query.d.ts +43 -0
  150. package/lib/query/Statement.cjs +162 -0
  151. package/lib/query/Statement.d.ts +49 -0
  152. package/lib/query/clauses/FromClause.cjs +64 -0
  153. package/lib/query/clauses/FromClause.d.ts +45 -0
  154. package/lib/query/clauses/GroupByClause.cjs +24 -0
  155. package/lib/query/clauses/GroupByClause.d.ts +21 -0
  156. package/lib/query/clauses/InsertClause.cjs +60 -0
  157. package/lib/query/clauses/InsertClause.d.ts +37 -0
  158. package/lib/query/clauses/LimitClause.cjs +32 -0
  159. package/lib/query/clauses/LimitClause.d.ts +29 -0
  160. package/lib/query/clauses/OffsetClause.cjs +24 -0
  161. package/lib/query/clauses/OffsetClause.d.ts +21 -0
  162. package/lib/query/clauses/OrderByClause.cjs +44 -0
  163. package/lib/query/clauses/OrderByClause.d.ts +37 -0
  164. package/lib/query/clauses/SelectClause.cjs +67 -0
  165. package/lib/query/clauses/SelectClause.d.ts +47 -0
  166. package/lib/query/clauses/SelectorBasedClause.cjs +49 -0
  167. package/lib/query/clauses/SelectorBasedClause.d.ts +25 -0
  168. package/lib/query/clauses/ValuesClause.cjs +41 -0
  169. package/lib/query/clauses/ValuesClause.d.ts +21 -0
  170. package/lib/query/clauses/WhereClause.cjs +76 -0
  171. package/lib/query/clauses/WhereClause.d.ts +46 -0
  172. package/lib/query/clauses/index.cjs +28 -0
  173. package/lib/query/clauses/index.d.ts +10 -0
  174. package/lib/query/constants.cjs +91 -0
  175. package/lib/query/constants.d.ts +79 -0
  176. package/lib/query/errors.cjs +12 -0
  177. package/lib/query/errors.d.ts +4 -0
  178. package/lib/query/index.cjs +29 -0
  179. package/lib/query/index.d.ts +11 -0
  180. package/lib/query/options.cjs +4 -0
  181. package/lib/query/options.d.ts +371 -0
  182. package/lib/query/selectors.cjs +4 -0
  183. package/lib/query/selectors.d.ts +38 -0
  184. package/lib/query/types.cjs +4 -0
  185. package/lib/query/types.d.ts +2 -0
  186. package/lib/repository/Repository.cjs +279 -1
  187. package/lib/repository/Repository.d.ts +31 -11
  188. package/lib/repository/constants.cjs +34 -1
  189. package/lib/repository/decorators.cjs +26 -1
  190. package/lib/repository/decorators.d.ts +2 -3
  191. package/lib/repository/errors.cjs +20 -1
  192. package/lib/repository/index.cjs +25 -1
  193. package/lib/repository/index.d.ts +1 -0
  194. package/lib/repository/injectables.cjs +36 -0
  195. package/lib/repository/injectables.d.ts +5 -0
  196. package/lib/repository/types.cjs +4 -1
  197. package/lib/repository/types.d.ts +3 -0
  198. package/lib/repository/utils.cjs +20 -1
  199. package/lib/repository/utils.d.ts +3 -0
  200. package/lib/validators/ClauseSequenceValidator.cjs +99 -0
  201. package/lib/validators/ClauseSequenceValidator.d.ts +28 -0
  202. package/lib/validators/decorators.cjs +28 -0
  203. package/lib/validators/decorators.d.ts +10 -0
  204. package/lib/validators/index.cjs +20 -0
  205. package/lib/validators/index.d.ts +2 -0
  206. package/package.json +14 -11
  207. package/lib/esm/persistence/utils.d.ts +0 -3
  208. package/lib/esm/persistence/utils.js +0 -1
  209. package/lib/persistence/utils.cjs +0 -1
  210. package/lib/persistence/utils.d.ts +0 -3
@@ -0,0 +1,79 @@
1
+ export declare enum Operator {
2
+ EQUAL = "EQUAL",
3
+ DIFFERENT = "DIFFERENT",
4
+ BIGGER = "BIGGER",
5
+ BIGGER_EQ = "BIGGER_EQ",
6
+ SMALLER = "SMALLER",
7
+ SMALLER_EQ = "SMALLER_EQ",
8
+ NOT = "NOT",
9
+ IN = "IN",
10
+ REGEXP = "REGEXP"
11
+ }
12
+ export declare enum GroupOperator {
13
+ AND = "AND",
14
+ OR = "OR"
15
+ }
16
+ export declare enum Const {
17
+ NULL = "NULL",
18
+ FULL_RECORD = "*"
19
+ }
20
+ /**
21
+ * @summary Defines execution order of Clauses in statements as defined in SQL.
22
+ *
23
+ * @description sub priorities where defined to better organize clauses within statements, eg From and Join Clauses
24
+ *
25
+ * @const Priority
26
+ *
27
+ * @category Clauses
28
+ * @subcategory Constants
29
+ */
30
+ export declare enum Priority {
31
+ /**
32
+ * @summary Defines the priority for the FROM Clause
33
+ * @description From Clause in SELECT Statements.
34
+ * Values Clause in INSERT Statements
35
+ *
36
+ * @prop FROM
37
+ */
38
+ FROM = 1,
39
+ /**
40
+ * @summary Defines the priority for the JOIN Clause
41
+ *
42
+ * @property {number} JOIN
43
+ */
44
+ JOIN = 1.1,
45
+ /**
46
+ * Where Clause
47
+ */
48
+ WHERE = 2,
49
+ /**
50
+ * Group By Clause
51
+ */
52
+ GROUP_BY = 3,
53
+ /**
54
+ * Having Clause
55
+ */
56
+ HAVING = 4,
57
+ /**
58
+ * Select Clause in SELECT Statements
59
+ * Insert Clause in INSERT Statements
60
+ */
61
+ SELECT = 5,
62
+ /**
63
+ * Order By Clause
64
+ */
65
+ ORDER_BY = 6,
66
+ /**
67
+ * Limit Clause
68
+ */
69
+ LIMIT = 7,
70
+ /**
71
+ * Offset Clause
72
+ */
73
+ OFFSET = 7.1
74
+ }
75
+ export declare const MandatoryPriorities: Priority[];
76
+ export declare enum StatementType {
77
+ QUERY = "query",
78
+ TRANSACTION = "transaction"
79
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryError = void 0;
4
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ class QueryError extends db_decorators_1.BaseError {
6
+ constructor(msg) {
7
+ super(QueryError.name, msg);
8
+ }
9
+ }
10
+ exports.QueryError = QueryError;
11
+
12
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQW9EO0FBRXBELE1BQWEsVUFBVyxTQUFRLHlCQUFTO0lBQ3ZDLFlBQVksR0FBbUI7UUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBSkQsZ0NBSUMiLCJmaWxlIjoicXVlcnkvZXJyb3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcgfCBFcnJvcikge1xuICAgIHN1cGVyKFF1ZXJ5RXJyb3IubmFtZSwgbXNnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ import { BaseError } from "@decaf-ts/db-decorators";
2
+ export declare class QueryError extends BaseError {
3
+ constructor(msg: string | Error);
4
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./clauses/index.cjs"), exports);
18
+ __exportStar(require("./Clause.cjs"), exports);
19
+ __exportStar(require("./ClauseFactory.cjs"), exports);
20
+ __exportStar(require("./Condition.cjs"), exports);
21
+ __exportStar(require("./constants.cjs"), exports);
22
+ __exportStar(require("./errors.cjs"), exports);
23
+ __exportStar(require("./options.cjs"), exports);
24
+ __exportStar(require("./Query.cjs"), exports);
25
+ __exportStar(require("./selectors.cjs"), exports);
26
+ __exportStar(require("./Statement.cjs"), exports);
27
+ __exportStar(require("./types.cjs"), exports);
28
+
29
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDJDQUF5QjtBQUN6QixrREFBZ0M7QUFDaEMsOENBQTRCO0FBQzVCLDhDQUE0QjtBQUM1QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDBDQUF3QjtBQUN4Qiw4Q0FBNEI7QUFDNUIsOENBQTRCO0FBQzVCLDBDQUF3QiIsImZpbGUiOiJxdWVyeS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NsYXVzZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NsYXVzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ2xhdXNlRmFjdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3B0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUXVlcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3RhdGVtZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
@@ -0,0 +1,11 @@
1
+ export * from "./clauses";
2
+ export * from "./Clause";
3
+ export * from "./ClauseFactory";
4
+ export * from "./Condition";
5
+ export * from "./constants";
6
+ export * from "./errors";
7
+ export * from "./options";
8
+ export * from "./Query";
9
+ export * from "./selectors";
10
+ export * from "./Statement";
11
+ export * from "./types";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoicXVlcnkvb3B0aW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqL1xuaW1wb3J0IHtcbiAgR3JvdXBCeVNlbGVjdG9yLFxuICBMaW1pdFNlbGVjdG9yLFxuICBPZmZzZXRTZWxlY3RvcixcbiAgT3JkZXJCeVNlbGVjdG9yLFxuICBTZWxlY3RTZWxlY3Rvcixcbn0gZnJvbSBcIi4vc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBFeGVjdXRvciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi9Db25kaXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTdGF0ZW1lbnQgQnVpbGRlciBpbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBmaW5hbCBtZXRob2QgdG8gYnVpbGQgdGhlIHN0YXRlbWVudFxuICpcbiAqIEB0eXBlZGVmIFEgVGhlIHF1ZXJ5IG9iamVjdCB0eXBlIHRvIGJ1aWxkXG4gKiBAaW50ZXJmYWNlIFF1ZXJ5QnVpbGRlclxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IE9wdGlvbnNcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlCdWlsZGVyPFE+IGV4dGVuZHMgRXhlY3V0b3Ige1xuICAvKipcbiAgICogTWV0aG9kIHRvIGJ1aWxkIGFuZCB2YWxpZGF0ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IGJlZm9yZSB0aGUgZXhlY3V0aW9uO1xuICAgKlxuICAgKiBAdGhyb3dzIHtRdWVyeUVycm9yfSAgZm9yIGludmFsaWQgc3RhdGVtZW50c1xuICAgKiBAbWV0aG9kXG4gICAqL1xuICBidWlsZChwcmV2aW91czogUSk6IFE7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgR3JvdXBCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgR1JPVVAgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgR3JvdXBCeU9wdGlvblxuICogQGV4dGVuZHMgUXVlcnlCdWlsZGVyXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKiBAc3ViY2F0ZWdvcnkgT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQnlPcHRpb24gZXh0ZW5kcyBFeGVjdXRvciB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBHcm91cHMgcmVjb3JkcyBieSBhbiBhdHRyaWJ1dGVcbiAgICpcbiAgICogQHBhcmFtIHtHcm91cEJ5U2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGdyb3VwQnkoc2VsZWN0b3I6IEdyb3VwQnlTZWxlY3Rvcik6IEV4ZWN1dG9yO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBPZmZzZXQgT3B0aW9uIGludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIE9GRlNFVCBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBHcm91cEJ5T3B0aW9uXG4gKiBAZXh0ZW5kcyBRdWVyeUJ1aWxkZXJcbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2Zmc2V0T3B0aW9uIGV4dGVuZHMgRXhlY3V0b3Ige1xuICAvKipcbiAgICogQHN1bW1hcnkgT2Zmc2V0cyB0aGUgcmVzdWx0cyBieSB0aGUgcHJvdmlkZWQgc2VsZWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPZmZzZXRTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgb2Zmc2V0KHNlbGVjdG9yOiBPZmZzZXRTZWxlY3Rvcik6IEV4ZWN1dG9yO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBMaW1pdCBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgTElNSVQgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgTGltaXRPcHRpb25cbiAqIEBleHRlbmRzIFF1ZXJ5QnVpbGRlclxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW1pdE9wdGlvbiBleHRlbmRzIEV4ZWN1dG9yIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IExpbWl0cyB0aGUgcmVzdWx0cyB0byB0aGUgcHJvdmlkZWQgbnVtYmVyXG4gICAqXG4gICAqIEBwYXJhbSB7TGltaXRTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgbGltaXQoc2VsZWN0b3I6IExpbWl0U2VsZWN0b3IpOiBPZmZzZXRPcHRpb247XG59XG4vKipcbiAqIEBzdW1tYXJ5IE9yZGVycEJ5IE9wdGlvbiBpbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBPUkRFUiBCWSBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBPcmRlckJ5T3B0aW9uXG4gKiBAZXh0ZW5kcyBRdWVyeUJ1aWxkZXJcbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJCeU9wdGlvbiBleHRlbmRzIEV4ZWN1dG9yIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IE9yZGVycyB0aGUgcmVzdWx0cyBieSB0aGUgcHJvdmlkZWQgYXR0cmlidXRlIGFuZCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGRpcmVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge09yZGVyQnlTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgb3JkZXJCeSguLi5zZWxlY3RvcjogT3JkZXJCeVNlbGVjdG9yW10pOiBMaW1pdE9wdGlvbiAmIE9mZnNldE9wdGlvbjtcbn1cbi8qKlxuICogQHN1bW1hcnkgR3JvdXBzIHNldmVyYWwgb3JkZXIgYW5kIGdyb3VwaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIE9yZGVyQW5kR3JvdXBPcHRpb25cbiAqIEBleHRlbmRzIE9yZGVyQnlPcHRpb25cbiAqIEBleHRlbmRzIEdyb3VwQnlPcHRpb25cbiAqIEBleHRlbmRzIExpbWl0T3B0aW9uXG4gKiBAZXh0ZW5kcyBPZmZzZXRPcHRpb25cbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJBbmRHcm91cE9wdGlvblxuICBleHRlbmRzIE9yZGVyQnlPcHRpb24sXG4gICAgR3JvdXBCeU9wdGlvbixcbiAgICBMaW1pdE9wdGlvbixcbiAgICBPZmZzZXRPcHRpb24ge31cbi8qKlxuICogQHN1bW1hcnkgV2hlcmUgT3B0aW9uIGludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIFdIRVJFIG1ldGhvZCBhbmQgcmVtYWluaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIFdoZXJlT3B0aW9uXG4gKiBAZXh0ZW5kcyBPcmRlckFuZEdyb3VwT3B0aW9uXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKiBAc3ViY2F0ZWdvcnkgT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdoZXJlT3B0aW9uIGV4dGVuZHMgT3JkZXJBbmRHcm91cE9wdGlvbiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBmaWx0ZXIgdGhlIHJlY29yZHMgYnkgYSBjb25kaXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtDb25kaXRpb259IGNvbmRpdGlvblxuICAgKiBAbWV0aG9kXG4gICAqL1xuICB3aGVyZShjb25kaXRpb246IENvbmRpdGlvbik6IE9yZGVyQW5kR3JvdXBPcHRpb247XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRnJvbSBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgRlJPTSBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBGcm9tT3B0aW9uXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKiBAc3ViY2F0ZWdvcnkgT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb21PcHRpb248TSBleHRlbmRzIE1vZGVsPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBzZWxlY3RzIHJlY29yZHMgZnJvbSBhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IHRhYmxlTmFtZVxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBmcm9tKHRhYmxlTmFtZTogQ29uc3RydWN0b3I8TT4gfCBzdHJpbmcpOiBXaGVyZU9wdGlvbjtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEaXN0aW5jdCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBESVNUSU5DVFxuICpcbiAqIEBpbnRlcmZhY2UgRGlzdGluY3RPcHRpb25cbiAqIEBleHRlbmRzIEZyb21PcHRpb25cbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdGluY3RPcHRpb248TSBleHRlbmRzIE1vZGVsPiBleHRlbmRzIEZyb21PcHRpb248TT4ge31cblxuLyoqXG4gKiBAc3VtbWFyeSBNYXggT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGEgTUFYXG4gKlxuICogQGludGVyZmFjZSBNYXhPcHRpb25cbiAqIEBleHRlbmRzIEZyb21PcHRpb25cbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBGcm9tT3B0aW9uPE0+IHt9XG5cbi8qKlxuICogQHN1bW1hcnkgTWluIE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIE1JTlxuICpcbiAqIEBpbnRlcmZhY2UgTWluT3B0aW9uXG4gKiBAZXh0ZW5kcyBGcm9tT3B0aW9uXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKiBAc3ViY2F0ZWdvcnkgT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbk9wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgRnJvbU9wdGlvbjxNPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IENvdW50IE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIENPVU5UXG4gKlxuICogQGludGVyZmFjZSBDb3VudE9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3VudE9wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgRnJvbU9wdGlvbjxNPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IFNlbGVjdCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBTRUxFQ1RcbiAqXG4gKiBAaW50ZXJmYWNlIFNlbGVjdE9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb248TSBleHRlbmRzIE1vZGVsPiBleHRlbmRzIEZyb21PcHRpb248TT4ge1xuICAvKipcbiAgICogQHN1bW1hcnkgc2VsZWN0cyBkaXN0aW5jdCB2YWx1ZXNcbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3RTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZGlzdGluY3Qoc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogRGlzdGluY3RPcHRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSB0aGUgbWF4aW11bSB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBtYXgoc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogTWF4T3B0aW9uPE0+O1xuICAvKipcbiAgICogQHN1bW1hcnkgc2VsZWN0cyB0aGUgbWluaW11bSB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdFNlbGVjdG9yfSBzZWxlY3RvclxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBtaW4oc2VsZWN0b3I6IFNlbGVjdFNlbGVjdG9yKTogTWluT3B0aW9uPE0+O1xuICAvKipcbiAgICogQHN1bW1hcnkgY291bnRzIHRoZSByZWNvcmRzXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0U2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGNvdW50KHNlbGVjdG9yOiBTZWxlY3RTZWxlY3Rvcik6IENvdW50T3B0aW9uPE0+O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEludG8gT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGFuIElOVE9cbiAqXG4gKiBAaW50ZXJmYWNlIEludG9PcHRpb25cbiAqXG4gKiBAY2F0ZWdvcnkgUXVlcnlcbiAqIEBzdWJjYXRlZ29yeSBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50b09wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHNldHMgdGhlIG1vZGVscyB0byBpbnNlcnRcbiAgICpcbiAgICogQHBhcmFtIHtUW119IG1vZGVsc1xuICAgKiBAbWV0aG9kXG4gICAqL1xuICB2YWx1ZXMoLi4ubW9kZWxzOiBNW10pOiBFeGVjdXRvcjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGZpbHRlciByZWNvcmRzIHRvIGluc2VydFxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbn0gY29uZGl0aW9uXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHdoZXJlKGNvbmRpdGlvbjogQ29uZGl0aW9uKTogRXhlY3V0b3I7XG59XG4vKipcbiAqIEBzdW1tYXJ5IFZhbHVlc3QgT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGEgVkFMVUVTXG4gKlxuICogQGludGVyZmFjZSBWYWx1ZXNPcHRpb25cbiAqIEBleHRlbmRzIFF1ZXJ5QnVpbGRlclxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWx1ZXNPcHRpb24gZXh0ZW5kcyBFeGVjdXRvciB7fVxuLyoqXG4gKiBAc3VtbWFyeSBJbnNlcnQgT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGFuIElOU0VSVFxuICpcbiAqIEBpbnRlcmZhY2UgSW5zZXJ0T3B0aW9uXG4gKlxuICogQGNhdGVnb3J5IFF1ZXJ5XG4gKiBAc3ViY2F0ZWdvcnkgT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydE9wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHNlbGVjdHMgdGhlIHRhYmxlIHRvIGluc2VydCByZWNvcmRzIGludG9cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3Rvcn0gdGFibGVcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaW50byh0YWJsZTogQ29uc3RydWN0b3I8TT4pOiBJbnRvT3B0aW9uPE0+O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IHtAbGluayBPcGVyYXRvcn0gT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIGF2YWlsYWJsZSBvcGVyYXRvcnMgZm9yIGEge0BsaW5rIENvbmRpdGlvbn1cbiAqXG4gKiBAaW50ZXJmYWNlIEF0dHJpYnV0ZU9wdGlvblxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IENvbmRpdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVPcHRpb24ge1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBlcXVhbGl0eVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGVxKHZhbDogYW55KTogQ29uZGl0aW9uO1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBkaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZGlmKHZhbDogYW55KTogQ29uZGl0aW9uO1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBncmVhdGVyIHRoYW5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBndCh2YWw6IGFueSk6IENvbmRpdGlvbjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgbG93ZXIgdGhhblxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGx0KHZhbDogYW55KTogQ29uZGl0aW9uO1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBncmVhdGVyIG9yIGVxdWFsIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZ3RlKHZhbDogYW55KTogQ29uZGl0aW9uO1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBsb3dlciBvciBlcXVhbCB0b1xuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGx0ZSh2YWw6IGFueSk6IENvbmRpdGlvbjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgdmFsdWUgaW4gYSByYW5nZSBvZiB2YWx1ZXNcbiAgICogQHBhcmFtIHthbnlbXX0gdmFsXG4gICAqL1xuICBpbih2YWw6IGFueVtdKTogQ29uZGl0aW9uO1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBtYXRjaGVzIHtAbGluayBSZWdFeHB9XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgcmVnZXhwKHZhbDogc3RyaW5nIHwgUmVnRXhwKTogQ29uZGl0aW9uO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGNyZWF0aW5nIENvbmRpdGlvbnNcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBhdmFpbGFibGUgb3BlcmF0aW9ucyBmb3IgYSB7QGxpbmsgQ29uZGl0aW9ufVxuICpcbiAqIEBpbnRlcmZhY2UgQ29uZGl0aW9uQnVpbGRlck9wdGlvblxuICpcbiAqIEBjYXRlZ29yeSBRdWVyeVxuICogQHN1YmNhdGVnb3J5IENvbmRpdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CdWlsZGVyT3B0aW9uIHtcbiAgYXR0cmlidXRlKGF0dHI6IHN0cmluZyk6IEF0dHJpYnV0ZU9wdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,371 @@
1
+ import { GroupBySelector, LimitSelector, OffsetSelector, OrderBySelector, SelectSelector } from "./selectors";
2
+ import { Executor } from "../interfaces";
3
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
4
+ import { Condition } from "./Condition";
5
+ /**
6
+ * @summary Statement Builder interface
7
+ * @description Exposes the final method to build the statement
8
+ *
9
+ * @typedef Q The query object type to build
10
+ * @interface QueryBuilder
11
+ *
12
+ * @category Query
13
+ * @subcategory Options
14
+ *
15
+ */
16
+ export interface QueryBuilder<Q> extends Executor {
17
+ /**
18
+ * Method to build and validate the prepared statement before the execution;
19
+ *
20
+ * @throws {QueryError} for invalid statements
21
+ * @method
22
+ */
23
+ build(previous: Q): Q;
24
+ }
25
+ /**
26
+ * @summary GroupBy Option interface
27
+ * @description Exposes the GROUP BY method and remaining options
28
+ *
29
+ * @interface GroupByOption
30
+ * @extends QueryBuilder
31
+ *
32
+ * @category Query
33
+ * @subcategory Options
34
+ */
35
+ export interface GroupByOption extends Executor {
36
+ /**
37
+ * @summary Groups records by an attribute
38
+ *
39
+ * @param {GroupBySelector} selector
40
+ * @method
41
+ */
42
+ groupBy(selector: GroupBySelector): Executor;
43
+ }
44
+ /**
45
+ * @summary Offset Option interface
46
+ * @description Exposes the OFFSET method and remaining options
47
+ *
48
+ * @interface GroupByOption
49
+ * @extends QueryBuilder
50
+ *
51
+ * @category Query
52
+ * @subcategory Options
53
+ */
54
+ export interface OffsetOption extends Executor {
55
+ /**
56
+ * @summary Offsets the results by the provided selector
57
+ *
58
+ * @param {OffsetSelector} selector
59
+ * @method
60
+ */
61
+ offset(selector: OffsetSelector): Executor;
62
+ }
63
+ /**
64
+ * @summary Limit Option interface
65
+ * @description Exposes the LIMIT method and remaining options
66
+ *
67
+ * @interface LimitOption
68
+ * @extends QueryBuilder
69
+ *
70
+ * @category Query
71
+ * @subcategory Options
72
+ */
73
+ export interface LimitOption extends Executor {
74
+ /**
75
+ * @summary Limits the results to the provided number
76
+ *
77
+ * @param {LimitSelector} selector
78
+ * @method
79
+ */
80
+ limit(selector: LimitSelector): OffsetOption;
81
+ }
82
+ /**
83
+ * @summary OrderpBy Option interface
84
+ * @description Exposes the ORDER BY method and remaining options
85
+ *
86
+ * @interface OrderByOption
87
+ * @extends QueryBuilder
88
+ *
89
+ * @category Query
90
+ * @subcategory Options
91
+ */
92
+ export interface OrderByOption extends Executor {
93
+ /**
94
+ * @summary Orders the results by the provided attribute and according to the provided direction
95
+ *
96
+ * @param {OrderBySelector} selector
97
+ * @method
98
+ */
99
+ orderBy(...selector: OrderBySelector[]): LimitOption & OffsetOption;
100
+ }
101
+ /**
102
+ * @summary Groups several order and grouping options
103
+ *
104
+ * @interface OrderAndGroupOption
105
+ * @extends OrderByOption
106
+ * @extends GroupByOption
107
+ * @extends LimitOption
108
+ * @extends OffsetOption
109
+ *
110
+ * @category Query
111
+ * @subcategory Options
112
+ */
113
+ export interface OrderAndGroupOption extends OrderByOption, GroupByOption, LimitOption, OffsetOption {
114
+ }
115
+ /**
116
+ * @summary Where Option interface
117
+ * @description Exposes the WHERE method and remaining options
118
+ *
119
+ * @interface WhereOption
120
+ * @extends OrderAndGroupOption
121
+ *
122
+ * @category Query
123
+ * @subcategory Options
124
+ */
125
+ export interface WhereOption extends OrderAndGroupOption {
126
+ /**
127
+ * @summary filter the records by a condition
128
+ *
129
+ * @param {Condition} condition
130
+ * @method
131
+ */
132
+ where(condition: Condition): OrderAndGroupOption;
133
+ }
134
+ /**
135
+ * @summary From Option Interface
136
+ * @description Exposes the FROM method and remaining options
137
+ *
138
+ * @interface FromOption
139
+ *
140
+ * @category Query
141
+ * @subcategory Options
142
+ */
143
+ export interface FromOption<M extends Model> {
144
+ /**
145
+ * @summary selects records from a table
146
+ *
147
+ * @param {Constructor} tableName
148
+ * @method
149
+ */
150
+ from(tableName: Constructor<M> | string): WhereOption;
151
+ }
152
+ /**
153
+ * @summary Distinct Option Interface
154
+ * @description Exposes the remaining options after a DISTINCT
155
+ *
156
+ * @interface DistinctOption
157
+ * @extends FromOption
158
+ *
159
+ * @category Query
160
+ * @subcategory Options
161
+ */
162
+ export interface DistinctOption<M extends Model> extends FromOption<M> {
163
+ }
164
+ /**
165
+ * @summary Max Option Interface
166
+ * @description Exposes the remaining options after a MAX
167
+ *
168
+ * @interface MaxOption
169
+ * @extends FromOption
170
+ *
171
+ * @category Query
172
+ * @subcategory Options
173
+ */
174
+ export interface MaxOption<M extends Model> extends FromOption<M> {
175
+ }
176
+ /**
177
+ * @summary Min Option Interface
178
+ * @description Exposes the remaining options after a MIN
179
+ *
180
+ * @interface MinOption
181
+ * @extends FromOption
182
+ *
183
+ * @category Query
184
+ * @subcategory Options
185
+ */
186
+ export interface MinOption<M extends Model> extends FromOption<M> {
187
+ }
188
+ /**
189
+ * @summary Count Option Interface
190
+ * @description Exposes the remaining options after a COUNT
191
+ *
192
+ * @interface CountOption
193
+ * @extends FromOption
194
+ *
195
+ * @category Query
196
+ * @subcategory Options
197
+ */
198
+ export interface CountOption<M extends Model> extends FromOption<M> {
199
+ }
200
+ /**
201
+ * @summary Select Option Interface
202
+ * @description Exposes the remaining options after a SELECT
203
+ *
204
+ * @interface SelectOption
205
+ * @extends FromOption
206
+ *
207
+ * @category Query
208
+ * @subcategory Options
209
+ */
210
+ export interface SelectOption<M extends Model> extends FromOption<M> {
211
+ /**
212
+ * @summary selects distinct values
213
+ *
214
+ * @param {SelectSelector} selector
215
+ * @method
216
+ */
217
+ distinct(selector: SelectSelector): DistinctOption<M>;
218
+ /**
219
+ * @summary the maximum value
220
+ *
221
+ * @param {SelectSelector} selector
222
+ * @method
223
+ */
224
+ max(selector: SelectSelector): MaxOption<M>;
225
+ /**
226
+ * @summary selects the minimum value
227
+ *
228
+ * @param {SelectSelector} selector
229
+ * @method
230
+ */
231
+ min(selector: SelectSelector): MinOption<M>;
232
+ /**
233
+ * @summary counts the records
234
+ *
235
+ * @param {SelectSelector} selector
236
+ * @method
237
+ */
238
+ count(selector: SelectSelector): CountOption<M>;
239
+ }
240
+ /**
241
+ * @summary Into Option Interface
242
+ * @description Exposes the remaining options after an INTO
243
+ *
244
+ * @interface IntoOption
245
+ *
246
+ * @category Query
247
+ * @subcategory Options
248
+ */
249
+ export interface IntoOption<M extends Model> {
250
+ /**
251
+ * @summary sets the models to insert
252
+ *
253
+ * @param {T[]} models
254
+ * @method
255
+ */
256
+ values(...models: M[]): Executor;
257
+ /**
258
+ * @summary filter records to insert
259
+ *
260
+ * @param {Condition} condition
261
+ * @method
262
+ */
263
+ where(condition: Condition): Executor;
264
+ }
265
+ /**
266
+ * @summary Valuest Option Interface
267
+ * @description Exposes the remaining options after a VALUES
268
+ *
269
+ * @interface ValuesOption
270
+ * @extends QueryBuilder
271
+ *
272
+ * @category Query
273
+ * @subcategory Options
274
+ */
275
+ export interface ValuesOption extends Executor {
276
+ }
277
+ /**
278
+ * @summary Insert Option Interface
279
+ * @description Exposes the remaining options after an INSERT
280
+ *
281
+ * @interface InsertOption
282
+ *
283
+ * @category Query
284
+ * @subcategory Options
285
+ */
286
+ export interface InsertOption<M extends Model> {
287
+ /**
288
+ * @summary selects the table to insert records into
289
+ *
290
+ * @param {string | Constructor} table
291
+ * @method
292
+ */
293
+ into(table: Constructor<M>): IntoOption<M>;
294
+ }
295
+ /**
296
+ * @summary {@link Operator} Option Interface
297
+ * @description Exposes the available operators for a {@link Condition}
298
+ *
299
+ * @interface AttributeOption
300
+ *
301
+ * @category Query
302
+ * @subcategory Conditions
303
+ */
304
+ export interface AttributeOption {
305
+ /**
306
+ * @summary Test equality
307
+ *
308
+ * @param {any} val the value to test
309
+ * @method
310
+ */
311
+ eq(val: any): Condition;
312
+ /**
313
+ * @summary Test difference
314
+ *
315
+ * @param {any} val the value to test
316
+ * @method
317
+ */
318
+ dif(val: any): Condition;
319
+ /**
320
+ * @summary Test greater than
321
+ *
322
+ * @param {any} val the value to test
323
+ * @method
324
+ */
325
+ gt(val: any): Condition;
326
+ /**
327
+ * @summary Test lower than
328
+ *
329
+ * @param {any} val the value to test
330
+ * @method
331
+ */
332
+ lt(val: any): Condition;
333
+ /**
334
+ * @summary Test greater or equal to
335
+ *
336
+ * @param {any} val the value to test
337
+ * @method
338
+ */
339
+ gte(val: any): Condition;
340
+ /**
341
+ * @summary Test lower or equal to
342
+ *
343
+ * @param {any} val the value to test
344
+ * @method
345
+ */
346
+ lte(val: any): Condition;
347
+ /**
348
+ * @summary Test value in a range of values
349
+ * @param {any[]} val
350
+ */
351
+ in(val: any[]): Condition;
352
+ /**
353
+ * @summary Test matches {@link RegExp}
354
+ *
355
+ * @param {any} val the value to test
356
+ * @method
357
+ */
358
+ regexp(val: string | RegExp): Condition;
359
+ }
360
+ /**
361
+ * @summary The starting point for creating Conditions
362
+ * @description Exposes the available operations for a {@link Condition}
363
+ *
364
+ * @interface ConditionBuilderOption
365
+ *
366
+ * @category Query
367
+ * @subcategory Conditions
368
+ */
369
+ export interface ConditionBuilderOption {
370
+ attribute(attr: string): AttributeOption;
371
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS9zZWxlY3RvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJxdWVyeS9zZWxlY3RvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmRlckRpcmVjdGlvbiB9IGZyb20gXCIuLi9yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbi8qKlxuICogQHR5cGVkZWYgRnJvbVNlbGVjdG9yXG4gKlxuICogQGNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IHR5cGUgRnJvbVNlbGVjdG9yPE0gZXh0ZW5kcyBNb2RlbD4gPSBDb25zdHJ1Y3RvcjxNPiB8IHN0cmluZztcbi8qKlxuICogQHR5cGVkZWYgR3JvdXBCeVNlbGVjdG9yXG4gKlxuICogQGNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IHR5cGUgR3JvdXBCeVNlbGVjdG9yID0gc3RyaW5nO1xuLyoqXG4gKiBAdHlwZWRlZiBPcmRlckJ5U2VsZWN0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgQ2xhdXNlc1xuICovXG5leHBvcnQgdHlwZSBPcmRlckJ5U2VsZWN0b3IgPSBbc3RyaW5nLCBPcmRlckRpcmVjdGlvbl07XG4vKipcbiAqIEB0eXBlZGVmIExpbWl0U2VsZWN0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgQ2xhdXNlc1xuICovXG5leHBvcnQgdHlwZSBMaW1pdFNlbGVjdG9yID0gbnVtYmVyO1xuLyoqXG4gKiBAdHlwZWRlZiBPZmZzZXRTZWxlY3RvclxuICpcbiAqIEBjYXRlZ29yeSBDbGF1c2VzXG4gKi9cbmV4cG9ydCB0eXBlIE9mZnNldFNlbGVjdG9yID0gbnVtYmVyO1xuXG4vLyBleHBvcnQgdHlwZSBTZWxlY3RGdW5jdGlvbjxUID0gYW55PiA9IChvYmo6IFQpID0+IFQgfCBhbnk7XG4vKipcbiAqIEB0eXBlZGVmIFNlbGVjdFNlbGVjdG9yXG4gKlxuICogQGNhdGVnb3J5IENsYXVzZXNcbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0U2VsZWN0b3IgPSBzdHJpbmcgfCBzdHJpbmdbXTtcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { OrderDirection } from "../repository";
2
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
+ /**
4
+ * @typedef FromSelector
5
+ *
6
+ * @category Clauses
7
+ */
8
+ export type FromSelector<M extends Model> = Constructor<M> | string;
9
+ /**
10
+ * @typedef GroupBySelector
11
+ *
12
+ * @category Clauses
13
+ */
14
+ export type GroupBySelector = string;
15
+ /**
16
+ * @typedef OrderBySelector
17
+ *
18
+ * @category Clauses
19
+ */
20
+ export type OrderBySelector = [string, OrderDirection];
21
+ /**
22
+ * @typedef LimitSelector
23
+ *
24
+ * @category Clauses
25
+ */
26
+ export type LimitSelector = number;
27
+ /**
28
+ * @typedef OffsetSelector
29
+ *
30
+ * @category Clauses
31
+ */
32
+ export type OffsetSelector = number;
33
+ /**
34
+ * @typedef SelectSelector
35
+ *
36
+ * @category Clauses
37
+ */
38
+ export type SelectSelector = string | string[];
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9xdWVyeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InF1ZXJ5L3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQXR0cmlidXRlUmVzdWx0ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uUmVzdWx0ID0gUmVjb3JkPHN0cmluZywgQXR0cmlidXRlUmVzdWx0IHwgYW55PjtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export type AttributeResult = Record<string, string>;
2
+ export type OperationResult = Record<string, AttributeResult | any>;