@onurege3467/zerohelper
Version:
ZeroHelper is a versatile high-performance utility library and database framework for Node.js, fully written in TypeScript.
86 lines (85 loc) ⢠3.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initCommand = void 0;
const commander_1 = require("commander");
const chalk_1 = __importDefault(require("chalk"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const package_json_1 = require("../../package.json");
const prompts_1 = require("../utils/prompts");
exports.initCommand = new commander_1.Command().name('init');
exports.initCommand
.description('Initialize ZeroHelper in your project (Interactive)')
.action(async () => {
console.log(chalk_1.default.bold.blue(`\nš Welcome to ZeroHelper v${package_json_1.version} Setup\n`));
try {
const answers = await (0, prompts_1.getInitAnswers)();
const extraPrompts = await (0, prompts_1.getFilePathPrompts)(answers.adapter, answers.enableCache, answers.cacheType);
const extraAnswers = await inquirer_1.default.prompt(extraPrompts);
const finalAnswers = { ...answers, ...extraAnswers };
const configObject = buildConfig(finalAnswers);
const configTemplate = formatConfigTemplate(finalAnswers, configObject);
fs_1.default.writeFileSync(path_1.default.join(process.cwd(), 'zero.config.ts'), configTemplate);
console.log(chalk_1.default.green('\nā
zero.config.ts created successfully!'));
console.log(chalk_1.default.gray('\nš Usage example:'));
console.log(chalk_1.default.yellow(`import { database } from '@onurege3467/zerohelper';`));
console.log(chalk_1.default.yellow(`import { zeroConfig } from './zero.config';`));
console.log(chalk_1.default.yellow(`const db = database.createDatabase(zeroConfig);`));
}
catch (error) {
console.error(chalk_1.default.red(error.message));
process.exit(1);
}
});
function buildConfig(answers) {
if (['json', 'zpack', 'sqlite', 'toon'].includes(answers.adapter)) {
return JSON.stringify({
adapter: answers.adapter,
config: {
path: answers.filePath,
...(answers.enableCache && {
cache: {
type: answers.cacheType || 'memory',
...(answers.cacheType === 'memory' && answers.cacheTtl && { ttl: answers.cacheTtl * 1000 })
}
})
}
}, null, 2);
}
const config = {
adapter: answers.adapter,
config: {
host: answers.host,
port: answers.port,
...(answers.username && { username: answers.username }),
...(answers.password && { password: answers.password }),
database: answers.database,
...(answers.adapter === 'mongodb' && { url: `mongodb://${answers.host}:${answers.port}/${answers.database}` })
}
};
if (answers.enableCache && answers.cacheType) {
config.config.cache = {
type: answers.cacheType
};
if (answers.cacheType === 'redis') {
config.config.cache.host = answers.host;
config.config.cache.port = 6379;
}
else if (answers.cacheTtl) {
config.config.cache.ttl = answers.cacheTtl * 1000;
}
}
return JSON.stringify(config, null, 2);
}
function formatConfigTemplate(answers, configObject) {
return `/**
* ZeroHelper Configuration
* Generated on ${new Date().toLocaleDateString()}
*/
export const zeroConfig = ${configObject};
`;
}
const inquirer_1 = __importDefault(require("inquirer"));