UNPKG

grind-cache

Version:

Cache provider for Grind, powered by node-cache-manager

186 lines (147 loc) 14.2 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db25maWdCdWlsZGVyLmpzIl0sIm5hbWVzIjpbIkNvbmZpZ0J1aWxkZXIiLCJzdG9yZSIsImFwcCIsInJldHVyblN0b3JlTmFtZSIsImNvbmZpZyIsImdldCIsImRyaXZlciIsImV4cGFuZERyaXZlckFsaWFzIiwicmVzdWx0Iiwib3B0aW9ucyIsImV4cGFuZFN0b3JlQ29uZmlnIiwiZmxhdCIsIk9iamVjdCIsImFzc2lnbiIsInJlcXVpcmUiLCJhbGlhcyIsInRvTG93ZXJDYXNlIiwiZXhwYW5kUmVkaXNTdG9yZUNvbmZpZyIsImV4cGFuZERhdGFiYXNlU3RvcmVDb25maWciLCJwYXRoIiwicGF0aHMiLCJiYXNlIiwiY29ubmVjdGlvbiIsInBhc3N3b3JkIiwiYXV0aF9wYXNzIiwiaG9zdCIsInBvcnQiLCJkYiIsIkRhdGFiYXNlQnVpbGRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBTyxTQUFTQSxhQUFULENBQXVCQyxLQUF2QixFQUE4QkMsR0FBOUIsRUFBbUNDLGVBQWUsR0FBRyxLQUFyRCxFQUE0RDtBQUNsRSxNQUFJLE9BQU9GLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDOUJBLElBQUFBLEtBQUssR0FBR0MsR0FBRyxDQUFDRSxNQUFKLENBQVdDLEdBQVgsQ0FBZ0IsZ0JBQWVKLEtBQU0sRUFBckMsQ0FBUjtBQUNBOztBQUVELGFBQUlBLEtBQUosR0FBaUI7QUFDaEIsV0FBTyxJQUFQO0FBQ0EsR0FGRCxNQUVPO0FBQ05BLElBQUFBLEtBQUssR0FBRyxFQUFFLEdBQUdBO0FBQUwsS0FBUjtBQUNBOztBQUVELFFBQU1LLE1BQU0sR0FBR0MsaUJBQWlCLENBQUNOLEtBQUssQ0FBQ0ssTUFBTixJQUFnQixJQUFqQixDQUFoQztBQUNBLFNBQU9MLEtBQUssQ0FBQ0ssTUFBYjtBQUVBLFFBQU1FLE1BQU0sR0FBRztBQUNkQyxJQUFBQSxPQUFPLEVBQUUsRUFBRSxHQUFHQyxpQkFBaUIsQ0FBQ1IsR0FBRCxFQUFNSSxNQUFOLEVB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LFVBQWQ7O0FBRUEsTUFBSUEsVUFBVSxLQUFLLElBQW5CLEVBQXlCO0FBQ3hCQSxJQUFBQSxVQUFVLEdBQUdwQixHQUFHLENBQUN5QixFQUFqQjtBQUNBLEdBRkQsTUFFTztBQUNOLFFBQUksT0FBT0wsVUFBUCxLQUFzQixRQUExQixFQUFvQztBQUNuQ0EsTUFBQUEsVUFBVSxHQUFHcEIsR0FBRyxDQUFDRSxNQUFKLENBQVdDLEdBQVgsQ0FBZ0Isd0JBQXVCaUIsVUFBVyxFQUFsRCxDQUFiO0FBQ0E7O0FBRUQsUUFBSSxPQUFPQSxVQUFQLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ25DLFlBQU1NLGVBQWUsR0FBR2QsT0FBTyxDQUFDLFVBQUQsQ0FBUCxDQUFvQmMsZUFBNUM7O0FBQ0FOLE1BQUFBLFVBQVUsR0FBR00sZUFBZSxDQUFDTixVQUFELEVBQWFwQixHQUFiLENBQTVCO0FBQ0EsS0FIRCxNQUdPO0FBQ05vQixNQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUNBO0FBQ0Q7O0FBRUQsYUFBSUEsVUFBSixHQUFzQjtBQUNyQixXQUFPbEIsTUFBUDtBQUNBOztBQUVEQSxFQUFBQSxNQUFNLEdBQUcsRUFBRSxHQUFHQSxNQUFMO0FBQWFrQixJQUFBQTtBQUFiLEdBQVQ7QUFDQSxTQUFPbEIsTUFBTSxDQUFDRSxNQUFkO0FBRUEsU0FBT0YsTUFBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ0J1aWxkZXIoc3RvcmUsIGFwcCwgcmV0dXJuU3RvcmVOYW1lID0gZmFsc2UpIHtcblx0aWYgKHR5cGVvZiBzdG9yZSA9PT0gJ3N0cmluZycpIHtcblx0XHRzdG9yZSA9IGFwcC5jb25maWcuZ2V0KGBjYWNoZS5zdG9yZXMuJHtzdG9yZX1gKVxuXHR9XG5cblx0aWYgKHN0b3JlLmlzTmlsKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fSBlbHNlIHtcblx0XHRzdG9yZSA9IHsgLi4uc3RvcmUgfVxuXHR9XG5cblx0Y29uc3QgZHJpdmVyID0gZXhwYW5kRHJpdmVyQWxpYXMoc3RvcmUuZHJpdmVyIHx8IG51bGwpXG5cdGRlbGV0ZSBzdG9yZS5kcml2ZXJcblxuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3B0aW9uczogeyAuLi5leHBhbmRTdG9yZUNvbmZpZyhhcHAsIGRyaXZlciwgc3RvcmUpIH0sXG5cdH1cblxuXHRpZiAocmVzdWx0Lm9wdGlvbnMuZmxhdCA9PT0gdHJ1ZSkge1xuXHRcdE9iamVjdC5hc3NpZ24ocmVzdWx0LCByZXN1bHQub3B0aW9ucylcblx0XHRkZWxldGUgcmVzdWx0Lm9wdGlvbnNcblx0XHRkZWxldGUgcmVzdWx0LmZsYXRcblx0fVxuXG5cdGlmIChyZXR1cm5TdG9yZU5hbWUpIHtcblx0XHRyZXN1bHQuc3RvcmUgPSBkcml2ZXJcblx0fSBlbHNlIGlmIChkcml2ZXIgPT09ICdkYXRhYmFzZScpIHtcblx0XHRyZXN1bHQuc3RvcmUgPSByZXF1aXJlKCcuL0RhdGFiYXNlU3RvcmUnKVxuXHR9IGVsc2UgaWYgKGRyaXZlci5pc05pbCkge1xuXHRcdHJlc3VsdC5zdG9yZSA9ICdtZW1vcnknXG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0LnN0b3JlID0gcmVxdWlyZShkcml2ZXIpXG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmREcml2ZXJBbGlhcyhhbGlhcykge1xuXHRpZiAoYWxpYXMuaXNOaWwpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0c3dpdGNoIChhbGlhcy50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSAnZGInOlxuXHRcdGNhc2UgJ2RhdGFiYXNlJzpcblx0XHRcdHJldHVybiAnZGF0YWJhc2UnXG5cdFx0Y2FzZSAnbWVtY2FjaGUnOlxuXHRcdGNhc2UgJ21lbWNhY2hlZCc6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbWVtY2FjaGVkLXN0b3JlJ1xuXHRcdGNhc2UgJ3JlZGlzJzpcblx0XHRcdHJldHVybiAnY2FjaGUtbWFuYWdlci1yZWRpcydcblx0XHRjYXNlICdtb25nbyc6XG5cdFx0Y2FzZSAnbW9uZ29kYic6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbW9uZ29kYidcblx0XHRjYXNlICdtb25nb29zZSc6XG5cdFx0XHRyZXR1cm4gJ2NhY2hlLW1hbmFnZXItbW9uZ29vc2UnXG5cdFx0Y2FzZSAnZnMnOlxuXHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdGNhc2UgJ2ZpbGVzJzpcblx0XHRjYXNlICdmaWxlc3lzdGVtJzpcblx0XHRcdHJldHVybiAnY2FjaGUtbWFuYWdlci1mcydcblx0XHRjYXNlICdmcy1iaW5hcnknOlxuXHRcdFx0cmV0dXJuICdjYWNoZS1tYW5hZ2VyLWZzLWJpbmFyeSdcblx0XHRjYXNlICdtZW0nOlxuXHRcdGNhc2UgJ21lbW9yeSc6XG5cdFx0Y2FzZSAnaW4tbWVtb3J5Jzpcblx0XHRjYXNlICdscnUnOlxuXHRcdFx0cmV0dXJuIG51bGxcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGFsaWFzXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFN0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpIHtcblx0c3dpdGNoIChkcml2ZXIpIHtcblx0XHRjYXNlICdjYWNoZS1tYW5hZ2VyLXJlZGlzJzpcblx0XHRcdHJldHVybiBleHBhbmRSZWRpc1N0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpXG5cdFx0Y2FzZSAnZGF0YWJhc2UnOlxuXHRcdFx0cmV0dXJuIGV4cGFuZERhdGFiYXNlU3RvcmVDb25maWcoYXBwLCBkcml2ZXIsIGNvbmZpZylcblx0fVxuXG5cdGlmICghY29uZmlnLnBhdGguaXNOaWwpIHtcblx0XHRjb25maWcucGF0aCA9IGFwcC5wYXRocy5iYXNlKGNvbmZpZy5wYXRoKVxuXHR9XG5cblx0cmV0dXJuIGNvbmZpZ1xufVxuXG5mdW5jdGlvbiBleHBhbmRSZWRpc1N0b3JlQ29uZmlnKGFwcCwgZHJpdmVyLCBjb25maWcpIHtcblx0aWYgKGNvbmZpZy5jb25uZWN0aW9uID09PSB2b2lkIDApIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRsZXQgY29ubmVjdGlvbiA9IGNvbmZpZy5jb25uZWN0aW9uXG5cdGRlbGV0ZSBjb25maWcuY29ubmVjdGlvblxuXG5cdGlmIChjb25uZWN0aW9uID09PSBudWxsKSB7XG5cdFx0Y29ubmVjdGlvbiA9IGFwcC5jb25maWcuZ2V0KCdyZWRpcy5kZWZhdWx0JywgbnVsbClcblx0fVxuXG5cdGlmICh0eXBlb2YgY29ubmVjdGlvbiA9PT0gJ3N0cmluZycpIHtcblx0XHRjb25uZWN0aW9uID0gYXBwLmNvbmZpZy5nZXQoYHJlZGlzLmNvbm5lY3Rpb25zLiR7Y29ubmVjdGlvbn1gKVxuXHR9XG5cblx0aWYgKGNvbm5lY3Rpb24uaXNOaWwpIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRjb25maWcgPSB7IC4uLmNvbmZpZywgLi4uY29ubmVjdGlvbiwgZmxhdDogdHJ1ZSB9XG5cdGRlbGV0ZSBjb25maWcuZHJpdmVyXG5cblx0aWYgKGNvbmZpZy5wYXNzd29yZCAhPT0gdm9pZCAwICYmIGNvbmZpZy5hdXRoX3Bhc3MgPT09IHZvaWQgMCkge1xuXHRcdGNvbmZpZy5hdXRoX3Bhc3MgPSBjb25maWcucGFzc3dvcmRcblx0XHRkZWxldGUgY29uZmlnLnBhc3N3b3JkXG5cdH1cblxuXHRpZiAoY29uZmlnLmhvc3QgPT09IHZvaWQgMCkge1xuXHRcdGNvbmZpZy5ob3N0ID0gJ2xvY2FsaG9zdCdcblx0fVxuXG5cdGlmIChjb25maWcucG9ydCA9PT0gdm9pZCAwKSB7XG5cdFx0Y29uZmlnLnBvcnQgPSA2Mzc5XG5cdH1cblxuXHRyZXR1cm4gY29uZmlnXG59XG5cbmZ1bmN0aW9uIGV4cGFuZERhdGFiYXNlU3RvcmVDb25maWcoYXBwLCBkcml2ZXIsIGNvbmZpZykge1xuXHRpZiAoY29uZmlnLmNvbm5lY3Rpb24gPT09IHZvaWQgMCkge1xuXHRcdHJldHVybiBjb25maWdcblx0fVxuXG5cdGxldCBjb25uZWN0aW9uID0gY29uZmlnLmNvbm5lY3Rpb25cblx0ZGVsZXRlIGNvbmZpZy5jb25uZWN0aW9uXG5cblx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwpIHtcblx0XHRjb25uZWN0aW9uID0gYXBwLmRiXG5cdH0gZWxzZSB7XG5cdFx0aWYgKHR5cGVvZiBjb25uZWN0aW9uID09PSAnc3RyaW5nJykge1xuXHRcdFx0Y29ubmVjdGlvbiA9IGFwcC5jb25maWcuZ2V0KGBkYXRhYmFzZS5jb25uZWN0aW9ucy4ke2Nvbm5lY3Rpb259YClcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGNvbm5lY3Rpb24gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBEYXRhYmFzZUJ1aWxkZXIgPSByZXF1aXJlKCdncmluZC1kYicpLkRhdGFiYXNlQnVpbGRlclxuXHRcdFx0Y29ubmVjdGlvbiA9IERhdGFiYXNlQnVpbGRlcihjb25uZWN0aW9uLCBhcHApXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbm5lY3Rpb24gPSBudWxsXG5cdFx0fVxuXHR9XG5cblx0aWYgKGNvbm5lY3Rpb24uaXNOaWwpIHtcblx0XHRyZXR1cm4gY29uZmlnXG5cdH1cblxuXHRjb25maWcgPSB7IC4uLmNvbmZpZywgY29ubmVjdGlvbiB9XG5cdGRlbGV0ZSBjb25maWcuZHJpdmVyXG5cblx0cmV0dXJuIGNvbmZpZ1xufVxuIl19