UNPKG

@boostercloud/cli

Version:

CLI of the Booster Framework, the next level of abstraction for cloud-native applications

147 lines (146 loc) 6.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseConfig = void 0; const core_1 = require("@oclif/core"); const script_1 = require("../../common/script"); const brand_1 = require("../../common/brand"); const project_initializer_1 = require("../../services/project-initializer"); const user_prompt_1 = require("../../services/user-prompt"); const provider_service_1 = require("../../services/provider-service"); const project_checker_1 = require("../../services/project-checker"); class Project extends core_1.Command { async run() { const { args, flags } = await this.parse(Project); const { projectName } = args; try { if (!projectName) throw "You haven't provided a project name, but it is required, run with --help for usage"; (0, provider_service_1.assertNameIsCorrect)(projectName); await (0, project_checker_1.checkProjectAlreadyExists)(projectName); const parsedFlags = { projectName, ...flags }; await run(parsedFlags, this.config.version); } catch (error) { console.error(error); } } } Project.description = 'create a new project from scratch'; Project.flags = { help: core_1.Flags.help({ char: 'h' }), description: core_1.Flags.string({ char: 'd', description: 'a short description', }), version: core_1.Flags.string({ char: 'v', description: 'the initial version', }), author: core_1.Flags.string({ char: 'a', description: 'who is writing this?', }), homepage: core_1.Flags.string({ char: 'H', description: 'the website of this project', }), license: core_1.Flags.string({ char: 'l', description: 'which license will you use?', }), repository: core_1.Flags.string({ char: 'r', description: 'the URL of the repository', }), providerPackageName: core_1.Flags.string({ char: 'p', description: 'package name implementing the cloud provider integration where the application will be deployed (i.e: "@boostercloud/framework-provider-azure")', }), default: core_1.Flags.boolean({ description: 'generates the project with default parameters (i.e. --license=MIT)', default: false, }), skipInstall: core_1.Flags.boolean({ description: 'skip dependencies installation', default: false, }), skipGit: core_1.Flags.boolean({ description: 'skip git initialization', default: false, }), }; Project.args = { projectName: core_1.Args.string(), }; exports.default = Project; const run = async (flags, boosterVersion) => script_1.Script.init(`boost ${brand_1.default.energize('new')} 🚧`, (0, exports.parseConfig)(new user_prompt_1.default(), flags, boosterVersion)) .step('Creating project root', project_initializer_1.generateRootDirectory) .step('Generating config files', project_initializer_1.generateConfigFiles) .optionalStep(Boolean(flags.skipInstall), 'Installing dependencies', project_initializer_1.installDependencies) .optionalStep(Boolean(flags.skipGit), 'Initializing git repository', project_initializer_1.initializeGit) .info('Project generated!') .done(); const getSelectedProviderPackage = (provider) => { switch (provider) { case "@boostercloud/framework-provider-aws (AWS) - Currently deprecated" /* Provider.AWS */: return '@boostercloud/framework-provider-aws'; case "@boostercloud/framework-provider-azure (Azure)" /* Provider.AZURE */: return '@boostercloud/framework-provider-azure'; default: return ''; } }; const getProviderPackageName = async (prompter, providerPackageName) => { if (providerPackageName) { return providerPackageName; } const providerSelection = (await prompter.defaultOrChoose(providerPackageName, "What's the package name of your provider infrastructure library?", ["@boostercloud/framework-provider-aws (AWS) - Currently deprecated" /* Provider.AWS */, "@boostercloud/framework-provider-azure (Azure)" /* Provider.AZURE */, "Other" /* Provider.OTHER */])); if (providerSelection === "Other" /* Provider.OTHER */) { return await prompter.defaultOrPrompt(undefined, "What's the other provider integration library? e.g. @boostercloud/framework-provider-azure"); } else { return getSelectedProviderPackage(providerSelection); } }; const parseConfig = async (prompter, flags, boosterVersion) => { if (flags.default) { return Promise.resolve({ projectName: flags.projectName, providerPackageName: '@boostercloud/framework-provider-aws', description: '', version: '0.1.0', author: '', homepage: '', license: 'MIT', repository: '', boosterVersion, default: flags.default, skipInstall: flags.skipInstall || false, skipGit: flags.skipGit || false, }); } const description = await prompter.defaultOrPrompt(flags.description, 'What\'s your project description? (default: "")'); const versionPrompt = await prompter.defaultOrPrompt(flags.version, "What's the first version? (default: 0.1.0)"); const version = versionPrompt || '0.1.0'; const author = await prompter.defaultOrPrompt(flags.author, 'Who\'s the author? (default: "")'); const homepage = await prompter.defaultOrPrompt(flags.homepage, 'What\'s the website? (default: "")'); const licensePrompt = await prompter.defaultOrPrompt(flags.license, 'What license will you be publishing this under? (default: MIT)'); const license = licensePrompt || 'MIT'; const repository = await prompter.defaultOrPrompt(flags.repository, 'What\'s the URL of the repository? (default: "")'); const providerPackageName = await getProviderPackageName(prompter, flags.providerPackageName); return Promise.resolve({ projectName: flags.projectName, providerPackageName, description, version, author, homepage, license, repository, boosterVersion, default: false, skipInstall: flags.skipInstall || false, skipGit: flags.skipGit || false, }); }; exports.parseConfig = parseConfig;