@paralleldrive/feature-toggles
Version:
Low-level feature toggle tools for Node and browsers.
43 lines (30 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createExpressMiddleware = undefined;
var _curry = require('ramda/src/curry');
var _curry2 = _interopRequireDefault(_curry);
var _url = require('url');
var _isActiveFeatureName = require('./is-active-feature-name');
var _mergeFeatureNames = require('./merge-feature-names');
var _getQueryFeatureNames = require('./get-query-feature-names');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var setStatus = function setStatus(res, isActiveFeatureName) {
return isActiveFeatureName ? res.status(200) : res.status(404);
};
// ({ features: [...String] }, requiredFeature: String, methods?: Object) => (req, res, next) => void
var createExpressMiddleware = exports.createExpressMiddleware = (0, _curry2.default)(function (_ref, requiredFeature, methods) {
var features = _ref.features;
return function (req, res, next) {
var parsedUrl = (0, _url.parse)(req.url, true);
var query = parsedUrl.query;
var updatedFeatures = (0, _mergeFeatureNames.mergeFeatureNames)(features, (0, _getQueryFeatureNames.getQueryFeatureNames)(query));
setStatus(res, (0, _isActiveFeatureName.isActiveFeatureName)(requiredFeature, updatedFeatures));
var handler = methods[req.method.toLowerCase()];
if (handler !== undefined && typeof handler === 'function') {
return handler(req, res);
}
next();
};
});