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

104 lines (103 loc) 5.01 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.build = build; exports.deploy = deploy; exports.destroy = destroy; /* eslint-disable @typescript-eslint/no-explicit-any */ require("reflect-metadata"); const meta_object_parser_1 = require("./meta-object-parser"); const module_tree_walker_1 = require("./module-tree-walker"); const file_handler_1 = require("./file-handler"); const config_utils_1 = require("../../utils/config-utils"); const dependancy_tree_walker_1 = require("./dependancy-tree-walker"); const child_process_1 = require("child_process"); const platform_factory_1 = require("../../platform/platform-factory"); const platform_type_enum_1 = require("../../constants/enums/platform-type.enum"); function build() { return __awaiter(this, void 0, void 0, function* () { const outputDir = "arky.out"; const tempFolder = "temp"; const appConfig = (0, config_utils_1.loadConfig)(); const fileHandler = new file_handler_1.FileHandler(); fileHandler.cleaningDirectory(outputDir); const treeWalker = new module_tree_walker_1.ModuleTreeWalker(appConfig); const moduleDeclarations = treeWalker.loadModuleDeclarations(); if (!moduleDeclarations) { return; } const controllerDeclarations = treeWalker.loadControllerDeclarations(moduleDeclarations); const dependencyTreeWalker = new dependancy_tree_walker_1.DependencyTreeWalker(); const metaObjParser = new meta_object_parser_1.MetaObjectParser(dependencyTreeWalker); const controllerMetas = metaObjParser.getControllerMetaObjects(controllerDeclarations); fileHandler.createTempProjectWithoutDecorators(tempFolder); yield compilePlateformSpecificCode(controllerMetas, (appConfig === null || appConfig === void 0 ? void 0 : appConfig.platform) || platform_type_enum_1.PlatformType.AWS, outputDir, tempFolder); fileHandler.cleaningDirectory(tempFolder); }); } function compilePlateformSpecificCode(controllerMetas, platformType, outputDir, tempFolder) { return __awaiter(this, void 0, void 0, function* () { const plateformFactory = platform_factory_1.PlatformFactory.getInstance(platformType); const generator = plateformFactory.getCodeGenerator(); controllerMetas.forEach((controller) => generator.generate(controller, outputDir, tempFolder)); const bundler = plateformFactory.getBundler(); yield Promise.all(controllerMetas.map((controller) => bundler.bundle(controller.fileName, outputDir))); // delete typescript file controllerMetas.forEach((controller) => { generator.deleteTypescriptFile(controller, outputDir); }); const iacGenerator = plateformFactory.getIacGenerator(); iacGenerator.generate(controllerMetas, outputDir); }); } function deploy() { const result = (0, child_process_1.spawnSync)("cdk", ["deploy", "--all", "--require-approval", "never"], { stdio: "inherit", shell: true, }); if (result.status !== 0) { process.exit(result.status || 1); } } function destroy() { const result = (0, child_process_1.spawnSync)("cdk", ["destroy", "--all"], { stdio: "inherit", shell: true, }); if (result.status !== 0) { process.exit(result.status || 1); } } /** * This function compiles TypeScript files into JavaScript using the TypeScript compiler (tsc). * It runs the `tsc` command in a child process and waits for it to complete. * If the compilation is successful, it resolves the promise; otherwise, it rejects it. * * @returns {Promise<void>} A promise that resolves when the TypeScript compilation is complete. */ function compileTypescript() { return new Promise((resolve, rejects) => { // Run the `tsc` command const result = (0, child_process_1.spawnSync)("npm", ["run", "build"], { stdio: "inherit", shell: true, }); // Check the result if (result.status === 0) { console.log("✅ TypeScript build completed successfully!\n"); resolve(); } else { console.error("⚠️TypeScript build failed.\n"); process.exit(1); // Exit with an error code } }); }