UNPKG

@itrocks/framework

Version:

RAD framework for intuitive web application development, blending data and domain-driven design with modular architecture

86 lines 4.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.servers = void 0; exports.run = run; const action_1 = require("@itrocks/action"); const action_2 = require("@itrocks/action"); const action_request_1 = require("@itrocks/action-request"); const action_request_2 = require("@itrocks/action-request"); const app_dir_1 = require("@itrocks/app-dir"); 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 request_response_1 = require("@itrocks/request-response"); 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"); const node_path_2 = require("node:path"); template_1.frontScripts.push('/lib/air-datepicker/locale/en.js', '/lib/air-datepicker/locale/fr.js'); async function execute(request) { // Access control if ((config_1.config.access?.free !== '*') && !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_2.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 toResponse(await action[request.format](request)); } } // ActionFunction module return toResponse(await 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), isDomainObject: object => (0, class_type_1.isAnyType)(object) && !(object.prototype instanceof action_1.Action) }); const server = new fastify_1.FastifyServer({ assetPath: app_dir_1.appDir, execute: request => execute(new action_request_2.Request(request)), favicon: config_1.config.container?.favicon ?? (0, node_path_2.normalize)((0, node_path_1.join)(__dirname, '../favicon.png')), frontScripts: template_1.frontScripts, host: config_1.config.server.host, manifest: config_1.config.container?.manifest, port: config_1.config.server.port, scriptCalls: ['loadCss', 'loadScript'], secret: config_1.config.session.secret ?? config_1.config.secret ?? 'defaultSecretHaving32CharactersOrGreater', secure: config_1.config.server.secure ?? 'auto', store: new fastify_file_session_store_1.FileStore((0, node_path_2.normalize)((0, node_path_1.join)(app_dir_1.appDir, config_1.config.session.path))) }); server.run(); exports.servers.push(server); } exports.servers = new Array(); function toResponse(mixedResponse) { return (typeof mixedResponse === 'string') ? new request_response_1.Response(mixedResponse) : mixedResponse; } //# sourceMappingURL=main.js.map