@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,276 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.default = void 0;
5
-
6
- require("core-js/modules/esnext.async-iterator.find.js");
7
-
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
-
10
- require("core-js/modules/esnext.iterator.find.js");
11
-
12
- require("core-js/modules/esnext.async-iterator.map.js");
13
-
14
- require("core-js/modules/esnext.iterator.map.js");
15
-
16
- var _utils = require("@ditojs/utils");
17
-
18
- class ControllerAction {
19
- constructor(controller, handler, type, name, verb, path, authorize) {
20
- var _handler$path;
21
-
22
- this.controller = controller;
23
- this.handler = handler;
24
- this.type = type;
25
- this.name = name;
26
- this.identifier = `${type}:${name}`;
27
- this.verb = handler.verb || verb;
28
- this.path = (_handler$path = handler.path) != null ? _handler$path : path;
29
- this.authorize = handler.authorize || authorize;
30
- this.transacted = !!(handler.transacted || controller.transacted || handler.core && verb !== 'get' && (controller.graph || controller.assets));
31
- this.authorization = controller.processAuthorize(this.authorize);
32
- this.app = controller.app;
33
- this.paramsName = ['post', 'put', 'patch'].includes(this.verb) ? 'body' : 'query';
34
- const {
35
- parameters,
36
- returns,
37
- options = {}
38
- } = this.handler;
39
- this.parameters = this.app.compileParametersValidator(parameters, {
40
- async: true,
41
- ...options.parameters,
42
- dataName: this.paramsName
43
- });
44
- this.returns = this.app.compileParametersValidator(returns ? [returns] : [], {
45
- async: true,
46
- useInstanceOf: true,
47
- ...options.returns,
48
- dataName: 'returns'
49
- });
50
- }
51
-
52
- getParams(ctx, from = this.paramsName) {
53
- const value = from === 'path' ? ctx.params : ctx.request[from];
54
- const isNull = from === 'body' && ctx.request.headers['content-length'] === '0' && Object.keys(value).length === 0;
55
- return isNull ? null : value;
56
- }
57
-
58
- async callAction(ctx) {
59
- const params = await this.validateParameters(ctx);
60
- const {
61
- args,
62
- member
63
- } = await this.collectArguments(ctx, params);
64
- await this.controller.handleAuthorization(this.authorization, ctx, member);
65
- const {
66
- identifier
67
- } = this;
68
- await this.controller.emitHook(`before:${identifier}`, false, ctx, ...args);
69
- const result = await this.callHandler(ctx, ...args);
70
- return this.validateResult(await this.controller.emitHook(`after:${identifier}`, true, ctx, result));
71
- }
72
-
73
- async callHandler(ctx, ...args) {
74
- return this.handler.call(this.controller, ctx, ...args);
75
- }
76
-
77
- createValidationError(options) {
78
- return this.app.createValidationError(options);
79
- }
80
-
81
- async validateParameters(ctx) {
82
- if (!this.parameters.validate) {
83
- return null;
84
- }
85
-
86
- const data = (0, _utils.clone)(this.getParams(ctx));
87
- let params = data || {};
88
- const {
89
- dataName
90
- } = this.parameters;
91
- let unwrapRoot = false;
92
- const errors = [];
93
-
94
- for (const {
95
- name,
96
- type,
97
- from,
98
- root,
99
- member
100
- } of this.parameters.list) {
101
- if (member) continue;
102
- let wrapRoot = root;
103
- let paramName = name;
104
-
105
- if (!paramName) {
106
- paramName = dataName;
107
- wrapRoot = true;
108
- unwrapRoot = true;
109
- }
110
-
111
- if (wrapRoot) {
112
- if (params === data) {
113
- params = {};
114
- }
115
-
116
- params[paramName] = data;
117
- }
118
-
119
- if (from) {
120
- const data = this.getParams(ctx, from);
121
- params[paramName] = (0, _utils.clone)(wrapRoot ? data : data == null ? void 0 : data[paramName]);
122
- }
123
-
124
- try {
125
- const value = params[paramName];
126
- const coerced = this.coerceValue(type, value, {
127
- skipValidation: true
128
- });
129
-
130
- if (coerced !== value) {
131
- params[paramName] = coerced;
132
- }
133
- } catch (err) {
134
- errors.push({
135
- dataPath: `.${paramName}`,
136
- keyword: 'type',
137
- message: err.message || err.toString(),
138
- params: {
139
- type
140
- }
141
- });
142
- }
143
- }
144
-
145
- const getData = () => unwrapRoot ? params[dataName] : params;
146
-
147
- try {
148
- await this.parameters.validate(params);
149
- return getData();
150
- } catch (error) {
151
- if (error.errors) {
152
- errors.push(...error.errors);
153
- } else {
154
- throw error;
155
- }
156
- }
157
-
158
- if (errors.length > 0) {
159
- throw this.createValidationError({
160
- type: 'ParameterValidation',
161
- message: 'The provided action parameters are not valid',
162
- errors,
163
- json: getData()
164
- });
165
- }
166
- }
167
-
168
- async validateResult(result) {
169
- if (this.returns.validate) {
170
- const returnsName = this.handler.returns.name;
171
- const data = {
172
- [returnsName || this.returns.dataName]: result
173
- };
174
-
175
- const getResult = () => returnsName ? data : result;
176
-
177
- try {
178
- await this.returns.validate(data);
179
- return getResult();
180
- } catch (error) {
181
- throw this.createValidationError({
182
- type: 'ResultValidation',
183
- message: 'The returned action result is not valid',
184
- errors: error.errors,
185
- json: getResult()
186
- });
187
- }
188
- }
189
-
190
- return result;
191
- }
192
-
193
- async collectArguments(ctx, params) {
194
- const {
195
- list,
196
- asObject
197
- } = this.parameters;
198
- const args = asObject ? [{}] : [];
199
-
200
- const addArgument = (name, value) => {
201
- if (asObject) {
202
- args[0][name] = value;
203
- } else {
204
- args.push(value);
205
- }
206
- };
207
-
208
- let member = null;
209
-
210
- for (const param of list) {
211
- const {
212
- name
213
- } = param;
214
-
215
- if (param.member) {
216
- member = await this.getMember(ctx, param);
217
- addArgument(name, member);
218
- } else {
219
- addArgument(name, name ? params[name] : params);
220
- }
221
- }
222
-
223
- return {
224
- args,
225
- member
226
- };
227
- }
228
-
229
- coerceValue(type, value, modelOptions) {
230
- if (value && ['date', 'datetime', 'timestamp'].includes(type)) {
231
- value = new Date(value);
232
- } else {
233
- const objectType = (0, _utils.asArray)(type).find(type => type === 'object' || type in this.app.models);
234
-
235
- if (objectType) {
236
- if (value && (0, _utils.isString)(value)) {
237
- if (!/^\{.*\}$/.test(value)) {
238
- if (/"/.test(value)) {
239
- value = JSON.parse(`{${value}}`);
240
- } else {
241
- value = Object.fromEntries(value.split(/\s*,\s*/g).map(entry => {
242
- let [key, val] = entry.split(/\s*:\s*/);
243
-
244
- try {
245
- val = JSON.parse(val);
246
- } catch (_unused) {}
247
-
248
- return [key, val];
249
- }));
250
- }
251
- } else {
252
- value = JSON.parse(value);
253
- }
254
- }
255
-
256
- if (objectType !== 'object' && (0, _utils.isObject)(value)) {
257
- const modelClass = this.app.models[objectType];
258
-
259
- if (modelClass && !(value instanceof modelClass)) {
260
- value = modelClass.fromJson(value, modelOptions);
261
- }
262
- }
263
- }
264
- }
265
-
266
- return value;
267
- }
268
-
269
- async getMember() {
270
- return null;
271
- }
272
-
273
- }
274
-
275
- exports.default = ControllerAction;
276
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyQWN0aW9uLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXJBY3Rpb24iLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJoYW5kbGVyIiwidHlwZSIsIm5hbWUiLCJ2ZXJiIiwicGF0aCIsImF1dGhvcml6ZSIsImlkZW50aWZpZXIiLCJ0cmFuc2FjdGVkIiwiY29yZSIsImdyYXBoIiwiYXNzZXRzIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJhcHAiLCJwYXJhbXNOYW1lIiwiaW5jbHVkZXMiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsIm9wdGlvbnMiLCJjb21waWxlUGFyYW1ldGVyc1ZhbGlkYXRvciIsImFzeW5jIiwiZGF0YU5hbWUiLCJ1c2VJbnN0YW5jZU9mIiwiZ2V0UGFyYW1zIiwiY3R4IiwiZnJvbSIsInZhbHVlIiwicGFyYW1zIiwicmVxdWVzdCIsImlzTnVsbCIsImhlYWRlcnMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiY2FsbEFjdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImFyZ3MiLCJtZW1iZXIiLCJjb2xsZWN0QXJndW1lbnRzIiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImVtaXRIb29rIiwicmVzdWx0IiwiY2FsbEhhbmRsZXIiLCJ2YWxpZGF0ZVJlc3VsdCIsImNhbGwiLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3IiLCJ2YWxpZGF0ZSIsImRhdGEiLCJ1bndyYXBSb290IiwiZXJyb3JzIiwicm9vdCIsImxpc3QiLCJ3cmFwUm9vdCIsInBhcmFtTmFtZSIsImNvZXJjZWQiLCJjb2VyY2VWYWx1ZSIsInNraXBWYWxpZGF0aW9uIiwiZXJyIiwicHVzaCIsImRhdGFQYXRoIiwia2V5d29yZCIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsImdldERhdGEiLCJlcnJvciIsImpzb24iLCJyZXR1cm5zTmFtZSIsImdldFJlc3VsdCIsImFzT2JqZWN0IiwiYWRkQXJndW1lbnQiLCJwYXJhbSIsImdldE1lbWJlciIsIm1vZGVsT3B0aW9ucyIsIkRhdGUiLCJvYmplY3RUeXBlIiwiZmluZCIsIm1vZGVscyIsInRlc3QiLCJKU09OIiwicGFyc2UiLCJmcm9tRW50cmllcyIsInNwbGl0IiwibWFwIiwiZW50cnkiLCJrZXkiLCJ2YWwiLCJtb2RlbENsYXNzIiwiZnJvbUpzb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVlLE1BQU1BLGdCQUFOLENBQXVCO0FBQ3BDQyxFQUFBQSxXQUFXLENBQUNDLFVBQUQsRUFBYUMsT0FBYixFQUFzQkMsSUFBdEIsRUFBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3Q0MsSUFBeEMsRUFBOENDLFNBQTlDLEVBQXlEO0FBQUE7O0FBQ2xFLFNBQUtOLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0ksVUFBTCxHQUFtQixHQUFFTCxJQUFLLElBQUdDLElBQUssRUFBbEM7QUFHQSxTQUFLQyxJQUFMLEdBQVlILE9BQU8sQ0FBQ0csSUFBUixJQUFnQkEsSUFBNUI7QUFFQSxTQUFLQyxJQUFMLG9CQUFZSixPQUFPLENBQUNJLElBQXBCLDRCQUE0QkEsSUFBNUI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTCxPQUFPLENBQUNLLFNBQVIsSUFBcUJBLFNBQXRDO0FBQ0EsU0FBS0UsVUFBTCxHQUFrQixDQUFDLEVBQ2pCUCxPQUFPLENBQUNPLFVBQVIsSUFDQVIsVUFBVSxDQUFDUSxVQURYLElBSUFQLE9BQU8sQ0FBQ1EsSUFBUixJQUFnQkwsSUFBSSxLQUFLLEtBQXpCLEtBQW1DSixVQUFVLENBQUNVLEtBQVgsSUFBb0JWLFVBQVUsQ0FBQ1csTUFBbEUsQ0FMaUIsQ0FBbkI7QUFPQSxTQUFLQyxhQUFMLEdBQXFCWixVQUFVLENBQUNhLGdCQUFYLENBQTRCLEtBQUtQLFNBQWpDLENBQXJC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QUdvRCxJQUFJLENBQUNDLEtBQUwsQ0FBV3JELEtBQVgsQ0FBUjtBQUNEO0FBQ0Y7O0FBQ0QsWUFBSWdELFVBQVUsS0FBSyxRQUFmLElBQTJCLHFCQUFTaEQsS0FBVCxDQUEvQixFQUFnRDtBQUU5QyxnQkFBTTRELFVBQVUsR0FBRyxLQUFLekUsR0FBTCxDQUFTK0QsTUFBVCxDQUFnQkYsVUFBaEIsQ0FBbkI7O0FBQ0EsY0FBSVksVUFBVSxJQUFJLEVBQUU1RCxLQUFLLFlBQVk0RCxVQUFuQixDQUFsQixFQUFrRDtBQUNoRDVELFlBQUFBLEtBQUssR0FBRzRELFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQjdELEtBQXBCLEVBQTJCOEMsWUFBM0IsQ0FBUjtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUNELFdBQU85QyxLQUFQO0FBQ0Q7O0FBRWMsUUFBVDZDLFNBQVMsR0FBbUI7QUFHaEMsV0FBTyxJQUFQO0FBQ0Q7O0FBM1JtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCwgYXNBcnJheSwgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udHJvbGxlciwgaGFuZGxlciwgdHlwZSwgbmFtZSwgdmVyYiwgcGF0aCwgYXV0aG9yaXplKSB7XG4gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuaWRlbnRpZmllciA9IGAke3R5cGV9OiR7bmFtZX1gXG4gICAgLy8gQWxsb3cgZGVjb3JhdG9ycyBvbiBhY3Rpb25zIHRvIG92ZXJyaWRlIHRoZSBwcmVkZXRlcm1pbmVkIGRlZmF1bHRzIGZvclxuICAgIC8vIGB2ZXJiYCwgYHBhdGhgIGFuZCBgYXV0aG9yaXplYDpcbiAgICB0aGlzLnZlcmIgPSBoYW5kbGVyLnZlcmIgfHwgdmVyYlxuICAgIC8vIFVzZSA/PyBpbnN0ZWFkIG9mIHx8IHRvIGFsbG93ICcnIHRvIG92ZXJyaWRlIHRoZSBwYXRoLlxuICAgIHRoaXMucGF0aCA9IGhhbmRsZXIucGF0aCA/PyBwYXRoXG4gICAgdGhpcy5hdXRob3JpemUgPSBoYW5kbGVyLmF1dGhvcml6ZSB8fCBhdXRob3JpemVcbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSAhIShcbiAgICAgIGhhbmRsZXIudHJhbnNhY3RlZCB8fFxuICAgICAgY29udHJvbGxlci50cmFuc2FjdGVkIHx8XG4gICAgICAvLyBDb3JlIGdyYXBoIGFuZCBhc3NldHMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHRyYW5zYWN0ZWQsIHVubGVzcyB0aGUgdmVyYlxuICAgICAgLy8gaXMgJ2dldCc6XG4gICAgICBoYW5kbGVyLmNvcmUgJiYgdmVyYiAhPT0gJ2dldCcgJiYgKGNvbnRyb2xsZXIuZ3JhcGggfHwgY29udHJvbGxlci5hc3NldHMpXG4gICAgKVxuICAgIHRoaXMuYXV0aG9yaXphdGlvbiA9IGNvbnRyb2xsZXIucHJvY2Vzc0F1dGhvcml6ZSh0aGlzLmF1dGhvcml6ZSlcbiAgICB0aGlzLmFwcCA9IGNvbnRyb2xsZXIuYXBwXG4gICAgdGhpcy5wYXJhbXNOYW1lID0gWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKHRoaXMudmVyYilcbiAgICAgID8gJ2JvZHknXG4gICAgICA6ICdxdWVyeSdcbiAgICBjb25zdCB7IHBhcmFtZXRlcnMsIHJldHVybnMsIG9wdGlvbnMgPSB7fSB9ID0gdGhpcy5oYW5kbGVyXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5hcHAuY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IocGFyYW1ldGVycywge1xuICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLnBhcmFtZXRlcnMsIC8vIFNlZSBAcGFyYW1ldGVycygpIGRlY29yYXRvclxuICAgICAgZGF0YU5hbWU6IHRoaXMucGFyYW1zTmFtZVxuICAgIH0pXG4gICAgdGhpcy5yZXR1cm5zID0gdGhpcy5hcHAuY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IoXG4gICAgICByZXR1cm5zID8gW3JldHVybnNdIDogW10sXG4gICAgICB7XG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAvLyBVc2UgaW5zdGFuY2VvZiBjaGVja3MgaW5zdGVhZCBvZiAkcmVmIHRvIGNoZWNrIHJldHVybmVkIHZhbHVlcy5cbiAgICAgICAgLy8gVE9ETzogVGhhdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGUgdmFsaWRpdHkgdGhvdWdoLi4uXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSAkcmVmIGNoZWNrcywgSSB0aGluaz9cbiAgICAgICAgdXNlSW5zdGFuY2VPZjogdHJ1ZSxcbiAgICAgICAgLi4ub3B0aW9ucy5yZXR1cm5zLCAvLyBTZWUgQHJldHVybnMoKSBkZWNvcmF0b3JcbiAgICAgICAgZGF0YU5hbWU6ICdyZXR1cm5zJ1xuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIC8vIFBvc3NpYmxlIHZhbHVlcyBmb3IgYGZyb21gIGFyZTpcbiAgLy8gLSAncGF0aCc6IFVzZSBgY3R4LnBhcmFtc2Agd2hpY2ggaXMgbWFwcGVkIHRvIHRoZSByb3V0ZSAvIHBhdGhcbiAgLy8gLSAncXVlcnknOiBVc2UgYGN0eC5yZXF1ZXN0LnF1ZXJ5YCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aW9uJ3MgdmVyYi5cbiAgLy8gLSAnYm9keSc6IFVzZSBgY3R4LnJlcXVlc3QuYm9keWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbidzIHZlcmIuXG4gIGdldFBhcmFtcyhjdHgsIGZyb20gPSB0aGlzLnBhcmFtc05hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZyb20gPT09ICdwYXRoJyA/IGN0eC5wYXJhbXMgOiBjdHgucmVxdWVzdFtmcm9tXVxuICAgIC8vIGtvYS1ib2R5cGFyc2VyIGFsd2F5cyBzZXRzIGFuIG9iamVjdCwgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGJvZHkuXG4gICAgLy8gRGV0ZWN0IHRoaXMgaGVyZSBhbmQgcmV0dXJuIG51bGwgaW5zdGVhZC5cbiAgICBjb25zdCBpc051bGwgPSAoXG4gICAgICBmcm9tID09PSAnYm9keScgJiZcbiAgICAgIGN0eC5yZXF1ZXN0LmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10gPT09ICcwJyAmJlxuICAgICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIClcbiAgICByZXR1cm4gaXNOdWxsID8gbnVsbCA6IHZhbHVlXG4gIH1cblxuICBhc3luYyBjYWxsQWN0aW9uKGN0eCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGF3YWl0IHRoaXMudmFsaWRhdGVQYXJhbWV0ZXJzKGN0eClcbiAgICBjb25zdCB7IGFyZ3MsIG1lbWJlciB9ID0gYXdhaXQgdGhpcy5jb2xsZWN0QXJndW1lbnRzKGN0eCwgcGFyYW1zKVxuICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5oYW5kbGVBdXRob3JpemF0aW9uKHRoaXMuYXV0aG9yaXphdGlvbiwgY3R4LCBtZW1iZXIpXG4gICAgY29uc3QgeyBpZGVudGlmaWVyIH0gPSB0aGlzXG4gICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLmVtaXRIb29rKGBiZWZvcmU6JHtpZGVudGlmaWVyfWAsIGZhbHNlLCBjdHgsIC4uLmFyZ3MpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsSGFuZGxlcihjdHgsIC4uLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHQoXG4gICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuZW1pdEhvb2soYGFmdGVyOiR7aWRlbnRpZmllcn1gLCB0cnVlLCBjdHgsIHJlc3VsdClcbiAgICApXG4gIH1cblxuICBhc3luYyBjYWxsSGFuZGxlcihjdHgsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmNhbGwodGhpcy5jb250cm9sbGVyLCBjdHgsIC4uLmFyZ3MpXG4gIH1cblxuICBjcmVhdGVWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmFwcC5jcmVhdGVWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGFyYW1ldGVycyhjdHgpIHtcbiAgICBpZiAoIXRoaXMucGFyYW1ldGVycy52YWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgLy8gU2luY2UgdmFsaWRhdGlvbiBhbHNvIHBlcmZvcm1zIGNvZXJjaW9uLCBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgcGFyYW1zXG4gICAgLy8gc28gdGhhdCB0aGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBkYXRhIG9uIGBjdHhgLlxuICAgIC8vIE5PVEU6IFRoZSBkYXRhIGNhbiBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIGFuIGFycmF5LlxuICAgIGNvbnN0IGRhdGEgPSBjbG9uZSh0aGlzLmdldFBhcmFtcyhjdHgpKVxuICAgIGxldCBwYXJhbXMgPSBkYXRhIHx8IHt9XG4gICAgY29uc3QgeyBkYXRhTmFtZSB9ID0gdGhpcy5wYXJhbWV0ZXJzXG4gICAgbGV0IHVud3JhcFJvb3QgPSBmYWxzZVxuICAgIGNvbnN0IGVycm9ycyA9IFtdXG4gICAgZm9yIChjb25zdCB7XG4gICAgICBuYW1lLCAvLyBTdHJpbmc6IFByb3BlcnR5IG5hbWUgdG8gZmV0Y2ggZnJvbSBkYXRhLiBPdmVycmlkYWJsZSBieSBgcm9vdGBcbiAgICAgIHR5cGUsIC8vIFN0cmluZzogV2hhdCB0eXBlIHNob3VsZCB0aGlzIHZhbGlkYXRlZCBhZ2FpbnN0IC8gY29lcmNlZCB0by5cbiAgICAgIGZyb20sIC8vIFN0cmluZzogQWxsb3cgcGFyYW1ldGVycyB0byBiZSAnYm9ycm93ZWQnIGZyb20gb3RoZXIgb2JqZWN0cy5cbiAgICAgIHJvb3QsIC8vIEJvb2xlYW46IFVzZSBmdWxsIHJvb3Qgb2JqZWN0LCBpbnN0ZWFkIG9mIGRhdGEgYXQgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICBtZW1iZXIgLy8gQm9vbGVhbjogRmV0Y2ggbWVtYmVyIGluc3RhbmNlIGluc3RlZCBvZiBkYXRhIGZyb20gcmVxdWVzdC5cbiAgICB9IG9mIHRoaXMucGFyYW1ldGVycy5saXN0KSB7XG4gICAgICAvLyBEb24ndCB2YWxpZGF0ZSBtZW1iZXIgcGFyYW1ldGVycyBhcyB0aGV5IGdldCByZXNvbHZlZCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgaWYgKG1lbWJlcikgY29udGludWVcbiAgICAgIGxldCB3cmFwUm9vdCA9IHJvb3RcbiAgICAgIGxldCBwYXJhbU5hbWUgPSBuYW1lXG4gICAgICAvLyBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCB3cmFwIHRoZSBmdWxsIHJvb3Qgb2JqZWN0IGFzIHZhbHVlIGFuZCB1bndyYXBcbiAgICAgIC8vIGF0IHRoZSBlbmQsIHNlZSBgdW53cmFwUm9vdGAuXG4gICAgICBpZiAoIXBhcmFtTmFtZSkge1xuICAgICAgICBwYXJhbU5hbWUgPSBkYXRhTmFtZVxuICAgICAgICB3cmFwUm9vdCA9IHRydWVcbiAgICAgICAgdW53cmFwUm9vdCA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh3cmFwUm9vdCkge1xuICAgICAgICAvLyBJZiByb290IGlzIHRvIGJlIHVzZWQsIHJlcGxhY2UgYHBhcmFtc2Agd2l0aCBhIG5ldyBvYmplY3Qgb24gd2hpY2hcbiAgICAgICAgLy8gdG8gc2V0IHRoZSByb290IG9iamVjdCB0byB2YWxpZGF0ZSB1bmRlciBgcGFyYW1ldGVycy5wYXJhbU5hbWVgXG4gICAgICAgIGlmIChwYXJhbXMgPT09IGRhdGEpIHtcbiAgICAgICAgICBwYXJhbXMgPSB7fVxuICAgICAgICB9XG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gZGF0YVxuICAgICAgfVxuICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgLy8gQWxsb3cgcGFyYW1ldGVycyB0byBiZSAnYm9ycm93ZWQnIGZyb20gb3RoZXIgb2JqZWN0cy5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFyYW1zKGN0eCwgZnJvbSlcbiAgICAgICAgLy8gU2VlIGFib3ZlIGZvciBhbiBleHBsYW5hdGlvbiBvZiBgY2xvbmUoKWA6XG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gY2xvbmUod3JhcFJvb3QgPyBkYXRhIDogZGF0YT8uW3BhcmFtTmFtZV0pXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdXG4gICAgICAgIC8vIGBwYXJhbWV0ZXJzLnZhbGlkYXRlKHBhcmFtcylgIGNvZXJjZXMgZGF0YSBpbiB0aGUgcXVlcnkgdG8gdGhlXG4gICAgICAgIC8vIHJlcXVpcmVkIGZvcm1hdHMsIGFjY29yZGluZyB0byB0aGUgcnVsZXMgc3BlY2lmaWVkIGhlcmU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9hanYvYmxvYi9tYXN0ZXIvQ09FUkNJT04ubWRcbiAgICAgICAgLy8gQ29lcmNpb24gaXNuJ3QgY3VycmVudGx5IG9mZmVyZWQgZm9yICdvYmplY3QnIGFuZCAnZGF0ZScgdHlwZXMsXG4gICAgICAgIC8vIHNvIGhhbmRsZSB0aGVzZSBjYXNlcyBwcmlvciB0byB0aGUgY2FsbCBvZiBgcGFyYW1ldGVycy52YWxpZGF0ZSgpYDpcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IHRoaXMuY29lcmNlVmFsdWUodHlwZSwgdmFsdWUsIHtcbiAgICAgICAgICAvLyBUaGUgbW9kZWwgdmFsaWRhdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgdGhyb3VnaCBgJHJlZmAuXG4gICAgICAgICAgc2tpcFZhbGlkYXRpb246IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSWYgY29lcmNpb24gaGFwcGVuZWQsIHJlcGxhY2UgdmFsdWUgaW4gcGFyYW1zIHdpdGggY29lcmNlZCBvbmU6XG4gICAgICAgIGlmIChjb2VyY2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gY29lcmNlZFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gQ29udmVydCBlcnJvciB0byBBanYgdmFsaWRhdGlvbiBlcnJvciBmb3JtYXQ6XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBkYXRhUGF0aDogYC4ke3BhcmFtTmFtZX1gLCAvLyBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvblxuICAgICAgICAgIGtleXdvcmQ6ICd0eXBlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCBlcnIudG9TdHJpbmcoKSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZSB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0RGF0YSA9ICgpID0+IHVud3JhcFJvb3QgPyBwYXJhbXNbZGF0YU5hbWVdIDogcGFyYW1zXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGFyYW1ldGVycy52YWxpZGF0ZShwYXJhbXMpXG4gICAgICByZXR1cm4gZ2V0RGF0YSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5lcnJvcnMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZXJyb3IuZXJyb3JzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgIHR5cGU6ICdQYXJhbWV0ZXJWYWxpZGF0aW9uJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlZCBhY3Rpb24gcGFyYW1ldGVycyBhcmUgbm90IHZhbGlkJyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBqc29uOiBnZXREYXRhKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVSZXN1bHQocmVzdWx0KSB7XG4gICAgaWYgKHRoaXMucmV0dXJucy52YWxpZGF0ZSkge1xuICAgICAgY29uc3QgcmV0dXJuc05hbWUgPSB0aGlzLmhhbmRsZXIucmV0dXJucy5uYW1lXG4gICAgICAvLyBVc2UgZGF0YU5hbWUgaWYgbm8gbmFtZSBpcyBnaXZlbiwgc2VlOlxuICAgICAgLy8gQXBwbGljYXRpb24uY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IocmV0dXJucywgeyBkYXRhTmFtZSB9KVxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgW3JldHVybnNOYW1lIHx8IHRoaXMucmV0dXJucy5kYXRhTmFtZV06IHJlc3VsdFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIG5hbWVkIHJlc3VsdCBpcyBkZWZpbmVkLCByZXR1cm4gdGhlIGRhdGEgd3JhcHBlZCxcbiAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIHVud3JhcHBlZCByZXN1bHQgb2JqZWN0LlxuICAgICAgY29uc3QgZ2V0UmVzdWx0ID0gKCkgPT4gcmV0dXJuc05hbWUgPyBkYXRhIDogcmVzdWx0XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJldHVybnMudmFsaWRhdGUoZGF0YSlcbiAgICAgICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgdHlwZTogJ1Jlc3VsdFZhbGlkYXRpb24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgcmV0dXJuZWQgYWN0aW9uIHJlc3VsdCBpcyBub3QgdmFsaWQnLFxuICAgICAgICAgIGVycm9yczogZXJyb3IuZXJyb3JzLFxuICAgICAgICAgIGpzb246IGdldFJlc3VsdCgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGNvbGxlY3RBcmd1bWVudHMoY3R4LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IGxpc3QsIGFzT2JqZWN0IH0gPSB0aGlzLnBhcmFtZXRlcnNcblxuICAgIGNvbnN0IGFyZ3MgPSBhc09iamVjdCA/IFt7fV0gOiBbXVxuICAgIGNvbnN0IGFkZEFyZ3VtZW50ID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoYXNPYmplY3QpIHtcbiAgICAgICAgYXJnc1swXVtuYW1lXSA9IHZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1lbWJlciA9IG51bGxcbiAgICAvLyBJZiB3ZSBoYXZlIHBhcmFtZXRlcnMsIGFkZCB0aGVtIHRvIHRoZSBhcmd1bWVudHMgbm93LFxuICAgIC8vIHdoaWxlIGFsc28ga2VlcGluZyB0cmFjayBvZiBjb25zdW1lZCBwYXJhbWV0ZXJzOlxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgbGlzdCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBwYXJhbVxuICAgICAgLy8gSGFuZGxlIGB7IG1lbWJlcjogdHJ1ZSB9YCBwYXJhbWV0ZXJzIHNlcGFyYXRlbHksIGJ5IGRlbGVnYXRpbmcgdG9cbiAgICAgIC8vIGBnZXRNZW1iZXIoKWAgdG8gcmVzb2x2ZSB0byB0aGUgZ2l2ZW4gbWVtYmVyLlxuICAgICAgaWYgKHBhcmFtLm1lbWJlcikge1xuICAgICAgICBtZW1iZXIgPSBhd2FpdCB0aGlzLmdldE1lbWJlcihjdHgsIHBhcmFtKVxuICAgICAgICBhZGRBcmd1bWVudChuYW1lLCBtZW1iZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCB1c2UgdGhlIGJvZHkgb2JqZWN0IChwYXJhbXMpXG4gICAgICAgIGFkZEFyZ3VtZW50KG5hbWUsIG5hbWUgPyBwYXJhbXNbbmFtZV0gOiBwYXJhbXMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFyZ3MsIG1lbWJlciB9XG4gIH1cblxuICBjb2VyY2VWYWx1ZSh0eXBlLCB2YWx1ZSwgbW9kZWxPcHRpb25zKSB7XG4gICAgLy8gU2VlIGlmIHBhcmFtIG5lZWRzIGFkZGl0aW9uYWwgY29lcmNpb246XG4gICAgaWYgKHZhbHVlICYmIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VlIGlmIHRoZSBkZWZpbmVkIHR5cGUocykgcmVxdWlyZSBjb2VyY2lvbiB0byBvYmplY3RzOlxuICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGFzQXJyYXkodHlwZSkuZmluZChcbiAgICAgICAgLy8gQ29lcmNlIHRvIG9iamVjdCBpZiB0eXBlIGlzICdvYmplY3QnIG9yIGEga25vd24gbW9kZWwgbmFtZS5cbiAgICAgICAgdHlwZSA9PiB0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlIGluIHRoaXMuYXBwLm1vZGVsc1xuICAgICAgKVxuICAgICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgIGlmICghL15cXHsuKlxcfSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHNpbXBsaWZpZWQgRGl0byBvYmplY3Qgbm90YXRpb24gdG8gSlNPTiwgc3VwcG9ydGluZzpcbiAgICAgICAgICAgIC8vIC0gYFwia2V5MVwiOlgsIFwia2V5MlwiOllgIChjdXJseSBicmFjZXMgYXJlIGFkZGVkIGFuZCBwYXJzZWQgdGhyb3VnaFxuICAgICAgICAgICAgLy8gICBgSlNPTi5wYXJzZSgpYClcbiAgICAgICAgICAgIC8vIC0gYGtleTE6WCxrZXkyOllgIChhIHNpbXBsZSBwYXJzZXIgaXMgYXBwbGllZCwgc3BsaXR0aW5nIGludG9cbiAgICAgICAgICAgIC8vICAgZW50cmllcyBhbmQga2V5L3ZhbHVlIHBhaXJzLCB2YWx1c2UgYXJlIHBhcnNlZCB3aXRoXG4gICAgICAgICAgICAvLyAgIGBKU09OLnBhcnNlKClgLCBmYWxsaW5nIGJhY2sgdG8gc3RyaW5nLlxuICAgICAgICAgICAgaWYgKC9cIi8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gSnVzdCBhZGQgdGhlIGN1cmx5IGJyYWNlcyBhbmQgcGFyc2UgYXMgSlNPTlxuICAgICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UoYHske3ZhbHVlfX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQSBzaW1wbGUgdmVyc2lvbiBvZiBuYW1lZCBrZXkvdmFsdWUgcGFpcnMsIHZhbHVlcyBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gc3RyaW5ncyBvciBudW1iZXJzLlxuICAgICAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZS5zcGxpdCgvXFxzKixcXHMqL2cpLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IFtrZXksIHZhbF0gPSBlbnRyeS5zcGxpdCgvXFxzKjpcXHMqLylcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgLy8gVHJ5IHBhcnNpbmcgYmFzaWMgdHlwZXMsIGJ1dCBmYWxsIGJhY2sgdG8gdW5xdW90ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWwpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB2YWxdXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmplY3RUeXBlICE9PSAnb2JqZWN0JyAmJiBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBQb2pvIHRvIHRoZSBkZXNpcmVkIERpdG8gbW9kZWw6XG4gICAgICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IHRoaXMuYXBwLm1vZGVsc1tvYmplY3RUeXBlXVxuICAgICAgICAgIGlmIChtb2RlbENsYXNzICYmICEodmFsdWUgaW5zdGFuY2VvZiBtb2RlbENsYXNzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbENsYXNzLmZyb21Kc29uKHZhbHVlLCBtb2RlbE9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgYXN5bmMgZ2V0TWVtYmVyKC8qIGN0eCwgcGFyYW0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgTWVtYmVyQWN0aW9uYCwgd2hlcmUgaXQgcmVzb2x2ZXMgdG8gdGhlIG1lbWJlclxuICAgIC8vIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiByb3V0ZS5cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iXX0=
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.default = void 0;
5
-
6
- var _ControllerAction = _interopRequireDefault(require("./ControllerAction"));
7
-
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
-
10
- class MemberAction extends _ControllerAction.default {
11
- async callAction(ctx) {
12
- return super.callAction(this.controller.getContextWithMemberId(ctx));
13
- }
14
-
15
- async getMember(ctx, param) {
16
- return this.controller.getMember(ctx, this.handler, param);
17
- }
18
-
19
- }
20
-
21
- exports.default = MemberAction;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9NZW1iZXJBY3Rpb24uanMiXSwibmFtZXMiOlsiTWVtYmVyQWN0aW9uIiwiQ29udHJvbGxlckFjdGlvbiIsImNhbGxBY3Rpb24iLCJjdHgiLCJjb250cm9sbGVyIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsImdldE1lbWJlciIsInBhcmFtIiwiaGFuZGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7OztBQUVlLE1BQU1BLFlBQU4sU0FBMkJDLHlCQUEzQixDQUE0QztBQUV6QyxRQUFWQyxVQUFVLENBQUNDLEdBQUQsRUFBTTtBQUVwQixXQUFPLE1BQU1ELFVBQU4sQ0FBaUIsS0FBS0UsVUFBTCxDQUFnQkMsc0JBQWhCLENBQXVDRixHQUF2QyxDQUFqQixDQUFQO0FBQ0Q7O0FBR2MsUUFBVEcsU0FBUyxDQUFDSCxHQUFELEVBQU1JLEtBQU4sRUFBYTtBQWMxQixXQUFPLEtBQUtILFVBQUwsQ0FBZ0JFLFNBQWhCLENBQTBCSCxHQUExQixFQUErQixLQUFLSyxPQUFwQyxFQUE2Q0QsS0FBN0MsQ0FBUDtBQUNEOztBQXZCd0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckFjdGlvbiBmcm9tICcuL0NvbnRyb2xsZXJBY3Rpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbWJlckFjdGlvbiBleHRlbmRzIENvbnRyb2xsZXJBY3Rpb24ge1xuICAvLyBAb3ZlcnJpZGVcbiAgYXN5bmMgY2FsbEFjdGlvbihjdHgpIHtcbiAgICAvLyBJbmNsdWRlIGBjdHgubWVtYmVySWRgIGZvciBjb252ZW5pZW50IGFjY2VzcyBpbiBtZW1iZXIgYWN0aW9ucy5cbiAgICByZXR1cm4gc3VwZXIuY2FsbEFjdGlvbih0aGlzLmNvbnRyb2xsZXIuZ2V0Q29udGV4dFdpdGhNZW1iZXJJZChjdHgpKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGFzeW5jIGdldE1lbWJlcihjdHgsIHBhcmFtKSB7XG4gICAgLy8gbWVtYmVyIEBwYXJhbWV0ZXJzKCkgY2FuIHByb3ZpZGUgc3BlY2lhbCBxdWVyeSBwYXJhbWV0ZXJzIGFzIHdlbGwsXG4gICAgLy8gYW5kIHRoZXkgY2FuIGV2ZW4gY29udHJvbGwgYGZvclVwZGF0ZSgpYCBiZWhhdmlvcjpcbiAgICAvLyB7XG4gICAgLy8gICBtZW1iZXI6IHRydWUsXG4gICAgLy8gICBxdWVyeTogeyAuLi4gfSxcbiAgICAvLyAgIGZvclVwZGF0ZTogdHJ1ZSxcbiAgICAvLyAgIG1vZGlmeTogcXVlcnkgPT4gcXVlcnkuZGVnYnVnKClcbiAgICAvLyB9XG4gICAgLy8gVGhlc2UgYXJlIHBhc3NlZCBvbiB0byBhbmQgaGFuZGxlZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXIjZ2V0TWVtYmVyKClgLlxuICAgIC8vIEZvciBoYW5kbGluZyBvZiBgbWVtYmVyOiB0cnVlYCBhbmQgY2FsbGluZyBvZiBgTWVtYmVyQWN0aW9uLmdldE1lbWJlcigpYCxcbiAgICAvLyBzZWUgYENvbnRyb2xsZXJBY3Rpb24jY29sbGVjdEFyZ3VtZW50cygpYC5cbiAgICAvLyBQYXNzIG9uIGB0aGlzLmhhbmRsZXJgIGFzIGBiYXNlYCBmb3IgYHNldHVwUXVlcnkoKWAsXG4gICAgLy8gdG8gaGFuZGxlIHRoZSBzZXR0aW5nIG9mIGBoYW5kbGVyLnNjb3BlYCAmIGNvLiBvbiB0aGUgcXVlcnkuXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRNZW1iZXIoY3R4LCB0aGlzLmhhbmRsZXIsIHBhcmFtKVxuICB9XG59XG4iXX0=
@@ -1,64 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.ModelController = void 0;
5
-
6
- var _pluralize = _interopRequireDefault(require("pluralize"));
7
-
8
- var _utils = require("@ditojs/utils");
9
-
10
- var _errors = require("../errors");
11
-
12
- var _CollectionController = require("./CollectionController");
13
-
14
- var _RelationController = require("./RelationController");
15
-
16
- var _utils2 = require("../utils");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class ModelController extends _CollectionController.CollectionController {
21
- setup() {
22
- super.setup(true);
23
- this.modelClass = this.modelClass || this.app.models[(0, _utils.camelize)(_pluralize.default.singular(this.name), true)];
24
- this.relations = this.setupRelations();
25
- }
26
-
27
- setupRelations() {
28
- const relations = this.inheritValues('relations');
29
-
30
- for (const name in relations) {
31
- const relation = (0, _utils2.setupPropertyInheritance)(relations, name);
32
-
33
- if ((0, _utils.isObject)(relation)) {
34
- relations[name] = this.setupRelation(relation, name);
35
- } else {
36
- throw new _errors.ControllerError(this, `Invalid relation '${name}'.`);
37
- }
38
- }
39
-
40
- return relations;
41
- }
42
-
43
- setupRelation(object, name) {
44
- const relationInstance = this.modelClass.getRelations()[name];
45
- const relationDefinition = this.modelClass.definition.relations[name];
46
-
47
- if (!relationInstance || !relationDefinition) {
48
- throw new _errors.ControllerError(this, `Relation '${name}' not found.`);
49
- }
50
-
51
- return new _RelationController.RelationController(this, object, relationInstance, relationDefinition);
52
- }
53
-
54
- async execute(ctx, execute) {
55
- const trx = ctx.transaction;
56
- const query = this.modelClass.query(trx);
57
- this.setupQuery(query);
58
- return execute(query, trx);
59
- }
60
-
61
- }
62
-
63
- exports.ModelController = ModelController;
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Nb2RlbENvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiTW9kZWxDb250cm9sbGVyIiwiQ29sbGVjdGlvbkNvbnRyb2xsZXIiLCJzZXR1cCIsIm1vZGVsQ2xhc3MiLCJhcHAiLCJtb2RlbHMiLCJwbHVyYWxpemUiLCJzaW5ndWxhciIsIm5hbWUiLCJyZWxhdGlvbnMiLCJzZXR1cFJlbGF0aW9ucyIsImluaGVyaXRWYWx1ZXMiLCJyZWxhdGlvbiIsInNldHVwUmVsYXRpb24iLCJDb250cm9sbGVyRXJyb3IiLCJvYmplY3QiLCJyZWxhdGlvbkluc3RhbmNlIiwiZ2V0UmVsYXRpb25zIiwicmVsYXRpb25EZWZpbml0aW9uIiwiZGVmaW5pdGlvbiIsIlJlbGF0aW9uQ29udHJvbGxlciIsImV4ZWN1dGUiLCJjdHgiLCJ0cngiLCJ0cmFuc2FjdGlvbiIsInF1ZXJ5Iiwic2V0dXBRdWVyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLGVBQU4sU0FBOEJDLDBDQUE5QixDQUFtRDtBQUN4REMsRUFBQUEsS0FBSyxHQUFHO0FBQ04sVUFBTUEsS0FBTixDQUFZLElBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEtBQUtBLFVBQUwsSUFDaEIsS0FBS0MsR0FBTCxDQUFTQyxNQUFULENBQWdCLHFCQUFTQyxtQkFBVUMsUUFBVixDQUFtQixLQUFLQyxJQUF4QixDQUFULEVBQXdDLElBQXhDLENBQWhCLENBREY7QUFFQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtDLGNBQUwsRUFBakI7QUFDRDs7QUFFREEsRUFBQUEsY0FBYyxHQUFHO0FBS2YsVUFBTUQsU0FBUyxHQUFHLEtBQUtFLGFBQUwsQ0FBbUIsV0FBbkIsQ0FBbEI7O0FBQ0EsU0FBSyxNQUFNSCxJQUFYLElBQW1CQyxTQUFuQixFQUE4QjtBQUM1QixZQUFNRyxRQUFRLEdBQUcsc0NBQXlCSCxTQUF6QixFQUFvQ0QsSUFBcEMsQ0FBakI7O0FBQ0EsVUFBSSxxQkFBU0ksUUFBVCxDQUFKLEVBQXdCO0FBQ3RCSCxRQUFBQSxTQUFTLENBQUNELElBQUQsQ0FBVCxHQUFrQixLQUFLSyxhQUFMLENBQW1CRCxRQUFuQixFQUE2QkosSUFBN0IsQ0FBbEI7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFNLElBQUlNLHVCQUFKLENBQW9CLElBQXBCLEVBQTJCLHFCQUFvQk4sSUFBSyxJQUFwRCxDQUFOO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPQyxTQUFQO0FBQ0Q7O0FBRURJLEVBQUFBLGFBQWEsQ0FBQ0UsTUFBRCxFQUFTUCxJQUFULEVBQWU7QUFDMUIsVUFBTVEsZ0JBQWdCLEdBQUcsS0FBS2IsVUFBTCxDQUFnQmMsWUFBaEIsR0FBK0JULElBQS9CLENBQXpCO0FBQ0EsVUFBTVUsa0JBQWtCLEdBQUcsS0FBS2YsVUFBTCxDQUFnQmdCLFVBQWhCLENBQTJCVixTQUEzQixDQUFxQ0QsSUFBckMsQ0FBM0I7O0FBQ0EsUUFBSSxDQUFDUSxnQkFBRCxJQUFxQixDQUFDRSxrQkFBMUIsRUFBOEM7QUFDNUMsWUFBTSxJQUFJSix1QkFBSixDQUFvQixJQUFwQixFQUEyQixhQUFZTixJQUFLLGNBQTVDLENBQU47QUFDRDs7QUFDRCxXQUFPLElBQUlZLHNDQUFKLENBQ0wsSUFESyxFQUNDTCxNQURELEVBQ1NDLGdCQURULEVBQzJCRSxrQkFEM0IsQ0FBUDtBQUdEOztBQUdZLFFBQVBHLE9BQU8sQ0FBQ0MsR0FBRCxFQUFNRCxPQUFOLEVBQWU7QUFDMUIsVUFBTUUsR0FBRyxHQUFHRCxHQUFHLENBQUNFLFdBQWhCO0FBQ0EsVUFBTUMsS0FBSyxHQUFHLEtBQUt0QixVQUFMLENBQWdCc0IsS0FBaEIsQ0FBc0JGLEdBQXRCLENBQWQ7QUFDQSxTQUFLRyxVQUFMLENBQWdCRCxLQUFoQjtBQUNBLFdBQU9KLE9BQU8sQ0FBQ0ksS0FBRCxFQUFRRixHQUFSLENBQWQ7QUFDRDs7QUExQ3VEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBsdXJhbGl6ZSBmcm9tICdwbHVyYWxpemUnXG5pbXBvcnQgeyBpc09iamVjdCwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgQ29udHJvbGxlckVycm9yIH0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vQ29sbGVjdGlvbkNvbnRyb2xsZXInXG5pbXBvcnQgeyBSZWxhdGlvbkNvbnRyb2xsZXIgfSBmcm9tICcuL1JlbGF0aW9uQ29udHJvbGxlcidcbmltcG9ydCB7IHNldHVwUHJvcGVydHlJbmhlcml0YW5jZSB9IGZyb20gJ0AvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBNb2RlbENvbnRyb2xsZXIgZXh0ZW5kcyBDb2xsZWN0aW9uQ29udHJvbGxlciB7XG4gIHNldHVwKCkge1xuICAgIHN1cGVyLnNldHVwKHRydWUpXG4gICAgdGhpcy5tb2RlbENsYXNzID0gdGhpcy5tb2RlbENsYXNzIHx8XG4gICAgICB0aGlzLmFwcC5tb2RlbHNbY2FtZWxpemUocGx1cmFsaXplLnNpbmd1bGFyKHRoaXMubmFtZSksIHRydWUpXVxuICAgIHRoaXMucmVsYXRpb25zID0gdGhpcy5zZXR1cFJlbGF0aW9ucygpXG4gIH1cblxuICBzZXR1cFJlbGF0aW9ucygpIHtcbiAgICAvLyBJbmhlcml0IGByZWxhdGlvbnNgIGZyb20gdGhlIGNvbnRyb2xsZXIgYW5kIC8gb3IgaXRzIHN1Yi1jbGFzc2VzLFxuICAgIC8vIHRoZW4gYnVpbGQgaW5oZXJpdGFuY2UgY2hhaW5zIGZvciBlYWNoIHJlbGF0aW9uIG9iamVjdCB0aHJvdWdoXG4gICAgLy8gYHNldHVwUHJvcGVydHlJbmhlcml0YW5jZSgpYCwgYmVmb3JlIGNyZWF0aW5nIHRoZSByZWxhdGlvbiBjb250cm9sbGVycyxcbiAgICAvLyB3aGljaCB0aGVuIGNhcnJ5IG9uIHdpdGggc2V0dGluZyB1cCBpbmhlcml0YW5jZSBmb3IgdGhlaXIgYWN0aW9ucy5cbiAgICBjb25zdCByZWxhdGlvbnMgPSB0aGlzLmluaGVyaXRWYWx1ZXMoJ3JlbGF0aW9ucycpXG4gICAgZm9yIChjb25zdCBuYW1lIGluIHJlbGF0aW9ucykge1xuICAgICAgY29uc3QgcmVsYXRpb24gPSBzZXR1cFByb3BlcnR5SW5oZXJpdGFuY2UocmVsYXRpb25zLCBuYW1lKVxuICAgICAgaWYgKGlzT2JqZWN0KHJlbGF0aW9uKSkge1xuICAgICAgICByZWxhdGlvbnNbbmFtZV0gPSB0aGlzLnNldHVwUmVsYXRpb24ocmVsYXRpb24sIG5hbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsIGBJbnZhbGlkIHJlbGF0aW9uICcke25hbWV9Jy5gKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpb25zXG4gIH1cblxuICBzZXR1cFJlbGF0aW9uKG9iamVjdCwgbmFtZSkge1xuICAgIGNvbnN0IHJlbGF0aW9uSW5zdGFuY2UgPSB0aGlzLm1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKClbbmFtZV1cbiAgICBjb25zdCByZWxhdGlvbkRlZmluaXRpb24gPSB0aGlzLm1vZGVsQ2xhc3MuZGVmaW5pdGlvbi5yZWxhdGlvbnNbbmFtZV1cbiAgICBpZiAoIXJlbGF0aW9uSW5zdGFuY2UgfHwgIXJlbGF0aW9uRGVmaW5pdGlvbikge1xuICAgICAgdGhyb3cgbmV3IENvbnRyb2xsZXJFcnJvcih0aGlzLCBgUmVsYXRpb24gJyR7bmFtZX0nIG5vdCBmb3VuZC5gKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uQ29udHJvbGxlcihcbiAgICAgIHRoaXMsIG9iamVjdCwgcmVsYXRpb25JbnN0YW5jZSwgcmVsYXRpb25EZWZpbml0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGFzeW5jIGV4ZWN1dGUoY3R4LCBleGVjdXRlKSB7XG4gICAgY29uc3QgdHJ4ID0gY3R4LnRyYW5zYWN0aW9uXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLm1vZGVsQ2xhc3MucXVlcnkodHJ4KVxuICAgIHRoaXMuc2V0dXBRdWVyeShxdWVyeSlcbiAgICByZXR1cm4gZXhlY3V0ZShxdWVyeSwgdHJ4KVxuICB9XG59XG4iXX0=
@@ -1,82 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.RelationController = void 0;
5
-
6
- require("core-js/modules/esnext.async-iterator.filter.js");
7
-
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
-
10
- require("core-js/modules/esnext.iterator.filter.js");
11
-
12
- var _picocolors = _interopRequireDefault(require("picocolors"));
13
-
14
- var _errors = require("../errors");
15
-
16
- var _CollectionController = require("./CollectionController");
17
-
18
- var _utils = require("../utils");
19
-
20
- var _utils2 = require("@ditojs/utils");
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
24
- class RelationController extends _CollectionController.CollectionController {
25
- constructor(parent, object, relationInstance, relationDefinition) {
26
- super(parent.app, null);
27
- this.collection = this.toCoreActions({});
28
- this.member = this.toCoreActions({});
29
-
30
- if (parent.modelClass !== relationInstance.ownerModelClass) {
31
- throw new _errors.ControllerError(parent, `Invalid parent controller for relation '${relationInstance.name}'.`);
32
- }
33
-
34
- this.parent = parent;
35
- this.object = object;
36
- this.relationInstance = relationInstance;
37
- this.relationDefinition = relationDefinition;
38
- this.name = relationInstance.name;
39
- this.modelClass = relationInstance.relatedModelClass;
40
- this.isOneToOne = relationInstance.isOneToOne();
41
- this.relate = !relationDefinition.owner;
42
- this.unrelate = !relationDefinition.owner;
43
- this.graph = parent.graph;
44
- this.transacted = parent.transacted;
45
- this.level = parent.level + 1;
46
-
47
- if (parent.scope) {
48
- this.scope = (0, _utils2.asArray)(parent.scope).filter(scope => (0, _utils.getScope)(scope).graph);
49
- }
50
-
51
- this.path = this.app.normalizePath(this.name);
52
- this.url = `${this.parent.url}/${this.parent.getPath('member', this.path)}`;
53
- this.log(`${_picocolors.default.blue(this.path)}${_picocolors.default.white(':')}`, this.level);
54
-
55
- for (const key in this.object) {
56
- if (!['relation', 'member', 'allow'].includes(key)) {
57
- this[key] = this.object[key];
58
- }
59
- }
60
-
61
- this.setup(false);
62
- }
63
-
64
- inheritValues(type) {
65
- const values = (0, _utils.setupPropertyInheritance)(this.object, type === 'collection' ? 'relation' : type, super.inheritValues(type));
66
- return values;
67
- }
68
-
69
- async execute(ctx, execute) {
70
- const id = this.parent.getMemberId(ctx);
71
- return this.parent.execute(ctx, async (parentQuery, trx) => {
72
- const model = await parentQuery.ignoreScope().findById(id).throwIfNotFound().select(...this.relationInstance.ownerProp.props);
73
- const query = model.$relatedQuery(this.relationInstance.name, trx);
74
- this.setupQuery(query);
75
- return execute(query, trx);
76
- });
77
- }
78
-
79
- }
80
-
81
- exports.RelationController = RelationController;
82
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9SZWxhdGlvbkNvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUmVsYXRpb25Db250cm9sbGVyIiwiQ29sbGVjdGlvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsInBhcmVudCIsIm9iamVjdCIsInJlbGF0aW9uSW5zdGFuY2UiLCJyZWxhdGlvbkRlZmluaXRpb24iLCJhcHAiLCJjb2xsZWN0aW9uIiwidG9Db3JlQWN0aW9ucyIsIm1lbWJlciIsIm1vZGVsQ2xhc3MiLCJvd25lck1vZGVsQ2xhc3MiLCJDb250cm9sbGVyRXJyb3IiLCJuYW1lIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJpc09uZVRvT25lIiwicmVsYXRlIiwib3duZXIiLCJ1bnJlbGF0ZSIsImdyYXBoIiwidHJhbnNhY3RlZCIsImxldmVsIiwic2NvcGUiLCJmaWx0ZXIiLCJwYXRoIiwibm9ybWFsaXplUGF0aCIsInVybCIsImdldFBhdGgiLCJsb2ciLCJwaWNvIiwiYmx1ZSIsIndoaXRlIiwia2V5IiwiaW5jbHVkZXMiLCJzZXR1cCIsImluaGVyaXRWYWx1ZXMiLCJ0eXBlIiwidmFsdWVzIiwiZXhlY3V0ZSIsImN0eCIsImlkIiwiZ2V0TWVtYmVySWQiLCJwYXJlbnRRdWVyeSIsInRyeCIsIm1vZGVsIiwiaWdub3JlU2NvcGUiLCJmaW5kQnlJZCIsInRocm93SWZOb3RGb3VuZCIsInNlbGVjdCIsIm93bmVyUHJvcCIsInByb3BzIiwicXVlcnkiLCIkcmVsYXRlZFF1ZXJ5Iiwic2V0dXBRdWVyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLGtCQUFOLFNBQWlDQywwQ0FBakMsQ0FBc0Q7QUFDM0RDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxNQUFULEVBQWlCQyxnQkFBakIsRUFBbUNDLGtCQUFuQyxFQUF1RDtBQUNoRSxVQUFNSCxNQUFNLENBQUNJLEdBQWIsRUFBa0Is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LFlBQU1DLEtBQUssR0FBRyxNQUFNRixXQUFXLENBQzVCRyxXQURpQixHQUVqQkMsUUFGaUIsQ0FFUk4sRUFGUSxFQUdqQk8sZUFIaUIsR0FLakJDLE1BTGlCLENBS1YsR0FBRyxLQUFLNUMsZ0JBQUwsQ0FBc0I2QyxTQUF0QixDQUFnQ0MsS0FMekIsQ0FBcEI7QUFRQSxZQUFNQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ1EsYUFBTixDQUFvQixLQUFLaEQsZ0JBQUwsQ0FBc0JTLElBQTFDLEVBQWdEOEIsR0FBaEQsQ0FBZDtBQUNBLFdBQUtVLFVBQUwsQ0FBZ0JGLEtBQWhCO0FBQ0EsYUFBT2IsT0FBTyxDQUFDYSxLQUFELEVBQVFSLEdBQVIsQ0FBZDtBQUNELEtBYkksQ0FBUDtBQWVEOztBQWxGMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJ1xuaW1wb3J0IHsgQ29udHJvbGxlckVycm9yIH0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vQ29sbGVjdGlvbkNvbnRyb2xsZXInXG5pbXBvcnQgeyBzZXR1cFByb3BlcnR5SW5oZXJpdGFuY2UsIGdldFNjb3BlIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY2xhc3MgUmVsYXRpb25Db250cm9sbGVyIGV4dGVuZHMgQ29sbGVjdGlvbkNvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihwYXJlbnQsIG9iamVjdCwgcmVsYXRpb25JbnN0YW5jZSwgcmVsYXRpb25EZWZpbml0aW9uKSB7XG4gICAgc3VwZXIocGFyZW50LmFwcCwgbnVsbClcbiAgICBpZiAocGFyZW50Lm1vZGVsQ2xhc3MgIT09IHJlbGF0aW9uSW5zdGFuY2Uub3duZXJNb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHBhcmVudCxcbiAgICAgICAgYEludmFsaWQgcGFyZW50IGNvbnRyb2xsZXIgZm9yIHJlbGF0aW9uICcke3JlbGF0aW9uSW5zdGFuY2UubmFtZX0nLmApXG4gICAgfVxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3RcbiAgICB0aGlzLnJlbGF0aW9uSW5zdGFuY2UgPSByZWxhdGlvbkluc3RhbmNlXG4gICAgdGhpcy5yZWxhdGlvbkRlZmluaXRpb24gPSByZWxhdGlvbkRlZmluaXRpb25cbiAgICB0aGlzLm5hbWUgPSByZWxhdGlvbkluc3RhbmNlLm5hbWVcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSByZWxhdGlvbkluc3RhbmNlLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgdGhpcy5pc09uZVRvT25lID0gcmVsYXRpb25JbnN0YW5jZS5pc09uZVRvT25lKClcbiAgICB0aGlzLnJlbGF0ZSA9ICFyZWxhdGlvbkRlZmluaXRpb24ub3duZXJcbiAgICB0aGlzLnVucmVsYXRlID0gIXJlbGF0aW9uRGVmaW5pdGlvbi5vd25lclxuICAgIC8vIEluaGVyaXQgcGFyZW50IHZhbHVlczpcbiAgICB0aGlzLmdyYXBoID0gcGFyZW50LmdyYXBoXG4gICAgdGhpcy50cmFuc2FjdGVkID0gcGFyZW50LnRyYW5zYWN0ZWRcbiAgICB0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMVxuICAgIGlmIChwYXJlbnQuc2NvcGUpIHtcbiAgICAgIC8vIEluaGVyaXQgb25seSB0aGUgZ3JhcGggc2NvcGVzIHNpbmNlIGl0J3MgaW4gaXRzIG5hdHVyZSB0byBwcm9wYWdhdGUgdG9cbiAgICAgIC8vIHJlbGF0aW9uczpcbiAgICAgIHRoaXMuc2NvcGUgPSBhc0FycmF5KHBhcmVudC5zY29wZSkuZmlsdGVyKHNjb3BlID0+IGdldFNjb3BlKHNjb3BlKS5ncmFwaClcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZTpcbiAgICB0aGlzLnBhdGggPSB0aGlzLmFwcC5ub3JtYWxpemVQYXRoKHRoaXMubmFtZSlcbiAgICB0aGlzLnVybCA9IGAke3RoaXMucGFyZW50LnVybH0vJHt0aGlzLnBhcmVudC5nZXRQYXRoKCdtZW1iZXInLCB0aGlzLnBhdGgpfWBcbiAgICB0aGlzLmxvZyhgJHtwaWNvLmJsdWUodGhpcy5wYXRoKX0ke3BpY28ud2hpdGUoJzonKX1gLCB0aGlzLmxldmVsKVxuICAgIC8vIENvcHkgb3ZlciBhbGwgZmllbGRzIGluIHRoZSByZWxhdGlvbiBvYmplY3QgZXhjZXB0IHRoZSBvbmVzIHRoYXQgYXJlXG4gICAgLy8gZ29pbmcgdG8gYmUgaW5oZXJpdGVkIGluIGBzZXR1cCgpYCAocmVsYXRpb24sIG1lbWJlciwgYWxsb3cpLCBmb3JcbiAgICAvLyBzZXR0aW5ncyBsaWtlIHNjb3BlLCBldGMuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5vYmplY3QpIHtcbiAgICAgIGlmICghWydyZWxhdGlvbicsICdtZW1iZXInLCAnYWxsb3cnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHRoaXMub2JqZWN0W2tleV1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXR1cChmYWxzZSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBpbmhlcml0VmFsdWVzKHR5cGUpIHtcbiAgICAvLyBTaW5jZSBSZWxhdGlvbkNvbnRyb2xsZXIgYXJlIG1hcHBlZCB0byBuZXN0ZWQgYHJlbGF0aW9uc2Agb2JqZWN0cyBpblxuICAgIC8vIE1vZGVsQ29udHJvbGxlciBwYXJlbnRzIGFuZCBhcmUgbmV2ZXIgZXh0ZW5kZWQgZGlyZWN0bHkgaW4gdGhlIHVzZXIgbGFuZFxuICAgIC8vIGNvZGUsIGluaGVyaXRhbmNlIHdvcmtzIGRpZmZlcmVudGx5IGhlcmUgdGhhbiBvbiB0aGUgb3RoZXIgY29udHJvbGxlcnM6XG4gICAgLy8gTW9kZWxDb250cm9sbGVyIGFscmVhZHkgc2V0cyB1cCBpbmhlcml0YW5jZSBmb3IgaXRzIGByZWxhdGlvbnNgIG9iamVjdFxuICAgIC8vIGFuZCBpdHMgZW50cmllcyBmb3IgZWFjaCByZWxhdGlvbiBmcm9tIHdoaWNoIGBvYmplY3RgIGlzIHJldHJpZXZlZC5cbiAgICAvLyBCdXQgdGhlIGFjdGlvbnMgcGVyIHJlbGF0aW9uIHN0aWxsIG5lZWQgdG8gaGF2ZSBpbmhlcml0YW5jZSBzZXQgdXAsXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlcyBpbiBpdHMgcGFyZW50IGNvbnRyb2xsZXIgYW5kIHBvdGVudGlhbCBzdXBlci1jbGFzc2VzLFxuICAgIC8vIGZhbGxpbmcgYmFjayBvbiB0aGUgZGVmaW5pdGlvbnMgaW4gUmVsYXRpb25Db250cm9sbGVyIGFuZCBpdHMgaW5oZXJpdGVkXG4gICAgLy8gdmFsdWVzIGZyb20gTW9kZWxDb250cm9sbGVyLlxuICAgIGNvbnN0IHZhbHVlcyA9IHNldHVwUHJvcGVydHlJbmhlcml0YW5jZShcbiAgICAgIHRoaXMub2JqZWN0LFxuICAgICAgLy8gT24gdGhlIHJlbGF0aW9uIG9iamVjdHMsIHRoZSBgY29sbGVjdGlvbmAgYWN0aW9ucyBhcmUgc3RvcmVkIGluIGFcbiAgICAgIC8vIGByZWxhdGlvbmAgb2JqZWN0LCB0byBtYWtlIHNlbnNlIGJvdGggZm9yIG9uZS0gYW5kIG1hbnktcmVsYXRpb25zOlxuICAgICAgdHlwZSA9PT0gJ2NvbGxlY3Rpb24nID8gJ3JlbGF0aW9uJyA6IHR5cGUsXG4gICAgICAvLyBTZXQgdXAgaW5oZXJpdGFuY2UgZm9yIFJlbGF0aW9uQ29udHJvbGxlcidzIG92ZXJyaWRlIG9mIGBjb2xsZWN0aW9uYFxuICAgICAgLy8gYW5kIGBtZW1iZXJgIG9iamVjdHMsIGFuZCB1c2UgaXQgYXMgdGhlIGJhc2UgZm9yIGZ1cnRoZXIgaW5oZXJpdGFuY2UuXG4gICAgICAvLyBOT1RFOiBDdXJyZW50bHkgdGhleSdyZSBlbXB0eSwgYnV0IHRoZXkgY291bGQgYWxsb3cgbG9jYWwgb3ZlcnJpZGVzLlxuICAgICAgc3VwZXIuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgIClcbiAgICByZXR1cm4gdmFsdWVzXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgYXN5bmMgZXhlY3V0ZShjdHgsIGV4ZWN1dGUpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMucGFyZW50LmdldE1lbWJlcklkKGN0eClcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZXhlY3V0ZShjdHgsXG4gICAgICBhc3luYyAocGFyZW50UXVlcnksIHRyeCkgPT4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHBhcmVudFF1ZXJ5XG4gICAgICAgICAgLmlnbm9yZVNjb3BlKClcbiAgICAgICAgICAuZmluZEJ5SWQoaWQpXG4gICAgICAgICAgLnRocm93SWZOb3RGb3VuZCgpXG4gICAgICAgICAgLy8gRXhwbGljaXRseSBvbmx5IHNlbGVjdCB0aGUgZm9yZWlnbiBrZXkgaWRzIGZvciBtb3JlIGVmZmljaWVuY3kuXG4gICAgICAgICAgLnNlbGVjdCguLi50aGlzLnJlbGF0aW9uSW5zdGFuY2Uub3duZXJQcm9wLnByb3BzKVxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIGBNb2RlbENvbnRyb2xsZXIuZXhlY3V0ZSgpYCwgZXhjZXB0IGZvciB0aGUgdXNlXG4gICAgICAgIC8vIG9mIGBtb2RlbC4kcmVsYXRlZFF1ZXJ5KClgIGluc3RlYWQgb2YgYG1vZGVsQ2xhc3MucXVlcnkoKWA6XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbW9kZWwuJHJlbGF0ZWRRdWVyeSh0aGlzLnJlbGF0aW9uSW5zdGFuY2UubmFtZSwgdHJ4KVxuICAgICAgICB0aGlzLnNldHVwUXVlcnkocXVlcnkpXG4gICAgICAgIHJldHVybiBleGVjdXRlKHF1ZXJ5LCB0cngpXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgY29sbGVjdGlvbiA9IHRoaXMudG9Db3JlQWN0aW9ucyh7XG4gIH0pXG5cbiAgbWVtYmVyID0gdGhpcy50b0NvcmVBY3Rpb25zKHtcbiAgfSlcbn1cbiJdfQ==
@@ -1,98 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.UserController = void 0;
5
-
6
- require("core-js/modules/esnext.async-iterator.find.js");
7
-
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
-
10
- require("core-js/modules/esnext.iterator.find.js");
11
-
12
- require("core-js/modules/esnext.async-iterator.for-each.js");
13
-
14
- require("core-js/modules/esnext.iterator.for-each.js");
15
-
16
- require("core-js/modules/esnext.async-iterator.reduce.js");
17
-
18
- require("core-js/modules/esnext.iterator.reduce.js");
19
-
20
- var _decorators = require("../decorators");
21
-
22
- var _ModelController = require("./ModelController");
23
-
24
- function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
25
-
26
- class UserController extends _ModelController.ModelController {
27
- constructor(...args) {
28
- var _dec, _dec2, _dec3, _dec4, _obj;
29
-
30
- super(...args);
31
- this.collection = (_dec = (0, _decorators.action)('post'), _dec2 = (0, _decorators.action)('post'), _dec3 = (0, _decorators.action)('get'), _dec4 = (0, _decorators.action)('get'), (_obj = {
32
- async login(ctx) {
33
- let user;
34
- let error;
35
-
36
- try {
37
- user = await this.modelClass.login(ctx);
38
- await user.$patch({
39
- lastLogin: new Date()
40
- }, ctx.transaction);
41
- } catch (err) {
42
- var _err$data;
43
-
44
- this.app.emit('error', err, ctx);
45
- user = null;
46
- error = ((_err$data = err.data) == null ? void 0 : _err$data.message) || err.message;
47
- ctx.status = err.status || 401;
48
- }
49
-
50
- const success = !!user;
51
- return {
52
- success,
53
- authenticated: success && this.isAuthenticated(ctx),
54
- user,
55
- error
56
- };
57
- },
58
-
59
- async logout(ctx) {
60
- let success = false;
61
-
62
- if (this.isAuthenticated(ctx)) {
63
- await ctx.logout();
64
- success = ctx.isUnauthenticated();
65
- }
66
-
67
- return {
68
- success,
69
- authenticated: this.isAuthenticated(ctx)
70
- };
71
- },
72
-
73
- session(ctx) {
74
- const authenticated = this.isAuthenticated(ctx);
75
- return {
76
- authenticated,
77
- user: authenticated ? ctx.state.user : null
78
- };
79
- },
80
-
81
- self(ctx) {
82
- return this.isAuthenticated(ctx) ? this.member.find.call(this, this.getContextWithMemberId(ctx, ctx.state.user.$id())) : null;
83
- }
84
-
85
- }, (_applyDecoratedDescriptor(_obj, "login", [_dec], Object.getOwnPropertyDescriptor(_obj, "login"), _obj), _applyDecoratedDescriptor(_obj, "logout", [_dec2], Object.getOwnPropertyDescriptor(_obj, "logout"), _obj), _applyDecoratedDescriptor(_obj, "session", [_dec3], Object.getOwnPropertyDescriptor(_obj, "session"), _obj), _applyDecoratedDescriptor(_obj, "self", [_dec4], Object.getOwnPropertyDescriptor(_obj, "self"), _obj)), _obj));
86
- this.member = {
87
- authorize: ['$self']
88
- };
89
- }
90
-
91
- isAuthenticated(ctx) {
92
- return ctx.isAuthenticated() && ctx.state.user instanceof this.modelClass;
93
- }
94
-
95
- }
96
-
97
- exports.UserController = UserController;
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJVc2VyQ29udHJvbGxlciIsIk1vZGVsQ29udHJvbGxlciIsImNvbGxlY3Rpb24iLCJsb2dpbiIsImN0eCIsInVzZXIiLCJlcnJvciIsIm1vZGVsQ2xhc3MiLCIkcGF0Y2giLCJsYXN0TG9naW4iLCJEYXRlIiwidHJhbnNhY3Rpb24iLCJlcnIiLCJhcHAiLCJlbWl0IiwiZGF0YSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXV0aGVudGljYXRlZCIsImlzQXV0aGVudGljYXRlZCIsImxvZ291dCIsImlzVW5hdXRoZW50aWNhdGVkIiwic2Vzc2lvbiIsInN0YXRlIiwic2VsZiIsIm1lbWJlciIsImZpbmQiLCJjYWxsIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsIiRpZCIsImF1dGhvcml6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBR08sTUFBTUEsY0FBTixTQUE2QkMsZ0NBQTdCLENBQTZDO0FBQUE7QUFBQTs7QUFBQTtBQUFBLFNBQ2xEQyxVQURrRCxXQUUvQyx3QkFBTyxNQUFQLENBRitDLFVBd0IvQyx3QkFBTyxNQUFQLENBeEIrQyxVQXFDL0Msd0JBQU8sS0FBUCxDQXJDK0MsVUE4Qy9DLHdCQUFPLEtBQVAsQ0E5QytDLFVBQ3JDO0FBRVgsWUFBTUMsS0FBTixDQUFZQyxHQUFaLEVBQWlCO0FBQ2YsWUFBSUMsSUFBSjtBQUNBLFlBQUlDLEtBQUo7O0FBQ0EsWUFBSTtBQUNGRCxVQUFBQSxJQUFJLEdBQUcsTUFBTSxLQUFLRSxVQUFMLENBQWdCSixLQUFoQixDQUFzQkMsR0FBdEIsQ0FBYjtBQUNBLGdCQUFNQyxJQUFJLENBQUNHLE1BQUwsQ0FBWTtBQUFFQyxZQUFBQSxTQUFTLEVBQUUsSUFBSUMsSUFBSjtBQUFiLFdBQVosRUFBdUNOLEdBQUcsQ0FBQ08sV0FBM0MsQ0FBTjtBQUNELFNBSEQsQ0FHRSxPQUFPQyxHQUFQLEVBQVk7QUFBQTs7QUFDWixlQUFLQyxHQUFMLENBQVNDLElBQVQsQ0FBYyxPQUFkLEVBQXVCRixHQUF2QixFQUE0QlIsR0FBNUI7QUFDQUMsVUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQUMsVUFBQUEsS0FBSyxHQUFHLGNBQUFNLEdBQUcsQ0FBQ0csSUFBSiwrQkFBVUMsT0FBVixLQUFxQkosR0FBRyxDQUFDSSxPQUFqQztBQUNBWixVQUFBQSxHQUFHLENBQUNhLE1BQUosR0FBYUwsR0FBRyxDQUFDSyxNQUFKLElBQWMsR0FBM0I7QUFDRDs7QUFDRCxjQUFNQyxPQUFPLEdBQUcsQ0FBQyxDQUFDYixJQUFsQjtBQUNBLGVBQU87QUFDTGEsVUFBQUEsT0FESztBQUVMQyxVQUFBQSxhQUFhLEVBQUVELE9BQU8sSUFBSSxLQUFLRSxlQUFMLENBQXFCaEIsR0FBckIsQ0FGckI7QUFHTEMsVUFBQUEsSUFISztBQUlMQyxVQUFBQTtBQUpLLFNBQVA7QUFNRCxPQXJCVTs7QUF3QlgsWUFBTWUsTUFBTixDQUFhakIsR0FBYixFQUFrQjtBQUNoQixZQUFJYyxPQUFPLEdBQUcsS0FBZDs7QUFDQSxZQUFJLEtBQUtFLGVBQUwsQ0FBcUJoQixHQUFyQixDQUFKLEVBQStCO0FBQzdCLGdCQUFNQSxHQUFHLENBQUNpQixNQUFKLEVBQU47QUFDQUgsVUFBQUEsT0FBTyxHQUFHZCxHQUFHLENBQUNrQixpQkFBSixFQUFWO0FBQ0Q7O0FBQ0QsZUFBTztBQUNMSixVQUFBQSxPQURLO0FBRUxDLFVBQUFBLGFBQWEsRUFBRSxLQUFLQyxlQUFMLENBQXFCaEIsR0FBckI7QUFGVixTQUFQO0FBSUQsT0FsQ1U7O0FBcUNYbUIsTUFBQUEsT0FBTyxDQUFDbkIsR0FBRCxFQUFNO0FBQ1gsY0FBTWUsYUFBYSxHQUFHLEtBQUtDLGVBQUwsQ0FBcUJoQixHQUFyQixDQUF0QjtBQUNBLGVBQU87QUFDTGUsVUFBQUEsYUFESztBQUVMZCxVQUFBQSxJQUFJLEVBQUVjLGFBQWEsR0FBR2YsR0FBRyxDQUFDb0IsS0FBSixDQUFVbkIsSUFBYixHQUFvQjtBQUZsQyxTQUFQO0FBSUQsT0EzQ1U7O0FBOENYb0IsTUFBQUEsSUFBSSxDQUFDckIsR0FBRCxFQUFNO0FBQ1IsZUFBTyxLQUFLZ0IsZUFBTCxDQUFxQmhCLEdBQXJCLElBQ0gsS0FBS3NCLE1BQUwsQ0FBWUMsSUFBWixDQUFpQkMsSUFBakIsQ0FDQSxJQURBLEVBRUEsS0FBS0Msc0JBQUwsQ0FBNEJ6QixHQUE1QixFQUFpQ0EsR0FBRyxDQUFDb0IsS0FBSixDQUFVbkIsSUFBVixDQUFleUIsR0FBZixFQUFqQyxDQUZBLENBREcsR0FLSCxJQUxKO0FBTUQ7O0FBckRVLEtBRHFDO0FBQUEsU0F5RGxESixNQXpEa0QsR0F5RHpDO0FBQ1BLLE1BQUFBLFNBQVMsRUFBRSxDQUFDLE9BQUQ7QUFESixLQXpEeUM7QUFBQTs7QUE2RGxEWCxFQUFBQSxlQUFlLENBQUNoQixHQUFELEVBQU07QUFFbkIsV0FBT0EsR0FBRyxDQUFDZ0IsZUFBSixNQUF5QmhCLEdBQUcsQ0FBQ29CLEtBQUosQ0FBVW5CLElBQVYsWUFBMEIsS0FBS0UsVUFBL0Q7QUFDRDs7QUFoRWlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uIH0gZnJvbSAnQC9kZWNvcmF0b3JzJ1xuaW1wb3J0IHsgTW9kZWxDb250cm9sbGVyIH0gZnJvbSAnLi9Nb2RlbENvbnRyb2xsZXInXG5cbi8vIFRPRE86IFJlbmFtZSB0byBVc2Vyc0NvbnRyb2xsZXI/XG5leHBvcnQgY2xhc3MgVXNlckNvbnRyb2xsZXIgZXh0ZW5kcyBNb2RlbENvbnRyb2xsZXIge1xuICBjb2xsZWN0aW9uID0ge1xuICAgIEBhY3Rpb24oJ3Bvc3QnKVxuICAgIGFzeW5jIGxvZ2luKGN0eCkge1xuICAgICAgbGV0IHVzZXJcbiAgICAgIGxldCBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgdXNlciA9IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5sb2dpbihjdHgpXG4gICAgICAgIGF3YWl0IHVzZXIuJHBhdGNoKHsgbGFzdExvZ2luOiBuZXcgRGF0ZSgpIH0sIGN0eC50cmFuc2FjdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFwcC5lbWl0KCdlcnJvcicsIGVyciwgY3R4KVxuICAgICAgICB1c2VyID0gbnVsbFxuICAgICAgICBlcnJvciA9IGVyci5kYXRhPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlXG4gICAgICAgIGN0eC5zdGF0dXMgPSBlcnIuc3RhdHVzIHx8IDQwMVxuICAgICAgfVxuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhdXNlclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgYXV0aGVudGljYXRlZDogc3VjY2VzcyAmJiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpLFxuICAgICAgICB1c2VyLFxuICAgICAgICBlcnJvclxuICAgICAgfVxuICAgIH0sXG5cbiAgICBAYWN0aW9uKCdwb3N0JylcbiAgICBhc3luYyBsb2dvdXQoY3R4KSB7XG4gICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KSkge1xuICAgICAgICBhd2FpdCBjdHgubG9nb3V0KClcbiAgICAgICAgc3VjY2VzcyA9IGN0eC5pc1VuYXV0aGVudGljYXRlZCgpXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBhdXRoZW50aWNhdGVkOiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIEBhY3Rpb24oJ2dldCcpXG4gICAgc2Vzc2lvbihjdHgpIHtcbiAgICAgIGNvbnN0IGF1dGhlbnRpY2F0ZWQgPSB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdXRoZW50aWNhdGVkLFxuICAgICAgICB1c2VyOiBhdXRoZW50aWNhdGVkID8gY3R4LnN0YXRlLnVzZXIgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIEBhY3Rpb24oJ2dldCcpXG4gICAgc2VsZihjdHgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICAgID8gdGhpcy5tZW1iZXIuZmluZC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5nZXRDb250ZXh0V2l0aE1lbWJlcklkKGN0eCwgY3R4LnN0YXRlLnVzZXIuJGlkKCkpXG4gICAgICAgIClcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9XG5cbiAgbWVtYmVyID0ge1xuICAgIGF1dGhvcml6ZTogWyckc2VsZiddXG4gIH1cblxuICBpc0F1dGhlbnRpY2F0ZWQoY3R4KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaGFzIHRoZSBjb3JyZWN0IG1vZGVsLWNsYXNzOlxuICAgIHJldHVybiBjdHguaXNBdXRoZW50aWNhdGVkKCkgJiYgY3R4LnN0YXRlLnVzZXIgaW5zdGFuY2VvZiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxufVxuIl19