UNPKG

tspace-spear

Version:

tspace-spear is a lightweight, high-performance API framework for Node.js that leverages the native HTTP server and supports uWebSockets.js (C++) for maximum speed and efficiency.

124 lines 6.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createApp = createApp; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const child_process_1 = require("child_process"); const template_1 = require("./template"); const template_2 = require("../client/template"); const template_3 = require("../middleware/template"); const template_4 = require("../controller/template"); const template_5 = require("../service/template"); const template_6 = require("../dto/template"); const c = { bold: (text) => `\x1b[1m${text}\x1b[0m`, dim: (text) => `\x1b[2m${text}\x1b[0m`, green: (text) => `\x1b[32m${text}\x1b[0m`, cyan: (text) => `\x1b[36m${text}\x1b[0m`, underline: (text) => `\x1b[4m${text}\x1b[0m`, gray: (text) => `\x1b[90m${text}\x1b[0m`, reset: "\x1b[0m" }; async function createApp(inputPath) { if (!inputPath) { console.log("Missing target path, try: spear g app src"); process.exit(1); } const root = path_1.default.resolve(process.cwd(), inputPath); fs_1.default.mkdirSync(root, { recursive: true }); await fs_1.default.promises.writeFile(path_1.default.join(root, "package.json"), JSON.stringify({ name: path_1.default.basename(root), version: "1.0.0", main: "dist/index.js", scripts: { build: "tsc", start: "node dist/index.js", dev: "ts-node src/index.ts", }, dependencies: { "tspace-spear": "latest", "class-transformer": "0.5.1", "class-validator": "0.15.1" }, devDependencies: { "typescript": "5.6.2", "ts-node": "10.9.2", "@types/node": "16.18.126" }, }, null, 2)); await fs_1.default.promises.writeFile(path_1.default.join(root, "tsconfig.json"), JSON.stringify({ compilerOptions: { "target": "esnext", "module": "commonjs", "lib": ["esnext", "DOM"], "types": ["node"], "allowJs": true, "checkJs": false, "outDir": "dist", "rootDir": "src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, }, }, null, 2)); const src = path_1.default.join(root, "src"); await fs_1.default.promises.mkdir(src, { recursive: true }); await fs_1.default.promises.mkdir(path_1.default.join(src, "common", "middlewares"), { recursive: true }); await fs_1.default.promises.mkdir(path_1.default.join(src, "modules", "cats"), { recursive: true }); await fs_1.default.promises.writeFile(path_1.default.join(src, "index.ts"), template_1.AppTemplate); await fs_1.default.promises.writeFile(path_1.default.join(src, "client.ts"), template_2.ClientTemplate); await fs_1.default.promises.writeFile(path_1.default.join(src, "common", "middlewares", "log.middleware.ts"), template_3.MiddlewareTemplate); await fs_1.default.promises.writeFile(path_1.default.join(src, "modules", "cats", "cat.controller.ts"), template_4.ControllerTemplate); await fs_1.default.promises.writeFile(path_1.default.join(src, "modules", "cats", "cat.service.ts"), template_5.ServiceTemplate); await fs_1.default.promises.writeFile(path_1.default.join(src, "modules", "cats", "cat.dto.ts"), template_6.DtoTemplate); console.log(`\n${c.bold("$ npm install")}\n`); const startTime = Date.now(); const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]; let i = 0; const spinner = setInterval(() => { process.stdout.write(`\r ${c.cyan(frames[i])} Installing dependencies...`); i = (i + 1) % frames.length; }, 50); await new Promise((resolve, reject) => { (0, child_process_1.exec)("npm install", { cwd: root }, (error) => { if (error) return reject(error); return resolve(); }); }); await new Promise((resolve) => setTimeout(resolve, 500)); const nodeModulesPath = path_1.default.join(root, "node_modules"); let totalPhysicalPackages = 0; if (fs_1.default.existsSync(nodeModulesPath)) { const files = await fs_1.default.promises.readdir(nodeModulesPath); const packages = files.filter(file => !file.startsWith(".") && !file.startsWith("@")); totalPhysicalPackages = packages.length; } clearInterval(spinner); process.stdout.write("\r\x1b[K"); const endTime = Date.now(); const elapsedSeconds = ((endTime - startTime) / 1000).toFixed(2); console.log(`${c.bold(c.cyan("dependencies"))}`); console.log(`${c.gray("├──")} ${c.green("+")} tspace-spear${c.dim("@latest")}`); console.log(`${c.gray("├──")} ${c.green("+")} class-transformer${c.dim("@0.5.1")}`); console.log(`${c.gray("└──")} ${c.green("+")} class-validator${c.dim("@0.15.1")}`); console.log(`${c.gray("│")}`); console.log(`${c.bold(c.gray("devDependencies"))}`); console.log(`${c.gray("├──")} ${c.green("+")} typescript${c.dim("@5.6.2")}`); console.log(`${c.gray("├──")} ${c.green("+")} ts-node${c.dim("@10.9.2")}`); console.log(`${c.gray("└──")} ${c.green("+")} @types/node${c.dim("@16.18.126")}\n`); console.log(`\n${c.green(`${totalPhysicalPackages} packages installed`)} ${c.dim(`[${elapsedSeconds}s]`)}`); console.log(`${c.dim(`[${elapsedSeconds}s] npm install`)}`); console.log(`\n--------`); console.log("A local project was created for you and dependencies were installed automatically.\n"); console.log(`${c.green("Created spear project successfully")}\n`); console.log(c.bold(c.gray("# To get started, run:"))); console.log(`\n cd ${inputPath}\n ${c.cyan("npm run dev")}\n`); } //# sourceMappingURL=index.js.map