UNPKG

arky-js

Version:

**Arky.js** is a powerful, annotation-based framework for building serverless applications on **AWS Lambda and API Gateway**. Inspired by Angular and NestJS, Arky.js simplifies serverless development by providing decorators for defining modules, controlle

55 lines (54 loc) 2.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initiateApp = initiateApp; const express_1 = __importDefault(require("express")); require("reflect-metadata"); const module_decorater_1 = require("../../decorators/module.decorater"); const ioc_container_1 = require("../../core/runner/ioc-container"); function initiateApp(initModule, port = 3000, app = (0, express_1.default)()) { try { app.use(express_1.default.urlencoded({ extended: true })); app.use(express_1.default.json()); traverseModule(initModule, app); startApp(app, port); } catch (err) { console.log(err); } } function startApp(app, port) { app.listen(port, (err) => { if (err) { console.log("Application could not start", err.message); return; } console.log("Application running on port: ", port); }); } function traverseModule(module, app) { var _a; const moduleMetadata = Reflect.getMetadata(module_decorater_1.MODULE_METADATA_KEY, module); if ((_a = moduleMetadata === null || moduleMetadata === void 0 ? void 0 : moduleMetadata.imports) === null || _a === void 0 ? void 0 : _a.length) { moduleMetadata.imports.forEach((importModules) => traverseModule(importModules, app)); } const controllers = moduleMetadata.controllers || []; const providers = moduleMetadata.providers || []; const allDependancies = []; allDependancies.push(...providers); allDependancies.push(...controllers); controllers.forEach((ControllerClass) => { const controllerInstance = ioc_container_1.DependencyInjection.get(ControllerClass, allDependancies.map((dep) => dep.name), module.name); const prefix = Reflect.getMetadata("prefix", ControllerClass) || ""; const routes = Reflect.getMetadata("routes", ControllerClass) || []; routes.forEach(({ method, path, handler }) => { app[method](`${prefix}${path}`, (req, res) => { const response = controllerInstance[handler](req, res); res.json(response); }); console.log(`✅ Registered: [${method.toUpperCase()}] ${prefix}${path}`); }); }); }