140 lines
4.0 KiB
JavaScript
140 lines
4.0 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.
|
|
*/
|
|
|
|
/**
|
|
* This generator module handles questions regarding the project's structure,
|
|
* such as engine, common output directories, and language level. It informs
|
|
* other generators, such as test framework generation, packaging tools,
|
|
* and/or configuration files.
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
|
|
var Q = require('q');
|
|
var projectBuilder = require('../project_builder');
|
|
|
|
/**
|
|
* Initialize the component by setting configuration defaults. These, or previously set
|
|
* versions, will be accessible immediately, however it's good practice not to access them
|
|
* until after the prompting phase, as we cannot guarantee that they will be properly set.
|
|
*
|
|
* @param {generator} generator The currently active generator.
|
|
* @returns {generator} The passed generator, for promise chaining.
|
|
*/
|
|
function initialize (generator) {
|
|
|
|
// Set our defaults:
|
|
generator.config.defaults({
|
|
engine: 'browser',
|
|
language: 'es5',
|
|
srcDir: './src',
|
|
distDir: './dist',
|
|
testDir: './test'
|
|
});
|
|
|
|
return generator;
|
|
}
|
|
|
|
/**
|
|
* If applicable, prompt the user for a project type.
|
|
*
|
|
* @param {generator} generator The currently active generator.
|
|
* @returns {generator} The passed generator, for promise chaining.
|
|
*/
|
|
function prompt (generator) {
|
|
var deferred = Q.defer();
|
|
|
|
// We default to a node.js project.
|
|
if (!generator.options['non-interactive']) {
|
|
// Go through the prompts.
|
|
generator.prompt(
|
|
[{
|
|
type: 'list',
|
|
name: 'engine',
|
|
message: 'Structure- Runtime Engine:',
|
|
choices: [
|
|
{
|
|
name: 'Browser',
|
|
value: 'browser'
|
|
},
|
|
{
|
|
name: 'Node.js',
|
|
value: 'node'
|
|
}
|
|
],
|
|
default: generator.config.get('engine')
|
|
}, {
|
|
type: 'list',
|
|
name: 'language',
|
|
message: 'Structure- Language:',
|
|
choices: [
|
|
{
|
|
name: 'ECMAScript 5',
|
|
value: 'es5'
|
|
},
|
|
{
|
|
name: 'ECMAScript 6',
|
|
value: 'es6'
|
|
}
|
|
],
|
|
default: generator.config.get('language')
|
|
}, {
|
|
type: 'input',
|
|
name: 'srcDir',
|
|
message: 'Structure- Source Directory:',
|
|
default: generator.config.get('srcDir')
|
|
}, {
|
|
type: 'input',
|
|
name: 'testDir',
|
|
message: 'Structure- Test Directory:',
|
|
default: generator.config.get('testDir')
|
|
}, {
|
|
type: 'input',
|
|
name: 'distDir',
|
|
message: 'Structure- Dist Directory:',
|
|
default: generator.config.get('distDir'),
|
|
when: function (answers) {
|
|
return answers.engine === 'browser';
|
|
}
|
|
}],
|
|
function (answers) {
|
|
generator.config.set(answers);
|
|
deferred.resolve(generator);
|
|
});
|
|
} else {
|
|
deferred.resolve(generator);
|
|
}
|
|
return deferred.promise;
|
|
}
|
|
|
|
/**
|
|
* Add any output directories to the ignore files.
|
|
*
|
|
* @param {generator} generator The currently active generator.
|
|
* @returns {generator} The passed generator, for promise chaining.
|
|
*/
|
|
function configure (generator) {
|
|
projectBuilder.ignoreFile(generator.config.get('distDir'));
|
|
return generator;
|
|
}
|
|
|
|
module.exports = {
|
|
init: initialize,
|
|
prompt: prompt,
|
|
configure: configure
|
|
};
|
|
})();
|