UNPKG

now-sync

Version:

A tool to help developers sync their JavaScript resources with ServiceNow.

125 lines (107 loc) 3.39 kB
const _ = require('lodash'); const inquirer = require('inquirer'); const CommandParser = require('../command-parser'); const { saveConfigFile } = require('../../util/config'); const { compileFileTemplate } = require('../../util/file-naming'); const { logInfo } = require('../../util/logging'); module.exports = class Config extends CommandParser { constructor(args) { super(args); this.requiresConfigFile = true; } async action() { const { table, nameField, fileFields, confirm } = this.args; const { promptTable, promptNameField, promptConfirm, promptFileFields } = await this.initialPrompt(this.args); const finalTable = (table || promptTable).toLowerCase(); const finalNameField = nameField || promptNameField; const finalFileFields = fileFields || promptFileFields; const finalConfirm = confirm || promptConfirm; if (finalConfirm === false) { return; } const fileFieldNames = _.map(finalFileFields.split(','), fileField => fileField.trim().toLowerCase() ); const extensionQuestions = []; _.forEach(fileFieldNames, fieldName => { extensionQuestions.push({ name: fieldName, type: 'input', message: `File extension for field \`${ fieldName }\`? (don’t include the period[.])`, validate: extensionAnswer => !!extensionAnswer }); }); const extensions = await inquirer.prompt(extensionQuestions); const formattedNameFields = _.map(finalNameField.split(','), name => name.trim().toLowerCase() ); this.config.config[finalTable] = { nameField: formattedNameFields, formats: [] }; this.config.records[finalTable] = []; _.forEach(fileFieldNames, field => { this.config.config[finalTable].formats.push({ fileName: compileFileTemplate( formattedNameFields, field, extensions[field] ), contentField: field }); }); saveConfigFile(this.config); logInfo(`Created config for table ${finalTable}.`); } initialPrompt({ table, nameField, fileFields, confirm }) { const questions = []; if (!table) { questions.push({ name: 'promptTable', type: 'input', message: 'Table (API) name?', store: true, validate: answer => !!answer }); } if (!nameField) { questions.push({ name: 'promptNameField', type: 'input', message: 'Which field(s) to use as the table’s name field? (Use commas[,] to separate fields)', store: true, validate: answer => !!answer }); } if (!confirm) { questions.push({ name: 'promptConfirm', type: 'confirm', message: 'Table configuration already exists! Are you sure you want to reconfigure?', default: false, when: answers => !!this.config.config[answers.table] }); } if (!fileFields) { questions.push({ name: 'promptFileFields', type: 'input', message: 'Field name(s) to save as files? (Use commas[,] to separate field names)', validate: answer => !!answer, when: answers => _.isUndefined(answers.confirmTable) || answers.confirmTable }); } return inquirer.prompt(questions); } };