UNPKG

@paralleldrive/feature-toggles

Version:

Low-level feature toggle tools for Node and browsers.

43 lines (30 loc) 1.47 kB
'use strict'; 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(); }; });