@ditojs/server 0.275.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +25 -43
- package/src/app/Application.js +105 -111
- package/src/app/Validator.js +6 -3
- package/src/app/index.js +2 -2
- package/src/cli/db/createMigration.js +1 -1
- package/src/cli/db/index.js +7 -7
- package/src/cli/db/listAssetConfig.js +1 -1
- package/src/cli/db/reset.js +1 -1
- package/src/cli/index.js +14 -5
- package/src/controllers/AdminController.js +181 -158
- package/src/controllers/CollectionController.js +8 -29
- package/src/controllers/Controller.js +71 -76
- package/src/controllers/ControllerAction.js +39 -17
- package/src/controllers/MemberAction.js +2 -2
- package/src/controllers/ModelController.js +4 -4
- package/src/controllers/RelationController.js +3 -3
- package/src/controllers/{UserController.js → UsersController.js} +8 -13
- package/src/controllers/index.js +5 -5
- package/src/decorators/action.js +3 -3
- package/src/decorators/authorize.js +1 -1
- package/src/decorators/index.js +6 -6
- package/src/decorators/parameters.js +1 -1
- package/src/decorators/returns.js +1 -1
- package/src/decorators/scope.js +1 -1
- package/src/decorators/transacted.js +1 -1
- package/src/errors/AssetError.js +1 -1
- package/src/errors/AuthenticationError.js +1 -1
- package/src/errors/AuthorizationError.js +1 -1
- package/src/errors/ControllerError.js +1 -1
- package/src/errors/DatabaseError.js +12 -3
- package/src/errors/GraphError.js +1 -1
- package/src/errors/ModelError.js +1 -1
- package/src/errors/NotFoundError.js +1 -1
- package/src/errors/NotImplementedError.js +1 -1
- package/src/errors/QueryBuilderError.js +1 -1
- package/src/errors/RelationError.js +1 -1
- package/src/errors/ValidationError.js +1 -1
- package/src/errors/WrappedError.js +1 -1
- package/src/errors/index.js +14 -14
- package/src/graph/DitoGraphProcessor.js +2 -1
- package/src/graph/graph.js +1 -1
- package/src/graph/index.js +3 -3
- package/src/index.js +11 -9
- package/src/lib/index.js +2 -2
- package/src/middleware/createTransaction.js +1 -1
- package/src/middleware/findRoute.js +3 -2
- package/src/middleware/handleConnectMiddleware.js +88 -0
- package/src/middleware/handleError.js +1 -1
- package/src/middleware/handleRoute.js +3 -3
- package/src/middleware/index.js +8 -7
- package/src/mixins/AssetMixin.js +1 -1
- package/src/mixins/UserMixin.js +1 -1
- package/src/mixins/index.js +4 -4
- package/src/models/AssetModel.js +2 -2
- package/src/models/Model.js +16 -12
- package/src/models/RelationAccessor.js +1 -1
- package/src/models/SessionModel.js +2 -2
- package/src/models/TimeStampedModel.js +2 -2
- package/src/models/UserModel.js +2 -2
- package/src/models/definitions/assets.js +1 -1
- package/src/models/definitions/filters.js +57 -44
- package/src/models/definitions/hooks.js +1 -1
- package/src/models/definitions/index.js +9 -9
- package/src/models/definitions/modifiers.js +1 -1
- package/src/models/definitions/options.js +1 -1
- package/src/models/definitions/properties.js +2 -2
- package/src/models/definitions/relations.js +1 -1
- package/src/models/definitions/schema.js +1 -1
- package/src/models/definitions/scopes.js +2 -2
- package/src/models/index.js +5 -5
- package/src/query/QueryBuilder.js +5 -5
- package/src/query/QueryFilters.js +50 -50
- package/src/query/QueryParameters.js +2 -2
- package/src/query/index.js +3 -3
- package/src/schema/formats/index.js +2 -2
- package/src/schema/index.js +4 -4
- package/src/schema/keywords/_relate.js +1 -1
- package/src/schema/keywords/index.js +12 -12
- package/src/schema/properties.test.js +1 -1
- package/src/schema/relations.js +1 -1
- package/src/schema/relations.test.js +2 -2
- package/src/services/index.js +1 -1
- package/src/storage/DiskStorage.js +1 -1
- package/src/storage/S3Storage.js +4 -4
- package/src/storage/Storage.js +1 -1
- package/src/storage/index.js +4 -4
- package/src/utils/function.test.js +1 -1
- package/src/utils/handler.js +17 -0
- package/src/utils/index.js +8 -7
- package/src/utils/object.test.js +1 -1
- package/lib/app/Application.js +0 -961
- package/lib/app/SessionStore.js +0 -40
- package/lib/app/Validator.js +0 -355
- package/lib/app/index.js +0 -26
- package/lib/cli/console.js +0 -175
- package/lib/cli/db/createMigration.js +0 -237
- package/lib/cli/db/index.js +0 -66
- package/lib/cli/db/listAssetConfig.js +0 -16
- package/lib/cli/db/migrate.js +0 -15
- package/lib/cli/db/reset.js +0 -27
- package/lib/cli/db/rollback.js +0 -15
- package/lib/cli/db/seed.js +0 -104
- package/lib/cli/db/unlock.js +0 -15
- package/lib/cli/index.js +0 -90
- package/lib/controllers/AdminController.js +0 -258
- package/lib/controllers/CollectionController.js +0 -263
- package/lib/controllers/Controller.js +0 -462
- package/lib/controllers/ControllerAction.js +0 -276
- package/lib/controllers/MemberAction.js +0 -22
- package/lib/controllers/ModelController.js +0 -64
- package/lib/controllers/RelationController.js +0 -82
- package/lib/controllers/UserController.js +0 -98
- package/lib/controllers/index.js +0 -50
- package/lib/decorators/action.js +0 -14
- package/lib/decorators/authorize.js +0 -13
- package/lib/decorators/index.js +0 -58
- package/lib/decorators/parameters.js +0 -35
- package/lib/decorators/returns.js +0 -26
- package/lib/decorators/scope.js +0 -14
- package/lib/decorators/transacted.js +0 -12
- package/lib/errors/AssetError.js +0 -19
- package/lib/errors/AuthenticationError.js +0 -19
- package/lib/errors/AuthorizationError.js +0 -19
- package/lib/errors/ControllerError.js +0 -24
- package/lib/errors/DatabaseError.js +0 -27
- package/lib/errors/GraphError.js +0 -19
- package/lib/errors/ModelError.js +0 -24
- package/lib/errors/NotFoundError.js +0 -19
- package/lib/errors/NotImplementedError.js +0 -19
- package/lib/errors/QueryBuilderError.js +0 -19
- package/lib/errors/RelationError.js +0 -36
- package/lib/errors/ResponseError.js +0 -46
- package/lib/errors/ValidationError.js +0 -19
- package/lib/errors/WrappedError.js +0 -24
- package/lib/errors/index.js +0 -122
- package/lib/graph/DitoGraphProcessor.js +0 -185
- package/lib/graph/expression.js +0 -76
- package/lib/graph/graph.js +0 -300
- package/lib/graph/index.js +0 -34
- package/lib/index.js +0 -82
- package/lib/lib/EventEmitter.js +0 -76
- package/lib/lib/KnexHelper.js +0 -40
- package/lib/lib/index.js +0 -26
- package/lib/middleware/attachLogger.js +0 -16
- package/lib/middleware/createTransaction.js +0 -36
- package/lib/middleware/findRoute.js +0 -35
- package/lib/middleware/handleError.js +0 -26
- package/lib/middleware/handleRoute.js +0 -29
- package/lib/middleware/handleUser.js +0 -36
- package/lib/middleware/index.js +0 -66
- package/lib/middleware/logRequests.js +0 -122
- package/lib/mixins/AssetMixin.js +0 -81
- package/lib/mixins/SessionMixin.js +0 -22
- package/lib/mixins/TimeStampedMixin.js +0 -47
- package/lib/mixins/UserMixin.js +0 -151
- package/lib/mixins/index.js +0 -42
- package/lib/models/AssetModel.js +0 -12
- package/lib/models/Model.js +0 -953
- package/lib/models/RelationAccessor.js +0 -41
- package/lib/models/SessionModel.js +0 -12
- package/lib/models/TimeStampedModel.js +0 -12
- package/lib/models/UserModel.js +0 -12
- package/lib/models/definitions/assets.js +0 -11
- package/lib/models/definitions/filters.js +0 -101
- package/lib/models/definitions/hooks.js +0 -11
- package/lib/models/definitions/index.js +0 -38
- package/lib/models/definitions/modifiers.js +0 -11
- package/lib/models/definitions/options.js +0 -11
- package/lib/models/definitions/properties.js +0 -87
- package/lib/models/definitions/relations.js +0 -11
- package/lib/models/definitions/schema.js +0 -11
- package/lib/models/definitions/scopes.js +0 -51
- package/lib/models/index.js +0 -50
- package/lib/query/QueryBuilder.js +0 -745
- package/lib/query/QueryFilters.js +0 -82
- package/lib/query/QueryParameters.js +0 -77
- package/lib/query/Registry.js +0 -40
- package/lib/query/index.js +0 -34
- package/lib/schema/formats/_empty.js +0 -10
- package/lib/schema/formats/_required.js +0 -10
- package/lib/schema/formats/index.js +0 -26
- package/lib/schema/index.js +0 -49
- package/lib/schema/keywords/_computed.js +0 -11
- package/lib/schema/keywords/_foreign.js +0 -11
- package/lib/schema/keywords/_hidden.js +0 -11
- package/lib/schema/keywords/_index.js +0 -11
- package/lib/schema/keywords/_instanceof.js +0 -49
- package/lib/schema/keywords/_primary.js +0 -11
- package/lib/schema/keywords/_range.js +0 -26
- package/lib/schema/keywords/_relate.js +0 -19
- package/lib/schema/keywords/_specificType.js +0 -11
- package/lib/schema/keywords/_unique.js +0 -11
- package/lib/schema/keywords/_unsigned.js +0 -11
- package/lib/schema/keywords/_validate.js +0 -80
- package/lib/schema/keywords/index.js +0 -106
- package/lib/schema/properties.js +0 -227
- package/lib/schema/properties.test.js +0 -573
- package/lib/schema/relations.js +0 -274
- package/lib/schema/relations.test.js +0 -155
- package/lib/services/Service.js +0 -34
- package/lib/services/index.js +0 -18
- package/lib/storage/AssetFile.js +0 -97
- package/lib/storage/DiskStorage.js +0 -125
- package/lib/storage/S3Storage.js +0 -171
- package/lib/storage/Storage.js +0 -209
- package/lib/storage/index.js +0 -34
- package/lib/utils/decorator.js +0 -16
- package/lib/utils/deprecate.js +0 -46
- package/lib/utils/emitter.js +0 -13
- package/lib/utils/function.js +0 -14
- package/lib/utils/function.test.js +0 -49
- package/lib/utils/index.js +0 -66
- package/lib/utils/json.js +0 -9
- package/lib/utils/object.js +0 -92
- package/lib/utils/object.test.js +0 -65
- package/lib/utils/scope.js +0 -14
package/lib/schema/relations.js
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.addRelationSchemas = addRelationSchemas;
|
|
5
|
-
exports.convertRelation = convertRelation;
|
|
6
|
-
exports.convertRelations = convertRelations;
|
|
7
|
-
exports.getRelationClass = getRelationClass;
|
|
8
|
-
exports.isThroughRelationClass = isThroughRelationClass;
|
|
9
|
-
|
|
10
|
-
require("core-js/modules/esnext.async-iterator.map.js");
|
|
11
|
-
|
|
12
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
13
|
-
|
|
14
|
-
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
15
|
-
|
|
16
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
17
|
-
|
|
18
|
-
require("core-js/modules/esnext.iterator.filter.js");
|
|
19
|
-
|
|
20
|
-
require("core-js/modules/esnext.async-iterator.find.js");
|
|
21
|
-
|
|
22
|
-
require("core-js/modules/esnext.iterator.find.js");
|
|
23
|
-
|
|
24
|
-
var _objection = require("objection");
|
|
25
|
-
|
|
26
|
-
var _errors = require("../errors");
|
|
27
|
-
|
|
28
|
-
var _utils = require("@ditojs/utils");
|
|
29
|
-
|
|
30
|
-
const relationLookup = {
|
|
31
|
-
belongsTo: _objection.BelongsToOneRelation,
|
|
32
|
-
hasOne: _objection.HasOneRelation,
|
|
33
|
-
hasOneThrough: _objection.HasOneThroughRelation,
|
|
34
|
-
hasMany: _objection.HasManyRelation,
|
|
35
|
-
manyToMany: _objection.ManyToManyRelation
|
|
36
|
-
};
|
|
37
|
-
const relationClasses = {
|
|
38
|
-
BelongsToOneRelation: _objection.BelongsToOneRelation,
|
|
39
|
-
HasOneRelation: _objection.HasOneRelation,
|
|
40
|
-
HasOneThroughRelation: _objection.HasOneThroughRelation,
|
|
41
|
-
HasManyRelation: _objection.HasManyRelation,
|
|
42
|
-
ManyToManyRelation: _objection.ManyToManyRelation
|
|
43
|
-
};
|
|
44
|
-
const throughRelationClasses = {
|
|
45
|
-
ManyToManyRelation: _objection.ManyToManyRelation,
|
|
46
|
-
HasOneThroughRelation: _objection.HasOneThroughRelation
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
class ModelReference {
|
|
50
|
-
constructor(reference, models, allowUnknown = false) {
|
|
51
|
-
this.modelName = null;
|
|
52
|
-
this.modelClass = null;
|
|
53
|
-
this.propertyNames = [];
|
|
54
|
-
|
|
55
|
-
for (const ref of (0, _utils.asArray)(reference)) {
|
|
56
|
-
const [modelName, propertyName] = (ref == null ? void 0 : ref.split('.')) || [];
|
|
57
|
-
const modelClass = models[modelName];
|
|
58
|
-
|
|
59
|
-
if (!modelClass && !allowUnknown) {
|
|
60
|
-
throw new _errors.RelationError(`Unknown model reference: ${ref}`);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (!this.modelName) {
|
|
64
|
-
this.modelName = modelName;
|
|
65
|
-
this.modelClass = modelClass;
|
|
66
|
-
} else if (this.modelName !== modelName) {
|
|
67
|
-
throw new _errors.RelationError(`Composite keys need to be defined on the same table: ${ref}`);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this.propertyNames.push(propertyName);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
asValue(properties) {
|
|
75
|
-
return properties.length > 1 ? properties : properties[0];
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
toValue() {
|
|
79
|
-
return this.asValue(this.propertyNames.map(propName => `${this.modelName}.${propName}`));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
toString() {
|
|
83
|
-
const value = this.toValue();
|
|
84
|
-
return (0, _utils.isArray)(value) ? `[${value.join(', ')}]` : value;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
buildThrough(toRef, inverse) {
|
|
88
|
-
const fromName = this.modelName;
|
|
89
|
-
const fromProperties = this.propertyNames;
|
|
90
|
-
const toName = toRef.modelName;
|
|
91
|
-
const toProperties = toRef.propertyNames;
|
|
92
|
-
|
|
93
|
-
if (fromProperties.length !== toProperties.length) {
|
|
94
|
-
throw new _errors.RelationError('Unable to create through join for ' + `composite keys from '${this}' to '${toRef}'`);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const from = [];
|
|
98
|
-
const to = [];
|
|
99
|
-
|
|
100
|
-
for (let i = 0; i < fromProperties.length; i++) {
|
|
101
|
-
const fromProperty = fromProperties[i];
|
|
102
|
-
const toProperty = toProperties[i];
|
|
103
|
-
|
|
104
|
-
if (fromProperty && toProperty) {
|
|
105
|
-
const throughName = `${fromName}${toName}`;
|
|
106
|
-
const throughFrom = this.getThroughProperty(fromName, fromProperty);
|
|
107
|
-
const throughTo = this.getThroughProperty(toName, toProperty);
|
|
108
|
-
from.push(`${throughName}.${throughFrom}`);
|
|
109
|
-
to.push(`${throughName}.${throughTo}`);
|
|
110
|
-
} else {
|
|
111
|
-
throw new _errors.RelationError(`Unable to create through join from '${this}' to '${to}'`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return {
|
|
116
|
-
from: this.asValue(inverse ? to : from),
|
|
117
|
-
to: this.asValue(inverse ? from : to)
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
getThroughProperty(name, property) {
|
|
122
|
-
return `${name[0].toLowerCase()}${name.slice(1)}${(0, _utils.capitalize)(property)}`;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function getRelationClass(relation) {
|
|
128
|
-
return (0, _utils.isString)(relation) ? relationLookup[(0, _utils.camelize)(relation)] || relationClasses[relation] : _objection.Relation.isPrototypeOf(relation) ? relation : null;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function isThroughRelationClass(relationClass) {
|
|
132
|
-
return throughRelationClasses[relationClass.name];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function convertRelation(schema, models) {
|
|
136
|
-
let {
|
|
137
|
-
relation,
|
|
138
|
-
from,
|
|
139
|
-
to,
|
|
140
|
-
through,
|
|
141
|
-
inverse,
|
|
142
|
-
modify,
|
|
143
|
-
scope,
|
|
144
|
-
join,
|
|
145
|
-
filter,
|
|
146
|
-
nullable,
|
|
147
|
-
owner,
|
|
148
|
-
...rest
|
|
149
|
-
} = schema || {};
|
|
150
|
-
const relationClass = getRelationClass(relation);
|
|
151
|
-
|
|
152
|
-
if (!relationClass) {
|
|
153
|
-
throw new _errors.RelationError(`Unrecognized relation: ${relation}`);
|
|
154
|
-
} else if (join && !(0, _utils.isString)(relation)) {
|
|
155
|
-
return schema;
|
|
156
|
-
} else {
|
|
157
|
-
from = new ModelReference(from, models, false);
|
|
158
|
-
to = new ModelReference(to, models, false);
|
|
159
|
-
|
|
160
|
-
if (isThroughRelationClass(relationClass)) {
|
|
161
|
-
if (!through) {
|
|
162
|
-
through = inverse ? to.buildThrough(from, true) : from.buildThrough(to, false);
|
|
163
|
-
} else if (through.from && through.to) {
|
|
164
|
-
const throughFrom = new ModelReference(through.from, models, true);
|
|
165
|
-
const throughTo = new ModelReference(through.to, models, true);
|
|
166
|
-
|
|
167
|
-
if (throughFrom.modelClass || throughTo.modelClass) {
|
|
168
|
-
if (throughFrom.modelClass === throughTo.modelClass) {
|
|
169
|
-
through.modelClass = throughTo.modelClass;
|
|
170
|
-
through.from = throughFrom.toValue();
|
|
171
|
-
through.to = throughTo.toValue();
|
|
172
|
-
} else {
|
|
173
|
-
throw new _errors.RelationError('Both sides of the `through` definition ' + 'need to be on the same join model');
|
|
174
|
-
}
|
|
175
|
-
} else {}
|
|
176
|
-
} else {
|
|
177
|
-
throw new _errors.RelationError('The relation needs a `through.from` and ' + '`through.to` definition');
|
|
178
|
-
}
|
|
179
|
-
} else if (through) {
|
|
180
|
-
throw new _errors.RelationError('Unsupported through join definition');
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
modify = modify || filter;
|
|
184
|
-
|
|
185
|
-
if ((0, _utils.isObject)(modify)) {
|
|
186
|
-
modify = query => query.find(modify);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
if (scope) {
|
|
190
|
-
const origModify = modify;
|
|
191
|
-
|
|
192
|
-
modify = query => {
|
|
193
|
-
query.applyScope(scope);
|
|
194
|
-
|
|
195
|
-
if (origModify) {
|
|
196
|
-
query.modify(origModify);
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return {
|
|
202
|
-
relation: relationClass,
|
|
203
|
-
modelClass: to.modelClass,
|
|
204
|
-
join: {
|
|
205
|
-
from: from.toValue(),
|
|
206
|
-
to: to.toValue(),
|
|
207
|
-
...(through && {
|
|
208
|
-
through
|
|
209
|
-
})
|
|
210
|
-
},
|
|
211
|
-
...(modify && {
|
|
212
|
-
modify
|
|
213
|
-
}),
|
|
214
|
-
...rest
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
function convertRelations(ownerModelClass, relations, models) {
|
|
220
|
-
const converted = {};
|
|
221
|
-
|
|
222
|
-
for (const [name, relation] of Object.entries(relations)) {
|
|
223
|
-
try {
|
|
224
|
-
converted[name] = convertRelation(relation, models);
|
|
225
|
-
} catch (err) {
|
|
226
|
-
throw new _errors.RelationError(`${ownerModelClass.name}.relations.${name}: ${err.message || err}`);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
return converted;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function addRelationSchemas(modelClass, properties) {
|
|
234
|
-
for (const relationInstance of Object.values(modelClass.getRelations())) {
|
|
235
|
-
const {
|
|
236
|
-
name,
|
|
237
|
-
ownerModelClass,
|
|
238
|
-
relatedModelClass
|
|
239
|
-
} = relationInstance;
|
|
240
|
-
const relationDefinition = ownerModelClass.definition.relations[name];
|
|
241
|
-
const isOneToOne = relationInstance.isOneToOne();
|
|
242
|
-
const {
|
|
243
|
-
owner
|
|
244
|
-
} = relationDefinition;
|
|
245
|
-
const $ref = relatedModelClass.name;
|
|
246
|
-
const anyOf = [];
|
|
247
|
-
|
|
248
|
-
if (isOneToOne) {
|
|
249
|
-
anyOf.push({
|
|
250
|
-
type: 'null'
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (!owner) {
|
|
255
|
-
anyOf.push({
|
|
256
|
-
relate: $ref
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
anyOf.push({
|
|
261
|
-
$ref
|
|
262
|
-
});
|
|
263
|
-
const items = anyOf.length > 1 ? {
|
|
264
|
-
anyOf
|
|
265
|
-
} : anyOf[0];
|
|
266
|
-
properties[name] = isOneToOne ? items : {
|
|
267
|
-
type: 'array',
|
|
268
|
-
items
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
return properties;
|
|
273
|
-
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcmVsYXRpb25zLmpzIl0sIm5hbWVzIjpbInJlbGF0aW9uTG9va3VwIiwiYmVsb25nc1RvIiwiQmVsb25nc1RvT25lUmVsYXRpb24iLCJoYXNPbmUiLCJIYXNPbmVSZWxhdGlvbiIsImhhc09uZVRocm91Z2giLCJIYXNPbmVUaHJvdWdoUmVsYXRpb24iLCJoYXNNYW55IiwiSGFzTWFueVJlbGF0aW9uIiwibWFueVRvTWFueSIsIk1hbnlUb01hbnlSZWxhdGlvbiIsInJlbGF0aW9uQ2xhc3NlcyIsInRocm91Z2hSZWxhdGlvbkNsYXNzZXMiLCJNb2RlbFJlZmVyZW5jZSIsImNvbnN0cnVjdG9yIiwicmVmZXJlbmNlIiwibW9kZWxzIiwiYWxsb3dVbmtub3duIiwibW9kZWxOYW1lIiwibW9kZWxDbGFzcyIsInByb3BlcnR5TmFtZXMiLCJyZWYiLCJwcm9wZXJ0eU5hbWUiLCJzcGxpdCIsIlJlbGF0aW9uRXJyb3IiLCJwdXNoIiwiYXNWYWx1ZSIsInByb3BlcnRpZXMiLCJsZW5ndGgiLCJ0b1ZhbHVlIiwibWFwIiwicHJvcE5hbWUiLCJ0b1N0cmluZyIsInZhbHVlIiwiam9pbiIsImJ1aWxkVGhyb3VnaCIsInRvUmVmIiwiaW52ZXJzZSIsImZyb21OYW1lIiwiZnJvbVByb3BlcnRpZXMiLCJ0b05hbWUiLCJ0b1Byb3BlcnRpZXMiLCJmcm9tIiwidG8iLCJpIiwiZnJvbVByb3BlcnR5IiwidG9Qcm9wZXJ0eSIsInRocm91Z2hOYW1lIiwidGhyb3VnaEZyb20iLCJnZXRUaHJvdWdoUHJvcGVydHkiLCJ0aHJvdWdoVG8iLCJuYW1lIiwicHJvcGVydHkiLCJ0b0xvd2VyQ2FzZSIsInNsaWNlIiwiZ2V0UmVsYXRpb25DbGFzcyIsInJlbGF0aW9uIiwiUmVsYXRpb24iLCJpc1Byb3RvdHlwZU9mIiwiaXNUaHJvdWdoUmVsYXRpb25DbGFzcyIsInJlbGF0aW9uQ2xhc3MiLCJjb252ZXJ0UmVsYXRpb24iLCJzY2hlbWEiLCJ0aHJvdWdoIiwibW9kaWZ5Iiwic2NvcGUiLCJmaWx0ZXIiLCJudWxsYWJsZSIsIm93bmVyIiwicmVzdCIsInF1ZXJ5IiwiZmluZCIsIm9yaWdNb2RpZnkiLCJhcHBseVNjb3BlIiwiY29udmVydFJlbGF0aW9ucyIsIm93bmVyTW9kZWxDbGFzcyIsInJlbGF0aW9ucyIsImNvbnZlcnRlZCIsIk9iamVjdCIsImVudHJpZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWRkUmVsYXRpb25TY2hlbWFzIiwicmVsYXRpb25JbnN0YW5jZSIsInZhbHVlcyIsImdldFJlbGF0aW9ucyIsInJlbGF0ZWRNb2RlbENsYXNzIiwicmVsYXRpb25EZWZpbml0aW9uIiwiZGVmaW5pdGlvbiIsImlzT25lVG9PbmUiLCIkcmVmIiwiYW55T2YiLCJ0eXBlIiwicmVsYXRlIiwiaXRlbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBUUE7O0FBQ0E7O0FBSUEsTUFBTUEsY0FBYyxHQUFHO0FBRXJCQyxFQUFBQSxTQUFTLEVBQUVDLCtCQUZVO0FBR3JCQyxFQUFBQSxNQUFNLEVBQUVDLHlCQUhhO0FBSXJCQyxFQUFBQSxhQUFhLEVBQUVDLGdDQUpNO0FBTXJCQyxFQUFBQSxPQUFPLEVBQUVDLDBCQU5ZO0FBT3JCQyxFQUFBQSxVQUFVLEVBQUVDO0FBUFMsQ0FBdkI7QUFVQSxNQUFNQyxlQUFlLEdBQUc7QUFDdEJULEVBQUFBLG9CQUFvQixFQUFwQkEsK0JBRHNCO0FBRXRCRSxFQUFBQSxjQUFjLEVBQWRBLHlCQUZzQjtBQUd0QkUsRUFBQUEscUJBQXFCLEVBQXJCQSxnQ0FIc0I7QUFJdEJFLEVBQUFBLGVBQWUsRUFBZkEsMEJBSnNCO0FBS3RCRSxFQUFBQSxrQkFBa0IsRUFBbEJBO0FBTHNCLENBQXhCO0FBUUEsTUFBTUUsc0JBQXNCLEdBQUc7QUFDN0JGLEVBQUFBLGtCQUFrQixFQUFsQkEsNkJBRDZCO0FBRTdCSixFQUFBQSxxQkFBcUIsRUFBckJBO0FBRjZCLENBQS9COztBQUtBLE1BQU1PLGNBQU4sQ0FBcUI7QUFD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QUYsS0FEVSxHQUVWQSxLQUFLLENBQUMsQ0FBRCxDQUZUO0FBR0FoRSxJQUFBQSxVQUFVLENBQUN3QixJQUFELENBQVYsR0FBbUJzQyxVQUFVLEdBQ3pCSyxLQUR5QixHQUV6QjtBQUNBRixNQUFBQSxJQUFJLEVBQUUsT0FETjtBQUVBRSxNQUFBQTtBQUZBLEtBRko7QUFNRDs7QUFDRCxTQUFPbkUsVUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUmVsYXRpb24sXG4gIEJlbG9uZ3NUb09uZVJlbGF0aW9uLFxuICBIYXNPbmVSZWxhdGlvbixcbiAgSGFzT25lVGhyb3VnaFJlbGF0aW9uLFxuICBIYXNNYW55UmVsYXRpb24sXG4gIE1hbnlUb01hbnlSZWxhdGlvblxufSBmcm9tICdvYmplY3Rpb24nXG5pbXBvcnQgeyBSZWxhdGlvbkVycm9yIH0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGFzQXJyYXksIGNhcGl0YWxpemUsIGNhbWVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHJlbGF0aW9uTG9va3VwID0ge1xuICAvLyBvbmU6XG4gIGJlbG9uZ3NUbzogQmVsb25nc1RvT25lUmVsYXRpb24sXG4gIGhhc09uZTogSGFzT25lUmVsYXRpb24sXG4gIGhhc09uZVRocm91Z2g6IEhhc09uZVRocm91Z2hSZWxhdGlvbixcbiAgLy8gbWFueTpcbiAgaGFzTWFueTogSGFzTWFueVJlbGF0aW9uLFxuICBtYW55VG9NYW55OiBNYW55VG9NYW55UmVsYXRpb25cbn1cblxuY29uc3QgcmVsYXRpb25DbGFzc2VzID0ge1xuICBCZWxvbmdzVG9PbmVSZWxhdGlvbixcbiAgSGFzT25lUmVsYXRpb24sXG4gIEhhc09uZVRocm91Z2hSZWxhdGlvbixcbiAgSGFzTWFueVJlbGF0aW9uLFxuICBNYW55VG9NYW55UmVsYXRpb25cbn1cblxuY29uc3QgdGhyb3VnaFJlbGF0aW9uQ2xhc3NlcyA9IHtcbiAgTWFueVRvTWFueVJlbGF0aW9uLFxuICBIYXNPbmVUaHJvdWdoUmVsYXRpb25cbn1cblxuY2xhc3MgTW9kZWxSZWZlcmVuY2Uge1xuICBjb25zdHJ1Y3RvcihyZWZlcmVuY2UsIG1vZGVscywgYWxsb3dVbmtub3duID0gZmFsc2UpIHtcbiAgICB0aGlzLm1vZGVsTmFtZSA9IG51bGxcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBudWxsXG4gICAgdGhpcy5wcm9wZXJ0eU5hbWVzID0gW11cbiAgICAvLyBQYXJzZSBhbmQgdmFsaWRhdGUgbW9kZWwga2V5IHJlZmVyZW5jZXNcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiBhc0FycmF5KHJlZmVyZW5jZSkpIHtcbiAgICAgIGNvbnN0IFttb2RlbE5hbWUsIHByb3BlcnR5TmFtZV0gPSByZWY/LnNwbGl0KCcuJykgfHwgW11cbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbHNbbW9kZWxOYW1lXVxuICAgICAgaWYgKCFtb2RlbENsYXNzICYmICFhbGxvd1Vua25vd24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlbGF0aW9uRXJyb3IoXG4gICAgICAgICAgYFVua25vd24gbW9kZWwgcmVmZXJlbmNlOiAke3JlZn1gKVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLm1vZGVsTmFtZSA9IG1vZGVsTmFtZVxuICAgICAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWxOYW1lICE9PSBtb2RlbE5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlbGF0aW9uRXJyb3IoXG4gICAgICAgICAgYENvbXBvc2l0ZSBrZXlzIG5lZWQgdG8gYmUgZGVmaW5lZCBvbiB0aGUgc2FtZSB0YWJsZTogJHtyZWZ9YClcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5TmFtZSlcbiAgICB9XG4gIH1cblxuICBhc1ZhbHVlKHByb3BlcnRpZXMpIHtcbiAgICAvLyBVbnBhY2sgdGhlIHJlZmVyZW5jZSBhcnJheSBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gbXVsdGlwbGUgcHJvcGVydGllcy5cbiAgICByZXR1cm4gcHJvcGVydGllcy5sZW5ndGggPiAxID8gcHJvcGVydGllcyA6IHByb3BlcnRpZXNbMF1cbiAgfVxuXG4gIHRvVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNWYWx1ZShcbiAgICAgIHRoaXMucHJvcGVydHlOYW1lcy5tYXAoXG4gICAgICAgIHByb3BOYW1lID0+IGAke3RoaXMubW9kZWxOYW1lfS4ke3Byb3BOYW1lfWBcbiAgICAgIClcbiAgICApXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudG9WYWx1ZSgpXG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gYFske3ZhbHVlLmpvaW4oJywgJyl9XWAgOiB2YWx1ZVxuICB9XG5cbiAgYnVpbGRUaHJvdWdoKHRvUmVmLCBpbnZlcnNlKSB7XG4gICAgLy8gQXV0by1nZW5lcmF0ZSB0aGUgYHRocm91Z2hgIHNldHRpbmcgYmFzZWQgb24gc2ltcGxlIGNvbnZlbnRpb25zOlxuICAgIC8vIC0gVGhlIGNhbWVsaXplZCB0aHJvdWdoIHRhYmxlIGlzIGNhbGxlZDogYCR7ZnJvbU5hbWV9JHt0b05hbWV9YFxuICAgIC8vIC0gVGhlIGB0aHJvdWdoLmZyb21gIHByb3BlcnR5IGlzIGNhbGxlZDpcbiAgICAvLyAgIGAke2Zyb21Nb2RlbE5hbWUpJHtjYXBpdGFsaXplKGZyb21Qcm9wKX1gXG4gICAgLy8gLSBUaGUgYHRocm91Z2gudG9gIHByb3BlcnR5IGlzIGNhbGxlZDpcbiAgICAvLyAgIGAke3RvTW9kZWxOYW1lKSR7Y2FwaXRhbGl6ZSh0b1Byb3ApfWBcbiAgICAvLyBOT1RFOiBEdWUgdG8gdGhlIHVzZSBvZiBrbmV4U25ha2VDYXNlTWFwcGVycygpLCB0aGVyZSBpcyBubyBuZWVkIHRvXG4gICAgLy8gZ2VuZXJhdGUgYWN0dWFsIHRhYmxlLW5hbWVzIGhlcmUuXG4gICAgY29uc3QgZnJvbU5hbWUgPSB0aGlzLm1vZGVsTmFtZVxuICAgIGNvbnN0IGZyb21Qcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0eU5hbWVzXG4gICAgY29uc3QgdG9OYW1lID0gdG9SZWYubW9kZWxOYW1lXG4gICAgY29uc3QgdG9Qcm9wZXJ0aWVzID0gdG9SZWYucHJvcGVydHlOYW1lc1xuICAgIGlmIChmcm9tUHJvcGVydGllcy5sZW5ndGggIT09IHRvUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBSZWxhdGlvbkVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHRocm91Z2ggam9pbiBmb3IgJyArXG4gICAgICAgIGBjb21wb3NpdGUga2V5cyBmcm9tICcke3RoaXN9JyB0byAnJHt0b1JlZn0nYClcbiAgICB9XG4gICAgY29uc3QgZnJvbSA9IFtdXG4gICAgY29uc3QgdG8gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZyb21Qcm9wZXJ0eSA9IGZyb21Qcm9wZXJ0aWVzW2ldXG4gICAgICBjb25zdCB0b1Byb3BlcnR5ID0gdG9Qcm9wZXJ0aWVzW2ldXG4gICAgICBpZiAoZnJvbVByb3BlcnR5ICYmIHRvUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgdGhyb3VnaE5hbWUgPSBgJHtmcm9tTmFtZX0ke3RvTmFtZX1gXG4gICAgICAgIGNvbnN0IHRocm91Z2hGcm9tID0gdGhpcy5nZXRUaHJvdWdoUHJvcGVydHkoZnJvbU5hbWUsIGZyb21Qcm9wZXJ0eSlcbiAgICAgICAgY29uc3QgdGhyb3VnaFRvID0gdGhpcy5nZXRUaHJvdWdoUHJvcGVydHkodG9OYW1lLCB0b1Byb3BlcnR5KVxuICAgICAgICBmcm9tLnB1c2goYCR7dGhyb3VnaE5hbWV9LiR7dGhyb3VnaEZyb219YClcbiAgICAgICAgdG8ucHVzaChgJHt0aHJvdWdoTmFtZX0uJHt0aHJvdWdoVG99YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBSZWxhdGlvbkVycm9yKFxuICAgICAgICAgIGBVbmFibGUgdG8gY3JlYXRlIHRocm91Z2ggam9pbiBmcm9tICcke3RoaXN9JyB0byAnJHt0b30nYClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHRoaXMuYXNWYWx1ZShpbnZlcnNlID8gdG8gOiBmcm9tKSxcbiAgICAgIHRvOiB0aGlzLmFzVmFsdWUoaW52ZXJzZSA/IGZyb20gOiB0bylcbiAgICB9XG4gIH1cblxuICBnZXRUaHJvdWdoUHJvcGVydHkobmFtZSwgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gYCR7bmFtZVswXS50b0xvd2VyQ2FzZSgpfSR7bmFtZS5zbGljZSgxKX0ke2NhcGl0YWxpemUocHJvcGVydHkpfWBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25DbGFzcyhyZWxhdGlvbikge1xuICByZXR1cm4gaXNTdHJpbmcocmVsYXRpb24pXG4gICAgPyByZWxhdGlvbkxvb2t1cFtjYW1lbGl6ZShyZWxhdGlvbildIHx8IHJlbGF0aW9uQ2xhc3Nlc1tyZWxhdGlvbl1cbiAgICA6IFJlbGF0aW9uLmlzUHJvdG90eXBlT2YocmVsYXRpb24pXG4gICAgICA/IHJlbGF0aW9uXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGhyb3VnaFJlbGF0aW9uQ2xhc3MocmVsYXRpb25DbGFzcykge1xuICByZXR1cm4gdGhyb3VnaFJlbGF0aW9uQ2xhc3Nlc1tyZWxhdGlvbkNsYXNzLm5hbWVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmVsYXRpb24oc2NoZW1hLCBtb2RlbHMpIHtcbiAgbGV0IHtcbiAgICByZWxhdGlvbixcbiAgICAvLyBEaXRvLmpzLXN0eWxlIHJlbGF0aW9uIGRlc2NyaXB0aW9uOlxuICAgIGZyb20sIHRvLCB0aHJvdWdoLCBpbnZlcnNlLCBtb2RpZnksIHNjb3BlLFxuICAgIC8vIE9iamVjdGlvbi5qcy1zdHlsZSByZWxhdGlvbiBkZXNjcmlwdGlvbiAoYG1vZGlmeWAgaXMgc2hhcmVkKVxuICAgIGpvaW4sIGZpbHRlcixcbiAgICAvLyBQbHVjayBEaXRvLmpzLXJlbGF0ZWQgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgZW5kIHVwIGluIGByZXN0YDpcbiAgICBudWxsYWJsZSwgb3duZXIsXG4gICAgLi4ucmVzdFxuICB9ID0gc2NoZW1hIHx8IHt9XG4gIGNvbnN0IHJlbGF0aW9uQ2xhc3MgPSBnZXRSZWxhdGlvbkNsYXNzKHJlbGF0aW9uKVxuICBpZiAoIXJlbGF0aW9uQ2xhc3MpIHtcbiAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcihgVW5yZWNvZ25pemVkIHJlbGF0aW9uOiAke3JlbGF0aW9ufWApXG4gIH0gZWxzZSBpZiAoam9pbiAmJiAhaXNTdHJpbmcocmVsYXRpb24pKSB7XG4gICAgLy8gT3JpZ2luYWwgT2JqZWN0aW9uLmpzLXN0eWxlIHJlbGF0aW9uLCBqdXN0IHBhc3MgdGhyb3VnaFxuICAgIHJldHVybiBzY2hlbWFcbiAgfSBlbHNlIHtcbiAgICAvLyBEaXRvLmpzLXN0eWxlIHJlbGF0aW9uLCBlLmcuOlxuICAgIC8vIHtcbiAgICAvLyAgIHJlbGF0aW9uOiAnaGFzTWFueScsXG4gICAgLy8gICBmcm9tOiAnRnJvbU1vZGVsLnByaW1hcnlLZXlQcm9wZXJ0eU5hbWUnLFxuICAgIC8vICAgdG86ICdUb01vZGVsLmZvcmVpZ25LZXlQcm9wZXJ0eU5hbWUnLFxuICAgIC8vICAgc2NvcGU6ICdsYXRlc3QnXG4gICAgLy8gfVxuICAgIGZyb20gPSBuZXcgTW9kZWxSZWZlcmVuY2UoZnJvbSwgbW9kZWxzLCBmYWxzZSlcbiAgICB0byA9IG5ldyBNb2RlbFJlZmVyZW5jZSh0bywgbW9kZWxzLCBmYWxzZSlcbiAgICBpZiAoaXNUaHJvdWdoUmVsYXRpb25DbGFzcyhyZWxhdGlvbkNsYXNzKSkge1xuICAgICAgaWYgKCF0aHJvdWdoKSB7XG4gICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgdGhlIHRocm91Z2ggc2V0dGluZ3MsIHNlZSBidWlsZFRocm91Z2goKTpcbiAgICAgICAgdGhyb3VnaCA9IGludmVyc2VcbiAgICAgICAgICA/IHRvLmJ1aWxkVGhyb3VnaChmcm9tLCB0cnVlKVxuICAgICAgICAgIDogZnJvbS5idWlsZFRocm91Z2godG8sIGZhbHNlKVxuICAgICAgfSBlbHNlIGlmICh0aHJvdWdoLmZyb20gJiYgdGhyb3VnaC50bykge1xuICAgICAgICAvLyBgdGhyb3VnaC5mcm9tYCBhbmQgYHRocm91Z2gudG9gIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nLCB3aGVyZSB0aGV5XG4gICAgICAgIC8vIGNhbiBlaXRoZXIgYmUgbW9kZWwgcmVmZXJlbmNlcyBvciB0YWJsZSByZWZlcmVuY2VzLCBhbmQgaWYgdGhleVxuICAgICAgICAvLyByZWZlcmVuY2UgbW9kZWxzLCB0aGV5IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdGFibGUgcmVmZXJlbmNlcyBhbmRcbiAgICAgICAgLy8gdGhlIG1vZGVsIHNob3VsZCBiZSBleHRyYWN0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgICAgY29uc3QgdGhyb3VnaEZyb20gPSBuZXcgTW9kZWxSZWZlcmVuY2UodGhyb3VnaC5mcm9tLCBtb2RlbHMsIHRydWUpXG4gICAgICAgIGNvbnN0IHRocm91Z2hUbyA9IG5ldyBNb2RlbFJlZmVyZW5jZSh0aHJvdWdoLnRvLCBtb2RlbHMsIHRydWUpXG4gICAgICAgIGlmICh0aHJvdWdoRnJvbS5tb2RlbENsYXNzIHx8IHRocm91Z2hUby5tb2RlbENsYXNzKSB7XG4gICAgICAgICAgaWYgKHRocm91Z2hGcm9tLm1vZGVsQ2xhc3MgPT09IHRocm91Z2hUby5tb2RlbENsYXNzKSB7XG4gICAgICAgICAgICB0aHJvdWdoLm1vZGVsQ2xhc3MgPSB0aHJvdWdoVG8ubW9kZWxDbGFzc1xuICAgICAgICAgICAgdGhyb3VnaC5mcm9tID0gdGhyb3VnaEZyb20udG9WYWx1ZSgpXG4gICAgICAgICAgICB0aHJvdWdoLnRvID0gdGhyb3VnaFRvLnRvVmFsdWUoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcignQm90aCBzaWRlcyBvZiB0aGUgYHRocm91Z2hgIGRlZmluaXRpb24gJyArXG4gICAgICAgICAgICAgICduZWVkIHRvIGJlIG9uIHRoZSBzYW1lIGpvaW4gbW9kZWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIHJlZmVyZW5jZXMgYXJlIHRvIGEgam9pbiB0YWJsZSwgYW5kIHVzZSB0aGUgc2V0dGluZ3NcbiAgICAgICAgICAvLyB1bm1vZGlmaWVkLlxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcignVGhlIHJlbGF0aW9uIG5lZWRzIGEgYHRocm91Z2guZnJvbWAgYW5kICcgK1xuICAgICAgICAgICdgdGhyb3VnaC50b2AgZGVmaW5pdGlvbicpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aHJvdWdoKSB7XG4gICAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcignVW5zdXBwb3J0ZWQgdGhyb3VnaCBqb2luIGRlZmluaXRpb24nKVxuICAgIH1cbiAgICAvLyBDb21iaW5lIGBtb2RpZnlgIGFuZCBgZmlsdGVyYC4gU2V0dGluZyBib3RoIHRvZ2V0aGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgbW9kaWZ5ID0gbW9kaWZ5IHx8IGZpbHRlclxuICAgIGlmIChpc09iamVjdChtb2RpZnkpKSB7XG4gICAgICAvLyBDb252ZXJ0IGEgZmluZC1maWx0ZXIgb2JqZWN0IHRvIGEgZmlsdGVyIGZ1bmN0aW9uLCBzYW1lIGFzIGluIHRoZVxuICAgICAgLy8gaGFuZGxpbmcgb2YgZGVmaW5pdGlvbi5zY29wZXMsIHNlZSBNb2RlbC5qc1xuICAgICAgbW9kaWZ5ID0gcXVlcnkgPT4gcXVlcnkuZmluZChtb2RpZnkpXG4gICAgfVxuICAgIGlmIChzY29wZSkge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1vZGlmeSBmdW5jdGlvbiB0aGF0IG1lcmdlcyBzY29wZSBhbmQgbW9kaWZ5IHRoZW06XG4gICAgICBjb25zdCBvcmlnTW9kaWZ5ID0gbW9kaWZ5XG4gICAgICBtb2RpZnkgPSBxdWVyeSA9PiB7XG4gICAgICAgIHF1ZXJ5LmFwcGx5U2NvcGUoc2NvcGUpXG4gICAgICAgIGlmIChvcmlnTW9kaWZ5KSB7XG4gICAgICAgICAgcXVlcnkubW9kaWZ5KG9yaWdNb2RpZnkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbGF0aW9uOiByZWxhdGlvbkNsYXNzLFxuICAgICAgbW9kZWxDbGFzczogdG8ubW9kZWxDbGFzcyxcbiAgICAgIGpvaW46IHtcbiAgICAgICAgZnJvbTogZnJvbS50b1ZhbHVlKCksXG4gICAgICAgIHRvOiB0by50b1ZhbHVlKCksXG4gICAgICAgIC4uLih0aHJvdWdoICYmIHsgdGhyb3VnaCB9KVxuICAgICAgfSxcbiAgICAgIC4uLihtb2RpZnkgJiYgeyBtb2RpZnkgfSksXG4gICAgICAuLi5yZXN0XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmVsYXRpb25zKG93bmVyTW9kZWxDbGFzcywgcmVsYXRpb25zLCBtb2RlbHMpIHtcbiAgY29uc3QgY29udmVydGVkID0ge31cbiAgZm9yIChjb25zdCBbbmFtZSwgcmVsYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHJlbGF0aW9ucykpIHtcbiAgICB0cnkge1xuICAgICAgY29udmVydGVkW25hbWVdID0gY29udmVydFJlbGF0aW9uKHJlbGF0aW9uLCBtb2RlbHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcihcbiAgICAgICAgYCR7b3duZXJNb2RlbENsYXNzLm5hbWV9LnJlbGF0aW9ucy4ke25hbWV9OiAkeyhlcnIubWVzc2FnZSB8fCBlcnIpfWApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBBZGRzIEpTT04gc2NoZW1hIHByb3BlcnRpZXMgZm9yIGVhY2ggb2YgdGhlIG1vZGVsQ2xhc3MnIHJlbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlbGF0aW9uU2NoZW1hcyhtb2RlbENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gIGZvciAoY29uc3QgcmVsYXRpb25JbnN0YW5jZSBvZiBPYmplY3QudmFsdWVzKG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKCkpKSB7XG4gICAgY29uc3QgeyBuYW1lLCBvd25lck1vZGVsQ2xhc3MsIHJlbGF0ZWRNb2RlbENsYXNzIH0gPSByZWxhdGlvbkluc3RhbmNlXG4gICAgY29uc3QgcmVsYXRpb25EZWZpbml0aW9uID0gb3duZXJNb2RlbENsYXNzLmRlZmluaXRpb24ucmVsYXRpb25zW25hbWVdXG4gICAgY29uc3QgaXNPbmVUb09uZSA9IHJlbGF0aW9uSW5zdGFuY2UuaXNPbmVUb09uZSgpXG4gICAgY29uc3QgeyBvd25lciB9ID0gcmVsYXRpb25EZWZpbml0aW9uXG4gICAgY29uc3QgJHJlZiA9IHJlbGF0ZWRNb2RlbENsYXNzLm5hbWVcbiAgICBjb25zdCBhbnlPZiA9IFtdXG4gICAgaWYgKGlzT25lVG9PbmUpIHtcbiAgICAgIC8vIEFsbG93IG51bGwtdmFsdWUgb24gb25lLXRvLW9uZSByZWxhdGlvbnNcbiAgICAgIGFueU9mLnB1c2goe1xuICAgICAgICB0eXBlOiAnbnVsbCdcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmICghb3duZXIpIHtcbiAgICAgIC8vIEFsbG93IHJlZmVyZW5jZSBvYmplY3RzIGZvciByZWxhdGlvbnMgdGhhdCBkb24ndCBvd24gdGhlaXIgZGF0YS5cbiAgICAgIGFueU9mLnB1c2goe1xuICAgICAgICByZWxhdGU6ICRyZWZcbiAgICAgIH0pXG4gICAgfVxuICAgIC8vIEZpbmFsbHkgdGhlIG1vZGVsIGl0c2VsZlxuICAgIGFueU9mLnB1c2goeyAkcmVmIH0pXG4gICAgY29uc3QgaXRlbXMgPSBhbnlPZi5sZW5ndGggPiAxXG4gICAgICA/IHsgYW55T2YgfVxuICAgICAgOiBhbnlPZlswXVxuICAgIHByb3BlcnRpZXNbbmFtZV0gPSBpc09uZVRvT25lXG4gICAgICA/IGl0ZW1zXG4gICAgICA6IHtcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgaXRlbXNcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcGVydGllc1xufVxuIl19
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _objection = require("objection");
|
|
4
|
-
|
|
5
|
-
var _models = require("../models");
|
|
6
|
-
|
|
7
|
-
var _relations = require("./relations");
|
|
8
|
-
|
|
9
|
-
describe('getRelationClass()', () => {
|
|
10
|
-
it('returns the corresponding relation classes', () => {
|
|
11
|
-
expect((0, _relations.getRelationClass)('belongs-to')).toBe(_objection.BelongsToOneRelation);
|
|
12
|
-
expect((0, _relations.getRelationClass)('has-one')).toBe(_objection.HasOneRelation);
|
|
13
|
-
expect((0, _relations.getRelationClass)('has-one-through')).toBe(_objection.HasOneThroughRelation);
|
|
14
|
-
expect((0, _relations.getRelationClass)('has-many')).toBe(_objection.HasManyRelation);
|
|
15
|
-
expect((0, _relations.getRelationClass)('many-to-many')).toBe(_objection.ManyToManyRelation);
|
|
16
|
-
expect((0, _relations.getRelationClass)('belongsTo')).toBe(_objection.BelongsToOneRelation);
|
|
17
|
-
expect((0, _relations.getRelationClass)('hasOne')).toBe(_objection.HasOneRelation);
|
|
18
|
-
expect((0, _relations.getRelationClass)('hasOneThrough')).toBe(_objection.HasOneThroughRelation);
|
|
19
|
-
expect((0, _relations.getRelationClass)('hasMany')).toBe(_objection.HasManyRelation);
|
|
20
|
-
expect((0, _relations.getRelationClass)('manyToMany')).toBe(_objection.ManyToManyRelation);
|
|
21
|
-
expect((0, _relations.getRelationClass)('BelongsToOneRelation')).toBe(_objection.BelongsToOneRelation);
|
|
22
|
-
expect((0, _relations.getRelationClass)('HasOneRelation')).toBe(_objection.HasOneRelation);
|
|
23
|
-
expect((0, _relations.getRelationClass)('HasOneThroughRelation')).toBe(_objection.HasOneThroughRelation);
|
|
24
|
-
expect((0, _relations.getRelationClass)('HasManyRelation')).toBe(_objection.HasManyRelation);
|
|
25
|
-
expect((0, _relations.getRelationClass)('ManyToManyRelation')).toBe(_objection.ManyToManyRelation);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('convertRelation()', () => {
|
|
29
|
-
class ModelOne extends _models.Model {}
|
|
30
|
-
|
|
31
|
-
class ModelTwo extends _models.Model {}
|
|
32
|
-
|
|
33
|
-
const models = {
|
|
34
|
-
ModelOne,
|
|
35
|
-
ModelTwo
|
|
36
|
-
};
|
|
37
|
-
it('converts a belongs-to relation to Objection.js format', () => {
|
|
38
|
-
expect((0, _relations.convertRelation)({
|
|
39
|
-
relation: 'belongs-to',
|
|
40
|
-
from: 'ModelOne.modelTwoId',
|
|
41
|
-
to: 'ModelTwo.id',
|
|
42
|
-
modify: 'myScope'
|
|
43
|
-
}, models)).toEqual({
|
|
44
|
-
relation: _objection.BelongsToOneRelation,
|
|
45
|
-
modelClass: ModelTwo,
|
|
46
|
-
join: {
|
|
47
|
-
from: 'ModelOne.modelTwoId',
|
|
48
|
-
to: 'ModelTwo.id'
|
|
49
|
-
},
|
|
50
|
-
modify: 'myScope'
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
it('converts a many-to-many relation to Objection.js format', () => {
|
|
54
|
-
expect((0, _relations.convertRelation)({
|
|
55
|
-
relation: 'many-to-many',
|
|
56
|
-
from: 'ModelOne.id',
|
|
57
|
-
to: 'ModelTwo.id',
|
|
58
|
-
inverse: false
|
|
59
|
-
}, models)).toEqual({
|
|
60
|
-
relation: _objection.ManyToManyRelation,
|
|
61
|
-
modelClass: ModelTwo,
|
|
62
|
-
join: {
|
|
63
|
-
from: 'ModelOne.id',
|
|
64
|
-
through: {
|
|
65
|
-
from: 'ModelOneModelTwo.modelOneId',
|
|
66
|
-
to: 'ModelOneModelTwo.modelTwoId'
|
|
67
|
-
},
|
|
68
|
-
to: 'ModelTwo.id'
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
it('converts an inverse many-to-many relation to Objection.js format', () => {
|
|
73
|
-
expect((0, _relations.convertRelation)({
|
|
74
|
-
relation: 'many-to-many',
|
|
75
|
-
from: 'ModelTwo.id',
|
|
76
|
-
to: 'ModelOne.id',
|
|
77
|
-
inverse: true
|
|
78
|
-
}, models)).toEqual({
|
|
79
|
-
relation: _objection.ManyToManyRelation,
|
|
80
|
-
modelClass: ModelOne,
|
|
81
|
-
join: {
|
|
82
|
-
from: 'ModelTwo.id',
|
|
83
|
-
through: {
|
|
84
|
-
from: 'ModelOneModelTwo.modelTwoId',
|
|
85
|
-
to: 'ModelOneModelTwo.modelOneId'
|
|
86
|
-
},
|
|
87
|
-
to: 'ModelOne.id'
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
it('preserves Objection.js relation format', () => {
|
|
92
|
-
const relation = {
|
|
93
|
-
relation: _objection.BelongsToOneRelation,
|
|
94
|
-
modelClass: ModelTwo,
|
|
95
|
-
join: {
|
|
96
|
-
from: 'ModelOne.modelTwoId',
|
|
97
|
-
to: 'ModelTwo.id'
|
|
98
|
-
},
|
|
99
|
-
modify: 'myScope'
|
|
100
|
-
};
|
|
101
|
-
expect((0, _relations.convertRelation)(relation, models)).toEqual(relation);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('addRelationSchemas()', () => {
|
|
105
|
-
class ModelOne extends _models.Model {}
|
|
106
|
-
|
|
107
|
-
ModelOne.relations = {
|
|
108
|
-
modelTwo: {
|
|
109
|
-
relation: 'belongs-to',
|
|
110
|
-
from: 'ModelOne.modelTwoId',
|
|
111
|
-
to: 'ModelTwo.id'
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
class ModelTwo extends _models.Model {}
|
|
116
|
-
|
|
117
|
-
ModelTwo.relations = {
|
|
118
|
-
modelOnes: {
|
|
119
|
-
relation: 'has-many',
|
|
120
|
-
from: 'ModelTwo.id',
|
|
121
|
-
to: 'ModelOne.modelTwoId',
|
|
122
|
-
owner: true
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
ModelOne.app = ModelTwo.app = {
|
|
126
|
-
models: {
|
|
127
|
-
ModelOne,
|
|
128
|
-
ModelTwo
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
it('adds correct property schema for a belongs-to relation', () => {
|
|
132
|
-
expect((0, _relations.addRelationSchemas)(ModelOne, {})).toEqual({
|
|
133
|
-
modelTwo: {
|
|
134
|
-
anyOf: [{
|
|
135
|
-
type: 'null'
|
|
136
|
-
}, {
|
|
137
|
-
relate: 'ModelTwo'
|
|
138
|
-
}, {
|
|
139
|
-
$ref: 'ModelTwo'
|
|
140
|
-
}]
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
it('adds correct property schema for a has-many owner relation', () => {
|
|
145
|
-
expect((0, _relations.addRelationSchemas)(ModelTwo, {})).toEqual({
|
|
146
|
-
modelOnes: {
|
|
147
|
-
type: 'array',
|
|
148
|
-
items: {
|
|
149
|
-
$ref: 'ModelOne'
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcmVsYXRpb25zLnRlc3QuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvQmUiLCJCZWxvbmdzVG9PbmVSZWxhdGlvbiIsIkhhc09uZVJlbGF0aW9uIiwiSGFzT25lVGhyb3VnaFJlbGF0aW9uIiwiSGFzTWFueVJlbGF0aW9uIiwiTWFueVRvTWFueVJlbGF0aW9uIiwiTW9kZWxPbmUiLCJNb2RlbCIsIk1vZGVsVHdvIiwibW9kZWxzIiwicmVsYXRpb24iLCJmcm9tIiwidG8iLCJtb2RpZnkiLCJ0b0VxdWFsIiwibW9kZWxDbGFzcyIsImpvaW4iLCJpbnZlcnNlIiwidGhyb3VnaCIsInJlbGF0aW9ucyIsIm1vZGVsVHdvIiwibW9kZWxPbmVzIiwib3duZXIiLCJhcHAiLCJhbnlPZiIsInR5cGUiLCJyZWxhdGUiLCIkcmVmIiwiaXRlbXMiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBT0E7O0FBQ0E7O0FBSUFBLFFBQVEsQ0FBQyxvQkFBRCxFQUF1QixNQUFNO0FBQ25DQyxFQUFBQSxFQUFFLENBQUMsNENBQUQsRUFBK0MsTUFBTTtBQUNyREMsSUFBQUEsTUFBTSxDQUFDLGlDQUFpQixZQUFqQixDQUFELENBQU4sQ0FBdUNDLElBQXZDLENBQTRDQywrQkFBNUM7QUFDQUYsSUFBQUEsTUFBTSxDQUFDLGlDQUFpQixTQUFqQixDQUFELENBQU4sQ0FBb0NDLElBQXBDLENBQXlDRSx5QkFBekM7QUFDQUgsSUFBQUEsTUFBTSxDQUFDLGlDQUFpQixpQkFBakIsQ0FBRCxDQUFOLENBQTRDQyxJQUE1QyxDQUFpREcsZ0NBQWpEO0FBQ0FKLElBQUFBLE1BQU0sQ0FBQyxpQ0FBaUIsVUFBakIsQ0FBRCxDQUFOLENBQXFDQyxJQUFyQyxDQUEwQ0ksMEJBQTFDO0FBQ0FMLElBQUFBLE1BQU0sQ0FBQyxpQ0FBaUIsY0FBakIsQ0FBRCxDQUFOLENBQXlDQyxJQUF6QyxDQUE4Q0ssNkJBQTlDO0FBRUFOLElBQUFBLE1BQU0s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Q00sT0FBekMsQ0FBaUQ7QUFDL0NPLE1BQUFBLFNBQVMsRUFBRTtBQUNUSSxRQUFBQSxJQUFJLEVBQUUsT0FERztBQUVURyxRQUFBQSxLQUFLLEVBQUU7QUFBRUQsVUFBQUEsSUFBSSxFQUFFO0FBQVI7QUFGRTtBQURvQyxLQUFqRDtBQU1ELEdBUEMsQ0FBRjtBQVFELENBL0NPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCZWxvbmdzVG9PbmVSZWxhdGlvbixcbiAgSGFzT25lUmVsYXRpb24sXG4gIEhhc09uZVRocm91Z2hSZWxhdGlvbixcbiAgSGFzTWFueVJlbGF0aW9uLFxuICBNYW55VG9NYW55UmVsYXRpb25cbn0gZnJvbSAnb2JqZWN0aW9uJ1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAL21vZGVscydcbmltcG9ydCB7XG4gIGdldFJlbGF0aW9uQ2xhc3MsIGNvbnZlcnRSZWxhdGlvbiwgYWRkUmVsYXRpb25TY2hlbWFzXG59IGZyb20gJy4vcmVsYXRpb25zJ1xuXG5kZXNjcmliZSgnZ2V0UmVsYXRpb25DbGFzcygpJywgKCkgPT4ge1xuICBpdCgncmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiBjbGFzc2VzJywgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdiZWxvbmdzLXRvJykpLnRvQmUoQmVsb25nc1RvT25lUmVsYXRpb24pXG4gICAgZXhwZWN0KGdldFJlbGF0aW9uQ2xhc3MoJ2hhcy1vbmUnKSkudG9CZShIYXNPbmVSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnaGFzLW9uZS10aHJvdWdoJykpLnRvQmUoSGFzT25lVGhyb3VnaFJlbGF0aW9uKVxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdoYXMtbWFueScpKS50b0JlKEhhc01hbnlSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnbWFueS10by1tYW55JykpLnRvQmUoTWFueVRvTWFueVJlbGF0aW9uKVxuXG4gICAgZXhwZWN0KGdldFJlbGF0aW9uQ2xhc3MoJ2JlbG9uZ3NUbycpKS50b0JlKEJlbG9uZ3NUb09uZVJlbGF0aW9uKVxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdoYXNPbmUnKSkudG9CZShIYXNPbmVSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnaGFzT25lVGhyb3VnaCcpKS50b0JlKEhhc09uZVRocm91Z2hSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnaGFzTWFueScpKS50b0JlKEhhc01hbnlSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnbWFueVRvTWFueScpKS50b0JlKE1hbnlUb01hbnlSZWxhdGlvbilcblxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdCZWxvbmdzVG9PbmVSZWxhdGlvbicpKS50b0JlKEJlbG9uZ3NUb09uZVJlbGF0aW9uKVxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdIYXNPbmVSZWxhdGlvbicpKS50b0JlKEhhc09uZVJlbGF0aW9uKVxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdIYXNPbmVUaHJvdWdoUmVsYXRpb24nKSlcbiAgICAgIC50b0JlKEhhc09uZVRocm91Z2hSZWxhdGlvbilcbiAgICBleHBlY3QoZ2V0UmVsYXRpb25DbGFzcygnSGFzTWFueVJlbGF0aW9uJykpLnRvQmUoSGFzTWFueVJlbGF0aW9uKVxuICAgIGV4cGVjdChnZXRSZWxhdGlvbkNsYXNzKCdNYW55VG9NYW55UmVsYXRpb24nKSkudG9CZShNYW55VG9NYW55UmVsYXRpb24pXG4gIH0pXG59KVxuXG5kZXNjcmliZSgnY29udmVydFJlbGF0aW9uKCknLCAoKSA9PiB7XG4gIGNsYXNzIE1vZGVsT25lIGV4dGVuZHMgTW9kZWwge31cbiAgY2xhc3MgTW9kZWxUd28gZXh0ZW5kcyBNb2RlbCB7fVxuXG4gIGNvbnN0IG1vZGVscyA9IHsgTW9kZWxPbmUsIE1vZGVsVHdvIH1cblxuICBpdCgnY29udmVydHMgYSBiZWxvbmdzLXRvIHJlbGF0aW9uIHRvIE9iamVjdGlvbi5qcyBmb3JtYXQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNvbnZlcnRSZWxhdGlvbih7XG4gICAgICByZWxhdGlvbjogJ2JlbG9uZ3MtdG8nLFxuICAgICAgZnJvbTogJ01vZGVsT25lLm1vZGVsVHdvSWQnLFxuICAgICAgdG86ICdNb2RlbFR3by5pZCcsXG4gICAgICBtb2RpZnk6ICdteVNjb3BlJ1xuICAgIH0sIG1vZGVscykpLnRvRXF1YWwoe1xuICAgICAgcmVsYXRpb246IEJlbG9uZ3NUb09uZVJlbGF0aW9uLFxuICAgICAgbW9kZWxDbGFzczogTW9kZWxUd28sXG4gICAgICBqb2luOiB7XG4gICAgICAgIGZyb206ICdNb2RlbE9uZS5tb2RlbFR3b0lkJyxcbiAgICAgICAgdG86ICdNb2RlbFR3by5pZCdcbiAgICAgIH0sXG4gICAgICBtb2RpZnk6ICdteVNjb3BlJ1xuICAgIH0pXG4gIH0pXG5cbiAgaXQoJ2NvbnZlcnRzIGEgbWFueS10by1tYW55IHJlbGF0aW9uIHRvIE9iamVjdGlvbi5qcyBmb3JtYXQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNvbnZlcnRSZWxhdGlvbih7XG4gICAgICByZWxhdGlvbjogJ21hbnktdG8tbWFueScsXG4gICAgICBmcm9tOiAnTW9kZWxPbmUuaWQnLFxuICAgICAgdG86ICdNb2RlbFR3by5pZCcsXG4gICAgICBpbnZlcnNlOiBmYWxzZVxuICAgIH0sIG1vZGVscykpLnRvRXF1YWwoe1xuICAgICAgcmVsYXRpb246IE1hbnlUb01hbnlSZWxhdGlvbixcbiAgICAgIG1vZGVsQ2xhc3M6IE1vZGVsVHdvLFxuICAgICAgam9pbjoge1xuICAgICAgICBmcm9tOiAnTW9kZWxPbmUuaWQnLFxuICAgICAgICB0aHJvdWdoOiB7XG4gICAgICAgICAgZnJvbTogJ01vZGVsT25lTW9kZWxUd28ubW9kZWxPbmVJZCcsXG4gICAgICAgICAgdG86ICdNb2RlbE9uZU1vZGVsVHdvLm1vZGVsVHdvSWQnXG4gICAgICAgIH0sXG4gICAgICAgIHRvOiAnTW9kZWxUd28uaWQnXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBpdCgnY29udmVydHMgYW4gaW52ZXJzZSBtYW55LXRvLW1hbnkgcmVsYXRpb24gdG8gT2JqZWN0aW9uLmpzIGZvcm1hdCcsICgpID0+IHtcbiAgICBleHBlY3QoY29udmVydFJlbGF0aW9uKHtcbiAgICAgIHJlbGF0aW9uOiAnbWFueS10by1tYW55JyxcbiAgICAgIGZyb206ICdNb2RlbFR3by5pZCcsXG4gICAgICB0bzogJ01vZGVsT25lLmlkJyxcbiAgICAgIGludmVyc2U6IHRydWVcbiAgICB9LCBtb2RlbHMpKS50b0VxdWFsKHtcbiAgICAgIHJlbGF0aW9uOiBNYW55VG9NYW55UmVsYXRpb24sXG4gICAgICBtb2RlbENsYXNzOiBNb2RlbE9uZSxcbiAgICAgIGpvaW46IHtcbiAgICAgICAgZnJvbTogJ01vZGVsVHdvLmlkJyxcbiAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgIGZyb206ICdNb2RlbE9uZU1vZGVsVHdvLm1vZGVsVHdvSWQnLFxuICAgICAgICAgIHRvOiAnTW9kZWxPbmVNb2RlbFR3by5tb2RlbE9uZUlkJ1xuICAgICAgICB9LFxuICAgICAgICB0bzogJ01vZGVsT25lLmlkJ1xuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgaXQoJ3ByZXNlcnZlcyBPYmplY3Rpb24uanMgcmVsYXRpb24gZm9ybWF0JywgKCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uID0ge1xuICAgICAgcmVsYXRpb246IEJlbG9uZ3NUb09uZVJlbGF0aW9uLFxuICAgICAgbW9kZWxDbGFzczogTW9kZWxUd28sXG4gICAgICBqb2luOiB7XG4gICAgICAgIGZyb206ICdNb2RlbE9uZS5tb2RlbFR3b0lkJyxcbiAgICAgICAgdG86ICdNb2RlbFR3by5pZCdcbiAgICAgIH0sXG4gICAgICBtb2RpZnk6ICdteVNjb3BlJ1xuICAgIH1cbiAgICBleHBlY3QoY29udmVydFJlbGF0aW9uKHJlbGF0aW9uLCBtb2RlbHMpKS50b0VxdWFsKHJlbGF0aW9uKVxuICB9KVxufSlcblxuZGVzY3JpYmUoJ2FkZFJlbGF0aW9uU2NoZW1hcygpJywgKCkgPT4ge1xuICBjbGFzcyBNb2RlbE9uZSBleHRlbmRzIE1vZGVsIHtcbiAgICBzdGF0aWMgcmVsYXRpb25zID0ge1xuICAgICAgbW9kZWxUd286IHtcbiAgICAgICAgcmVsYXRpb246ICdiZWxvbmdzLXRvJyxcbiAgICAgICAgZnJvbTogJ01vZGVsT25lLm1vZGVsVHdvSWQnLFxuICAgICAgICB0bzogJ01vZGVsVHdvLmlkJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE1vZGVsVHdvIGV4dGVuZHMgTW9kZWwge1xuICAgIHN0YXRpYyByZWxhdGlvbnMgPSB7XG4gICAgICBtb2RlbE9uZXM6IHtcbiAgICAgICAgcmVsYXRpb246ICdoYXMtbWFueScsXG4gICAgICAgIGZyb206ICdNb2RlbFR3by5pZCcsXG4gICAgICAgIHRvOiAnTW9kZWxPbmUubW9kZWxUd29JZCcsXG4gICAgICAgIG93bmVyOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGEgbW9jayBhcHAgdG8gYm90aCwgdG8gZXhwb3NlIG1vZGVsczpcbiAgTW9kZWxPbmUuYXBwID0gTW9kZWxUd28uYXBwID0ge1xuICAgIG1vZGVsczogeyBNb2RlbE9uZSwgTW9kZWxUd28gfVxuICB9XG5cbiAgaXQoJ2FkZHMgY29ycmVjdCBwcm9wZXJ0eSBzY2hlbWEgZm9yIGEgYmVsb25ncy10byByZWxhdGlvbicsICgpID0+IHtcbiAgICBleHBlY3QoYWRkUmVsYXRpb25TY2hlbWFzKE1vZGVsT25lLCB7fSkpLnRvRXF1YWwoe1xuICAgICAgbW9kZWxUd286IHtcbiAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICB7IHR5cGU6ICdudWxsJyB9LFxuICAgICAgICAgIHsgcmVsYXRlOiAnTW9kZWxUd28nIH0sXG4gICAgICAgICAgeyAkcmVmOiAnTW9kZWxUd28nIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgaXQoJ2FkZHMgY29ycmVjdCBwcm9wZXJ0eSBzY2hlbWEgZm9yIGEgaGFzLW1hbnkgb3duZXIgcmVsYXRpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFkZFJlbGF0aW9uU2NoZW1hcyhNb2RlbFR3bywge30pKS50b0VxdWFsKHtcbiAgICAgIG1vZGVsT25lczoge1xuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBpdGVtczogeyAkcmVmOiAnTW9kZWxPbmUnIH1cbiAgICAgIH1cbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
|
package/lib/services/Service.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.Service = void 0;
|
|
5
|
-
|
|
6
|
-
var _utils = require("@ditojs/utils");
|
|
7
|
-
|
|
8
|
-
class Service {
|
|
9
|
-
constructor(app, name) {
|
|
10
|
-
this.app = app;
|
|
11
|
-
this.name = (0, _utils.camelize)((name || this.constructor.name).match(/^(.*?)(?:Service|)$/)[1]);
|
|
12
|
-
this.config = null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
setup(config) {
|
|
16
|
-
this.config = config;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
initialize() {}
|
|
20
|
-
|
|
21
|
-
async start() {}
|
|
22
|
-
|
|
23
|
-
async stop() {}
|
|
24
|
-
|
|
25
|
-
getLogger(ctx) {
|
|
26
|
-
return ctx.logger.child({
|
|
27
|
-
name: this.name
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
exports.Service = Service;
|
|
34
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9TZXJ2aWNlLmpzIl0sIm5hbWVzIjpbIlNlcnZpY2UiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWUiLCJtYXRjaCIsImNvbmZpZyIsInNldHVwIiwiaW5pdGlhbGl6ZSIsInN0YXJ0Iiwic3RvcCIsImdldExvZ2dlciIsImN0eCIsImxvZ2dlciIsImNoaWxkIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVPLE1BQU1BLE9BQU4sQ0FBYztBQUNuQkMsRUFBQUEsV0FBVyxDQUFDQyxHQUFELEVBQU1DLElBQU4sRUFBWTtBQUNyQixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxJQUFMLEdBQVkscUJBQ1YsQ0FBQ0EsSUFBSSxJQUFJLEtBQUtGLFdBQUwsQ0FBaUJFLElBQTFCLEVBQWdDQyxLQUFoQyxDQUFzQyxxQkFBdEMsRUFBNkQsQ0FBN0QsQ0FEVSxDQUFaO0FBR0EsU0FBS0MsTUFBTCxHQUFjLElBQWQ7QUFDRDs7QUFFREMsRUFBQUEsS0FBSyxDQUFDRCxNQUFELEVBQVM7QUFDWixTQUFLQSxNQUFMLEdBQWNBLE1BQWQ7QUFDRDs7QUFHREUsRUFBQUEsVUFBVSxHQUFHLENBQ1o7O0FBR1UsUUFBTEMsS0FBSyxHQUFHLENBQ2I7O0FBR1MsUUFBSkMsSUFBSSxHQUFHLENBQ1o7O0FBRURDLEVBQUFBLFNBQVMsQ0FBQ0MsR0FBRCxFQUFNO0FBQ2IsV0FBT0EsR0FBRyxDQUFDQyxNQUFKLENBQVdDLEtBQVgsQ0FBaUI7QUFBRVYsTUFBQUEsSUFBSSxFQUFFLEtBQUtBO0FBQWIsS0FBakIsQ0FBUDtBQUNEOztBQTNCa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoYXBwLCBuYW1lKSB7XG4gICAgdGhpcy5hcHAgPSBhcHBcbiAgICB0aGlzLm5hbWUgPSBjYW1lbGl6ZShcbiAgICAgIChuYW1lIHx8IHRoaXMuY29uc3RydWN0b3IubmFtZSkubWF0Y2goL14oLio/KSg/OlNlcnZpY2V8KSQvKVsxXVxuICAgIClcbiAgICB0aGlzLmNvbmZpZyA9IG51bGxcbiAgfVxuXG4gIHNldHVwKGNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gIH1cblxuICAvLyBAb3ZlcnJpZGFibGVcbiAgaW5pdGlhbGl6ZSgpIHtcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBhc3luYyBzdGFydCgpIHtcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBhc3luYyBzdG9wKCkge1xuICB9XG5cbiAgZ2V0TG9nZ2VyKGN0eCkge1xuICAgIHJldHVybiBjdHgubG9nZ2VyLmNoaWxkKHsgbmFtZTogdGhpcy5uYW1lIH0pXG4gIH1cbn1cbiJdfQ==
|
package/lib/services/index.js
DELETED
|
@@ -1,18 +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 _Service = require("./Service");
|
|
12
|
-
|
|
13
|
-
Object.keys(_Service).forEach(function (key) {
|
|
14
|
-
if (key === "default" || key === "__esModule") return;
|
|
15
|
-
if (key in exports && exports[key] === _Service[key]) return;
|
|
16
|
-
exports[key] = _Service[key];
|
|
17
|
-
});
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vU2VydmljZSdcbiJdfQ==
|
package/lib/storage/AssetFile.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.AssetFile = void 0;
|
|
5
|
-
|
|
6
|
-
var _path = _interopRequireDefault(require("path"));
|
|
7
|
-
|
|
8
|
-
var _mimeTypes = _interopRequireDefault(require("mime-types"));
|
|
9
|
-
|
|
10
|
-
var _dataUriToBuffer = _interopRequireDefault(require("data-uri-to-buffer"));
|
|
11
|
-
|
|
12
|
-
var _uuid = require("uuid");
|
|
13
|
-
|
|
14
|
-
var _utils = require("@ditojs/utils");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
const SYMBOL_STORAGE = Symbol('storage');
|
|
19
|
-
const SYMBOL_DATA = Symbol('data');
|
|
20
|
-
|
|
21
|
-
class AssetFile {
|
|
22
|
-
constructor(name, data, type) {
|
|
23
|
-
this.key = AssetFile.getUniqueKey(name);
|
|
24
|
-
this.name = name;
|
|
25
|
-
this.type = type;
|
|
26
|
-
this.data = data;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
get storage() {
|
|
30
|
-
return this[SYMBOL_STORAGE] || null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
get data() {
|
|
34
|
-
return this[SYMBOL_DATA] || null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
set data(data) {
|
|
38
|
-
if ((0, _utils.isString)(data)) {
|
|
39
|
-
if (data.startsWith('data:')) {
|
|
40
|
-
data = (0, _dataUriToBuffer.default)(data);
|
|
41
|
-
this.type || (this.type = data.type || _mimeTypes.default.lookup(this.name));
|
|
42
|
-
} else {
|
|
43
|
-
data = Buffer.from(data);
|
|
44
|
-
this.type || (this.type = _mimeTypes.default.lookup(this.name) || 'text/plain');
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
data = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
48
|
-
this.type || (this.type = data.type || _mimeTypes.default.lookup(this.name) || 'application/octet-stream');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
this.size = Buffer.byteLength(data);
|
|
52
|
-
setHiddenProperty(this, SYMBOL_DATA, data);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
get path() {
|
|
56
|
-
var _this$storage;
|
|
57
|
-
|
|
58
|
-
return (_this$storage = this.storage) == null ? void 0 : _this$storage.getFilePath(this);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async read() {
|
|
62
|
-
var _this$storage2;
|
|
63
|
-
|
|
64
|
-
return ((_this$storage2 = this.storage) == null ? void 0 : _this$storage2.readFile(this)) || null;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
static convert(object, storage) {
|
|
68
|
-
Object.setPrototypeOf(object, AssetFile.prototype);
|
|
69
|
-
setHiddenProperty(object, SYMBOL_STORAGE, storage);
|
|
70
|
-
return object;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
static create({
|
|
74
|
-
name,
|
|
75
|
-
data,
|
|
76
|
-
type
|
|
77
|
-
}) {
|
|
78
|
-
return new AssetFile(name, data, type);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
static getUniqueKey(name) {
|
|
82
|
-
return `${(0, _uuid.v4)()}${_path.default.extname(name).toLowerCase()}`;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
exports.AssetFile = AssetFile;
|
|
88
|
-
|
|
89
|
-
function setHiddenProperty(object, key, value) {
|
|
90
|
-
Object.defineProperty(object, key, {
|
|
91
|
-
configurable: true,
|
|
92
|
-
enumerable: false,
|
|
93
|
-
writable: true,
|
|
94
|
-
value
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL0Fzc2V0RmlsZS5qcyJdLCJuYW1lcyI6WyJTWU1CT0xfU1RPUkFHRSIsIlN5bWJvbCIsIlNZTUJPTF9EQVRBIiwiQXNzZXRGaWxlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZGF0YSIsInR5cGUiLCJrZXkiLCJnZXRVbmlxdWVLZXkiLCJzdG9yYWdlIiwic3RhcnRzV2l0aCIsIm1pbWUiLCJsb29rdXAiLCJCdWZmZXIiLCJmcm9tIiwiaXNCdWZmZXIiLCJzaXplIiwiYnl0ZUxlbmd0aCIsInNldEhpZGRlblByb3BlcnR5IiwicGF0aCIsImdldEZpbGVQYXRoIiwicmVhZCIsInJlYWRGaWxlIiwiY29udmVydCIsIm9iamVjdCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiY3JlYXRlIiwiZXh0bmFtZSIsInRvTG93ZXJDYXNlIiwidmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLGNBQWMsR0FBR0MsTUFBTSxDQUFDLFNBQUQsQ0FBN0I7QUFDQSxNQUFNQyxXQUFXLEdBQUdELE1BQU0sQ0FBQyxNQUFELENBQTFCOztBQUVPLE1BQU1FLFNBQU4sQ0FBZ0I7QUFDckJDLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEVBQWFDLElBQWIsRUFBbUI7QUFDNUIsU0FBS0MsR0FBTCxHQUFXTCxTQUFTLENBQUNNLFlBQVYsQ0FBdUJKLElBQXZCLENBQVg7QUFDQSxTQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFFQSxTQUFLRSxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLRCxJQUFMLEdBQVlBLElBQVo7QUFDRDs7QUFFVSxNQUFQSSxPQUFPLEdBQUc7QUFDWixXQUFPLEtBQUtWLGNBQUwsS0FBd0IsSUFBL0I7QUFDRDs7QUFFTyxNQUFKTSxJQUFJLEdBQUc7QUFDVCxXQUFPLEtBQUtKLFdBQUwsS0FBcUIsSUFBNUI7QUFDRDs7QUFFTyxNQUFKSSxJQUFJLENBQUNBLElBQUQsRUFBTztBQUNiLFFBQUkscUJBQVNBLElBQVQsQ0FBSixFQUFvQjtBQUNsQixVQUFJQSxJQUFJLENBQUNLLFVBQUwsQ0FBZ0IsT0FBaEIsQ0FBSixFQUE4QjtBQUM1QkwsUUFBQUEsSUFBSSxHQUFHLDhCQUFnQkEsSUFBaEIsQ0FBUDtBQUNBLGFBQUtDLElBQUwsVUFBS0EsSUFBTCxHQUFjRCxJQUFJLENBQUNDLElBQUwsSUFBYUssbUJBQUtDLE1BQUwsQ0FBWSxLQUFLUixJQUFqQixDQUEzQjtBQUNELE9BSEQsTUFHTztBQUNMQyxRQUFBQSxJQUFJLEdBQUdRLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZVCxJQUFaLENBQVA7QUFDQSxhQUFLQyxJQUFMLFVBQUtBLElBQUwsR0FBY0ssbUJBQUtDLE1BQUwsQ0FBWSxLQUFLUixJQUFqQixLQUEwQixZQUF4QztBQUNEO0FBQ0YsS0FSRCxNQVFPO0FBRUxDLE1BQUFBLElBQUksR0FBR1EsTUFBTSxDQUFDRSxRQUFQLENBQWdCVixJQUFoQixJQUF3QkEsSUFBeEIsR0FBK0JRLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZVCxJQUFaLENBQXRDO0FBQ0EsV0FBS0MsSUFBTCxVQUFLQSxJQUFMLEdBQ0VELElBQUksQ0FBQ0MsSUFBTCxJQUNBSyxtQkFBS0MsTUFBTCxDQUFZLEtBQUtSLElBQWpCLENBREEsSUFFQSwwQkFIRjtBQUtEOztBQUNELFNBQUtZLElBQUwsR0FBWUgsTUFBTSxDQUFDSSxVQUFQLENBQWtCWixJQUFsQixDQUFaO0FBQ0FhLElBQUFBLGlCQUFpQixDQUFDLElBQUQsRUFBT2pCLFdBQVAsRUFBb0JJLElBQXBCLENBQWpCO0FBQ0Q7O0FBRU8sTUFBSmMsSUFBSSxHQUFHO0FBQUE7O0FBQ1QsNEJBQU8sS0FBS1YsT0FBWixxQkFBTyxjQUFjVyxXQUFkLENBQTBCLElBQTFCLENBQVA7QUFDRDs7QUFFUyxRQUFKQyxJQUFJLEdBQUc7QUFBQTs7QUFDWCxXQUFPLHdCQUFLWixPQUFMLG9DQUFjYSxRQUFkLENBQXVCLElBQXZCLE1BQWdDLElBQXZDO0FBQ0Q7O0FBRWEsU0FBUEMsT0FBTyxDQUFDQyxNQUFELEVBQVNmLE9BQVQsRUFBa0I7QUFDOUJnQixJQUFBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JGLE1BQXRCLEVBQThCdEIsU0FBUyxDQUFDeUIsU0FBeEM7QUFDQVQsSUFBQUEsaUJBQWlCLENBQUNNLE1BQUQsRUFBU3pCLGNBQVQsRUFBeUJVLE9BQXpCLENBQWpCO0FBQ0EsV0FBT2UsTUFBUDtBQUNEOztBQUVZLFNBQU5JLE1BQU0sQ0FBQztBQUFFeEIsSUFBQUEsSUFBRjtBQUFRQyxJQUFBQSxJQUFSO0FBQWNDLElBQUFBO0FBQWQsR0FBRCxFQUF1QjtBQUNsQyxXQUFPLElBQUlKLFNBQUosQ0FBY0UsSUFBZCxFQUFvQkMsSUFBcEIsRUFBMEJDLElBQTFCLENBQVA7QUFDRDs7QUFFa0IsU0FBWkUsWUFBWSxDQUFDSixJQUFELEVBQU87QUFDeEIsV0FBUSxHQUFFLGVBQVMsR0FBRWUsY0FBS1UsT0FBTCxDQUFhekIsSUFBYixFQUFtQjBCLFdBQW5CLEVBQWlDLEVBQXREO0FBQ0Q7O0FBM0RvQjs7OztBQThEdkIsU0FBU1osaUJBQVQsQ0FBMkJNLE1BQTNCLEVBQW1DakIsR0FBbkMsRUFBd0N3QixLQUF4QyxFQUErQztBQUM3Q04sRUFBQUEsTUFBTSxDQUFDTyxjQUFQLENBQXNCUixNQUF0QixFQUE4QmpCLEdBQTlCLEVBQW1DO0FBQ2pDMEIsSUFBQUEsWUFBWSxFQUFFLElBRG1CO0FBRWpDQyxJQUFBQSxVQUFVLEVBQUUsS0FGcUI7QUFHakNDLElBQUFBLFFBQVEsRUFBRSxJQUh1QjtBQUlqQ0osSUFBQUE7QUFKaUMsR0FBbkM7QUFNRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IGRhdGFVcmlUb0J1ZmZlciBmcm9tICdkYXRhLXVyaS10by1idWZmZXInXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCBTWU1CT0xfU1RPUkFHRSA9IFN5bWJvbCgnc3RvcmFnZScpXG5jb25zdCBTWU1CT0xfREFUQSA9IFN5bWJvbCgnZGF0YScpXG5cbmV4cG9ydCBjbGFzcyBBc3NldEZpbGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkYXRhLCB0eXBlKSB7XG4gICAgdGhpcy5rZXkgPSBBc3NldEZpbGUuZ2V0VW5pcXVlS2V5KG5hbWUpXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIC8vIFNldCBgdHlwZWAgYmVmb3JlIGBkYXRhYCwgc28gaXQgY2FuIGJlIHVzZWQgYXMgZGVmYXVsdCBpbiBgc2V0IGRhdGFgXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgfVxuXG4gIGdldCBzdG9yYWdlKCkge1xuICAgIHJldHVybiB0aGlzW1NZTUJPTF9TVE9SQUdFXSB8fCBudWxsXG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpc1tTWU1CT0xfREFUQV0gfHwgbnVsbFxuICB9XG5cbiAgc2V0IGRhdGEoZGF0YSkge1xuICAgIGlmIChpc1N0cmluZyhkYXRhKSkge1xuICAgICAgaWYgKGRhdGEuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICBkYXRhID0gZGF0YVVyaVRvQnVmZmVyKGRhdGEpXG4gICAgICAgIHRoaXMudHlwZSB8fD0gZGF0YS50eXBlIHx8IG1pbWUubG9va3VwKHRoaXMubmFtZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgICB0aGlzLnR5cGUgfHw9IG1pbWUubG9va3VwKHRoaXMubmFtZSkgfHwgJ3RleHQvcGxhaW4nXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJ1ZmZlciAmIGNvLlxuICAgICAgZGF0YSA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEgOiBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgdGhpcy50eXBlIHx8PSAoXG4gICAgICAgIGRhdGEudHlwZSB8fFxuICAgICAgICBtaW1lLmxvb2t1cCh0aGlzLm5hbWUpIHx8XG4gICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICApXG4gICAgfVxuICAgIHRoaXMuc2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgc2V0SGlkZGVuUHJvcGVydHkodGhpcywgU1lNQk9MX0RBVEEsIGRhdGEpXG4gIH1cblxuICBnZXQgcGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlPy5nZXRGaWxlUGF0aCh0aGlzKVxuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlPy5yZWFkRmlsZSh0aGlzKSB8fCBudWxsXG4gIH1cblxuICBzdGF0aWMgY29udmVydChvYmplY3QsIHN0b3JhZ2UpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0LCBBc3NldEZpbGUucHJvdG90eXBlKVxuICAgIHNldEhpZGRlblByb3BlcnR5KG9iamVjdCwgU1lNQk9MX1NUT1JBR0UsIHN0b3JhZ2UpXG4gICAgcmV0dXJuIG9iamVjdFxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZSh7IG5hbWUsIGRhdGEsIHR5cGUgfSkge1xuICAgIHJldHVybiBuZXcgQXNzZXRGaWxlKG5hbWUsIGRhdGEsIHR5cGUpXG4gIH1cblxuICBzdGF0aWMgZ2V0VW5pcXVlS2V5KG5hbWUpIHtcbiAgICByZXR1cm4gYCR7dXVpZHY0KCl9JHtwYXRoLmV4dG5hbWUobmFtZSkudG9Mb3dlckNhc2UoKX1gXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0SGlkZGVuUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICB2YWx1ZVxuICB9KVxufVxuIl19
|