UNPKG

evanesce

Version:

Evanesce disappears your web application framework for desired routes by managing AOT page builds on dependency change.

50 lines (49 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.evanesceExpress = void 0; const core_1 = require("./core"); const util_1 = require("util"); const evanesceExpress = ({ app, router, signalKeys, onRouteRebuild }) => { const promisifiedApplicationRender = (0, util_1.promisify)(app.render.bind(app)); const { signals, addToSignalsRebuildTargets } = (0, core_1.buildSignals)({ signalKeys, onRouteRebuild, render: promisifiedApplicationRender }); return { signals, evanesceRouter: { get: (_route, controller, rebuildOnSignals, paramsList) => { (paramsList || [{}]).forEach((params) => { rebuildOnSignals.forEach((_rebuildOnSignal) => { if (!_rebuildOnSignal) { throw new Error("Signal listed as dependency which doesn't exist"); } const rebuildOnSignal = typeof _rebuildOnSignal === 'function' ? _rebuildOnSignal(params) : _rebuildOnSignal; const route = _route .split('/') .map((x) => (x.startsWith(':') ? params[x.substring(1)] : x)) .join('/'); if (rebuildOnSignal.parent) { addToSignalsRebuildTargets([rebuildOnSignal.parent.key, rebuildOnSignal.key], { controller, route, params: { params } }); } else { addToSignalsRebuildTargets([rebuildOnSignal.key], { controller, route, params: { params } }); } }); }); return router.get(_route, async (req, res) => { const html = await controller({ params: req.params }, { render: promisifiedApplicationRender }); res.send(html); }); } } }; }; exports.evanesceExpress = evanesceExpress;