js-generator-openstack/generators/app/lib/component/pkg.js

120 lines
3.6 KiB
JavaScript

/*
* 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 <openstack-dev@lists.openstack.org> (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
};
})();