@foal/cli
Version:
CLI tool for FoalTS
135 lines (134 loc) • 5.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createApp = createApp;
// 3p
const safe_1 = require("colors/safe");
// FoalTS
const file_system_1 = require("../../file-system");
const utils_1 = require("../../utils");
async function createApp({ name, autoInstall, initRepo, mongodb = false, yaml = false }) {
const names = (0, utils_1.getNames)(name);
utils_1.logger.log();
utils_1.logger.log(' ------------------------------------------------- ');
utils_1.logger.log('| |');
utils_1.logger.log('| Foal |');
utils_1.logger.log('| |');
utils_1.logger.log(' ------------------------------------------------- ');
utils_1.logger.log();
const locals = names;
const fs = new file_system_1.FileSystem();
if (fs.exists(names.kebabName)) {
utils_1.logger.log((0, safe_1.red)(' Error: ') + `The target directory "${names.kebabName}" already exists.`);
utils_1.logger.log('Please remove it before proceeding.');
utils_1.logger.log();
return;
}
fs
.ensureDir(names.kebabName)
.cd(names.kebabName);
utils_1.logger.log(' 📂 Creating files...');
utils_1.logger.log();
fs
.hideLogs()
.copy('app/gitignore', '.gitignore')
.renderOnlyIf(!mongodb, 'app/package.json', 'package.json', locals)
.renderOnlyIf(mongodb, 'app/package.mongodb.json', 'package.json', locals)
.setOrUpdateProjectDependencyOnlyIf(yaml, 'yamljs', '~0.3.0')
.copy('app/tsconfig.app.json', 'tsconfig.app.json')
.copy('app/tsconfig.e2e.json', 'tsconfig.e2e.json')
.copy('app/tsconfig.json', 'tsconfig.json')
.copy('app/tsconfig.test.json', 'tsconfig.test.json')
.copy('app/.eslintrc.js', '.eslintrc.js')
// Config
.ensureDir('config')
.cd('config')
.renderOnlyIf(!mongodb && !yaml, 'app/config/default.json', 'default.json', locals)
.renderOnlyIf(!mongodb && yaml, 'app/config/default.yml', 'default.yml', locals)
.renderOnlyIf(mongodb && !yaml, 'app/config/default.mongodb.json', 'default.json', locals)
.renderOnlyIf(mongodb && yaml, 'app/config/default.mongodb.yml', 'default.yml', locals)
.renderOnlyIf(!yaml, 'app/config/development.json', 'development.json', locals)
.renderOnlyIf(yaml, 'app/config/development.yml', 'development.yml', locals)
.renderOnlyIf(!mongodb && !yaml, 'app/config/e2e.json', 'e2e.json', locals)
.renderOnlyIf(!mongodb && yaml, 'app/config/e2e.yml', 'e2e.yml', locals)
.renderOnlyIf(mongodb && !yaml, 'app/config/e2e.mongodb.json', 'e2e.json', locals)
.renderOnlyIf(mongodb && yaml, 'app/config/e2e.mongodb.yml', 'e2e.yml', locals)
.renderOnlyIf(!yaml, 'app/config/production.json', 'production.json', locals)
.renderOnlyIf(yaml, 'app/config/production.yml', 'production.yml', locals)
.renderOnlyIf(!mongodb && !yaml, 'app/config/test.json', 'test.json', locals)
.renderOnlyIf(!mongodb && yaml, 'app/config/test.yml', 'test.yml', locals)
.renderOnlyIf(mongodb && !yaml, 'app/config/test.mongodb.json', 'test.json', locals)
.renderOnlyIf(mongodb && yaml, 'app/config/test.mongodb.yml', 'test.yml', locals)
.cd('..')
// Public
.ensureDir('public')
.cd('public')
.copy('app/public/index.html', 'index.html')
.copy('app/public/logo.png', 'logo.png')
.cd('..')
// Src
.ensureDir('src')
.cd('src')
.copy('app/src/db.ts', 'db.ts')
.copy('app/src/e2e.ts', 'e2e.ts')
.copy('app/src/index.ts', 'index.ts')
.copy('app/src/test.ts', 'test.ts')
// App
.ensureDir('app')
.cd('app')
.copy('app/src/app/app.controller.ts', 'app.controller.ts')
// Controllers
.ensureDir('controllers')
.cd('controllers')
.copy('app/src/app/controllers/index.ts', 'index.ts')
.copy('app/src/app/controllers/api.controller.ts', 'api.controller.ts')
.copy('app/src/app/controllers/api.controller.spec.ts', 'api.controller.spec.ts')
.cd('..')
// Entities
.ensureDir('entities')
.cd('entities')
.copy('app/src/app/entities/index.ts', 'index.ts')
.copyOnlyIf(!mongodb, 'app/src/app/entities/user.entity.ts', 'user.entity.ts')
.copyOnlyIf(mongodb, 'app/src/app/entities/user.entity.mongodb.ts', 'user.entity.ts')
.cd('..')
// Hooks
.ensureDir('hooks')
.cd('hooks')
.copy('app/src/app/hooks/index.ts', 'index.ts')
.cd('..')
// Services
.ensureDir('services')
.cd('services')
.copy('app/src/app/services/index.ts', 'index.ts')
.cd('..')
.cd('..')
// E2E
.ensureDir('e2e')
.cd('e2e')
.copy('app/src/e2e/index.ts', 'index.ts')
.cd('..')
// Scripts
.ensureDir('scripts')
.cd('scripts')
.copy('app/src/scripts/create-user.ts', 'create-user.ts');
if (autoInstall) {
const { failed } = await (0, utils_1.installDependencies)(names.kebabName);
utils_1.logger.log();
if (failed) {
return;
}
}
if (initRepo) {
utils_1.logger.log(' 📔 Initializing git repository...');
utils_1.logger.log();
await (0, utils_1.initGitRepo)(names.kebabName);
}
utils_1.logger.log('✨ Project successfully created.');
utils_1.logger.log('👉 Here are the next steps:');
utils_1.logger.log();
utils_1.logger.logCommand(`cd ${names.kebabName}`);
if (!autoInstall) {
utils_1.logger.logCommand('npm install');
}
utils_1.logger.logCommand('npm run dev');
utils_1.logger.log();
}