@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,40 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.default = void 0;
5
-
6
- require("core-js/modules/es.error.cause.js");
7
-
8
- var _default = modelName => class SessionStore {
9
- constructor(ctx) {
10
- this.ctx = ctx;
11
- this.modelClass = ctx.app.models[modelName];
12
-
13
- if (!this.modelClass) {
14
- throw new Error(`Unable to find model class: '${modelName}'`);
15
- }
16
- }
17
-
18
- query() {
19
- return this.modelClass.query(this.ctx.transaction);
20
- }
21
-
22
- async get(id) {
23
- const session = await this.query().findById(id);
24
- return (session == null ? void 0 : session.value) || {};
25
- }
26
-
27
- async set(id, value) {
28
- await this.query().findById(id).upsert({ ...this.modelClass.getReference(id),
29
- value
30
- });
31
- }
32
-
33
- async destroy(key) {
34
- return this.query().deleteById(key);
35
- }
36
-
37
- };
38
-
39
- exports.default = _default;
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvU2Vzc2lvblN0b3JlLmpzIl0sIm5hbWVzIjpbIm1vZGVsTmFtZSIsIlNlc3Npb25TdG9yZSIsImNvbnN0cnVjdG9yIiwiY3R4IiwibW9kZWxDbGFzcyIsImFwcCIsIm1vZGVscyIsIkVycm9yIiwicXVlcnkiLCJ0cmFuc2FjdGlvbiIsImdldCIsImlkIiwic2Vzc2lvbiIsImZpbmRCeUlkIiwidmFsdWUiLCJzZXQiLCJ1cHNlcnQiLCJnZXRSZWZlcmVuY2UiLCJkZXN0cm95Iiwia2V5IiwiZGVsZXRlQnlJZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztlQUFlQSxTQUFTLElBQUksTUFBTUMsWUFBTixDQUFtQjtBQUM3Q0MsRUFBQUEsV0FBVyxDQUFDQyxHQUFELEVBQU07QUFDZixTQUFLQSxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxVQUFMLEdBQWtCRCxHQUFHLENBQUNFLEdBQUosQ0FBUUMsTUFBUixDQUFlTixTQUFmLENBQWxCOztBQUNBLFFBQUksQ0FBQyxLQUFLSSxVQUFWLEVBQXNCO0FBQ3BCLFlBQU0sSUFBSUcsS0FBSixDQUFXLGdDQUErQlAsU0FBVSxHQUFwRCxDQUFOO0FBQ0Q7QUFDRjs7QUFFRFEsRUFBQUEsS0FBSyxHQUFHO0FBQ04sV0FBTyxLQUFLSixVQUFMLENBQWdCSSxLQUFoQixDQUFzQixLQUFLTCxHQUFMLENBQVNNLFdBQS9CLENBQVA7QUFDRDs7QUFFUSxRQUFIQyxHQUFHLENBQUNDLEVBQUQsRUFBSztBQUNaLFVBQU1DLE9BQU8sR0FBRyxNQUFNLEtBQUtKLEtBQUwsR0FBYUssUUFBYixDQUFzQkYsRUFBdEIsQ0FBdEI7QUFDQSxXQUFPLENBQUFDLE9BQU8sUUFBUCxZQUFBQSxPQUFPLENBQUVFLEtBQVQsS0FBa0IsRUFBekI7QUFDRDs7QUFFUSxRQUFIQyxHQUFHLENBQUNKLEVBQUQsRUFBS0csS0FBTCxFQUFZO0FBQ25CLFVBQU0sS0FBS04sS0FBTCxHQUNISyxRQURHLENBQ01GLEVBRE4sRUFFSEssTUFGRyxDQUVJLEVBQ04sR0FBRyxLQUFLWixVQUFMLENBQWdCYSxZQUFoQixDQUE2Qk4sRUFBN0IsQ0FERztBQUVORyxNQUFBQTtBQUZNLEtBRkosQ0FBTjtBQU1EOztBQUVZLFFBQVBJLE9BQU8sQ0FBQ0MsR0FBRCxFQUFNO0FBQ2pCLFdBQU8sS0FBS1gsS0FBTCxHQUFhWSxVQUFiLENBQXdCRCxHQUF4QixDQUFQO0FBQ0Q7O0FBN0I0QyxDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgbW9kZWxOYW1lID0+IGNsYXNzIFNlc3Npb25TdG9yZSB7XG4gIGNvbnN0cnVjdG9yKGN0eCkge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5tb2RlbENsYXNzID0gY3R4LmFwcC5tb2RlbHNbbW9kZWxOYW1lXVxuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIG1vZGVsIGNsYXNzOiAnJHttb2RlbE5hbWV9J2ApXG4gICAgfVxuICB9XG5cbiAgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxDbGFzcy5xdWVyeSh0aGlzLmN0eC50cmFuc2FjdGlvbilcbiAgfVxuXG4gIGFzeW5jIGdldChpZCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCB0aGlzLnF1ZXJ5KCkuZmluZEJ5SWQoaWQpXG4gICAgcmV0dXJuIHNlc3Npb24/LnZhbHVlIHx8IHt9XG4gIH1cblxuICBhc3luYyBzZXQoaWQsIHZhbHVlKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeSgpXG4gICAgICAuZmluZEJ5SWQoaWQpXG4gICAgICAudXBzZXJ0KHtcbiAgICAgICAgLi4udGhpcy5tb2RlbENsYXNzLmdldFJlZmVyZW5jZShpZCksXG4gICAgICAgIHZhbHVlXG4gICAgICB9KVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgpLmRlbGV0ZUJ5SWQoa2V5KVxuICB9XG59XG4iXX0=
@@ -1,355 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
-
5
- require("core-js/modules/esnext.weak-map.emplace.js");
6
-
7
- exports.__esModule = true;
8
- exports.Validator = void 0;
9
-
10
- require("core-js/modules/esnext.async-iterator.reduce.js");
11
-
12
- require("core-js/modules/esnext.iterator.constructor.js");
13
-
14
- require("core-js/modules/esnext.iterator.reduce.js");
15
-
16
- require("core-js/modules/esnext.async-iterator.map.js");
17
-
18
- require("core-js/modules/esnext.iterator.map.js");
19
-
20
- var _objection = _interopRequireDefault(require("objection"));
21
-
22
- var _ajv = _interopRequireDefault(require("ajv"));
23
-
24
- var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
25
-
26
- var _utils = require("@ditojs/utils");
27
-
28
- var _utils2 = require("../utils");
29
-
30
- var schema = _interopRequireWildcard(require("../schema"));
31
-
32
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
-
34
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
-
36
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
-
38
- class Validator extends _objection.default.Validator {
39
- constructor({
40
- options,
41
- keywords,
42
- formats
43
- } = {}) {
44
- super();
45
- this.options = { ...defaultOptions,
46
- ...options
47
- };
48
- this.keywords = { ...schema.keywords,
49
- ...keywords
50
- };
51
- this.formats = { ...schema.formats,
52
- ...formats
53
- };
54
- this.schemas = [];
55
- this.ajvCache = Object.create(null);
56
- }
57
-
58
- createAjv(options) {
59
- const {
60
- async,
61
- patch,
62
- ...opts
63
- } = options;
64
- const ajv = new _ajv.default({ ...this.options,
65
- ...opts,
66
- ...(patch && {
67
- useDefaults: false
68
- })
69
- });
70
- (0, _ajvFormats.default)(ajv, {
71
- mode: 'full'
72
- });
73
-
74
- const addSchemas = (schemas, callback) => {
75
- for (const [name, schema] of Object.entries(schemas)) {
76
- if (schema) {
77
- callback(name.replace(/^_/, ''), schema);
78
- }
79
- }
80
- };
81
-
82
- addSchemas(this.keywords, (keyword, schema) => ajv.addKeyword({
83
- keyword,
84
- ...schema
85
- }));
86
- addSchemas(this.formats, (format, schema) => ajv.addFormat(format, { ...schema
87
- }));
88
-
89
- for (const schema of this.schemas) {
90
- ajv.addSchema(this.processSchema(schema, options));
91
- }
92
-
93
- return ajv;
94
- }
95
-
96
- getAjv(options = {}) {
97
- const opts = Object.entries(options).reduce((opts, [key, value]) => {
98
- if (key in validatorOptions && value !== validatorOptions[key]) {
99
- opts[key] = value;
100
- }
101
-
102
- return opts;
103
- }, {});
104
- const cacheKey = (0, _utils2.formatJson)(opts, false);
105
- const {
106
- ajv
107
- } = this.ajvCache[cacheKey] || (this.ajvCache[cacheKey] = {
108
- ajv: this.createAjv(opts),
109
- options
110
- });
111
- return ajv;
112
- }
113
-
114
- compile(jsonSchema, options = {}) {
115
- const ajv = this.getAjv(options);
116
- const validator = ajv.compile(this.processSchema(jsonSchema, options));
117
- const dontThrow = options.throw === false;
118
- return options.async ? dontThrow ? async function validate(data) {
119
- let result;
120
-
121
- try {
122
- result = await validator.call(this, data);
123
- } catch (error) {
124
- if (error.errors) {
125
- validate.errors = error.errors;
126
- result = false;
127
- } else {
128
- throw error;
129
- }
130
- }
131
-
132
- return result;
133
- } : validator : dontThrow ? validator : function (data) {
134
- const result = validator.call(this, data);
135
-
136
- if (!result) {
137
- throw new _ajv.default.ValidationError(validator.errors);
138
- }
139
-
140
- return result;
141
- };
142
- }
143
-
144
- getKeyword(keyword) {
145
- return this.keywords[keyword];
146
- }
147
-
148
- getFormat(format) {
149
- return this.formats[format];
150
- }
151
-
152
- addSchema(jsonSchema) {
153
- this.schemas.push(jsonSchema);
154
-
155
- for (const {
156
- ajv,
157
- options
158
- } of Object.values(this.ajvCache)) {
159
- ajv.addSchema(this.processSchema(jsonSchema, options));
160
- }
161
- }
162
-
163
- processSchema(jsonSchema, options = {}) {
164
- const {
165
- patch,
166
- async
167
- } = options;
168
- const schema = (0, _utils.clone)(jsonSchema, value => {
169
- if ((0, _utils.isObject)(value)) {
170
- if (patch) {
171
- delete value.required;
172
-
173
- if (value.format === 'required') {
174
- delete value.format;
175
- }
176
- }
177
-
178
- if ((0, _utils.isAsync)(value.validate)) {
179
- value.validateAsync = value.validate;
180
- delete value.validate;
181
- }
182
-
183
- if (!async) {
184
- for (const key in value) {
185
- const keyword = this.getKeyword(key);
186
-
187
- if (keyword != null && keyword.async) {
188
- delete value[key];
189
- }
190
- }
191
- }
192
- }
193
- });
194
-
195
- if (async) {
196
- schema.$async = true;
197
- }
198
-
199
- return schema;
200
- }
201
-
202
- parseErrors(errors, options = {}) {
203
- const errorHash = {};
204
- const duplicates = {};
205
-
206
- for (const error of errors) {
207
- const dataPath = `${(options == null ? void 0 : options.dataPath) || ''}${error.dataPath}`;
208
- const key = dataPath.replace(/\['([^']*)'\]/g, '.$1').slice(1);
209
- const {
210
- message,
211
- keyword,
212
- params
213
- } = error;
214
- const definition = keyword === 'format' ? this.getFormat(params.format) : this.getKeyword(keyword);
215
- const identifier = `${key}_${keyword}`;
216
-
217
- if (!duplicates[identifier] && !/^\$/.test(keyword) && !(definition != null && definition.macro) && !(definition != null && definition.silent)) {
218
- const array = errorHash[key] || (errorHash[key] = []);
219
- array.push({
220
- message: (definition == null ? void 0 : definition.message) || message,
221
- keyword,
222
- params
223
- });
224
- duplicates[identifier] = true;
225
- }
226
- }
227
-
228
- for (const [dataPath, errors] of Object.entries(errorHash)) {
229
- if (errors.length === 2) {
230
- const [error1, error2] = errors;
231
-
232
- if (error1.keyword === 'type' && error1.params.type === 'null' && error2.keyword === 'oneOf') {
233
- delete errorHash[dataPath];
234
- }
235
- }
236
- }
237
-
238
- return errorHash;
239
- }
240
-
241
- prefixDataPaths(errors, dataPathPrefix) {
242
- return errors.map(error => ({ ...error,
243
- dataPath: error.dataPath ? `${dataPathPrefix}${error.dataPath}` : dataPathPrefix
244
- }));
245
- }
246
-
247
- beforeValidate({
248
- json,
249
- model,
250
- ctx,
251
- options
252
- }) {
253
- ctx.validator = this;
254
- ctx.app = this.app;
255
- ctx.options = options;
256
- ctx.jsonSchema = model.constructor.getJsonSchema();
257
- const {
258
- $beforeValidate
259
- } = model;
260
-
261
- if ($beforeValidate !== _objection.default.Model.prototype.$beforeValidate) {
262
- if ($beforeValidate.length > 0) {
263
- ctx.jsonSchema = (0, _utils.clone)(ctx.jsonSchema);
264
- }
265
-
266
- const ret = model.$beforeValidate(ctx.jsonSchema, json, options);
267
-
268
- if (ret !== undefined) {
269
- ctx.jsonSchema = ret;
270
- }
271
- }
272
- }
273
-
274
- validate({
275
- json,
276
- model,
277
- ctx,
278
- options
279
- }) {
280
- const {
281
- jsonSchema
282
- } = ctx;
283
-
284
- if (jsonSchema) {
285
- if (!options.mutable && !options.patch && hasDefaults(jsonSchema.properties)) {
286
- json = (0, _utils.clone)(json);
287
- }
288
-
289
- const validate = this.getAjv(options).getSchema(jsonSchema.$id);
290
- const res = validate.call(ctx, json);
291
-
292
- const handleErrors = errors => {
293
- if (errors) {
294
- throw model.constructor.createValidationError({
295
- type: 'ModelValidation',
296
- errors,
297
- options,
298
- json
299
- });
300
- }
301
- };
302
-
303
- if ((0, _utils.isPromise)(res)) {
304
- return res.catch(error => handleErrors(error.errors)).then(() => json);
305
- } else {
306
- handleErrors(validate.errors);
307
- return json;
308
- }
309
- }
310
- }
311
-
312
- }
313
-
314
- exports.Validator = Validator;
315
-
316
- function hasDefaults(obj) {
317
- if ((0, _utils.isArray)(obj)) {
318
- for (const val of obj) {
319
- if (val && hasDefaults(val)) {
320
- return true;
321
- }
322
- }
323
- } else if ((0, _utils.isObject)(obj)) {
324
- for (const [key, val] of Object.entries(obj)) {
325
- if (key === 'default' || val && hasDefaults(val)) {
326
- return true;
327
- }
328
- }
329
- }
330
-
331
- return false;
332
- }
333
-
334
- const defaultOptions = {
335
- strict: false,
336
- allErrors: true,
337
- ownProperties: true,
338
- passContext: true,
339
- useDefaults: true,
340
- validateSchema: true
341
- };
342
- const validatorOptions = {
343
- async: false,
344
- patch: false,
345
- $data: false,
346
- $comment: false,
347
- coerceTypes: false,
348
- multipleOfPrecision: false,
349
- ownProperties: true,
350
- removeAdditional: false,
351
- uniqueItems: true,
352
- useDefaults: true,
353
- verbose: false
354
- };
355
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvVmFsaWRhdG9yLmpzIl0sIm5hbWVzIjpbIlZhbGlkYXRvciIsIm9iamVjdGlvbiIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImtleXdvcmRzIiwiZm9ybWF0cyIsImRlZmF1bHRPcHRpb25zIiwic2NoZW1hIiwic2NoZW1hcyIsImFqdkNhY2hlIiwiT2JqZWN0IiwiY3JlYXRlIiwiY3JlYXRlQWp2IiwiYXN5bmMiLCJwYXRjaCIsIm9wdHMiLCJhanYiLCJBanYiLCJ1c2VEZWZhdWx0cyIsIm1vZGUiLCJhZGRTY2hlbWFzIiwiY2FsbGJhY2siLCJuYW1lIiwiZW50cmllcyIsInJlcGxhY2UiLCJrZXl3b3JkIiwiYWRkS2V5d29yZCIsImZvcm1hdCIsImFkZEZvcm1hdCIsImFkZFNjaGVtYSIsInByb2Nlc3NTY2hlbWEiLCJnZXRBanYiLCJyZWR1Y2UiLCJrZXkiLCJ2YWx1ZSIsInZhbGlkYXRvck9wdGlvbnMiLCJjYWNoZUtleSIsImNvbXBpbGUiLCJqc29uU2NoZW1hIiwidmFsaWRhdG9yIiwiZG9udFRocm93IiwidGhyb3ciLCJ2YWxpZGF0ZSIsImRhdGEiLCJyZXN1bHQiLCJjYWxsIiwiZXJyb3IiLCJlcnJvcnMiLCJWYWxpZGF0aW9uRXJyb3IiLCJnZXRLZXl3b3JkIiwiZ2V0Rm9ybWF0IiwicHVzaCIsInZhbHVlcyIsInJlcXVpcmVkIiwidmFsaWRhdGVBc3luYyIsIiRhc3luYyIsInBhcnNlRXJyb3JzIiwiZXJyb3JIYXNoIiwiZHVwbGljYXRlcyIsImRhdGFQYXRoIiwic2xpY2UiLCJtZXNzYWdlIiwicGFyYW1zIiwiZGVmaW5pdGlvbiIsImlkZW50aWZpZXIiLCJ0ZXN0IiwibWFjcm8iLCJzaWxlbnQiLCJhcnJheSIsImxlbmd0aCIsImVycm9yMSIsImVycm9yMiIsInR5cGUiLCJwcmVmaXhEYXRhUGF0aHMiLCJkYXRhUGF0aFByZWZpeCIsIm1hcCIsImJlZm9yZVZhbGlkYXRlIiwianNvbiIsIm1vZGVsIiwiY3R4IiwiYXBwIiwiZ2V0SnNvblNjaGVtYSIsIiRiZWZvcmVWYWxpZGF0ZSIsIk1vZGVsIiwicHJvdG90eXBlIiwicmV0IiwidW5kZWZpbmVkIiwibXV0YWJsZSIsImhhc0RlZmF1bHRzIiwicHJvcGVydGllcyIsImdldFNjaGVtYSIsIiRpZCIsInJlcyIsImhhbmRsZUVycm9ycyIsImNyZWF0ZVZhbGlkYXRpb25FcnJvciIsImNhdGNoIiwidGhlbiIsIm9iaiIsInZhbCIsInN0cmljdCIsImFsbEVycm9ycyIsIm93blByb3BlcnRpZXMiLCJwYXNzQ29udGV4dCIsInZhbGlkYXRlU2NoZW1hIiwiJGRhdGEiLCIkY29tbWVudCIsImNvZXJjZVR5cGVzIiwibXVsdGlwbGVPZlByZWNpc2lvbiIsInJlbW92ZUFkZGl0aW9uYWwiLCJ1bmlxdWVJdGVtcyIsInZlcmJvc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFVTyxNQUFNQSxTQUFOLFNBQXdCQyxtQkFBVUQsU0FBbEMsQ0FBNEM7QUFDakRFLEVBQUFBLFdBQVcsQ0FBQztBQUFFQyxJQUFBQSxPQUFGO0FBQVdDLElBQUFBLFFBQVg7QUFBcUJDLElBQUFBO0FBQXJCLE1BQWlDLEVBQWxDLEVBQXNDO0FBQy9DO0FBRUEsU0FBS0YsT0FBTCxHQUFlLEVBQ2IsR0FBR0csY0FEVTtBQUViLFNBQUdIO0FBRlUsS0FBZjtBQUtBLFNBQUtDLFFBQUwsR0FBZ0IsRUFDZCxHQUFHRyxNQUFNLENBQUNILFFBREk7QUFFZCxTQUFHQTtBQUZXLEtBQWhCO0FBS0EsU0FBS0MsT0FBTCxHQUFlLEVBQ2IsR0FBR0UsTUFBTSxDQUFDRixPQURHO0FBRWIsU0FBR0E7QUFGVSxLQUFmO0FBS0EsU0FBS0csT0FBTCxHQUFlLEVBQWY7QUFJQSxTQUFLQyxRQUFMLEdBQWdCQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFkLENBQWhCO0FBQ0Q7O0FBRURDLEVBQUFBLFNBQVMsQ0FBQ1QsT0FBRCxF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c0NvbnRlbnQiOlsiaW1wb3J0IG9iamVjdGlvbiBmcm9tICdvYmplY3Rpb24nXG5pbXBvcnQgQWp2IGZyb20gJ2FqdidcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGNsb25lLCBpc0FzeW5jLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZm9ybWF0SnNvbiB9IGZyb20gJ0AvdXRpbHMnXG5pbXBvcnQgKiBhcyBzY2hlbWEgZnJvbSAnQC9zY2hlbWEnXG5cbi8vIERpdG8gZG9lcyBub3QgcmVseSBvbiBvYmplY3Rpb24uQWp2VmFsaWRhdG9yIGJ1dCBpbnN0ZWFkIGltcGxlbWVudHMgaXRzIG93blxuLy8gdmFsaWRhdG9yIGluc3RhbmNlIHRoYXQgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgYXBwIGFuZCBoYW5kbGVzIHNjaGVtYVxuLy8gY29tcGlsYXRpb24gYW5kIGNhY2hpbmcgZGlmZmVyZW50bHk6XG4vLyBJdCByZWxpZXMgb24gQWp2J3MgYWRkU2NoZW1hKCkgLyBnZXRTY2hlbWEoKSBwYXR0ZXJuIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlXG4vLyBgc2NoZW1hSWQ6ICckaWQnYCBvcHRpb24sIGFuZCBlYWNoIHNjaGVtYSBpcyBhc3NpZ25lZCBhbiAkaWQgYmFzZWQgb24gdGhlXG4vLyBtb2RlbCBjbGFzcyBuYW1lLiBUaGF0IHdheSwgc2NoZW1hcyBjYW4gcmVmZXJlbmNlIGVhY2ggb3RoZXIsIGFuZCB0aGV5IGNhblxuLy8gZWFzaWx5IHZhbGlkYXRlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgb2JqZWN0aW9uLlZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHsgb3B0aW9ucywga2V5d29yZHMsIGZvcm1hdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkcyA9IHtcbiAgICAgIC4uLnNjaGVtYS5rZXl3b3JkcyxcbiAgICAgIC4uLmtleXdvcmRzXG4gICAgfVxuXG4gICAgdGhpcy5mb3JtYXRzID0ge1xuICAgICAgLi4uc2NoZW1hLmZvcm1hdHMsXG4gICAgICAuLi5mb3JtYXRzXG4gICAgfVxuXG4gICAgdGhpcy5zY2hlbWFzID0gW11cblxuICAgIC8vIERpY3Rpb25hcnkgdG8gaG9sZCBhbGwgY3JlYXRlZCBBanYgaW5zdGFuY2VzLCB1c2luZyB0aGUgc3RyaW5naWZpZWRcbiAgICAvLyBvcHRpb25zIHdpdGggd2hpY2ggdGhleSB3ZXJlIGNyZWF0ZWQgYXMgdGhlaXIga2V5cy5cbiAgICB0aGlzLmFqdkNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICB9XG5cbiAgY3JlYXRlQWp2KG9wdGlvbnMpIHtcbiAgICAvLyBTcGxpdCBvcHRpb25zIGludG8gbmF0aXZlIEFqdiBvcHRpb25zIGFuZCBvdXIgYWRkaXRpb25zIChhc3luYywgcGF0Y2gpOlxuICAgIGNvbnN0IHsgYXN5bmMsIHBhdGNoLCAuLi5vcHRzIH0gPSBvcHRpb25zXG4gICAgY29uc3QgYWp2ID0gbmV3IEFqdih7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAuLi5vcHRzLFxuICAgICAgLy8gUGF0Y2gtdmFsaWRhdG9ycyBkb24ndCB1c2UgZGVmYXVsdCB2YWx1ZXM6XG4gICAgICAuLi4ocGF0Y2ggJiYgeyB1c2VEZWZhdWx0czogZmFsc2UgfSlcbiAgICB9KVxuICAgIGFkZEZvcm1hdHMoYWp2LCB7IG1vZGU6ICdmdWxsJyB9KVxuXG4gICAgY29uc3QgYWRkU2NoZW1hcyA9IChzY2hlbWFzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSkge1xuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgJ18nIHRvIHNpbXBsaWZ5IHNwZWNpYWwga2V5d29yZHMgKGUuZy4gaW5zdGFuY2VvZilcbiAgICAgICAgICBjYWxsYmFjayhuYW1lLnJlcGxhY2UoL15fLywgJycpLCBzY2hlbWEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTY2hlbWFzKHRoaXMua2V5d29yZHMsIChrZXl3b3JkLCBzY2hlbWEpID0+IGFqdi5hZGRLZXl3b3JkKHtcbiAgICAgIGtleXdvcmQsXG4gICAgICAuLi5zY2hlbWFcbiAgICB9KSlcbiAgICBhZGRTY2hlbWFzKHRoaXMuZm9ybWF0cywgKGZvcm1hdCwgc2NoZW1hKSA9PiBhanYuYWRkRm9ybWF0KGZvcm1hdCwge1xuICAgICAgLi4uc2NoZW1hXG4gICAgfSkpXG5cbiAgICAvLyBBbHNvIGFkZCBhbGwgbW9kZWwgc2NoZW1hcyB0aGF0IHdlcmUgYWxyZWFkeSBjb21waWxlZCBzbyBmYXIuXG4gICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdGhpcy5zY2hlbWFzKSB7XG4gICAgICBhanYuYWRkU2NoZW1hKHRoaXMucHJvY2Vzc1NjaGVtYShzY2hlbWEsIG9wdGlvbnMpKVxuICAgIH1cblxuICAgIHJldHVybiBhanZcbiAgfVxuXG4gIGdldEFqdihvcHRpb25zID0ge30pIHtcbiAgICAvLyBDYWNoZSBBanYgaW5zdGFuY2VzIGJ5IGtleXMgdGhhdCByZXByZXNlbnQgdGhlaXIgb3B0aW9ucy4gRm9yIGltcHJvdmVkXG4gICAgLy8gbWF0Y2hpbmcsIGNvbnZlcnQgb3B0aW9ucyB0byBhIHZlcnNpb24gd2l0aCBhbGwgZGVmYXVsdCB2YWx1ZXMgbWlzc2luZzpcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucykucmVkdWNlKChvcHRzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChrZXkgaW4gdmFsaWRhdG9yT3B0aW9ucyAmJiB2YWx1ZSAhPT0gdmFsaWRhdG9yT3B0aW9uc1trZXldKSB7XG4gICAgICAgIG9wdHNba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0c1xuICAgIH0sIHt9KVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gZm9ybWF0SnNvbihvcHRzLCBmYWxzZSlcbiAgICBjb25zdCB7IGFqdiB9ID0gdGhpcy5hanZDYWNoZVtjYWNoZUtleV0gfHwgKHRoaXMuYWp2Q2FjaGVbY2FjaGVLZXldID0ge1xuICAgICAgYWp2OiB0aGlzLmNyZWF0ZUFqdihvcHRzKSxcbiAgICAgIG9wdGlvbnNcbiAgICB9KVxuICAgIHJldHVybiBhanZcbiAgfVxuXG4gIGNvbXBpbGUoanNvblNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYWp2ID0gdGhpcy5nZXRBanYob3B0aW9ucylcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBhanYuY29tcGlsZSh0aGlzLnByb2Nlc3NTY2hlbWEoanNvblNjaGVtYSwgb3B0aW9ucykpXG4gICAgLy8gQXNzdW1lIGBvcHRpb25zLnRocm93ID0gdHJ1ZWAgYXMgdGhlIGRlZmF1bHQuXG4gICAgY29uc3QgZG9udFRocm93ID0gb3B0aW9ucy50aHJvdyA9PT0gZmFsc2VcbiAgICByZXR1cm4gb3B0aW9ucy5hc3luY1xuICAgICAgLy8gRm9yIGFzeW5jOlxuICAgICAgPyBkb250VGhyb3dcbiAgICAgICAgPyBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZShkYXRhKSB7XG4gICAgICAgICAgLy8gRW11bGF0ZSBgb3B0aW9ucy50aHJvdyA9PSBmYWxzZWAgYmVoYXZpb3IgZm9yIGFzeW5jIHZhbGlkYXRpb246XG4gICAgICAgICAgLy8gUmV0dXJuIGB0cnVlYCBvciBgZmFsc2VgLCBhbmQgc3RvcmUgZXJyb3JzIG9uIGB2YWxpZGF0ZS5lcnJvcnNgXG4gICAgICAgICAgLy8gaWYgdmFsaWRhdGlvbiBmYWlsZWQuXG4gICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBVc2UgYGNhbGwoKWAgdG8gcGFzcyBgdGhpc2AgYXMgY29udGV4dCB0byBBanYsIHNlZSBwYXNzQ29udGV4dDpcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRvci5jYWxsKHRoaXMsIGRhdGEpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGUuZXJyb3JzID0gZXJyb3IuZXJyb3JzXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH1cbiAgICAgICAgOiB2YWxpZGF0b3IgLy8gVGhlIGRlZmF1bHQgZm9yIGFzeW5jIGlzIHRvIHRocm93LlxuICAgICAgLy8gRm9yIHN5bmM6XG4gICAgICA6IGRvbnRUaHJvd1xuICAgICAgICA/IHZhbGlkYXRvciAvLyBUaGUgZGVmYXVsdCBmb3Igc3luYyBpcyB0byBub3QgdGhyb3cuXG4gICAgICAgIDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIC8vIEVtdWxhdGUgYG9wdGlvbnMudGhyb3cgPT0gdHJ1ZWAgYmVoYXZpb3IgZm9yIHN5bmMgdmFsaWRhdGlvbjpcbiAgICAgICAgICAvLyBSZXR1cm4gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIHRocm93IGBBanYuVmFsaWRhdGlvbkVycm9yYCBvdGhlcndpc2UuXG4gICAgICAgICAgLy8gVXNlIGBjYWxsKClgIHRvIHBhc3MgYHRoaXNgIGFzIGNvbnRleHQgdG8gQWp2LCBzZWUgcGFzc0NvbnRleHQ6XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yLmNhbGwodGhpcywgZGF0YSlcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFqdi5WYWxpZGF0aW9uRXJyb3IodmFsaWRhdG9yLmVycm9ycylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gIH1cblxuICBnZXRLZXl3b3JkKGtleXdvcmQpIHtcbiAgICByZXR1cm4gdGhpcy5rZXl3b3Jkc1trZXl3b3JkXVxuICB9XG5cbiAgZ2V0Rm9ybWF0KGZvcm1hdCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdHNbZm9ybWF0XVxuICB9XG5cbiAgYWRkU2NoZW1hKGpzb25TY2hlbWEpIHtcbiAgICB0aGlzLnNjaGVtYXMucHVzaChqc29uU2NoZW1hKVxuICAgIC8vIEFkZCBzY2hlbWEgdG8gYWxsIHByZXZpb3VzbHkgY3JlYXRlZCBBanYgaW5zdGFuY2VzLCBzbyB0aGV5IGNhbiByZWZlcmVuY2VcbiAgICAvLyB0aGUgbW9kZWxzLlxuICAgIGZvciAoY29uc3QgeyBhanYsIG9wdGlvbnMgfSBvZiBPYmplY3QudmFsdWVzKHRoaXMuYWp2Q2FjaGUpKSB7XG4gICAgICBhanYuYWRkU2NoZW1hKHRoaXMucHJvY2Vzc1NjaGVtYShqc29uU2NoZW1hLCBvcHRpb25zKSlcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hKGpzb25TY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgcGF0Y2gsIGFzeW5jIH0gPSBvcHRpb25zXG4gICAgY29uc3Qgc2NoZW1hID0gY2xvbmUoanNvblNjaGVtYSwgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgYWxsIHJlcXVpcmVkIGtleXdvcmRzIGFuZCBmb3JtYXRzIGZyb20gc2NoZW1hIGZvciBwYXRjaFxuICAgICAgICAgIC8vIHZhbGlkYXRpb24uXG4gICAgICAgICAgZGVsZXRlIHZhbHVlLnJlcXVpcmVkXG4gICAgICAgICAgaWYgKHZhbHVlLmZvcm1hdCA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmZvcm1hdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IGFzeW5jIGB2YWxpZGF0ZSgpYCBrZXl3b3JkcyB0byBgdmFsaWRhdGVBc3luYygpYDpcbiAgICAgICAgaWYgKGlzQXN5bmModmFsdWUudmFsaWRhdGUpKSB7XG4gICAgICAgICAgdmFsdWUudmFsaWRhdGVBc3luYyA9IHZhbHVlLnZhbGlkYXRlXG4gICAgICAgICAgZGVsZXRlIHZhbHVlLnZhbGlkYXRlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhc3luYykge1xuICAgICAgICAgIC8vIFJlbW92ZSBhbGwgYXN5bmMga2V5d29yZHMgZm9yIHN5bmNocm9ub3VzIHZhbGlkYXRpb24uXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXdvcmQgPSB0aGlzLmdldEtleXdvcmQoa2V5KVxuICAgICAgICAgICAgaWYgKGtleXdvcmQ/LmFzeW5jKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIHNjaGVtYS4kYXN5bmMgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzY2hlbWFcbiAgfVxuXG4gIHBhcnNlRXJyb3JzKGVycm9ycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gQ29udmVydCBmcm9tIEFqdiBlcnJvcnMgYXJyYXkgdG8gT2JqZWN0aW9uLXN0eWxlIGVycm9ySGFzaCxcbiAgICAvLyB3aXRoIGFkZGl0aW9uYWwgcGFyc2luZyBhbmQgcHJvY2Vzc2luZy5cbiAgICBjb25zdCBlcnJvckhhc2ggPSB7fVxuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB7fVxuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAvLyBBZGp1c3QgZGF0YVBhdGhzIHRvIHJlZmxlY3QgbmVzdGVkIHZhbGlkYXRpb24gaW4gT2JqZWN0aW9uLlxuICAgICAgY29uc3QgZGF0YVBhdGggPSBgJHtvcHRpb25zPy5kYXRhUGF0aCB8fCAnJ30ke2Vycm9yLmRhdGFQYXRofWBcbiAgICAgIC8vIFVua25vd24gcHJvcGVydGllcyBhcmUgcmVwb3J0ZWQgaW4gYFsncHJvcGVydHlOYW1lJ11gIG5vdGF0aW9uLFxuICAgICAgLy8gc28gcmVwbGFjZSB0aG9zZSB3aXRoIGRvdC1ub3RhdGlvbiwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vwb2JlcmV6a2luL2Fqdi9pc3N1ZXMvNjcxXG4gICAgICBjb25zdCBrZXkgPSBkYXRhUGF0aC5yZXBsYWNlKC9cXFsnKFteJ10qKSdcXF0vZywgJy4kMScpLnNsaWNlKDEpXG4gICAgICBjb25zdCB7IG1lc3NhZ2UsIGtleXdvcmQsIHBhcmFtcyB9ID0gZXJyb3JcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBrZXl3b3JkID09PSAnZm9ybWF0J1xuICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0KHBhcmFtcy5mb3JtYXQpXG4gICAgICAgIDogdGhpcy5nZXRLZXl3b3JkKGtleXdvcmQpXG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gYCR7a2V5fV8ke2tleXdvcmR9YFxuICAgICAgaWYgKFxuICAgICAgICAvLyBBanYgcHJvZHVjZXMgZHVwbGljYXRlIHZhbGlkYXRpb24gZXJyb3JzIHNvbWV0aW1lcywgZmlsdGVyIHRoZW0gb3V0LlxuICAgICAgICAhZHVwbGljYXRlc1tpZGVudGlmaWVyXSAmJlxuICAgICAgICAvLyBTa2lwIGtleXdvcmRzIHRoYXQgc3RhcnQgd2l0aCAkIHN1Y2ggYXMgJG1lcmdlIGFuZCAkcGF0Y2guXG4gICAgICAgICEvXlxcJC8udGVzdChrZXl3b3JkKSAmJlxuICAgICAgICAvLyBTa2lwIG1hY3JvIGtleXdvcmRzIHRoYXQgYXJlIG9ubHkgZGVsZWdhdGluZyB0byBvdGhlciBrZXl3b3Jkcy5cbiAgICAgICAgIWRlZmluaXRpb24/Lm1hY3JvICYmXG4gICAgICAgIC8vIEZpbHRlciBvdXQgYWxsIGN1c3RvbSBrZXl3b3JkcyBhbmQgZm9ybWF0cyB0aGF0IHdhbnQgdG8gYmUgc2lsZW50LlxuICAgICAgICAhZGVmaW5pdGlvbj8uc2lsZW50XG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBlcnJvckhhc2hba2V5XSB8fCAoZXJyb3JIYXNoW2tleV0gPSBbXSlcbiAgICAgICAgYXJyYXkucHVzaCh7XG4gICAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGZvcm1hdHMgYW5kIGtleXdvcmRzIHRvIG92ZXJyaWRlIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICAgIG1lc3NhZ2U6IGRlZmluaXRpb24/Lm1lc3NhZ2UgfHwgbWVzc2FnZSxcbiAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9KVxuICAgICAgICBkdXBsaWNhdGVzW2lkZW50aWZpZXJdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3cgZmlsdGVyIHRocm91Z2ggdGhlIHJlc3VsdGluZyBlcnJvcnMgYW5kIHBlcmZvcm0gc29tZSBwb3N0LXByb2Nlc3Npbmc6XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JIYXNoKSkge1xuICAgICAgLy8gV2hlbiB3ZSBnZXQgdGhlc2UgZXJyb3JzIChjYXVzZWQgYnkgYG51bGxhYmxlOiB0cnVlYCksIGl0IG1lYW5zIHRoYXQgd2VcbiAgICAgIC8vIGhhdmUgZGF0YSB0aGF0IGlzbid0IG51bGwgYW5kIGlzIGNhdXNpbmcgb3RoZXIgZXJyb3JzLCBhbmQgd2Ugc2hvdWxkbid0XG4gICAgICAvLyBkaXNwbGF5IHRoZSAnbnVsbCcgcGF0aDpcbiAgICAgIC8vIFtkYXRhUGF0aF06IFtcbiAgICAgIC8vICAge1xuICAgICAgLy8gICAgIG1lc3NhZ2U6ICdzaG91bGQgYmUgbnVsbCcsXG4gICAgICAvLyAgICAga2V5d29yZDogJ3R5cGUnLFxuICAgICAgLy8gICAgIHBhcmFtczogeyB0eXBlOiAnbnVsbCcgfVxuICAgICAgLy8gICB9LFxuICAgICAgLy8gICB7XG4gICAgICAvLyAgICAgbWVzc2FnZTogJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2YnLFxuICAgICAgLy8gICAgIGtleXdvcmQ6ICdvbmVPZidcbiAgICAgIC8vICAgfVxuICAgICAgLy8gXVxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgW2Vycm9yMSwgZXJyb3IyXSA9IGVycm9yc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IxLmtleXdvcmQgPT09ICd0eXBlJyAmJiBlcnJvcjEucGFyYW1zLnR5cGUgPT09ICdudWxsJyAmJlxuICAgICAgICAgIGVycm9yMi5rZXl3b3JkID09PSAnb25lT2YnXG4gICAgICAgICkge1xuICAgICAgICAgIGRlbGV0ZSBlcnJvckhhc2hbZGF0YVBhdGhdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ySGFzaFxuICB9XG5cbiAgcHJlZml4RGF0YVBhdGhzKGVycm9ycywgZGF0YVBhdGhQcmVmaXgpIHtcbiAgICByZXR1cm4gZXJyb3JzLm1hcChlcnJvciA9PiAoe1xuICAgICAgLi4uZXJyb3IsXG4gICAgICBkYXRhUGF0aDogZXJyb3IuZGF0YVBhdGhcbiAgICAgICAgPyBgJHtkYXRhUGF0aFByZWZpeH0ke2Vycm9yLmRhdGFQYXRofWBcbiAgICAgICAgOiBkYXRhUGF0aFByZWZpeFxuICAgIH0pKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGJlZm9yZVZhbGlkYXRlKHsganNvbiwgbW9kZWwsIGN0eCwgb3B0aW9ucyB9KSB7XG4gICAgLy8gQWRkIHZhbGlkYXRvciBpbnN0YW5jZSwgYXBwIGFuZCBvcHRpb25zIHRvIGNvbnRleHRcbiAgICBjdHgudmFsaWRhdG9yID0gdGhpc1xuICAgIGN0eC5hcHAgPSB0aGlzLmFwcFxuICAgIGN0eC5vcHRpb25zID0gb3B0aW9uc1xuICAgIGN0eC5qc29uU2NoZW1hID0gbW9kZWwuY29uc3RydWN0b3IuZ2V0SnNvblNjaGVtYSgpXG4gICAgY29uc3QgeyAkYmVmb3JlVmFsaWRhdGUgfSA9IG1vZGVsXG4gICAgaWYgKCRiZWZvcmVWYWxpZGF0ZSAhPT0gb2JqZWN0aW9uLk1vZGVsLnByb3RvdHlwZS4kYmVmb3JlVmFsaWRhdGUpIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGFkZGluZyBob29rcyBmb3IgJ2JlZm9yZTp2YWxpZGF0ZScgYW5kICdhZnRlcjp2YWxpZGF0ZScsXG4gICAgICAvLyBhbmQgaWYgc28sIGRlY2lkZSB3aGF0IHRvIGRvIGFib3V0IG1vZGlmeWluZyAvIHJldHVybmluZyBqc29uLXNjaGVtYS5cbiAgICAgIC8vIFByb2JhYmx5IHdlIHNob3VsZG4ndCBhbGxvdyBpdCB0aGVyZS5cblxuICAgICAgLy8gT25seSBjbG9uZSBqc29uU2NoZW1hIGlmIHRoZSBoYW5kbGVyIGFjdHVhbGx5IHJlY2VpdmVzIGl0LlxuICAgICAgaWYgKCRiZWZvcmVWYWxpZGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN0eC5qc29uU2NoZW1hID0gY2xvbmUoY3R4Lmpzb25TY2hlbWEpXG4gICAgICB9XG4gICAgICBjb25zdCByZXQgPSBtb2RlbC4kYmVmb3JlVmFsaWRhdGUoY3R4Lmpzb25TY2hlbWEsIGpzb24sIG9wdGlvbnMpXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4Lmpzb25TY2hlbWEgPSByZXRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgdmFsaWRhdGUoeyBqc29uLCBtb2RlbCwgY3R4LCBvcHRpb25zIH0pIHtcbiAgICBjb25zdCB7IGpzb25TY2hlbWEgfSA9IGN0eFxuICAgIGlmIChqc29uU2NoZW1hKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIHRoZSBpbnB1dCBqc29uIGlmIHdlIGFyZSBhYm91dCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMuXG4gICAgICBpZiAoXG4gICAgICAgICFvcHRpb25zLm11dGFibGUgJiZcbiAgICAgICAgIW9wdGlvbnMucGF0Y2ggJiZcbiAgICAgICAgaGFzRGVmYXVsdHMoanNvblNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgICAgKSB7XG4gICAgICAgIGpzb24gPSBjbG9uZShqc29uKVxuICAgICAgfVxuICAgICAgLy8gR2V0IHRoZSByaWdodCBBanYgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBwYXRjaCBhbmQgYXN5bmMgb3B0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGUgPSB0aGlzLmdldEFqdihvcHRpb25zKS5nZXRTY2hlbWEoanNvblNjaGVtYS4kaWQpXG4gICAgICAvLyBVc2UgYGNhbGwoKWAgdG8gcGFzcyBjdHggYXMgY29udGV4dCB0byBBanYsIHNlZSBwYXNzQ29udGV4dDpcbiAgICAgIGNvbnN0IHJlcyA9IHZhbGlkYXRlLmNhbGwoY3R4LCBqc29uKVxuICAgICAgY29uc3QgaGFuZGxlRXJyb3JzID0gZXJyb3JzID0+IHtcbiAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgIC8vIE5PVEU6IFRoZSBjb252ZXJzaW9uIGZyb20gQWp2IGVycm9ycyB0byBPYmplY3Rpb24gZXJyb3JzIGhhcHBlbiBpblxuICAgICAgICAgIC8vIE1vZGVsLmNyZWF0ZVZhbGlkYXRpb25FcnJvcigpLCB3aGljaCBjYWxscyBWYWxpZGF0b3IucGFyc2VFcnJvcigpXG4gICAgICAgICAgdGhyb3cgbW9kZWwuY29uc3RydWN0b3IuY3JlYXRlVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgICAgICAgIHR5cGU6ICdNb2RlbFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgZXJyb3JzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGpzb25cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBIYW5kbGUgYm90aCBhc3luYyBhbmQgc3luYyB2YWxpZGF0aW9uIGhlcmU6XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBoYW5kbGVFcnJvcnMoZXJyb3IuZXJyb3JzKSlcbiAgICAgICAgICAudGhlbigoKSA9PiBqc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRXJyb3JzKHZhbGlkYXRlLmVycm9ycylcbiAgICAgICAgcmV0dXJuIGpzb25cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzRGVmYXVsdHMob2JqKSB7XG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKGNvbnN0IHZhbCBvZiBvYmopIHtcbiAgICAgIGlmICh2YWwgJiYgaGFzRGVmYXVsdHModmFsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGlmIChrZXkgPT09ICdkZWZhdWx0JyB8fCB2YWwgJiYgaGFzRGVmYXVsdHModmFsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHN0cmljdDogZmFsc2UsXG4gIGFsbEVycm9yczogdHJ1ZSxcbiAgb3duUHJvcGVydGllczogdHJ1ZSxcbiAgcGFzc0NvbnRleHQ6IHRydWUsXG4gIHVzZURlZmF1bHRzOiB0cnVlLFxuICB2YWxpZGF0ZVNjaGVtYTogdHJ1ZVxufVxuXG4vLyBPcHRpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgcGFzc2VkIG9uIHRvIHRoZSBjcmVhdGVkIEFqdiBpbnN0YW5jZXMsIHdpdGhcbi8vIHRoZWlyIGRlZmF1bHQgc2V0dGluZ3MgKHNvbWUgZGVmYXVsdHMgYXJlIGZyb20gQWp2LCBzb21lIGZyb20gZGVmYXVsdE9wdGlvbnMpXG5jb25zdCB2YWxpZGF0b3JPcHRpb25zID0ge1xuICAvLyBPdXIgZXh0ZW5zaW9uczpcbiAgYXN5bmM6IGZhbHNlLFxuICBwYXRjaDogZmFsc2UsXG4gIC8vIEFqdiBPcHRpb25zOlxuICAkZGF0YTogZmFsc2UsXG4gICRjb21tZW50OiBmYWxzZSxcbiAgY29lcmNlVHlwZXM6IGZhbHNlLFxuICBtdWx0aXBsZU9mUHJlY2lzaW9uOiBmYWxzZSxcbiAgb3duUHJvcGVydGllczogdHJ1ZSxcbiAgcmVtb3ZlQWRkaXRpb25hbDogZmFsc2UsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICB1c2VEZWZhdWx0czogdHJ1ZSxcbiAgdmVyYm9zZTogZmFsc2Vcbn1cbiJdfQ==
package/lib/app/index.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/esnext.async-iterator.for-each.js");
4
-
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
-
7
- require("core-js/modules/esnext.iterator.for-each.js");
8
-
9
- exports.__esModule = true;
10
-
11
- var _Application = require("./Application");
12
-
13
- Object.keys(_Application).forEach(function (key) {
14
- if (key === "default" || key === "__esModule") return;
15
- if (key in exports && exports[key] === _Application[key]) return;
16
- exports[key] = _Application[key];
17
- });
18
-
19
- var _Validator = require("./Validator");
20
-
21
- Object.keys(_Validator).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- if (key in exports && exports[key] === _Validator[key]) return;
24
- exports[key] = _Validator[key];
25
- });
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vQXBwbGljYXRpb24nXG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRvcidcbiJdfQ==
@@ -1,175 +0,0 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.default = startConsole;
5
-
6
- require("core-js/modules/esnext.async-iterator.map.js");
7
-
8
- require("core-js/modules/esnext.iterator.map.js");
9
-
10
- require("core-js/modules/esnext.async-iterator.filter.js");
11
-
12
- require("core-js/modules/esnext.iterator.constructor.js");
13
-
14
- require("core-js/modules/esnext.iterator.filter.js");
15
-
16
- var _repl = _interopRequireDefault(require("repl"));
17
-
18
- var _path = _interopRequireDefault(require("path"));
19
-
20
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
21
-
22
- var _picocolors = _interopRequireDefault(require("picocolors"));
23
-
24
- var _objection = _interopRequireDefault(require("objection"));
25
-
26
- var _utils = require("@ditojs/utils");
27
-
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
-
30
- let started = false;
31
- let server = null;
32
-
33
- async function startConsole(app, config) {
34
- config = {
35
- quiet: false,
36
- prompt: 'dito > ',
37
- useColors: true,
38
- ignoreUndefined: true,
39
- ...config
40
- };
41
-
42
- if (started) {
43
- return server;
44
- }
45
-
46
- started = true;
47
- server = _repl.default.start({ ...config,
48
- prompt: ''
49
- });
50
- server.pause();
51
- Object.assign(server.context, {
52
- app,
53
- objection: _objection.default,
54
- ...app.models
55
- });
56
- server.eval = wrapEval(server);
57
- server.defineCommand('usage', {
58
- help: 'Detailed Dito Console usage information',
59
-
60
- action() {
61
- displayUsage(app, config, true);
62
- this.displayPrompt();
63
- }
64
-
65
- });
66
- server.defineCommand('models', {
67
- help: 'Display available Dito models',
68
-
69
- action() {
70
- console.info(Object.keys(app.models).join(', '));
71
- this.displayPrompt();
72
- }
73
-
74
- });
75
-
76
- const historyFile = _path.default.join(process.cwd(), '.console_history');
77
-
78
- try {
79
- await _fsExtra.default.stat(historyFile);
80
- const lines = await _fsExtra.default.readFile(historyFile);
81
- lines.toString().split('\n').reverse().slice(0, config.historySize).filter(line => line.trim()).map(line => server.history.push(line));
82
- } catch (e) {
83
- console.info((0, _utils.deindent)`
84
- Unable to REPL history file at ${historyFile}.
85
- A history file will be created on shutdown
86
- `);
87
- }
88
-
89
- await app.start();
90
-
91
- if (!config.quiet) {
92
- displayUsage(app, config);
93
- }
94
-
95
- server.setPrompt(config.prompt);
96
- server.resume();
97
- server.write('', {
98
- name: 'return'
99
- });
100
- return new Promise(resolve => {
101
- server.once('exit', async () => {
102
- try {
103
- await app.stop();
104
- } catch (err) {
105
- logError(err);
106
- }
107
-
108
- try {
109
- const lines = (server.history || []).reverse().filter(line => line.trim()).join('\n');
110
- await _fsExtra.default.writeFile(historyFile, lines);
111
- } catch (err) {
112
- logError(err);
113
- }
114
-
115
- resolve(true);
116
- });
117
- });
118
- }
119
-
120
- function displayUsage(app, config, details) {
121
- const modelHandleNames = Object.keys(app.models);
122
- console.info((0, _utils.deindent)`
123
-
124
- ------------------------------------------------------------
125
- Dito Console
126
-
127
- Available references:
128
- - Dito app: ${_picocolors.default.cyan('app')}
129
- ${modelHandleNames.length > 0 ? ` - Dito models: ${modelHandleNames.map(m => _picocolors.default.cyan(m)).join(', ')}` : ''}
130
- `);
131
-
132
- if (details) {
133
- console.info((0, _utils.deindent)`
134
- Examples:
135
-
136
- ${config.prompt} user = User.where({ lastName: 'Doe' }).first()
137
- ${config.prompt} user.$patch({ firstName: 'Joe' })
138
- ${config.prompt} user.$comments.insert({ ... })
139
- `);
140
- }
141
-
142
- console.info('------------------------------------------------------------');
143
- }
144
-
145
- function wrapEval({
146
- eval: defaultEval
147
- }) {
148
- return async function (code, context, file, cb) {
149
- return defaultEval.call(this, code, context, file, async (err, result) => {
150
- if (err || !(result && (0, _utils.isFunction)(result.then))) {
151
- return cb(err, result);
152
- }
153
-
154
- try {
155
- const resolved = await result;
156
-
157
- for (const key in context) {
158
- if (context[key] === result) {
159
- context[key] = resolved;
160
- }
161
- }
162
-
163
- cb(null, resolved);
164
- } catch (error) {
165
- logError(error);
166
- cb();
167
- }
168
- });
169
- };
170
- }
171
-
172
- function logError(error) {
173
- console.info(`\x1b[31m${error}\x1b[0m`);
174
- }
175
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvY29uc29sZS5qcyJdLCJuYW1lcyI6WyJzdGFydGVkIiwic2VydmVyIiwic3RhcnRDb25zb2xlIiwiYXBwIiwiY29uZmlnIiwicXVpZXQiLCJwcm9tcHQiLCJ1c2VDb2xvcnMiLCJpZ25vcmVVbmRlZmluZWQiLCJyZXBsIiwic3RhcnQiLCJwYXVzZSIsIk9iamVjdCIsImFzc2lnbiIsImNvbnRleHQiLCJvYmplY3Rpb24iLCJtb2RlbHMiLCJldmFsIiwid3JhcEV2YWwiLCJkZWZpbmVDb21tYW5kIiwiaGVscCIsImFjdGlvbiIsImRpc3BsYXlVc2FnZSIsImRpc3BsYXlQcm9tcHQiLCJjb25zb2xlIiwiaW5mbyIsImtleXMiLCJqb2luIiwiaGlzdG9yeUZpbGUiLCJwYXRoIiwicHJvY2VzcyIsImN3ZCIsImZzIiwic3RhdCIsImxpbmVzIiwicmVhZEZpbGUiLCJ0b1N0cmluZyIsInNwbGl0IiwicmV2ZXJzZSIsInNsaWNlIiwiaGlzdG9yeVNpemUiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsIm1hcCIsImhpc3RvcnkiLCJwdXNoIiwiZSIsInNldFByb21wdCIsInJlc3VtZSIsIndyaXRlIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwib25jZSIsInN0b3AiLCJlcnIiLCJsb2dFcnJvciIsIndyaXRlRmlsZSIsImRldGFpbHMiLCJtb2RlbEhhbmRsZU5hbWVzIiwicGljbyIsImN5YW4iLCJsZW5ndGgiLCJtIiwiZGVmYXVsdEV2YWwiLCJjb2RlIiwiZmlsZSIsImNiIiwiY2FsbCIsInJlc3VsdCIsInRoZW4iLCJyZXNvbHZlZCIsImtleSIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLElBQUlBLE9BQU8sR0FBRyxLQUFkO0FBQ0EsSUFBSUMsTUFBTSxHQUFHLElBQWI7O0FBRWUsZUFBZUMsWUFBZixDQUE0QkMsR0FBNUIsRUFBaUND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LEVBQU9JLFFBQVAsQ0FBRjtBQUNELE9BVEQsQ0FTRSxPQUFPRSxLQUFQLEVBQWM7QUFDZGpCLFFBQUFBLFFBQVEsQ0FBQ2lCLEtBQUQsQ0FBUjtBQUNBTixRQUFBQSxFQUFFO0FBQ0g7QUFDRixLQWpCTSxDQUFQO0FBa0JELEdBbkJEO0FBb0JEOztBQUVELFNBQVNYLFFBQVQsQ0FBa0JpQixLQUFsQixFQUF5QjtBQUN2QmxELEVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFjLFdBQVVpRCxLQUFNLFNBQTlCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVwbCBmcm9tICdyZXBsJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgb2JqZWN0aW9uIGZyb20gJ29iamVjdGlvbidcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxubGV0IHN0YXJ0ZWQgPSBmYWxzZVxubGV0IHNlcnZlciA9IG51bGxcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gc3RhcnRDb25zb2xlKGFwcCwgY29uZmlnKSB7XG4gIGNvbmZpZyA9IHtcbiAgICBxdWlldDogZmFsc2UsXG4gICAgcHJvbXB0OiAnZGl0byA+ICcsXG4gICAgdXNlQ29sb3JzOiB0cnVlLFxuICAgIGlnbm9yZVVuZGVmaW5lZDogdHJ1ZSxcbiAgICAuLi5jb25maWdcbiAgfVxuXG4gIGlmIChzdGFydGVkKSB7XG4gICAgcmV0dXJuIHNlcnZlclxuICB9XG4gIHN0YXJ0ZWQgPSB0cnVlXG5cbiAgc2VydmVyID0gcmVwbC5zdGFydCh7IC4uLmNvbmZpZywgcHJvbXB0OiAnJyB9KVxuICBzZXJ2ZXIucGF1c2UoKVxuICBPYmplY3QuYXNzaWduKHNlcnZlci5jb250ZXh0LCB7XG4gICAgYXBwLFxuICAgIG9iamVjdGlvbixcbiAgICAuLi5hcHAubW9kZWxzXG4gIH0pXG4gIHNlcnZlci5ldmFsID0gd3JhcEV2YWwoc2VydmVyKVxuXG4gIHNlcnZlci5kZWZpbmVDb21tYW5kKCd1c2FnZScsIHtcbiAgICBoZWxwOiAnRGV0YWlsZWQgRGl0byBDb25zb2xlIHVzYWdlIGluZm9ybWF0aW9uJyxcbiAgICBhY3Rpb24oKSB7XG4gICAgICBkaXNwbGF5VXNhZ2UoYXBwLCBjb25maWcsIHRydWUpXG4gICAgICB0aGlzLmRpc3BsYXlQcm9tcHQoKVxuICAgIH1cbiAgfSlcblxuICBzZXJ2ZXIuZGVmaW5lQ29tbWFuZCgnbW9kZWxzJywge1xuICAgIGhlbHA6ICdEaXNwbGF5IGF2YWlsYWJsZSBEaXRvIG1vZGVscycsXG4gICAgYWN0aW9uKCkge1xuICAgICAgY29uc29sZS5pbmZvKE9iamVjdC5rZXlzKGFwcC5tb2RlbHMpLmpvaW4oJywgJykpXG4gICAgICB0aGlzLmRpc3BsYXlQcm9tcHQoKVxuICAgIH1cbiAgfSlcblxuICAvLyBTZXQgdXAgaGlzdG9yeSBmaWxlXG4gIGNvbnN0IGhpc3RvcnlGaWxlID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuY29uc29sZV9oaXN0b3J5JylcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5zdGF0KGhpc3RvcnlGaWxlKVxuICAgIGNvbnN0IGxpbmVzID0gYXdhaXQgZnMucmVhZEZpbGUoaGlzdG9yeUZpbGUpXG4gICAgbGluZXMudG9TdHJpbmcoKS5zcGxpdCgnXFxuJylcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5zbGljZSgwLCBjb25maWcuaGlzdG9yeVNpemUpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAubWFwKGxpbmUgPT4gc2VydmVyLmhpc3RvcnkucHVzaChsaW5lKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuaW5mbyhkZWluZGVudGBcbiAgICAgIFVuYWJsZSB0byBSRVBMIGhpc3RvcnkgZmlsZSBhdCAke2hpc3RvcnlGaWxlfS5cbiAgICAgIEEgaGlzdG9yeSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBvbiBzaHV0ZG93blxuICAgIGApXG4gIH1cblxuICBhd2FpdCBhcHAuc3RhcnQoKVxuICBpZiAoIWNvbmZpZy5xdWlldCkge1xuICAgIGRpc3BsYXlVc2FnZShhcHAsIGNvbmZpZylcbiAgfVxuICBzZXJ2ZXIuc2V0UHJvbXB0KGNvbmZpZy5wcm9tcHQpXG4gIHNlcnZlci5yZXN1bWUoKVxuICBzZXJ2ZXIud3JpdGUoJycsIHsgbmFtZTogJ3JldHVybicgfSlcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNlcnZlci5vbmNlKCdleGl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwLnN0b3AoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ0Vycm9yKGVycilcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gKHNlcnZlci5oaXN0b3J5IHx8IFtdKVxuICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShoaXN0b3J5RmlsZSwgbGluZXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyKVxuICAgICAgfVxuICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlVc2FnZShhcHAsIGNvbmZpZywgZGV0YWlscykge1xuICBjb25zdCBtb2RlbEhhbmRsZU5hbWVzID0gT2JqZWN0LmtleXMoYXBwLm1vZGVscylcbiAgY29uc29sZS5pbmZvKGRlaW5kZW50YFxuXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgRGl0byBDb25zb2xlXG5cbiAgICBBdmFpbGFibGUgcmVmZXJlbmNlczpcbiAgICAgLSBEaXRvIGFwcDogJHtwaWNvLmN5YW4oJ2FwcCcpfVxuICAgICR7XG4gICAgICBtb2RlbEhhbmRsZU5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgIC0gRGl0byBtb2RlbHM6ICR7XG4gICAgICAgICAgbW9kZWxIYW5kbGVOYW1lcy5tYXAobSA9PiBwaWNvLmN5YW4obSkpLmpvaW4oJywgJylcbiAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgYClcbiAgaWYgKGRldGFpbHMpIHtcbiAgICBjb25zb2xlLmluZm8oZGVpbmRlbnRgXG4gICAgICBFeGFtcGxlczpcblxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyID0gVXNlci53aGVyZSh7IGxhc3ROYW1lOiAnRG9lJyB9KS5maXJzdCgpXG4gICAgICAke2NvbmZpZy5wcm9tcHR9IHVzZXIuJHBhdGNoKHsgZmlyc3ROYW1lOiAnSm9lJyB9KVxuICAgICAgJHtjb25maWcucHJvbXB0fSB1c2VyLiRjb21tZW50cy5pbnNlcnQoeyAuLi4gfSlcbiAgICBgKVxuICB9XG4gIGNvbnNvbGUuaW5mbygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbn1cblxuLy8gV3JhcHMgdGhlIGRlZmF1bHQgZXZhbCB3aXRoIGEgaGFuZGxlciB0aGF0IHJlc29sdmVzIHByb21pc2VzXG5mdW5jdGlvbiB3cmFwRXZhbCh7IGV2YWw6IGRlZmF1bHRFdmFsIH0pIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKGNvZGUsIGNvbnRleHQsIGZpbGUsIGNiKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRFdmFsLmNhbGwodGhpcywgY29kZSwgY29udGV4dCwgZmlsZSwgYXN5bmMgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZXJyIHx8ICEocmVzdWx0ICYmIGlzRnVuY3Rpb24ocmVzdWx0LnRoZW4pKSkge1xuICAgICAgICByZXR1cm4gY2IoZXJyLCByZXN1bHQpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc3VsdFxuICAgICAgICAvLyBSZXBsYWNlIGFueSBwcm9taXNlcyBpbiB0aGUgUkVQTCBjb250ZXh0IHdpdGggdGhlIHJlc29sdmVkIHByb21pc2UuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dFtrZXldID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnRleHRba2V5XSA9IHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNiKG51bGwsIHJlc29sdmVkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgICAgIGNiKCkgLy8gQXBwbGljYXRpb24gZXJyb3JzIGFyZSBub3QgUkVQTCBlcnJvcnNcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGVycm9yKSB7XG4gIGNvbnNvbGUuaW5mbyhgXFx4MWJbMzFtJHtlcnJvcn1cXHgxYlswbWApXG59XG4iXX0=