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
JavaScript
;
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