@itrocks/framework
Version:
RAD framework for intuitive web application development, blending data and domain-driven design with modular architecture
66 lines • 3.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = run;
const app_dir_1 = require("@itrocks/app-dir");
const action_1 = require("@itrocks/action");
const action_request_1 = require("@itrocks/action-request");
const action_request_2 = require("@itrocks/action-request");
const class_type_1 = require("@itrocks/class-type");
const config_1 = require("@itrocks/config");
const fastify_1 = require("@itrocks/fastify");
const fastify_file_session_store_1 = require("@itrocks/fastify-file-session-store");
const route_1 = require("@itrocks/route");
const store_1 = require("@itrocks/store");
const template_1 = require("@itrocks/template");
const node_path_1 = require("node:path");
template_1.frontScripts.push('/node_modules/air-datepicker/locale/en.js', '/node_modules/air-datepicker/locale/fr.js');
async function execute(request) {
// Access control
if (!request.request.session.user && !config_1.config.access.free.includes(request.route + '/' + request.action)) {
request.action = 'login';
request.route = '/user';
}
// Resolve action class or function module
const module = route_1.routes.resolve(request.route + '/' + request.action);
// undefined module
if (!module) {
console.error('Action ' + request.route + '/' + request.action + ' not found');
throw 'Action ' + request.route + '/' + request.action + ' not found';
}
// ActionClass module
if ((0, class_type_1.isAnyType)(module)) {
const action = (new module);
if (request.format in action) {
const need = (0, action_1.needOf)(action);
if (need.alternative
&& (need.alternative !== request.action)
&& (((need.need === 'object') && !request.ids.length)
|| ((need.need === 'Store') && !(0, store_1.storeOf)(request.type)))) {
request.action = need.alternative;
return execute(request);
}
if ((need.need === 'object') && !request.ids.length && !request.request.data.confirm) {
console.error('Action ' + request.route + '/' + request.action + ' needs at least one object');
throw 'Action ' + request.route + '/' + request.action + ' needs at least one ';
}
return action[request.format](request);
}
}
// ActionFunction module
return module(request);
}
async function run() {
await (0, route_1.loadRoutes)(route_1.routes, config_1.config.routes);
(0, action_request_1.actionRequestDependsOn)({ getModule: route_1.routes.resolve.bind(route_1.routes) });
return new fastify_1.FastifyServer({
assetPath: app_dir_1.appDir,
execute: request => execute(new action_request_2.Request(request)),
favicon: '/node_modules/@itrocks/framework/favicon.ico',
frontScripts: template_1.frontScripts,
port: 3000,
scriptCalls: ['loadCss', 'loadScript'],
secret: config_1.config.secret,
store: new fastify_file_session_store_1.FileStore((0, node_path_1.join)(app_dir_1.appDir, config_1.config.session.path))
}).run();
}
//# sourceMappingURL=main.js.map