feat: modules, products, services, services kits

This commit is contained in:
2025-09-16 10:56:10 +04:00
parent f2746b8b65
commit 553e76d610
92 changed files with 8404 additions and 103 deletions

View File

@ -0,0 +1,86 @@
import * as fs from "fs";
import * as path from "path";
import axios, { AxiosResponse } from "axios";
import * as handlebars from "handlebars";
// region types
type Module = {
id: number;
key: string;
label: string;
iconName: string;
description: string;
};
type ModulesResponse = {
items: Module[];
};
type Args = {
[key: string]: string | boolean;
};
// endregion
// region utils
const getArgs = (): Args =>
process.argv.slice(2).reduce((args: Args, arg: string) => {
if (arg.startsWith("--")) {
// Handle long arguments like --port=8000
const [key, value] = arg.slice(2).split("=");
args[key] = value !== undefined ? value : true;
} else if (arg.startsWith("-") && arg.length > 1) {
// Handle short arguments like -p=8000
const [key, value] = arg.slice(1).split("=");
args[key] = value !== undefined ? value : true;
}
return args;
}, {});
// endregion
const kwargs = getArgs();
// region constants
const HOST = kwargs.host ?? kwargs.h ?? "127.0.0.1";
const PORT = kwargs.port ?? kwargs.p ?? "8000";
const ENDPOINT = `http://${HOST}:${PORT}/api/module/built-in/`;
const TEMPLATE_PATH = path.join(
__dirname,
"templates",
"modulesFileTemplate.hbs"
);
const OUTPUT_PATH = path.join(__dirname, "..", "modules.tsx");
// endregion
const templateSource = fs.readFileSync(TEMPLATE_PATH, "utf8");
const template = handlebars.compile(templateSource);
handlebars.registerHelper("uppercase", text => {
return text.replace(/([a-z])([A-Z])/g, "$1_$2").toUpperCase();
});
const generateRows = (modules: Module[]) => {
try {
const data = {
modules,
};
const tsxContent = template(data);
fs.writeFileSync(OUTPUT_PATH, tsxContent);
console.log("File successfully generated.");
} catch (error) {
console.error(error);
}
};
const modulesFileGen = () => {
console.log("Start file generation...");
axios
.get(ENDPOINT)
.then((response: AxiosResponse<ModulesResponse>) => {
generateRows(response.data.items);
})
.catch(err => console.log(err));
};
modulesFileGen();