lina-infratech-cli
Version:
A CLI tool for Lina Infratech Developers
66 lines (51 loc) • 1.59 kB
text/typescript
import { execSync } from 'child_process'
import { cd, mkdir } from 'shelljs'
import { commitAndLint } from '../utils/commit-and-lint'
import {
generateConfigFiles,
generatePackageJson,
generateProjectStructure,
} from '../generator'
import { MESSAGES } from '../ui/messages'
import { logError, logSuccess } from '../utils/chalk/colors'
import { expressDependencies, expressDevDependencies } from '../utils/constants'
function installDependencies(): void {
const deps = expressDependencies.join(' ')
const devDeps = expressDevDependencies.join(' ')
console.log(MESSAGES.DEPS_INSTALL)
execSync(`npm i ${deps}`)
logSuccess(MESSAGES.DEPS_OK)
console.log(MESSAGES.DEV_DEPS_INSTALL)
execSync(`npm i -D ${devDeps}`)
logSuccess(MESSAGES.DEV_DEPS_OK)
}
interface initOptions {
express?: boolean
nest?: boolean
}
export async function projectInitAction(
projectName: string,
options: initOptions,
) {
logSuccess(`Creating project: ${projectName}...`)
console.log('options:', options)
if (options.express) {
try {
mkdir(`${process.cwd()}/${projectName}`)
cd(`${process.cwd()}/${projectName}`)
console.log(MESSAGES.NPM_START)
execSync('npm init -y')
logSuccess(MESSAGES.NPM_OK)
installDependencies()
generatePackageJson()
await generateConfigFiles()
generateProjectStructure()
commitAndLint('Initial commit - generated by Lina CLI')
} catch (error) {
logError(MESSAGES.GENERIC_ERROR, error)
process.exit(1)
}
} else {
logError('Please inform a init option')
}
}