From 9f66cc58adfd57b43c57d7a35cd4b506c1c5a611 Mon Sep 17 00:00:00 2001 From: kpallardy Date: Wed, 23 Oct 2019 18:28:30 +0200 Subject: [PATCH 1/2] Use async and await instead of wait --- jhipster-uml.js | 2 +- lib/editors/editor_detector.js | 8 +- lib/editors/parser_factory.js | 12 +-- lib/helpers/question_asker.js | 36 ++----- lib/jhipsteruml.js | 170 +++++++++++++++++---------------- 5 files changed, 108 insertions(+), 120 deletions(-) diff --git a/jhipster-uml.js b/jhipster-uml.js index 7e50620..298f114 100755 --- a/jhipster-uml.js +++ b/jhipster-uml.js @@ -1,4 +1,4 @@ -#!/usr/bin/env node +#!/usr/bin/env node --max-old-space-size=2048 /* eslint-disable global-require */ const chalk = require('chalk'); diff --git a/lib/editors/editor_detector.js b/lib/editors/editor_detector.js index 388b988..dc7e0b7 100644 --- a/lib/editors/editor_detector.js +++ b/lib/editors/editor_detector.js @@ -33,7 +33,7 @@ module.exports = { * @param root {Object} the document's root. * @return {string} the editor's name. */ -function detect(root) { +async function detect(root) { if (!root) { throw new BuildException( exceptions.NullPointer, 'The root element can not be null.'); @@ -53,16 +53,16 @@ function detect(root) { 'Your editor has not been detected, and this should not be happening.' + '\nPlease report this issue by mentioning what your editor is.'); } - return askForEditor(); + return await askForEditor(); } -function askForEditor() { +async function askForEditor() { const choices = UndetectedEditors; choices.push({ value: 'ERROR', name: 'I don\'t see my editor.' }); - const choice = selectMultipleChoices({ + const choice = await selectMultipleChoices({ choices, question: 'Please choose between the available editors:' }); diff --git a/lib/editors/parser_factory.js b/lib/editors/parser_factory.js index 425ed7b..f0da9fa 100644 --- a/lib/editors/parser_factory.js +++ b/lib/editors/parser_factory.js @@ -36,7 +36,7 @@ module.exports = { * @param args {Object} the arguments: file, files, databaseType, and the noUserManagement flag. * @return {Parser} the created parser. */ -function createParser(args) { +async function createParser(args) { if (!args || !args.file || !args.databaseType) { throw new BuildException( exceptions.IllegalArgument, @@ -47,16 +47,16 @@ function createParser(args) { const root = getRootElement(readFileContent(args.file)); return getFileParserByEditor(args.editor, root, types, args.noUserManagement); } - return getParserForSingleFile(args.file, types, args.noUserManagement); + return await getParserForSingleFile(args.file, types, args.noUserManagement); } -function getParserForSingleFile(file, types, noUserManagement) { - return getXMIFileParser(file, types, noUserManagement); +async function getParserForSingleFile(file, types, noUserManagement) { + return await getXMIFileParser(file, types, noUserManagement); } -function getXMIFileParser(file, databaseType, noUserManagement) { +async function getXMIFileParser(file, databaseType, noUserManagement) { const root = getRootElement(readFileContent(file)); - const detectedEditor = EditorDetector.detect(root); + const detectedEditor = await EditorDetector.detect(root); return getFileParserByEditor(detectedEditor, root, databaseType, noUserManagement); } diff --git a/lib/helpers/question_asker.js b/lib/helpers/question_asker.js index 98d37ed..c66bc1d 100644 --- a/lib/helpers/question_asker.js +++ b/lib/helpers/question_asker.js @@ -78,11 +78,15 @@ function askConfirmation(args) { * @param args {object} keys: classes, choices, question, filterFunction * @return the choice. */ -function selectMultipleChoices(args) { +async function selectMultipleChoices(args) { + const result = await asyncfuncSelectMultipleChoices(args); + return result; +} + +async function asyncfuncSelectMultipleChoices(args) { args.choices = args.choices || prepareChoices(args.classes); - let result = null; const merged = merge(DEFAULTS.MULTIPLE_CHOICES, args); - inquirer.prompt([ + const answers = await inquirer.prompt([ { type: DEFAULTS.QUESTION_TYPES.CHECKBOX, name: 'answer', @@ -90,36 +94,16 @@ function selectMultipleChoices(args) { choices: merged.choices, filter: merged.filterFunction } - ]).then((answers) => { - if (answers.answer.length === 0) { + ]); + let result; + if (answers.answer.length === 0) { result = DEFAULTS.NOTHING; } else { result = answers.answer; } - }); - while (!result) { - wait(100); - } return result; } function prepareChoices(classes) { return Object.keys(classes).map(classId => classes[classId].name); } - -async function f1(time) { - const x = await delay(time); - return x === 'resolved'; -} - -function wait(time) { - f1(time); -} - -function delay(time) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve('resolved'); - }, time); - }); -} diff --git a/lib/jhipsteruml.js b/lib/jhipsteruml.js index 2ba053d..7dcfb01 100644 --- a/lib/jhipsteruml.js +++ b/lib/jhipsteruml.js @@ -66,87 +66,91 @@ if (!argv.db && !JHipsterUtils.isYoRcFilePresent()) { )['generator-jhipster'].databaseType; } -const noUserManagement = !!argv['skip-user-management']; -const parserData = ParserFactory.createParser(initParserFactoryArgs()); -const parser = parserData.parser; -const parsedData = parser.parse(parserData.data); - -const options = { - force: argv.f, - listDTO: (argv.dto) ? JHipsterOptionHelper.askForDTO(parsedData.classes, argv.dto) : {}, - listPagination: (argv.paginate) ? JHipsterOptionHelper.askForPagination(parsedData.classes, argv.paginate) : {}, - listService: (argv.service) ? JHipsterOptionHelper.askForService(parsedData.classes, argv.service) : {}, - listOfNoClient: (argv['skip-client']) ? JHipsterOptionHelper.askForClassesToSkipClientCode(parsedData.classes) : [], - listOfNoServer: (argv['skip-server']) ? JHipsterOptionHelper.askForClassesToSkipServerCode(parsedData.classes) : [], - angularSuffixes: (argv['angular-suffix']) ? JHipsterOptionHelper.askForAngularSuffixes(parsedData.classes, argv['angular-suffix']) : {}, - microserviceNames: (argv['microservice-name']) ? JHipsterOptionHelper.askForMicroserviceNames(parsedData.classes, argv['microservice-name']) : {}, - searchEngines: (argv['search-engine']) ? JHipsterOptionHelper.askForSearchEngines(parsedData.classes, argv['search-engine']) : {}, - fluentMethods: (argv['fluent-methods']) ? JHipsterOptionHelper.askForClassesWithFluentMethods(parsedData.classes) : [], - jpaMetamodelFiltering: (argv['jpa-metamodel-filtering']) ? JHipsterOptionHelper.askForClassesWithJPAMetamodelFiltering(parsedData.classes) : [] -}; - - -if (argv['to-jdl']) { - writeJdlFile(argv['to-jdl'], parsedData, options); - process.exit(0); -} - -const entities = EntityCreator.createEntities(parsedData, parserData.data.databaseTypes, options); - -const entityIdsByName = {}; -for (let i = 0, entityIds = Object.keys(parsedData.classes); i < parsedData.classNames.length; i++) { - entityIdsByName[parsedData.getClass(entityIds[i]).name] = entityIds[i]; -} -let entityNamesToGenerate = filterOutUnchangedEntities(entities, parsedData); - -if (JHipsterUMLFileHandler.isJHipsterUMLFilePresent()) { - if (entityNamesToGenerate.length !== 0) { - entityNamesToGenerate = getEntitiesToGenerate(entityNamesToGenerate); - } -} else { - options.force = true; - writeFile({ - fileName: 'jumlfile', - content: '' - }); -} - -exportToJSON(entities, values(entityIdsByName), parsedData, entityNamesToGenerate); -EntityGenerator.generateEntities(Object.keys(entities), parsedData.classes, entityNamesToGenerate, options); - -function initParserFactoryArgs() { - const parserFactoryArgs = { - databaseType: argv.db, - noUserManagement, - editor: argv.editor - }; - if (argv._.length >= 1) { - parserFactoryArgs.file = argv._[0]; - } else { - logger.error('At least one file to parse must be passed.'); - process.exit(1); - } - return parserFactoryArgs; -} -function filterOutUnchangedEntities(entities, parsedData) { - const onDiskEntities = JHipsterUtils.readJSONFiles(parsedData.classNames); - return parsedData.classNames.filter((name) => { - const currEntity = onDiskEntities[name]; - const newEntity = entities[entityIdsByName[name]]; - if (!newEntity) { - // if the entity is not in entities, we don't want it generated at all - return false; - } - if (!currEntity) { - return true; - } - return !areJHipsterEntitiesEqual(currEntity, newEntity); - }); -} -function writeJdlFile(fileName, parsedData, options) { - writeFile({ - fileName, - content: toJDLString(parsedData, options) - }); - logger.info(`The file '${fileName}' has been written.`); +async function main() { + + const noUserManagement = !!argv['skip-user-management']; + const parserData = await ParserFactory.createParser(initParserFactoryArgs()); + const parser = parserData.parser; + const parsedData = parser.parse(parserData.data); + + const options = { + force: argv.f, + listDTO: (argv.dto) ? JHipsterOptionHelper.askForDTO(parsedData.classes, argv.dto) : {}, + listPagination: (argv.paginate) ? JHipsterOptionHelper.askForPagination(parsedData.classes, argv.paginate) : {}, + listService: (argv.service) ? JHipsterOptionHelper.askForService(parsedData.classes, argv.service) : {}, + listOfNoClient: (argv['skip-client']) ? JHipsterOptionHelper.askForClassesToSkipClientCode(parsedData.classes) : [], + listOfNoServer: (argv['skip-server']) ? JHipsterOptionHelper.askForClassesToSkipServerCode(parsedData.classes) : [], + angularSuffixes: (argv['angular-suffix']) ? JHipsterOptionHelper.askForAngularSuffixes(parsedData.classes, argv['angular-suffix']) : {}, + microserviceNames: (argv['microservice-name']) ? JHipsterOptionHelper.askForMicroserviceNames(parsedData.classes, argv['microservice-name']) : {}, + searchEngines: (argv['search-engine']) ? JHipsterOptionHelper.askForSearchEngines(parsedData.classes, argv['search-engine']) : {}, + fluentMethods: (argv['fluent-methods']) ? JHipsterOptionHelper.askForClassesWithFluentMethods(parsedData.classes) : [], + jpaMetamodelFiltering: (argv['jpa-metamodel-filtering']) ? JHipsterOptionHelper.askForClassesWithJPAMetamodelFiltering(parsedData.classes) : [] + }; + + + if (argv['to-jdl']) { + writeJdlFile(argv['to-jdl'], parsedData, options); + process.exit(0); + } + + const entities = EntityCreator.createEntities(parsedData, parserData.data.databaseTypes, options); + + const entityIdsByName = {}; + for (let i = 0, entityIds = Object.keys(parsedData.classes); i < parsedData.classNames.length; i++) { + entityIdsByName[parsedData.getClass(entityIds[i]).name] = entityIds[i]; + } + let entityNamesToGenerate = filterOutUnchangedEntities(entities, parsedData); + + if (JHipsterUMLFileHandler.isJHipsterUMLFilePresent()) { + if (entityNamesToGenerate.length !== 0) { + entityNamesToGenerate = getEntitiesToGenerate(entityNamesToGenerate); + } + } else { + options.force = true; + writeFile({ + fileName: 'jumlfile', + content: '' + }); + } + + exportToJSON(entities, values(entityIdsByName), parsedData, entityNamesToGenerate); + EntityGenerator.generateEntities(Object.keys(entities), parsedData.classes, entityNamesToGenerate, options); + + function initParserFactoryArgs() { + const parserFactoryArgs = { + databaseType: argv.db, + noUserManagement, + editor: argv.editor + }; + if (argv._.length >= 1) { + parserFactoryArgs.file = argv._[0]; + } else { + logger.error('At least one file to parse must be passed.'); + process.exit(1); + } + return parserFactoryArgs; + } + function filterOutUnchangedEntities(entities, parsedData) { + const onDiskEntities = JHipsterUtils.readJSONFiles(parsedData.classNames); + return parsedData.classNames.filter((name) => { + const currEntity = onDiskEntities[name]; + const newEntity = entities[entityIdsByName[name]]; + if (!newEntity) { + // if the entity is not in entities, we don't want it generated at all + return false; + } + if (!currEntity) { + return true; + } + return !areJHipsterEntitiesEqual(currEntity, newEntity); + }); + } + function writeJdlFile(fileName, parsedData, options) { + writeFile({ + fileName, + content: toJDLString(parsedData, options) + }); + logger.info(`The file '${fileName}' has been written.`); + } } +main() From 4161c6d24547530d7f9d6012f20427a27d3da8f1 Mon Sep 17 00:00:00 2001 From: Guillaume Dufour Date: Sun, 27 Oct 2019 22:16:08 +0100 Subject: [PATCH 2/2] replace deasync by async await fix #266 --- lib/helpers/jhipster_option_helper.js | 64 +++++------ lib/helpers/question_asker.js | 12 +-- lib/jhipsteruml.js | 24 ++--- .../entities_to_generate_handler.js | 6 +- package-lock.json | 102 +++++++++++++++--- package.json | 2 +- 6 files changed, 138 insertions(+), 72 deletions(-) diff --git a/lib/helpers/jhipster_option_helper.js b/lib/helpers/jhipster_option_helper.js index ca8bb72..1bd6823 100644 --- a/lib/helpers/jhipster_option_helper.js +++ b/lib/helpers/jhipster_option_helper.js @@ -31,20 +31,20 @@ module.exports = { askForClassesWithJPAMetamodelFiltering }; -function askForClassesToPaginate(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToPaginate(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities you want to paginate with ${value}:` }); } -function askForPagination(classes, values) { +async function askForPagination(classes, values) { if (!(values instanceof Array)) { values = [values]; } const listPagination = {}; for (let i = 0; i < values.length; i++) { - const classesToPaginate = askForClassesToPaginate(classes, values[i]); + const classesToPaginate = await askForClassesToPaginate(classes, values[i]); for (let j = 0; j < classesToPaginate.length; j++) { listPagination[classesToPaginate[j]] = values[i]; } @@ -52,20 +52,20 @@ function askForPagination(classes, values) { return listPagination; } -function askForClassesToService(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToService(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities you want to add a service ${value ? `with ${value}` : ''}:` }); } -function askForService(classes, values) { +async function askForService(classes, values) { if (!(values instanceof Array)) { values = [values]; } const listService = {}; for (let i = 0; i < values.length; i++) { - const classesToService = askForClassesToService(classes, values[i]); + const classesToService = await askForClassesToService(classes, values[i]); for (let j = 0; j < classesToService.length; j++) { listService[classesToService[j]] = values[i]; } @@ -73,20 +73,20 @@ function askForService(classes, values) { return listService; } -function askForClassesToDto(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToDto(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities you want to generate the DTO with ${value}:` }); } -function askForDTO(classes, values) { +async function askForDTO(classes, values) { if (!(values instanceof Array)) { values = [values]; } const listDto = {}; for (let i = 0; i < values.length; i++) { - const classesToDto = askForClassesToDto(classes, values[i]); + const classesToDto = await askForClassesToDto(classes, values[i]); for (let j = 0; j < classesToDto.length; j++) { listDto[classesToDto[j]] = values[i]; } @@ -94,41 +94,41 @@ function askForDTO(classes, values) { return listDto; } -function askForClassesToSkipClientCode(classes) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToSkipClientCode(classes) { + return await QuestionAsker.selectMultipleChoices({ classes, question: 'Please choose the entities that won\'t have any client code:' }); } -function askForClassesWithFluentMethods(classes) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesWithFluentMethods(classes) { + return await QuestionAsker.selectMultipleChoices({ classes, question: 'Please choose the entities that will have fluent methods:' }); } -function askForClassesWithJPAMetamodelFiltering(classes) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesWithJPAMetamodelFiltering(classes) { + return await QuestionAsker.selectMultipleChoices({ classes, question: 'Please choose the entities that will be filtered (JPA metamodel filtering):' }); } -function askForClassesToSkipServerCode(classes) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToSkipServerCode(classes) { + return await QuestionAsker.selectMultipleChoices({ classes, question: 'Please choose the entities that won\'t have any server code:' }); } -function askForAngularSuffixes(classes, values) { +async function askForAngularSuffixes(classes, values) { if (!(values instanceof Array)) { values = [values]; } const angularSuffixes = {}; for (let i = 0; i < values.length; i++) { - const classesToSuffix = askForAngularSuffixesClasses(classes, values[i]); + const classesToSuffix = await askForAngularSuffixesClasses(classes, values[i]); for (let j = 0; j < classesToSuffix.length; j++) { angularSuffixes[classesToSuffix[j]] = values[i]; } @@ -136,20 +136,20 @@ function askForAngularSuffixes(classes, values) { return angularSuffixes; } -function askForAngularSuffixesClasses(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForAngularSuffixesClasses(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities you want to add an angular suffix with ${value}:` }); } -function askForMicroserviceNames(classes, values) { +async function askForMicroserviceNames(classes, values) { if (!(values instanceof Array)) { values = [values]; } const microserviceNames = {}; for (let i = 0; i < values.length; i++) { - const classesToTreat = askForMicroserviceNamesClasses(classes, values[i]); + const classesToTreat = await askForMicroserviceNamesClasses(classes, values[i]); for (let j = 0; j < classesToTreat.length; j++) { microserviceNames[classesToTreat[j]] = values[i]; } @@ -157,27 +157,27 @@ function askForMicroserviceNames(classes, values) { return microserviceNames; } -function askForMicroserviceNamesClasses(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForMicroserviceNamesClasses(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities included in microservice ${value}:` }); } -function askForClassesToBeSearched(classes, value) { - return QuestionAsker.selectMultipleChoices({ +async function askForClassesToBeSearched(classes, value) { + return await QuestionAsker.selectMultipleChoices({ classes, question: `Please choose the entities that can be searched with ${value}:` }); } -function askForSearchEngines(classes, values) { +async function askForSearchEngines(classes, values) { if (!(values instanceof Array)) { values = [values]; } const listSearchEngine = {}; for (let i = 0; i < values.length; i++) { - const classesToSearch = askForClassesToBeSearched(classes, values[i]); + const classesToSearch = await askForClassesToBeSearched(classes, values[i]); for (let j = 0; j < classesToSearch.length; j++) { listSearchEngine[classesToSearch[j]] = values[i]; } diff --git a/lib/helpers/question_asker.js b/lib/helpers/question_asker.js index c66bc1d..47af0d4 100644 --- a/lib/helpers/question_asker.js +++ b/lib/helpers/question_asker.js @@ -54,22 +54,18 @@ const DEFAULTS = { * @param args {object} keys: question, defaultValue * @return {boolean} the user's answer. */ -function askConfirmation(args) { +async function askConfirmation(args) { let userAnswer = 'no-answer'; const merged = merge(DEFAULTS.CONFIRMATIONS, args); - inquirer.prompt([ + const answers = await inquirer.prompt([ { type: DEFAULTS.QUESTION_TYPES.CONFIRM, name: 'choice', message: merged.question, default: merged.defaultValue } - ]).then((answer) => { - userAnswer = answer.choice; - }); - while (userAnswer === 'no-answer') { - wait(100); - } + ]); + userAnswer = answers.choice; return userAnswer; } diff --git a/lib/jhipsteruml.js b/lib/jhipsteruml.js index 7dcfb01..b2d5eab 100644 --- a/lib/jhipsteruml.js +++ b/lib/jhipsteruml.js @@ -71,20 +71,20 @@ async function main() { const noUserManagement = !!argv['skip-user-management']; const parserData = await ParserFactory.createParser(initParserFactoryArgs()); const parser = parserData.parser; - const parsedData = parser.parse(parserData.data); + const parsedData = await parser.parse(parserData.data); const options = { force: argv.f, - listDTO: (argv.dto) ? JHipsterOptionHelper.askForDTO(parsedData.classes, argv.dto) : {}, - listPagination: (argv.paginate) ? JHipsterOptionHelper.askForPagination(parsedData.classes, argv.paginate) : {}, - listService: (argv.service) ? JHipsterOptionHelper.askForService(parsedData.classes, argv.service) : {}, - listOfNoClient: (argv['skip-client']) ? JHipsterOptionHelper.askForClassesToSkipClientCode(parsedData.classes) : [], - listOfNoServer: (argv['skip-server']) ? JHipsterOptionHelper.askForClassesToSkipServerCode(parsedData.classes) : [], - angularSuffixes: (argv['angular-suffix']) ? JHipsterOptionHelper.askForAngularSuffixes(parsedData.classes, argv['angular-suffix']) : {}, - microserviceNames: (argv['microservice-name']) ? JHipsterOptionHelper.askForMicroserviceNames(parsedData.classes, argv['microservice-name']) : {}, - searchEngines: (argv['search-engine']) ? JHipsterOptionHelper.askForSearchEngines(parsedData.classes, argv['search-engine']) : {}, - fluentMethods: (argv['fluent-methods']) ? JHipsterOptionHelper.askForClassesWithFluentMethods(parsedData.classes) : [], - jpaMetamodelFiltering: (argv['jpa-metamodel-filtering']) ? JHipsterOptionHelper.askForClassesWithJPAMetamodelFiltering(parsedData.classes) : [] + listDTO: (argv.dto) ? await JHipsterOptionHelper.askForDTO(parsedData.classes, argv.dto) : {}, + listPagination: (argv.paginate) ? await JHipsterOptionHelper.askForPagination(parsedData.classes, argv.paginate) : {}, + listService: (argv.service) ? await JHipsterOptionHelper.askForService(parsedData.classes, argv.service) : {}, + listOfNoClient: (argv['skip-client']) ? await JHipsterOptionHelper.askForClassesToSkipClientCode(parsedData.classes) : [], + listOfNoServer: (argv['skip-server']) ? await JHipsterOptionHelper.askForClassesToSkipServerCode(parsedData.classes) : [], + angularSuffixes: (argv['angular-suffix']) ? await JHipsterOptionHelper.askForAngularSuffixes(parsedData.classes, argv['angular-suffix']) : {}, + microserviceNames: (argv['microservice-name']) ? await JHipsterOptionHelper.askForMicroserviceNames(parsedData.classes, argv['microservice-name']) : {}, + searchEngines: (argv['search-engine']) ? await JHipsterOptionHelper.askForSearchEngines(parsedData.classes, argv['search-engine']) : {}, + fluentMethods: (argv['fluent-methods']) ? await JHipsterOptionHelper.askForClassesWithFluentMethods(parsedData.classes) : [], + jpaMetamodelFiltering: (argv['jpa-metamodel-filtering']) ? await JHipsterOptionHelper.askForClassesWithJPAMetamodelFiltering(parsedData.classes) : [] }; @@ -103,7 +103,7 @@ async function main() { if (JHipsterUMLFileHandler.isJHipsterUMLFilePresent()) { if (entityNamesToGenerate.length !== 0) { - entityNamesToGenerate = getEntitiesToGenerate(entityNamesToGenerate); + entityNamesToGenerate = await getEntitiesToGenerate(entityNamesToGenerate); } } else { options.force = true; diff --git a/lib/jhipsteruml/entities_to_generate_handler.js b/lib/jhipsteruml/entities_to_generate_handler.js index ad89698..7e66b77 100644 --- a/lib/jhipsteruml/entities_to_generate_handler.js +++ b/lib/jhipsteruml/entities_to_generate_handler.js @@ -24,17 +24,17 @@ module.exports = { getEntitiesToGenerate }; -function getEntitiesToGenerate(entityNames) { +async function getEntitiesToGenerate(entityNames) { if (!entityNames || entityNames.length === 0) { return []; } logger.info(`The following ${entityNames.length === 1 ? 'class has' : 'classes have'} changed: ${entityNames.join(', ')}.`); if (entityNames.length === 1) { - return QuestionAsker.askConfirmation({ question: `Generate ${entityNames[0]}?`, defaultValue: true }) + return await QuestionAsker.askConfirmation({ question: `Generate ${entityNames[0]}?`, defaultValue: true }) ? entityNames : []; } - return QuestionAsker.selectMultipleChoices({ + return await QuestionAsker.selectMultipleChoices({ choices: entityNames, question: 'Select the entities to override.' }); diff --git a/package-lock.json b/package-lock.json index 7416f89..b3e055d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -247,6 +247,21 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -328,11 +343,11 @@ "dev": true }, "chevrotain": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-4.3.3.tgz", - "integrity": "sha512-DsmAmF5urXboHHXqEr26Ot//S+l3yrOr7UwwgWQ+aNNlYpmnYK1flxplwJ5cIUgP9toKFsJ0VeLT1sq350A9Hg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-4.1.0.tgz", + "integrity": "sha512-iwuK4FOV+vZlvKonoXVw6G+rXJm4jWk17aJFkm6FloVYcVSrAaJLdCdQo+IIyX98jm0WJVcdK9cllRZQpNBnBg==", "requires": { - "regexp-to-ast": "0.4.0" + "regexp-to-ast": "0.3.5" } }, "cli-cursor": { @@ -425,6 +440,11 @@ "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, "colorspace": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", @@ -1159,9 +1179,9 @@ } }, "fs-extra": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz", - "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -1540,20 +1560,70 @@ } }, "jhipster-core": { - "version": "3.6.14", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.6.14.tgz", - "integrity": "sha512-X8rQ1hPXMaj9ri4QvbGyUmbMOAsLn2dbJQH14dE/A/4HBT+ODBu83ptQCLXtSmysumyqgHrOiHiLVYa3Qq74rg==", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.6.6.tgz", + "integrity": "sha512-ESL1t7i1HlPJAtyCRvN7Ry1Z9llCDoLz9mCWSjxHWDBKf1QgfwCf5KjjprGAQTOCvTlxM+iLQi0SAF02Wi2yTQ==", "requires": { - "chevrotain": "4.3.3", - "fs-extra": "8.0.1", + "chevrotain": "4.1.0", + "fs-extra": "7.0.1", "lodash": "4.17.11", - "winston": "3.2.1" + "winston": "3.1.0" }, "dependencies": { "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "winston": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz", + "integrity": "sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==", + "requires": { + "async": "^2.6.0", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^1.9.1", + "one-time": "0.0.4", + "readable-stream": "^2.3.6", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.2.0" + } } } }, @@ -2546,9 +2616,9 @@ } }, "regexp-to-ast": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz", - "integrity": "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==" + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.3.5.tgz", + "integrity": "sha512-1CJygtdvsfNFwiyjaMLBWtg2tfEqx/jSZ8S6TV+GlNL8kiH8rb4cm5Pb7A/C2BpyM/fA8ZJEudlCwi/jvAY+Ow==" }, "regexpp": { "version": "2.0.1", diff --git a/package.json b/package.json index adc06cd..b4076cd 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "dependencies": { "chalk": "2.4.2", "inquirer": "6.3.1", - "jhipster-core": "3.6.14", + "jhipster-core": "3.6.6", "lodash": "4.17.13", "winston": "3.2.1", "xml2js": "0.4.19",