parse-server 4.10.2 → 5.0.0-alpha.2
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/README.md +450 -153
- package/lib/AccountLockout.js +23 -2
- package/lib/Adapters/AdapterLoader.js +1 -1
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +1 -1
- package/lib/Adapters/Auth/AuthAdapter.js +1 -1
- package/lib/Adapters/Auth/OAuth1Client.js +1 -1
- package/lib/Adapters/Auth/facebook.js +110 -10
- package/lib/Adapters/Auth/gcenter.js +1 -1
- package/lib/Adapters/Auth/gpgames.js +1 -1
- package/lib/Adapters/Auth/instagram.js +4 -2
- package/lib/Adapters/Auth/keycloak.js +1 -1
- package/lib/Adapters/Auth/ldap.js +3 -1
- package/lib/Adapters/Auth/oauth2.js +1 -1
- package/lib/Adapters/Auth/phantauth.js +1 -1
- package/lib/Adapters/Cache/CacheAdapter.js +1 -1
- package/lib/Adapters/Cache/RedisCacheAdapter.js +143 -0
- package/lib/Adapters/Cache/SchemaCache.js +31 -0
- package/lib/Adapters/Email/MailAdapter.js +1 -1
- package/lib/Adapters/Files/FilesAdapter.js +1 -1
- package/lib/Adapters/Files/GridFSBucketAdapter.js +1 -1
- package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
- package/lib/Adapters/Logger/LoggerAdapter.js +1 -1
- package/lib/Adapters/Logger/WinstonLogger.js +4 -4
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +5 -1
- package/lib/Adapters/PubSub/PubSubAdapter.js +1 -1
- package/lib/Adapters/Push/PushAdapter.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +51 -11
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +9 -6
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +11 -1
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +91 -57
- package/lib/Adapters/WebSocketServer/WSAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +1 -1
- package/lib/Auth.js +2 -39
- package/lib/Config.js +149 -8
- package/lib/Controllers/AdaptableController.js +1 -9
- package/lib/Controllers/CacheController.js +1 -1
- package/lib/Controllers/DatabaseController.js +148 -44
- package/lib/Controllers/FilesController.js +1 -1
- package/lib/Controllers/HooksController.js +2 -2
- package/lib/Controllers/LiveQueryController.js +16 -3
- package/lib/Controllers/LoggerController.js +1 -1
- package/lib/Controllers/ParseGraphQLController.js +2 -2
- package/lib/Controllers/PushController.js +1 -1
- package/lib/Controllers/SchemaController.js +101 -88
- package/lib/Controllers/UserController.js +16 -5
- package/lib/Controllers/index.js +10 -11
- package/lib/Deprecator/Deprecations.js +28 -0
- package/lib/Deprecator/Deprecator.js +135 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +71 -39
- package/lib/GraphQL/ParseGraphQLServer.js +3 -3
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +4 -7
- package/lib/GraphQL/loaders/defaultRelaySchema.js +3 -3
- package/lib/GraphQL/loaders/filesMutations.js +2 -2
- package/lib/GraphQL/loaders/functionsMutations.js +9 -5
- package/lib/GraphQL/loaders/parseClassMutations.js +21 -9
- package/lib/GraphQL/loaders/parseClassQueries.js +9 -6
- package/lib/GraphQL/loaders/parseClassTypes.js +5 -5
- package/lib/GraphQL/loaders/schemaDirectives.js +1 -1
- package/lib/GraphQL/loaders/schemaMutations.js +8 -6
- package/lib/GraphQL/loaders/schemaQueries.js +6 -4
- package/lib/GraphQL/loaders/usersMutations.js +65 -7
- package/lib/GraphQL/transformers/constraintType.js +2 -2
- package/lib/GraphQL/transformers/inputType.js +2 -2
- package/lib/GraphQL/transformers/mutation.js +45 -10
- package/lib/GraphQL/transformers/outputType.js +2 -2
- package/lib/GraphQL/transformers/query.js +2 -2
- package/lib/GraphQL/transformers/schemaFields.js +1 -1
- package/lib/KeyPromiseQueue.js +59 -0
- package/lib/LiveQuery/Client.js +1 -1
- package/lib/LiveQuery/Id.js +1 -1
- package/lib/LiveQuery/ParseLiveQueryServer.js +158 -38
- package/lib/LiveQuery/ParseWebSocketServer.js +2 -2
- package/lib/LiveQuery/QueryTools.js +50 -1
- package/lib/LiveQuery/equalObjects.js +1 -1
- package/lib/Options/Definitions.js +220 -33
- package/lib/Options/docs.js +79 -21
- package/lib/Options/index.js +3 -1
- package/lib/Page.js +53 -0
- package/lib/ParseServer.js +37 -16
- package/lib/ParseServerRESTController.js +55 -45
- package/lib/PromiseRouter.js +7 -20
- package/lib/Push/PushQueue.js +1 -1
- package/lib/Push/PushWorker.js +2 -2
- package/lib/Push/utils.js +1 -1
- package/lib/RestQuery.js +45 -9
- package/lib/RestWrite.js +60 -10
- package/lib/Routers/AggregateRouter.js +23 -18
- package/lib/Routers/AudiencesRouter.js +2 -2
- package/lib/Routers/ClassesRouter.js +11 -11
- package/lib/Routers/CloudCodeRouter.js +1 -1
- package/lib/Routers/FeaturesRouter.js +2 -2
- package/lib/Routers/FilesRouter.js +34 -7
- package/lib/Routers/FunctionsRouter.js +2 -2
- package/lib/Routers/GlobalConfigRouter.js +2 -2
- package/lib/Routers/GraphQLRouter.js +3 -3
- package/lib/Routers/HooksRouter.js +2 -2
- package/lib/Routers/LogsRouter.js +2 -2
- package/lib/Routers/PagesRouter.js +722 -0
- package/lib/Routers/PurgeRouter.js +2 -2
- package/lib/Routers/PushRouter.js +3 -3
- package/lib/Routers/SchemasRouter.js +2 -2
- package/lib/Routers/SecurityRouter.js +47 -0
- package/lib/Routers/SessionsRouter.js +4 -2
- package/lib/Routers/UsersRouter.js +88 -17
- package/lib/Security/Check.js +118 -0
- package/lib/Security/CheckGroup.js +54 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +57 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +82 -0
- package/lib/Security/CheckGroups/CheckGroups.js +24 -0
- package/lib/Security/CheckRunner.js +236 -0
- package/lib/StatusHandler.js +27 -36
- package/lib/TestUtils.js +1 -1
- package/lib/Utils.js +226 -0
- package/lib/batch.js +55 -44
- package/lib/cli/utils/commander.js +8 -3
- package/lib/cloud-code/HTTPResponse.js +1 -1
- package/lib/cloud-code/Parse.Cloud.js +155 -19
- package/lib/cloud-code/httpRequest.js +1 -1
- package/lib/index.js +6 -12
- package/lib/middlewares.js +39 -4
- package/lib/rest.js +4 -4
- package/lib/triggers.js +134 -121
- package/lib/vendor/mongodbUrl.js +8 -10
- package/package.json +54 -29
- package/CHANGELOG.md +0 -1769
- package/lib/Adapters/Cache/RedisCacheAdapter/KeyPromiseQueue.js +0 -59
- package/lib/Adapters/Cache/RedisCacheAdapter/index.js +0 -130
- package/lib/Controllers/SchemaCache.js +0 -75
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.KeyPromiseQueue = void 0;
|
|
7
|
-
|
|
8
|
-
// KeyPromiseQueue is a simple promise queue
|
|
9
|
-
// used to queue operations per key basis.
|
|
10
|
-
// Once the tail promise in the key-queue fulfills,
|
|
11
|
-
// the chain on that key will be cleared.
|
|
12
|
-
class KeyPromiseQueue {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.queue = {};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
enqueue(key, operation) {
|
|
18
|
-
const tuple = this.beforeOp(key);
|
|
19
|
-
const toAwait = tuple[1];
|
|
20
|
-
const nextOperation = toAwait.then(operation);
|
|
21
|
-
const wrappedOperation = nextOperation.then(result => {
|
|
22
|
-
this.afterOp(key);
|
|
23
|
-
return result;
|
|
24
|
-
});
|
|
25
|
-
tuple[1] = wrappedOperation;
|
|
26
|
-
return wrappedOperation;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
beforeOp(key) {
|
|
30
|
-
let tuple = this.queue[key];
|
|
31
|
-
|
|
32
|
-
if (!tuple) {
|
|
33
|
-
tuple = [0, Promise.resolve()];
|
|
34
|
-
this.queue[key] = tuple;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
tuple[0]++;
|
|
38
|
-
return tuple;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
afterOp(key) {
|
|
42
|
-
const tuple = this.queue[key];
|
|
43
|
-
|
|
44
|
-
if (!tuple) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
tuple[0]--;
|
|
49
|
-
|
|
50
|
-
if (tuple[0] <= 0) {
|
|
51
|
-
delete this.queue[key];
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
exports.KeyPromiseQueue = KeyPromiseQueue;
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci9LZXlQcm9taXNlUXVldWUuanMiXSwibmFtZXMiOlsiS2V5UHJvbWlzZVF1ZXVlIiwiY29uc3RydWN0b3IiLCJxdWV1ZSIsImVucXVldWUiLCJrZXkiLCJvcGVyYXRpb24iLCJ0dXBsZSIsImJlZm9yZU9wIiwidG9Bd2FpdCIsIm5leHRPcGVyYXRpb24iLCJ0aGVuIiwid3JhcHBlZE9wZXJhdGlvbiIsInJlc3VsdCIsImFmdGVyT3AiLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsZUFBTixDQUFzQjtBQUMzQkMsRUFBQUEsV0FBVyxHQUFHO0FBQ1osU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDRDs7QUFFREMsRUFBQUEsT0FBTyxDQUFDQyxHQUFELEVBQU1DLFNBQU4sRUFBaUI7QUFDdEIsVUFBTUMsS0FBSyxHQUFHLEtBQUtDLFFBQUwsQ0FBY0gsR0FBZCxDQUFkO0FBQ0EsVUFBTUksT0FBTyxHQUFHRixLQUFLLENBQUMsQ0FBRCxDQUFyQjtBQUNBLFVBQU1HLGFBQWEsR0FBR0QsT0FBTyxDQUFDRSxJQUFSLENBQWFMLFNBQWIsQ0FBdEI7QUFDQSxVQUFNTSxnQkFBZ0IsR0FBR0YsYUFBYSxDQUFDQyxJQUFkLENBQW1CRSxNQUFNLElBQUk7QUFDcEQsV0FBS0MsT0FBTCxDQUFhVCxHQUFiO0FBQ0EsYUFBT1EsTUFBUDtBQUNELEtBSHdCLENBQXpCO0FBSUFOLElBQUFBLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBV0ssZ0JBQVg7QUFDQSxXQUFPQSxnQkFBUDtBQUNEOztBQUVESixFQUFBQSxRQUFRLENBQUNILEdBQUQsRUFBTTtBQUNaLFFBQUlFLEtBQUssR0FBRyxLQUFLSixLQUFMLENBQVdFLEdBQVgsQ0FBWjs7QUFDQSxRQUFJLENBQUNFLEtBQUwsRUFBWTtBQUNWQSxNQUFBQSxLQUFLLEdBQUcsQ0FBQyxDQUFELEVBQUlRLE9BQU8sQ0FBQ0MsT0FBUixFQUFKLENBQVI7QUFDQSxXQUFLYixLQUFMLENBQVdFLEdBQVgsSUFBa0JFLEtBQWxCO0FBQ0Q7O0FBQ0RBLElBQUFBLEtBQUssQ0FBQyxDQUFELENBQUw7QUFDQSxXQUFPQSxLQUFQO0FBQ0Q7O0FBRURPLEVBQUFBLE9BQU8sQ0FBQ1QsR0FBRCxFQUFNO0FBQ1gsVUFBTUUsS0FBSyxHQUFHLEtBQUtKLEtBQUwsQ0FBV0UsR0FBWCxDQUFkOztBQUNBLFFBQUksQ0FBQ0UsS0FBTCxFQUFZO0FBQ1Y7QUFDRDs7QUFDREEsSUFBQUEsS0FBSyxDQUFDLENBQUQsQ0FBTDs7QUFDQSxRQUFJQSxLQUFLLENBQUMsQ0FBRCxDQUFMLElBQVksQ0FBaEIsRUFBbUI7QUFDakIsYUFBTyxLQUFLSixLQUFMLENBQVdFLEdBQVgsQ0FBUDtBQUNBO0FBQ0Q7QUFDRjs7QUFyQzBCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gS2V5UHJvbWlzZVF1ZXVlIGlzIGEgc2ltcGxlIHByb21pc2UgcXVldWVcbi8vIHVzZWQgdG8gcXVldWUgb3BlcmF0aW9ucyBwZXIga2V5IGJhc2lzLlxuLy8gT25jZSB0aGUgdGFpbCBwcm9taXNlIGluIHRoZSBrZXktcXVldWUgZnVsZmlsbHMsXG4vLyB0aGUgY2hhaW4gb24gdGhhdCBrZXkgd2lsbCBiZSBjbGVhcmVkLlxuZXhwb3J0IGNsYXNzIEtleVByb21pc2VRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSB7fTtcbiAgfVxuXG4gIGVucXVldWUoa2V5LCBvcGVyYXRpb24pIHtcbiAgICBjb25zdCB0dXBsZSA9IHRoaXMuYmVmb3JlT3Aoa2V5KTtcbiAgICBjb25zdCB0b0F3YWl0ID0gdHVwbGVbMV07XG4gICAgY29uc3QgbmV4dE9wZXJhdGlvbiA9IHRvQXdhaXQudGhlbihvcGVyYXRpb24pO1xuICAgIGNvbnN0IHdyYXBwZWRPcGVyYXRpb24gPSBuZXh0T3BlcmF0aW9uLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuYWZ0ZXJPcChrZXkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICB0dXBsZVsxXSA9IHdyYXBwZWRPcGVyYXRpb247XG4gICAgcmV0dXJuIHdyYXBwZWRPcGVyYXRpb247XG4gIH1cblxuICBiZWZvcmVPcChrZXkpIHtcbiAgICBsZXQgdHVwbGUgPSB0aGlzLnF1ZXVlW2tleV07XG4gICAgaWYgKCF0dXBsZSkge1xuICAgICAgdHVwbGUgPSBbMCwgUHJvbWlzZS5yZXNvbHZlKCldO1xuICAgICAgdGhpcy5xdWV1ZVtrZXldID0gdHVwbGU7XG4gICAgfVxuICAgIHR1cGxlWzBdKys7XG4gICAgcmV0dXJuIHR1cGxlO1xuICB9XG5cbiAgYWZ0ZXJPcChrZXkpIHtcbiAgICBjb25zdCB0dXBsZSA9IHRoaXMucXVldWVba2V5XTtcbiAgICBpZiAoIXR1cGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHR1cGxlWzBdLS07XG4gICAgaWYgKHR1cGxlWzBdIDw9IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnF1ZXVlW2tleV07XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = exports.RedisCacheAdapter = void 0;
|
|
7
|
-
|
|
8
|
-
var _redis = _interopRequireDefault(require("redis"));
|
|
9
|
-
|
|
10
|
-
var _logger = _interopRequireDefault(require("../../../logger"));
|
|
11
|
-
|
|
12
|
-
var _KeyPromiseQueue = require("./KeyPromiseQueue");
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
const DEFAULT_REDIS_TTL = 30 * 1000; // 30 seconds in milliseconds
|
|
17
|
-
|
|
18
|
-
const FLUSH_DB_KEY = '__flush_db__';
|
|
19
|
-
|
|
20
|
-
function debug() {
|
|
21
|
-
_logger.default.debug.apply(_logger.default, ['RedisCacheAdapter', ...arguments]);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const isValidTTL = ttl => typeof ttl === 'number' && ttl > 0;
|
|
25
|
-
|
|
26
|
-
class RedisCacheAdapter {
|
|
27
|
-
constructor(redisCtx, ttl = DEFAULT_REDIS_TTL) {
|
|
28
|
-
this.ttl = isValidTTL(ttl) ? ttl : DEFAULT_REDIS_TTL;
|
|
29
|
-
this.client = _redis.default.createClient(redisCtx);
|
|
30
|
-
this.queue = new _KeyPromiseQueue.KeyPromiseQueue();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
handleShutdown() {
|
|
34
|
-
if (!this.client) {
|
|
35
|
-
return Promise.resolve();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return new Promise(resolve => {
|
|
39
|
-
this.client.quit(err => {
|
|
40
|
-
if (err) {
|
|
41
|
-
_logger.default.error('RedisCacheAdapter error on shutdown', {
|
|
42
|
-
error: err
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
resolve();
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
get(key) {
|
|
52
|
-
debug('get', key);
|
|
53
|
-
return this.queue.enqueue(key, () => new Promise(resolve => {
|
|
54
|
-
this.client.get(key, function (err, res) {
|
|
55
|
-
debug('-> get', key, res);
|
|
56
|
-
|
|
57
|
-
if (!res) {
|
|
58
|
-
return resolve(null);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
resolve(JSON.parse(res));
|
|
62
|
-
});
|
|
63
|
-
}));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
put(key, value, ttl = this.ttl) {
|
|
67
|
-
value = JSON.stringify(value);
|
|
68
|
-
debug('put', key, value, ttl);
|
|
69
|
-
|
|
70
|
-
if (ttl === 0) {
|
|
71
|
-
// ttl of zero is a logical no-op, but redis cannot set expire time of zero
|
|
72
|
-
return this.queue.enqueue(key, () => Promise.resolve());
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (ttl === Infinity) {
|
|
76
|
-
return this.queue.enqueue(key, () => new Promise(resolve => {
|
|
77
|
-
this.client.set(key, value, function () {
|
|
78
|
-
resolve();
|
|
79
|
-
});
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (!isValidTTL(ttl)) {
|
|
84
|
-
ttl = this.ttl;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return this.queue.enqueue(key, () => new Promise(resolve => {
|
|
88
|
-
this.client.psetex(key, ttl, value, function () {
|
|
89
|
-
resolve();
|
|
90
|
-
});
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
del(key) {
|
|
95
|
-
debug('del', key);
|
|
96
|
-
return this.queue.enqueue(key, () => new Promise(resolve => {
|
|
97
|
-
this.client.del(key, function () {
|
|
98
|
-
resolve();
|
|
99
|
-
});
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
clear() {
|
|
104
|
-
debug('clear');
|
|
105
|
-
return this.queue.enqueue(FLUSH_DB_KEY, () => new Promise(resolve => {
|
|
106
|
-
this.client.flushdb(function () {
|
|
107
|
-
resolve();
|
|
108
|
-
});
|
|
109
|
-
}));
|
|
110
|
-
} // Used for testing
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
async getAllKeys() {
|
|
114
|
-
return new Promise((resolve, reject) => {
|
|
115
|
-
this.client.keys('*', (err, keys) => {
|
|
116
|
-
if (err) {
|
|
117
|
-
reject(err);
|
|
118
|
-
} else {
|
|
119
|
-
resolve(keys);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
exports.RedisCacheAdapter = RedisCacheAdapter;
|
|
128
|
-
var _default = RedisCacheAdapter;
|
|
129
|
-
exports.default = _default;
|
|
130
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci9pbmRleC5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1JFRElTX1RUTCIsIkZMVVNIX0RCX0tFWSIsImRlYnVnIiwibG9nZ2VyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJpc1ZhbGlkVFRMIiwidHRsIiwiUmVkaXNDYWNoZUFkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsInJlZGlzQ3R4IiwiY2xpZW50IiwicmVkaXMiLCJjcmVhdGVDbGllbnQiLCJxdWV1ZSIsIktleVByb21pc2VRdWV1ZSIsImhhbmRsZVNodXRkb3duIiwiUHJvbWlzZSIsInJlc29sdmUiLCJxdWl0IiwiZXJyIiwiZXJyb3IiLCJnZXQiLCJrZXkiLCJlbnF1ZXVlIiwicmVzIiwiSlNPTiIsInBhcnNlIiwicHV0IiwidmFsdWUiLCJzdHJpbmdpZnkiLCJJbmZpbml0eSIsInNldCIsInBzZXRleCIsImRlbCIsImNsZWFyIiwiZmx1c2hkYiIsImdldEFsbEtleXMiLCJyZWplY3QiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxpQkFBaUIsR0FBRyxLQUFLLElBQS9CLEMsQ0FBcUM7O0FBQ3JDLE1BQU1DLFlBQVksR0FBRyxjQUFyQjs7QUFFQSxTQUFTQyxLQUFULEdBQWlCO0FBQ2ZDLGtCQUFPRCxLQUFQLENBQWFFLEtBQWIsQ0FBbUJELGVBQW5CLEVBQTJCLENBQUMsbUJBQUQsRUFBc0IsR0FBR0UsU0FBekIsQ0FBM0I7QUFDRDs7QUFFRCxNQUFNQyxVQUFVLEdBQUdDLEdBQUcsSUFBSSxPQUFPQSxHQUFQLEtBQWUsUUFBZixJQUEyQkEsR0FBRyxHQUFHLENBQTNEOztBQUVPLE1BQU1DLGlCQUFOLENBQXdCO0FBQzdCQyxFQUFBQSxXQUFXLENBQUNDLFFBQUQsRUFBV0gsR0FBRyxHQUFHUCxpQkFBakIsRUFBb0M7QUFDN0MsU0FBS08sR0FBTCxHQUFXRCxV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Q1gsR0FBRCxFQUFNO0FBQ1ByQixJQUFBQSxLQUFLLENBQUMsS0FBRCxFQUFRcUIsR0FBUixDQUFMO0FBQ0EsV0FBTyxLQUFLVCxLQUFMLENBQVdVLE9BQVgsQ0FDTEQsR0FESyxFQUVMLE1BQ0UsSUFBSU4sT0FBSixDQUFZQyxPQUFPLElBQUk7QUFDckIsV0FBS1AsTUFBTCxDQUFZdUIsR0FBWixDQUFnQlgsR0FBaEIsRUFBcUIsWUFBWTtBQUMvQkwsUUFBQUEsT0FBTztBQUNSLE9BRkQ7QUFHRCxLQUpELENBSEcsQ0FBUDtBQVNEOztBQUVEaUIsRUFBQUEsS0FBSyxHQUFHO0FBQ05qQyxJQUFBQSxLQUFLLENBQUMsT0FBRCxDQUFMO0FBQ0EsV0FBTyxLQUFLWSxLQUFMLENBQVdVLE9BQVgsQ0FDTHZCLFlBREssRUFFTCxNQUNFLElBQUlnQixPQUFKLENBQVlDLE9BQU8sSUFBSTtBQUNyQixXQUFLUCxNQUFMLENBQVl5QixPQUFaLENBQW9CLFlBQVk7QUFDOUJsQixRQUFBQSxPQUFPO0FBQ1IsT0FGRDtBQUdELEtBSkQsQ0FIRyxDQUFQO0FBU0QsR0FsRzRCLENBb0c3Qjs7O0FBQ0EsUUFBTW1CLFVBQU4sR0FBbUI7QUFDakIsV0FBTyxJQUFJcEIsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVW9CLE1BQVYsS0FBcUI7QUFDdEMsV0FBSzNCLE1BQUwsQ0FBWTRCLElBQVosQ0FBaUIsR0FBakIsRUFBc0IsQ0FBQ25CLEdBQUQsRUFBTW1CLElBQU4sS0FBZTtBQUNuQyxZQUFJbkIsR0FBSixFQUFTO0FBQ1BrQixVQUFBQSxNQUFNLENBQUNsQixHQUFELENBQU47QUFDRCxTQUZELE1BRU87QUFDTEYsVUFBQUEsT0FBTyxDQUFDcUIsSUFBRCxDQUFQO0FBQ0Q7QUFDRixPQU5EO0FBT0QsS0FSTSxDQUFQO0FBU0Q7O0FBL0c0Qjs7O2VBa0hoQi9CLGlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZGlzIGZyb20gJ3JlZGlzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vLi4vbG9nZ2VyJztcbmltcG9ydCB7IEtleVByb21pc2VRdWV1ZSB9IGZyb20gJy4vS2V5UHJvbWlzZVF1ZXVlJztcblxuY29uc3QgREVGQVVMVF9SRURJU19UVEwgPSAzMCAqIDEwMDA7IC8vIDMwIHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBGTFVTSF9EQl9LRVkgPSAnX19mbHVzaF9kYl9fJztcblxuZnVuY3Rpb24gZGVidWcoKSB7XG4gIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIFsnUmVkaXNDYWNoZUFkYXB0ZXInLCAuLi5hcmd1bWVudHNdKTtcbn1cblxuY29uc3QgaXNWYWxpZFRUTCA9IHR0bCA9PiB0eXBlb2YgdHRsID09PSAnbnVtYmVyJyAmJiB0dGwgPiAwO1xuXG5leHBvcnQgY2xhc3MgUmVkaXNDYWNoZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcihyZWRpc0N0eCwgdHRsID0gREVGQVVMVF9SRURJU19UVEwpIHtcbiAgICB0aGlzLnR0bCA9IGlzVmFsaWRUVEwodHRsKSA/IHR0bCA6IERFRkFVTFRfUkVESVNfVFRMO1xuICAgIHRoaXMuY2xpZW50ID0gcmVkaXMuY3JlYXRlQ2xpZW50KHJlZGlzQ3R4KTtcbiAgICB0aGlzLnF1ZXVlID0gbmV3IEtleVByb21pc2VRdWV1ZSgpO1xuICB9XG5cbiAgaGFuZGxlU2h1dGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLmNsaWVudC5xdWl0KGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1JlZGlzQ2FjaGVBZGFwdGVyIGVycm9yIG9uIHNodXRkb3duJywgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIGRlYnVnKCdnZXQnLCBrZXkpO1xuICAgIHJldHVybiB0aGlzLnF1ZXVlLmVucXVldWUoXG4gICAgICBrZXksXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWVudC5nZXQoa2V5LCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgICAgIGRlYnVnKCctPiBnZXQnLCBrZXksIHJlcyk7XG4gICAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXMpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0KGtleSwgdmFsdWUsIHR0bCA9IHRoaXMudHRsKSB7XG4gICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgZGVidWcoJ3B1dCcsIGtleSwgdmFsdWUsIHR0bCk7XG5cbiAgICBpZiAodHRsID09PSAwKSB7XG4gICAgICAvLyB0dGwgb2YgemVybyBpcyBhIGxvZ2ljYWwgbm8tb3AsIGJ1dCByZWRpcyBjYW5ub3Qgc2V0IGV4cGlyZSB0aW1lIG9mIHplcm9cbiAgICAgIHJldHVybiB0aGlzLnF1ZXVlLmVucXVldWUoa2V5LCAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfVxuXG4gICAgaWYgKHR0bCA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXVlLmVucXVldWUoXG4gICAgICAgIGtleSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZFRUTCh0dGwpKSB7XG4gICAgICB0dGwgPSB0aGlzLnR0bDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5lbnF1ZXVlKFxuICAgICAga2V5LFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGllbnQucHNldGV4KGtleSwgdHRsLCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWwoa2V5KSB7XG4gICAgZGVidWcoJ2RlbCcsIGtleSk7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZW5xdWV1ZShcbiAgICAgIGtleSxcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIHRoaXMuY2xpZW50LmRlbChrZXksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgZGVidWcoJ2NsZWFyJyk7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZW5xdWV1ZShcbiAgICAgIEZMVVNIX0RCX0tFWSxcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIHRoaXMuY2xpZW50LmZsdXNoZGIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBVc2VkIGZvciB0ZXN0aW5nXG4gIGFzeW5jIGdldEFsbEtleXMoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuY2xpZW50LmtleXMoJyonLCAoZXJyLCBrZXlzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGtleXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWRpc0NhY2hlQWRhcHRlcjtcbiJdfQ==
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _cryptoUtils = require("../cryptoUtils");
|
|
9
|
-
|
|
10
|
-
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
const MAIN_SCHEMA = '__MAIN_SCHEMA';
|
|
15
|
-
const SCHEMA_CACHE_PREFIX = '__SCHEMA';
|
|
16
|
-
|
|
17
|
-
class SchemaCache {
|
|
18
|
-
constructor(cacheController, ttl = _defaults.default.schemaCacheTTL, singleCache = false) {
|
|
19
|
-
this.ttl = ttl;
|
|
20
|
-
|
|
21
|
-
if (typeof ttl == 'string') {
|
|
22
|
-
this.ttl = parseInt(ttl);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
this.cache = cacheController;
|
|
26
|
-
this.prefix = SCHEMA_CACHE_PREFIX;
|
|
27
|
-
|
|
28
|
-
if (!singleCache) {
|
|
29
|
-
this.prefix += (0, _cryptoUtils.randomString)(20);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
getAllClasses() {
|
|
34
|
-
if (!this.ttl) {
|
|
35
|
-
return Promise.resolve(null);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return this.cache.get(this.prefix + MAIN_SCHEMA);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
setAllClasses(schema) {
|
|
42
|
-
if (!this.ttl) {
|
|
43
|
-
return Promise.resolve(null);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return this.cache.put(this.prefix + MAIN_SCHEMA, schema);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
getOneSchema(className) {
|
|
50
|
-
if (!this.ttl) {
|
|
51
|
-
return Promise.resolve(null);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return this.cache.get(this.prefix + MAIN_SCHEMA).then(cachedSchemas => {
|
|
55
|
-
cachedSchemas = cachedSchemas || [];
|
|
56
|
-
const schema = cachedSchemas.find(cachedSchema => {
|
|
57
|
-
return cachedSchema.className === className;
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
if (schema) {
|
|
61
|
-
return Promise.resolve(schema);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return Promise.resolve(null);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
clear() {
|
|
69
|
-
return this.cache.del(this.prefix + MAIN_SCHEMA);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
exports.default = SchemaCache;
|
|
75
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9TY2hlbWFDYWNoZS5qcyJdLCJuYW1lcyI6WyJNQUlOX1NDSEVNQSIsIlNDSEVNQV9DQUNIRV9QUkVGSVgiLCJTY2hlbWFDYWNoZSIsImNvbnN0cnVjdG9yIiwiY2FjaGVDb250cm9sbGVyIiwidHRsIiwiZGVmYXVsdHMiLCJzY2hlbWFDYWNoZVRUTCIsInNpbmdsZUNhY2hlIiwicGFyc2VJbnQiLCJjYWNoZSIsInByZWZpeCIsImdldEFsbENsYXNzZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldCIsInNldEFsbENsYXNzZXMiLCJzY2hlbWEiLCJwdXQiLCJnZXRPbmVTY2hlbWEiLCJjbGFzc05hbWUiLCJ0aGVuIiwiY2FjaGVkU2NoZW1hcyIsImZpbmQiLCJjYWNoZWRTY2hlbWEiLCJjbGVhciIsImRlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUNBOzs7O0FBSkEsTUFBTUEsV0FBVyxHQUFHLGVBQXBCO0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsVUFBNUI7O0FBS2UsTUFBTUMsV0FBTixDQUFrQjtBQUcvQkMsRUFBQUEsV0FBVyxDQUFDQyxlQUFELEVBQWtCQyxHQUFHLEdBQUdDLGtCQUFTQyxjQUFqQyxFQUFpREMsV0FBVyxHQUFHLEtBQS9ELEVBQXNFO0FBQy9FLFNBQUtILEdBQUwsR0FBV0EsR0FBWDs7QUFDQSxRQUFJLE9BQU9BLEdBQVAsSUFBYyxRQUFsQixFQUE0QjtBQUMxQixXQUFLQSxHQUFMLEdBQVdJLFFBQVEsQ0FBQ0osR0FBRCxDQUFuQjtBQUNEOztBQUNELFNBQUtLLEtBQUwsR0FBYU4sZUFBYjtBQUNBLFNBQUtPLE1BQUwsR0FBY1YsbUJBQWQ7O0FBQ0EsUUFBSSxDQUFDTyxXQUFMLEVBQWtCO0FBQ2hCLFdBQUtHLE1BQUwsSUFBZSwrQkFBYSxFQUFiLENBQWY7QUFDRDtBQUNGOztBQUVEQyxFQUFBQSxhQUFhLEdBQUc7QUFDZCxRQUFJLENBQUMsS0FBS1AsR0FBVixFQUFlO0FBQ2IsYUFBT1EsT0FBTyxDQUFDQyxPQUFSLENBQWdCLElBQWhCLENBQVA7QUFDRDs7QUFDRCxXQUFPLEtBQUtKLEtBQUwsQ0FBV0ssR0FBWCxDQUFlLEtBQUtKLE1BQUwsR0FBY1gsV0FBN0IsQ0FBUDtBQUNEOztBQUVEZ0IsRUFBQUEsYUFBYSxDQUFDQyxNQUFELEVBQVM7QUFDcEIsUUFBSSxDQUFDLEtBQUtaLEdBQVYsRUFBZTtBQUNiLGFBQU9RLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLSixLQUFMLENBQVdRLEdBQVgsQ0FBZSxLQUFLUCxNQUFMLEdBQWNYLFdBQTdCLEVBQTBDaUIsTUFBMUMsQ0FBUDtBQUNEOztBQUVERSxFQUFBQSxZQUFZLENBQUNDLFNBQUQsRUFBWTtBQUN0QixRQUFJLENBQUMsS0FBS2YsR0FBVixFQUFlO0FBQ2IsYUFBT1EsT0FBTyxDQUFDQyxPQUFSLENBQWdCLElBQWhCLENBQVA7QUFDRDs7QUFDRCxXQUFPLEtBQUtKLEtBQUwsQ0FBV0ssR0FBWCxDQUFlLEtBQUtKLE1BQUwsR0FBY1gsV0FBN0IsRUFBMENxQixJQUExQyxDQUErQ0MsYUFBYSxJQUFJO0FBQ3JFQSxNQUFBQSxhQUFhLEdBQUdBLGFBQWEsSUFBSSxFQUFqQztBQUNBLFlBQU1MLE1BQU0sR0FBR0ssYUFBYSxDQUFDQyxJQUFkLENBQW1CQyxZQUFZLElBQUk7QUFDaEQsZUFBT0EsWUFBWSxDQUFDSixTQUFiLEtBQTJCQSxTQUFsQztBQUNELE9BRmMsQ0FBZjs7QUFHQSxVQUFJSCxNQUFKLEVBQVk7QUFDVixlQUFPSixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JHLE1BQWhCLENBQVA7QUFDRDs7QUFDRCxhQUFPSixPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNELEtBVE0sQ0FBUDtBQVVEOztBQUVEVyxFQUFBQSxLQUFLLEdBQUc7QUFDTixXQUFPLEtBQUtmLEtBQUwsQ0FBV2dCLEdBQVgsQ0FBZSxLQUFLZixNQUFMLEdBQWNYLFdBQTdCLENBQVA7QUFDRDs7QUEvQzhCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTUFJTl9TQ0hFTUEgPSAnX19NQUlOX1NDSEVNQSc7XG5jb25zdCBTQ0hFTUFfQ0FDSEVfUFJFRklYID0gJ19fU0NIRU1BJztcblxuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSAnLi4vY3J5cHRvVXRpbHMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NoZW1hQ2FjaGUge1xuICBjYWNoZTogT2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlQ29udHJvbGxlciwgdHRsID0gZGVmYXVsdHMuc2NoZW1hQ2FjaGVUVEwsIHNpbmdsZUNhY2hlID0gZmFsc2UpIHtcbiAgICB0aGlzLnR0bCA9IHR0bDtcbiAgICBpZiAodHlwZW9mIHR0bCA9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50dGwgPSBwYXJzZUludCh0dGwpO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY2FjaGVDb250cm9sbGVyO1xuICAgIHRoaXMucHJlZml4ID0gU0NIRU1BX0NBQ0hFX1BSRUZJWDtcbiAgICBpZiAoIXNpbmdsZUNhY2hlKSB7XG4gICAgICB0aGlzLnByZWZpeCArPSByYW5kb21TdHJpbmcoMjApO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbENsYXNzZXMoKSB7XG4gICAgaWYgKCF0aGlzLnR0bCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHRoaXMucHJlZml4ICsgTUFJTl9TQ0hFTUEpO1xuICB9XG5cbiAgc2V0QWxsQ2xhc3NlcyhzY2hlbWEpIHtcbiAgICBpZiAoIXRoaXMudHRsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZS5wdXQodGhpcy5wcmVmaXggKyBNQUlOX1NDSEVNQSwgc2NoZW1hKTtcbiAgfVxuXG4gIGdldE9uZVNjaGVtYShjbGFzc05hbWUpIHtcbiAgICBpZiAoIXRoaXMudHRsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQodGhpcy5wcmVmaXggKyBNQUlOX1NDSEVNQSkudGhlbihjYWNoZWRTY2hlbWFzID0+IHtcbiAgICAgIGNhY2hlZFNjaGVtYXMgPSBjYWNoZWRTY2hlbWFzIHx8IFtdO1xuICAgICAgY29uc3Qgc2NoZW1hID0gY2FjaGVkU2NoZW1hcy5maW5kKGNhY2hlZFNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiBjYWNoZWRTY2hlbWEuY2xhc3NOYW1lID09PSBjbGFzc05hbWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzY2hlbWEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmRlbCh0aGlzLnByZWZpeCArIE1BSU5fU0NIRU1BKTtcbiAgfVxufVxuIl19
|