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
JavaScript
;
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;