@boykaframework/boyka-cli
Version:
🧑🏻💻 Command line assistant for Boyka Framework
71 lines (64 loc) • 2.23 kB
text/typescript
import fs from 'fs';
import path from 'path';
import { createApiSetting } from './api.js';
import { createWebSetting } from './web.js';
import { createMobileSetting } from './mobile.js';
import {
configFileExists,
configFileName,
configPathNotFolder,
configPathNotFound,
initMessage,
executeTask,
createConfigMessages,
} from '../../../utils/constants.js';
import { FrameworkSetting, UserInput } from '../../../types/types.js';
import { createConfigFile } from '../../../utils/json.js';
import { getUserInputs } from '../../user-inputs.js';
import { BoykaError } from '../../../utils/boyka-error.js';
import { createMacSetting } from './mac.js';
export const handleConfigInit = async (configPath: string) => {
console.info(initMessage(configPath));
const inputs = await getUserInputs();
createConfigJson(inputs, configPath);
};
const checkConfigFile = (configPath: string) => {
if (fs.existsSync(path.join(configPath, configFileName))) {
throw new BoykaError(configFileExists(configPath));
}
};
const checkConfigPath = (configPath: string) => {
if (!fs.lstatSync(configPath).isDirectory()) {
throw new BoykaError(configPathNotFolder(configPath));
}
if (!fs.existsSync(configPath)) {
throw new BoykaError(configPathNotFound(configPath));
}
};
const validateConfigPath = (configPath: string) => {
checkConfigPath(configPath);
checkConfigFile(configPath);
};
const createUiSetting = (inputs: UserInput) => {
let frameworkSetting: FrameworkSetting;
if (inputs.sub_platform === 'Web') {
frameworkSetting = createWebSetting(inputs);
} else if (inputs.sub_platform === 'Mac') {
frameworkSetting = createMacSetting(inputs);
} else {
frameworkSetting = createMobileSetting(inputs);
}
return frameworkSetting;
};
export const createConfigJson = async (inputs: UserInput, configPath: string) => {
const path = configPath === '.' ? process.cwd() : configPath;
validateConfigPath(path);
let setting: FrameworkSetting;
if (inputs.platform === 'ui') {
setting = createUiSetting(inputs);
} else {
setting = createApiSetting(inputs);
}
await executeTask(createConfigFile(path, setting), createConfigMessages(path, 'created'));
return true;
};