/* * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ (function () { 'use strict'; var Q = require('q'); var hyphenize = require('hyphenize'); var pkgBuilder = require('../pkg_builder'); var projectBuilder = require('../project_builder'); var packagePath = 'package.json'; /** * Iterate over needed package components, ensuring that required * parameters are set. * * @param {generator} generator The currently active generator. * @returns {generator} The passed generator, for promise chaining. */ function promptPackage (generator) { var deferred = Q.defer(); if (!generator.options['non-interactive']) { generator.prompt( [{ type: 'input', name: 'name', message: 'Project- Name:', default: pkgBuilder.getValue('name', hyphenize(generator.appname)) }, { type: 'input', name: 'description', message: 'Project- Description:', default: pkgBuilder.getValue('description') }, { type: 'input', name: 'version', message: 'Project- Version:', default: pkgBuilder.getValue('version', '0.0.1') }, { type: 'input', name: 'homepage', message: 'Project- Homepage:', default: pkgBuilder.getValue('homepage', 'http://www.openstack.org/') }, { type: 'input', name: 'author', message: 'Project- Author:', default: pkgBuilder.getValue('author', 'OpenStack (http://www.openstack.org/)') }], function (answers) { pkgBuilder.setValues(answers); deferred.resolve(generator); }); } else { deferred.resolve(generator); } return deferred.promise; } /** * Read any existing package.json file, to set our defaults. * * @param {generator} generator The currently active generator. * @returns {generator} The passed generator, for promise chaining. */ function initializePackage (generator) { var fs = generator.fs; // Read package.json if (fs.exists(packagePath)) { pkgBuilder.fromJSON(fs.read(packagePath)); } // Add files that should be ignored overall. projectBuilder.ignoreFile('node_modules'); // NPM execution failures. projectBuilder.ignoreFile('npm-debug.log'); // If you unzip something generated by npm pack, this is the directory it ends up in. projectBuilder.ignoreFile('package'); // Local .npm cache projectBuilder.ignoreFile('.npm'); return generator; } /** * Configure the project by adding required files. * * @param {generator} generator The currently active generator. * @returns {generator} The passed generator, for promise chaining. */ function configurePkg (generator) { projectBuilder.writeFile('package.json', pkgBuilder.toJSON); return generator; } module.exports = { init: initializePackage, prompt: promptPackage, configure: configurePkg }; })();