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
JavaScript
;
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}`);
});
});
}