@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
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.validateAsync = exports.validate = void 0;
|
|
5
|
-
|
|
6
|
-
var _ajv = _interopRequireDefault(require("ajv"));
|
|
7
|
-
|
|
8
|
-
var _utils = require("@ditojs/utils");
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
const validate = {
|
|
13
|
-
metaSchema: {
|
|
14
|
-
instanceof: 'Function'
|
|
15
|
-
},
|
|
16
|
-
errors: 'full',
|
|
17
|
-
validate: function validate(func, data, parentSchema, dataCtx) {
|
|
18
|
-
const params = getParams(this, data, parentSchema, dataCtx);
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
var _func;
|
|
22
|
-
|
|
23
|
-
return (_func = func(params)) != null ? _func : true;
|
|
24
|
-
} catch (error) {
|
|
25
|
-
validate.errors = getErrors(error, params);
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
exports.validate = validate;
|
|
31
|
-
const validateAsync = { ...validate,
|
|
32
|
-
async: true,
|
|
33
|
-
|
|
34
|
-
async validate(func, data, parentSchema, dataCtx) {
|
|
35
|
-
const params = getParams(this, data, parentSchema, dataCtx);
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
var _await$func;
|
|
39
|
-
|
|
40
|
-
return (_await$func = await func(params)) != null ? _await$func : true;
|
|
41
|
-
} catch (error) {
|
|
42
|
-
throw new _ajv.default.ValidationError(getErrors(error, params));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
exports.validateAsync = validateAsync;
|
|
48
|
-
|
|
49
|
-
function getParams(ctx, data, parentSchema, dataCtx) {
|
|
50
|
-
const {
|
|
51
|
-
dataPath,
|
|
52
|
-
parentData,
|
|
53
|
-
parentDataProperty,
|
|
54
|
-
rootData
|
|
55
|
-
} = dataCtx;
|
|
56
|
-
return {
|
|
57
|
-
data,
|
|
58
|
-
parentData,
|
|
59
|
-
rootData,
|
|
60
|
-
dataPath,
|
|
61
|
-
[(0, _utils.isNumber)(parentDataProperty) ? 'parentIndex' : 'parentKey']: parentDataProperty,
|
|
62
|
-
ctx,
|
|
63
|
-
app: ctx.app,
|
|
64
|
-
validator: ctx.validator,
|
|
65
|
-
options: ctx.options
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function getErrors(error, {
|
|
70
|
-
validator,
|
|
71
|
-
dataPath
|
|
72
|
-
}) {
|
|
73
|
-
const errors = (0, _utils.isArray)(error.errors) ? error.errors : [{
|
|
74
|
-
keyword: 'validate',
|
|
75
|
-
message: error.message || error.toString(),
|
|
76
|
-
params: {}
|
|
77
|
-
}];
|
|
78
|
-
return validator.prefixDataPaths(errors, dataPath);
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEva2V5d29yZHMvX3ZhbGlkYXRlLmpzIl0sIm5hbWVzIjpbInZhbGlkYXRlIiwibWV0YVNjaGVtYSIsImluc3RhbmNlb2YiLCJlcnJvcnMiLCJmdW5jIiwiZGF0YSIsInBhcmVudFNjaGVtYSIsImRhdGFDdHgiLCJwYXJhbXMiLCJnZXRQYXJhbXMiLCJlcnJvciIsImdldEVycm9ycyIsInZhbGlkYXRlQXN5bmMiLCJhc3luYyIsIkFqdiIsIlZhbGlkYXRpb25FcnJvciIsImN0eCIsImRhdGFQYXRoIiwicGFyZW50RGF0YSIsInBhcmVudERhdGFQcm9wZXJ0eSIsInJvb3REYXRhIiwiYXBwIiwidmFsaWRhdG9yIiwib3B0aW9ucyIsImtleXdvcmQiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJwcmVmaXhEYXRhUGF0aHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFFTyxNQUFNQSxRQUFRLEdBQUc7QUFDdEJDLEVBQUFBLFVBQVUsRUFBRTtBQUNWQyxJQUFBQSxVQUFVLEVBQUU7QUFERixHQURVO0FBSXRCQyxFQUFBQSxNQUFNLEVBQUUsTUFKYztBQU10QkgsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JJLElBQWxCLEVBQXdCQyxJQUF4QixFQUE4QkMsWUFBOUIsRUFBNENDLE9BQTVDLEVBQXFEO0FBRTdELFVBQU1DLE1BQU0sR0FBR0MsU0FBUyxDQUFDLElBQUQsRUFBT0osSUFBUCxFQUFhQyxZQUFiLEVBQTJCQyxPQUEzQixDQUF4Qjs7QUFDQSxRQUFJO0FBQUE7O0FBQ0Ysc0JBQU9ILElBQUksQ0FBQ0ksTUFBRCxDQUFYLG9CQUF1QixJQUF2QjtBQUNELEtBRkQsQ0FFRSxPQUFPRSxLQUFQLEVBQWM7QUFHZFYsTUFBQUEsUUFBUSxDQUFDRyxNQUFULEdBQWtCUSxTQUFTLENBQUNELEtBQUQsRUFBUUYsTUFBUixDQUEzQjtBQUNBLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFqQnFCLENBQWpCOztBQXNCQSxNQUFNSSxhQUFhLEdBQUcsRUFDM0IsR0FBR1osUUFEd0I7QUFFM0JhLEVBQUFBLEtBQUssRUFBRSxJQUZvQjs7QUFJM0IsUUFBTWIsUUFBTixDQUFlSSxJQUFmLEVBQXFCQyxJQUFyQixFQUEyQkMsWUFBM0IsRUFBeUNDLE9BQXpDLEVBQWtEO0FBRWhELFVBQU1DLE1BQU0sR0FBR0MsU0FBUyxDQUFDLElBQUQsRUFBT0osSUFBUCxFQUFhQyxZQUFiLEVBQTJCQyxPQUEzQixDQUF4Qjs7QUFDQSxRQUFJO0FBQUE7O0FBQ0YsNEJBQVEsTUFBTUgsSUFBSSxDQUFDSSxNQUFELENBQWxCLDBCQUErQixJQUEvQjtBQUNELEtBRkQsQ0FFRSxPQUFPRSxLQUFQLEVBQWM7QUFFZCxZQUFNLElBQUlJLGFBQUlDLGVBQVIsQ0FBd0JKLFNBQVMsQ0FBQ0QsS0FBRCxFQUFRRixNQUFSLENBQWpDLENBQU47QUFDRDtBQUNGOztBQWIwQixDQUF0Qjs7O0FBZ0JQLFNBQVNDLFNBQVQsQ0FBbUJPLEdBQW5CLEVBQXdCWCxJQUF4QixFQUE4QkMsWUFBOUIsRUFBNENDLE9BQTVDLEVBQXFEO0FBQ25ELFFBQU07QUFBRVUsSUFBQUEsUUFBRjtBQUFZQyxJQUFBQSxVQUFaO0FBQXdCQyxJQUFBQSxrQkFBeEI7QUFBNENDLElBQUFBO0FBQTVDLE1BQXlEYixPQUEvRDtBQUNBLFNBQU87QUFDTEYsSUFBQUEsSUFESztBQUVMYSxJQUFBQSxVQUZLO0FBR0xFLElBQUFBLFFBSEs7QUFJTEgsSUFBQUEsUUFKSztBQU1MLEtBQUMscUJBQVNFLGtCQUFULElBQStCLGFBQS9CLEdBQStDLFdBQWhELEdBQ0VBLGtCQVBHO0FBUUxILElBQUFBLEdBUks7QUFTTEssSUFBQUEsR0FBRyxFQUFFTCxHQUFHLENBQUNLLEdBVEo7QUFVTEMsSUFBQUEsU0FBUyxFQUFFTixHQUFHLENBQUNNLFNBVlY7QUFXTEMsSUFBQUEsT0FBTyxFQUFFUCxHQUFHLENBQUNPO0FBWFIsR0FBUDtBQWFEOztBQUVELFNBQVNaLFNBQVQsQ0FBbUJELEtBQW5CLEVBQTBCO0FBQUVZLEVBQUFBLFNBQUY7QUFBYUwsRUFBQUE7QUFBYixDQUExQixFQUFtRDtBQUNqRCxRQUFNZCxNQUFNLEdBQUcsb0JBQVFPLEtBQUssQ0FBQ1AsTUFBZCxJQUVYTyxLQUFLLENBQUNQLE1BRkssR0FJWCxDQUFDO0FBQ0RxQixJQUFBQSxPQUFPLEVBQUUsVUFEUjtBQUVEQyxJQUFBQSxPQUFPLEVBQUVmLEtBQUssQ0FBQ2UsT0FBTixJQUFpQmYsS0FBSyxDQUFDZ0IsUUFBTixFQUZ6QjtBQUdEbEIsSUFBQUEsTUFBTSxFQUFFO0FBSFAsR0FBRCxDQUpKO0FBVUEsU0FBT2MsU0FBUyxDQUFDSyxlQUFWLENBQTBCeEIsTUFBMUIsRUFBa0NjLFFBQWxDLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBanYgZnJvbSAnYWp2J1xuaW1wb3J0IHsgaXNOdW1iZXIsIGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSB7XG4gIG1ldGFTY2hlbWE6IHtcbiAgICBpbnN0YW5jZW9mOiAnRnVuY3Rpb24nXG4gIH0sXG4gIGVycm9yczogJ2Z1bGwnLFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShmdW5jLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGRhdGFDdHgpIHtcbiAgICAvLyBUaGUgdmFsaWRhdG9yJ3MgYGN0eGAgYXMgcGFzc2VkIHRvIEFqdiB3aXRoIHBhc3NDb250ZXh0IGFzIGB0aGlzYDpcbiAgICBjb25zdCBwYXJhbXMgPSBnZXRQYXJhbXModGhpcywgZGF0YSwgcGFyZW50U2NoZW1hLCBkYXRhQ3R4KVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuYyhwYXJhbXMpID8/IHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSW4gc3luYyB2YWxpZGF0aW9uLCB3ZSBoYXZlIHRvIHBhc3MgdGhlIGVycm9ycyBiYWNrIHRvIEFqdiB0aHJvdWdoXG4gICAgICAvLyBgdmFsaWRhdGUuZXJyb3JzYC5cbiAgICAgIHZhbGlkYXRlLmVycm9ycyA9IGdldEVycm9ycyhlcnJvciwgcGFyYW1zKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgaXMgdGhlIGFzeW5jIHZlcnNpb24gb2YgdGhlIGFib3ZlLCB0byBoYW5kbGUgYXN5bmMgYHZhbGlkYXRlKClgXG4vLyBmdW5jdGlvbnMgaW4gc2NoZW1hcy4gU2VlIGBWYWxpZGF0b3IucHJvY2Vzc1NjaGVtYSgpYCBmb3IgZGV0YWlscy5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFzeW5jID0ge1xuICAuLi52YWxpZGF0ZSxcbiAgYXN5bmM6IHRydWUsXG5cbiAgYXN5bmMgdmFsaWRhdGUoZnVuYywgZGF0YSwgcGFyZW50U2NoZW1hLCBkYXRhQ3R4KSB7XG4gICAgLy8gVGhlIHZhbGlkYXRvcidzIGBjdHhgIGFzIHBhc3NlZCB0byBBanYgd2l0aCBwYXNzQ29udGV4dCBhcyBgdGhpc2A6XG4gICAgY29uc3QgcGFyYW1zID0gZ2V0UGFyYW1zKHRoaXMsIGRhdGEsIHBhcmVudFNjaGVtYSwgZGF0YUN0eClcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCBmdW5jKHBhcmFtcykpID8/IHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQXN5bmMgdmFsaWRhdGUgbWV0aG9kcyBuZWVkIHRvIHRocm93IHRoZWlyIGVycm9ycy5cbiAgICAgIHRocm93IG5ldyBBanYuVmFsaWRhdGlvbkVycm9yKGdldEVycm9ycyhlcnJvciwgcGFyYW1zKSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1zKGN0eCwgZGF0YSwgcGFyZW50U2NoZW1hLCBkYXRhQ3R4KSB7XG4gIGNvbnN0IHsgZGF0YVBhdGgsIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSwgcm9vdERhdGEgfSA9IGRhdGFDdHhcbiAgcmV0dXJuIHtcbiAgICBkYXRhLFxuICAgIHBhcmVudERhdGEsXG4gICAgcm9vdERhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgLy8gTk9URTogV2UgcmVuYW1lIHBhcmVudERhdGFQcm9wZXJ0eSB0byBwYXJlbnRLZXkgLyBwYXJlbnRJbmRleDpcbiAgICBbaXNOdW1iZXIocGFyZW50RGF0YVByb3BlcnR5KSA/ICdwYXJlbnRJbmRleCcgOiAncGFyZW50S2V5J106XG4gICAgICBwYXJlbnREYXRhUHJvcGVydHksXG4gICAgY3R4LFxuICAgIGFwcDogY3R4LmFwcCxcbiAgICB2YWxpZGF0b3I6IGN0eC52YWxpZGF0b3IsXG4gICAgb3B0aW9uczogY3R4Lm9wdGlvbnNcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFcnJvcnMoZXJyb3IsIHsgdmFsaWRhdG9yLCBkYXRhUGF0aCB9KSB7XG4gIGNvbnN0IGVycm9ycyA9IGlzQXJyYXkoZXJyb3IuZXJyb3JzKVxuICAgIC8vIEFqdiBlcnJvcnMgYXJyYXk6XG4gICAgPyBlcnJvci5lcnJvcnNcbiAgICAvLyBDb252ZXJ0IHN0cmluZyBlcnJvciBtZXNzYWdlIHRvIGVycm9ycyBhcnJheTpcbiAgICA6IFt7XG4gICAgICBrZXl3b3JkOiAndmFsaWRhdGUnLFxuICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB8fCBlcnJvci50b1N0cmluZygpLFxuICAgICAgcGFyYW1zOiB7fVxuICAgIH1dXG4gIC8vIFJldHVybiBlcnJvcnMgcHJlZml4ZWQgd2l0aCB0aGUgY3VycmVudCBkYXRhUGF0aDpcbiAgcmV0dXJuIHZhbGlkYXRvci5wcmVmaXhEYXRhUGF0aHMoZXJyb3JzLCBkYXRhUGF0aClcbn1cbiJdfQ==
|
|
@@ -1,106 +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 _specificType = require("./_specificType");
|
|
12
|
-
|
|
13
|
-
Object.keys(_specificType).forEach(function (key) {
|
|
14
|
-
if (key === "default" || key === "__esModule") return;
|
|
15
|
-
if (key in exports && exports[key] === _specificType[key]) return;
|
|
16
|
-
exports[key] = _specificType[key];
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
var _primary = require("./_primary");
|
|
20
|
-
|
|
21
|
-
Object.keys(_primary).forEach(function (key) {
|
|
22
|
-
if (key === "default" || key === "__esModule") return;
|
|
23
|
-
if (key in exports && exports[key] === _primary[key]) return;
|
|
24
|
-
exports[key] = _primary[key];
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
var _foreign = require("./_foreign");
|
|
28
|
-
|
|
29
|
-
Object.keys(_foreign).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _foreign[key]) return;
|
|
32
|
-
exports[key] = _foreign[key];
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
var _unique = require("./_unique");
|
|
36
|
-
|
|
37
|
-
Object.keys(_unique).forEach(function (key) {
|
|
38
|
-
if (key === "default" || key === "__esModule") return;
|
|
39
|
-
if (key in exports && exports[key] === _unique[key]) return;
|
|
40
|
-
exports[key] = _unique[key];
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
var _index = require("./_index");
|
|
44
|
-
|
|
45
|
-
Object.keys(_index).forEach(function (key) {
|
|
46
|
-
if (key === "default" || key === "__esModule") return;
|
|
47
|
-
if (key in exports && exports[key] === _index[key]) return;
|
|
48
|
-
exports[key] = _index[key];
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
var _computed = require("./_computed");
|
|
52
|
-
|
|
53
|
-
Object.keys(_computed).forEach(function (key) {
|
|
54
|
-
if (key === "default" || key === "__esModule") return;
|
|
55
|
-
if (key in exports && exports[key] === _computed[key]) return;
|
|
56
|
-
exports[key] = _computed[key];
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
var _hidden = require("./_hidden");
|
|
60
|
-
|
|
61
|
-
Object.keys(_hidden).forEach(function (key) {
|
|
62
|
-
if (key === "default" || key === "__esModule") return;
|
|
63
|
-
if (key in exports && exports[key] === _hidden[key]) return;
|
|
64
|
-
exports[key] = _hidden[key];
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
var _unsigned = require("./_unsigned");
|
|
68
|
-
|
|
69
|
-
Object.keys(_unsigned).forEach(function (key) {
|
|
70
|
-
if (key === "default" || key === "__esModule") return;
|
|
71
|
-
if (key in exports && exports[key] === _unsigned[key]) return;
|
|
72
|
-
exports[key] = _unsigned[key];
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
var _instanceof = require("./_instanceof");
|
|
76
|
-
|
|
77
|
-
Object.keys(_instanceof).forEach(function (key) {
|
|
78
|
-
if (key === "default" || key === "__esModule") return;
|
|
79
|
-
if (key in exports && exports[key] === _instanceof[key]) return;
|
|
80
|
-
exports[key] = _instanceof[key];
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
var _validate = require("./_validate");
|
|
84
|
-
|
|
85
|
-
Object.keys(_validate).forEach(function (key) {
|
|
86
|
-
if (key === "default" || key === "__esModule") return;
|
|
87
|
-
if (key in exports && exports[key] === _validate[key]) return;
|
|
88
|
-
exports[key] = _validate[key];
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
var _relate = require("./_relate");
|
|
92
|
-
|
|
93
|
-
Object.keys(_relate).forEach(function (key) {
|
|
94
|
-
if (key === "default" || key === "__esModule") return;
|
|
95
|
-
if (key in exports && exports[key] === _relate[key]) return;
|
|
96
|
-
exports[key] = _relate[key];
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
var _range = require("./_range");
|
|
100
|
-
|
|
101
|
-
Object.keys(_range).forEach(function (key) {
|
|
102
|
-
if (key === "default" || key === "__esModule") return;
|
|
103
|
-
if (key in exports && exports[key] === _range[key]) return;
|
|
104
|
-
exports[key] = _range[key];
|
|
105
|
-
});
|
|
106
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEva2V5d29yZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9fc3BlY2lmaWNUeXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9fcHJpbWFyeSdcbmV4cG9ydCAqIGZyb20gJy4vX2ZvcmVpZ24nXG5leHBvcnQgKiBmcm9tICcuL191bmlxdWUnXG5leHBvcnQgKiBmcm9tICcuL19pbmRleCdcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXB1dGVkJ1xuZXhwb3J0ICogZnJvbSAnLi9faGlkZGVuJ1xuZXhwb3J0ICogZnJvbSAnLi9fdW5zaWduZWQnXG5leHBvcnQgKiBmcm9tICcuL19pbnN0YW5jZW9mJ1xuZXhwb3J0ICogZnJvbSAnLi9fdmFsaWRhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yZWxhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yYW5nZSdcbiJdfQ==
|
package/lib/schema/properties.js
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.convertSchema = convertSchema;
|
|
5
|
-
exports.expandProperties = expandProperties;
|
|
6
|
-
exports.expandSchemaShorthand = expandSchemaShorthand;
|
|
7
|
-
|
|
8
|
-
require("core-js/modules/esnext.async-iterator.map.js");
|
|
9
|
-
|
|
10
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
11
|
-
|
|
12
|
-
require("core-js/modules/esnext.async-iterator.find.js");
|
|
13
|
-
|
|
14
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
15
|
-
|
|
16
|
-
require("core-js/modules/esnext.iterator.find.js");
|
|
17
|
-
|
|
18
|
-
var _utils = require("@ditojs/utils");
|
|
19
|
-
|
|
20
|
-
function convertSchema(schema, options = {}) {
|
|
21
|
-
if ((0, _utils.isString)(schema)) {
|
|
22
|
-
schema = {
|
|
23
|
-
type: schema
|
|
24
|
-
};
|
|
25
|
-
} else if ((0, _utils.isArray)(schema)) {
|
|
26
|
-
schema = schema.map(entry => convertSchema(entry, options));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if ((0, _utils.isObject)(schema)) {
|
|
30
|
-
const {
|
|
31
|
-
type
|
|
32
|
-
} = schema;
|
|
33
|
-
const {
|
|
34
|
-
required,
|
|
35
|
-
...rest
|
|
36
|
-
} = schema;
|
|
37
|
-
schema = rest;
|
|
38
|
-
|
|
39
|
-
if ((0, _utils.isString)(type)) {
|
|
40
|
-
const jsonType = jsonTypes[type];
|
|
41
|
-
|
|
42
|
-
if (jsonType) {
|
|
43
|
-
schema.type = jsonType;
|
|
44
|
-
|
|
45
|
-
if (jsonType === 'object') {
|
|
46
|
-
let setAdditionalProperties = false;
|
|
47
|
-
|
|
48
|
-
if (schema.properties) {
|
|
49
|
-
const {
|
|
50
|
-
properties,
|
|
51
|
-
required
|
|
52
|
-
} = expandProperties(schema.properties, options);
|
|
53
|
-
schema.properties = properties;
|
|
54
|
-
|
|
55
|
-
if (required.length > 0) {
|
|
56
|
-
schema.required = required;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
setAdditionalProperties = true;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (schema.patternProperties) {
|
|
63
|
-
const {
|
|
64
|
-
properties
|
|
65
|
-
} = expandProperties(schema.patternProperties, options);
|
|
66
|
-
schema.patternProperties = properties;
|
|
67
|
-
setAdditionalProperties = true;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (setAdditionalProperties) {
|
|
71
|
-
if (!('additionalProperties' in schema)) {
|
|
72
|
-
schema.additionalProperties = false;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
} else if (jsonType === 'array') {
|
|
76
|
-
const {
|
|
77
|
-
items
|
|
78
|
-
} = schema;
|
|
79
|
-
|
|
80
|
-
if (items) {
|
|
81
|
-
schema.items = convertSchema(items, options);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
} else if (['date', 'datetime', 'timestamp'].includes(type)) {
|
|
85
|
-
schema.type = ['string', 'object'];
|
|
86
|
-
schema = addFormat(schema, 'date-time');
|
|
87
|
-
} else {
|
|
88
|
-
if (options.useInstanceOf) {
|
|
89
|
-
schema.type = 'object';
|
|
90
|
-
schema.instanceof = type;
|
|
91
|
-
} else {
|
|
92
|
-
delete schema.type;
|
|
93
|
-
schema.$ref = type;
|
|
94
|
-
|
|
95
|
-
if (schema.nullable) {
|
|
96
|
-
delete schema.nullable;
|
|
97
|
-
schema = {
|
|
98
|
-
oneOf: [{
|
|
99
|
-
type: 'null'
|
|
100
|
-
}, schema]
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
} else {
|
|
106
|
-
const expanded = expandSchemaShorthand(schema);
|
|
107
|
-
schema = expanded !== schema ? convertSchema(expanded, options) : expanded;
|
|
108
|
-
|
|
109
|
-
for (const key of ['allOf', 'anyOf', 'oneOf', 'not']) {
|
|
110
|
-
if (key in schema) {
|
|
111
|
-
schema[key] = convertSchema(schema[key], options);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (required) {
|
|
117
|
-
schema = addFormat(schema, 'required');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (excludeDefaults[schema.default]) {
|
|
121
|
-
delete schema.default;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (schema.nullable && schema.enum && !schema.enum.includes(null)) {
|
|
125
|
-
schema.enum.push(null);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return schema;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function expandProperties(schemaProperties, options) {
|
|
133
|
-
const properties = {};
|
|
134
|
-
const required = [];
|
|
135
|
-
|
|
136
|
-
for (let [key, property] of Object.entries(schemaProperties)) {
|
|
137
|
-
var _property;
|
|
138
|
-
|
|
139
|
-
property = expandSchemaShorthand(property);
|
|
140
|
-
properties[key] = convertSchema(property, options);
|
|
141
|
-
|
|
142
|
-
if ((_property = property) != null && _property.required) {
|
|
143
|
-
required.push(key);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return {
|
|
148
|
-
properties,
|
|
149
|
-
required
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function expandSchemaShorthand(schema) {
|
|
154
|
-
if ((0, _utils.isString)(schema)) {
|
|
155
|
-
schema = {
|
|
156
|
-
type: schema
|
|
157
|
-
};
|
|
158
|
-
} else if ((0, _utils.isArray)(schema)) {
|
|
159
|
-
schema = {
|
|
160
|
-
type: 'array',
|
|
161
|
-
items: schema.length > 1 ? schema : schema[0],
|
|
162
|
-
default: []
|
|
163
|
-
};
|
|
164
|
-
} else if ((0, _utils.isObject)(schema) && !((0, _utils.isString)(schema.type) || (0, _utils.isString)(schema.$ref) || (0, _utils.isArray)(schema.allOf) || (0, _utils.isArray)(schema.anyOf) || (0, _utils.isArray)(schema.oneOf) || (0, _utils.isObject)(schema.not))) {
|
|
165
|
-
const properties = {};
|
|
166
|
-
const rest = {};
|
|
167
|
-
|
|
168
|
-
for (const [key, value] of Object.entries(schema)) {
|
|
169
|
-
if ((0, _utils.isObject)(value) || (0, _utils.isString)(value) || (0, _utils.isArray)(value)) {
|
|
170
|
-
properties[key] = value;
|
|
171
|
-
} else {
|
|
172
|
-
rest[key] = value;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
schema = {
|
|
177
|
-
type: 'object',
|
|
178
|
-
properties,
|
|
179
|
-
...rest
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return schema;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function addFormat(schema, newFormat) {
|
|
187
|
-
let {
|
|
188
|
-
allOf,
|
|
189
|
-
format,
|
|
190
|
-
...rest
|
|
191
|
-
} = schema;
|
|
192
|
-
|
|
193
|
-
if (format || allOf) {
|
|
194
|
-
allOf || (allOf = []);
|
|
195
|
-
|
|
196
|
-
if (!allOf.find(({
|
|
197
|
-
format
|
|
198
|
-
}) => format === newFormat)) {
|
|
199
|
-
allOf.push({
|
|
200
|
-
format
|
|
201
|
-
}, {
|
|
202
|
-
format: newFormat
|
|
203
|
-
});
|
|
204
|
-
schema = { ...rest,
|
|
205
|
-
allOf
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
} else {
|
|
209
|
-
schema.format = newFormat;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return schema;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
const jsonTypes = {
|
|
216
|
-
string: 'string',
|
|
217
|
-
text: 'string',
|
|
218
|
-
number: 'number',
|
|
219
|
-
integer: 'integer',
|
|
220
|
-
boolean: 'boolean',
|
|
221
|
-
object: 'object',
|
|
222
|
-
array: 'array'
|
|
223
|
-
};
|
|
224
|
-
const excludeDefaults = {
|
|
225
|
-
'now()': true
|
|
226
|
-
};
|
|
227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcHJvcGVydGllcy5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0U2NoZW1hIiwic2NoZW1hIiwib3B0aW9ucyIsInR5cGUiLCJtYXAiLCJlbnRyeSIsInJlcXVpcmVkIiwicmVzdCIsImpzb25UeXBlIiwianNvblR5cGVzIiwic2V0QWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZXhwYW5kUHJvcGVydGllcyIsImxlbmd0aCIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJpdGVtcyIsImluY2x1ZGVzIiwiYWRkRm9ybWF0IiwidXNlSW5zdGFuY2VPZiIsImluc3RhbmNlb2YiLCIkcmVmIiwibnVsbGFibGUiLCJvbmVPZiIsImV4cGFuZGVkIiwiZXhwYW5kU2NoZW1hU2hvcnRoYW5kIiwia2V5IiwiZXhjbHVkZURlZmF1bHRzIiwiZGVmYXVsdCIsImVudW0iLCJwdXNoIiwic2NoZW1hUHJvcGVydGllcyIsInByb3BlcnR5IiwiT2JqZWN0IiwiZW50cmllcyIsImFsbE9mIiwiYW55T2YiLCJub3QiLCJ2YWx1ZSIsIm5ld0Zvcm1hdCIsImZvcm1hdCIsImZpbmQiLCJzdHJpbmciLCJ0ZXh0IiwibnVtYmVyIiwiaW50ZWdlciIsImJvb2xlYW4iLCJvYmplY3QiLCJhcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFTyxTQUFTQSxhQUFULENBQXVCQyxNQUF2QixFQUErQkMsT0FBTyxHQUFHLEVBQXpDLEVBQTZDO0FBQ2xELE1BQUkscUJBQVNELE1BQVQsQ0FBSixFQUFzQjtBQUdwQkEsSUFBQUEsTUFBTSxHQUFHO0FBQUVFLE1BQUFBLElBQUksRUFBRUY7QUFBUixLQUFUO0FBQ0QsR0FKRCxNQUlPLElBQUksb0JBQVFBLE1BQVIsQ0FBSixFQUFxQjtBQUUxQkEsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNHLEdBQVAsQ0FBV0MsS0FBSyxJQUFJTCxhQUFh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RUEsUUFBQUEsTUFBTSxFQUFFRDtBQUFWLE9BQXZCO0FBQ0F0QyxNQUFBQSxNQUFNLEdBQUcsRUFBRSxHQUFHTSxJQUFMO0FBQVc0QixRQUFBQTtBQUFYLE9BQVQ7QUFDRDtBQUNGLEdBTkQsTUFNTztBQUNMbEMsSUFBQUEsTUFBTSxDQUFDdUMsTUFBUCxHQUFnQkQsU0FBaEI7QUFDRDs7QUFDRCxTQUFPdEMsTUFBUDtBQUNEOztBQUtELE1BQU1RLFNBQVMsR0FBRztBQUNoQmlDLEVBQUFBLE1BQU0sRUFBRSxRQURRO0FBRWhCQyxFQUFBQSxJQUFJLEVBQUUsUUFGVTtBQUdoQkMsRUFBQUEsTUFBTSxFQUFFLFFBSFE7QUFJaEJDLEVBQUFBLE9BQU8sRUFBRSxTQUpPO0FBS2hCQyxFQUFBQSxPQUFPLEVBQUUsU0FMTztBQU1oQkMsRUFBQUEsTUFBTSxFQUFFLFFBTlE7QUFPaEJDLEVBQUFBLEtBQUssRUFBRTtBQVBTLENBQWxCO0FBVUEsTUFBTXJCLGVBQWUsR0FBRztBQUN0QixXQUFTO0FBRGEsQ0FBeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjaGVtYShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoaXNTdHJpbmcoc2NoZW1hKSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHJlbW92aW5nIHN0cmluZyBzaG9ydC1oYW5kXG4gICAgLy8gTmVzdGVkIHNob3J0aGFuZCBleHBhbnNpb25cbiAgICBzY2hlbWEgPSB7IHR5cGU6IHNjaGVtYSB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShzY2hlbWEpKSB7XG4gICAgLy8gTmVlZGVkIGZvciBhbGxPZiwgYW55T2YsIG9uZU9mLCBub3QsIGl0ZW1zOlxuICAgIHNjaGVtYSA9IHNjaGVtYS5tYXAoZW50cnkgPT4gY29udmVydFNjaGVtYShlbnRyeSwgb3B0aW9ucykpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IHNjaGVtYVxuICAgIC8vIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc28gd2UgY2FuIG1vZGlmeSBhbmQgcmV0dXJuLCBleGNsdWRpbmcgb3VyXG4gICAgLy8gYHJlcXVpcmVkYCBib29sZWFuIHdoaWNoIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIGZvcm1hdCBmdXJ0aGVyIGRvd24sIGFuZFxuICAgIC8vIHRvIEpTT04gc2NoZW1hJ3MgYHJlcXVpcmVkYCBhcnJheSB0aHJvdWdoIGBleHBhbmRQcm9wZXJ0aWVzKClgOlxuICAgIGNvbnN0IHsgcmVxdWlyZWQsIC4uLnJlc3QgfSA9IHNjaGVtYVxuICAgIHNjaGVtYSA9IHJlc3RcbiAgICBpZiAoaXNTdHJpbmcodHlwZSkpIHtcbiAgICAgIC8vIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5vdGF0aW9uIHRvIEpTT04gc2NoZW1hXG4gICAgICBjb25zdCBqc29uVHlwZSA9IGpzb25UeXBlc1t0eXBlXVxuICAgICAgaWYgKGpzb25UeXBlKSB7XG4gICAgICAgIHNjaGVtYS50eXBlID0ganNvblR5cGVcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGxldCBzZXRBZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BlcnRpZXMsIHJlcXVpcmVkIH0gPSBleHBhbmRQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAocmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSByZXF1aXJlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QWRkaXRpb25hbFByb3BlcnRpZXMgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gZXhwYW5kUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBzZXRBZGRpdGlvbmFsUHJvcGVydGllcyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNldEFkZGl0aW9uYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAvLyBJbnZlcnQgdGhlIGxvZ2ljIG9mIGBhZGRpdGlvbmFsUHJvcGVydGllc2Agc28gdGhhdCBpdCBuZWVkcyB0byBiZVxuICAgICAgICAgICAgLy8gZXhwbGljaXRlbHkgc2V0IHRvIGB0cnVlYDpcbiAgICAgICAgICAgIGlmICghKCdhZGRpdGlvbmFsUHJvcGVydGllcycgaW4gc2NoZW1hKSkge1xuICAgICAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYVxuICAgICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgc2NoZW1hLml0ZW1zID0gY29udmVydFNjaGVtYShpdGVtcywgb3B0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWVzdGFtcCddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgIC8vIERhdGUgcHJvcGVydGllcyBjYW4gYmUgc3VibWl0dGVkIGJvdGggYXMgYSBzdHJpbmcgb3IgYSBEYXRlIG9iamVjdC5cbiAgICAgICAgLy8gUHJvdmlkZSB2YWxpZGF0aW9uIHRocm91Z2ggZGF0ZS10aW1lIGZvcm1hdCwgd2hpY2ggaW4gQWp2IGFwcGVhcnNcbiAgICAgICAgLy8gdG8gaGFuZGxlIGJvdGggdHlwZXMgY29ycmVjdGx5LlxuICAgICAgICBzY2hlbWEudHlwZSA9IFsnc3RyaW5nJywgJ29iamVjdCddXG4gICAgICAgIHNjaGVtYSA9IGFkZEZvcm1hdChzY2hlbWEsICdkYXRlLXRpbWUnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQSByZWZlcmVuY2UgdG8gYW5vdGhlciBtb2RlbCBhcyBuZXN0ZWQgSlNPTiBkYXRhLCB1c2UgJHJlZiBvclxuICAgICAgICAvLyBpbnN0YW5jZW9mIGluc3RlYWQgb2YgdHlwZSwgYmFzZWQgb24gdGhlIHBhc3NlZCBvcHRpb246XG4gICAgICAgIGlmIChvcHRpb25zLnVzZUluc3RhbmNlT2YpIHtcbiAgICAgICAgICBzY2hlbWEudHlwZSA9ICdvYmplY3QnXG4gICAgICAgICAgc2NoZW1hLmluc3RhbmNlb2YgPSB0eXBlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW92ZSBgdHlwZWAgdG8gYCRyZWZgLCBidXQgc3RpbGwga2VlcCBvdGhlciBwcm9wZXJ0aWVzIGZvciBub3csXG4gICAgICAgICAgLy8gdG8gc3VwcG9ydCBgbnVsbGFibGVgLlxuICAgICAgICAgIGRlbGV0ZSBzY2hlbWEudHlwZVxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyB0byBgbW9kZWxgIGtleXdvcmQgaW5zdGVhZCB0aGF0IHdvdWxkIHN1cHBvcnRcbiAgICAgICAgICAvLyBtb2RlbCB2YWxpZGF0aW9uIGFuZCBzdGlsbCBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIGtleXdvcmRzLlxuICAgICAgICAgIHNjaGVtYS4kcmVmID0gdHlwZVxuICAgICAgICAgIC8vIGAkcmVmYCBkb2Vzbid0IHBsYXkgd2l0aCBgbnVsbGFibGVgLCBzbyBjb252ZXJ0IHRvIGBvbmVPZmBcbiAgICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlKSB7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLm51bGxhYmxlXG4gICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbnVsbCcgfSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcm9vdCBwcm9wZXJ0aWVzIHNjaGVtYSBvciBuZXN0ZWQgb2JqZWN0IHdpdGhvdXQgdHlwZSB0aGF0XG4gICAgICAvLyBtYXkgbmVlZCBleHBhbmRpbmcuXG4gICAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZFNjaGVtYVNob3J0aGFuZChzY2hlbWEpXG4gICAgICBzY2hlbWEgPSBleHBhbmRlZCAhPT0gc2NoZW1hXG4gICAgICAgIC8vIE9ubHkgY2FsbCBjb252ZXJ0U2NoZW1hKCkgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4uLlxuICAgICAgICA/IGNvbnZlcnRTY2hlbWEoZXhwYW5kZWQsIG9wdGlvbnMpXG4gICAgICAgIDogZXhwYW5kZWRcbiAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgYWxsT2YsIGFueU9mLCBvbmVPZiwgbm90IHByb3BlcnRpZXNcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFsnYWxsT2YnLCAnYW55T2YnLCAnb25lT2YnLCAnbm90J10pIHtcbiAgICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IGNvbnZlcnRTY2hlbWEoc2NoZW1hW2tleV0sIG9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAvLyBPdXIgJ3JlcXVpcmVkJyBpcyBub3QgdGhlIHNhbWUgYXMgSlNPTiBTY2hlbWEnczogVXNlIHRoZSAncmVxdWlyZWQnXG4gICAgICAvLyBmb3JtYXQgaW5zdGVhZCB0aGF0IG9ubHkgdmFsaWRhdGVzIGlmIHRoZSByZXF1aXJlZCB2YWx1ZSBpcyBub3RcbiAgICAgIC8vIGVtcHR5LCBtZWFuaW5nIG5laXRoZXIgbnVsbGlzaCBub3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgc2NoZW1hID0gYWRkRm9ybWF0KHNjaGVtYSwgJ3JlcXVpcmVkJylcbiAgICB9XG4gICAgaWYgKGV4Y2x1ZGVEZWZhdWx0c1tzY2hlbWEuZGVmYXVsdF0pIHtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuZGVmYXVsdFxuICAgIH1cbiAgICAvLyBNYWtlIG51bGxhYmxlIHdvcmsgd2l0aCBlbnVtLCBzZWUgdGhlIGlzc3VlIGZvciBtb3JlIGRldGFpbHM6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy8xNDcxXG4gICAgaWYgKHNjaGVtYS5udWxsYWJsZSAmJiBzY2hlbWEuZW51bSAmJiAhc2NoZW1hLmVudW0uaW5jbHVkZXMobnVsbCkpIHtcbiAgICAgIHNjaGVtYS5lbnVtLnB1c2gobnVsbClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kUHJvcGVydGllcyhzY2hlbWFQcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICBjb25zdCByZXF1aXJlZCA9IFtdXG4gIGZvciAobGV0IFtrZXksIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFQcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnR5ID0gZXhwYW5kU2NoZW1hU2hvcnRoYW5kKHByb3BlcnR5KVxuICAgIHByb3BlcnRpZXNba2V5XSA9IGNvbnZlcnRTY2hlbWEocHJvcGVydHksIG9wdGlvbnMpXG4gICAgaWYgKHByb3BlcnR5Py5yZXF1aXJlZCkge1xuICAgICAgcmVxdWlyZWQucHVzaChrZXkpXG4gICAgfVxuICB9XG4gIHJldHVybiB7IHByb3BlcnRpZXMsIHJlcXVpcmVkIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFNjaGVtYVNob3J0aGFuZChzY2hlbWEpIHtcbiAgLy8gVE9ETzogQ29uc2lkZXIgcmVtb3ZpbmcgYWxsIHNob3J0LWhhbmQgc2NoZW1hIGV4cGFuc2lvbi5cbiAgaWYgKGlzU3RyaW5nKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSB7XG4gICAgICB0eXBlOiBzY2hlbWFcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0ge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiBzY2hlbWEubGVuZ3RoID4gMSA/IHNjaGVtYSA6IHNjaGVtYVswXSxcbiAgICAgIC8vIFRoZSBhcnJheSBzaG9ydC1mb3JtcyBzZXRzIGFuIGVtcHR5IGFycmF5IGFzIHRoZSBkZWZhdWx0LlxuICAgICAgZGVmYXVsdDogW11cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgLy8gRXhwYW5kIG9iamVjdHMgdG8gYHR5cGU6ICdvYmplY3QnYC4uLlxuICAgIGlzT2JqZWN0KHNjaGVtYSkgJiZcbiAgICAhKFxuICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhleSBkb24ndCBkZWZpbmUgYW55IG9mIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICBpc1N0cmluZyhzY2hlbWEudHlwZSkgfHxcbiAgICAgIGlzU3RyaW5nKHNjaGVtYS4kcmVmKSB8fFxuICAgICAgaXNBcnJheShzY2hlbWEuYWxsT2YpIHx8XG4gICAgICBpc0FycmF5KHNjaGVtYS5hbnlPZikgfHxcbiAgICAgIGlzQXJyYXkoc2NoZW1hLm9uZU9mKSB8fFxuICAgICAgaXNPYmplY3Qoc2NoZW1hLm5vdClcbiAgICApXG4gICkge1xuICAgIC8vIFNlcGFyYXRlIG9iamVjdCBzaG9ydC1oYW5kIGludG8gcHJvcGVydHkgZGVmaW5pdGlvbnMgYW5kIG90aGVyIGZpZWxkcy5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge31cbiAgICBjb25zdCByZXN0ID0ge31cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEpKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBkZWZpbml0aW9ucyBhcmUgZWl0aGVyIG9iamVjdHMgb3Igc3RyaW5nIC8gYXJyYXkgc2hvcnQtaGFuZHM6XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgc2NoZW1hID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgLi4ucmVzdFxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGFkZEZvcm1hdChzY2hlbWEsIG5ld0Zvcm1hdCkge1xuICAvLyBTdXBwb3J0IG11bHRpcGxlIGBmb3JtYXRgIGtleXdvcmRzIHRocm91Z2ggYGFsbE9mYDpcbiAgbGV0IHsgYWxsT2YsIGZvcm1hdCwgLi4ucmVzdCB9ID0gc2NoZW1hXG4gIGlmIChmb3JtYXQgfHwgYWxsT2YpIHtcbiAgICBhbGxPZiB8fD0gW11cbiAgICBpZiAoIWFsbE9mLmZpbmQoKHsgZm9ybWF0IH0pID0+IGZvcm1hdCA9PT0gbmV3Rm9ybWF0KSkge1xuICAgICAgYWxsT2YucHVzaCh7IGZvcm1hdCB9LCB7IGZvcm1hdDogbmV3Rm9ybWF0IH0pXG4gICAgICBzY2hlbWEgPSB7IC4uLnJlc3QsIGFsbE9mIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hLmZvcm1hdCA9IG5ld0Zvcm1hdFxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuLy8gVGFibGUgdG8gdHJhbnNsYXRlIHNjaGVtYSB0eXBlcyB0byBKU09OIHNjaGVtYSB0eXBlcy4gT3RoZXIgdHlwZXMgYXJlIGFsbG93ZWRcbi8vIGFsc28sIGUuZy4gJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZXN0YW1wJywgYnV0IHRoZXkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudC5cbi8vIEFueXRoaW5nIG5vdCByZWNvZ25pemVkIGFzIGEgdHlwZSBpcyB1c2VkIGFzIGEgJHJlZiBpbnN0ZWFkLlxuY29uc3QganNvblR5cGVzID0ge1xuICBzdHJpbmc6ICdzdHJpbmcnLFxuICB0ZXh0OiAnc3RyaW5nJyxcbiAgbnVtYmVyOiAnbnVtYmVyJyxcbiAgaW50ZWdlcjogJ2ludGVnZXInLFxuICBib29sZWFuOiAnYm9vbGVhbicsXG4gIG9iamVjdDogJ29iamVjdCcsXG4gIGFycmF5OiAnYXJyYXknXG59XG5cbmNvbnN0IGV4Y2x1ZGVEZWZhdWx0cyA9IHtcbiAgJ25vdygpJzogdHJ1ZVxufVxuIl19
|