grind-cache
Version:
Cache provider for Grind, powered by node-cache-manager
186 lines (147 loc) • 14.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ConfigBuilder = ConfigBuilder;
exports.expandDriverAlias = expandDriverAlias;
exports.expandStoreConfig = expandStoreConfig;
function _isnil(val) { return val === null || typeof val === 'undefined'; }
function ConfigBuilder(store, app, returnStoreName = false) {
if (typeof store === 'string') {
store = app.config.get(`cache.stores.${store}`);
}
if (_isnil(store)) {
return null;
} else {
store = { ...store
};
}
const driver = expandDriverAlias(store.driver || null);
delete store.driver;
const result = {
options: { ...expandStoreConfig(app, driver, store)
}
};
if (result.options.flat === true) {
Object.assign(result, result.options);
delete result.options;
delete result.flat;
}
if (returnStoreName) {
result.store = driver;
} else if (driver === 'database') {
result.store = require('./DatabaseStore');
} else if (_isnil(driver)) {
result.store = 'memory';
} else {
result.store = require(driver);
}
return result;
}
function expandDriverAlias(alias) {
if (_isnil(alias)) {
return null;
}
switch (alias.toLowerCase()) {
case 'db':
case 'database':
return 'database';
case 'memcache':
case 'memcached':
return 'cache-manager-memcached-store';
case 'redis':
return 'cache-manager-redis';
case 'mongo':
case 'mongodb':
return 'cache-manager-mongodb';
case 'mongoose':
return 'cache-manager-mongoose';
case 'fs':
case 'file':
case 'files':
case 'filesystem':
return 'cache-manager-fs';
case 'fs-binary':
return 'cache-manager-fs-binary';
case 'mem':
case 'memory':
case 'in-memory':
case 'lru':
return null;
default:
return alias;
}
}
function expandStoreConfig(app, driver, config) {
switch (driver) {
case 'cache-manager-redis':
return expandRedisStoreConfig(app, driver, config);
case 'database':
return expandDatabaseStoreConfig(app, driver, config);
}
if (!_isnil(config.path)) {
config.path = app.paths.base(config.path);
}
return config;
}
function expandRedisStoreConfig(app, driver, config) {
if (config.connection === void 0) {
return config;
}
let connection = config.connection;
delete config.connection;
if (connection === null) {
connection = app.config.get('redis.default', null);
}
if (typeof connection === 'string') {
connection = app.config.get(`redis.connections.${connection}`);
}
if (_isnil(connection)) {
return config;
}
config = { ...config,
...connection,
flat: true
};
delete config.driver;
if (config.password !== void 0 && config.auth_pass === void 0) {
config.auth_pass = config.password;
delete config.password;
}
if (config.host === void 0) {
config.host = 'localhost';
}
if (config.port === void 0) {
config.port = 6379;
}
return config;
}
function expandDatabaseStoreConfig(app, driver, config) {
if (config.connection === void 0) {
return config;
}
let connection = config.connection;
delete config.connection;
if (connection === null) {
connection = app.db;
} else {
if (typeof connection === 'string') {
connection = app.config.get(`database.connections.${connection}`);
}
if (typeof connection === 'object') {
const DatabaseBuilder = require('grind-db').DatabaseBuilder;
connection = DatabaseBuilder(connection, app);
} else {
connection = null;
}
}
if (_isnil(connection)) {
return config;
}
config = { ...config,
connection
};
delete config.driver;
return config;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db25maWdCdWlsZGVyLmpzIl0sIm5hbWVzIjpbIkNvbmZpZ0J1aWxkZXIiLCJzdG9yZSIsImFwcCIsInJldHVyblN0b3JlTmFtZSIsImNvbmZpZyIsImdldCIsImRyaXZlciIsImV4cGFuZERyaXZlckFsaWFzIiwicmVzdWx0Iiwib3B0aW9ucyIsImV4cGFuZFN0b3JlQ29uZmlnIiwiZmxhdCIsIk9iamVjdCIsImFzc2lnbiIsInJlcXVpcmUiLCJhbGlhcyIsInRvTG93ZXJDYXNlIiwiZXhwYW5kUmVkaXNTdG9yZUNvbmZpZyIsImV4cGFuZERhdGFiYXNlU3RvcmVDb25maWciLCJwYXRoIiwicGF0aHMiLCJiYXNlIiwiY29ubmVjdGlvbiIsInBhc3N3b3JkIiwiYXV0aF9wYXNzIiwiaG9zdCIsInBvcnQiLCJkYiIsIkRhdGFiYXNlQnVpbGRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBTyxTQUFTQSxhQUFULENBQXVCQyxLQUF2QixFQUE4QkMsR0FBOUIsRUFBbUNDLGVBQWUsR0FBRyxLQUFyRCxFQUE0RDtBQUNsRSxNQUFJLE9BQU9GLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDOUJBLElBQUFBLEtBQUssR0FBR0MsR0FBRyxDQUFDRSxNQUFKLENBQVdDLEdBQVgsQ0FBZ0IsZ0JBQWVKLEtBQU0sRUFBckMsQ0FBUjtBQUNBOztBQUVELGFBQUlBLEtBQUosR0FBaUI7QUFDaEIsV0FBTyxJQUFQO0FBQ0EsR0FGRCxNQUVPO0FBQ05BLElBQUFBLEtBQUssR0FBRyxFQUFFLEdBQUdBO0FBQUwsS0FBUjtBQUNBOztBQUVELFFBQU1LLE1BQU0sR0FBR0MsaUJBQWlCLENBQUNOLEtBQUssQ0FBQ0ssTUFBTixJQUFnQixJQUFqQixDQUFoQztBQUNBLFNBQU9MLEtBQUssQ0FBQ0ssTUFBYjtBQUVBLFFBQU1FLE1BQU0sR0FBRztBQUNkQyxJQUFBQSxPQUFPLEVBQUUsRUFBRSxHQUFHQyxpQkFBaUIsQ0FBQ1IsR0FBRCxFQUFNSSxNQUFOLEVBQWNMLEtBQWQ7QUFBdEI7QUFESyxHQUFmOztBQUlBLE1BQUlPLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlRSxJQUFmLEtBQXdCLElBQTVCLEVBQWtDO0FBQ2pDQyxJQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0wsTUFBZCxFQUFzQkEsTUFBTSxDQUFDQyxPQUE3QjtBQUNBLFdBQU9ELE1BQU0sQ0FBQ0MsT0FBZDtBQUNBLFdBQU9ELE1BQU0sQ0FBQ0csSUFBZDtBQUNBOztBQUVELE1BQUlSLGVBQUosRUFBcUI7QUFDcEJLLElBQUFBLE1BQU0sQ0FBQ1AsS0FBUCxHQUFlSyxNQUFmO0FBQ0EsR0FGRCxNQUVPLElBQUlBLE1BQU0sS0FBSyxVQUFmLEVBQTJCO0FBQ2pDRSxJQUFBQSxNQUFNLENBQUNQLEtBQVAsR0FBZWEsT0FBTyxDQUFDLGlCQUFELENBQXRCO0FBQ0EsR0FGTSxNQUVBLFdBQUlSLE1BQUosR0FBa0I7QUFDeEJFLElBQUFBLE1BQU0sQ0FBQ1AsS0FBUCxHQUFlLFFBQWY7QUFDQSxHQUZNLE1BRUE7QUFDTk8sSUFBQUEsTUFBTSxDQUFDUCxLQUFQLEdBQWVhLE9BQU8sQ0FBQ1IsTUFBRCxDQUF0QjtBQUNBOztBQUVELFNBQU9FLE1BQVA7QUFDQTs7QUFFTSxTQUFTRCxpQkFBVCxDQUEyQlEsS0FBM0IsRUFBa0M7QUFDeEMsYUFBSUEsS0FBSixHQUFpQjtBQUNoQixXQUFPLElBQVA7QUFDQTs7QUFFRCxVQUFRQSxLQUFLLENBQUNDLFdBQU4sRUFBUjtBQUNDLFNBQUssSUFBTDtBQUNBLFNBQUssVUFBTDtBQUNDLGFBQU8sVUFBUDs7QUFDRCxTQUFLLFVBQUw7QUFDQSxTQUFLLFdBQUw7QUFDQyxhQUFPLCtCQUFQOztBQUNELFNBQUssT0FBTDtBQUNDLGFBQU8scUJBQVA7O0FBQ0QsU0FBSyxPQUFMO0FBQ0EsU0FBSyxTQUFMO0FBQ0MsYUFBTyx1QkFBUDs7QUFDRCxTQUFLLFVBQUw7QUFDQyxhQUFPLHdCQUFQOztBQUNELFNBQUssSUFBTDtBQUNBLFNBQUssTUFBTDtBQUNBLFNBQUssT0FBTDtBQUNBLFNBQUssWUFBTDtBQUNDLGFBQU8sa0JBQVA7O0FBQ0QsU0FBSyxXQUFMO0FBQ0MsYUFBTyx5QkFBUDs7QUFDRCxTQUFLLEtBQUw7QUFDQSxTQUFLLFFBQUw7QUFDQSxTQUFLLFdBQUw7QUFDQSxTQUFLLEtBQUw7QUFDQyxhQUFPLElBQVA7O0FBQ0Q7QUFDQyxhQUFPRCxLQUFQO0FBM0JGO0FBNkJBOztBQUVNLFNBQVNMLGlCQUFULENBQTJCUixHQUEzQixFQUFnQ0ksTUFBaEMsRUFBd0NGLE1BQXhDLEVBQWdEO0FBQ3RELFVBQVFFLE1BQVI7QUFDQyxTQUFLLHFCQUFMO0FBQ0MsYUFBT1csc0JBQXNCLENBQUNmLEdBQUQsRUFBTUksTUFBTixFQUFjRixNQUFkLENBQTdCOztBQUNELFNBQUssVUFBTDtBQUNDLGFBQU9jLHlCQUF5QixDQUFDaEIsR0FBRCxFQUFNSSxNQUFOLEVBQWNGLE1BQWQsQ0FBaEM7QUFKRjs7QUFPQSxNQUFJLFFBQUNBLE1BQU0sQ0FBQ2UsSUFBUixDQUFKLEVBQXdCO0FBQ3ZCZixJQUFBQSxNQUFNLENBQUNlLElBQVAsR0FBY2pCLEdBQUcsQ0FBQ2tCLEtBQUosQ0FBVUMsSUFBVixDQUFlakIsTUFBTSxDQUFDZSxJQUF0QixDQUFkO0FBQ0E7O0FBRUQsU0FBT2YsTUFBUDtBQUNBOztBQUVELFNBQVNhLHNCQUFULENBQWdDZixHQUFoQyxFQUFxQ0ksTUFBckMsRUFBNkNGLE1BQTdDLEVBQXFEO0FBQ3BELE1BQUlBLE1BQU0sQ0FBQ2tCLFVBQVAsS0FBc0IsS0FBSyxDQUEvQixFQUFrQztBQUNqQyxXQUFPbEIsTUFBUDtBQUNBOztBQUVELE1BQUlrQixVQUFVLEdBQUdsQixNQUFNLENBQUNrQixVQUF4QjtBQUNBLFNBQU9sQixNQUFNLENBQUNrQixVQUFkOztBQUVBLE1BQUlBLFVBQVUsS0FBSyxJQUFuQixFQUF5QjtBQUN4QkEsSUFBQUEsVUFBVSxHQUFHcEIsR0FBRyxDQUFDRSxNQUFKLENBQVdDLEdBQVgsQ0FBZSxlQUFmLEVBQWdDLElBQWhDLENBQWI7QUFDQTs7QUFFRCxNQUFJLE9BQU9pQixVQUFQLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ25DQSxJQUFBQSxVQUFVLEdBQUdwQixHQUFHLENBQUNFLE1BQUosQ0FBV0MsR0FBWCxDQUFnQixxQkFBb0JpQixVQUFXLEVBQS9DLENBQWI7QUFDQTs7QUFFRCxhQUFJQSxVQUFKLEdBQXNCO0FBQ3JCLFdBQU9sQixNQUFQO0FBQ0E7O0FBRURBLEVBQUFBLE1BQU0sR0FBRyxFQUFFLEdBQUdBLE1BQUw7QUFBYSxPQUFHa0IsVUFBaEI7QUFBNEJYLElBQUFBLElBQUksRUFBRTtBQUFsQyxHQUFUO0FBQ0EsU0FBT1AsTUFBTSxDQUFDRSxNQUFkOztBQUVBLE1BQUlGLE1BQU0sQ0FBQ21CLFFBQVAsS0FBb0IsS0FBSyxDQUF6QixJQUE4Qm5CLE1BQU0sQ0FBQ29CLFNBQVAsS0FBcUIsS0FBSyxDQUE1RCxFQUErRDtBQUM5RHBCLElBQUFBLE1BQU0sQ0FBQ29CLFNBQVAsR0FBbUJwQixNQUFNLENBQUNtQixRQUExQjtBQUNBLFdBQU9uQixNQUFNLENBQUNtQixRQUFkO0FBQ0E7O0FBRUQsTUFBSW5CLE1BQU0sQ0FBQ3FCLElBQVAsS0FBZ0IsS0FBSyxDQUF6QixFQUE0QjtBQUMzQnJCLElBQUFBLE1BQU0sQ0FBQ3FCLElBQVAsR0FBYyxXQUFkO0FBQ0E7O0FBRUQsTUFBSXJCLE1BQU0sQ0FBQ3NCLElBQVAsS0FBZ0IsS0FBSyxDQUF6QixFQUE0QjtBQUMzQnRCLElBQUFBLE1BQU0sQ0FBQ3NCLElBQVAsR0FBYyxJQUFkO0FBQ0E7O0FBRUQsU0FBT3RCLE1BQVA7QUFDQTs7QUFFRCxTQUFTYyx5QkFBVCxDQUFtQ2hCLEdBQW5DLEVBQXdDSSxNQUF4QyxFQUFnREYsTUFBaEQsRUFBd0Q7QUFDdkQsTUFBSUEsTUFBTSxDQUFDa0IsVUFBUCxLQUFzQixLQUFLLENBQS9CLEVBQWtDO0FBQ2pDLFdBQU9sQixNQUFQO0FBQ0E7O0FBRUQsTUFBSWtCLFVBQVUsR0FBR2xCLE1BQU0sQ0FBQ2tCLFVBQXhCO0FBQ0EsU0FBT2xCLE1BQU0sQ0FBQ2tCLFVBQWQ7O0FBRUEsTUFBSUEsVUFBVSxLQUFLLElBQW5CLEVBQXlCO0FBQ3hCQSxJQUFBQSxVQUFVLEdBQUdwQixHQUFHLENBQUN5QixFQUFqQjtBQUNBLEdBRkQsTUFFTztBQUNOLFFBQUksT0FBT0wsVUFBUCxLQUFzQixRQUExQixFQUFvQztBQUNuQ0EsTUFBQUEsVUFBVSxHQUFHcEIsR0FBRyxDQUFDRSxNQUFKLENBQVdDLEdBQVgsQ0FBZ0Isd0JBQXVCaUIsVUFBVyxFQUFsRCxDQUFiO0FBQ0E7O0FBRUQsUUFBSSxPQUFPQSxVQUFQLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ25DLFlBQU1NLGVBQWUsR0FBR2QsT0FBTyxDQUFDLFVBQUQsQ0FBUCxDQUFvQmMsZUFBNUM7O0FBQ0FOLE1BQUFBLFVBQVUsR0FBR00sZUFBZSxDQUFDTixVQUFELEVBQWFwQixHQUFiLENBQTVCO0FBQ0EsS0FIRCxNQUdPO0FBQ05vQixNQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUNBO0FBQ0Q7O0FBRUQsYUFBSUEsVUFBSixHQUFzQjtBQUNyQixXQUFPbEIsTUFBUDtBQUNBOztBQUVEQSxFQUFBQSxNQUFNLEdBQUcsRUFBRSxHQUFHQSxNQUFMO0FBQWFrQixJQUFBQTtBQUFiLEdBQVQ7QUFDQSxTQUFPbEIsTUFBTSxDQUFDRSxNQUFkO0FBRUEsU0FBT0YsTUFBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ0J1aWxkZXIoc3RvcmUsIGFwcCwgcmV0dXJuU3RvcmVOYW1lID0gZmFsc2UpIHtcblx0aWYgKHR5cGVvZiBzdG9yZSA9PT0gJ3N0cmluZycpIHtcblx0XHRzdG9yZSA9IGFwcC5jb25maWcuZ2V0KGBjYWNoZS5zdG9yZXMuJHtzdG9yZX1gKVxuXHR9XG5cblx0aWYgKHN0b3JlLmlzTmlsKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fSBlbHNlIHtcblx0XHRzdG9yZSA9IHsgLi4uc3RvcmUgfVxuXHR9XG5cblx0Y29uc3QgZHJpdmVyID0gZXhwYW5kRHJpdmVyQWxpYXMoc3RvcmUuZHJpdmVyIHx8IG51bGwpXG5cdGRlbGV0ZSBzdG9yZS5kcml2ZXJcblxuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3B0aW9uczogeyAuLi5leHBhbmRTdG9yZUNvbmZpZyhhcHAsIGRyaXZlciwgc3RvcmUpIH0sXG5cdH1cblxuXHRpZiAocmVzdWx0Lm9wdGlvbnMuZmxhdCA9PT0gdHJ1ZSkge1xuXHRcdE9iamVjdC5hc3NpZ24ocmVzdWx0LCByZXN1bHQub3B0aW9ucylcblx0XHRkZWxldGUgcmVzdWx0Lm9wdGlvbnNcblx0XHRkZWxldGUgcmVzdWx0LmZsYXRcblx0fVxuXG5cdGlmIChyZXR1cm5TdG9yZU5hbWUpIHtcblx0XHRyZXN1bHQuc3RvcmUgPSBkcml2ZXJcblx0fSBlbHNlIGlmIChkcml2ZXIgPT09ICdkYXRhYmFzZScpIHtcblx0XHRyZXN1bHQuc3RvcmUgPSByZXF1aXJlKCcuL0RhdGFiYXNlU3RvcmUnKVxuXHR9IGVsc2UgaWYgKGRyaXZlci5pc05pbCkge1xuXHRcdHJlc3VsdC5zdG9yZSA9ICdtZW1vcnknXG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0LnN0b3JlID0gcmVxdWlyZShkcml2ZXIpXG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmREcml2ZXJBbGlhcyhhbGlhcykge1xuXHRpZiAoYWxpYXMuaXNOaWwpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0c3dpdGNoIChhbGlhcy50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAnZGInOlxuXHRcdGNhc2UgJ2RhdGFiYXNlJzpcblx0XHRcdHJldHVybiAnZGF0YWJhc2UnXG5cdFx0Y2FzZSAnbWVtY2FjaGUnOlxuXHRcdGNhc2UgJ21lbWNhY2hlZCc6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbWVtY2FjaGVkLXN0b3JlJ1xuXHRcdGNhc2UgJ3JlZGlzJzpcblx0XHRcdHJldHVybiAnY2FjaGUtbWFuYWdlci1yZWRpcydcblx0XHRjYXNlICdtb25nbyc6XG5cdFx0Y2FzZSAnbW9uZ29kYic6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbW9uZ29kYidcblx0XHRjYXNlICdtb25nb29zZSc6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbW9uZ29vc2UnXG5cdFx0Y2FzZSAnZnMnOlxuXHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdGNhc2UgJ2ZpbGVzJzpcblx0XHRjYXNlICdmaWxlc3lzdGVtJzpcblx0XHRcdHJldHVybiAnY2FjaGUtbWFuYWdlci1mcydcblx0XHRjYXNlICdmcy1iaW5hcnknOlxuXHRcdFx0cmV0dXJuICdjYWNoZS1tYW5hZ2VyLWZzLWJpbmFyeSdcblx0XHRjYXNlICdtZW0nOlxuXHRcdGNhc2UgJ21lbW9yeSc6XG5cdFx0Y2FzZSAnaW4tbWVtb3J5Jzpcblx0XHRjYXNlICdscnUnOlxuXHRcdFx0cmV0dXJuIG51bGxcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGFsaWFzXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFN0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpIHtcblx0c3dpdGNoIChkcml2ZXIpIHtcblx0XHRjYXNlICdjYWNoZS1tYW5hZ2VyLXJlZGlzJzpcblx0XHRcdHJldHVybiBleHBhbmRSZWRpc1N0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpXG5cdFx0Y2FzZSAnZGF0YWJhc2UnOlxuXHRcdFx0cmV0dXJuIGV4cGFuZERhdGFiYXNlU3RvcmVDb25maWcoYXBwLCBkcml2ZXIsIGNvbmZpZylcblx0fVxuXG5cdGlmICghY29uZmlnLnBhdGguaXNOaWwpIHtcblx0XHRjb25maWcucGF0aCA9IGFwcC5wYXRocy5iYXNlKGNvbmZpZy5wYXRoKVxuXHR9XG5cblx0cmV0dXJuIGNvbmZpZ1xufVxuXG5mdW5jdGlvbiBleHBhbmRSZWRpc1N0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpIHtcblx0aWYgKGNvbmZpZy5jb25uZWN0aW9uID09PSB2b2lkIDApIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRsZXQgY29ubmVjdGlvbiA9IGNvbmZpZy5jb25uZWN0aW9uXG5cdGRlbGV0ZSBjb25maWcuY29ubmVjdGlvblxuXG5cdGlmIChjb25uZWN0aW9uID09PSBudWxsKSB7XG5cdFx0Y29ubmVjdGlvbiA9IGFwcC5jb25maWcuZ2V0KCdyZWRpcy5kZWZhdWx0JywgbnVsbClcblx0fVxuXG5cdGlmICh0eXBlb2YgY29ubmVjdGlvbiA9PT0gJ3N0cmluZycpIHtcblx0XHRjb25uZWN0aW9uID0gYXBwLmNvbmZpZy5nZXQoYHJlZGlzLmNvbm5lY3Rpb25zLiR7Y29ubmVjdGlvbn1gKVxuXHR9XG5cblx0aWYgKGNvbm5lY3Rpb24uaXNOaWwpIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRjb25maWcgPSB7IC4uLmNvbmZpZywgLi4uY29ubmVjdGlvbiwgZmxhdDogdHJ1ZSB9XG5cdGRlbGV0ZSBjb25maWcuZHJpdmVyXG5cblx0aWYgKGNvbmZpZy5wYXNzd29yZCAhPT0gdm9pZCAwICYmIGNvbmZpZy5hdXRoX3Bhc3MgPT09IHZvaWQgMCkge1xuXHRcdGNvbmZpZy5hdXRoX3Bhc3MgPSBjb25maWcucGFzc3dvcmRcblx0XHRkZWxldGUgY29uZmlnLnBhc3N3b3JkXG5cdH1cblxuXHRpZiAoY29uZmlnLmhvc3QgPT09IHZvaWQgMCkge1xuXHRcdGNvbmZpZy5ob3N0ID0gJ2xvY2FsaG9zdCdcblx0fVxuXG5cdGlmIChjb25maWcucG9ydCA9PT0gdm9pZCAwKSB7XG5cdFx0Y29uZmlnLnBvcnQgPSA2Mzc5XG5cdH1cblxuXHRyZXR1cm4gY29uZmlnXG59XG5cbmZ1bmN0aW9uIGV4cGFuZERhdGFiYXNlU3RvcmVDb25maWcoYXBwLCBkcml2ZXIsIGNvbmZpZykge1xuXHRpZiAoY29uZmlnLmNvbm5lY3Rpb24gPT09IHZvaWQgMCkge1xuXHRcdHJldHVybiBjb25maWdcblx0fVxuXG5cdGxldCBjb25uZWN0aW9uID0gY29uZmlnLmNvbm5lY3Rpb25cblx0ZGVsZXRlIGNvbmZpZy5jb25uZWN0aW9uXG5cblx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwpIHtcblx0XHRjb25uZWN0aW9uID0gYXBwLmRiXG5cdH0gZWxzZSB7XG5cdFx0aWYgKHR5cGVvZiBjb25uZWN0aW9uID09PSAnc3RyaW5nJykge1xuXHRcdFx0Y29ubmVjdGlvbiA9IGFwcC5jb25maWcuZ2V0KGBkYXRhYmFzZS5jb25uZWN0aW9ucy4ke2Nvbm5lY3Rpb259YClcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGNvbm5lY3Rpb24gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBEYXRhYmFzZUJ1aWxkZXIgPSByZXF1aXJlKCdncmluZC1kYicpLkRhdGFiYXNlQnVpbGRlclxuXHRcdFx0Y29ubmVjdGlvbiA9IERhdGFiYXNlQnVpbGRlcihjb25uZWN0aW9uLCBhcHApXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbm5lY3Rpb24gPSBudWxsXG5cdFx0fVxuXHR9XG5cblx0aWYgKGNvbm5lY3Rpb24uaXNOaWwpIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRjb25maWcgPSB7IC4uLmNvbmZpZywgY29ubmVjdGlvbiB9XG5cdGRlbGV0ZSBjb25maWcuZHJpdmVyXG5cblx0cmV0dXJuIGNvbmZpZ1xufVxuIl19