@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,122 +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 _AssetError = require("./AssetError");
12
-
13
- Object.keys(_AssetError).forEach(function (key) {
14
- if (key === "default" || key === "__esModule") return;
15
- if (key in exports && exports[key] === _AssetError[key]) return;
16
- exports[key] = _AssetError[key];
17
- });
18
-
19
- var _ResponseError = require("./ResponseError");
20
-
21
- Object.keys(_ResponseError).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- if (key in exports && exports[key] === _ResponseError[key]) return;
24
- exports[key] = _ResponseError[key];
25
- });
26
-
27
- var _AuthenticationError = require("./AuthenticationError");
28
-
29
- Object.keys(_AuthenticationError).forEach(function (key) {
30
- if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _AuthenticationError[key]) return;
32
- exports[key] = _AuthenticationError[key];
33
- });
34
-
35
- var _AuthorizationError = require("./AuthorizationError");
36
-
37
- Object.keys(_AuthorizationError).forEach(function (key) {
38
- if (key === "default" || key === "__esModule") return;
39
- if (key in exports && exports[key] === _AuthorizationError[key]) return;
40
- exports[key] = _AuthorizationError[key];
41
- });
42
-
43
- var _ControllerError = require("./ControllerError");
44
-
45
- Object.keys(_ControllerError).forEach(function (key) {
46
- if (key === "default" || key === "__esModule") return;
47
- if (key in exports && exports[key] === _ControllerError[key]) return;
48
- exports[key] = _ControllerError[key];
49
- });
50
-
51
- var _DatabaseError = require("./DatabaseError");
52
-
53
- Object.keys(_DatabaseError).forEach(function (key) {
54
- if (key === "default" || key === "__esModule") return;
55
- if (key in exports && exports[key] === _DatabaseError[key]) return;
56
- exports[key] = _DatabaseError[key];
57
- });
58
-
59
- var _GraphError = require("./GraphError");
60
-
61
- Object.keys(_GraphError).forEach(function (key) {
62
- if (key === "default" || key === "__esModule") return;
63
- if (key in exports && exports[key] === _GraphError[key]) return;
64
- exports[key] = _GraphError[key];
65
- });
66
-
67
- var _ModelError = require("./ModelError");
68
-
69
- Object.keys(_ModelError).forEach(function (key) {
70
- if (key === "default" || key === "__esModule") return;
71
- if (key in exports && exports[key] === _ModelError[key]) return;
72
- exports[key] = _ModelError[key];
73
- });
74
-
75
- var _NotFoundError = require("./NotFoundError");
76
-
77
- Object.keys(_NotFoundError).forEach(function (key) {
78
- if (key === "default" || key === "__esModule") return;
79
- if (key in exports && exports[key] === _NotFoundError[key]) return;
80
- exports[key] = _NotFoundError[key];
81
- });
82
-
83
- var _NotImplementedError = require("./NotImplementedError");
84
-
85
- Object.keys(_NotImplementedError).forEach(function (key) {
86
- if (key === "default" || key === "__esModule") return;
87
- if (key in exports && exports[key] === _NotImplementedError[key]) return;
88
- exports[key] = _NotImplementedError[key];
89
- });
90
-
91
- var _QueryBuilderError = require("./QueryBuilderError");
92
-
93
- Object.keys(_QueryBuilderError).forEach(function (key) {
94
- if (key === "default" || key === "__esModule") return;
95
- if (key in exports && exports[key] === _QueryBuilderError[key]) return;
96
- exports[key] = _QueryBuilderError[key];
97
- });
98
-
99
- var _RelationError = require("./RelationError");
100
-
101
- Object.keys(_RelationError).forEach(function (key) {
102
- if (key === "default" || key === "__esModule") return;
103
- if (key in exports && exports[key] === _RelationError[key]) return;
104
- exports[key] = _RelationError[key];
105
- });
106
-
107
- var _ValidationError = require("./ValidationError");
108
-
109
- Object.keys(_ValidationError).forEach(function (key) {
110
- if (key === "default" || key === "__esModule") return;
111
- if (key in exports && exports[key] === _ValidationError[key]) return;
112
- exports[key] = _ValidationError[key];
113
- });
114
-
115
- var _WrappedError = require("./WrappedError");
116
-
117
- Object.keys(_WrappedError).forEach(function (key) {
118
- if (key === "default" || key === "__esModule") return;
119
- if (key in exports && exports[key] === _WrappedError[key]) return;
120
- exports[key] = _WrappedError[key];
121
- });
122
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vQXNzZXRFcnJvcidcbmV4cG9ydCAqIGZyb20gJy4vUmVzcG9uc2VFcnJvcidcbmV4cG9ydCAqIGZyb20gJy4vQXV0aGVudGljYXRpb25FcnJvcidcbmV4cG9ydCAqIGZyb20gJy4vQXV0aG9yaXphdGlvbkVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9Db250cm9sbGVyRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL0RhdGFiYXNlRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL0dyYXBoRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL01vZGVsRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL05vdEZvdW5kRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL05vdEltcGxlbWVudGVkRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5QnVpbGRlckVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9SZWxhdGlvbkVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uRXJyb3InXG5leHBvcnQgKiBmcm9tICcuL1dyYXBwZWRFcnJvcidcbiJdfQ==
@@ -1,185 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.DitoGraphProcessor = void 0;
5
-
6
- require("core-js/modules/esnext.async-iterator.map.js");
7
-
8
- require("core-js/modules/esnext.iterator.map.js");
9
-
10
- var _utils = require("@ditojs/utils");
11
-
12
- var _ = require(".");
13
-
14
- class DitoGraphProcessor {
15
- constructor(rootModelClass, data, options = {}, settings = {}) {
16
- this.rootModelClass = rootModelClass;
17
- this.data = (0, _.ensureModelArray)(rootModelClass, data, {
18
- skipValidation: true
19
- });
20
- this.isArray = (0, _utils.isArray)(data);
21
- this.options = options;
22
- this.settings = settings;
23
- this.overrides = {};
24
- this.extras = {};
25
- this.numOptions = Object.keys(options).length;
26
- this.numOverrides = 0;
27
-
28
- if (settings.processOverrides) {
29
- this.collectOverrides();
30
-
31
- if (this.numOverrides > 0) {
32
- this.processOverrides();
33
- }
34
- }
35
- }
36
-
37
- getOptions() {
38
- return { ...this.options,
39
- ...this.overrides
40
- };
41
- }
42
-
43
- getData() {
44
- const data = this.settings.processRelates ? this.processRelates(this.data) : this.data;
45
- return this.isArray ? data : data[0];
46
- }
47
-
48
- getGraphOptions(relation) {
49
- const ownerOptions = {
50
- relate: false,
51
- unrelate: false
52
- };
53
- return relation.graphOptions || relation.owner && ownerOptions || {};
54
- }
55
-
56
- collectOverrides() {
57
- const processed = {};
58
-
59
- const processModelClass = modelClass => {
60
- const {
61
- name
62
- } = modelClass;
63
-
64
- if (!processed[name]) {
65
- processed[name] = true;
66
- const {
67
- relations
68
- } = modelClass.definition;
69
- const relationInstances = modelClass.getRelations();
70
-
71
- for (const [name, relation] of Object.entries(relations)) {
72
- const graphOptions = this.getGraphOptions(relation);
73
-
74
- if (graphOptions) {
75
- for (const key in this.options) {
76
- if (key in graphOptions && graphOptions[key] !== this.options[key] && !this.overrides[key]) {
77
- this.numOverrides++;
78
- this.overrides[key] = [];
79
- }
80
- }
81
-
82
- if (this.numOverrides < this.numOptions) {
83
- processModelClass(relationInstances[name].relatedModelClass);
84
- }
85
- }
86
- }
87
- }
88
- };
89
-
90
- processModelClass(this.rootModelClass);
91
- }
92
-
93
- processOverrides() {
94
- const expr = (0, _.modelGraphToExpression)(this.data);
95
-
96
- const processExpression = (expr, modelClass, relation, relationPath = '') => {
97
- if (relation) {
98
- var _relation$through;
99
-
100
- const graphOptions = this.getGraphOptions(relation);
101
-
102
- for (const key in this.overrides) {
103
- var _graphOptions$key;
104
-
105
- const option = (_graphOptions$key = graphOptions[key]) != null ? _graphOptions$key : this.options[key];
106
-
107
- if (option) {
108
- this.overrides[key].push(relationPath);
109
- }
110
- }
111
-
112
- const extra = (_relation$through = relation.through) == null ? void 0 : _relation$through.extra;
113
-
114
- if ((extra == null ? void 0 : extra.length) > 0) {
115
- this.extras[relationPath] = extra;
116
- }
117
- }
118
-
119
- const {
120
- relations
121
- } = modelClass.definition;
122
- const relationInstances = modelClass.getRelations();
123
-
124
- for (const key in expr) {
125
- const childExpr = expr[key];
126
- const {
127
- relatedModelClass
128
- } = relationInstances[key];
129
- processExpression(childExpr, relatedModelClass, relations[key], appendPath(relationPath, '.', key));
130
- }
131
- };
132
-
133
- processExpression(expr, this.rootModelClass);
134
- }
135
-
136
- shouldRelate(relationPath) {
137
- if (relationPath !== '') {
138
- const {
139
- relate
140
- } = this.overrides;
141
- return relate ? relate.includes(relationPath) : this.options.relate;
142
- }
143
- }
144
-
145
- processRelates(data, relationPath = '', dataPath = '') {
146
- if (data) {
147
- if (data.$isObjectionModel) {
148
- const {
149
- constructor
150
- } = data;
151
- let copy;
152
-
153
- if (this.shouldRelate(relationPath)) {
154
- copy = constructor.getReference(data, this.extras[relationPath]);
155
- } else {
156
- copy = data.$clone({
157
- shallow: true
158
- });
159
-
160
- for (const {
161
- name
162
- } of Object.values(constructor.getRelations())) {
163
- if (name in data) {
164
- copy[name] = this.processRelates(data[name], appendPath(relationPath, '.', name), appendPath(dataPath, '/', name));
165
- }
166
- }
167
- }
168
-
169
- return copy;
170
- } else if ((0, _utils.isArray)(data)) {
171
- return data.map((entry, index) => this.processRelates(entry, relationPath, appendPath(dataPath, '/', index)));
172
- }
173
- }
174
-
175
- return data;
176
- }
177
-
178
- }
179
-
180
- exports.DitoGraphProcessor = DitoGraphProcessor;
181
-
182
- function appendPath(path, separator, token) {
183
- return path !== '' ? `${path}${separator}${token}` : token;
184
- }
185
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ncmFwaC9EaXRvR3JhcGhQcm9jZXNzb3IuanMiXSwibmFtZXMiOlsiRGl0b0dyYXBoUHJvY2Vzc29yIiwiY29uc3RydWN0b3IiLCJyb290TW9kZWxDbGFzcyIsImRhdGEiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJza2lwVmFsaWRhdGlvbiIsImlzQXJyYXkiLCJvdmVycmlkZXMiLCJleHRyYXMiLCJudW1PcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIm51bU92ZXJyaWRlcyIsInByb2Nlc3NPdmVycmlkZXMiLCJjb2xsZWN0T3ZlcnJpZGVzIiwiZ2V0T3B0aW9ucyIsImdldERhdGEiLCJwcm9jZXNzUmVsYXRlcyIsImdldEdyYXBoT3B0aW9ucyIsInJlbGF0aW9uIiwib3duZXJPcHRpb25zIiwicmVsYXRlIiwidW5yZWxhdGUiLCJncmFwaE9wdGlvbnMiLCJvd25lciIsInByb2Nlc3NlZCIsInByb2Nlc3NNb2RlbENsYXNzIiwibW9kZWxDbGFzcyIsIm5hbWUiLCJyZWxhdGlvbnMiLCJkZWZpbml0aW9uIiwicmVsYXRpb25JbnN0YW5jZXMiLCJnZXRSZWxhdGlvbnMiLCJlbnRyaWVzIiwia2V5IiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJleHByIiwicHJvY2Vzc0V4cHJlc3Npb24iLCJyZWxhdGlvblBhdGgiLCJvcHRpb24iLCJwdXNoIiwiZXh0cmEiLCJ0aHJvdWdoIiwiY2hpbGRFeHByIiwiYXBwZW5kUGF0aCIsInNob3VsZFJlbGF0ZSIsImluY2x1ZGVzIiwiZGF0YVBhdGgiLCIkaXNPYmplY3Rpb25Nb2RlbCIsImNvcHkiLCJnZXRSZWZlcmVuY2UiLCIkY2xvbmUiLCJzaGFsbG93IiwidmFsdWVzIiwibWFwIiwiZW50cnkiLCJpbmRleCIsInBhdGgiLCJzZXBhcmF0b3IiLCJ0b2tlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRU8sTUFBTUEsa0JBQU4sQ0FBeUI7QUFDOUJDLEVBQUFBLFdBQVcsQ0FBQ0MsY0FBRCxFQUFpQkMsSUFBakIsRUFBdUJDLE9BQU8sR0FBRyxFQUFqQyxFQUFxQ0MsUUFBUSxHQUFHLEVBQWhELEVBQW9EO0FBQzdELFNBQUtILGNBQUwsR0FBc0JBLGNBQXRCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLHdCQUFpQkQsY0FBakIsRUFBaUNDLElBQWpDLEVBQXVDO0FBQ2pERyxNQUFBQSxjQUFjLEVBQUU7QUFEaUMsS0FBdkMsQ0FBWjtBQUdBLFNBQUtDLE9BQUwsR0FBZSxvQkFBUUosSUFBUixDQUFmO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLRyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxVQUFMLEdBQWtCQyxNQUFNLENBQUNDLElBQVAsQ0FBWVIsT0FBWixFQUFxQlMsTUFBdkM7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLENBQXBCOztBQUNBLFFBQUlULFFBQVEsQ0FBQ1UsZ0JBQWIsRUFBK0I7QUFDN0IsV0FBS0MsZ0JBQUw7O0FBQ0EsVUFBSSxLQUFLRixZQUFMLEdBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLGFBQUtDLGdCQUFMO0FBQ0Q7QUFDRjtBQUNGOztBQUVERSxFQUFBQSxVQUFVLEdBQUc7QUFDWCxXQUFPLEVBQ0wsR0FBRyxLQUFLYixPQURIO0FBRUwsU0FBRyxLQUFLSTtBQUZILEtBQVA7QUFJRDs7QUFFRFUsRUFBQUEsT0FBTyxHQUFHO0FBR1IsVUFBTWYsSUFBSSxHQUFHLEtBQUtFLFFBQUwsQ0FBY2MsY0FBZCxHQUNULEtBQUtBLGNBQUwsQ0FBb0IsS0FBS2hCLElBQXpCLENBRFMsR0FFVCxLQUFLQSxJQUZUO0FBR0EsV0FBTyxLQUFLSSxPQUFMLEdBQWVKLElBQWYsR0FBc0JBLElBQUksQ0FBQyxDQUFELENBQWpDO0FBQ0Q7O0FBRURpQixFQUFBQSxlQUFlLENBQUNDLFFBQUQsRUFBVztBQUl4QixVQUFNQyxZQUFZLEdBQUc7QUFDbkJDLE1BQUFBLE1BQU0sRUFBRSxLQURXO0FBRW5CQyxNQUFBQSxRQUFRLEVBQUU7QUFGUyxLQUFyQjtBQUtBLFdBQU9ILFFBQVEsQ0FBQ0ksWUFBVCxJQUF5QkosUUFBUSxDQUFDSyxLQUFULElBQWtCSixZQUEzQyxJQUEyRCxFQUFsRTtBQUNEOztBQU9ETixFQUFBQSxnQkFBZ0IsR0FBRztBQUtqQixVQUFNVyxTQUFTLEdBQUcsRUFBbEI7O0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUdDLFVBQVUsSUFBSTtBQUN0QyxZQUFNO0FBQUVDLFFBQUFBO0FBQUYsVUFBV0QsVUFBakI7O0FBRUEsVUFBSSxDQUFDRixTQUFTLENBQUNHLElBQUQsQ0FBZCxFQUFzQjtBQUNwQkgsUUFBQUEsU0FBUyxDQUFDRyxJQUFELENBQVQsR0FBa0IsSUFBbEI7QUFDQSxjQUFNO0FBQUVDLFVBQUFBO0FBQUYsWUFBZ0JGLFVBQVUsQ0FBQ0csVUFBakM7QUFDQSxjQUFNQyxpQkFBaUIsR0FBR0osVUFBVSxDQUFDSyxZQUFYLEVBQTFCOztBQUNBLGFBQUssTUFBTSxDQUFDSixJQUFELEVBQU9ULFFBQVAsQ0FBWCxJQUErQlYsTUFBTSxDQUFDd0IsT0FBUCxDQUFlSixTQUFmLENBQS9CLEVBQTBEO0FBQ3hELGdCQUFNTixZQUFZLEdBQUcsS0FBS0wsZUFBTCxDQUFxQkMsUUFBckIsQ0FBckI7O0FBQ0EsY0FBSUksWUFBSixFQUFrQjtBQUloQixpQkFBSyxNQUFNVyxHQUFYLElBQWtCLEtBQUtoQyxPQUF2QixFQUFnQztBQUM5QixrQkFBSWdDLEdBQUcsSUFBSVgsWUFBUCxJQUNBQSxZQUFZLENBQUNXLEdBQUQsQ0FBWixLQUFzQixLQUFLaEMsT0FBTCxDQUFhZ0MsR0FBYixDQUR0QixJQUVBLENBQUMsS0FBSzVCLFNBQUwsQ0FBZTRCLEdBQWYsQ0FGTCxFQUUwQjtBQUN4QixxQkFBS3RCLFlBQUw7QUFDQSxxQkFBS04sU0FBTCxDQUFlNEIsR0FBZixJQUFzQixFQUF0QjtBQUNEO0FBQ0Y7O0FBR0QsZ0JBQUksS0FBS3RCLFlBQUwsR0FBb0IsS0FBS0osVUFBN0IsRUFBeUM7QUFDdkNrQixjQUFBQSxpQkFBaUIsQ0FBQ0ssaUJBQWlCLENBQUNILElBQUQsQ0FBakIsQ0FBd0JPLGlCQUF6QixDQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGO0FBQ0YsS0E3QkQ7O0FBK0JBVCxJQUFBQSxpQkFBaUIsQ0FBQyxLQUFLMUIsY0FBTixDQUFqQjtBQUNEOztBQU9EYSxFQUFBQSxnQkFBZ0IsR0FBRztBQUNqQixVQUFNdUIsSUFBSSxHQUFHLDhCQUF1QixLQUFLbkMsSUFBNUIsQ0FBYjs7QUFFQSxVQUFNb0MsaUJBQWlCLEdBQ3JCLENBQUNELElBQUQsRUFBT1QsVUFBUCxFQUFtQlIsUUFBbkIsRUFBNkJtQixZQUFZLEdBQUcsRUFBNUMsS0FBbUQ7QUFDakQsVUFBSW5CLFFBQUosRUFBYztBQUFBOztBQUNaLGNBQU1JLFlBQVksR0FBRyxLQUFLTCxlQUFMLENBQXFCQyxRQUFyQixDQUFyQjs7QUFJQSxhQUFLLE1BQU1lLEdBQVgsSUFBa0IsS0FBSzVCLFNBQXZCLEVBQWtDO0FBQUE7O0FBQ2hDLGdCQUFNaUMsTUFBTSx3QkFBR2hCLFlBQVksQ0FBQ1csR0FBRCxDQUFmLGdDQUF3QixLQUFLaEMsT0FBTCxDQUFhZ0MsR0FBYixDQUFwQzs7QUFDQSxjQUFJSyxNQUFKLEVBQVk7QUFDVixpQkFBS2pDLFNBQUwsQ0FBZTRCLEdBQWYsRUFBb0JNLElBQXBCLENBQXlCRixZQUF6QjtBQUNEO0FBQ0Y7O0FBR0QsY0FBTUcsS0FBSyx3QkFBR3RCLFFBQVEsQ0FBQ3VCLE9BQVoscUJBQUcsa0JBQWtCRCxLQUFoQzs7QUFDQSxZQUFJLENBQUFBLEtBQUssUUFBTCxZQUFBQSxLQUFLLENBQUU5QixNQUFQLElBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLGVBQUtKLE1BQUwsQ0FBWStCLFlBQVosSUFBNEJHLEtBQTVCO0FBQ0Q7QUFDRjs7QUFFRCxZQUFNO0FBQUVaLFFBQUFBO0FBQUYsVUFBZ0JGLFVBQVUsQ0FBQ0csVUFBakM7QUFDQSxZQUFNQyxpQkFBaUIsR0FBR0osVUFBVSxDQUFDSyxZQUFYLEVBQTFCOztBQUNBLFdBQUssTUFBTUUsR0FBWCxJQUFrQkUsSUFBbEIsRUFBd0I7QUFDdEIsY0FBTU8sU0FBUyxHQUFHUCxJQUFJLENBQUNGLEdBQUQsQ0FBdEI7QUFDQSxjQUFNO0FBQUVDLFVBQUFBO0FBQUYsWUFBd0JKLGlCQUFpQixDQUFDRyxHQUFELENBQS9DO0FBQ0FHLFFBQUFBLGlCQUFpQixDQUNmTSxTQURlLEVBRWZSLGlCQUZlLEVBR2ZOLFNBQVMsQ0FBQ0ssR0FBRCxDQUhNLEVBSWZVLFVBQVUsQ0FBQ04sWUFBRCxFQUFlLEdBQWYsRUFBb0JKLEdBQXBCLENBSkssQ0FBakI7QUFNRDtBQUNGLEtBakNIOztBQW1DQUcsSUFBQUEsaUJBQWlCLENBQUNELElBQUQsRUFBTyxLQUFLcEMsY0FBWixDQUFqQjtBQUNEOztBQUVENkMsRUFBQUEsWUFBWSxDQUFDUCxZQUFELEVBQWU7QUFFekIsUUFBSUEsWUFBWSxLQUFLLEVBQXJCLEVBQXlCO0FBQ3ZCLFlBQU07QUFBRWpCLFFBQUFBO0FBQUYsVUFBYSxLQUFLZixTQUF4QjtBQUNBLGFBQU9lLE1BQU0sR0FHVEEsTUFBTSxDQUFDeUIsUUFBUCxDQUFnQlIsWUFBaEIsQ0FIUyxHQUlULEtBQUtwQyxPQUFMLENBQWFtQixNQUpqQjtBQUtEO0FBQ0Y7O0FBU0RKLEVBQUFBLGNBQWMsQ0FBQ2hCLElBQUQsRUFBT3FDLFlBQVksR0FBRyxFQUF0QixFQUEwQlMsUUFBUSxHQUFHLEVBQXJDLEVBQXlDO0FBQ3JELFFBQUk5QyxJQUFKLEVBQVU7QUFDUixVQUFJQSxJQUFJLENBQUMrQyxpQkFBVCxFQUE0QjtBQUMxQixjQUFNO0FBQUVqRCxVQUFBQTtBQUFGLFlBQWtCRSxJQUF4QjtBQUNBLFlBQUlnRCxJQUFKOztBQUNBLFlBQUksS0FBS0osWUFBTCxDQUFrQlAsWUFBbEIsQ0FBSixFQUFxQztBQUduQ1csVUFBQUEsSUFBSSxHQUFHbEQsV0FBVyxDQUFDbUQsWUFBWixDQUF5QmpELElBQXpCLEVBQStCLEtBQUtNLE1BQUwsQ0FBWStCLFlBQVosQ0FBL0IsQ0FBUDtBQUNELFNBSkQsTUFJTztBQUlMVyxVQUFBQSxJQUFJLEdBQUdoRCxJQUFJLENBQUNrRCxNQUFMLENBQVk7QUFBRUMsWUFBQUEsT0FBTyxFQUFFO0FBQVgsV0FBWixDQUFQOztBQUVBLGVBQUssTUFBTTtBQUFFeEIsWUFBQUE7QUFBRixXQUFYLElBQXVCbkIsTUFBTSxDQUFDNEMsTUFBUCxDQUFjdEQsV0FBVyxDQUFDaUMsWUFBWixFQUFkLENBQXZCLEVBQWtFO0FBQ2hFLGdCQUFJSixJQUFJLElBQUkzQixJQUFaLEVBQWtCO0FBQ2hCZ0QsY0FBQUEsSUFBSSxDQUFDckIsSUFBRCxDQUFKLEdBQWEsS0FBS1gsY0FBTCxDQUNYaEIsSUFBSSxDQUFDMkIsSUFBRCxDQURPLEVBRVhnQixVQUFVLENBQUNOLFlBQUQsRUFBZSxHQUFmLEVBQW9CVixJQUFwQixDQUZDLEVBR1hnQixVQUFVLENBQUNHLFFBQUQsRUFBVyxHQUFYLEVBQWdCbkIsSUFBaEIsQ0FIQyxDQUFiO0FBS0Q7QUFDRjtBQUNGOztBQUNELGVBQU9xQixJQUFQO0FBQ0QsT0F4QkQsTUF3Qk8sSUFBSSxvQkFBUWhELElBQVIsQ0FBSixFQUFtQjtBQUV4QixlQUFPQSxJQUFJLENBQUNxRCxHQUFMLENBQVMsQ0FBQ0MsS0FBRCxFQUFRQyxLQUFSLEtBQWtCLEtBQUt2QyxjQUFMLENBQ2hDc0MsS0FEZ0MsRUFFaENqQixZQUZnQyxFQUdoQ00sVUFBVSxDQUFDRyxRQUFELEVBQVcsR0FBWCxFQUFnQlMsS0FBaEIsQ0FIc0IsQ0FBM0IsQ0FBUDtBQUtEO0FBQ0Y7O0FBQ0QsV0FBT3ZELElBQVA7QUFDRDs7QUFuTTZCOzs7O0FBc01oQyxTQUFTMkMsVUFBVCxDQUFvQmEsSUFBcEIsRUFBMEJDLFNBQTFCLEVBQXFDQyxLQUFyQyxFQUE0QztBQUMxQyxTQUFPRixJQUFJLEtBQUssRUFBVCxHQUFlLEdBQUVBLElBQUssR0FBRUMsU0FBVSxHQUFFQyxLQUFNLEVBQTFDLEdBQThDQSxLQUFyRDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtb2RlbEdyYXBoVG9FeHByZXNzaW9uLCBlbnN1cmVNb2RlbEFycmF5IH0gZnJvbSAnLidcblxuZXhwb3J0IGNsYXNzIERpdG9HcmFwaFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKHJvb3RNb2RlbENsYXNzLCBkYXRhLCBvcHRpb25zID0ge30sIHNldHRpbmdzID0ge30pIHtcbiAgICB0aGlzLnJvb3RNb2RlbENsYXNzID0gcm9vdE1vZGVsQ2xhc3NcbiAgICB0aGlzLmRhdGEgPSBlbnN1cmVNb2RlbEFycmF5KHJvb3RNb2RlbENsYXNzLCBkYXRhLCB7XG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy5pc0FycmF5ID0gaXNBcnJheShkYXRhKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3NcbiAgICB0aGlzLm92ZXJyaWRlcyA9IHt9XG4gICAgdGhpcy5leHRyYXMgPSB7fVxuICAgIHRoaXMubnVtT3B0aW9ucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aFxuICAgIHRoaXMubnVtT3ZlcnJpZGVzID0gMFxuICAgIGlmIChzZXR0aW5ncy5wcm9jZXNzT3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmNvbGxlY3RPdmVycmlkZXMoKVxuICAgICAgaWYgKHRoaXMubnVtT3ZlcnJpZGVzID4gMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NPdmVycmlkZXMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLnRoaXMub3ZlcnJpZGVzXG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICAvLyBJZiBzZXR0aW5nLnByb2Nlc3NSZWxhdGVzIGlzIHVzZWQsIGNhbGwgcHJvY2Vzc1JlbGF0ZSgpIHRvIGZpbHRlciBvdXRcbiAgICAvLyBuZXN0ZWQgcmVsYXRpb25zIG9mIG1vZGVscyB0aGF0IGFyZSB1c2VkIGZvciByZWxhdGVzLlxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNldHRpbmdzLnByb2Nlc3NSZWxhdGVzXG4gICAgICA/IHRoaXMucHJvY2Vzc1JlbGF0ZXModGhpcy5kYXRhKVxuICAgICAgOiB0aGlzLmRhdGFcbiAgICByZXR1cm4gdGhpcy5pc0FycmF5ID8gZGF0YSA6IGRhdGFbMF1cbiAgfVxuXG4gIGdldEdyYXBoT3B0aW9ucyhyZWxhdGlvbikge1xuICAgIC8vIFdoZW4gYSByZWxhdGlvbiBpcyBvd25lciBvZiBpdHMgZGF0YSwgdGhlbiBhIGZhbGwtYmFjayBmb3IgYGdyYXBoT3B0aW9uc2BcbiAgICAvLyBpcyBwcm92aWRlZCB3aGVyZSBib3RoIGByZWxhdGVgIGFuZCBgdW5yZWxhdGVgIGlzIGRpc2FibGVkLCByZXN1bHRpbmcgaW5cbiAgICAvLyBpbnNlcnRzIGFuZCBkZWxldGVzIGluc3RlYWQuXG4gICAgY29uc3Qgb3duZXJPcHRpb25zID0ge1xuICAgICAgcmVsYXRlOiBmYWxzZSxcbiAgICAgIHVucmVsYXRlOiBmYWxzZVxuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGBncmFwaE9wdGlvbnNgIHRvIGJlIHVzZWQgZm9yIHRoaXMgcmVsYXRpb24uXG4gICAgcmV0dXJuIHJlbGF0aW9uLmdyYXBoT3B0aW9ucyB8fCByZWxhdGlvbi5vd25lciAmJiBvd25lck9wdGlvbnMgfHwge31cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29wcyB0aHJvdWdoIGFsbCBuZXN0ZWQgcmVsYXRpb25zIGFuZCBmaW5kcyB0aGUgb25lcyB0aGF0IGRlZmluZSBsb2NhbFxuICAgKiBvdmVycmlkZXMgb2YgdGhlIGdsb2JhbCBvcHRpb25zLCB0aGVuIGNvbGxlY3RzIGVtcHR5IG92ZXJyaWRlIGFycmF5cyBmb3JcbiAgICogZWFjaCBzZXR0aW5nLCBzbyBwcm9jZXNzT3ZlcnJpZGVzKCkgY2FuIGZpbGwgdGhlbSBpZiBhbnkgb3ZlcnJpZGVzIGV4aXN0LlxuICAgKi9cbiAgY29sbGVjdE92ZXJyaWRlcygpIHtcbiAgICAvLyBUT0RPOiB3ZSBtYXkgd2FudCBvcHRpbWl6ZSB0aGlzIGNvZGUgdG8gb25seSBjb2xsZWN0IHRoZSBvdmVycmlkZXMgZm9yXG4gICAgLy8gdGhlIHJlbGF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGluIHRoZSBncmFwaCwgZS5nLiB0aHJvdWdoXG4gICAgLy8gYG1vZGVsR3JhcGhUb0V4cHJlc3Npb24oZGF0YSlgLiBTaG91bGQgd2UgZXZlciBzd2l0Y2ggdG8gb3VyIG93blxuICAgIC8vIGltcGxlbWVudGF0aW9uIG9mICpBbmRGZXRjaCgpIG1ldGhvZHMsIHdlIGFscmVhZHkgaGF2ZSB0byBjYWxsIHRoaXMuXG4gICAgY29uc3QgcHJvY2Vzc2VkID0ge31cbiAgICBjb25zdCBwcm9jZXNzTW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBtb2RlbENsYXNzXG4gICAgICAvLyBPbmx5IHByb2Nlc3MgZWFjaCBtb2RlbENsYXNzIG9uY2UsIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZSBsb29wcy5cbiAgICAgIGlmICghcHJvY2Vzc2VkW25hbWVdKSB7XG4gICAgICAgIHByb2Nlc3NlZFtuYW1lXSA9IHRydWVcbiAgICAgICAgY29uc3QgeyByZWxhdGlvbnMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuICAgICAgICBjb25zdCByZWxhdGlvbkluc3RhbmNlcyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgcmVsYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHJlbGF0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBncmFwaE9wdGlvbnMgPSB0aGlzLmdldEdyYXBoT3B0aW9ucyhyZWxhdGlvbilcbiAgICAgICAgICBpZiAoZ3JhcGhPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYHRoaXMub3B0aW9uc2AgYW5kIG9ubHkgbG9vayBmb3Igb3ZlcnJpZGVzIG9mIHRoZW0sXG4gICAgICAgICAgICAvLyBzaW5jZSBgcmVsYXRpb24uZ3JhcGhPcHRpb25zYCBpcyBhY3Jvc3MgaW5zZXJ0ICAvIHVwc2VydCAmIGNvLixcbiAgICAgICAgICAgIC8vIGJ1dCBub3QgYWxsIG9mIHRoZW0gdXNlIGFsbCBvcHRpb25zIChpbnNlcnQgZGVmaW5lcyBsZXNzKS5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoa2V5IGluIGdyYXBoT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZ3JhcGhPcHRpb25zW2tleV0gIT09IHRoaXMub3B0aW9uc1trZXldICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5vdmVycmlkZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMubnVtT3ZlcnJpZGVzKytcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlc1trZXldID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gS2VlcCBzY2FubmluZyB1bnRpbCB3ZSdyZSBkb25lIG9yIGZvdW5kIHRoYXQgYWxsIG9wdGlvbnMgaGF2ZVxuICAgICAgICAgICAgLy8gb3ZlcnJpZGVzLlxuICAgICAgICAgICAgaWYgKHRoaXMubnVtT3ZlcnJpZGVzIDwgdGhpcy5udW1PcHRpb25zKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NNb2RlbENsYXNzKHJlbGF0aW9uSW5zdGFuY2VzW25hbWVdLnJlbGF0ZWRNb2RlbENsYXNzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NNb2RlbENsYXNzKHRoaXMucm9vdE1vZGVsQ2xhc3MpXG4gIH1cblxuICAvKipcbiAgICogRmlsbHMgdGhlIGVtcHR5IG92ZXJyaWRlIGFycmF5cyBjb2xsZWN0ZWQgYnkgY29sbGVjdE92ZXJyaWRlcygpIGJ5IHdhbGtpbmdcbiAgICogdGhyb3VnaCB0aGUgYWN0dWFsIGdyYXBoIGFuZCBmaW5kaW5nIHJlbGF0aW9ucyB0aGF0IGhhdmUgb3ZlcnJpZGVzLCBhbmRcbiAgICogYnVpbGRpbmcgcmVsYXRpb24gcGF0aHMgZm9yIHRoZW0uXG4gICAqL1xuICBwcm9jZXNzT3ZlcnJpZGVzKCkge1xuICAgIGNvbnN0IGV4cHIgPSBtb2RlbEdyYXBoVG9FeHByZXNzaW9uKHRoaXMuZGF0YSlcblxuICAgIGNvbnN0IHByb2Nlc3NFeHByZXNzaW9uID1cbiAgICAgIChleHByLCBtb2RlbENsYXNzLCByZWxhdGlvbiwgcmVsYXRpb25QYXRoID0gJycpID0+IHtcbiAgICAgICAgaWYgKHJlbGF0aW9uKSB7XG4gICAgICAgICAgY29uc3QgZ3JhcGhPcHRpb25zID0gdGhpcy5nZXRHcmFwaE9wdGlvbnMocmVsYXRpb24pXG4gICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvdmVycmlkZSBvcHRpb25zLCBmaWd1cmUgb3V0IHRoZWlyIHNldHRpbmdzIGZvclxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHJlbGF0aW9uIGFuZCBidWlsZCByZWxhdGlvbiBleHByZXNzaW9uIGFycmF5cyBmb3IgZWFjaFxuICAgICAgICAgIC8vIG92ZXJyaWRlIHJlZmxlY3RpbmcgdGhlaXIgbmVzdGVkIHNldHRpbmdzIGluIGFycmF5cyBvZiBleHByZXNzaW9ucy5cbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm92ZXJyaWRlcykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JhcGhPcHRpb25zW2tleV0gPz8gdGhpcy5vcHRpb25zW2tleV1cbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZXNba2V5XS5wdXNoKHJlbGF0aW9uUGF0aClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBbHNvIGNvbGxlY3QgYW55IG1hbnktdG8tbWFueSBwaXZvdCB0YWJsZSBleHRyYSBwcm9wZXJ0aWVzLlxuICAgICAgICAgIGNvbnN0IGV4dHJhID0gcmVsYXRpb24udGhyb3VnaD8uZXh0cmFcbiAgICAgICAgICBpZiAoZXh0cmE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFzW3JlbGF0aW9uUGF0aF0gPSBleHRyYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVsYXRpb25zIH0gPSBtb2RlbENsYXNzLmRlZmluaXRpb25cbiAgICAgICAgY29uc3QgcmVsYXRpb25JbnN0YW5jZXMgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9ucygpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cHIpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZEV4cHIgPSBleHByW2tleV1cbiAgICAgICAgICBjb25zdCB7IHJlbGF0ZWRNb2RlbENsYXNzIH0gPSByZWxhdGlvbkluc3RhbmNlc1trZXldXG4gICAgICAgICAgcHJvY2Vzc0V4cHJlc3Npb24oXG4gICAgICAgICAgICBjaGlsZEV4cHIsXG4gICAgICAgICAgICByZWxhdGVkTW9kZWxDbGFzcyxcbiAgICAgICAgICAgIHJlbGF0aW9uc1trZXldLFxuICAgICAgICAgICAgYXBwZW5kUGF0aChyZWxhdGlvblBhdGgsICcuJywga2V5KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgcHJvY2Vzc0V4cHJlc3Npb24oZXhwciwgdGhpcy5yb290TW9kZWxDbGFzcylcbiAgfVxuXG4gIHNob3VsZFJlbGF0ZShyZWxhdGlvblBhdGgpIHtcbiAgICAvLyBSb290IG9iamVjdHMgKHJlbGF0aW9uUGF0aCA9PT0gJycpIHNob3VsZCBuZXZlciByZWxhdGUuXG4gICAgaWYgKHJlbGF0aW9uUGF0aCAhPT0gJycpIHtcbiAgICAgIGNvbnN0IHsgcmVsYXRlIH0gPSB0aGlzLm92ZXJyaWRlc1xuICAgICAgcmV0dXJuIHJlbGF0ZVxuICAgICAgICAvLyBTZWUgaWYgdGhlIHJlbGF0ZSBvdmVycmlkZXMgY29udGFpbiB0aGlzIHBhcnRpY3VsYXIgcmVsYXRpb24tUGF0aFxuICAgICAgICAvLyBhbmQgb25seSByZW1vdmUgYW5kIHJlc3RvcmUgcmVsYXRpb24gZGF0YSBpZiByZWxhdGUgaXMgdG8gYmUgdXNlZFxuICAgICAgICA/IHJlbGF0ZS5pbmNsdWRlcyhyZWxhdGlvblBhdGgpXG4gICAgICAgIDogdGhpcy5vcHRpb25zLnJlbGF0ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHJlbGF0ZSBvcHRpb24gYnkgZGV0ZWN0aW5nIE9iamVjdGlvbiBpbnN0YW5jZXMgaW4gdGhlIGdyYXBoIGFuZFxuICAgKiBjb252ZXJ0aW5nIHRoZW0gdG8gc2hhbGxvdyBpZCBsaW5rcy5cbiAgICpcbiAgICogRm9yIGRldGFpbHMsIHNlZTpcbiAgICogaHR0cHM6Ly9naXR0ZXIuaW0vVmluY2l0L29iamVjdGlvbi5qcz9hdD01YTQyNDZlZWJhMzlhNTNmMWFhM2EzYjFcbiAgICovXG4gIHByb2Nlc3NSZWxhdGVzKGRhdGEsIHJlbGF0aW9uUGF0aCA9ICcnLCBkYXRhUGF0aCA9ICcnKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLiRpc09iamVjdGlvbk1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IGRhdGFcbiAgICAgICAgbGV0IGNvcHlcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUmVsYXRlKHJlbGF0aW9uUGF0aCkpIHtcbiAgICAgICAgICAvLyBGb3IgcmVsYXRlcywgc3RhcnQgd2l0aCBhIHJlZmVyZW5jZSBtb2RlbCB0aGF0IG9ubHkgY29udGFpbnMgdGhlXG4gICAgICAgICAgLy8gaWQgLyAjcmVmIGZpZWxkcywgYW5kIGFueSBtYW55LXRvLW1hbnkgcGl2b3QgdGFibGUgZXh0cmEgdmFsdWVzOlxuICAgICAgICAgIGNvcHkgPSBjb25zdHJ1Y3Rvci5nZXRSZWZlcmVuY2UoZGF0YSwgdGhpcy5leHRyYXNbcmVsYXRpb25QYXRoXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzbid0IGEgcmVsYXRlLCBzbyBjcmVhdGUgYSBwcm9wZXIgc2hhbGxvdyBjbG9uZTpcbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIGFsc28gY29waWVzIGAkJHF1ZXJ5UHJvcHNgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb3JlXG4gICAgICAgICAgLy8gYWR2YW5jZWQgT2JqZWN0aW9uLmpzIGZlYXR1cmVzIHRvIHdvcmssIGUuZy4gTGl0ZXJhbEJ1aWxkZXI6XG4gICAgICAgICAgY29weSA9IGRhdGEuJGNsb25lKHsgc2hhbGxvdzogdHJ1ZSB9KVxuICAgICAgICAgIC8vIEZvbGxvdyBhbGwgcmVsYXRpb25zIGFuZCBrZWVwIHByb2Nlc3Npbmc6XG4gICAgICAgICAgZm9yIChjb25zdCB7IG5hbWUgfSBvZiBPYmplY3QudmFsdWVzKGNvbnN0cnVjdG9yLmdldFJlbGF0aW9ucygpKSkge1xuICAgICAgICAgICAgaWYgKG5hbWUgaW4gZGF0YSkge1xuICAgICAgICAgICAgICBjb3B5W25hbWVdID0gdGhpcy5wcm9jZXNzUmVsYXRlcyhcbiAgICAgICAgICAgICAgICBkYXRhW25hbWVdLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBhdGgocmVsYXRpb25QYXRoLCAnLicsIG5hbWUpLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBhdGgoZGF0YVBhdGgsICcvJywgbmFtZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIC8vIFBvdGVudGlhbGx5IGEgaGFzLW1hbnkgcmVsYXRpb24sIHNvIGtlZXAgcHJvY2Vzc2luZyByZWxhdGVzOlxuICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGVudHJ5LCBpbmRleCkgPT4gdGhpcy5wcm9jZXNzUmVsYXRlcyhcbiAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICByZWxhdGlvblBhdGgsXG4gICAgICAgICAgYXBwZW5kUGF0aChkYXRhUGF0aCwgJy8nLCBpbmRleClcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRQYXRoKHBhdGgsIHNlcGFyYXRvciwgdG9rZW4pIHtcbiAgcmV0dXJuIHBhdGggIT09ICcnID8gYCR7cGF0aH0ke3NlcGFyYXRvcn0ke3Rva2VufWAgOiB0b2tlblxufVxuIl19
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.collectExpressionPaths = collectExpressionPaths;
5
- exports.expressionPathToString = expressionPathToString;
6
- exports.modelGraphToExpression = modelGraphToExpression;
7
-
8
- require("core-js/modules/esnext.async-iterator.map.js");
9
-
10
- require("core-js/modules/esnext.iterator.map.js");
11
-
12
- var _utils = require("@ditojs/utils");
13
-
14
- function collectExpressionPaths(expr) {
15
- const paths = [];
16
-
17
- for (const key of Object.keys(expr)) {
18
- const child = expr[key];
19
-
20
- if ((0, _utils.isObject)(child)) {
21
- const relation = child.$relation || key;
22
- const alias = relation !== key ? key : undefined;
23
- const modify = child.$modify;
24
- const entry = {
25
- relation,
26
- alias,
27
- modify
28
- };
29
- const subPaths = collectExpressionPaths(child);
30
-
31
- if (subPaths.length > 0) {
32
- for (const subPath of subPaths) {
33
- paths.push([entry, ...subPath]);
34
- }
35
- } else {
36
- paths.push([entry]);
37
- }
38
- }
39
- }
40
-
41
- return paths;
42
- }
43
-
44
- function expressionPathToString(path, start = 0) {
45
- return (start ? path.slice(start) : path).map(({
46
- relation,
47
- alias,
48
- modify
49
- }) => {
50
- const expr = alias ? `${relation} as ${alias}` : relation;
51
- return modify.length > 0 ? `${expr}(${modify.join(', ')})` : expr;
52
- }).join('.');
53
- }
54
-
55
- function modelGraphToExpression(modelGraph, expr) {
56
- if (modelGraph) {
57
- expr = expr || {};
58
-
59
- for (const model of (0, _utils.asArray)(modelGraph)) {
60
- if (model) {
61
- const relations = model.constructor.getRelations();
62
-
63
- for (const {
64
- name
65
- } of Object.values(relations)) {
66
- if (model.hasOwnProperty(name)) {
67
- expr[name] = modelGraphToExpression(model[name], expr[name]);
68
- }
69
- }
70
- }
71
- }
72
- }
73
-
74
- return expr;
75
- }
76
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ncmFwaC9leHByZXNzaW9uLmpzIl0sIm5hbWVzIjpbImNvbGxlY3RFeHByZXNzaW9uUGF0aHMiLCJleHByIiwicGF0aHMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGQiLCJyZWxhdGlvbiIsIiRyZWxhdGlvbiIsImFsaWFzIiwidW5kZWZpbmVkIiwibW9kaWZ5IiwiJG1vZGlmeSIsImVudHJ5Iiwic3ViUGF0aHMiLCJsZW5ndGgiLCJzdWJQYXRoIiwicHVzaCIsImV4cHJlc3Npb25QYXRoVG9TdHJpbmciLCJwYXRoIiwic3RhcnQiLCJzbGljZSIsIm1hcCIsImpvaW4iLCJtb2RlbEdyYXBoVG9FeHByZXNzaW9uIiwibW9kZWxHcmFwaCIsIm1vZGVsIiwicmVsYXRpb25zIiwiY29uc3RydWN0b3IiLCJnZXRSZWxhdGlvbnMiLCJuYW1lIiwidmFsdWVzIiwiaGFzT3duUHJvcGVydHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRU8sU0FBU0Esc0JBQVQsQ0FBZ0NDLElBQWhDLEVBQXNDO0FBQzNDLFFBQU1DLEtBQUssR0FBRyxFQUFkOztBQUNBLE9BQUssTUFBTUMsR0FBWCxJQUFrQkMsTUFBTSxDQUFDQyxJQUFQLENBQVlKLElBQVosQ0FBbEIsRUFBcUM7QUFDbkMsVUFBTUssS0FBSyxHQUFHTCxJQUFJLENBQUNFLEdBQUQsQ0FBbEI7O0FBQ0EsUUFBSSxxQkFBU0csS0FBVCxDQUFKLEVBQXFCO0FBQ25CLFlBQU1DLFFBQVEsR0FBR0QsS0FBSyxDQUFDRSxTQUFOLElBQW1CTCxHQUFwQztBQUNBLFlBQU1NLEtBQUssR0FBR0YsUUFBUSxLQUFLSixHQUFiLEdBQW1CQSxHQUFuQixHQUF5Qk8sU0FBdkM7QUFDQSxZQUFNQyxNQUFNLEdBQUdMLEtBQUssQ0FBQ00sT0FBckI7QUFDQSxZQUFNQyxLQUFLLEdBQUc7QUFBRU4sUUFBQUEsUUFBRjtBQUFZRSxRQUFBQSxLQUFaO0FBQW1CRSxRQUFBQTtBQUFuQixPQUFkO0FBQ0EsWUFBTUcsUUFBUSxHQUFHZCxzQkFBc0IsQ0FBQ00sS0FBRCxDQUF2Qzs7QUFDQSxVQUFJUSxRQUFRLENBQUNDLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFFdkIsYUFBSyxNQUFNQyxPQUFYLElBQXNCRixRQUF0QixFQUFnQztBQUM5QlosVUFBQUEsS0FBSyxDQUFDZSxJQUFOLENBQVcsQ0FBQ0osS0FBRCxFQUFRLEdBQUdHLE9BQVgsQ0FBWDtBQUNEO0FBQ0YsT0FMRCxNQUtPO0FBRUxkLFFBQUFBLEtBQUssQ0FBQ2UsSUFBTixDQUFXLENBQUNKLEtBQUQsQ0FBWDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPWCxLQUFQO0FBQ0Q7O0FBRU0sU0FBU2dCLHNCQUFULENBQWdDQyxJQUFoQyxFQUFzQ0MsS0FBSyxHQUFHLENBQTlDLEVBQWlEO0FBQ3RELFNBQU8sQ0FBQ0EsS0FBSyxHQUFHRCxJQUFJLENBQUNFLEtBQUwsQ0FBV0QsS0FBWCxDQUFILEdBQXVCRCxJQUE3QixFQUNKRyxHQURJLENBRUgsQ0FBQztBQUFFZixJQUFBQSxRQUFGO0FBQVlFLElBQUFBLEtBQVo7QUFBbUJFLElBQUFBO0FBQW5CLEdBQUQsS0FBaUM7QUFDL0IsVUFBTVYsSUFBSSxHQUFHUSxLQUFLLEdBQUksR0FBRUYsUUFBUyxPQUFNRSxLQUFNLEVBQTNCLEdBQStCRixRQUFqRDtBQUNBLFdBQU9JLE1BQU0sQ0FBQ0ksTUFBUCxHQUFnQixDQUFoQixHQUNGLEdBQUVkLElBQUssSUFBR1UsTUFBTSxDQUFDWSxJQUFQLENBQVksSUFBWixDQUFrQixHQUQxQixHQUVIdEIsSUFGSjtBQUdELEdBUEUsRUFTSnNCLElBVEksQ0FTQyxHQVRELENBQVA7QUFVRDs7QUFFTSxTQUFTQyxzQkFBVCxDQUFnQ0MsVUFBaEMsRUFBNEN4QixJQUE1QyxFQUFrRDtBQUN2RCxNQUFJd0IsVUFBSixFQUFnQjtBQUNkeEIsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLElBQUksRUFBZjs7QUFDQSxTQUFLLE1BQU15QixLQUFYLElBQW9CLG9CQUFRRCxVQUFSLENBQXBCLEVBQXlDO0FBQ3ZDLFVBQUlDLEtBQUosRUFBVztBQUNULGNBQU1DLFNBQVMsR0FBR0QsS0FBSyxDQUFDRSxXQUFOLENBQWtCQyxZQUFsQixFQUFsQjs7QUFDQSxhQUFLLE1BQU07QUFBRUMsVUFBQUE7QUFBRixTQUFYLElBQXVCMUIsTUFBTSxDQUFDMkIsTUFBUCxDQUFjSixTQUFkLENBQXZCLEVBQWlEO0FBQy9DLGNBQUlELEtBQUssQ0FBQ00sY0FBTixDQUFxQkYsSUFBckIsQ0FBSixFQUFnQztBQUM5QjdCLFlBQUFBLElBQUksQ0FBQzZCLElBQUQsQ0FBSixHQUFhTixzQkFBc0IsQ0FBQ0UsS0FBSyxDQUFDSSxJQUFELENBQU4sRUFBYzdCLElBQUksQ0FBQzZCLElBQUQsQ0FBbEIsQ0FBbkM7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQUNGOztBQUNELFNBQU83QixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RXhwcmVzc2lvblBhdGhzKGV4cHIpIHtcbiAgY29uc3QgcGF0aHMgPSBbXVxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhleHByKSkge1xuICAgIGNvbnN0IGNoaWxkID0gZXhwcltrZXldXG4gICAgaWYgKGlzT2JqZWN0KGNoaWxkKSkge1xuICAgICAgY29uc3QgcmVsYXRpb24gPSBjaGlsZC4kcmVsYXRpb24gfHwga2V5XG4gICAgICBjb25zdCBhbGlhcyA9IHJlbGF0aW9uICE9PSBrZXkgPyBrZXkgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG1vZGlmeSA9IGNoaWxkLiRtb2RpZnlcbiAgICAgIGNvbnN0IGVudHJ5ID0geyByZWxhdGlvbiwgYWxpYXMsIG1vZGlmeSB9XG4gICAgICBjb25zdCBzdWJQYXRocyA9IGNvbGxlY3RFeHByZXNzaW9uUGF0aHMoY2hpbGQpXG4gICAgICBpZiAoc3ViUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBUaGUgY2hpbGQgaGFzIGl0c2VsZiBjaGlsZHJlbi5cbiAgICAgICAgZm9yIChjb25zdCBzdWJQYXRoIG9mIHN1YlBhdGhzKSB7XG4gICAgICAgICAgcGF0aHMucHVzaChbZW50cnksIC4uLnN1YlBhdGhdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgY2hpbGQgaXMgYSBsZWFmLlxuICAgICAgICBwYXRocy5wdXNoKFtlbnRyeV0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvblBhdGhUb1N0cmluZyhwYXRoLCBzdGFydCA9IDApIHtcbiAgcmV0dXJuIChzdGFydCA/IHBhdGguc2xpY2Uoc3RhcnQpIDogcGF0aClcbiAgICAubWFwKFxuICAgICAgKHsgcmVsYXRpb24sIGFsaWFzLCBtb2RpZnkgfSkgPT4ge1xuICAgICAgICBjb25zdCBleHByID0gYWxpYXMgPyBgJHtyZWxhdGlvbn0gYXMgJHthbGlhc31gIDogcmVsYXRpb25cbiAgICAgICAgcmV0dXJuIG1vZGlmeS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgJHtleHByfSgke21vZGlmeS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgOiBleHByXG4gICAgICB9XG4gICAgKVxuICAgIC5qb2luKCcuJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsR3JhcGhUb0V4cHJlc3Npb24obW9kZWxHcmFwaCwgZXhwcikge1xuICBpZiAobW9kZWxHcmFwaCkge1xuICAgIGV4cHIgPSBleHByIHx8IHt9XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBhc0FycmF5KG1vZGVsR3JhcGgpKSB7XG4gICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gbW9kZWwuY29uc3RydWN0b3IuZ2V0UmVsYXRpb25zKClcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUgfSBvZiBPYmplY3QudmFsdWVzKHJlbGF0aW9ucykpIHtcbiAgICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGV4cHJbbmFtZV0gPSBtb2RlbEdyYXBoVG9FeHByZXNzaW9uKG1vZGVsW25hbWVdLCBleHByW25hbWVdKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhwclxufVxuIl19