@decaf-ts/core 0.4.0 → 0.5.0

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 (170) hide show
  1. package/README.md +7 -1
  2. package/dist/core.cjs +180 -169
  3. package/dist/core.esm.cjs +135 -135
  4. package/lib/esm/identity/decorators.d.ts +3 -2
  5. package/lib/esm/identity/decorators.js +7 -5
  6. package/lib/esm/index.d.ts +1 -1
  7. package/lib/esm/index.js +1 -1
  8. package/lib/esm/interfaces/ErrorParser.d.ts +4 -0
  9. package/lib/esm/interfaces/ErrorParser.js +2 -0
  10. package/lib/esm/interfaces/index.d.ts +1 -0
  11. package/lib/esm/interfaces/index.js +2 -1
  12. package/lib/esm/model/construction.d.ts +13 -10
  13. package/lib/esm/model/construction.js +9 -4
  14. package/lib/esm/model/decorators.d.ts +9 -8
  15. package/lib/esm/model/decorators.js +34 -14
  16. package/lib/esm/model/index.d.ts +1 -1
  17. package/lib/esm/model/index.js +3 -2
  18. package/lib/esm/persistence/Adapter.d.ts +14 -13
  19. package/lib/esm/persistence/Adapter.js +37 -26
  20. package/lib/esm/query/Clause.d.ts +2 -2
  21. package/lib/esm/query/ClauseFactory.d.ts +3 -3
  22. package/lib/esm/query/ClauseFactory.js +1 -1
  23. package/lib/esm/query/Paginator.d.ts +2 -2
  24. package/lib/esm/query/Paginator.js +4 -3
  25. package/lib/esm/query/Query.d.ts +1 -1
  26. package/lib/esm/query/Query.js +1 -1
  27. package/lib/esm/query/Statement.d.ts +3 -3
  28. package/lib/esm/query/Statement.js +1 -1
  29. package/lib/esm/query/errors.js +3 -3
  30. package/lib/esm/ram/RamAdapter.d.ts +41 -0
  31. package/lib/esm/ram/RamAdapter.js +230 -0
  32. package/lib/esm/ram/RamClauseFactory.d.ts +17 -0
  33. package/lib/esm/ram/RamClauseFactory.js +92 -0
  34. package/lib/esm/ram/RamContext.d.ts +5 -0
  35. package/lib/esm/ram/RamContext.js +7 -0
  36. package/lib/esm/ram/RamPaginator.d.ts +7 -0
  37. package/lib/esm/ram/RamPaginator.js +20 -0
  38. package/lib/esm/ram/RamSequence.d.ts +50 -0
  39. package/lib/esm/ram/RamSequence.js +130 -0
  40. package/lib/esm/ram/RamStatement.d.ts +8 -0
  41. package/lib/esm/ram/RamStatement.js +18 -0
  42. package/lib/esm/ram/clauses/FromClause.d.ts +7 -0
  43. package/lib/esm/ram/clauses/FromClause.js +11 -0
  44. package/lib/esm/ram/clauses/InsertClause.d.ts +7 -0
  45. package/lib/esm/ram/clauses/InsertClause.js +13 -0
  46. package/lib/esm/ram/clauses/OrderByClause.d.ts +7 -0
  47. package/lib/esm/ram/clauses/OrderByClause.js +39 -0
  48. package/lib/esm/ram/clauses/SelectClause.d.ts +7 -0
  49. package/lib/esm/ram/clauses/SelectClause.js +16 -0
  50. package/lib/esm/ram/clauses/ValuesClause.d.ts +7 -0
  51. package/lib/esm/ram/clauses/ValuesClause.js +12 -0
  52. package/lib/esm/ram/clauses/WhereClause.d.ts +7 -0
  53. package/lib/esm/ram/clauses/WhereClause.js +11 -0
  54. package/lib/esm/ram/clauses/index.d.ts +6 -0
  55. package/lib/esm/ram/clauses/index.js +7 -0
  56. package/lib/esm/ram/index.d.ts +9 -0
  57. package/lib/esm/ram/index.js +10 -0
  58. package/lib/esm/ram/model/RamSequence.d.ts +20 -0
  59. package/lib/esm/ram/model/RamSequence.js +33 -0
  60. package/lib/esm/ram/model/index.d.ts +1 -0
  61. package/lib/esm/ram/model/index.js +2 -0
  62. package/lib/esm/ram/types.d.ts +17 -0
  63. package/lib/esm/ram/types.js +2 -0
  64. package/lib/esm/repository/Repository.d.ts +6 -3
  65. package/lib/esm/repository/Repository.js +27 -15
  66. package/lib/esm/repository/errors.d.ts +6 -0
  67. package/lib/esm/repository/errors.js +12 -2
  68. package/lib/esm/repository/index.d.ts +0 -1
  69. package/lib/esm/repository/index.js +1 -2
  70. package/lib/identity/decorators.cjs +10 -8
  71. package/lib/identity/decorators.d.ts +3 -2
  72. package/lib/identity/index.cjs +1 -1
  73. package/lib/identity/utils.cjs +3 -3
  74. package/lib/index.cjs +2 -2
  75. package/lib/index.d.ts +1 -1
  76. package/lib/interfaces/ErrorParser.cjs +3 -0
  77. package/lib/interfaces/ErrorParser.d.ts +4 -0
  78. package/lib/interfaces/index.cjs +2 -1
  79. package/lib/interfaces/index.d.ts +1 -0
  80. package/lib/model/IdentifiedBaseModel.cjs +1 -1
  81. package/lib/model/construction.cjs +12 -7
  82. package/lib/model/construction.d.ts +13 -10
  83. package/lib/model/decorators.cjs +39 -19
  84. package/lib/model/decorators.d.ts +9 -8
  85. package/lib/model/index.cjs +3 -2
  86. package/lib/model/index.d.ts +1 -1
  87. package/lib/persistence/Adapter.cjs +37 -26
  88. package/lib/persistence/Adapter.d.ts +14 -13
  89. package/lib/persistence/Sequence.cjs +2 -2
  90. package/lib/persistence/decorators.cjs +1 -1
  91. package/lib/persistence/index.cjs +1 -1
  92. package/lib/query/Clause.cjs +1 -1
  93. package/lib/query/Clause.d.ts +2 -2
  94. package/lib/query/ClauseFactory.cjs +1 -1
  95. package/lib/query/ClauseFactory.d.ts +3 -3
  96. package/lib/query/Condition.cjs +1 -1
  97. package/lib/query/Paginator.cjs +4 -3
  98. package/lib/query/Paginator.d.ts +2 -2
  99. package/lib/query/Query.cjs +1 -1
  100. package/lib/query/Query.d.ts +1 -1
  101. package/lib/query/Statement.cjs +3 -3
  102. package/lib/query/Statement.d.ts +3 -3
  103. package/lib/query/clauses/FromClause.cjs +3 -3
  104. package/lib/query/clauses/GroupByClause.cjs +2 -2
  105. package/lib/query/clauses/InsertClause.cjs +3 -3
  106. package/lib/query/clauses/LimitClause.cjs +2 -2
  107. package/lib/query/clauses/OffsetClause.cjs +2 -2
  108. package/lib/query/clauses/OrderByClause.cjs +2 -2
  109. package/lib/query/clauses/SelectClause.cjs +2 -2
  110. package/lib/query/clauses/SelectorBasedClause.cjs +2 -2
  111. package/lib/query/clauses/ValuesClause.cjs +3 -3
  112. package/lib/query/clauses/WhereClause.cjs +4 -4
  113. package/lib/query/clauses/index.cjs +1 -1
  114. package/lib/query/errors.cjs +3 -3
  115. package/lib/query/index.cjs +1 -1
  116. package/lib/ram/RamAdapter.cjs +268 -0
  117. package/lib/ram/RamAdapter.d.ts +41 -0
  118. package/lib/ram/RamClauseFactory.cjs +96 -0
  119. package/lib/ram/RamClauseFactory.d.ts +17 -0
  120. package/lib/ram/RamContext.cjs +11 -0
  121. package/lib/ram/RamContext.d.ts +5 -0
  122. package/lib/ram/RamPaginator.cjs +24 -0
  123. package/lib/ram/RamPaginator.d.ts +7 -0
  124. package/lib/ram/RamSequence.cjs +135 -0
  125. package/lib/ram/RamSequence.d.ts +50 -0
  126. package/lib/ram/RamStatement.cjs +22 -0
  127. package/lib/ram/RamStatement.d.ts +8 -0
  128. package/lib/ram/clauses/FromClause.cjs +15 -0
  129. package/lib/ram/clauses/FromClause.d.ts +7 -0
  130. package/lib/ram/clauses/InsertClause.cjs +17 -0
  131. package/lib/ram/clauses/InsertClause.d.ts +7 -0
  132. package/lib/ram/clauses/OrderByClause.cjs +43 -0
  133. package/lib/ram/clauses/OrderByClause.d.ts +7 -0
  134. package/lib/ram/clauses/SelectClause.cjs +20 -0
  135. package/lib/ram/clauses/SelectClause.d.ts +7 -0
  136. package/lib/ram/clauses/ValuesClause.cjs +16 -0
  137. package/lib/ram/clauses/ValuesClause.d.ts +7 -0
  138. package/lib/ram/clauses/WhereClause.cjs +15 -0
  139. package/lib/ram/clauses/WhereClause.d.ts +7 -0
  140. package/lib/ram/clauses/index.cjs +23 -0
  141. package/lib/ram/clauses/index.d.ts +6 -0
  142. package/lib/ram/index.cjs +26 -0
  143. package/lib/ram/index.d.ts +9 -0
  144. package/lib/ram/model/RamSequence.cjs +36 -0
  145. package/lib/ram/model/RamSequence.d.ts +20 -0
  146. package/lib/ram/model/index.cjs +18 -0
  147. package/lib/ram/model/index.d.ts +1 -0
  148. package/lib/ram/types.cjs +3 -0
  149. package/lib/ram/types.d.ts +17 -0
  150. package/lib/repository/Repository.cjs +32 -20
  151. package/lib/repository/Repository.d.ts +6 -3
  152. package/lib/repository/decorators.cjs +1 -1
  153. package/lib/repository/errors.cjs +15 -3
  154. package/lib/repository/errors.d.ts +6 -0
  155. package/lib/repository/index.cjs +1 -2
  156. package/lib/repository/index.d.ts +0 -1
  157. package/lib/repository/injectables.cjs +3 -3
  158. package/lib/repository/utils.cjs +3 -3
  159. package/lib/validators/ClauseSequenceValidator.cjs +5 -5
  160. package/lib/validators/decorators.cjs +2 -2
  161. package/lib/validators/index.cjs +1 -1
  162. package/package.json +13 -6
  163. package/lib/esm/model/User.d.ts +0 -9
  164. package/lib/esm/model/User.js +0 -34
  165. package/lib/esm/repository/Context.d.ts +0 -10
  166. package/lib/esm/repository/Context.js +0 -12
  167. package/lib/model/User.cjs +0 -37
  168. package/lib/model/User.d.ts +0 -9
  169. package/lib/repository/Context.cjs +0 -16
  170. package/lib/repository/Context.d.ts +0 -10
