@ditojs/server 0.275.0 → 1.0.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 (216) hide show
  1. package/package.json +25 -43
  2. package/src/app/Application.js +105 -111
  3. package/src/app/Validator.js +6 -3
  4. package/src/app/index.js +2 -2
  5. package/src/cli/db/createMigration.js +1 -1
  6. package/src/cli/db/index.js +7 -7
  7. package/src/cli/db/listAssetConfig.js +1 -1
  8. package/src/cli/db/reset.js +1 -1
  9. package/src/cli/index.js +14 -5
  10. package/src/controllers/AdminController.js +181 -158
  11. package/src/controllers/CollectionController.js +8 -29
  12. package/src/controllers/Controller.js +71 -76
  13. package/src/controllers/ControllerAction.js +39 -17
  14. package/src/controllers/MemberAction.js +2 -2
  15. package/src/controllers/ModelController.js +4 -4
  16. package/src/controllers/RelationController.js +3 -3
  17. package/src/controllers/{UserController.js → UsersController.js} +8 -13
  18. package/src/controllers/index.js +5 -5
  19. package/src/decorators/action.js +3 -3
  20. package/src/decorators/authorize.js +1 -1
  21. package/src/decorators/index.js +6 -6
  22. package/src/decorators/parameters.js +1 -1
  23. package/src/decorators/returns.js +1 -1
  24. package/src/decorators/scope.js +1 -1
  25. package/src/decorators/transacted.js +1 -1
  26. package/src/errors/AssetError.js +1 -1
  27. package/src/errors/AuthenticationError.js +1 -1
  28. package/src/errors/AuthorizationError.js +1 -1
  29. package/src/errors/ControllerError.js +1 -1
  30. package/src/errors/DatabaseError.js +12 -3
  31. package/src/errors/GraphError.js +1 -1
  32. package/src/errors/ModelError.js +1 -1
  33. package/src/errors/NotFoundError.js +1 -1
  34. package/src/errors/NotImplementedError.js +1 -1
  35. package/src/errors/QueryBuilderError.js +1 -1
  36. package/src/errors/RelationError.js +1 -1
  37. package/src/errors/ValidationError.js +1 -1
  38. package/src/errors/WrappedError.js +1 -1
  39. package/src/errors/index.js +14 -14
  40. package/src/graph/DitoGraphProcessor.js +2 -1
  41. package/src/graph/graph.js +1 -1
  42. package/src/graph/index.js +3 -3
  43. package/src/index.js +11 -9
  44. package/src/lib/index.js +2 -2
  45. package/src/middleware/createTransaction.js +1 -1
  46. package/src/middleware/findRoute.js +3 -2
  47. package/src/middleware/handleConnectMiddleware.js +88 -0
  48. package/src/middleware/handleError.js +1 -1
  49. package/src/middleware/handleRoute.js +3 -3
  50. package/src/middleware/index.js +8 -7
  51. package/src/mixins/AssetMixin.js +1 -1
  52. package/src/mixins/UserMixin.js +1 -1
  53. package/src/mixins/index.js +4 -4
  54. package/src/models/AssetModel.js +2 -2
  55. package/src/models/Model.js +16 -12
  56. package/src/models/RelationAccessor.js +1 -1
  57. package/src/models/SessionModel.js +2 -2
  58. package/src/models/TimeStampedModel.js +2 -2
  59. package/src/models/UserModel.js +2 -2
  60. package/src/models/definitions/assets.js +1 -1
  61. package/src/models/definitions/filters.js +57 -44
  62. package/src/models/definitions/hooks.js +1 -1
  63. package/src/models/definitions/index.js +9 -9
  64. package/src/models/definitions/modifiers.js +1 -1
  65. package/src/models/definitions/options.js +1 -1
  66. package/src/models/definitions/properties.js +2 -2
  67. package/src/models/definitions/relations.js +1 -1
  68. package/src/models/definitions/schema.js +1 -1
  69. package/src/models/definitions/scopes.js +2 -2
  70. package/src/models/index.js +5 -5
  71. package/src/query/QueryBuilder.js +5 -5
  72. package/src/query/QueryFilters.js +50 -50
  73. package/src/query/QueryParameters.js +2 -2
  74. package/src/query/index.js +3 -3
  75. package/src/schema/formats/index.js +2 -2
  76. package/src/schema/index.js +4 -4
  77. package/src/schema/keywords/_relate.js +1 -1
  78. package/src/schema/keywords/index.js +12 -12
  79. package/src/schema/properties.test.js +1 -1
  80. package/src/schema/relations.js +1 -1
  81. package/src/schema/relations.test.js +2 -2
  82. package/src/services/index.js +1 -1
  83. package/src/storage/DiskStorage.js +1 -1
  84. package/src/storage/S3Storage.js +4 -4
  85. package/src/storage/Storage.js +1 -1
  86. package/src/storage/index.js +4 -4
  87. package/src/utils/function.test.js +1 -1
  88. package/src/utils/handler.js +17 -0
  89. package/src/utils/index.js +8 -7
  90. package/src/utils/object.test.js +1 -1
  91. package/lib/app/Application.js +0 -961
  92. package/lib/app/SessionStore.js +0 -40
  93. package/lib/app/Validator.js +0 -355
  94. package/lib/app/index.js +0 -26
  95. package/lib/cli/console.js +0 -175
  96. package/lib/cli/db/createMigration.js +0 -237
  97. package/lib/cli/db/index.js +0 -66
  98. package/lib/cli/db/listAssetConfig.js +0 -16
  99. package/lib/cli/db/migrate.js +0 -15
  100. package/lib/cli/db/reset.js +0 -27
  101. package/lib/cli/db/rollback.js +0 -15
  102. package/lib/cli/db/seed.js +0 -104
  103. package/lib/cli/db/unlock.js +0 -15
  104. package/lib/cli/index.js +0 -90
  105. package/lib/controllers/AdminController.js +0 -258
  106. package/lib/controllers/CollectionController.js +0 -263
  107. package/lib/controllers/Controller.js +0 -462
  108. package/lib/controllers/ControllerAction.js +0 -276
  109. package/lib/controllers/MemberAction.js +0 -22
  110. package/lib/controllers/ModelController.js +0 -64
  111. package/lib/controllers/RelationController.js +0 -82
  112. package/lib/controllers/UserController.js +0 -98
  113. package/lib/controllers/index.js +0 -50
  114. package/lib/decorators/action.js +0 -14
  115. package/lib/decorators/authorize.js +0 -13
  116. package/lib/decorators/index.js +0 -58
  117. package/lib/decorators/parameters.js +0 -35
  118. package/lib/decorators/returns.js +0 -26
  119. package/lib/decorators/scope.js +0 -14
  120. package/lib/decorators/transacted.js +0 -12
  121. package/lib/errors/AssetError.js +0 -19
  122. package/lib/errors/AuthenticationError.js +0 -19
  123. package/lib/errors/AuthorizationError.js +0 -19
  124. package/lib/errors/ControllerError.js +0 -24
  125. package/lib/errors/DatabaseError.js +0 -27
  126. package/lib/errors/GraphError.js +0 -19
  127. package/lib/errors/ModelError.js +0 -24
  128. package/lib/errors/NotFoundError.js +0 -19
  129. package/lib/errors/NotImplementedError.js +0 -19
  130. package/lib/errors/QueryBuilderError.js +0 -19
  131. package/lib/errors/RelationError.js +0 -36
  132. package/lib/errors/ResponseError.js +0 -46
  133. package/lib/errors/ValidationError.js +0 -19
  134. package/lib/errors/WrappedError.js +0 -24
  135. package/lib/errors/index.js +0 -122
  136. package/lib/graph/DitoGraphProcessor.js +0 -185
  137. package/lib/graph/expression.js +0 -76
  138. package/lib/graph/graph.js +0 -300
  139. package/lib/graph/index.js +0 -34
  140. package/lib/index.js +0 -82
  141. package/lib/lib/EventEmitter.js +0 -76
  142. package/lib/lib/KnexHelper.js +0 -40
  143. package/lib/lib/index.js +0 -26
  144. package/lib/middleware/attachLogger.js +0 -16
  145. package/lib/middleware/createTransaction.js +0 -36
  146. package/lib/middleware/findRoute.js +0 -35
  147. package/lib/middleware/handleError.js +0 -26
  148. package/lib/middleware/handleRoute.js +0 -29
  149. package/lib/middleware/handleUser.js +0 -36
  150. package/lib/middleware/index.js +0 -66
  151. package/lib/middleware/logRequests.js +0 -122
  152. package/lib/mixins/AssetMixin.js +0 -81
  153. package/lib/mixins/SessionMixin.js +0 -22
  154. package/lib/mixins/TimeStampedMixin.js +0 -47
  155. package/lib/mixins/UserMixin.js +0 -151
  156. package/lib/mixins/index.js +0 -42
  157. package/lib/models/AssetModel.js +0 -12
  158. package/lib/models/Model.js +0 -953
  159. package/lib/models/RelationAccessor.js +0 -41
  160. package/lib/models/SessionModel.js +0 -12
  161. package/lib/models/TimeStampedModel.js +0 -12
  162. package/lib/models/UserModel.js +0 -12
  163. package/lib/models/definitions/assets.js +0 -11
  164. package/lib/models/definitions/filters.js +0 -101
  165. package/lib/models/definitions/hooks.js +0 -11
  166. package/lib/models/definitions/index.js +0 -38
  167. package/lib/models/definitions/modifiers.js +0 -11
  168. package/lib/models/definitions/options.js +0 -11
  169. package/lib/models/definitions/properties.js +0 -87
  170. package/lib/models/definitions/relations.js +0 -11
  171. package/lib/models/definitions/schema.js +0 -11
  172. package/lib/models/definitions/scopes.js +0 -51
  173. package/lib/models/index.js +0 -50
  174. package/lib/query/QueryBuilder.js +0 -745
  175. package/lib/query/QueryFilters.js +0 -82
  176. package/lib/query/QueryParameters.js +0 -77
  177. package/lib/query/Registry.js +0 -40
  178. package/lib/query/index.js +0 -34
  179. package/lib/schema/formats/_empty.js +0 -10
  180. package/lib/schema/formats/_required.js +0 -10
  181. package/lib/schema/formats/index.js +0 -26
  182. package/lib/schema/index.js +0 -49
  183. package/lib/schema/keywords/_computed.js +0 -11
  184. package/lib/schema/keywords/_foreign.js +0 -11
  185. package/lib/schema/keywords/_hidden.js +0 -11
  186. package/lib/schema/keywords/_index.js +0 -11
  187. package/lib/schema/keywords/_instanceof.js +0 -49
  188. package/lib/schema/keywords/_primary.js +0 -11
  189. package/lib/schema/keywords/_range.js +0 -26
  190. package/lib/schema/keywords/_relate.js +0 -19
  191. package/lib/schema/keywords/_specificType.js +0 -11
  192. package/lib/schema/keywords/_unique.js +0 -11
  193. package/lib/schema/keywords/_unsigned.js +0 -11
  194. package/lib/schema/keywords/_validate.js +0 -80
  195. package/lib/schema/keywords/index.js +0 -106
  196. package/lib/schema/properties.js +0 -227
  197. package/lib/schema/properties.test.js +0 -573
  198. package/lib/schema/relations.js +0 -274
  199. package/lib/schema/relations.test.js +0 -155
  200. package/lib/services/Service.js +0 -34
  201. package/lib/services/index.js +0 -18
  202. package/lib/storage/AssetFile.js +0 -97
  203. package/lib/storage/DiskStorage.js +0 -125
  204. package/lib/storage/S3Storage.js +0 -171
  205. package/lib/storage/Storage.js +0 -209
  206. package/lib/storage/index.js +0 -34
  207. package/lib/utils/decorator.js +0 -16
  208. package/lib/utils/deprecate.js +0 -46
  209. package/lib/utils/emitter.js +0 -13
  210. package/lib/utils/function.js +0 -14
  211. package/lib/utils/function.test.js +0 -49
  212. package/lib/utils/index.js +0 -66
  213. package/lib/utils/json.js +0 -9
  214. package/lib/utils/object.js +0 -92
  215. package/lib/utils/object.test.js +0 -65
  216. package/lib/utils/scope.js +0 -14
