UNPKG

@pnp/generator-spfx

Version:

This Yeoman generator helps organisations to improve their development workflow with the SharePoint Framework. It extends the functionalities of the @microsoft/generator-sharepoint based on best pattern and practices. This generator extends the capabiliti

157 lines (125 loc) 3.98 kB
const inquirer = require('inquirer'); const chalk = require('chalk'); const utils = require('../lib/util'); const fgYellow = chalk.whiteBright.bold; let angularVersion = ""; // check if @angular/cli is installed - otherwise disable this option const checkAngular = (() => { try { const ngVersion = require('@angular/cli/package.json'); // support for Angular 6 and all above versions if ((+ngVersion.version.split('.')[0]) >= 6) { angularVersion = ` (uses @angular/cli ${ngVersion.version})`; return false; }; return true; } catch (error) { // Angular is disabled because no Valid client could be found return true; } })(); const supportedSPFxTargets = [{ name: 'SharePoint Online only (latest)', value: 'spo' }]; // if environment optiosn have been specified const environmentOptions = [{ type: 'list', message: 'Which baseline packages do you want to target for your component(s)?', name: 'spfxenv', choices: supportedSPFxTargets }]; // SharePoint Online and on-premise 2019 supported frameworks const spoFrameworks = [ new inquirer.Separator( fgYellow('Additional Frameworks') ), { name: '- Aurelia', value: 'aurelia' }, { name: '- Angular Elements' + angularVersion, value: 'angularelements', disabled: checkAngular }, { name: '- Handlebars', value: 'handlebars' }, { name: '- Vue.js', value: 'vuejs' }, new inquirer.Separator( fgYellow('Enhanced SPFx') ), { name: '- ReactJS', value: 'reactjs.plus' }, // { // name: '- Knockout (deprecated)', // value: 'knockout.plus' // }, { name: '- No Framework', value: 'none.plus' } ]; let configOptions = [ // select your framework { type: 'list', message: 'Choose your framework', name: 'framework', choices: answers => { if (answers.spfxenv) { try { return spoFrameworks; } catch (error) { throw error; } } } } ]; // Add configuration of Addon generator const addon = require('../generators/addons/promptConfig'); configOptions = configOptions.concat(addon); // Add configuration of angular elements generator const angularElements = require('../generators/angularelements/promptConfig'); configOptions = configOptions.concat(angularElements); // Add configuration of Vue.JS generator const vuejs = require('../generators/vuejs/promptConfig'); configOptions = configOptions.concat(vuejs); // Add configuration of Aurelia generator const aurelia = require('../generators/aurelia/promptConfig'); configOptions = configOptions.concat(aurelia); // Add configuration of reactjs.plus generator const reactplus = require('../generators/reactjs.plus/promptConfig'); configOptions = configOptions.concat(reactplus); // Add configuration of No famework generator const noframework = require('../generators/noframework.plus/promptConfig'); configOptions = configOptions.concat(noframework); const promptConfig = () => { // return questions based on the environmen command line switch const _getConfigOptions = (environment) => { if (environment === undefined) { // embed environment selection into questions return environmentOptions.concat(configOptions); } else { // auto-set option when environment command line switch was used environmentOptions[0].when = answers => { answers.spfxenv = environment; return false; } return environmentOptions.concat(configOptions); } } return { config: _getConfigOptions } }; module.exports = promptConfig();