@@ -0,0 +1,230 @@
1
+ import { RamStatement } from "./RamStatement";
2
+ import { RamClauseFactory } from "./RamClauseFactory";
3
+ import * as crypto from "node:crypto";
4
+ import { RamContext } from "./RamContext";
5
+ import { Repository } from "../repository/Repository";
6
+ import { UnsupportedError } from "../persistence/errors";
7
+ import { Adapter, PersistenceKeys } from "../persistence";
8
+ import { Paginator } from "../query/Paginator";
9
+ import { GroupOperator, Operator, QueryError, } from "../query";
10
+ import { Lock } from "@decaf-ts/transactional-decorators";
11
+ import { Decoration, Model, propMetadata, } from "@decaf-ts/decorator-validation";
12
+ import { BaseError, ConflictError, DefaultRepositoryFlags, findPrimaryKey, InternalError, NotFoundError, onCreate, OperationKeys, } from "@decaf-ts/db-decorators";
13
+ import { RamSequence } from "./RamSequence";
14
+ export async function createdByOnRamCreateUpdate(context, data, key, model) {
15
+ const uuid = context.get("UUID");
16
+ if (!uuid)
17
+ throw new UnsupportedError("This adapter does not support user identification");
18
+ model[key] = uuid;
19
+ }
20
+ const createdByKey = Repository.key(PersistenceKeys.CREATED_BY);
21
+ const updatedByKey = Repository.key(PersistenceKeys.UPDATED_BY);
22
+ Decoration.flavouredAs("ram")
23
+ .for(createdByKey)
24
+ .define(onCreate(createdByOnRamCreateUpdate), propMetadata(createdByKey, {}))
25
+ .apply();
26
+ Decoration.flavouredAs("ram")
27
+ .for(updatedByKey)
28
+ .define(onCreate(createdByOnRamCreateUpdate), propMetadata(updatedByKey, {}))
29
+ .apply();
30
+ export class RamAdapter extends Adapter {
31
+ constructor(flavour = "ram") {
32
+ super({}, flavour);
33
+ this.indexes = {};
34
+ this.lock = new Lock();
35
+ this.sequences = {};
36
+ }
37
+ async context(operation, overrides, model,
38
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
+ ...args) {
40
+ return new RamContext(Object.assign({}, DefaultRepositoryFlags, overrides, {
41
+ affectedTables: [model.name],
42
+ writeOperation: operation !== OperationKeys.READ,
43
+ timestamp: new Date(),
44
+ operation: operation,
45
+ UUID: crypto.randomUUID(),
46
+ }));
47
+ }
48
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
49
+ async initialize(...args) {
50
+ return Promise.resolve(undefined);
51
+ }
52
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
53
+ async index(...models) {
54
+ return Promise.resolve(undefined);
55
+ }
56
+ prepare(model, pk) {
57
+ const prepared = super.prepare(model, pk);
58
+ delete prepared.record[pk];
59
+ return prepared;
60
+ }
61
+ revert(obj, clazz, pk, id) {
62
+ const res = super.revert(obj, clazz, pk, id);
63
+ return res;
64
+ }
65
+ async create(tableName, id, model) {
66
+ await this.lock.acquire();
67
+ if (!this.native[tableName])
68
+ this.native[tableName] = {};
69
+ if (id in this.native[tableName])
70
+ throw new ConflictError(`Record with id ${id} already exists in table ${tableName}`);
71
+ this.native[tableName][id] = model;
72
+ this.lock.release();
73
+ return model;
74
+ }
75
+ async read(tableName, id) {
76
+ if (!(tableName in this.native))
77
+ throw new NotFoundError(`Table ${tableName} not found`);
78
+ if (!(id in this.native[tableName]))
79
+ throw new NotFoundError(`Record with id ${id} not found in table ${tableName}`);
80
+ return this.native[tableName][id];
81
+ }
82
+ async update(tableName, id, model) {
83
+ await this.lock.acquire();
84
+ if (!(tableName in this.native))
85
+ throw new NotFoundError(`Table ${tableName} not found`);
86
+ if (!(id in this.native[tableName]))
87
+ throw new NotFoundError(`Record with id ${id} not found in table ${tableName}`);
88
+ this.native[tableName][id] = model;
89
+ this.lock.release();
90
+ return model;
91
+ }
92
+ async delete(tableName, id) {
93
+ await this.lock.acquire();
94
+ if (!(tableName in this.native))
95
+ throw new NotFoundError(`Table ${tableName} not found`);
96
+ if (!(id in this.native[tableName]))
97
+ throw new NotFoundError(`Record with id ${id} not found in table ${tableName}`);
98
+ const natived = this.native[tableName][id];
99
+ delete this.native[tableName][id];
100
+ this.lock.release();
101
+ return natived;
102
+ }
103
+ tableFor(from) {
104
+ if (typeof from === "string")
105
+ from = Model.get(from);
106
+ const table = Repository.table(from);
107
+ if (!(table in this.native))
108
+ this.native[table] = {};
109
+ return this.native[table];
110
+ }
111
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
+ async raw(rawInput, process) {
113
+ const { where, sort, limit, skip, from } = rawInput;
114
+ let { select } = rawInput;
115
+ const collection = this.tableFor(from);
116
+ const clazz = typeof from === "string" ? Model.get(from) : from;
117
+ const { id, props } = findPrimaryKey(new clazz());
118
+ function parseId(id) {
119
+ let result = id;
120
+ switch (props.type) {
121
+ case "Number":
122
+ result = parseInt(result);
123
+ if (isNaN(result))
124
+ throw new Error(`Invalid id ${id}`);
125
+ break;
126
+ case "BigInt":
127
+ result = BigInt(parseInt(result));
128
+ break;
129
+ case "String":
130
+ break;
131
+ default:
132
+ throw new InternalError(`Invalid id type ${props.type}. should be impossible`);
133
+ }
134
+ return result;
135
+ }
136
+ let result = Object.entries(collection).map(([pk, r]) => this.revert(r, clazz, id, parseId(pk)));
137
+ result = where ? result.filter(where) : result;
138
+ if (sort)
139
+ result = result.sort(sort);
140
+ if (skip)
141
+ result = result.slice(skip);
142
+ if (limit)
143
+ result = result.slice(0, limit);
144
+ if (select) {
145
+ select = Array.isArray(select) ? select : [select];
146
+ result = result.map((r) => Object.entries(r).reduce((acc, [key, val]) => {
147
+ if (select.includes(key))
148
+ acc[key] = val;
149
+ return acc;
150
+ }, {}));
151
+ }
152
+ return result;
153
+ }
154
+ async paginate(rawInput) {
155
+ return new (class extends Paginator {
156
+ constructor(size) {
157
+ super(undefined, size, rawInput);
158
+ }
159
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
160
+ prepare(rawStatement) {
161
+ throw new Error("Method not implemented.");
162
+ }
163
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
164
+ page(page) {
165
+ throw new Error("Method not implemented.");
166
+ }
167
+ })(10);
168
+ }
169
+ parseError(err) {
170
+ if (err instanceof BaseError)
171
+ return err;
172
+ return new InternalError(err);
173
+ }
174
+ get Clauses() {
175
+ if (!this.factory)
176
+ this.factory = new RamClauseFactory(this);
177
+ return this.factory;
178
+ }
179
+ get Statement() {
180
+ return new RamStatement(this);
181
+ }
182
+ async Sequence(options) {
183
+ return new RamSequence(options, this);
184
+ }
185
+ parseCondition(condition) {
186
+ return {
187
+ where: (m) => {
188
+ const { attr1, operator, comparison } = condition;
189
+ if ([GroupOperator.AND, GroupOperator.OR, Operator.NOT].indexOf(operator) === -1) {
190
+ switch (operator) {
191
+ case Operator.BIGGER:
192
+ return m[attr1] > comparison;
193
+ case Operator.BIGGER_EQ:
194
+ return m[attr1] >= comparison;
195
+ case Operator.DIFFERENT:
196
+ return m[attr1] !== comparison;
197
+ case Operator.EQUAL:
198
+ return m[attr1] === comparison;
199
+ case Operator.REGEXP:
200
+ if (typeof m[attr1] !== "string")
201
+ throw new QueryError(`Invalid regexp comparison on a non string attribute: ${m[attr1]}`);
202
+ return !!m[attr1].match(new RegExp(comparison, "g"));
203
+ case Operator.SMALLER:
204
+ return m[attr1] < comparison;
205
+ case Operator.SMALLER_EQ:
206
+ return m[attr1] <= comparison;
207
+ default:
208
+ throw new InternalError(`Invalid operator for standard comparisons: ${operator}`);
209
+ }
210
+ }
211
+ else if (operator === Operator.NOT) {
212
+ throw new InternalError("Not implemented");
213
+ }
214
+ else {
215
+ const op1 = this.parseCondition(attr1);
216
+ const op2 = this.parseCondition(comparison);
217
+ switch (operator) {
218
+ case GroupOperator.AND:
219
+ return op1.where(m) && op2.where(m);
220
+ case GroupOperator.OR:
221
+ return op1.where(m) || op2.where(m);
222
+ default:
223
+ throw new InternalError(`Invalid operator for And/Or comparisons: ${operator}`);
224
+ }
225
+ }
226
+ },
227
+ };
228
+ }
229
+ }
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYW0vUmFtQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQVEsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUdMLGFBQWEsRUFDYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRCxPQUFPLEVBRUwsVUFBVSxFQUNWLEtBQUssRUFDTCxZQUFZLEdBQ2IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2IsUUFBUSxFQUNSLGFBQWEsR0FDZCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FROUMsT0FBbUIsRUFDbkIsSUFBTyxFQUNQLEdBQVksRUFDWixLQUFRO0lBRVIsTUFBTSxJQUFJLEdBQVcsT0FBTyxDQUFDLEdB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QUM7U0FDZSxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFJhbUZsYWdzLCBSYW1RdWVyeSwgUmFtU3RvcmFnZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBSYW1TdGF0ZW1lbnQgfSBmcm9tIFwiLi9SYW1TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IFJhbUNsYXVzZUZhY3RvcnkgfSBmcm9tIFwiLi9SYW1DbGF1c2VGYWN0b3J5XCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBSYW1Db250ZXh0IH0gZnJvbSBcIi4vUmFtQ29udGV4dFwiO1xuaW1wb3J0IHsgUmVwbywgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2Vycm9yc1wiO1xuaW1wb3J0IHsgQWRhcHRlciwgUGVyc2lzdGVuY2VLZXlzLCBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHsgUGFnaW5hdG9yIH0gZnJvbSBcIi4uL3F1ZXJ5L1BhZ2luYXRvclwiO1xuaW1wb3J0IHtcbiAgQ2xhdXNlRmFjdG9yeSxcbiAgQ29uZGl0aW9uLFxuICBHcm91cE9wZXJhdG9yLFxuICBPcGVyYXRvcixcbiAgUXVlcnlFcnJvcixcbn0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgTG9jayB9IGZyb20gXCJAZGVjYWYtdHMvdHJhbnNhY3Rpb25hbC1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgRGVjb3JhdGlvbixcbiAgTW9kZWwsXG4gIHByb3BNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBEZWZhdWx0UmVwb3NpdG9yeUZsYWdzLFxuICBmaW5kUHJpbWFyeUtleSxcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgb25DcmVhdGUsXG4gIE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmFtU2VxdWVuY2UgfSBmcm9tIFwiLi9SYW1TZXF1ZW5jZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TSwgQywgRj4sXG4gIFYgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbiAgRiBleHRlbmRzIFJhbUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHQ8Rj4sXG4gIGRhdGE6IFYsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB1dWlkOiBzdHJpbmcgPSBjb250ZXh0LmdldChcIlVVSURcIik7XG4gIGlmICghdXVpZClcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiVGhpcyBhZGFwdGVyIGRvZXMgbm90IHN1cHBvcnQgdXNlciBpZGVudGlmaWNhdGlvblwiXG4gICAgKTtcbiAgbW9kZWxba2V5XSA9IHV1aWQgYXMgTVtrZXlvZiBNXTtcbn1cblxuY29uc3QgY3JlYXRlZEJ5S2V5ID0gUmVwb3NpdG9yeS5rZXkoUGVyc2lzdGVuY2VLZXlzLkNSRUFURURfQlkpO1xuY29uc3QgdXBkYXRlZEJ5S2V5ID0gUmVwb3NpdG9yeS5rZXkoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpO1xuRGVjb3JhdGlvbi5mbGF2b3VyZWRBcyhcInJhbVwiKVxuICAuZm9yKGNyZWF0ZWRCeUtleSlcbiAgLmRlZmluZShvbkNyZWF0ZShjcmVhdGVkQnlPblJhbUNyZWF0ZVVwZGF0ZSksIHByb3BNZXRhZGF0YShjcmVhdGVkQnlLZXksIHt9KSlcbiAgLmFwcGx5KCk7XG5EZWNvcmF0aW9uLmZsYXZvdXJlZEFzKFwicmFtXCIpXG4gIC5mb3IodXBkYXRlZEJ5S2V5KVxuICAuZGVmaW5lKG9uQ3JlYXRlKGNyZWF0ZWRCeU9uUmFtQ3JlYXRlVXBkYXRlKSwgcHJvcE1ldGFkYXRhKHVwZGF0ZWRCeUtleSwge30pKVxuICAuYXBwbHkoKTtcblxuZXhwb3J0IGNsYXNzIFJhbUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVyPFxuICBSYW1TdG9yYWdlLFxuICBSYW1RdWVyeTxhbnk+LFxuICBSYW1GbGFncyxcbiAgQ29udGV4dDxSYW1GbGFncz5cbj4ge1xuICBwcm90ZWN0ZWQgZmFjdG9yeT86IFJhbUNsYXVzZUZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoZmxhdm91cjogc3RyaW5nID0gXCJyYW1cIikge1xuICAgIHN1cGVyKHt9LCBmbGF2b3VyKTtcbiAgfVxuXG4gIGFzeW5jIGNvbnRleHQ8TSBleHRlbmRzIE1vZGVsLCBDIGV4dGVuZHMgUmFtQ29udGV4dCwgRiBleHRlbmRzIFJhbUZsYWdzPihcbiAgICBvcGVyYXRpb246IGFueSxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8UmFtRmxhZ3M+LFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxDPiB7XG4gICAgcmV0dXJuIG5ldyBSYW1Db250ZXh0KFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFJlcG9zaXRvcnlGbGFncywgb3ZlcnJpZGVzLCB7XG4gICAgICAgIGFmZmVjdGVkVGFibGVzOiBbbW9kZWwubmFtZV0sXG4gICAgICAgIHdyaXRlT3BlcmF0aW9uOiBvcGVyYXRpb24gIT09IE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgVVVJRDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIH0pIGFzIEZcbiAgICApIGFzIEM7XG4gIH1cbiAgcHJpdmF0ZSBpbmRleGVzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFJlY29yZDxzdHJpbmcsIGFueT4+XG4gID4gPSB7fTtcblxuICBwcml2YXRlIGxvY2sgPSBuZXcgTG9jaygpO1xuXG4gIHByaXZhdGUgc2VxdWVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhc3luYyBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhc3luYyBpbmRleCguLi5tb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIHBrOiBrZXlvZiBNXG4gICk6IHsgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBpZDogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHByZXBhcmVkID0gc3VwZXIucHJlcGFyZShtb2RlbCwgcGspO1xuICAgIGRlbGV0ZSBwcmVwYXJlZC5yZWNvcmRbcGsgYXMgc3RyaW5nXTtcbiAgICByZXR1cm4gcHJlcGFyZWQ7XG4gIH1cblxuICByZXZlcnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2xheno6IHN0cmluZyB8IENvbnN0cnVjdG9yPE0+LFxuICAgIHBrOiBrZXlvZiBNLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogTSB7XG4gICAgY29uc3QgcmVzID0gc3VwZXIucmV2ZXJ0KG9iaiwgY2xhenosIHBrLCBpZCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgaWYgKCF0aGlzLm5hdGl2ZVt0YWJsZU5hbWVdKSB0aGlzLm5hdGl2ZVt0YWJsZU5hbWVdID0ge307XG4gICAgaWYgKGlkIGluIHRoaXMubmF0aXZlW3RhYmxlTmFtZV0pXG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IGFscmVhZHkgZXhpc3RzIGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgdGhpcy5uYXRpdmVbdGFibGVOYW1lXVtpZF0gPSBtb2RlbDtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBpZiAoISh0YWJsZU5hbWUgaW4gdGhpcy5uYXRpdmUpKVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFRhYmxlICR7dGFibGVOYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoIShpZCBpbiB0aGlzLm5hdGl2ZVt0YWJsZU5hbWVdKSlcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgUmVjb3JkIHdpdGggaWQgJHtpZH0gbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlW3RhYmxlTmFtZV1baWRdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2NrLmFjcXVpcmUoKTtcbiAgICBpZiAoISh0YWJsZU5hbWUgaW4gdGhpcy5uYXRpdmUpKVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFRhYmxlICR7dGFibGVOYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoIShpZCBpbiB0aGlzLm5hdGl2ZVt0YWJsZU5hbWVdKSlcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgUmVjb3JkIHdpdGggaWQgJHtpZH0gbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgdGhpcy5uYXRpdmVbdGFibGVOYW1lXVtpZF0gPSBtb2RlbDtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgaWYgKCEodGFibGVOYW1lIGluIHRoaXMubmF0aXZlKSlcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBUYWJsZSAke3RhYmxlTmFtZX0gbm90IGZvdW5kYCk7XG4gICAgaWYgKCEoaWQgaW4gdGhpcy5uYXRpdmVbdGFibGVOYW1lXSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIGNvbnN0IG5hdGl2ZWQgPSB0aGlzLm5hdGl2ZVt0YWJsZU5hbWVdW2lkXTtcbiAgICBkZWxldGUgdGhpcy5uYXRpdmVbdGFibGVOYW1lXVtpZF07XG4gICAgdGhpcy5sb2NrLnJlbGVhc2UoKTtcbiAgICByZXR1cm4gbmF0aXZlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0YWJsZUZvcjxNIGV4dGVuZHMgTW9kZWw+KGZyb206IHN0cmluZyB8IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSBcInN0cmluZ1wiKSBmcm9tID0gTW9kZWwuZ2V0KGZyb20pIGFzIENvbnN0cnVjdG9yPE0+O1xuICAgIGNvbnN0IHRhYmxlID0gUmVwb3NpdG9yeS50YWJsZShmcm9tKTtcbiAgICBpZiAoISh0YWJsZSBpbiB0aGlzLm5hdGl2ZSkpIHRoaXMubmF0aXZlW3RhYmxlXSA9IHt9O1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZVt0YWJsZV07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFzeW5jIHJhdzxaPihyYXdJbnB1dDogUmFtUXVlcnk8YW55PiwgcHJvY2VzczogYm9vbGVhbik6IFByb21pc2U8Wj4ge1xuICAgIGNvbnN0IHsgd2hlcmUsIHNvcnQsIGxpbWl0LCBza2lwLCBmcm9tIH0gPSByYXdJbnB1dDtcbiAgICBsZXQgeyBzZWxlY3QgfSA9IHJhd0lucHV0O1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnRhYmxlRm9yKGZyb20pO1xuXG4gICAgY29uc3QgY2xhenogPSB0eXBlb2YgZnJvbSA9PT0gXCJzdHJpbmdcIiA/IE1vZGVsLmdldChmcm9tKSA6IGZyb207XG4gICAgY29uc3QgeyBpZCwgcHJvcHMgfSA9IGZpbmRQcmltYXJ5S2V5KG5ldyBjbGF6eigpKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSWQoaWQ6IGFueSkge1xuICAgICAgbGV0IHJlc3VsdCA9IGlkO1xuICAgICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICAgICAgICByZXN1bHQgPSBwYXJzZUludChyZXN1bHQpO1xuICAgICAgICAgIGlmIChpc05hTihyZXN1bHQpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaWQgJHtpZH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJpZ0ludFwiOlxuICAgICAgICAgIHJlc3VsdCA9IEJpZ0ludChwYXJzZUludChyZXN1bHQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgaWQgdHlwZSAke3Byb3BzLnR5cGV9LiBzaG91bGQgYmUgaW1wb3NzaWJsZWBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IE9iamVjdC5lbnRyaWVzKGNvbGxlY3Rpb24pLm1hcCgoW3BrLCByXSkgPT5cbiAgICAgIHRoaXMucmV2ZXJ0KHIsIGNsYXp6LCBpZCBhcyBhbnksIHBhcnNlSWQocGspKVxuICAgICk7XG5cbiAgICByZXN1bHQgPSB3aGVyZSA/IHJlc3VsdC5maWx0ZXIod2hlcmUpIDogcmVzdWx0O1xuXG4gICAgaWYgKHNvcnQpIHJlc3VsdCA9IHJlc3VsdC5zb3J0KHNvcnQpO1xuXG4gICAgaWYgKHNraXApIHJlc3VsdCA9IHJlc3VsdC5zbGljZShza2lwKTtcbiAgICBpZiAobGltaXQpIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICBpZiAoc2VsZWN0KSB7XG4gICAgICBzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3QgOiBbc2VsZWN0XTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoKHIpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHIpLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgaWYgKChzZWxlY3QgYXMgc3RyaW5nW10pLmluY2x1ZGVzKGtleSkpIGFjY1trZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgWjtcbiAgfVxuXG4gIGFzeW5jIHBhZ2luYXRlPFo+KHJhd0lucHV0OiBzdHJpbmcpOiBQcm9taXNlPFBhZ2luYXRvcjxaLCBzdHJpbmc+PiB7XG4gICAgcmV0dXJuIG5ldyAoY2xhc3MgZXh0ZW5kcyBQYWdpbmF0b3I8Wiwgc3RyaW5nPiB7XG4gICAgICBjb25zdHJ1Y3RvcihzaXplOiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIodW5kZWZpbmVkIGFzIHVua25vd24gYXMgYW55LCBzaXplLCByYXdJbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIHByb3RlY3RlZCBwcmVwYXJlKHJhd1N0YXRlbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBwYWdlKHBhZ2U6IG51bWJlcik6IFByb21pc2U8WltdPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgfVxuICAgIH0pKDEwKTtcbiAgfVxuXG4gIHBhcnNlRXJyb3I8ViBleHRlbmRzIEJhc2VFcnJvcj4oZXJyOiBFcnJvcik6IFYge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgVjtcbiAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKSBhcyBWO1xuICB9XG5cbiAgZ2V0IENsYXVzZXMoKTogQ2xhdXNlRmFjdG9yeTxSYW1TdG9yYWdlLCBSYW1RdWVyeTxhbnk+LCB0eXBlb2YgdGhpcz4ge1xuICAgIGlmICghdGhpcy5mYWN0b3J5KSB0aGlzLmZhY3RvcnkgPSBuZXcgUmFtQ2xhdXNlRmFjdG9yeSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5mYWN0b3J5IGFzIGFueTtcbiAgfVxuXG4gIGdldCBTdGF0ZW1lbnQoKTogUmFtU3RhdGVtZW50PGFueT4ge1xuICAgIHJldHVybiBuZXcgUmFtU3RhdGVtZW50KHRoaXMpO1xuICB9XG5cbiAgYXN5bmMgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT4ge1xuICAgIHJldHVybiBuZXcgUmFtU2VxdWVuY2Uob3B0aW9ucywgdGhpcyk7XG4gIH1cblxuICBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbik6IFJhbVF1ZXJ5PGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVyZTogKG06IE1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYXR0cjEsIG9wZXJhdG9yLCBjb21wYXJpc29uIH0gPSBjb25kaXRpb24gYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IgfCBHcm91cE9wZXJhdG9yO1xuICAgICAgICAgIGNvbXBhcmlzb246IGFueTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgICAgICBvcGVyYXRvciBhcyBHcm91cE9wZXJhdG9yXG4gICAgICAgICAgKSA9PT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5CSUdHRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA+IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkJJR0dFUl9FUTpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID49IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkRJRkZFUkVOVDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdICE9PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID09PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5SRUdFWFA6XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgSW52YWxpZCByZWdleHAgY29tcGFyaXNvbiBvbiBhIG5vbiBzdHJpbmcgYXR0cmlidXRlOiAke21bYXR0cjEgYXMga2V5b2YgTW9kZWxdfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gISEobVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKFxuICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoY29tcGFyaXNvbiwgXCJnXCIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVJfRVE6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICAgICAgYEludmFsaWQgb3BlcmF0b3IgZm9yIHN0YW5kYXJkIGNvbXBhcmlzb25zOiAke29wZXJhdG9yfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09IE9wZXJhdG9yLk5PVCkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9wMTogUmFtUXVlcnk8YW55PiA9IHRoaXMucGFyc2VDb25kaXRpb24oYXR0cjEgYXMgQ29uZGl0aW9uKTtcbiAgICAgICAgICBjb25zdCBvcDI6IFJhbVF1ZXJ5PGFueT4gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICAgICAgY29tcGFyaXNvbiBhcyBDb25kaXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgR3JvdXBPcGVyYXRvci5BTkQ6XG4gICAgICAgICAgICAgIHJldHVybiBvcDEud2hlcmUobSkgJiYgb3AyLndoZXJlKG0pO1xuICAgICAgICAgICAgY2FzZSBHcm91cE9wZXJhdG9yLk9SOlxuICAgICAgICAgICAgICByZXR1cm4gb3AxLndoZXJlKG0pIHx8IG9wMi53aGVyZShtKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICAgIGBJbnZhbGlkIG9wZXJhdG9yIGZvciBBbmQvT3IgY29tcGFyaXNvbnM6ICR7b3BlcmF0b3J9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIFJhbVF1ZXJ5PGFueT47XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { ClauseFactory, Condition, FromClause, FromSelector, GroupByClause, GroupBySelector, InsertClause, LimitClause, LimitSelector, OffsetClause, OffsetSelector, OrderByClause, OrderBySelector, SelectClause, SelectSelector, ValuesClause, WhereClause } from "../query";
2
+ import { RamQuery, RamStorage } from "./types";
3
+ import { RamAdapter } from "./RamAdapter";
4
+ import { RamStatement } from "./RamStatement";
5
+ import { Model } from "@decaf-ts/decorator-validation";
6
+ export declare class RamClauseFactory extends ClauseFactory<RamStorage, RamQuery<any>, RamAdapter> {
7
+ constructor(adapter: RamAdapter);
8
+ from<M extends Model>(statement: RamStatement<M>, selector: FromSelector<M>): FromClause<RamQuery<any>, M>;
9
+ groupBy(statement: RamStatement<any>, selector: GroupBySelector): GroupByClause<RamQuery<any>>;
10
+ insert<M extends Model>(): InsertClause<RamQuery<any>, M>;
11
+ limit(statement: RamStatement<any>, selector: LimitSelector): LimitClause<RamQuery<any>>;
12
+ offset(statement: RamStatement<any>, selector: OffsetSelector): OffsetClause<RamQuery<any>>;
13
+ orderBy(statement: RamStatement<any>, selector: OrderBySelector[]): OrderByClause<RamQuery<any>>;
14
+ select<M extends Model>(selector: SelectSelector | undefined): SelectClause<RamQuery<any>, M>;
15
+ values<M extends Model>(statement: RamStatement<any>, values: M[]): ValuesClause<RamQuery<any>, M>;
16
+ where(statement: RamStatement<any>, condition: Condition): WhereClause<RamQuery<any>>;
17
+ }
@@ -0,0 +1,92 @@
1
+ import { ClauseFactory, GroupByClause, LimitClause, OffsetClause, QueryError, } from "../query";
2
+ import { RamStatement } from "./RamStatement";
3
+ import { InternalError } from "@decaf-ts/db-decorators";
4
+ import { RamInsertClause } from "./clauses/InsertClause";
5
+ import { RamOrderByClause } from "./clauses/OrderByClause";
6
+ import { RamSelectClause } from "./clauses/SelectClause";
7
+ import { RamValuesClause } from "./clauses/ValuesClause";
8
+ import { RamWhereClause } from "./clauses/WhereClause";
9
+ import { RamFromClause } from "./clauses/FromClause";
10
+ export class RamClauseFactory extends ClauseFactory {
11
+ constructor(adapter) {
12
+ super(adapter);
13
+ }
14
+ from(statement, selector) {
15
+ return new RamFromClause({ statement: statement, selector: selector });
16
+ }
17
+ groupBy(statement, selector) {
18
+ return new (class extends GroupByClause {
19
+ constructor(clause) {
20
+ super(clause);
21
+ }
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
+ build(query) {
24
+ throw new InternalError("Not implemented");
25
+ }
26
+ })({
27
+ statement: statement,
28
+ selector: selector,
29
+ });
30
+ }
31
+ insert() {
32
+ return new RamInsertClause({
33
+ statement: new RamStatement(this.adapter),
34
+ });
35
+ }
36
+ limit(statement, selector) {
37
+ return new (class extends LimitClause {
38
+ constructor(clause) {
39
+ super(clause);
40
+ }
41
+ build(query) {
42
+ query.limit = this.selector;
43
+ return query;
44
+ }
45
+ })({
46
+ statement: statement,
47
+ selector: selector,
48
+ });
49
+ }
50
+ offset(statement, selector) {
51
+ return new (class extends OffsetClause {
52
+ constructor(clause) {
53
+ super(clause);
54
+ }
55
+ build(query) {
56
+ const skip = parseInt(this.selector);
57
+ if (isNaN(skip))
58
+ throw new QueryError("Failed to parse offset");
59
+ query.skip = skip;
60
+ return query;
61
+ }
62
+ })({
63
+ statement: statement,
64
+ selector: selector,
65
+ });
66
+ }
67
+ orderBy(statement, selector) {
68
+ return new RamOrderByClause({
69
+ statement: statement,
70
+ selector: selector,
71
+ });
72
+ }
73
+ select(selector) {
74
+ return new RamSelectClause({
75
+ statement: new RamStatement(this.adapter),
76
+ selector: selector,
77
+ });
78
+ }
79
+ values(statement, values) {
80
+ return new RamValuesClause({
81
+ statement: statement,
82
+ values: values,
83
+ });
84
+ }
85
+ where(statement, condition) {
86
+ return new RamWhereClause({
87
+ statement: statement,
88
+ condition: condition,
89
+ });
90
+ }
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtQ2xhdXNlRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYW0vUmFtQ2xhdXNlRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUliLGFBQWEsRUFHYixXQUFXLEVBRVgsWUFBWSxFQUlaLFVBQVUsR0FLWCxNQUFNLFVBQVUsQ0FBQztBQUdsQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGFBSXJDO0lBQ0MsWUFBWSxPQUFtQjtRQUM3QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksQ0FDRixTQUEwQixFQUMxQixRQUF5QjtRQUV6QixPQUFPLElBQUksYUFBYSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsT0FBTyxDQUNMLFNBQTRCLEVBQzVCLFFBQXlCO1FBRXpCLE9BQU8sSUFBSSxDQUFDLEtBQU0sU0FBUSxhQUE0QjtZQUNwRCxZQUFZLE1BQThDO2dCQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUVELDZEQUE2RDtZQUM3RCxLQUFLLENBQUMsS0FBb0I7Z0JBQ3hCLE1BQU0sSUFBSSxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3QyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1lBQ0QsU0FBUyxFQUFFLFNBQVM7WUFDcEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQ0gsU0FBNEIsRUFDNUIsUUFBdUI7UUFFdkIsT0FBTyxJQUFJLENBQUMsS0FBTSxTQUFRLFdBQTBCO1lBQ2xELFlBQVksTUFBNEM7Z0JBQ3RELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBRUQsS0FBSyxDQUFDLEtBQW9CO2dCQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFrQixDQUFDO2dCQUN0QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDLENBQUM7WUFDRCxTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUNKLFNBQTRCLEVBQzVCLFFBQXdCO1FBRXhCLE9BQU8sSUFBSSxDQUFDLEtBQU0sU0FBUSxZQUEyQjtZQUNuRCxZQUFZLE1BQTZDO2dCQUN2RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUVELEtBQUssQ0FBQyxLQUFvQjtnQkFDeEIsTUFBTSxJQUFJLEdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUE2QixDQUFDLENBQUM7Z0JBQ2xFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztvQkFBRSxNQUFNLElBQUksVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQ2hFLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDLENBQUM7WUFDRCxTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUNMLFNBQTRCLEVBQzVCLFFBQTJCO1FBRTNCLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztZQUMxQixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUNKLFFBQW9DO1FBRXBDLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDekIsU0FBUyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekMsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FDSixTQUE0QixFQUM1QixNQUFXO1FBRVgsT0FBTyxJQUFJLGVBQWUsQ0FBSTtZQUM1QixTQUFTLEVBQUUsU0FBUztZQUNwQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQ0gsU0FBNEIsRUFDNUIsU0FBb0I7UUFFcEIsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixTQUFTLEVBQUUsU0FBUztZQUNwQixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDbGF1c2VGYWN0b3J5LFxuICBDb25kaXRpb24sXG4gIEZyb21DbGF1c2UsXG4gIEZyb21TZWxlY3RvcixcbiAgR3JvdXBCeUNsYXVzZSxcbiAgR3JvdXBCeVNlbGVjdG9yLFxuICBJbnNlcnRDbGF1c2UsXG4gIExpbWl0Q2xhdXNlLFxuICBMaW1pdFNlbGVjdG9yLFxuICBPZmZzZXRDbGF1c2UsXG4gIE9mZnNldFNlbGVjdG9yLFxuICBPcmRlckJ5Q2xhdXNlLFxuICBPcmRlckJ5U2VsZWN0b3IsXG4gIFF1ZXJ5RXJyb3IsXG4gIFNlbGVjdENsYXVzZSxcbiAgU2VsZWN0U2VsZWN0b3IsXG4gIFZhbHVlc0NsYXVzZSxcbiAgV2hlcmVDbGF1c2UsXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgUmFtUXVlcnksIFJhbVN0b3JhZ2UgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUmFtQWRhcHRlciB9IGZyb20gXCIuL1JhbUFkYXB0ZXJcIjtcbmltcG9ydCB7IFJhbVN0YXRlbWVudCB9IGZyb20gXCIuL1JhbVN0YXRlbWVudFwiO1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsQXJnIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmFtSW5zZXJ0Q2xhdXNlIH0gZnJvbSBcIi4vY2xhdXNlcy9JbnNlcnRDbGF1c2VcIjtcbmltcG9ydCB7IFJhbU9yZGVyQnlDbGF1c2UgfSBmcm9tIFwiLi9jbGF1c2VzL09yZGVyQnlDbGF1c2VcIjtcbmltcG9ydCB7IFJhbVNlbGVjdENsYXVzZSB9IGZyb20gXCIuL2NsYXVzZXMvU2VsZWN0Q2xhdXNlXCI7XG5pbXBvcnQgeyBSYW1WYWx1ZXNDbGF1c2UgfSBmcm9tIFwiLi9jbGF1c2VzL1ZhbHVlc0NsYXVzZVwiO1xuaW1wb3J0IHsgUmFtV2hlcmVDbGF1c2UgfSBmcm9tIFwiLi9jbGF1c2VzL1doZXJlQ2xhdXNlXCI7XG5pbXBvcnQgeyBSYW1Gcm9tQ2xhdXNlIH0gZnJvbSBcIi4vY2xhdXNlcy9Gcm9tQ2xhdXNlXCI7XG5cbmV4cG9ydCBjbGFzcyBSYW1DbGF1c2VGYWN0b3J5IGV4dGVuZHMgQ2xhdXNlRmFjdG9yeTxcbiAgUmFtU3RvcmFnZSxcbiAgUmFtUXVlcnk8YW55PixcbiAgUmFtQWRhcHRlclxuPiB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI6IFJhbUFkYXB0ZXIpIHtcbiAgICBzdXBlcihhZGFwdGVyKTtcbiAgfVxuXG4gIGZyb208TSBleHRlbmRzIE1vZGVsPihcbiAgICBzdGF0ZW1lbnQ6IFJhbVN0YXRlbWVudDxNPixcbiAgICBzZWxlY3RvcjogRnJvbVNlbGVjdG9yPE0+XG4gICk6IEZyb21DbGF1c2U8UmFtUXVlcnk8YW55PiwgTT4ge1xuICAgIHJldHVybiBuZXcgUmFtRnJvbUNsYXVzZSh7IHN0YXRlbWVudDogc3RhdGVtZW50LCBzZWxlY3Rvcjogc2VsZWN0b3IgfSk7XG4gIH1cblxuICBncm91cEJ5KFxuICAgIHN0YXRlbWVudDogUmFtU3RhdGVtZW50PGFueT4sXG4gICAgc2VsZWN0b3I6IEdyb3VwQnlTZWxlY3RvclxuICApOiBHcm91cEJ5Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+IHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIEdyb3VwQnlDbGF1c2U8UmFtUXVlcnk8YW55Pj4ge1xuICAgICAgY29uc3RydWN0b3IoY2xhdXNlOiBNb2RlbEFyZzxHcm91cEJ5Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+Pikge1xuICAgICAgICBzdXBlcihjbGF1c2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBidWlsZChxdWVyeTogUmFtUXVlcnk8YW55Pik6IFJhbVF1ZXJ5PGFueT4ge1xuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBzdGF0ZW1lbnQ6IHN0YXRlbWVudCxcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIGluc2VydDxNIGV4dGVuZHMgTW9kZWw+KCk6IEluc2VydENsYXVzZTxSYW1RdWVyeTxhbnk+LCBNPiB7XG4gICAgcmV0dXJuIG5ldyBSYW1JbnNlcnRDbGF1c2Uoe1xuICAgICAgc3RhdGVtZW50OiBuZXcgUmFtU3RhdGVtZW50KHRoaXMuYWRhcHRlciksXG4gICAgfSk7XG4gIH1cblxuICBsaW1pdChcbiAgICBzdGF0ZW1lbnQ6IFJhbVN0YXRlbWVudDxhbnk+LFxuICAgIHNlbGVjdG9yOiBMaW1pdFNlbGVjdG9yXG4gICk6IExpbWl0Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+IHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIExpbWl0Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+IHtcbiAgICAgIGNvbnN0cnVjdG9yKGNsYXVzZTogTW9kZWxBcmc8TGltaXRDbGF1c2U8UmFtUXVlcnk8YW55Pj4+KSB7XG4gICAgICAgIHN1cGVyKGNsYXVzZSk7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkKHF1ZXJ5OiBSYW1RdWVyeTxhbnk+KTogUmFtUXVlcnk8YW55PiB7XG4gICAgICAgIHF1ZXJ5LmxpbWl0ID0gdGhpcy5zZWxlY3RvciBhcyBudW1iZXI7XG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBzdGF0ZW1lbnQ6IHN0YXRlbWVudCxcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIG9mZnNldChcbiAgICBzdGF0ZW1lbnQ6IFJhbVN0YXRlbWVudDxhbnk+LFxuICAgIHNlbGVjdG9yOiBPZmZzZXRTZWxlY3RvclxuICApOiBPZmZzZXRDbGF1c2U8UmFtUXVlcnk8YW55Pj4ge1xuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgT2Zmc2V0Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+IHtcbiAgICAgIGNvbnN0cnVjdG9yKGNsYXVzZTogTW9kZWxBcmc8T2Zmc2V0Q2xhdXNlPFJhbVF1ZXJ5PGFueT4+Pikge1xuICAgICAgICBzdXBlcihjbGF1c2UpO1xuICAgICAgfVxuXG4gICAgICBidWlsZChxdWVyeTogUmFtUXVlcnk8YW55Pik6IFJhbVF1ZXJ5PGFueT4ge1xuICAgICAgICBjb25zdCBza2lwOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdG9yIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKGlzTmFOKHNraXApKSB0aHJvdyBuZXcgUXVlcnlFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBvZmZzZXRcIik7XG4gICAgICAgIHF1ZXJ5LnNraXAgPSBza2lwO1xuICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgc3RhdGVtZW50OiBzdGF0ZW1lbnQsXG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgfSk7XG4gIH1cblxuICBvcmRlckJ5KFxuICAgIHN0YXRlbWVudDogUmFtU3RhdGVtZW50PGFueT4sXG4gICAgc2VsZWN0b3I6IE9yZGVyQnlTZWxlY3RvcltdXG4gICk6IE9yZGVyQnlDbGF1c2U8UmFtUXVlcnk8YW55Pj4ge1xuICAgIHJldHVybiBuZXcgUmFtT3JkZXJCeUNsYXVzZSh7XG4gICAgICBzdGF0ZW1lbnQ6IHN0YXRlbWVudCxcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHNlbGVjdG9yOiBTZWxlY3RTZWxlY3RvciB8IHVuZGVmaW5lZFxuICApOiBTZWxlY3RDbGF1c2U8UmFtUXVlcnk8YW55PiwgTT4ge1xuICAgIHJldHVybiBuZXcgUmFtU2VsZWN0Q2xhdXNlKHtcbiAgICAgIHN0YXRlbWVudDogbmV3IFJhbVN0YXRlbWVudCh0aGlzLmFkYXB0ZXIpLFxuICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgdmFsdWVzPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgc3RhdGVtZW50OiBSYW1TdGF0ZW1lbnQ8YW55PixcbiAgICB2YWx1ZXM6IE1bXVxuICApOiBWYWx1ZXNDbGF1c2U8UmFtUXVlcnk8YW55PiwgTT4ge1xuICAgIHJldHVybiBuZXcgUmFtVmFsdWVzQ2xhdXNlPE0+KHtcbiAgICAgIHN0YXRlbWVudDogc3RhdGVtZW50LFxuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgfSk7XG4gIH1cblxuICB3aGVyZShcbiAgICBzdGF0ZW1lbnQ6IFJhbVN0YXRlbWVudDxhbnk+LFxuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uXG4gICk6IFdoZXJlQ2xhdXNlPFJhbVF1ZXJ5PGFueT4+IHtcbiAgICByZXR1cm4gbmV3IFJhbVdoZXJlQ2xhdXNlKHtcbiAgICAgIHN0YXRlbWVudDogc3RhdGVtZW50LFxuICAgICAgY29uZGl0aW9uOiBjb25kaXRpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import { Context } from "@decaf-ts/db-decorators";
2
+ import { RamFlags } from "./types";
3
+ export declare class RamContext extends Context<RamFlags> {
4
+ constructor(obj: RamFlags);
5
+ }
@@ -0,0 +1,7 @@
1
+ import { Context } from "@decaf-ts/db-decorators";
2
+ export class RamContext extends Context {
3
+ constructor(obj) {
4
+ super(obj);
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYW0vUmFtQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbEQsTUFBTSxPQUFPLFVBQVcsU0FBUSxPQUFpQjtJQUMvQyxZQUFZLEdBQWE7UUFDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmFtRmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgUmFtQ29udGV4dCBleHRlbmRzIENvbnRleHQ8UmFtRmxhZ3M+IHtcbiAgY29uc3RydWN0b3Iob2JqOiBSYW1GbGFncykge1xuICAgIHN1cGVyKG9iaik7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { RamQuery } from "./types";
2
+ import { Paginator, Statement } from "../query";
3
+ export declare class RamPaginator<V> extends Paginator<V, RamQuery<any>> {
4
+ constructor(statement: Statement<RamQuery<any>>, size: number, rawStatement: RamQuery<any>);
5
+ protected prepare(rawStatement: RamQuery<any>): RamQuery<any>;
6
+ page(page?: number, ...args: any[]): Promise<V[]>;
7
+ }
@@ -0,0 +1,20 @@
1
+ import { Paginator } from "../query";
2
+ export class RamPaginator extends Paginator {
3
+ constructor(statement, size, rawStatement) {
4
+ super(statement, size, rawStatement);
5
+ }
6
+ prepare(rawStatement) {
7
+ const query = Object.assign({}, rawStatement);
8
+ query.limit = this.size;
9
+ return query;
10
+ }
11
+ async page(page = 1, ...args) {
12
+ page = this.validatePage(page);
13
+ const statement = this.prepare(this.statement);
14
+ statement.skip = (page - 1) * this.size;
15
+ const results = await this.adapter.raw(statement, false, ...args);
16
+ this._currentPage = page;
17
+ return results;
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtUGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhbS9SYW1QYWdpbmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLFVBQVUsQ0FBQztBQUVoRCxNQUFNLE9BQU8sWUFBZ0IsU0FBUSxTQUEyQjtJQUM5RCxZQUNFLFNBQW1DLEVBQ25DLElBQVksRUFDWixZQUEyQjtRQUUzQixLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsT0FBTyxDQUFDLFlBQTJCO1FBQzNDLE1BQU0sS0FBSyxHQUFrQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLENBQUMsRUFBRSxHQUFHLElBQVc7UUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFVLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJhbVF1ZXJ5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFBhZ2luYXRvciwgU3RhdGVtZW50IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBjbGFzcyBSYW1QYWdpbmF0b3I8Vj4gZXh0ZW5kcyBQYWdpbmF0b3I8ViwgUmFtUXVlcnk8YW55Pj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzdGF0ZW1lbnQ6IFN0YXRlbWVudDxSYW1RdWVyeTxhbnk+PixcbiAgICBzaXplOiBudW1iZXIsXG4gICAgcmF3U3RhdGVtZW50OiBSYW1RdWVyeTxhbnk+XG4gICkge1xuICAgIHN1cGVyKHN0YXRlbWVudCwgc2l6ZSwgcmF3U3RhdGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwYXJlKHJhd1N0YXRlbWVudDogUmFtUXVlcnk8YW55Pik6IFJhbVF1ZXJ5PGFueT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBSYW1RdWVyeTxhbnk+ID0gT2JqZWN0LmFzc2lnbih7fSwgcmF3U3RhdGVtZW50KTtcbiAgICBxdWVyeS5saW1pdCA9IHRoaXMuc2l6ZTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBhc3luYyBwYWdlKHBhZ2U6IG51bWJlciA9IDEsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxWW10+IHtcbiAgICBwYWdlID0gdGhpcy52YWxpZGF0ZVBhZ2UocGFnZSk7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5wcmVwYXJlKHRoaXMuc3RhdGVtZW50KTtcbiAgICBzdGF0ZW1lbnQuc2tpcCA9IChwYWdlIC0gMSkgKiB0aGlzLnNpemU7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHN0YXRlbWVudCwgZmFsc2UsIC4uLmFyZ3MpO1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufVxuIl19
@@ -0,0 +1,50 @@
1
+ import { Sequence as Seq } from "./model/RamSequence";
2
+ import { Sequence } from "../persistence";
3
+ import { SequenceOptions } from "../interfaces";
4
+ import { RamAdapter } from "./RamAdapter";
5
+ import { Repo } from "../repository";
6
+ export declare function parseSequenceValue(type: "Number" | "BigInt" | undefined, value: string | number | bigint): string | number | bigint;
7
+ /**
8
+ * @summary Abstract implementation of a Sequence
9
+ * @description provides the basic functionality for {@link Sequence}s
10
+ *
11
+ * @param {SequenceOptions} options
12
+ *
13
+ * @class CouchDBSequence
14
+ * @implements Sequence
15
+ *
16
+ * @category Sequences
17
+ */
18
+ export declare class RamSequence extends Sequence {
19
+ protected repo: Repo<Seq>;
20
+ constructor(options: SequenceOptions, adapter: RamAdapter);
21
+ /**
22
+ * @summary Retrieves the current value for the sequence
23
+ * @protected
24
+ */
25
+ current(): Promise<string | number | bigint>;
26
+ /**
27
+ * @summary Parses the {@link Sequence} value
28
+ *
29
+ * @protected
30
+ * @param value
31
+ */
32
+ private parse;
33
+ /**
34
+ * @summary increments the sequence
35
+ * @description Sequence specific implementation
36
+ *
37
+ * @param {string | number | bigint} current
38
+ * @param count
39
+ * @protected
40
+ */
41
+ private increment;
42
+ /**
43
+ * @summary Generates the next value in th sequence
44
+ * @description calls {@link Sequence#parse} on the current value
45
+ * followed by {@link Sequence#increment}
46
+ *
47
+ */
48
+ next(): Promise<number | string | bigint>;
49
+ range(count: number): Promise<(number | string | bigint)[]>;
50
+ }