@@ -1,300 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.ensureModel = ensureModel;
5
- exports.ensureModelArray = ensureModelArray;
6
- exports.filterGraph = filterGraph;
7
- exports.populateGraph = populateGraph;
8
- exports.walkGraph = walkGraph;
9
-
10
- require("core-js/modules/esnext.async-iterator.map.js");
11
-
12
- require("core-js/modules/esnext.iterator.map.js");
13
-
14
- require("core-js/modules/esnext.map.delete-all.js");
15
-
16
- require("core-js/modules/esnext.map.emplace.js");
17
-
18
- require("core-js/modules/esnext.map.every.js");
19
-
20
- require("core-js/modules/esnext.map.filter.js");
21
-
22
- require("core-js/modules/esnext.map.find.js");
23
-
24
- require("core-js/modules/esnext.map.find-key.js");
25
-
26
- require("core-js/modules/esnext.map.includes.js");
27
-
28
- require("core-js/modules/esnext.map.key-of.js");
29
-
30
- require("core-js/modules/esnext.map.map-keys.js");
31
-
32
- require("core-js/modules/esnext.map.map-values.js");
33
-
34
- require("core-js/modules/esnext.map.merge.js");
35
-
36
- require("core-js/modules/esnext.map.reduce.js");
37
-
38
- require("core-js/modules/esnext.map.some.js");
39
-
40
- require("core-js/modules/esnext.map.update.js");
41
-
42
- require("core-js/modules/esnext.async-iterator.reduce.js");
43
-
44
- require("core-js/modules/esnext.iterator.constructor.js");
45
-
46
- require("core-js/modules/esnext.iterator.reduce.js");
47
-
48
- require("core-js/modules/esnext.async-iterator.filter.js");
49
-
50
- require("core-js/modules/esnext.iterator.filter.js");
51
-
52
- var _utils = require("@ditojs/utils");
53
-
54
- var _query = require("../query");
55
-
56
- var _expression = require("./expression.js");
57
-
58
- function ensureModel(modelClass, model, options) {
59
- return !model ? null : model instanceof modelClass ? parseRelationsIntoModelInstances(model, model, options) : modelClass.fromJson(model, options);
60
- }
61
-
62
- function ensureModelArray(modelClass, data, options) {
63
- return data ? (0, _utils.asArray)(data).map(model => ensureModel(modelClass, model, options)) : [];
64
- }
65
-
66
- function parseRelationsIntoModelInstances(model, json, options = {}) {
67
- if (!options.cache) {
68
- options = { ...options,
69
- cache: new Map()
70
- };
71
- }
72
-
73
- options.cache.set(json, model);
74
-
75
- for (const relationName of model.constructor.getRelationNames()) {
76
- const jsonRelation = json[relationName];
77
-
78
- if (jsonRelation !== undefined) {
79
- const relation = model.constructor.getRelation(relationName);
80
- const parsedRelation = parseRelation(jsonRelation, relation, options);
81
-
82
- if (parsedRelation !== jsonRelation) {
83
- model[relation.name] = parsedRelation;
84
- }
85
- }
86
- }
87
-
88
- return model;
89
- }
90
-
91
- function parseRelation(json, relation, options) {
92
- return (0, _utils.isArray)(json) ? parseRelationArray(json, relation, options) : parseRelationObject(json, relation, options);
93
- }
94
-
95
- function parseRelationArray(json, relation, options) {
96
- const models = new Array(json.length);
97
- let changed = false;
98
-
99
- for (let i = 0, l = json.length; i < l; i++) {
100
- const model = parseRelationObject(json[i], relation, options);
101
- changed = changed || model !== json[i];
102
- models[i] = model;
103
- }
104
-
105
- return changed ? models : json;
106
- }
107
-
108
- function parseRelationObject(json, relation, options) {
109
- if ((0, _utils.isObject)(json)) {
110
- const modelClass = relation.relatedModelClass;
111
- let model = options.cache.get(json);
112
-
113
- if (model === undefined) {
114
- if (json instanceof modelClass) {
115
- model = parseRelationsIntoModelInstances(json, json, options);
116
- } else {
117
- model = modelClass.fromJson(json, options);
118
- }
119
- }
120
-
121
- return model;
122
- }
123
-
124
- return json;
125
- }
126
-
127
- function walkGraph(data, callback, path = []) {
128
- if ((0, _utils.isObject)(data) || (0, _utils.isArray)(data)) {
129
- for (const [key, value] of Object.entries(data)) {
130
- const dataPath = [...path, key];
131
- callback(value, dataPath, data, key);
132
- walkGraph(value, callback, dataPath);
133
- }
134
- }
135
- }
136
-
137
- function filterGraph(rootModelClass, modelGraph, expr) {
138
- expr = _query.QueryBuilder.parseRelationExpression(expr);
139
- const models = ensureModelArray(rootModelClass, modelGraph, {
140
- skipValidation: true
141
- });
142
-
143
- for (const model of models) {
144
- if (model) {
145
- const relations = model.constructor.getRelations();
146
-
147
- for (const key of Object.keys(model)) {
148
- const relation = relations[key];
149
-
150
- if (relation) {
151
- const child = expr[key];
152
-
153
- if (child) {
154
- filterGraph(relation.relatedModelClass, model[key], child);
155
- } else {
156
- delete model[key];
157
- }
158
- }
159
- }
160
- }
161
- }
162
-
163
- return modelGraph;
164
- }
165
-
166
- async function populateGraph(rootModelClass, graph, expr, trx) {
167
- expr = _query.QueryBuilder.parseRelationExpression(expr);
168
- const grouped = {};
169
-
170
- const addToGroup = (item, modelClass, isReference, modify, relation, expr) => {
171
- const id = item.$id();
172
-
173
- if (id != null) {
174
- const key = `${modelClass.name}_${modify}_${expr || ''}`;
175
- const group = grouped[key] || (grouped[key] = {
176
- modelClass,
177
- modify,
178
- relation,
179
- expr,
180
- targets: [],
181
- ids: [],
182
- modelsById: {}
183
- });
184
- group.targets.push({
185
- item,
186
- isReference
187
- });
188
- group.ids.push(id);
189
- }
190
- };
191
-
192
- for (const path of (0, _expression.collectExpressionPaths)(expr)) {
193
- let modelClass = rootModelClass;
194
- const modelClasses = [];
195
- let lastModify;
196
-
197
- for (const entry of path) {
198
- modelClasses.push(modelClass);
199
- modelClass = modelClass.getRelation(entry.relation).relatedModelClass;
200
- lastModify = entry.modify;
201
- }
202
-
203
- for (const model of (0, _utils.asArray)(graph)) {
204
- if (model) {
205
- let items = (0, _utils.asArray)(model);
206
-
207
- for (let i = 0, l = path.length; i < l; i++) {
208
- if (items.length === 0) break;
209
- const {
210
- relation
211
- } = path[i];
212
- const modelClass = modelClasses[i];
213
- items = items.reduce((items, item) => {
214
- item = ensureModel(modelClass, item, {
215
- skipValidation: true
216
- });
217
- let add = false;
218
- const isReference = modelClass.isReference(item);
219
-
220
- if (isReference) {
221
- add = true;
222
- } else {
223
- const value = item[relation];
224
-
225
- if (value != null) {
226
- items.push(...(0, _utils.asArray)(value));
227
- } else if (value === undefined) {
228
- add = true;
229
- }
230
- }
231
-
232
- if (add) {
233
- const modify = i > 0 ? path[i - 1].modify : null;
234
- const expr = (0, _expression.expressionPathToString)(path, i);
235
- addToGroup(item, modelClass, isReference, modify, relation, expr);
236
- }
237
-
238
- return items;
239
- }, []);
240
- }
241
-
242
- for (const item of items) {
243
- if (modelClass.isReference(item)) {
244
- addToGroup(item, modelClass, true, lastModify);
245
- }
246
- }
247
- }
248
- }
249
- }
250
-
251
- const groups = Object.values(grouped).filter(({
252
- ids
253
- }) => ids.length > 0);
254
-
255
- if (groups.length > 0) {
256
- await Promise.all(groups.map(async ({
257
- modelClass,
258
- modify,
259
- expr,
260
- ids,
261
- modelsById
262
- }) => {
263
- const query = modelClass.query(trx).findByIds(ids).modify(modify);
264
-
265
- if (expr) {
266
- query.withGraph(expr);
267
- }
268
-
269
- const models = await query;
270
-
271
- for (const model of models) {
272
- modelsById[model.$id()] = model;
273
- }
274
- }));
275
-
276
- for (const {
277
- targets,
278
- modelsById,
279
- relation
280
- } of groups) {
281
- for (const {
282
- item,
283
- isReference
284
- } of targets) {
285
- const model = modelsById[item.$id()];
286
-
287
- if (model) {
288
- if (isReference) {
289
- Object.assign(item, model);
290
- } else {
291
- item[relation] = model[relation];
292
- }
293
- }
294
- }
295
- }
296
- }
297
-
298
- return graph;
299
- }
300
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ncmFwaC9ncmFwaC5qcyJdLCJuYW1lcyI6WyJlbnN1cmVNb2RlbCIsIm1vZGVsQ2xhc3MiLCJtb2RlbCIsIm9wdGlvbnMiLCJwYXJzZVJlbGF0aW9uc0ludG9Nb2RlbEluc3RhbmNlcyIsImZyb21Kc29uIiwiZW5zdXJlTW9kZWxBcnJheSIsImRhdGEiLCJtYXAiLCJqc29uIiwiY2FjaGUiLCJNYXAiLCJzZXQiLCJyZWxhdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsImdldFJlbGF0aW9uTmFtZXMiLCJqc29uUmVsYXRpb24iLCJ1bmRlZmluZWQiLCJyZWxhdGlvbiIsImdldFJlbGF0aW9uIiwicGFyc2VkUmVsYXRpb24iLCJwYXJzZVJlbGF0aW9uIiwibmFtZSIsInBhcnNlUmVsYXRpb25BcnJheSIsInBhcnNlUmVsYXRpb25PYmplY3QiLCJtb2RlbHMiLCJBcnJheSIsImxlbmd0aCIsImNoYW5nZWQiLCJpIiwibCIsInJlbGF0ZWRNb2RlbENsYXNzIiwiZ2V0Iiwid2Fsa0dyYXBoIiwiY2FsbGJhY2siLCJwYXRoIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZGF0YVBhdGgiLCJmaWx0ZXJHcmFwaCIsInJvb3RNb2RlbENsYXNzIiwibW9kZWxHcmFwaCIsImV4cHIiLCJRdWVyeUJ1aWxkZXIiLCJwYXJzZVJlbGF0aW9uRXhwcmVzc2lvbiIsInNraXBWYWxpZGF0aW9uIiwicmVsYXRpb25zIiwiZ2V0UmVsYXRpb25zIiwia2V5cyIsImNoaWxkIiwicG9wdWxhdGVHcmFwaCIsImdyYXBoIiwidHJ4IiwiZ3JvdXBlZCIsImFkZFRvR3JvdXAiLCJpdGVtIiwiaXNSZWZlcmVuY2UiLCJtb2RpZnkiLCJpZCIsIiRpZCIsImdyb3VwIiwidGFyZ2V0cyIsImlkcyIsIm1vZGVsc0J5SWQiLCJwdXNoIiwibW9kZWxDbGFzc2VzIiwibGFzdE1vZGlmeSIsImVudHJ5IiwiaXRlbXMiLCJyZWR1Y2UiLCJhZGQiLCJncm91cHMiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJQcm9taXNlIiwiYWxsIiwicXVlcnkiLCJmaW5kQnlJZHMiLCJ3aXRoR3JhcGgiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdPLFNBQVNBLFdBQVQsQ0FBcUJDLFVBQXJCLEVBQWlDQyxLQUFqQyxFQUF3Q0MsT0FBeEMsRUFBaUQ7QUFDdEQsU0FBTyxDQUFDRCxLQUFELEdBQ0gsSUFERyxHQUVIQSxLQUFLLFlBQVlELFVBQWpCLEdBQ0VHLGdDQUFnQyxDQUFDRixLQUFELEVBQVFBLEtBQVIsRUFBZUMsT0FBZixDQURsQyxHQUVFRixVQUFVLENBQUNJLFFBQVgsQ0FBb0JILEtBQXBCLEVBQTJCQyxPQUEzQixDQUpOO0FBS0Q7O0FBR00sU0FBU0csZ0JBQVQsQ0FBMEJMLFVBQTFCLEVBQXNDTSxJQUF0QyxFQUE0Q0osT0FBNUMsRUFBcUQ7QUFDMUQsU0FBT0ksSUFBSSxHQUNQLG9CQUFRQSxJQUFSLEVBQWNDLEdBQWQsQ0FBa0JOLEtBQUssSUFBSUYsV0FBVyxDQUFDQyxVQUFELEVBQWFDLEtBQWIsRUFBb0JDLE9BQXBCLENBQXRDLENBRE8sR0FFUCxFQUZKO0FBR0Q7O0FBRUQsU0FBU0MsZ0NBQVQsQ0FBMENGLEtBQTFDLEVBQWlETyxJQUFqRCxFQUF1RE4sT0FBTyxHQUFHLEVBQWpFLEVBQXFFO0FBQ25FLE1BQUksQ0FBQ0EsT0FBTyxDQUFDTyxLQUFiLEVBQW9CO0FBQ2xCUCxJQUFBQSxPQUFPLEdBQUcsRUFBRSxHQUFHQSxPQUFMO0FBQWNPLE1BQUFBLEtBQUssRUFBRSxJQUFJQyxHQUFKO0FBQXJCLEtBQVY7QUFDRDs7QUFDRFIsRUFBQUEsT0FBTyxDQUFDTyxLQUFSLENBQWNFLEdBQWQsQ0FBa0JILElBQWxCLEVBQXdCUCxLQUF4Qjs7QUFFQSxPQUFLLE1BQU1XLFlBQVgsSUFBMkJYLEtBQUssQ0FBQ1ksV0FBTixDQUFrQkMsZ0JBQWxCLEVBQTNC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R0FBTCxFQUFELENBQXhCOztBQUNBLFlBQUkzRCxLQUFKLEVBQVc7QUFDVCxjQUFJd0QsV0FBSixFQUFpQjtBQUVmcEIsWUFBQUEsTUFBTSxDQUFDMkMsTUFBUCxDQUFjeEIsSUFBZCxFQUFvQnZELEtBQXBCO0FBQ0QsV0FIRCxNQUdPO0FBRUx1RCxZQUFBQSxJQUFJLENBQUN2QyxRQUFELENBQUosR0FBaUJoQixLQUFLLENBQUNnQixRQUFELENBQXRCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPbUMsS0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNPYmplY3QsIGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSAnQC9xdWVyeSdcbmltcG9ydCB7IGNvbGxlY3RFeHByZXNzaW9uUGF0aHMsIGV4cHJlc3Npb25QYXRoVG9TdHJpbmcgfSBmcm9tICcuL2V4cHJlc3Npb24uanMnXG5cbi8vIFNpbWlsYXIgdG8gT2JqZWN0aW9uJ3MgcHJpdmF0ZSBgbW9kZWxDbGFzcy5lbnN1cmVNb2RlbChtb2RlbClgOlxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU1vZGVsKG1vZGVsQ2xhc3MsIG1vZGVsLCBvcHRpb25zKSB7XG4gIHJldHVybiAhbW9kZWxcbiAgICA/IG51bGxcbiAgICA6IG1vZGVsIGluc3RhbmNlb2YgbW9kZWxDbGFzc1xuICAgICAgPyBwYXJzZVJlbGF0aW9uc0ludG9Nb2RlbEluc3RhbmNlcyhtb2RlbCwgbW9kZWwsIG9wdGlvbnMpXG4gICAgICA6IG1vZGVsQ2xhc3MuZnJvbUpzb24obW9kZWwsIG9wdGlvbnMpXG59XG5cbi8vIFNpbWlsYXIgdG8gT2JqZWN0aW9uJ3MgcHJpdmF0ZSBgbW9kZWxDbGFzcy5lbnN1cmVNb2RlbEFycmF5KGRhdGEpYDpcbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVNb2RlbEFycmF5KG1vZGVsQ2xhc3MsIGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRhdGFcbiAgICA/IGFzQXJyYXkoZGF0YSkubWFwKG1vZGVsID0+IGVuc3VyZU1vZGVsKG1vZGVsQ2xhc3MsIG1vZGVsLCBvcHRpb25zKSlcbiAgICA6IFtdXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpb25zSW50b01vZGVsSW5zdGFuY2VzKG1vZGVsLCBqc29uLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKCFvcHRpb25zLmNhY2hlKSB7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgY2FjaGU6IG5ldyBNYXAoKSB9XG4gIH1cbiAgb3B0aW9ucy5jYWNoZS5zZXQoanNvbiwgbW9kZWwpXG5cbiAgZm9yIChjb25zdCByZWxhdGlvbk5hbWUgb2YgbW9kZWwuY29uc3RydWN0b3IuZ2V0UmVsYXRpb25OYW1lcygpKSB7XG4gICAgY29uc3QganNvblJlbGF0aW9uID0ganNvbltyZWxhdGlvbk5hbWVdXG4gICAgaWYgKGpzb25SZWxhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZWxhdGlvbiA9IG1vZGVsLmNvbnN0cnVjdG9yLmdldFJlbGF0aW9uKHJlbGF0aW9uTmFtZSlcbiAgICAgIGNvbnN0IHBhcnNlZFJlbGF0aW9uID0gcGFyc2VSZWxhdGlvbihqc29uUmVsYXRpb24sIHJlbGF0aW9uLCBvcHRpb25zKVxuICAgICAgaWYgKHBhcnNlZFJlbGF0aW9uICE9PSBqc29uUmVsYXRpb24pIHtcbiAgICAgICAgbW9kZWxbcmVsYXRpb24ubmFtZV0gPSBwYXJzZWRSZWxhdGlvblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlbFxufVxuXG5mdW5jdGlvbiBwYXJzZVJlbGF0aW9uKGpzb24sIHJlbGF0aW9uLCBvcHRpb25zKSB7XG4gIHJldHVybiBpc0FycmF5KGpzb24pXG4gICAgPyBwYXJzZVJlbGF0aW9uQXJyYXkoanNvbiwgcmVsYXRpb24sIG9wdGlvbnMpXG4gICAgOiBwYXJzZVJlbGF0aW9uT2JqZWN0KGpzb24sIHJlbGF0aW9uLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlbGF0aW9uQXJyYXkoanNvbiwgcmVsYXRpb24sIG9wdGlvbnMpIHtcbiAgY29uc3QgbW9kZWxzID0gbmV3IEFycmF5KGpzb24ubGVuZ3RoKVxuICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gIGZvciAobGV0IGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBtb2RlbCA9IHBhcnNlUmVsYXRpb25PYmplY3QoanNvbltpXSwgcmVsYXRpb24sIG9wdGlvbnMpXG4gICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgKG1vZGVsICE9PSBqc29uW2ldKVxuICAgIG1vZGVsc1tpXSA9IG1vZGVsXG4gIH1cbiAgcmV0dXJuIGNoYW5nZWQgPyBtb2RlbHMgOiBqc29uXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpb25PYmplY3QoanNvbiwgcmVsYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KGpzb24pKSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgbGV0IG1vZGVsID0gb3B0aW9ucy5jYWNoZS5nZXQoanNvbilcbiAgICBpZiAobW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGpzb24gaW5zdGFuY2VvZiBtb2RlbENsYXNzKSB7XG4gICAgICAgIG1vZGVsID0gcGFyc2VSZWxhdGlvbnNJbnRvTW9kZWxJbnN0YW5jZXMoanNvbiwganNvbiwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZGVsID0gbW9kZWxDbGFzcy5mcm9tSnNvbihqc29uLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxcbiAgfVxuICByZXR1cm4ganNvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Fsa0dyYXBoKGRhdGEsIGNhbGxiYWNrLCBwYXRoID0gW10pIHtcbiAgaWYgKGlzT2JqZWN0KGRhdGEpIHx8IGlzQXJyYXkoZGF0YSkpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVBhdGggPSBbLi4ucGF0aCwga2V5XVxuICAgICAgY2FsbGJhY2sodmFsdWUsIGRhdGFQYXRoLCBkYXRhLCBrZXkpXG4gICAgICB3YWxrR3JhcGgodmFsdWUsIGNhbGxiYWNrLCBkYXRhUGF0aClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdyYXBoKHJvb3RNb2RlbENsYXNzLCBtb2RlbEdyYXBoLCBleHByKSB7XG4gIGV4cHIgPSBRdWVyeUJ1aWxkZXIucGFyc2VSZWxhdGlvbkV4cHJlc3Npb24oZXhwcilcbiAgY29uc3QgbW9kZWxzID0gZW5zdXJlTW9kZWxBcnJheShyb290TW9kZWxDbGFzcywgbW9kZWxHcmFwaCwge1xuICAgIHNraXBWYWxpZGF0aW9uOiB0cnVlXG4gIH0pXG4gIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnMgPSBtb2RlbC5jb25zdHJ1Y3Rvci5nZXRSZWxhdGlvbnMoKVxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uID0gcmVsYXRpb25zW2tleV1cbiAgICAgICAgaWYgKHJlbGF0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBleHByW2tleV1cbiAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIC8vIEFsbG93ZWQgcmVsYXRpb24sIGtlZXAgZmlsdGVyaW5nIHJlY3Vyc2l2ZWx5OlxuICAgICAgICAgICAgZmlsdGVyR3JhcGgoXG4gICAgICAgICAgICAgIHJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzLFxuICAgICAgICAgICAgICBtb2RlbFtrZXldLFxuICAgICAgICAgICAgICBjaGlsZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNhbGxvd2VkIHJlbGF0aW9uLCBkZWxldGU6XG4gICAgICAgICAgICBkZWxldGUgbW9kZWxba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kZWxHcmFwaFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVHcmFwaChyb290TW9kZWxDbGFzcywgZ3JhcGgsIGV4cHIsIHRyeCkge1xuICAvLyBUT0RPOiBPcHRpbWl6ZSB0aGUgc2NlbmFyaW8gd2hlcmUgYW4gaXRlbSB0aGF0IGlzbid0IGEgbGVhZiBpcyBhXG4gIC8vIHJlZmVyZW5jZSBhbmQgaGFzIG11bHRpcGxlIHN1Yi1wYXRocyB0byBiZSBwb3B1bGF0ZWQuIFdlIG1heSBuZWVkIHRvXG4gIC8vIG1vdmUgYXdheSBmcm9tIGdyYXBoIHBhdGggaGFuZGxpbmcgYW5kIGRpcmVjdGx5IHByb2Nlc3MgdGhlIGV4cHJlc3Npb25cbiAgLy8gdHJlZSwgY29tcG9zaW5nIHBhdGhzIHRvIHRoZSBjdXJyZW50IHBsYWNlIG9uIHRoZSBmbHksIGFuZCBwcm9jZXNzIGRhdGFcbiAgLy8gd2l0aCBhZGRUb0dyb3VwKCkuIFRoZW4gdXNlIHRoZSBzdWItdHJlZSBhcyBncmFwaCBleHByZXNzaW9uIHdoZW5cbiAgLy8gZW5jb3VudGVyaW5nIHJlZmVyZW5jZXMgKG5lZWRzIHRvU3RyaW5nKCkgZm9yIGNhY2hpbmcgYWxzbz8pXG4gIC8vIFRPRE86IEJldHRlciBpZGVhOiBGaXJzdCBjYWNoZSBncm91cHMgYnkgdGhlIHBhdGggdXAgdG8gdGhlaXIgbG9jYXRpb24gaW5cbiAgLy8gdGhlIGdyYXBoLCBhbmQgY29sbGVjdCBtb2RpZnkgKyBncmFwaCBleHByZXNzaW9ucyB0aGVyZSBmb3IgcmVmZXJlbmNlc1xuICAvLyB0aGF0IGFyZSBub3QgbGVhdmVzLiBUaGVuIHVzZSB0aGUgcmVzdWx0aW5nIG5vZGVzIHRvIGNyZWF0ZSBuZXcgZ3JvdXBzIGJ5XG4gIC8vIG1vZGVsIG5hbWUgLyBtb2RpZnkgLyBncmFwaCBleHByZXNzaW9ucy5cbiAgZXhwciA9IFF1ZXJ5QnVpbGRlci5wYXJzZVJlbGF0aW9uRXhwcmVzc2lvbihleHByKVxuICAvLyBDb252ZXJ0IHRoZSByZWxhdGlvbiBleHByZXNzaW9uIHRvIGFuIGFycmF5IG9mIHBhdGhzLCB0aGF0IHRoZW1zZWx2ZXNcbiAgLy8gY29udGFpbiBwYXRoIGVudHJpZXMgd2l0aCByZWxhdGlvbiBuYW1lcyBhbmQgbW9kaWZ5IHNldHRpbmdzLlxuXG4gIGNvbnN0IGdyb3VwZWQgPSB7fVxuICBjb25zdCBhZGRUb0dyb3VwID1cbiAgICAoaXRlbSwgbW9kZWxDbGFzcywgaXNSZWZlcmVuY2UsIG1vZGlmeSwgcmVsYXRpb24sIGV4cHIpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbS4kaWQoKVxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgLy8gR3JvdXAgbW9kZWxzIGJ5IG1vZGVsLW5hbWUgKyBtb2RpZnkgKyBleHByLCBmb3IgZmFzdGVyIGxvYWRpbmc6XG4gICAgICAgIGNvbnN0IGtleSA9IGAke21vZGVsQ2xhc3MubmFtZX1fJHttb2RpZnl9XyR7ZXhwciB8fCAnJ31gXG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZFtrZXldIHx8IChncm91cGVkW2tleV0gPSB7XG4gICAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RpZnksXG4gICAgICAgICAgcmVsYXRpb24sXG4gICAgICAgICAgZXhwcixcbiAgICAgICAgICB0YXJnZXRzOiBbXSxcbiAgICAgICAgICBpZHM6IFtdLFxuICAgICAgICAgIG1vZGVsc0J5SWQ6IHt9XG4gICAgICAgIH0pXG4gICAgICAgIGdyb3VwLnRhcmdldHMucHVzaCh7IGl0ZW0sIGlzUmVmZXJlbmNlIH0pXG4gICAgICAgIC8vIENvbGxlY3QgaWRzIHRvIGJlIGxvYWRlZCBmb3IgdGhlIHRhcmdldHMuXG4gICAgICAgIGdyb3VwLmlkcy5wdXNoKGlkKVxuICAgICAgfVxuICAgIH1cblxuICBmb3IgKGNvbnN0IHBhdGggb2YgY29sbGVjdEV4cHJlc3Npb25QYXRocyhleHByKSkge1xuICAgIGxldCBtb2RlbENsYXNzID0gcm9vdE1vZGVsQ2xhc3NcbiAgICBjb25zdCBtb2RlbENsYXNzZXMgPSBbXVxuICAgIGxldCBsYXN0TW9kaWZ5XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwYXRoKSB7XG4gICAgICBtb2RlbENsYXNzZXMucHVzaChtb2RlbENsYXNzKVxuICAgICAgbW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb24oZW50cnkucmVsYXRpb24pLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgICBsYXN0TW9kaWZ5ID0gZW50cnkubW9kaWZ5XG4gICAgfVxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgYXNBcnJheShncmFwaCkpIHtcbiAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICBsZXQgaXRlbXMgPSBhc0FycmF5KG1vZGVsKVxuICAgICAgICAvLyBDb2xsZWN0IGFsbCBncmFwaCBpdGVtcyBkZXNjcmliZWQgYnkgdGhlIGN1cnJlbnQgcmVsYXRpb24gcGF0aCBpblxuICAgICAgICAvLyBvbmUgbG9vcDpcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXRoLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIGJyZWFrXG4gICAgICAgICAgY29uc3QgeyByZWxhdGlvbiB9ID0gcGF0aFtpXVxuICAgICAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzZXNbaV1cbiAgICAgICAgICBpdGVtcyA9IGl0ZW1zLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0gPSBlbnN1cmVNb2RlbChtb2RlbENsYXNzLCBpdGVtLCB7IHNraXBWYWxpZGF0aW9uOiB0cnVlIH0pXG4gICAgICAgICAgICBsZXQgYWRkID0gZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlID0gbW9kZWxDbGFzcy5pc1JlZmVyZW5jZShpdGVtKVxuICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGVkIGEgcmVmZXJlbmNlIGl0ZW0gdGhhdCBpc24ndCBhIGxlYWY6IFdlIG5lZWQgdG9cbiAgICAgICAgICAgICAgLy8gZWFnZXItbG9hZCB0aGUgcmVzdCBvZiB0aGUgcGF0aCwgYW5kIHJlc3BlY3QgbW9kaWZ5IHNldHRpbmdzLlxuICAgICAgICAgICAgICBhZGQgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bcmVsYXRpb25dXG4gICAgICAgICAgICAgIC8vIEFkZCB0aGUgbW9kZWxzIG9mIHRoaXMgcmVsYXRpb24gdG8gaXRlbXMsIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIGZpbHRlcmVkIGZ1cnRoZXIgaW4gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoaXMgbG9vcC5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmFzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZnVsbCByZWxhdGlvbiBpcyBtaXNzaW5nIHRyeSBlYWdlci1sb2FkaW5nIGl0LlxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFZhbHVlcyBvZiBgbnVsbGAgYXJlIHJlc3BlY3RlZCBoZXJlLCBub3QgbG9hZGVkIGFnYWluLlxuICAgICAgICAgICAgICAgIGFkZCA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgICAvLyBgcGF0aFtpXS5tb2RpZnlgIGlzIHRoZSBjdXJyZW50IHJlbGF0aW9uJ3MgbW9kaWZ5IGV4cHJlc3Npb24sXG4gICAgICAgICAgICAgIC8vIGdldCB0aGUgcGFyZW50IG9uZSBmb3IgYG1vZGVsQ2xhc3NgOlxuICAgICAgICAgICAgICBjb25zdCBtb2RpZnkgPSBpID4gMCA/IHBhdGhbaSAtIDFdLm1vZGlmeSA6IG51bGxcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IGV4cHJlc3Npb25QYXRoVG9TdHJpbmcocGF0aCwgaSlcbiAgICAgICAgICAgICAgYWRkVG9Hcm91cChpdGVtLCBtb2RlbENsYXNzLCBpc1JlZmVyZW5jZSwgbW9kaWZ5LCByZWxhdGlvbiwgZXhwcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAgIH0sIFtdKVxuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCBhbGwgZW5jb3VudGVyZWQgbGVhZi1yZWZlcmVuY2VzIHRvIGdyb3VwcyB0byBiZSBsb2FkZWQuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgIC8vIE9ubHkgbG9hZCBsZWFmcyB0aGF0IGFyZSByZWZlcmVuY2VzLlxuICAgICAgICAgIGlmIChtb2RlbENsYXNzLmlzUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICBhZGRUb0dyb3VwKGl0ZW0sIG1vZGVsQ2xhc3MsIHRydWUsIGxhc3RNb2RpZnkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LnZhbHVlcyhncm91cGVkKS5maWx0ZXIoKHsgaWRzIH0pID0+IGlkcy5sZW5ndGggPiAwKVxuICBpZiAoZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBMb2FkIGFsbCBmb3VuZCBtb2RlbHMgYnkgaWRzIGFzeW5jaHJvbm91c2x5LCB3aXRoaW4gcHJvdmlkZWQgdHJhbnNhY3Rpb24uXG4gICAgLy8gTk9URTogVXNpbmcgdGhlIHNhbWUgdHJhbnNhY3Rpb24gbWVhbnMgdGhhdCBhbGwgaW52b2x2ZWQgdGFibGVzIG5lZWQgdG9cbiAgICAvLyBiZSBpbiB0aGUgc2FtZSBkYXRhYmFzZS5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGdyb3Vwcy5tYXAoYXN5bmMgKHsgbW9kZWxDbGFzcywgbW9kaWZ5LCBleHByLCBpZHMsIG1vZGVsc0J5SWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG1vZGVsQ2xhc3MucXVlcnkodHJ4KS5maW5kQnlJZHMoaWRzKS5tb2RpZnkobW9kaWZ5KVxuICAgICAgICBpZiAoZXhwcikge1xuICAgICAgICAgIC8vIFRPRE86IE1ha2UgYWxnb3JpdGhtIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIG9wdGlvbnMuXG4gICAgICAgICAgcXVlcnkud2l0aEdyYXBoKGV4cHIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kZWxzID0gYXdhaXQgcXVlcnlcbiAgICAgICAgLy8gRmlsbCB0aGUgZ3JvdXAubW9kZWxzQnlJZCBsb29rdXA6XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICAgICAgbW9kZWxzQnlJZFttb2RlbC4kaWQoKV0gPSBtb2RlbFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcblxuICAgIC8vIEZpbmFsbHkgcG9wdWxhdGUgdGhlIHRhcmdldHMgd2l0aCB0aGUgbG9hZGVkIG1vZGVscy5cbiAgICBmb3IgKGNvbnN0IHsgdGFyZ2V0cywgbW9kZWxzQnlJZCwgcmVsYXRpb24gfSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgeyBpdGVtLCBpc1JlZmVyZW5jZSB9IG9mIHRhcmdldHMpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbHNCeUlkW2l0ZW0uJGlkKCldXG4gICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZSkge1xuICAgICAgICAgICAgLy8gQ29weSBvdmVyIHRoZSBmdWxsIGl0ZW0uXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIG1vZGVsKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBKdXN0IGNvcHkgdGhlIGVhZ2VyLWxvYWRlZCByZWxhdGlvbi5cbiAgICAgICAgICAgIGl0ZW1bcmVsYXRpb25dID0gbW9kZWxbcmVsYXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdyYXBoXG59XG4iXX0=
@@ -1,34 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/esnext.async-iterator.for-each.js");
4
-
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
-
7
- require("core-js/modules/esnext.iterator.for-each.js");
8
-
9
- exports.__esModule = true;
10
-
11
- var _DitoGraphProcessor = require("./DitoGraphProcessor");
12
-
13
- Object.keys(_DitoGraphProcessor).forEach(function (key) {
14
- if (key === "default" || key === "__esModule") return;
15
- if (key in exports && exports[key] === _DitoGraphProcessor[key]) return;
16
- exports[key] = _DitoGraphProcessor[key];
17
- });
18
-
19
- var _graph = require("./graph");
20
-
21
- Object.keys(_graph).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- if (key in exports && exports[key] === _graph[key]) return;
24
- exports[key] = _graph[key];
25
- });
26
-
27
- var _expression = require("./expression");
28
-
29
- Object.keys(_expression).forEach(function (key) {
30
- if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _expression[key]) return;
32
- exports[key] = _expression[key];
33
- });
34
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ncmFwaC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL0RpdG9HcmFwaFByb2Nlc3NvcidcbmV4cG9ydCAqIGZyb20gJy4vZ3JhcGgnXG5leHBvcnQgKiBmcm9tICcuL2V4cHJlc3Npb24nXG4iXX0=
package/lib/index.js DELETED
@@ -1,82 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/esnext.async-iterator.for-each.js");
4
-
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
-
7
- require("core-js/modules/esnext.iterator.for-each.js");
8
-
9
- exports.__esModule = true;
10
-
11
- var _app = require("./app");
12
-
13
- Object.keys(_app).forEach(function (key) {
14
- if (key === "default" || key === "__esModule") return;
15
- if (key in exports && exports[key] === _app[key]) return;
16
- exports[key] = _app[key];
17
- });
18
-
19
- var _query = require("./query");
20
-
21
- Object.keys(_query).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- if (key in exports && exports[key] === _query[key]) return;
24
- exports[key] = _query[key];
25
- });
26
-
27
- var _errors = require("./errors");
28
-
29
- Object.keys(_errors).forEach(function (key) {
30
- if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _errors[key]) return;
32
- exports[key] = _errors[key];
33
- });
34
-
35
- var _mixins = require("./mixins");
36
-
37
- Object.keys(_mixins).forEach(function (key) {
38
- if (key === "default" || key === "__esModule") return;
39
- if (key in exports && exports[key] === _mixins[key]) return;
40
- exports[key] = _mixins[key];
41
- });
42
-
43
- var _models = require("./models");
44
-
45
- Object.keys(_models).forEach(function (key) {
46
- if (key === "default" || key === "__esModule") return;
47
- if (key in exports && exports[key] === _models[key]) return;
48
- exports[key] = _models[key];
49
- });
50
-
51
- var _controllers = require("./controllers");
52
-
53
- Object.keys(_controllers).forEach(function (key) {
54
- if (key === "default" || key === "__esModule") return;
55
- if (key in exports && exports[key] === _controllers[key]) return;
56
- exports[key] = _controllers[key];
57
- });
58
-
59
- var _services = require("./services");
60
-
61
- Object.keys(_services).forEach(function (key) {
62
- if (key === "default" || key === "__esModule") return;
63
- if (key in exports && exports[key] === _services[key]) return;
64
- exports[key] = _services[key];
65
- });
66
-
67
- var _decorators = require("./decorators");
68
-
69
- Object.keys(_decorators).forEach(function (key) {
70
- if (key === "default" || key === "__esModule") return;
71
- if (key in exports && exports[key] === _decorators[key]) return;
72
- exports[key] = _decorators[key];
73
- });
74
-
75
- var _storage = require("./storage");
76
-
77
- Object.keys(_storage).forEach(function (key) {
78
- if (key === "default" || key === "__esModule") return;
79
- if (key in exports && exports[key] === _storage[key]) return;
80
- exports[key] = _storage[key];
81
- });
82
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcCdcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnknXG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycydcbmV4cG9ydCAqIGZyb20gJy4vbWl4aW5zJ1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyb2xsZXJzJ1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcydcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycydcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZSdcbiJdfQ==
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.EventEmitter = void 0;
5
-
6
- var _eventemitter = _interopRequireDefault(require("eventemitter2"));
7
-
8
- var _utils = require("@ditojs/utils");
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class EventEmitter extends _eventemitter.default {
13
- _setupEmitter(events, options) {
14
- _eventemitter.default.call(this, {
15
- delimiter: ':',
16
- maxListeners: 0,
17
- ...options
18
- });
19
-
20
- for (const key in events) {
21
- for (const part of key.split(',')) {
22
- const event = part.trim();
23
-
24
- for (const callback of (0, _utils.asArray)(events[key])) {
25
- this.on(event, callback);
26
- }
27
- }
28
- }
29
- }
30
-
31
- emit(event, ...args) {
32
- return this.emitAsync(event, ...args);
33
- }
34
-
35
- _handle(method, event, callback) {
36
- if ((0, _utils.isString)(event)) {
37
- super[method](event, callback);
38
- } else if ((0, _utils.isArray)(event)) {
39
- for (const ev of event) {
40
- super[method](ev, callback);
41
- }
42
- } else if ((0, _utils.isPlainObject)(event)) {
43
- for (const key in event) {
44
- super[method](key, event[key]);
45
- }
46
- }
47
-
48
- return this;
49
- }
50
-
51
- on(event, callback) {
52
- return this._handle('on', event, callback);
53
- }
54
-
55
- off(event, callback) {
56
- return this._handle('off', event, callback);
57
- }
58
-
59
- once(event, callback) {
60
- return this._handle('once', event, callback);
61
- }
62
-
63
- static mixin(target) {
64
- Object.defineProperties(target, properties);
65
- }
66
-
67
- }
68
-
69
- exports.EventEmitter = EventEmitter;
70
- const {
71
- constructor,
72
- ...properties
73
- } = { ...Object.getOwnPropertyDescriptors(_eventemitter.default.prototype),
74
- ...Object.getOwnPropertyDescriptors(EventEmitter.prototype)
75
- };
76
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRXZlbnRFbWl0dGVyLmpzIl0sIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlcjIiLCJfc2V0dXBFbWl0dGVyIiwiZXZlbnRzIiwib3B0aW9ucyIsImNhbGwiLCJkZWxpbWl0ZXIiLCJtYXhMaXN0ZW5lcnMiLCJrZXkiLCJwYXJ0Iiwic3BsaXQiLCJldmVudCIsInRyaW0iLCJjYWxsYmFjayIsIm9uIiwiZW1pdCIsImFyZ3MiLCJlbWl0QXN5bmMiLCJfaGFuZGxlIiwibWV0aG9kIiwiZXYiLCJvZmYiLCJvbmNlIiwibWl4aW4iLCJ0YXJnZXQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsImNvbnN0cnVjdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7OztBQUVPLE1BQU1BLFlBQU4sU0FBMkJDLHFCQUEzQixDQUF5QztBQUU5Q0MsRUFBQUEsYUFBYSxDQUFDQyxNQUFELEVBQVNDLE9BQVQsRUFBa0I7QUFDN0JILDBCQUFjSSxJQUFkLENBQW1CLElBQW5CLEVBQXlCO0FBQ3ZCQyxNQUFBQSxTQUFTLEVBQUUsR0FEWTtBQUV2QkMsTUFBQUEsWUFBWSxFQUFFLENBRlM7QUFHdkIsU0FBR0g7QUFIb0IsS0FBekI7O0FBS0EsU0FBSyxNQUFNSSxHQUFYLElBQWtCTCxNQUFsQixFQUEwQjtBQUN4QixXQUFLLE1BQU1NLElBQVgsSUFBbUJELEdBQUcsQ0FBQ0UsS0FBSixDQUFVLEdBQVYsQ0FBbkIsRUFBbUM7QUFDakMsY0FBTUMsS0FBSyxHQUFHRixJQUFJLENBQUNHLElBQUwsRUFBZDs7QUFDQSxhQUFLLE1BQU1DLFFBQVgsSUFBdUIsb0JBQVFWLE1BQU0sQ0FBQ0ssR0FBRCxDQUFkLENBQXZCLEVBQTZDO0FBQzNDLGVBQUtNLEVBQUwsQ0FBUUgsS0FBUixFQUFlRSxRQUFmO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBRURFLEVBQUFBLElBQUksQ0FBQ0osS0FBRCxFQUFRLEdBQUdLLElBQVgsRUFBaUI7QUFHbkIsV0FBTyxLQUFLQyxTQUFMLENBQWVOLEtBQWYsRUFBc0IsR0FBR0ssSUFBekIsQ0FBUDtBQUNEOztBQUVERSxFQUFBQSxPQUFPLENBQUNDLE1BQUQsRUFBU1IsS0FBVCxFQUFnQkUsUUFBaEIsRUFBMEI7QUFDL0IsUUFBSSxxQkFBU0YsS0FBVCxDQUFKLEVBQXFCO0FBQ25CLFlBQU1RLE1BQU4sRUFBY1IsS0FBZCxFQUFxQkUsUUFBckI7QUFDRCxLQUZELE1BRU8sSUFBSSxvQkFBUUYsS0FBUixDQUFKLEVBQW9CO0FBQ3pCLFdBQUssTUFBTVMsRUFBWCxJQUFpQlQsS0FBakIsRUFBd0I7QUFDdEIsY0FBTVEsTUFBTixFQUFjQyxFQUFkLEVBQWtCUCxRQUFsQjtBQUNEO0FBQ0YsS0FKTSxNQUlBLElBQUksMEJBQWNGLEtBQWQsQ0FBSixFQUEwQjtBQUMvQixXQUFLLE1BQU1ILEdBQVgsSUFBa0JHLEtBQWxCLEVBQXlCO0FBQ3ZCLGNBQU1RLE1BQU4sRUFBY1gsR0FBZCxFQUFtQkcsS0FBSyxDQUFDSCxHQUFELENBQXhCO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPLElBQVA7QUFDRDs7QUFFRE0sRUFBQUEsRUFBRSxDQUFDSCxLQUFELEVBQVFFLFFBQVIsRUFBa0I7QUFDbEIsV0FBTyxLQUFLSyxPQUFMLENBQWEsSUFBYixFQUFtQlAsS0FBbkIsRUFBMEJFLFFBQTFCLENBQVA7QUFDRDs7QUFFRFEsRUFBQUEsR0FBRyxDQUFDVixLQUFELEVBQVFFLFFBQVIsRUFBa0I7QUFDbkIsV0FBTyxLQUFLSyxPQUFMLENBQWEsS0FBYixFQUFvQlAsS0FBcEIsRUFBMkJFLFFBQTNCLENBQVA7QUFDRDs7QUFFRFMsRUFBQUEsSUFBSSxDQUFDWCxLQUFELEVBQVFFLFFBQVIsRUFBa0I7QUFDcEIsV0FBTyxLQUFLSyxPQUFMLENBQWEsTUFBYixFQUFxQlAsS0FBckIsRUFBNEJFLFFBQTVCLENBQVA7QUFDRDs7QUFFVyxTQUFMVSxLQUFLLENBQUNDLE1BQUQsRUFBUztBQUNuQkMsSUFBQUEsTUFBTSxDQUFDQyxnQkFBUCxDQUF3QkYsTUFBeEIsRUFBZ0NHLFVBQWhDO0FBQ0Q7O0FBckQ2Qzs7O0FBd0RoRCxNQUFNO0FBQ0pDLEVBQUFBLFdBREk7QUFFSixLQUFHRDtBQUZDLElBR0YsRUFDRixHQUFHRixNQUFNLENBQUNJLHlCQUFQLENBQWlDNUIsc0JBQWM2QixTQUEvQyxDQUREO0FBRUYsS0FBR0wsTUFBTSxDQUFDSSx5QkFBUCxDQUFpQzdCLFlBQVksQ0FBQzhCLFNBQTlDO0FBRkQsQ0FISiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIyIGZyb20gJ2V2ZW50ZW1pdHRlcjInXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIyIHtcbiAgLy8gTWV0aG9kIGZvciBjbGFzc2VzIHRoYXQgdXNlIGBFdmVudEVtaXR0ZXIubWl4aW4oKWAgdG8gc2V0dXAgdGhlIGVtaXR0ZXIuXG4gIF9zZXR1cEVtaXR0ZXIoZXZlbnRzLCBvcHRpb25zKSB7XG4gICAgRXZlbnRFbWl0dGVyMi5jYWxsKHRoaXMsIHtcbiAgICAgIGRlbGltaXRlcjogJzonLFxuICAgICAgbWF4TGlzdGVuZXJzOiAwLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2Yga2V5LnNwbGl0KCcsJykpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJ0LnRyaW0oKVxuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFzQXJyYXkoZXZlbnRzW2tleV0pKSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgLy8gQWx3YXlzIHVzZSBhc3luYyB2ZXJzaW9uIHRvIGVtaXQgZXZlbnRzOiBJdCB3aWxsIHBlcmZvcm0gdGhlIHNhbWUgYXNcbiAgICAvLyB0aGUgbm9ybWFsIG9uZSB3aGVuIHRoZSBtZXRob2RzIGFyZW4ndCBhY3R1YWxseSBhc3luYy5cbiAgICByZXR1cm4gdGhpcy5lbWl0QXN5bmMoZXZlbnQsIC4uLmFyZ3MpXG4gIH1cblxuICBfaGFuZGxlKG1ldGhvZCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGlzU3RyaW5nKGV2ZW50KSkge1xuICAgICAgc3VwZXJbbWV0aG9kXShldmVudCwgY2FsbGJhY2spXG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICBzdXBlclttZXRob2RdKGV2LCBjYWxsYmFjaylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICBzdXBlclttZXRob2RdKGtleSwgZXZlbnRba2V5XSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGUoJ29uJywgZXZlbnQsIGNhbGxiYWNrKVxuICB9XG5cbiAgb2ZmKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGUoJ29mZicsIGV2ZW50LCBjYWxsYmFjaylcbiAgfVxuXG4gIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZSgnb25jZScsIGV2ZW50LCBjYWxsYmFjaylcbiAgfVxuXG4gIHN0YXRpYyBtaXhpbih0YXJnZXQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMpXG4gIH1cbn1cblxuY29uc3Qge1xuICBjb25zdHJ1Y3RvciwgLy8gRG9uJ3QgZXh0cmFjdCBjb25zdHJ1Y3RvciwgYnV0IGV2ZXJ5dGhpbmcgZWxzZVxuICAuLi5wcm9wZXJ0aWVzXG59ID0ge1xuICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFdmVudEVtaXR0ZXIyLnByb3RvdHlwZSksXG4gIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpXG59XG4iXX0=
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.KnexHelper = void 0;
5
-
6
- class KnexHelper {
7
- getDialect() {
8
- var _this$knex, _this$knex$client;
9
-
10
- return ((_this$knex = this.knex()) == null ? void 0 : (_this$knex$client = _this$knex.client) == null ? void 0 : _this$knex$client.dialect) || null;
11
- }
12
-
13
- isPostgreSQL() {
14
- return this.getDialect() === 'postgresql';
15
- }
16
-
17
- isMySQL() {
18
- return this.getDialect() === 'mysql';
19
- }
20
-
21
- isSQLite() {
22
- return this.getDialect() === 'sqlite3';
23
- }
24
-
25
- isMsSQL() {
26
- return this.getDialect() === 'mssql';
27
- }
28
-
29
- static mixin(target) {
30
- Object.defineProperties(target, properties);
31
- }
32
-
33
- }
34
-
35
- exports.KnexHelper = KnexHelper;
36
- const {
37
- constructor,
38
- ...properties
39
- } = Object.getOwnPropertyDescriptors(KnexHelper.prototype);
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvS25leEhlbHBlci5qcyJdLCJuYW1lcyI6WyJLbmV4SGVscGVyIiwiZ2V0RGlhbGVjdCIsImtuZXgiLCJjbGllbnQiLCJkaWFsZWN0IiwiaXNQb3N0Z3JlU1FMIiwiaXNNeVNRTCIsImlzU1FMaXRlIiwiaXNNc1NRTCIsIm1peGluIiwidGFyZ2V0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJjb25zdHJ1Y3RvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJwcm90b3R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTUEsVUFBTixDQUFpQjtBQUN0QkMsRUFBQUEsVUFBVSxHQUFHO0FBQUE7O0FBQ1gsV0FBTyxvQkFBS0MsSUFBTCx1REFBYUMsTUFBYix1Q0FBcUJDLE9BQXJCLEtBQWdDLElBQXZDO0FBQ0Q7O0FBRURDLEVBQUFBLFlBQVksR0FBRztBQUNiLFdBQU8sS0FBS0osVUFBTCxPQUFzQixZQUE3QjtBQUNEOztBQUVESyxFQUFBQSxPQUFPLEdBQUc7QUFDUixXQUFPLEtBQUtMLFVBQUwsT0FBc0IsT0FBN0I7QUFDRDs7QUFFRE0sRUFBQUEsUUFBUSxHQUFHO0FBQ1QsV0FBTyxLQUFLTixVQUFMLE9BQXNCLFNBQTdCO0FBQ0Q7O0FBRURPLEVBQUFBLE9BQU8sR0FBRztBQUNSLFdBQU8sS0FBS1AsVUFBTCxPQUFzQixPQUE3QjtBQUNEOztBQUVXLFNBQUxRLEtBQUssQ0FBQ0MsTUFBRCxFQUFTO0FBQ25CQyxJQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCRixNQUF4QixFQUFnQ0csVUFBaEM7QUFDRDs7QUF2QnFCOzs7QUEwQnhCLE1BQU07QUFDSkMsRUFBQUEsV0FESTtBQUVKLEtBQUdEO0FBRkMsSUFHRkYsTUFBTSxDQUFDSSx5QkFBUCxDQUFpQ2YsVUFBVSxDQUFDZ0IsU0FBNUMsQ0FISiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBLbmV4SGVscGVyIHtcbiAgZ2V0RGlhbGVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4KCk/LmNsaWVudD8uZGlhbGVjdCB8fCBudWxsXG4gIH1cblxuICBpc1Bvc3RncmVTUUwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlhbGVjdCgpID09PSAncG9zdGdyZXNxbCdcbiAgfVxuXG4gIGlzTXlTUUwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlhbGVjdCgpID09PSAnbXlzcWwnXG4gIH1cblxuICBpc1NRTGl0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXREaWFsZWN0KCkgPT09ICdzcWxpdGUzJ1xuICB9XG5cbiAgaXNNc1NRTCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXREaWFsZWN0KCkgPT09ICdtc3NxbCdcbiAgfVxuXG4gIHN0YXRpYyBtaXhpbih0YXJnZXQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMpXG4gIH1cbn1cblxuY29uc3Qge1xuICBjb25zdHJ1Y3RvciwgLy8gRG9uJ3QgZXh0cmFjdCBjb25zdHJ1Y3RvciwgYnV0IGV2ZXJ5dGhpbmcgZWxzZVxuICAuLi5wcm9wZXJ0aWVzXG59ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoS25leEhlbHBlci5wcm90b3R5cGUpXG4iXX0=
package/lib/lib/index.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/esnext.async-iterator.for-each.js");
4
-
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
-
7
- require("core-js/modules/esnext.iterator.for-each.js");
8
-
9
- exports.__esModule = true;
10
-
11
- var _EventEmitter = require("./EventEmitter");
12
-
13
- Object.keys(_EventEmitter).forEach(function (key) {
14
- if (key === "default" || key === "__esModule") return;
15
- if (key in exports && exports[key] === _EventEmitter[key]) return;
16
- exports[key] = _EventEmitter[key];
17
- });
18
-
19
- var _KnexHelper = require("./KnexHelper");
20
-
21
- Object.keys(_KnexHelper).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- if (key in exports && exports[key] === _KnexHelper[key]) return;
24
- exports[key] = _KnexHelper[key];
25
- });
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vRXZlbnRFbWl0dGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9LbmV4SGVscGVyJ1xuIl19
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.attachLogger = attachLogger;
5
-
6
- var _nanoid = require("nanoid");
7
-
8
- function attachLogger(logger) {
9
- return (ctx, next) => {
10
- ctx.logger = logger.child({
11
- requestId: (0, _nanoid.nanoid)(6)
12
- });
13
- return next();
14
- };
15
- }
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2F0dGFjaExvZ2dlci5qcyJdLCJuYW1lcyI6WyJhdHRhY2hMb2dnZXIiLCJsb2dnZXIiLCJjdHgiLCJuZXh0IiwiY2hpbGQiLCJyZXF1ZXN0SWQiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBRU8sU0FBU0EsWUFBVCxDQUFzQkMsTUFBdEIsRUFBOEI7QUFDbkMsU0FBTyxDQUFDQyxHQUFELEVBQU1DLElBQU4sS0FBZTtBQUNwQkQsSUFBQUEsR0FBRyxDQUFDRCxNQUFKLEdBQWFBLE1BQU0sQ0FBQ0csS0FBUCxDQUFhO0FBQUVDLE1BQUFBLFNBQVMsRUFBRSxvQkFBTyxDQUFQO0FBQWIsS0FBYixDQUFiO0FBQ0EsV0FBT0YsSUFBSSxFQUFYO0FBQ0QsR0FIRDtBQUlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoTG9nZ2VyKGxvZ2dlcikge1xuICByZXR1cm4gKGN0eCwgbmV4dCkgPT4ge1xuICAgIGN0eC5sb2dnZXIgPSBsb2dnZXIuY2hpbGQoeyByZXF1ZXN0SWQ6IG5hbm9pZCg2KSB9KVxuICAgIHJldHVybiBuZXh0KClcbiAgfVxufVxuIl19
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.createTransaction = createTransaction;
5
-
6
- var _objection = require("objection");
7
-
8
- var _utils = require("../utils");
9
-
10
- function createTransaction() {
11
- return async (ctx, next) => {
12
- const {
13
- route
14
- } = ctx;
15
-
16
- if (route.transacted) {
17
- const trx = await _objection.transaction.start(route.controller.modelClass || ctx.app.knex);
18
- ctx.transaction = trx;
19
-
20
- try {
21
- await next();
22
- await trx.commit();
23
- await (0, _utils.emitAsync)(trx, 'commit');
24
- } catch (err) {
25
- await trx.rollback();
26
- await (0, _utils.emitAsync)(trx, 'rollback', err);
27
- throw err;
28
- } finally {
29
- delete ctx.transaction;
30
- }
31
- } else {
32
- await next();
33
- }
34
- };
35
- }
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2NyZWF0ZVRyYW5zYWN0aW9uLmpzIl0sIm5hbWVzIjpbImNyZWF0ZVRyYW5zYWN0aW9uIiwiY3R4IiwibmV4dCIsInJvdXRlIiwidHJhbnNhY3RlZCIsInRyeCIsInRyYW5zYWN0aW9uIiwic3RhcnQiLCJjb250cm9sbGVyIiwibW9kZWxDbGFzcyIsImFwcCIsImtuZXgiLCJjb21taXQiLCJlcnIiLCJyb2xsYmFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFFTyxTQUFTQSxpQkFBVCxHQUE2QjtBQUNsQyxTQUFPLE9BQU9DLEdBQVAsRUFBWUMsSUFBWixLQUFxQjtBQUMxQixVQUFNO0FBQUVDLE1BQUFBO0FBQUYsUUFBWUYsR0FBbEI7O0FBQ0EsUUFBSUUsS0FBSyxDQUFDQyxVQUFWLEVBQXNCO0FBQ3BCLFlBQU1DLEdBQUcsR0FBRyxNQUFNQyx1QkFBWUMsS0FBWixDQUNoQkosS0FBSyxDQUFDSyxVQUFOLENBQWlCQyxVQUFqQixJQUNBUixHQUFHLENBQUNTLEdBQUosQ0FBUUMsSUFGUSxDQUFsQjtBQUlBVixNQUFBQSxHQUFHLENBQUNLLFdBQUosR0FBa0JELEdBQWxCOztBQUlBLFVBQUk7QUFDRixjQUFNSCxJQUFJLEVBQVY7QUFDQSxjQUFNRyxHQUFHLENBQUNPLE1BQUosRUFBTjtBQUNBLGNBQU0sc0JBQVVQLEdBQVYsRUFBZSxRQUFmLENBQU47QUFDRCxPQUpELENBSUUsT0FBT1EsR0FBUCxFQUFZO0FBQ1osY0FBTVIsR0FBRyxDQUFDUyxRQUFKLEVBQU47QUFDQSxjQUFNLHNCQUFVVCxHQUFWLEVBQWUsVUFBZixFQUEyQlEsR0FBM0IsQ0FBTjtBQUNBLGNBQU1BLEdBQU47QUFDRCxPQVJELFNBUVU7QUFDUixlQUFPWixHQUFHLENBQUNLLFdBQVg7QUFDRDtBQUNGLEtBcEJELE1Bb0JPO0FBR0wsWUFBTUosSUFBSSxFQUFWO0FBQ0Q7QUFDRixHQTNCRDtBQTRCRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYW5zYWN0aW9uIH0gZnJvbSAnb2JqZWN0aW9uJ1xuaW1wb3J0IHsgZW1pdEFzeW5jIH0gZnJvbSAnQC91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uKCkge1xuICByZXR1cm4gYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgcm91dGUgfSA9IGN0eFxuICAgIGlmIChyb3V0ZS50cmFuc2FjdGVkKSB7XG4gICAgICBjb25zdCB0cnggPSBhd2FpdCB0cmFuc2FjdGlvbi5zdGFydChcbiAgICAgICAgcm91dGUuY29udHJvbGxlci5tb2RlbENsYXNzIHx8XG4gICAgICAgIGN0eC5hcHAua25leFxuICAgICAgKVxuICAgICAgY3R4LnRyYW5zYWN0aW9uID0gdHJ4XG4gICAgICAvLyBLbmV4IGRvZXNuJ3Qgb2ZmZXIgYSBtZWNoYW5pc20gZm9yIGNvZGUgZGVhbGluZyB3aXRoIHRyYW5zYWN0aW9ucyB0b1xuICAgICAgLy8gYmUgbm90aWZpZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgcm9sbGVkIGJhY2suIFNvIGFkZCBzdXBwb3J0IGZvclxuICAgICAgLy8gJ2NvbW1pdCcgYW5kICdyb2xsYmFjaycgZXZlbnRzIGhlcmU6XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXh0KClcbiAgICAgICAgYXdhaXQgdHJ4LmNvbW1pdCgpXG4gICAgICAgIGF3YWl0IGVtaXRBc3luYyh0cngsICdjb21taXQnKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGF3YWl0IHRyeC5yb2xsYmFjaygpXG4gICAgICAgIGF3YWl0IGVtaXRBc3luYyh0cngsICdyb2xsYmFjaycsIGVycilcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBkZWxldGUgY3R4LnRyYW5zYWN0aW9uXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIHNldHRpbmcgYGN0eC50cmFuc2FjdGlvbiA9IGN0eC5hcHAua25leGAsIGp1c3QgbGlrZVxuICAgICAgLy8gT2JqZWN0aW9uIGRvZXMgaW4gc3RhdGljIGhvb2tzIHNvIGB0cmFuc2FjdGlvbiBpcyBhbHdheSBzZXQuXG4gICAgICBhd2FpdCBuZXh0KClcbiAgICB9XG4gIH1cbn1cbiJdfQ==