From 4161c6d24547530d7f9d6012f20427a27d3da8f1 Mon Sep 17 00:00:00 2001 From: Guillaume Dufour Date: Sun, 27 Oct 2019 22:16:08 +0100 Subject: [PATCH] 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",