UNPKG

ab-test-middleware

Version:

An express middleware that manages multiple distributions for A/B/N testing purposes.

46 lines (40 loc) 1.47 kB
/* eslint-disable no-param-reassign */ const fs = require('fs'); const path = require('path'); const express = require('express'); let paths; let distPath; let distFolder; let defaultDist; const distributionPaths = () => { if (paths) return paths; paths = fs.readdirSync(distPath) .map((f) => path.join(distPath, f)) .filter((f) => fs.statSync(f).isDirectory()) .map((f) => f.replace(`${distFolder}/`, '')); return paths; }; const distributionPathsMiddleware = (req, res, next) => { try { if (!req.locals) req.locals = {}; req.locals.dists = distributionPaths(); req.locals.defaultDist = defaultDist; req.locals.distPath = distPath; req.locals.distFolder = distFolder; if (req.locals.dists.length === 0) return next(new Error('At least one distribution is required to run this middleware.')); if (!req.locals.dists.includes(defaultDist)) return next(new Error('Default distribution does not match any available distributions.')); } catch (e) { return next(e); } return next(); }; const createDistributionPathsMiddleware = (options) => { if (paths) paths = undefined; // Mainly for testing purposes distFolder = options.distFolder || 'dist'; defaultDist = options.defaultDist || 'master'; distPath = `./${distFolder}`; const router = express.Router(); router.use(distributionPathsMiddleware); return router; }; module.exports = { distributionPathsMiddleware, createDistributionPathsMiddleware };