@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.
- package/package.json +25 -43
- package/src/app/Application.js +105 -111
- package/src/app/Validator.js +6 -3
- package/src/app/index.js +2 -2
- package/src/cli/db/createMigration.js +1 -1
- package/src/cli/db/index.js +7 -7
- package/src/cli/db/listAssetConfig.js +1 -1
- package/src/cli/db/reset.js +1 -1
- package/src/cli/index.js +14 -5
- package/src/controllers/AdminController.js +181 -158
- package/src/controllers/CollectionController.js +8 -29
- package/src/controllers/Controller.js +71 -76
- package/src/controllers/ControllerAction.js +39 -17
- package/src/controllers/MemberAction.js +2 -2
- package/src/controllers/ModelController.js +4 -4
- package/src/controllers/RelationController.js +3 -3
- package/src/controllers/{UserController.js → UsersController.js} +8 -13
- package/src/controllers/index.js +5 -5
- package/src/decorators/action.js +3 -3
- package/src/decorators/authorize.js +1 -1
- package/src/decorators/index.js +6 -6
- package/src/decorators/parameters.js +1 -1
- package/src/decorators/returns.js +1 -1
- package/src/decorators/scope.js +1 -1
- package/src/decorators/transacted.js +1 -1
- package/src/errors/AssetError.js +1 -1
- package/src/errors/AuthenticationError.js +1 -1
- package/src/errors/AuthorizationError.js +1 -1
- package/src/errors/ControllerError.js +1 -1
- package/src/errors/DatabaseError.js +12 -3
- package/src/errors/GraphError.js +1 -1
- package/src/errors/ModelError.js +1 -1
- package/src/errors/NotFoundError.js +1 -1
- package/src/errors/NotImplementedError.js +1 -1
- package/src/errors/QueryBuilderError.js +1 -1
- package/src/errors/RelationError.js +1 -1
- package/src/errors/ValidationError.js +1 -1
- package/src/errors/WrappedError.js +1 -1
- package/src/errors/index.js +14 -14
- package/src/graph/DitoGraphProcessor.js +2 -1
- package/src/graph/graph.js +1 -1
- package/src/graph/index.js +3 -3
- package/src/index.js +11 -9
- package/src/lib/index.js +2 -2
- package/src/middleware/createTransaction.js +1 -1
- package/src/middleware/findRoute.js +3 -2
- package/src/middleware/handleConnectMiddleware.js +88 -0
- package/src/middleware/handleError.js +1 -1
- package/src/middleware/handleRoute.js +3 -3
- package/src/middleware/index.js +8 -7
- package/src/mixins/AssetMixin.js +1 -1
- package/src/mixins/UserMixin.js +1 -1
- package/src/mixins/index.js +4 -4
- package/src/models/AssetModel.js +2 -2
- package/src/models/Model.js +16 -12
- package/src/models/RelationAccessor.js +1 -1
- package/src/models/SessionModel.js +2 -2
- package/src/models/TimeStampedModel.js +2 -2
- package/src/models/UserModel.js +2 -2
- package/src/models/definitions/assets.js +1 -1
- package/src/models/definitions/filters.js +57 -44
- package/src/models/definitions/hooks.js +1 -1
- package/src/models/definitions/index.js +9 -9
- package/src/models/definitions/modifiers.js +1 -1
- package/src/models/definitions/options.js +1 -1
- package/src/models/definitions/properties.js +2 -2
- package/src/models/definitions/relations.js +1 -1
- package/src/models/definitions/schema.js +1 -1
- package/src/models/definitions/scopes.js +2 -2
- package/src/models/index.js +5 -5
- package/src/query/QueryBuilder.js +5 -5
- package/src/query/QueryFilters.js +50 -50
- package/src/query/QueryParameters.js +2 -2
- package/src/query/index.js +3 -3
- package/src/schema/formats/index.js +2 -2
- package/src/schema/index.js +4 -4
- package/src/schema/keywords/_relate.js +1 -1
- package/src/schema/keywords/index.js +12 -12
- package/src/schema/properties.test.js +1 -1
- package/src/schema/relations.js +1 -1
- package/src/schema/relations.test.js +2 -2
- package/src/services/index.js +1 -1
- package/src/storage/DiskStorage.js +1 -1
- package/src/storage/S3Storage.js +4 -4
- package/src/storage/Storage.js +1 -1
- package/src/storage/index.js +4 -4
- package/src/utils/function.test.js +1 -1
- package/src/utils/handler.js +17 -0
- package/src/utils/index.js +8 -7
- package/src/utils/object.test.js +1 -1
- package/lib/app/Application.js +0 -961
- package/lib/app/SessionStore.js +0 -40
- package/lib/app/Validator.js +0 -355
- package/lib/app/index.js +0 -26
- package/lib/cli/console.js +0 -175
- package/lib/cli/db/createMigration.js +0 -237
- package/lib/cli/db/index.js +0 -66
- package/lib/cli/db/listAssetConfig.js +0 -16
- package/lib/cli/db/migrate.js +0 -15
- package/lib/cli/db/reset.js +0 -27
- package/lib/cli/db/rollback.js +0 -15
- package/lib/cli/db/seed.js +0 -104
- package/lib/cli/db/unlock.js +0 -15
- package/lib/cli/index.js +0 -90
- package/lib/controllers/AdminController.js +0 -258
- package/lib/controllers/CollectionController.js +0 -263
- package/lib/controllers/Controller.js +0 -462
- package/lib/controllers/ControllerAction.js +0 -276
- package/lib/controllers/MemberAction.js +0 -22
- package/lib/controllers/ModelController.js +0 -64
- package/lib/controllers/RelationController.js +0 -82
- package/lib/controllers/UserController.js +0 -98
- package/lib/controllers/index.js +0 -50
- package/lib/decorators/action.js +0 -14
- package/lib/decorators/authorize.js +0 -13
- package/lib/decorators/index.js +0 -58
- package/lib/decorators/parameters.js +0 -35
- package/lib/decorators/returns.js +0 -26
- package/lib/decorators/scope.js +0 -14
- package/lib/decorators/transacted.js +0 -12
- package/lib/errors/AssetError.js +0 -19
- package/lib/errors/AuthenticationError.js +0 -19
- package/lib/errors/AuthorizationError.js +0 -19
- package/lib/errors/ControllerError.js +0 -24
- package/lib/errors/DatabaseError.js +0 -27
- package/lib/errors/GraphError.js +0 -19
- package/lib/errors/ModelError.js +0 -24
- package/lib/errors/NotFoundError.js +0 -19
- package/lib/errors/NotImplementedError.js +0 -19
- package/lib/errors/QueryBuilderError.js +0 -19
- package/lib/errors/RelationError.js +0 -36
- package/lib/errors/ResponseError.js +0 -46
- package/lib/errors/ValidationError.js +0 -19
- package/lib/errors/WrappedError.js +0 -24
- package/lib/errors/index.js +0 -122
- package/lib/graph/DitoGraphProcessor.js +0 -185
- package/lib/graph/expression.js +0 -76
- package/lib/graph/graph.js +0 -300
- package/lib/graph/index.js +0 -34
- package/lib/index.js +0 -82
- package/lib/lib/EventEmitter.js +0 -76
- package/lib/lib/KnexHelper.js +0 -40
- package/lib/lib/index.js +0 -26
- package/lib/middleware/attachLogger.js +0 -16
- package/lib/middleware/createTransaction.js +0 -36
- package/lib/middleware/findRoute.js +0 -35
- package/lib/middleware/handleError.js +0 -26
- package/lib/middleware/handleRoute.js +0 -29
- package/lib/middleware/handleUser.js +0 -36
- package/lib/middleware/index.js +0 -66
- package/lib/middleware/logRequests.js +0 -122
- package/lib/mixins/AssetMixin.js +0 -81
- package/lib/mixins/SessionMixin.js +0 -22
- package/lib/mixins/TimeStampedMixin.js +0 -47
- package/lib/mixins/UserMixin.js +0 -151
- package/lib/mixins/index.js +0 -42
- package/lib/models/AssetModel.js +0 -12
- package/lib/models/Model.js +0 -953
- package/lib/models/RelationAccessor.js +0 -41
- package/lib/models/SessionModel.js +0 -12
- package/lib/models/TimeStampedModel.js +0 -12
- package/lib/models/UserModel.js +0 -12
- package/lib/models/definitions/assets.js +0 -11
- package/lib/models/definitions/filters.js +0 -101
- package/lib/models/definitions/hooks.js +0 -11
- package/lib/models/definitions/index.js +0 -38
- package/lib/models/definitions/modifiers.js +0 -11
- package/lib/models/definitions/options.js +0 -11
- package/lib/models/definitions/properties.js +0 -87
- package/lib/models/definitions/relations.js +0 -11
- package/lib/models/definitions/schema.js +0 -11
- package/lib/models/definitions/scopes.js +0 -51
- package/lib/models/index.js +0 -50
- package/lib/query/QueryBuilder.js +0 -745
- package/lib/query/QueryFilters.js +0 -82
- package/lib/query/QueryParameters.js +0 -77
- package/lib/query/Registry.js +0 -40
- package/lib/query/index.js +0 -34
- package/lib/schema/formats/_empty.js +0 -10
- package/lib/schema/formats/_required.js +0 -10
- package/lib/schema/formats/index.js +0 -26
- package/lib/schema/index.js +0 -49
- package/lib/schema/keywords/_computed.js +0 -11
- package/lib/schema/keywords/_foreign.js +0 -11
- package/lib/schema/keywords/_hidden.js +0 -11
- package/lib/schema/keywords/_index.js +0 -11
- package/lib/schema/keywords/_instanceof.js +0 -49
- package/lib/schema/keywords/_primary.js +0 -11
- package/lib/schema/keywords/_range.js +0 -26
- package/lib/schema/keywords/_relate.js +0 -19
- package/lib/schema/keywords/_specificType.js +0 -11
- package/lib/schema/keywords/_unique.js +0 -11
- package/lib/schema/keywords/_unsigned.js +0 -11
- package/lib/schema/keywords/_validate.js +0 -80
- package/lib/schema/keywords/index.js +0 -106
- package/lib/schema/properties.js +0 -227
- package/lib/schema/properties.test.js +0 -573
- package/lib/schema/relations.js +0 -274
- package/lib/schema/relations.test.js +0 -155
- package/lib/services/Service.js +0 -34
- package/lib/services/index.js +0 -18
- package/lib/storage/AssetFile.js +0 -97
- package/lib/storage/DiskStorage.js +0 -125
- package/lib/storage/S3Storage.js +0 -171
- package/lib/storage/Storage.js +0 -209
- package/lib/storage/index.js +0 -34
- package/lib/utils/decorator.js +0 -16
- package/lib/utils/deprecate.js +0 -46
- package/lib/utils/emitter.js +0 -13
- package/lib/utils/function.js +0 -14
- package/lib/utils/function.test.js +0 -49
- package/lib/utils/index.js +0 -66
- package/lib/utils/json.js +0 -9
- package/lib/utils/object.js +0 -92
- package/lib/utils/object.test.js +0 -65
- package/lib/utils/scope.js +0 -14
package/lib/errors/index.js
DELETED
|
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ncmFwaC9EaXRvR3JhcGhQcm9jZXNzb3IuanMiXSwibmFtZXMiOlsiRGl0b0dyYXBoUHJvY2Vzc29yIiwiY29uc3RydWN0b3IiLCJyb290TW9kZWxDbGFzcyIsImRhdGEiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJza2lwVmFsaWRhdGlvbiIsImlzQXJyYXkiLCJvdmVycmlkZXMiLCJleHRyYXMiLCJudW1PcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIm51bU92ZXJyaWRlcyIsInByb2Nlc3NPdmVycmlkZXMiLCJjb2xsZWN0T3ZlcnJpZGVzIiwiZ2V0T3B0aW9ucyIsImdldERhdGEiLCJwcm9jZXNzUmVsYXRlcyIsImdldEdyYXBoT3B0aW9ucyIsInJlbGF0aW9uIiwib3duZXJPcHRpb25zIiwicmVsYXRlIiwidW5yZWxhdGUiLCJncmFwaE9wdGlvbnMiLCJvd25lciIsInByb2Nlc3NlZCIsInByb2Nlc3NNb2RlbENsYXNzIiwibW9kZWxDbGFzcyIsIm5hbWUiLCJyZWxhdGlvbnMiLCJkZWZpbml0aW9uIiwicmVsYXRpb25JbnN0YW5jZXMiLCJnZXRSZWxhdGlvbnMiLCJlbnRyaWVzIiwia2V5IiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJleHByIiwicHJvY2Vzc0V4cHJlc3Npb24iLCJyZWxhdGlvblBhdGgiLCJvcHRpb24iLCJwdXNoIiwiZXh0cmEiLCJ0aHJvdWdoIiwiY2hpbGRFeHByIiwiYXBwZW5kUGF0aCIsInNob3VsZFJlbGF0ZSIsImluY2x1ZGVzIiwiZGF0YVBhdGgiLCIkaXNPYmplY3Rpb25Nb2RlbCIsImNvcHkiLCJnZXRSZWZlcmVuY2UiLCIkY2xvbmUiLCJzaGFsbG93IiwidmFsdWVzIiwibWFwIiwiZW50cnkiLCJpbmRleCIsInBhdGgiLCJzZXBhcmF0b3IiLCJ0b2tlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRU8sTUFBTUEsa0JBQU4sQ0FBeUI7QUFDOUJDLEVBQUFBLFdBQVcs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bnRlbnQiOlsiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtb2RlbEdyYXBoVG9FeHByZXNzaW9uLCBlbnN1cmVNb2RlbEFycmF5IH0gZnJvbSAnLidcblxuZXhwb3J0IGNsYXNzIERpdG9HcmFwaFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKHJvb3RNb2RlbENsYXNzLCBkYXRhLCBvcHRpb25zID0ge30sIHNldHRpbmdzID0ge30pIHtcbiAgICB0aGlzLnJvb3RNb2RlbENsYXNzID0gcm9vdE1vZGVsQ2xhc3NcbiAgICB0aGlzLmRhdGEgPSBlbnN1cmVNb2RlbEFycmF5KHJvb3RNb2RlbENsYXNzLCBkYXRhLCB7XG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy5pc0FycmF5ID0gaXNBcnJheShkYXRhKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3NcbiAgICB0aGlzLm92ZXJyaWRlcyA9IHt9XG4gICAgdGhpcy5leHRyYXMgPSB7fVxuICAgIHRoaXMubnVtT3B0aW9ucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aFxuICAgIHRoaXMubnVtT3ZlcnJpZGVzID0gMFxuICAgIGlmIChzZXR0aW5ncy5wcm9jZXNzT3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmNvbGxlY3RPdmVycmlkZXMoKVxuICAgICAgaWYgKHRoaXMubnVtT3ZlcnJpZGVzID4gMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NPdmVycmlkZXMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLnRoaXMub3ZlcnJpZGVzXG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICAvLyBJZiBzZXR0aW5nLnByb2Nlc3NSZWxhdGVzIGlzIHVzZWQsIGNhbGwgcHJvY2Vzc1JlbGF0ZSgpIHRvIGZpbHRlciBvdXRcbiAgICAvLyBuZXN0ZWQgcmVsYXRpb25zIG9mIG1vZGVscyB0aGF0IGFyZSB1c2VkIGZvciByZWxhdGVzLlxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNldHRpbmdzLnByb2Nlc3NSZWxhdGVzXG4gICAgICA/IHRoaXMucHJvY2Vzc1JlbGF0ZXModGhpcy5kYXRhKVxuICAgICAgOiB0aGlzLmRhdGFcbiAgICByZXR1cm4gdGhpcy5pc0FycmF5ID8gZGF0YSA6IGRhdGFbMF1cbiAgfVxuXG4gIGdldEdyYXBoT3B0aW9ucyhyZWxhdGlvbikge1xuICAgIC8vIFdoZW4gYSByZWxhdGlvbiBpcyBvd25lciBvZiBpdHMgZGF0YSwgdGhlbiBhIGZhbGwtYmFjayBmb3IgYGdyYXBoT3B0aW9uc2BcbiAgICAvLyBpcyBwcm92aWRlZCB3aGVyZSBib3RoIGByZWxhdGVgIGFuZCBgdW5yZWxhdGVgIGlzIGRpc2FibGVkLCByZXN1bHRpbmcgaW5cbiAgICAvLyBpbnNlcnRzIGFuZCBkZWxldGVzIGluc3RlYWQuXG4gICAgY29uc3Qgb3duZXJPcHRpb25zID0ge1xuICAgICAgcmVsYXRlOiBmYWxzZSxcbiAgICAgIHVucmVsYXRlOiBmYWxzZVxuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIGBncmFwaE9wdGlvbnNgIHRvIGJlIHVzZWQgZm9yIHRoaXMgcmVsYXRpb24uXG4gICAgcmV0dXJuIHJlbGF0aW9uLmdyYXBoT3B0aW9ucyB8fCByZWxhdGlvbi5vd25lciAmJiBvd25lck9wdGlvbnMgfHwge31cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29wcyB0aHJvdWdoIGFsbCBuZXN0ZWQgcmVsYXRpb25zIGFuZCBmaW5kcyB0aGUgb25lcyB0aGF0IGRlZmluZSBsb2NhbFxuICAgKiBvdmVycmlkZXMgb2YgdGhlIGdsb2JhbCBvcHRpb25zLCB0aGVuIGNvbGxlY3RzIGVtcHR5IG92ZXJyaWRlIGFycmF5cyBmb3JcbiAgICogZWFjaCBzZXR0aW5nLCBzbyBwcm9jZXNzT3ZlcnJpZGVzKCkgY2FuIGZpbGwgdGhlbSBpZiBhbnkgb3ZlcnJpZGVzIGV4aXN0LlxuICAgKi9cbiAgY29sbGVjdE92ZXJyaWRlcygpIHtcbiAgICAvLyBUT0RPOiB3ZSBtYXkgd2FudCBvcHRpbWl6ZSB0aGlzIGNvZGUgdG8gb25seSBjb2xsZWN0IHRoZSBvdmVycmlkZXMgZm9yXG4gICAgLy8gdGhlIHJlbGF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGluIHRoZSBncmFwaCwgZS5nLiB0aHJvdWdoXG4gICAgLy8gYG1vZGVsR3JhcGhUb0V4cHJlc3Npb24oZGF0YSlgLiBTaG91bGQgd2UgZXZlciBzd2l0Y2ggdG8gb3VyIG93blxuICAgIC8vIGltcGxlbWVudGF0aW9uIG9mICpBbmRGZXRjaCgpIG1ldGhvZHMsIHdlIGFscmVhZHkgaGF2ZSB0byBjYWxsIHRoaXMuXG4gICAgY29uc3QgcHJvY2Vzc2VkID0ge31cbiAgICBjb25zdCBwcm9jZXNzTW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBtb2RlbENsYXNzXG4gICAgICAvLyBPbmx5IHByb2Nlc3MgZWFjaCBtb2RlbENsYXNzIG9uY2UsIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZSBsb29wcy5cbiAgICAgIGlmICghcHJvY2Vzc2VkW25hbWVdKSB7XG4gICAgICAgIHByb2Nlc3NlZFtuYW1lXSA9IHRydWVcbiAgICAgICAgY29uc3QgeyByZWxhdGlvbnMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuICAgICAgICBjb25zdCByZWxhdGlvbkluc3RhbmNlcyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgcmVsYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHJlbGF0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBncmFwaE9wdGlvbnMgPSB0aGlzLmdldEdyYXBoT3B0aW9ucyhyZWxhdGlvbilcbiAgICAgICAgICBpZiAoZ3JhcGhPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYHRoaXMub3B0aW9uc2AgYW5kIG9ubHkgbG9vayBmb3Igb3ZlcnJpZGVzIG9mIHRoZW0sXG4gICAgICAgICAgICAvLyBzaW5jZSBgcmVsYXRpb24uZ3JhcGhPcHRpb25zYCBpcyBhY3Jvc3MgaW5zZXJ0ICAvIHVwc2VydCAmIGNvLixcbiAgICAgICAgICAgIC8vIGJ1dCBub3QgYWxsIG9mIHRoZW0gdXNlIGFsbCBvcHRpb25zIChpbnNlcnQgZGVmaW5lcyBsZXNzKS5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoa2V5IGluIGdyYXBoT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZ3JhcGhPcHRpb25zW2tleV0gIT09IHRoaXMub3B0aW9uc1trZXldICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5vdmVycmlkZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMubnVtT3ZlcnJpZGVzKytcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlc1trZXldID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gS2VlcCBzY2FubmluZyB1bnRpbCB3ZSdyZSBkb25lIG9yIGZvdW5kIHRoYXQgYWxsIG9wdGlvbnMgaGF2ZVxuICAgICAgICAgICAgLy8gb3ZlcnJpZGVzLlxuICAgICAgICAgICAgaWYgKHRoaXMubnVtT3ZlcnJpZGVzIDwgdGhpcy5udW1PcHRpb25zKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NNb2RlbENsYXNzKHJlbGF0aW9uSW5zdGFuY2VzW25hbWVdLnJlbGF0ZWRNb2RlbENsYXNzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NNb2RlbENsYXNzKHRoaXMucm9vdE1vZGVsQ2xhc3MpXG4gIH1cblxuICAvKipcbiAgICogRmlsbHMgdGhlIGVtcHR5IG92ZXJyaWRlIGFycmF5cyBjb2xsZWN0ZWQgYnkgY29sbGVjdE92ZXJyaWRlcygpIGJ5IHdhbGtpbmdcbiAgICogdGhyb3VnaCB0aGUgYWN0dWFsIGdyYXBoIGFuZCBmaW5kaW5nIHJlbGF0aW9ucyB0aGF0IGhhdmUgb3ZlcnJpZGVzLCBhbmRcbiAgICogYnVpbGRpbmcgcmVsYXRpb24gcGF0aHMgZm9yIHRoZW0uXG4gICAqL1xuICBwcm9jZXNzT3ZlcnJpZGVzKCkge1xuICAgIGNvbnN0IGV4cHIgPSBtb2RlbEdyYXBoVG9FeHByZXNzaW9uKHRoaXMuZGF0YSlcblxuICAgIGNvbnN0IHByb2Nlc3NFeHByZXNzaW9uID1cbiAgICAgIChleHByLCBtb2RlbENsYXNzLCByZWxhdGlvbiwgcmVsYXRpb25QYXRoID0gJycpID0+IHtcbiAgICAgICAgaWYgKHJlbGF0aW9uKSB7XG4gICAgICAgICAgY29uc3QgZ3JhcGhPcHRpb25zID0gdGhpcy5nZXRHcmFwaE9wdGlvbnMocmVsYXRpb24pXG4gICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvdmVycmlkZSBvcHRpb25zLCBmaWd1cmUgb3V0IHRoZWlyIHNldHRpbmdzIGZvclxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHJlbGF0aW9uIGFuZCBidWlsZCByZWxhdGlvbiBleHByZXNzaW9uIGFycmF5cyBmb3IgZWFjaFxuICAgICAgICAgIC8vIG92ZXJyaWRlIHJlZmxlY3RpbmcgdGhlaXIgbmVzdGVkIHNldHRpbmdzIGluIGFycmF5cyBvZiBleHByZXNzaW9ucy5cbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm92ZXJyaWRlcykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JhcGhPcHRpb25zW2tleV0gPz8gdGhpcy5vcHRpb25zW2tleV1cbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZXNba2V5XS5wdXNoKHJlbGF0aW9uUGF0aClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBbHNvIGNvbGxlY3QgYW55IG1hbnktdG8tbWFueSBwaXZvdCB0YWJsZSBleHRyYSBwcm9wZXJ0aWVzLlxuICAgICAgICAgIGNvbnN0IGV4dHJhID0gcmVsYXRpb24udGhyb3VnaD8uZXh0cmFcbiAgICAgICAgICBpZiAoZXh0cmE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFzW3JlbGF0aW9uUGF0aF0gPSBleHRyYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVsYXRpb25zIH0gPSBtb2RlbENsYXNzLmRlZmluaXRpb25cbiAgICAgICAgY29uc3QgcmVsYXRpb25JbnN0YW5jZXMgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9ucygpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cHIpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZEV4cHIgPSBleHByW2tleV1cbiAgICAgICAgICBjb25zdCB7IHJlbGF0ZWRNb2RlbENsYXNzIH0gPSByZWxhdGlvbkluc3RhbmNlc1trZXldXG4gICAgICAgICAgcHJvY2Vzc0V4cHJlc3Npb24oXG4gICAgICAgICAgICBjaGlsZEV4cHIsXG4gICAgICAgICAgICByZWxhdGVkTW9kZWxDbGFzcyxcbiAgICAgICAgICAgIHJlbGF0aW9uc1trZXldLFxuICAgICAgICAgICAgYXBwZW5kUGF0aChyZWxhdGlvblBhdGgsICcuJywga2V5KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgcHJvY2Vzc0V4cHJlc3Npb24oZXhwciwgdGhpcy5yb290TW9kZWxDbGFzcylcbiAgfVxuXG4gIHNob3VsZFJlbGF0ZShyZWxhdGlvblBhdGgpIHtcbiAgICAvLyBSb290IG9iamVjdHMgKHJlbGF0aW9uUGF0aCA9PT0gJycpIHNob3VsZCBuZXZlciByZWxhdGUuXG4gICAgaWYgKHJlbGF0aW9uUGF0aCAhPT0gJycpIHtcbiAgICAgIGNvbnN0IHsgcmVsYXRlIH0gPSB0aGlzLm92ZXJyaWRlc1xuICAgICAgcmV0dXJuIHJlbGF0ZVxuICAgICAgICAvLyBTZWUgaWYgdGhlIHJlbGF0ZSBvdmVycmlkZXMgY29udGFpbiB0aGlzIHBhcnRpY3VsYXIgcmVsYXRpb24tUGF0aFxuICAgICAgICAvLyBhbmQgb25seSByZW1vdmUgYW5kIHJlc3RvcmUgcmVsYXRpb24gZGF0YSBpZiByZWxhdGUgaXMgdG8gYmUgdXNlZFxuICAgICAgICA/IHJlbGF0ZS5pbmNsdWRlcyhyZWxhdGlvblBhdGgpXG4gICAgICAgIDogdGhpcy5vcHRpb25zLnJlbGF0ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHJlbGF0ZSBvcHRpb24gYnkgZGV0ZWN0aW5nIE9iamVjdGlvbiBpbnN0YW5jZXMgaW4gdGhlIGdyYXBoIGFuZFxuICAgKiBjb252ZXJ0aW5nIHRoZW0gdG8gc2hhbGxvdyBpZCBsaW5rcy5cbiAgICpcbiAgICogRm9yIGRldGFpbHMsIHNlZTpcbiAgICogaHR0cHM6Ly9naXR0ZXIuaW0vVmluY2l0L29iamVjdGlvbi5qcz9hdD01YTQyNDZlZWJhMzlhNTNmMWFhM2EzYjFcbiAgICovXG4gIHByb2Nlc3NSZWxhdGVzKGRhdGEsIHJlbGF0aW9uUGF0aCA9ICcnLCBkYXRhUGF0aCA9ICcnKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLiRpc09iamVjdGlvbk1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IGRhdGFcbiAgICAgICAgbGV0IGNvcHlcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUmVsYXRlKHJlbGF0aW9uUGF0aCkpIHtcbiAgICAgICAgICAvLyBGb3IgcmVsYXRlcywgc3RhcnQgd2l0aCBhIHJlZmVyZW5jZSBtb2RlbCB0aGF0IG9ubHkgY29udGFpbnMgdGhlXG4gICAgICAgICAgLy8gaWQgLyAjcmVmIGZpZWxkcywgYW5kIGFueSBtYW55LXRvLW1hbnkgcGl2b3QgdGFibGUgZXh0cmEgdmFsdWVzOlxuICAgICAgICAgIGNvcHkgPSBjb25zdHJ1Y3Rvci5nZXRSZWZlcmVuY2UoZGF0YSwgdGhpcy5leHRyYXNbcmVsYXRpb25QYXRoXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzbid0IGEgcmVsYXRlLCBzbyBjcmVhdGUgYSBwcm9wZXIgc2hhbGxvdyBjbG9uZTpcbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIGFsc28gY29waWVzIGAkJHF1ZXJ5UHJvcHNgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb3JlXG4gICAgICAgICAgLy8gYWR2YW5jZWQgT2JqZWN0aW9uLmpzIGZlYXR1cmVzIHRvIHdvcmssIGUuZy4gTGl0ZXJhbEJ1aWxkZXI6XG4gICAgICAgICAgY29weSA9IGRhdGEuJGNsb25lKHsgc2hhbGxvdzogdHJ1ZSB9KVxuICAgICAgICAgIC8vIEZvbGxvdyBhbGwgcmVsYXRpb25zIGFuZCBrZWVwIHByb2Nlc3Npbmc6XG4gICAgICAgICAgZm9yIChjb25zdCB7IG5hbWUgfSBvZiBPYmplY3QudmFsdWVzKGNvbnN0cnVjdG9yLmdldFJlbGF0aW9ucygpKSkge1xuICAgICAgICAgICAgaWYgKG5hbWUgaW4gZGF0YSkge1xuICAgICAgICAgICAgICBjb3B5W25hbWVdID0gdGhpcy5wcm9jZXNzUmVsYXRlcyhcbiAgICAgICAgICAgICAgICBkYXRhW25hbWVdLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBhdGgocmVsYXRpb25QYXRoLCAnLicsIG5hbWUpLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBhdGgoZGF0YVBhdGgsICcvJywgbmFtZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIC8vIFBvdGVudGlhbGx5IGEgaGFzLW1hbnkgcmVsYXRpb24sIHNvIGtlZXAgcHJvY2Vzc2luZyByZWxhdGVzOlxuICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGVudHJ5LCBpbmRleCkgPT4gdGhpcy5wcm9jZXNzUmVsYXRlcyhcbiAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICByZWxhdGlvblBhdGgsXG4gICAgICAgICAgYXBwZW5kUGF0aChkYXRhUGF0aCwgJy8nLCBpbmRleClcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRQYXRoKHBhdGgsIHNlcGFyYXRvciwgdG9rZW4pIHtcbiAgcmV0dXJuIHBhdGggIT09ICcnID8gYCR7cGF0aH0ke3NlcGFyYXRvcn0ke3Rva2VufWAgOiB0b2tlblxufVxuIl19
|
package/lib/graph/expression.js
DELETED
|
@@ -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
|