UNPKG

apiconnect-cli-loopback

Version:

Plugin for IBM API Connect Developer Toolkit

132 lines (122 loc) 4.6 kB
/********************************************************* {COPYRIGHT-TOP} *** * Licensed Materials - Property of IBM * 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63 * * (C) Copyright IBM Corporation 2016, 2017 * * All Rights Reserved. * US Government Users Restricted Rights - Use, duplication or disclosure * restricted by GSA ADP Schedule Contract with IBM Corp. ********************************************************** {COPYRIGHT-END} **/ // Node module: apiconnect-cli-loopback 'use strict'; var Promise = require('bluebird'); var Workspace = require('loopback-workspace').models.Workspace; var chalk = require('chalk'); var genApiAndProduct = require('./swagger').genApiAndProduct; var g = require('strong-globalize')(); var glob = Promise.promisify(require('glob')); var logger = require('apiconnect-cli-logger'); var mkdirp = Promise.promisify(require('mkdirp')); var prompt = require('./app-prompt').prompt; var readdir = Promise.promisify(require('fs').readdir); var writeFile = Promise.promisify(require('fs').writeFile); var npmInstall = require('./npm-install'); /** * Create a new loopback project * * @param {object} [options] * @param {string} [options.name] Application name * @param {string} [options.dir] Application directory * @param {string} [options.template] Loopback template * @param {string} [options.explorer] Enable loopback-explorer endpoint * @param {Stream} [options.outstream] * @param {Stream} [options.errstream] * @param {boolean} [options.skipNextSteps] Skip next steps message * @param {boolean} [options.skipInstall] Skip npm install * @param {string} [options.npmLogLevel] Log verbosity for npm install command * @param {boolean} [options.npmLogPipe] Log npm output to outstream instead of process.stdout/stderr * * Warn: Sideeffect of this function changes process.cwd and process.env.WORKSPACE_DIR to options.dir */ function create(options) { options = options || {}; options.outstream = options.outstream || logger; options.errstream = options.errstream || logger; var createFromTemplate = Promise.promisify(Workspace.createFromTemplate); return prompt(options).then(function(answers) { return mkdirp(answers.dir).then(function() { return readdir(answers.dir); }).then(function(files) { if (files.length > 0) { throw new Error(g.f('Directory %s is not empty.', answers.dir)); } process.chdir(answers.dir); process.env.WORKSPACE_DIR = answers.dir; options.dir = answers.dir; }).then(function() { return createFromTemplate( answers.template, answers.name, { 'loopback-component-explorer': !!options.explorer, loopbackVersion: answers.loopbackVersion, } ); }).then(function() { return writeFile('.yo-rc.json', '{}', 'utf8'); }).then(function() { return glob('**', { ignore: 'node_modules/**' }).then(function(files) { files.forEach(function(file) { options.outstream.write(chalk.green(' Created ') + file + '\n'); }); }); }).then(function() { if (options.skipInstall) { return; } return npmInstall(options); }).then(function() { if (options.skipInstall) { return; } return genApiAndProduct(); }).then(function() { if (options.skipNextSteps) { return; } return printNextSteps({ logger: options.outstream, dir: answers.dir, skipInstall: options.skipInstall, }); }).return(answers.dir); }); }; module.exports = create; function printNextSteps(opts) { var logger = opts.logger; logger.write('\n'); logger.write(g.f('Next steps:\n')); logger.write('\n'); if (opts.dir && opts.dir !== '.') { logger.write(g.f(' Change directory to your app\n')); logger.write(chalk.green(g.f(' $ cd ' + opts.dir + '\n'))); logger.write('\n'); } if (opts.skipInstall) { logger.write(g.f(' Install the required dependencies\n')); logger.write(chalk.green(g.f(' $ npm install\n'))); logger.write('\n'); logger.write(g.f(' Generate product and swagger files\n')); logger.write(chalk.green(g.f(' $ apic loopback:refresh\n'))); logger.write('\n'); } logger.write(g.f(' Create a model in your app\n')); logger.write(chalk.green(g.f(' $ apic create --type model\n'))); logger.write('\n'); logger.write(g.f(' Compose your API, run, manage, enforce and deploy' + ' it with API Connect\n')); logger.write(chalk.green(g.f(' $ apic edit\n'))); logger.write('\n'); };