UNPKG

next-redis-cache

Version:

A package to manage redis caching of genrated pages through next.js .

145 lines (124 loc) 4.67 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var caching = require('./caching'); var _require = require("path-to-regexp"), pathToRegexp = _require.pathToRegexp; /** * * @param {string} path url */ function refactorPath(path) { if (path === '*') { return '(.*)'; } return path; } var opts = { strict: false, sensitive: false, end: true }; var NextCache = /*#__PURE__*/function () { /** * * @param {object} redisClient redisInstance * @param {object} app next app * @param {object} config custom configuration */ function NextCache(redisClient, app) { var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; (0, _classCallCheck2["default"])(this, NextCache); var _config$includes = config.includes, includes = _config$includes === void 0 ? [] : _config$includes, _config$excludes = config.excludes, excludes = _config$excludes === void 0 ? ["*"] : _config$excludes, restConfig = (0, _objectWithoutProperties2["default"])(config, ["includes", "excludes"]); includes = includes.length && includes.map(function (path) { var newPath = refactorPath(path); return pathToRegexp(newPath, [], opts); }); excludes = excludes.length && excludes.map(function (path) { var newPath = refactorPath(path); if (includes.length && newPath === "(.*)") return null; return pathToRegexp(newPath, [], opts); }); this.redis = redisClient || null; this.app = app; this.config = _objectSpread({ includes: includes, // array excludes: excludes, // array defaultExpire: null, // seconds expire: {}, // object of path and seconds pair log: false, //boolean cache: true, //boolean prefix: "__next-redis-cache__" }, restConfig); } /** * * @param {object} redisClient redisInstance * set redis client with manually by calling init method. * Warning - if client is already set through instance creation. * Error - if client isn't exist in argument. */ (0, _createClass2["default"])(NextCache, [{ key: "init", value: function init(redisClient) { if (!redisClient) { throw new Error("Redis client is require!! NextCache is triggering init without passing client."); } if (this.redis) { console.warn("Redis client is already defined once, setting up new client will shadow previous client!"); } this.redis = redisClient; } /** * middleware * @param {object} req request * @param {object} res response * @param {function} next callback */ }, { key: "middleware", value: function middleware(req, res, next) { return caching({ redis: this.redis, config: this.config, app: this.app, req: req, res: res, next: next }); } /** * * @param {object} req request * @param {object} res response */ }, { key: "handler", value: function handler(req, res) { return caching({ redis: this.redis, config: this.config, app: this.app, req: req, res: res }); } }]); return NextCache; }(); module.exports = NextCache;