csr-controller
Version:
DB Controller for client side rendering
52 lines (51 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.controllerRegistry = void 0;
/**
* Allows to register every controller database handler
*
* @returns Object with register and handle methods
*/
const controllerRegistry = () => {
const routes = new Map();
/**
* Register controller with database handlers
*
* @param controller
* @param db Database handlers for controller and sub controllers
*
* @see {@link Controller}
*/
const register = (controller, db) => {
const { index, create, destroy, read, update, ...rest } = db;
// Create copy of controller so we won't delete original keys later
const copy = { ...controller };
Object.keys(rest).forEach(k => {
if (typeof rest[k] != 'object')
return;
// Remap properties
const { index, read } = rest[k];
copy[k] = { ...copy[k], ...rest[k], index, read };
// Remap key name
delete Object.assign(copy, { [copy[k].$url]: copy[k] })[k];
});
routes.set(copy.$url, {
...copy,
index,
create,
destroy,
read,
update,
});
return { register, handle };
};
/**
* Handle and return routes
* @returns Registered routes
*/
const handle = () => {
return routes;
};
return { register, handle };
};
exports.controllerRegistry = controllerRegistry;